An emulator, assembler, and disassembler for the Sega Game Gear
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

README.md 3.9 KiB

10 yıl önce
10 yıl önce
10 yıl önce
10 yıl önce
9 yıl önce
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. crater
  2. ======
  3. **crater** is an emulator for the [Sega Game Gear][game gear], with an included
  4. [Z80][z80] assembler/disassembler, written in C.
  5. [game gear]: https://en.wikipedia.org/wiki/Sega_Game_Gear
  6. [z80]: https://en.wikipedia.org/wiki/Zilog_Z80
  7. Why?
  8. ----
  9. While the internet is full of emulators for retro game systems, writing one is
  10. nevertheless a fun learning project.
  11. crater is named after [31 Crateris][crateris], a star that was – for a short
  12. time in 1974 – misidentified as [a moon of Mercury][moon]. Mercury was Sega's
  13. codename for the Game Gear during development.
  14. [crateris]: http://www.astrostudio.org/xhip.php?hip=58587
  15. [moon]: https://en.wikipedia.org/wiki/Mercury%27s_moon
  16. Installing
  17. ----------
  18. Only OS X and Linux are tested. You'll need a modern compiler that supports C11
  19. ([clang][clang] preferred) and [SDL 2][sdl2]. Using Homebrew, you can
  20. `brew install sdl2`; using apt, you can `apt-get install libsdl2-dev`.
  21. Run `make` to create `./crater`. To build the development version with debug
  22. symbols and no optimizations, run `make DEBUG=1`, which creates `./crater-dev`.
  23. crater has a number of test cases. Run the entire suite with `make test`;
  24. individual components can be tested by doing `make test-{component}`, where
  25. `{component}` is one of `cpu`, `vdp`, `psg`, `asm`, `dis`, or `integrate`.
  26. [clang]: http://clang.llvm.org/
  27. [sdl2]: https://www.libsdl.org/
  28. Usage
  29. -----
  30. Running `./crater` without arguments will display a list of ROM images located
  31. in the `roms/` directory, and then ask the user to pick one, or enter their own
  32. ROM path. You can provide a path directly with `./crater path/to/rom`.
  33. Add or symlink ROMs to `roms/` at your leisure. Note that they must end in
  34. `.gg` or `.bin` to be auto-detected.
  35. Add `--fullscreen` (`-f`) to enable fullscreen mode, or `--scale <n>`
  36. (`-s <n>`) to scale the game screen by an integer factor in windowed mode (this
  37. only sets the starting configuration; the window should be resizeable).
  38. Add `--debug` (`-g`) to show logging information while running. Pass it twice
  39. (`-gg`) to show more detailed logs, including an emulator trace.
  40. `./crater -h` gives (fairly basic) command-line usage, and `./crater -v` gives
  41. the current version.
  42. ### Key mapping
  43. Custom key mappings are not supported. There are two primary configurations I
  44. like:
  45. - `Return`/`Esc` for `Start`; `WASD` for D-pad; `.` for `1`/left trigger;
  46. `/` for `2`/right trigger
  47. - `Return`/`Esc` for `Start`; arrow keys for D-pad; `Z` for `1`/left trigger;
  48. `X` for `2`/right trigger
  49. You can switch between them freely.
  50. ### Assembler/Disassembler
  51. crater has built-in support for converting Z80 assembly into ROM images, as
  52. well as attempting the reverse process (i.e., disassembling).
  53. `--assemble <input> [<output>]` (`-a`) converts source code into a `.gg` binary
  54. that can be run by crater. `--disassemble <input> [<output>]` (`-d`) executes
  55. the opposite operation. If no output file is given, crater will use the name of
  56. the input file, with the extension replaced with `.gg` for `-a` and `.asm` for
  57. `-d`. By default, this will never overwrite the original filename; pass
  58. `--overwrite` (`-r`) to let crater do so.
  59. Credits
  60. -------
  61. Special thanks to [SMS Power!][sms_power]'s excellent [development][sms_dev]
  62. section, which has been invaluable in figuring out many of the Game Gear's
  63. details, including ROM header structure and the memory mapping system. Various
  64. source code comments reference their pages.
  65. Also thanks to [Thomas Scherrer's Z80 website][scherrer] for many useful
  66. resources about the Game Gear's CPU, including info about
  67. [undocumented opcodes][undoc_ops] and [flags][undoc_flags]. Finally, credit
  68. goes to [ClrHome][clrhome] for their helpful Z80 [instruction table][clrtab].
  69. [sms_power]: http://www.smspower.org/
  70. [sms_dev]: http://www.smspower.org/Development/Index
  71. [scherrer]: http://z80.info/
  72. [undoc_ops]: http://www.z80.info/z80undoc.htm
  73. [undoc_flags]: http://z80.info/z80sflag.htm
  74. [clrhome]: http://clrhome.org/
  75. [clrtab]: http://clrhome.org/table/