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 */