From e6c92fd38bdce2fb27e76ec3b63e5b027f106a54 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Tue, 3 May 2016 23:40:47 -0500 Subject: [PATCH] Minor cleanup; expand docs. --- README.md | 19 +++++++++++++++++++ docs/README | 4 ++++ docs/tailsadventure.png | Bin 0 -> 67783 bytes src/config.c | 9 +++++---- src/emulator.c | 2 +- src/vdp.c | 4 +++- 6 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 docs/README create mode 100644 docs/tailsadventure.png diff --git a/README.md b/README.md index f21dd76..c16f159 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ crater **crater** is an emulator for the [Sega Game Gear][game gear], with an included [Z80][z80] assembler/disassembler, written in C. +![Tails Adventure (1995)](/docs/tailsadventure.png?raw=true "Tails Adventure (1995)") + [game gear]: https://en.wikipedia.org/wiki/Sega_Game_Gear [z80]: https://en.wikipedia.org/wiki/Zilog_Z80 @@ -82,6 +84,23 @@ the input file, with the extension replaced with `.gg` for `-a` and `.asm` for `-d`. By default, this will never overwrite the original filename; pass `--overwrite` (`-r`) to let crater do so. +Status +------ + +The emulator is almost fully functional, lacking only audio support, a few +uncommon CPU instructions, and some advanced graphics features. Most games are +playable with only minor bugs. Future goals include save states and a more +sophisticated debugging mode. + +The assembler is complete. Future goals include more documentation, macros, and +additional directives. + +The disassembler works, but can't differentiate between code and data yet, so +it's not very useful. + +The testing infrasture is limited. The assembler has decent coverage, other +components minimal. + Credits ------- diff --git a/docs/README b/docs/README new file mode 100644 index 0000000..87245f6 --- /dev/null +++ b/docs/README @@ -0,0 +1,4 @@ +More detailed documentation isn't available yet. All your questions are +answered in the main README. + +At the moment, this directory contains supporting content for said README. diff --git a/docs/tailsadventure.png b/docs/tailsadventure.png new file mode 100644 index 0000000000000000000000000000000000000000..f851e30f83957ba2f03d949faa2f29bcfadd273b GIT binary patch literal 67783 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

ly7te%w8*n15|@ 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 E0Dg6OO8@`> literal 0 HcmV?d00001 diff --git a/src/config.c b/src/config.c index 8cda225..eef8956 100644 --- a/src/config.c +++ b/src/config.c @@ -39,10 +39,11 @@ static void print_help(const char *arg1) " to show more detailed logs, including an emulator trace\n" " -s, --scale scale the game screen by an integer factor\n" " (applies to windowed mode only; defaults to 4)\n" -" -a, --assemble [] convert z80 assembly source code into a\n" -" binary file that can be run by crater\n" -" -d, --disassemble [] convert a binary file into z80 assembly\n" -" source code\n" +" -a, --assemble []\n" +" convert z80 assembly source code into a binary file that\n" +" can be run by crater\n" +" -d, --disassemble []\n" +" convert a binary file into z80 assembly source code\n" " -r, --overwrite allow crater to write assembler output to the same\n" " filename as the input\n", arg1); diff --git a/src/emulator.c b/src/emulator.c index 3f430d7..deff1d5 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -42,7 +42,7 @@ static void setup_graphics(bool fullscreen, unsigned scale) if (fullscreen) flags = SDL_WINDOW_FULLSCREEN_DESKTOP; else - flags = SDL_WINDOW_BORDERLESS|SDL_WINDOW_RESIZABLE; + flags = SDL_WINDOW_RESIZABLE; SDL_CreateWindowAndRenderer( scale * GG_SCREEN_WIDTH, scale * GG_SCREEN_HEIGHT, diff --git a/src/vdp.c b/src/vdp.c index a43afe6..32edfaa 100644 --- a/src/vdp.c +++ b/src/vdp.c @@ -216,6 +216,8 @@ static void draw_background(VDP *vdp) bool vflip = tile & 0x0400; bool hflip = tile & 0x0200; + (void) priority; // TODO + uint8_t vshift = vflip ? (7 - src_row % 8) : (src_row % 8), hshift; uint8_t pixel, index; int16_t dst_col; @@ -275,7 +277,7 @@ static void draw_sprites(VDP *vdp) pattern |= (vdp->v_counter - y) >> 3; vshift = (vdp->v_counter - y) % 8; } else { - FATAL("TODO: sprite doubling") + // TODO: sprite doubling } uint8_t pixel, index;