Chirp/readme.md

75 lines
2.2 KiB
Markdown
Raw Normal View History

# Chirp
2023-03-10 21:33:02 +00:00
How does an emulator work?
I don't know!
So I wrote this, to see if i can find out.
## Features:
- 32 * 64 1bpp pixel display, scaled 16x
- Full coverage of the original Chip-8 insn set
- 64-bit floating point internal sound/delay timers
- Pause/Resume
- Set and unset breakpoints
- A fairly nice command-line interface
## Keybinds:
- F1: Dump CPU registers
- F2: Dump screen to terminal
- F3: Dump screen to file
- F4: Enable/Disable live disassembly
- F5: Pause/Resume
- F6: Single-step instruction
- F7: Set breakpoint at current instruction
- F8: Unset breakpoint at current instruction
- F9: Soft-reset the CPU
## Keypad mapping:
### QWERTY:
| | | | |
|---|---|---|---|
| 1 | 2 | 3 | 4 |
| Q | W | E | R |
| A | S | D | F |
| Z | X | C | V |
### Chip-8:
| | | | |
|---|---|---|---|
| 1 | 2 | 3 | C |
| 4 | 5 | 6 | D |
| 7 | 8 | 9 | E |
| A | 0 | B | F |
## Command Line Interface:
```
Usage: chirp [OPTIONS]
Positional arguments:
file Load a ROM to run on Chirp.
Optional arguments:
-h, --help Print this help message.
-d, --debug Enable debug mode at startup.
-p, --pause Enable pause mode at startup.
-s, --speed SPEED Set the instructions-per-frame rate.
-S, --step STEP Run the emulator as fast as possible for `step` instructions.
-z, --vfreset Disable setting vF to 0 after a bitwise operation.
-x, --drawsync Disable waiting for vblank after issuing a draw call.
-c, --memory Use CHIP-48 style DMA instructions, which don't touch I.
-v, --shift Use CHIP-48 style bit-shifts, which don't touch vY.
-b, --jumping Use SUPER-CHIP style indexed jump, which is indexed relative to v[adr].
-B, --break BP Set breakpoints for the emulator to stop at.
-D, --data WORD Load additional word at address 0x1fe
-f, --frame-rate FR Set the target framerate. (default: 60)
```
## TODO:
- [ ] Implement sound
- [ ] Finish unit tests for "quirks"
- [ ] Make pausing/unpausing the emulator less messy
- [ ] Make resetting the emulator possible
- [ ] Allow code to be passed in hex on the command line? Hmm
- [ ] Assembler for my assembly syntax
- [ ] Make a UI for realtime configuration
- [ ] Cycle accuracy with original Chip-8 interpreter