From 8a7c439c15fd21d18db5d28dcb708a3e003b5d2a Mon Sep 17 00:00:00 2001 From: Denis Nutiu Date: Tue, 7 Jan 2025 14:34:29 +0200 Subject: [PATCH] update README.md --- README.md | 2 ++ chip8-project.png | Bin 0 -> 43016 bytes 2 files changed, 2 insertions(+) create mode 100644 chip8-project.png diff --git a/README.md b/README.md index beb044d..6d75390 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Chip8 Emulator +![logo](./chip8-project.png) + A Chip8 emulator written in [Rust](https://www.rust-lang.org/) (1.83.0) for learning and educational purposes. In turns inside your Terminal and the code can be easily modified to run in other envionments. diff --git a/chip8-project.png b/chip8-project.png new file mode 100644 index 0000000000000000000000000000000000000000..89aac1735603dbd76c5686ed70d2dd5864ba4767 GIT binary patch literal 43016 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