![](https://private-user-images.githubusercontent.com/73549035/331758582-12184a9b-ce9b-4372-bd30-b04b3c753e5d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIxNjQwNzUsIm5iZiI6MTcyMjE2Mzc3NSwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NTg1ODItMTIxODRhOWItY2U5Yi00MzcyLWJkMzAtYjA0YjNjNzUzZTVkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI4VDEwNDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZjZDdlMmE3MzM4Y2NjYWY3MGZmNzgzYzZkM2VjOTUwMTU4NzY3OTg3NzY2Y2EyYWJhMGY2NzlkYzU2NDFkMTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Kw0huUr0OwcdpYaLHYRBqW9Pt0gn-gwGYoxmylV_ZV4)
I created this virtual machine/emulator as an exercise, and to familiarize myself with JavaFX, emulator design, and machine code.
- Emulation of the original Chip8 specification
- Clean JavaFX-based user interface
- Ability to enable and disable "quirks"
- Implemented quirks:
- Shift Quirk
- Memory Increment by X Quirk
- Leave I Unchanged Quirk
- Jump Quirk
- Wrap Quirk
- Math VF Reset Quirk
- Implemented quirks:
- Save States
- Sound (simple beeper)
- Pausing
- Configuration of emulation as well as emulator itself
- Saved to system using Java Preferences API, persistent when reopening
- Configurable screen size multiplication factor
- Configurable emulation speed
- Configurable keybinds for hexadecimal keypad
- Configurable colors
- SuperChip and other specifications are not implemented
- Save states made on older versions are not compatible with newer releases of the emulator
- Limitation of Java serialization
- Beeper may not sound properly on certain devices
- Was a hasty modification of an existing sound implementation from Michael Arnauts
- Emulator is only compatible with compiled binaries in .rom format, not chip8 assembly files
- Emulation speed may not be consistent
- Keypad input may cause a momentary stutter in emulation
The "LOAD GAME" screen that shows when opening the emulator is actually a Chip8 ROM that I programmed myself in hex! The emulator loads it up by default and runs it after starting up.
Project was created and tested on an M2 Macbook Pro 14 running MacOS.
![](https://private-user-images.githubusercontent.com/73549035/331758539-3f7959a4-a07a-4c2b-bf27-8d30c1d5fd07.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIxNjQwNzUsIm5iZiI6MTcyMjE2Mzc3NSwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NTg1MzktM2Y3OTU5YTQtYTA3YS00YzJiLWJmMjctOGQzMGMxZDVmZDA3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI4VDEwNDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYxNGUwODA5ZGJlMTMzM2QyNTliZWQ0ZGRkOGEyZjk5Mzk3ZTJjY2EyZGEyNmIzMjZjY2UxNGRhYzQyZDcwNGMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.5M9soosOTdCU-Pk8og8cemwvSMnMBpFufawYTvooOV8)
![](https://private-user-images.githubusercontent.com/73549035/331760203-a2b85210-eb99-452c-aa92-d167b9c62b7e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIxNjQwNzUsIm5iZiI6MTcyMjE2Mzc3NSwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NjAyMDMtYTJiODUyMTAtZWI5OS00NTJjLWFhOTItZDE2N2I5YzYyYjdlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI4VDEwNDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE3NGNiYTc4MzA1NzA4Y2I1ZWQ1YWZkYmQ4ZWQ0NDQ5ZTFmZjA0YzZhOGViNWNjMGUzYTNlOTk2YTEzZmY2YmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.-_lc6FkVp9x86WQ0WnFlDCnTdv8goIxmXYt_vdz-mf0)
![](https://private-user-images.githubusercontent.com/73549035/331760294-43ab8f33-c67f-4fc7-937b-b4b08e18632c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIxNjQwNzUsIm5iZiI6MTcyMjE2Mzc3NSwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NjAyOTQtNDNhYjhmMzMtYzY3Zi00ZmM3LTkzN2ItYjRiMDhlMTg2MzJjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI4VDEwNDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJkNTUyZGRjZTA5YmYyMjM5YzAzN2ZjZjgxZGE0NzMzZjE5MzQxNzA0OWY3YzA0NDMzYzU0YTdlYmQ5YWYxY2QmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.tcevL_u_i2-SgoJQAlr5ZToUAl7kbJxrCqKlFV-bUiQ)
![](https://private-user-images.githubusercontent.com/73549035/331766974-3b7d5acb-87ed-4cd0-a50a-54ed37dd7093.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIxNjQwNzUsIm5iZiI6MTcyMjE2Mzc3NSwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NjY5NzQtM2I3ZDVhY2ItODdlZC00Y2QwLWE1MGEtNTRlZDM3ZGQ3MDkzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI4VDEwNDkzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc0MWM3NzFkNDc2YmIzYjFhZTcyNmE2NzQ1Mzc0MWMwYjEzMTkxNzgzY2Y4OWM4Mjk0NzdkY2ExMzc5NWNhN2YmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OEhByto78dPTzoF3cR8wLEX0_DI_kUZbtt90WDrLUtU)
Below is a short list of resources I referenced in order to create this implementation:
- https://en.wikipedia.org/wiki/CHIP-8
- https://github.com/chip-8/chip-8-database
- https://github.com/michaelarnauts/chip8-java/blob/master/Source/src/be/khleuven/arnautsmichael/chip8/ISound.java
- http://devernay.free.fr/hacks/chip8/C8TECH10.HTM
- https://github.com/Timendus/chip8-test-suite
- https://austinmorlan.com/posts/chip8_emulator/
- https://multigesture.net/articles/how-to-write-an-emulator-chip-8-interpreter/
- EmuDev discord server