6502

minimal 6502 emulator written in C
Index Commits Files Refs README LICENSE
6502.h (2676B)
   1 #ifndef _6502_H
   2 #define _6502_H
   3 
   4 #include <stdint.h>
   5 
   6 /* Instruction */
   7 typedef struct {
   8     char *name;
   9     uint8_t (*op)(void);
  10     uint8_t (*mode)(void);
  11     uint8_t cycles;
  12 } INS;
  13 
  14 typedef struct {
  15     uint8_t ac, x, y, sp, st;
  16     uint16_t pc;
  17 } CPU;
  18 
  19 /* zero-page: fast shorter instructions
  20  * first-page: stack;
  21  * last-six bytes: used to store special addresses */
  22 typedef struct {
  23     uint8_t ram[0x10000]; /* 64kb memory */
  24 } MEM;
  25 
  26 /* 6502 status register flags */
  27 typedef enum {
  28     C,    /* Carry */
  29     Z,    /* Zero  */
  30     I,    /* Disable interrupts  */
  31     D,    /* Decimal mode  */
  32     B,    /* Break */
  33     U,    /* Unused */
  34     V,    /* Overflow */
  35     N     /* Negative */
  36 } ST_FLAG;
  37 
  38 char *CPU_mode_name(uint8_t (*mode)(void));
  39 uint16_t CPU_get_pc(void);
  40 uint8_t CPU_exec(INS ins);
  41 uint8_t CPU_get_flag(ST_FLAG flag);
  42 void CPU_branch(void);
  43 void CPU_dump(void);
  44 void CPU_fetch(INS *ins);
  45 void CPU_init(void);
  46 void CPU_irq(void);
  47 void CPU_nm_irq(void);
  48 void CPU_reset(void);
  49 void CPU_set_flag(ST_FLAG flag, uint8_t val);
  50 
  51 void MEM_init(void);
  52 void MEM_set_pc_start(uint16_t addr);
  53 uint8_t MEM_read(uint16_t addr);
  54 uint8_t MEM_write(uint16_t addr, uint8_t val); /* returns written value */
  55 void MEM_dump(void);
  56 void MEM_dump_page(uint16_t page);
  57 void MEM_dump_last_six(void);
  58 int MEM_load_from_file(char *fp);
  59 
  60 
  61 void print_reg(uint8_t);
  62 
  63 
  64 /*  Addresing modes  */
  65 uint8_t ABS(void);
  66 uint8_t ABX(void);
  67 uint8_t ABY(void);
  68 uint8_t IMM(void);
  69 uint8_t IMP(void);
  70 uint8_t IND(void);
  71 uint8_t IZX(void);
  72 uint8_t IZY(void);
  73 uint8_t REL(void);
  74 uint8_t ZP0(void);
  75 uint8_t ZPX(void);
  76 uint8_t ZPY(void);
  77 
  78 
  79 /* Opcodes */
  80 uint8_t ADC(void);
  81 uint8_t AND(void);
  82 uint8_t ASL(void);
  83 uint8_t BCC(void);
  84 uint8_t BCS(void);
  85 uint8_t BEQ(void);
  86 uint8_t BIT(void);
  87 uint8_t BMI(void);
  88 uint8_t BNE(void);
  89 uint8_t BPL(void);
  90 uint8_t BRK(void);
  91 uint8_t BVC(void);
  92 uint8_t BVS(void);
  93 uint8_t CLC(void);
  94 uint8_t CLD(void);
  95 uint8_t CLI(void);
  96 uint8_t CLV(void);
  97 uint8_t CMP(void);
  98 uint8_t CPX(void);
  99 uint8_t CPY(void);
 100 uint8_t DEC(void);
 101 uint8_t DEX(void);
 102 uint8_t DEY(void);
 103 uint8_t EOR(void);
 104 uint8_t INC(void);
 105 uint8_t INX(void);
 106 uint8_t INY(void);
 107 uint8_t JMP(void);
 108 uint8_t JSR(void);
 109 uint8_t LDA(void);
 110 uint8_t LDX(void);
 111 uint8_t LDY(void);
 112 uint8_t LSR(void);
 113 uint8_t NOP(void);
 114 uint8_t ORA(void);
 115 uint8_t PHA(void);
 116 uint8_t PHP(void);
 117 uint8_t PLA(void);
 118 uint8_t PLP(void);
 119 uint8_t ROL(void);
 120 uint8_t ROR(void);
 121 uint8_t RTI(void);
 122 uint8_t RTS(void);
 123 uint8_t SBC(void);
 124 uint8_t SEC(void);
 125 uint8_t SED(void);
 126 uint8_t SEI(void);
 127 uint8_t STA(void);
 128 uint8_t STX(void);
 129 uint8_t STY(void);
 130 uint8_t TAX(void);
 131 uint8_t TAY(void);
 132 uint8_t TSX(void);
 133 uint8_t TXA(void);
 134 uint8_t TXS(void);
 135 uint8_t TYA(void);
 136 
 137 uint8_t NUL(void);
 138 
 139 
 140 #endif