An emulator, assembler, and disassembler for the Sega Game Gear
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

64 lignes
1.4 KiB

  1. /* Copyright (C) 2014-2017 Ben Kurtovic <ben.kurtovic@gmail.com>
  2. Released under the terms of the MIT License. See LICENSE for details. */
  3. #pragma once
  4. #include <stdbool.h>
  5. #include <stdint.h>
  6. #include "io.h"
  7. #include "mmu.h"
  8. #include "psg.h"
  9. #include "rom.h"
  10. #include "save.h"
  11. #include "z80.h"
  12. #define GG_SCREEN_WIDTH 160
  13. #define GG_SCREEN_HEIGHT 144
  14. #define GG_FPS 60
  15. #define GG_EXC_BUFF_SIZE 128
  16. /* Structs, etc. */
  17. struct GameGear;
  18. typedef void (*GGFrameCallback)(struct GameGear*);
  19. typedef struct GameGear {
  20. Z80 cpu;
  21. MMU mmu;
  22. VDP vdp;
  23. PSG psg;
  24. IO io;
  25. bool powered;
  26. GGFrameCallback callback;
  27. char exc_buffer[GG_EXC_BUFF_SIZE];
  28. } GameGear;
  29. typedef enum {
  30. BUTTON_UP = 0,
  31. BUTTON_DOWN = 1,
  32. BUTTON_LEFT = 2,
  33. BUTTON_RIGHT = 3,
  34. BUTTON_TRIGGER_1 = 4,
  35. BUTTON_TRIGGER_2 = 5,
  36. BUTTON_START
  37. } GGButton;
  38. /* Functions */
  39. GameGear* gamegear_create();
  40. void gamegear_destroy(GameGear*);
  41. void gamegear_load_rom(GameGear*, const ROM*);
  42. void gamegear_load_save(GameGear*, Save*);
  43. void gamegear_simulate(GameGear*);
  44. void gamegear_input(GameGear*, GGButton, bool);
  45. void gamegear_power_off(GameGear*);
  46. void gamegear_attach_callback(GameGear*, GGFrameCallback);
  47. void gamegear_attach_display(GameGear*, uint32_t*);
  48. void gamegear_detach(GameGear*);
  49. const char* gamegear_get_exception(GameGear*);
  50. void gamegear_print_state(const GameGear*);