An emulator, assembler, and disassembler for the Sega Game Gear
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 

60 wiersze
1.2 KiB

  1. /* Copyright (C) 2014-2015 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. typedef enum {
  7. AT_REGISTER,
  8. AT_IMMEDIATE,
  9. AT_INDIRECT,
  10. AT_INDEXED,
  11. AT_LABEL,
  12. AT_CONDITION
  13. } ASMArgType;
  14. typedef enum {
  15. REG_A, REG_F, REG_B, REG_C, REG_D, REG_E, REG_H, REG_L, REG_I, REG_R,
  16. REG_AF, REG_BC, REG_DE, REG_HL, REG_IX, REG_IY,
  17. REG_PC, REG_SP,
  18. REG_AF_, REG_IXH, REG_IXL, REG_IYH, REG_IYL
  19. } ASMArgRegister;
  20. typedef struct {
  21. uint16_t value;
  22. bool is_negative;
  23. } ASMArgImmediate;
  24. typedef struct {
  25. bool is_reg;
  26. ASMArgRegister reg;
  27. ASMArgImmediate imm;
  28. } ASMArgIndirect;
  29. typedef struct {
  30. ASMArgRegister reg;
  31. ASMArgImmediate imm;
  32. } ASMArgIndexed;
  33. typedef char* ASMArgLabel;
  34. typedef enum {
  35. COND_NZ, COND_N, COND_NC, COND_C, COND_PO, COND_PE, COND_P, COND_M
  36. } ASMArgCondition;
  37. typedef union {
  38. ASMArgRegister reg;
  39. ASMArgImmediate imm;
  40. ASMArgIndirect indirect;
  41. ASMArgIndexed index;
  42. ASMArgLabel label;
  43. ASMArgCondition cond;
  44. } ASMArgData;
  45. typedef struct {
  46. ASMArgType type;
  47. ASMArgData data;
  48. } ASMInstArg;