emu_nes

An NES emulator for learning how the 6502 and similar computers of the era worked
Log | Files | Refs | README | LICENSE

cpu.h (2534B)


      1 #ifndef CPU_H
      2 #define CPU_H
      3 
      4 #include <stdint.h>
      5 
      6 struct cpu_flags {
      7 	uint8_t carry : 1;
      8 	uint8_t zero : 1;
      9 	uint8_t interrupt_disable : 1;
     10 	uint8_t decimal_mode : 1;
     11 	uint8_t brk : 1;
     12 	uint8_t unused : 1;
     13 	uint8_t overflow : 1;
     14 	uint8_t negative : 1;
     15 };
     16 
     17 struct registers {
     18 	uint8_t a, x, y, sp;
     19 	struct cpu_flags status;
     20 	uint16_t pc;
     21 };
     22 struct registers regs = {0};
     23 
     24 /* 64K address space, 16bit words */
     25 uint8_t memory[0x16000];
     26 
     27 /* OFFICIAL OPCODES */
     28 void ADC(uint16_t arg);
     29 void AND(uint16_t arg);
     30 void ASL_acc(uint16_t arg);
     31 void ASL(uint16_t arg);
     32 void BCC(uint16_t arg);
     33 void BCS(uint16_t arg);
     34 void BEQ(uint16_t arg);
     35 void BIT(uint16_t arg);
     36 void BMI(uint16_t arg);
     37 void BNE(uint16_t arg);
     38 void BPL(uint16_t arg);
     39 void BRK(uint16_t arg);
     40 void BVC(uint16_t arg);
     41 void BVS(uint16_t arg);
     42 void CLC(uint16_t arg);
     43 void CLD(uint16_t arg);
     44 void CLI(uint16_t arg);
     45 void CLV(uint16_t arg);
     46 void CMP(uint16_t arg);
     47 void CPX(uint16_t arg);
     48 void CPY(uint16_t arg);
     49 void DEC(uint16_t arg);
     50 void DEX(uint16_t arg);
     51 void DEY(uint16_t arg);
     52 void EOR(uint16_t arg);
     53 void INC(uint16_t arg);
     54 void INX(uint16_t arg);
     55 void INY(uint16_t arg);
     56 void JMP(uint16_t arg);
     57 void JSR(uint16_t arg);
     58 void LDA(uint16_t arg);
     59 void LDX(uint16_t arg);
     60 void LDY(uint16_t arg);
     61 void LSR_acc(uint16_t arg);
     62 void LSR(uint16_t arg);
     63 void NOP(uint16_t arg);
     64 void ORA(uint16_t arg);
     65 void PHA(uint16_t arg);
     66 void PHP(uint16_t arg);
     67 void PLA(uint16_t arg);
     68 void PLP(uint16_t arg);
     69 void ROL_acc(uint16_t arg);
     70 void ROL(uint16_t arg);
     71 void ROR_acc(uint16_t arg);
     72 void ROR(uint16_t arg);
     73 void RTI(uint16_t arg);
     74 void RTS(uint16_t arg);
     75 void SBC(uint16_t arg);
     76 void SEC(uint16_t arg);
     77 void SED(uint16_t arg);
     78 void SEI(uint16_t arg);
     79 void STA(uint16_t arg);
     80 void STX(uint16_t arg);
     81 void STY(uint16_t arg);
     82 void TAX(uint16_t arg);
     83 void TAY(uint16_t arg);
     84 void TSX(uint16_t arg);
     85 void TXA(uint16_t arg);
     86 void TXS(uint16_t arg);
     87 void TYA(uint16_t arg);
     88 
     89 /* UNOFFICIAL OPCODES */
     90 void AAC(uint16_t arg);
     91 void SAX(uint16_t arg);
     92 void ARR(uint16_t arg);
     93 void ASR(uint16_t arg);
     94 void ATX(uint16_t arg);
     95 void AXA(uint16_t arg);
     96 void AXS(uint16_t arg);
     97 void DCP(uint16_t arg);
     98 void DOP(uint16_t arg);
     99 void ISB(uint16_t arg);
    100 void KIL(uint16_t arg);
    101 void LAR(uint16_t arg);
    102 void LAX(uint16_t arg);
    103 void NOP(uint16_t arg);
    104 void RLA(uint16_t arg);
    105 void RRA(uint16_t arg);
    106 void SBC(uint16_t arg);
    107 void SLO(uint16_t arg);
    108 void SRE(uint16_t arg);
    109 void SXA(uint16_t arg);
    110 void SYA(uint16_t arg);
    111 void TOP(uint16_t arg);
    112 void XAA(uint16_t arg);
    113 void XAS(uint16_t arg);
    114 
    115 #endif	/* CPU_H */