![](https://private-user-images.githubusercontent.com/73549035/331758582-12184a9b-ce9b-4372-bd30-b04b3c753e5d.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMDEwNzYsIm5iZiI6MTcxOTEwMDc3NiwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NTg1ODItMTIxODRhOWItY2U5Yi00MzcyLWJkMzAtYjA0YjNjNzUzZTVkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjIyVDIzNTkzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc2MmM3NTM0MTA1NGFkZjEyYzE5Y2VlNTRjZDA3OTdmMjVmZmJmYmFkNmE4ZGNiZWJlN2M3NjY2OGI3NjRkMmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ijBnzWG212MtVuwNBAdcmSeS0NBkJOZ9w_5HN28d3Tc)
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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMDEwNzYsIm5iZiI6MTcxOTEwMDc3NiwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NTg1MzktM2Y3OTU5YTQtYTA3YS00YzJiLWJmMjctOGQzMGMxZDVmZDA3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjIyVDIzNTkzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQzMWVhODlmZDhhYWM1YTM2Mjc0NDVlYTU3NzAzZmQ1ZTE5YWVjZGFmNGFiOGE4MWM1YTI5YzA2MzVkMzA0MDAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.tAlpfP-CZ7OSnNgimxdWNG7DdeTSEQmChJb1Srjf8Xo)
![](https://private-user-images.githubusercontent.com/73549035/331760203-a2b85210-eb99-452c-aa92-d167b9c62b7e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMDEwNzYsIm5iZiI6MTcxOTEwMDc3NiwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NjAyMDMtYTJiODUyMTAtZWI5OS00NTJjLWFhOTItZDE2N2I5YzYyYjdlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjIyVDIzNTkzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMwMDMxZjc1ZmY3N2Q1M2RjNDNkMGE5OWQ0MTI2NDhlOWNiYzU5MmEwM2I1OTRiYjc3ZWU3MjhhMTQxYTFiOWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.4HM7OHZDBYAC6clr0afvd-wH-keZxFPkQcScl-Eo5Gg)
![](https://private-user-images.githubusercontent.com/73549035/331760294-43ab8f33-c67f-4fc7-937b-b4b08e18632c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMDEwNzYsIm5iZiI6MTcxOTEwMDc3NiwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NjAyOTQtNDNhYjhmMzMtYzY3Zi00ZmM3LTkzN2ItYjRiMDhlMTg2MzJjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjIyVDIzNTkzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWZhMTVhZTE1NmM3NDQwN2E5NDE3N2RkYmFlMjlmNTRjNjBjYWJkYTU3NjdmMWMyZTcxYzRlMmQ1MzBmYjM0NGImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.HJDqW1eN1PdyvOjO1aI8t216iq8YiyvCyXn9-UTX4X4)
![](https://private-user-images.githubusercontent.com/73549035/331766974-3b7d5acb-87ed-4cd0-a50a-54ed37dd7093.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTkxMDEwNzYsIm5iZiI6MTcxOTEwMDc3NiwicGF0aCI6Ii83MzU0OTAzNS8zMzE3NjY5NzQtM2I3ZDVhY2ItODdlZC00Y2QwLWE1MGEtNTRlZDM3ZGQ3MDkzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MjIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjIyVDIzNTkzNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFhYmI0ZjFmYTM5ZjI5MGVmOTlkYzRiNTg5YzA5OTAwOWM2YTdjY2Y3NTg4ZDYzNzYzMzBkN2ExYWU2MTdiNWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.PxkH6Jz4dKAant4DG-m1uqdnFdgYSkHyrGffgNAV95M)
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