From f90f1c49cc4308a3ec0c1963182694326cfd3dd9 Mon Sep 17 00:00:00 2001 From: John Breaux Date: Mon, 27 Mar 2023 17:54:48 -0500 Subject: [PATCH] readme.md: Update readme.md with useful information --- readme.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index e370f95..24aa5f1 100644 --- a/readme.md +++ b/readme.md @@ -1,12 +1,75 @@ -# Chumpulator +# Chirp How does an emulator work? I don't know! So I wrote this, to see if i can find out. -### TODO: -- Timing (insns should run at about 500Hz) -- Screen (Memory is present, drawing sprites is not) -- Sound (Beep boop, how to make noise?) -- Which abstractions are useful? +## 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 \ No newline at end of file