📄 nescodes.h
字号:
/* Copyright 2001, ESS Technology, Inc./* SCCSID @(#)nescodes.h 1.1 03/13/02 *//* Based on nescodes.h 1.6 02/28/02 *//* * $Log$ *//** M6502: portable 6502 emulator ****************************//** **//** Codes.h **//** **//** This file contains implementation for the main table of **//** 6502 commands. It is included from 6502.c. **//** **//** Copyright (C) Marat Fayzullin 1996-2000 **//** Alex Krasivsky 1996 **//** You are not allowed to distribute this software **//** commercially. Please, notify me, if you make any **//** changes to this file. **//*************************************************************/#ifdef INES#define SUN_SUPPORTcase 0x10: ICount -= 2; if(R->P&NES_N_FLAG) RPC.W++; else { NES_M_JR; } break; /* BPL * REL */#ifdef SUN_SUPPORTcase 0xEF:#endifcase 0x30: ICount -= 2; if(R->P&NES_N_FLAG) { NES_M_JR; } else RPC.W++; break; /* BMI * REL */#ifdef SUN_SUPPORTcase 0xFB:#endifcase 0xD0: ICount -= 2; if(R->P&NES_Z_FLAG) RPC.W++; else { NES_M_JR; } break; /* BNE * REL */#ifdef SUN_SUPPORTcase 0xF4:case 0xFA:case 0xFC:#endifcase 0xF0: ICount -= 2; if(R->P&NES_Z_FLAG) { NES_M_JR; } else RPC.W++; break; /* BEQ * REL */case 0x90: ICount -= 2; if(R->P&NES_C_FLAG) RPC.W++; else { NES_M_JR; } break; /* BCC * REL */case 0xB0: ICount -= 2; if(R->P&NES_C_FLAG) { NES_M_JR; } else RPC.W++; break; /* BCS * REL */case 0x50: ICount -= 2; if(R->P&NES_V_FLAG) RPC.W++; else { NES_M_JR; } break; /* BVC * REL */case 0x70: ICount -= 2; if(R->P&NES_V_FLAG) { NES_M_JR; } else RPC.W++; break; /* BVS * REL *//* RTI */case 0x40: ICount -= 6; NES_M_POP(R->P);R->P|=NES_R_FLAG;NES_M_POP(RPC.B.l);NES_M_POP(RPC.B.h); break;/* RTS */case 0x60: ICount -= 6; NES_M_POP(RPC.B.l);NES_M_POP(RPC.B.h);RPC.W++;break;/* JSR $ssss ABS */case 0x20: ICount -= 6; K.B.l=Op6502(RPC.W++); K.B.h=Op6502(RPC.W); NES_M_PUSH(RPC.B.h); NES_M_PUSH(RPC.B.l); RPC=K;break;/* JMP $ssss ABS */#ifdef SUN_SUPPORTcase 0xF7:case 0xFF:#endifcase 0x4C: ICount -= 3; NES_M_LDWORD(K);RPC=K;break;/* JMP ($ssss) ABDINDIR */case 0x6C: ICount -= 5; NES_M_LDWORD(K); RPC.B.l=Rd6502(K.W++); RPC.B.h=Rd6502(K.W); break;/* BRK */case 0x00: ICount -= 7; RPC.W++; NES_M_PUSH(RPC.B.h);NES_M_PUSH(RPC.B.l); NES_M_PUSH(R->P|NES_B_FLAG); R->P=(R->P|NES_I_FLAG)&/*~NES_D_FLAG*/0xF7; RPC.B.l=Rd6502(0xFFFE); RPC.B.h=Rd6502(0xFFFF); break;/* CLI */case 0x58: ICount -= 2; if((R->IRequest!=NES_INT_NONE)&&(R->P&NES_I_FLAG)) { R->AfterCLI=1; R->IBackup=ICount; ICount=1; } R->P&=/*~NES_I_FLAG*/0xFB; break;/* PLP */case 0x28: ICount -= 4; NES_M_POP(I); if((R->IRequest!=NES_INT_NONE)&&((I^R->P)&~I&NES_I_FLAG)) { R->AfterCLI=1; R->IBackup=ICount; ICount=1; } R->P=I|NES_R_FLAG; break;case 0x08: ICount -= 3; NES_M_PUSH(R->P);break; /* PHP */case 0x18: ICount -= 2; R->P&=/*~NES_C_FLAG*/0xFE;break; /* CLC */case 0xB8: ICount -= 2; R->P&=/*~NES_V_FLAG*/0xBF;break; /* CLV */case 0xD8: ICount -= 2; R->P&=/*~NES_D_FLAG*/0xF7;break; /* CLD */case 0x38: ICount -= 2; R->P|=NES_C_FLAG;break; /* SEC */case 0xF8: ICount -= 2; R->P|=NES_D_FLAG;break; /* SED */case 0x78: ICount -= 2; R->P|=NES_I_FLAG;break; /* SEI */case 0x48: ICount -= 3; NES_M_PUSH(RA);break; /* PHA */case 0x68: ICount -= 4; NES_M_POP(RA);NES_M_FL(RA);break; /* PLA */case 0x98: ICount -= 2; RA=RY;NES_M_FL(RA);break; /* TYA */case 0xA8: ICount -= 2; RY=RA;NES_M_FL(RY);break; /* TAY */case 0xC8: ICount -= 2; RY=(RY+1)&0xff;NES_M_FL(RY);break; /* INY */case 0x88: ICount -= 2; RY=(RY-1)&0xff;NES_M_FL(RY);break; /* DEY */case 0x8A: ICount -= 2; RA=RX;NES_M_FL(RA);break; /* TXA */case 0xAA: ICount -= 2; RX=RA;NES_M_FL(RX);break; /* TAX */case 0xE8: ICount -= 2; RX=(RX+1)&0xff;NES_M_FL(RX);break; /* INX */case 0xCA: ICount -= 2; RX=(RX-1)&0xff;NES_M_FL(RX);break; /* DEX */case 0xEA: ICount -= 2; break; /* NOP */case 0x9A: ICount -= 2; R->S=RX;break; /* TXS */case 0xBA: ICount -= 2; RX=R->S;NES_M_FL(RX);break; /* TSX */case 0x24: ICount -= 3; MR_Zp(I);M_BIT(I);break; /* BIT $ss ZP */case 0x2C: ICount -= 4; MR_Ab(I);M_BIT(I);break; /* BIT $ssss ABS */case 0x05: ICount -= 3; MR_Zp(I);NES_M_ORA(I);break; /* ORA $ss ZP */case 0x06: ICount -= 5; MM_Zp(NES_M_ASL);break; /* ASL $ss ZP */case 0x25: ICount -= 3; MR_Zp(I);NES_M_AND(I);break; /* AND $ss ZP */case 0x26: ICount -= 5; MM_Zp(NES_M_ROL);break; /* ROL $ss ZP */case 0x45: ICount -= 3; MR_Zp(I);NES_M_EOR(I);break; /* EOR $ss ZP */case 0x46: ICount -= 5; MM_Zp(NES_M_LSR);break; /* LSR $ss ZP */case 0x65: ICount -= 3; MR_Zp(I);NES_M_ADC(I);break; /* ADC $ss ZP */case 0x66: ICount -= 5; MM_Zp(NES_M_ROR);break; /* ROR $ss ZP */case 0x84: ICount -= 3; MW_Zp(RY);break; /* STY $ss ZP */case 0x85: ICount -= 3; MW_Zp(RA);break; /* STA $ss ZP */case 0x86: ICount -= 3; MW_Zp(RX);break; /* STX $ss ZP */case 0xA4: ICount -= 3; MR_Zp(RY);NES_M_FL(RY);break; /* LDY $ss ZP */case 0xA5: ICount -= 3; MR_Zp(RA);NES_M_FL(RA);break; /* LDA $ss ZP */case 0xA6: ICount -= 3; MR_Zp(RX);NES_M_FL(RX);break; /* LDX $ss ZP */case 0xC4: ICount -= 3; MR_Zp(I);NES_M_CMP(RY,I);break; /* CPY $ss ZP */case 0xC5: ICount -= 3; MR_Zp(I);NES_M_CMP(RA,I);break; /* CMP $ss ZP */case 0xC6: ICount -= 5; MM_Zp(NES_M_DEC);break; /* DEC $ss ZP */case 0xE4: ICount -= 3; MR_Zp(I);NES_M_CMP(RX,I);break; /* CPX $ss ZP */case 0xE5: ICount -= 3; MR_Zp(I);NES_M_SBC(I);break; /* SBC $ss ZP */case 0xE6: ICount -= 5; MM_Zp(NES_M_INC);break; /* INC $ss ZP */case 0x0D: ICount -= 4; MR_Ab(I);NES_M_ORA(I);break; /* ORA $ssss ABS */case 0x0E: ICount -= 6; MM_Ab(NES_M_ASL);break; /* ASL $ssss ABS */case 0x2D: ICount -= 4; MR_Ab(I);NES_M_AND(I);break; /* AND $ssss ABS */case 0x2E: ICount -= 6; MM_Ab(NES_M_ROL);break; /* ROL $ssss ABS */case 0x4D: ICount -= 4; MR_Ab(I);NES_M_EOR(I);break; /* EOR $ssss ABS */case 0x4E: ICount -= 6; MM_Ab(NES_M_LSR);break; /* LSR $ssss ABS */case 0x6D: ICount -= 4; MR_Ab(I);NES_M_ADC(I);break; /* ADC $ssss ABS */case 0x6E: ICount -= 6; MM_Ab(NES_M_ROR);break; /* ROR $ssss ABS */case 0x8C: ICount -= 4; MW_Ab(RY);break; /* STY $ssss ABS */case 0x8D: ICount -= 4; MW_Ab(RA);break; /* STA $ssss ABS */case 0x8E: ICount -= 4; MW_Ab(RX);break; /* STX $ssss ABS */case 0xAC: ICount -= 4; MR_Ab(RY);NES_M_FL(RY);break; /* LDY $ssss ABS */case 0xAD: ICount -= 4; MR_Ab(RA);NES_M_FL(RA);break; /* LDA $ssss ABS */case 0xAE: ICount -= 4; MR_Ab(RX);NES_M_FL(RX);break; /* LDX $ssss ABS */case 0xCC: ICount -= 4; MR_Ab(I);NES_M_CMP(RY,I);break; /* CPY $ssss ABS */case 0xCD: ICount -= 4; MR_Ab(I);NES_M_CMP(RA,I);break; /* CMP $ssss ABS */case 0xCE: ICount -= 4; MM_Ab(NES_M_DEC);break; /* DEC $ssss ABS */case 0xEC: ICount -= 5; MR_Ab(I);NES_M_CMP(RX,I);break; /* CPX $ssss ABS */case 0xED: ICount -= 5; MR_Ab(I);NES_M_SBC(I);break; /* SBC $ssss ABS */case 0xEE: ICount -= 7; MM_Ab(NES_M_INC);break; /* INC $ssss ABS */case 0x09: ICount -= 2; MR_Im(I);NES_M_ORA(I);break; /* ORA #$ss IMM */case 0x29: ICount -= 2; MR_Im(I);NES_M_AND(I);break; /* AND #$ss IMM */case 0x49: ICount -= 2; MR_Im(I);NES_M_EOR(I);break; /* EOR #$ss IMM */case 0x69: ICount -= 2; MR_Im(I);NES_M_ADC(I);break; /* ADC #$ss IMM */case 0xA0: ICount -= 2; MR_Im(RY);NES_M_FL(RY);break; /* LDY #$ss IMM */case 0xA2: ICount -= 2; MR_Im(RX);NES_M_FL(RX);break; /* LDX #$ss IMM */case 0xA9: ICount -= 2; MR_Im(RA);NES_M_FL(RA);break; /* LDA #$ss IMM */case 0xC0: ICount -= 2; MR_Im(I);NES_M_CMP(RY,I);break; /* CPY #$ss IMM */case 0xC9: ICount -= 2; MR_Im(I);NES_M_CMP(RA,I);break; /* CMP #$ss IMM */case 0xE0: ICount -= 2; MR_Im(I);NES_M_CMP(RX,I);break; /* CPX #$ss IMM */case 0xE9: ICount -= 2; MR_Im(I);NES_M_SBC(I);break; /* SBC #$ss IMM */case 0x15: ICount -= 4; MR_Zx(I);NES_M_ORA(I);break; /* ORA $ss,x ZP,x */case 0x16: ICount -= 6; MM_Zx(NES_M_ASL);break; /* ASL $ss,x ZP,x */case 0x35: ICount -= 4; MR_Zx(I);NES_M_AND(I);break; /* AND $ss,x ZP,x */case 0x36: ICount -= 6; MM_Zx(NES_M_ROL);break; /* ROL $ss,x ZP,x */case 0x55: ICount -= 4; MR_Zx(I);NES_M_EOR(I);break; /* EOR $ss,x ZP,x */case 0x56: ICount -= 6; MM_Zx(NES_M_LSR);break; /* LSR $ss,x ZP,x */case 0x75: ICount -= 4; MR_Zx(I);NES_M_ADC(I);break; /* ADC $ss,x ZP,x */case 0x76: ICount -= 6; MM_Zx(NES_M_ROR);break; /* ROR $ss,x ZP,x */case 0x94: ICount -= 4; MW_Zx(RY);break; /* STY $ss,x ZP,x */case 0x95: ICount -= 4; MW_Zx(RA);break; /* STA $ss,x ZP,x */case 0x96: ICount -= 4; MW_Zy(RX);break; /* STX $ss,y ZP,y */case 0xB4: ICount -= 4; MR_Zx(RY);NES_M_FL(RY);break; /* LDY $ss,x ZP,x */case 0xB5: ICount -= 4; MR_Zx(RA);NES_M_FL(RA);break; /* LDA $ss,x ZP,x */case 0xB6: ICount -= 4; MR_Zy(RX);NES_M_FL(RX);break; /* LDX $ss,y ZP,y */case 0xD5: ICount -= 4; MR_Zx(I);NES_M_CMP(RA,I);break; /* CMP $ss,x ZP,x */case 0xD6: ICount -= 6; MM_Zx(NES_M_DEC);break; /* DEC $ss,x ZP,x */case 0xF5: ICount -= 4; MR_Zx(I);NES_M_SBC(I);break; /* SBC $ss,x ZP,x */case 0xF6: ICount -= 6; MM_Zx(NES_M_INC);break; /* INC $ss,x ZP,x */case 0x19: ICount -= 4; MR_Ay(I);NES_M_ORA(I);break; /* ORA $ssss,y ABS,y */case 0x1D: ICount -= 5; MR_Ax(I);NES_M_ORA(I);break; /* ORA $ssss,x ABS,x */case 0x1E: ICount -= 7; MM_Ax(NES_M_ASL);break; /* ASL $ssss,x ABS,x */case 0x39: ICount -= 4; MR_Ay(I);NES_M_AND(I);break; /* AND $ssss,y ABS,y */case 0x3D: ICount -= 5; MR_Ax(I);NES_M_AND(I);break; /* AND $ssss,x ABS,x */case 0x3E: ICount -= 7; MM_Ax(NES_M_ROL);break; /* ROL $ssss,x ABS,x */case 0x59: ICount -= 4; MR_Ay(I);NES_M_EOR(I);break; /* EOR $ssss,y ABS,y */case 0x5D: ICount -= 5; MR_Ax(I);NES_M_EOR(I);break; /* EOR $ssss,x ABS,x */case 0x5E: ICount -= 7; MM_Ax(NES_M_LSR);break; /* LSR $ssss,x ABS,x */case 0x79: ICount -= 4; MR_Ay(I);NES_M_ADC(I);break; /* ADC $ssss,y ABS,y */case 0x7D: ICount -= 5; MR_Ax(I);NES_M_ADC(I);break; /* ADC $ssss,x ABS,x */case 0x7E: ICount -= 7; MM_Ax(NES_M_ROR);break; /* ROR $ssss,x ABS,x */case 0x99: ICount -= 5; MW_Ay(RA);break; /* STA $ssss,y ABS,y */case 0x9D: ICount -= 5; MW_Ax(RA);break; /* STA $ssss,x ABS,x */case 0xB9: ICount -= 4; MR_Ay(RA);NES_M_FL(RA);break; /* LDA $ssss,y ABS,y */case 0xBC: ICount -= 4; MR_Ax(RY);NES_M_FL(RY);break; /* LDY $ssss,x ABS,x */case 0xBD: ICount -= 4; MR_Ax(RA);NES_M_FL(RA);break; /* LDA $ssss,x ABS,x */case 0xBE: ICount -= 4; MR_Ay(RX);NES_M_FL(RX);break; /* LDX $ssss,y ABS,y */case 0xD9: ICount -= 4; MR_Ay(I);NES_M_CMP(RA,I);break; /* CMP $ssss,y ABS,y */case 0xDD: ICount -= 5; MR_Ax(I);NES_M_CMP(RA,I);break; /* CMP $ssss,x ABS,x */case 0xDE: ICount -= 7; MM_Ax(NES_M_DEC);break; /* DEC $ssss,x ABS,x */case 0xF9: ICount -= 4; MR_Ay(I);NES_M_SBC(I);break; /* SBC $ssss,y ABS,y */case 0xFD: ICount -= 5; MR_Ax(I);NES_M_SBC(I);break; /* SBC $ssss,x ABS,x */case 0xFE: ICount -= 9; MM_Ax(NES_M_INC);break; /* INC $ssss,x ABS,x */case 0x01: ICount -= 6; MR_Ix(I);NES_M_ORA(I);break; /* ORA ($ss,x) INDEXINDIR */case 0x11: ICount -= 5; MR_Iy(I);NES_M_ORA(I);break; /* ORA ($ss),y INDIRINDEX */case 0x21: ICount -= 6; MR_Ix(I);NES_M_AND(I);break; /* AND ($ss,x) INDEXINDIR */case 0x31: ICount -= 5; MR_Iy(I);NES_M_AND(I);break; /* AND ($ss),y INDIRINDEX */case 0x41: ICount -= 6; MR_Ix(I);NES_M_EOR(I);break; /* EOR ($ss,x) INDEXINDIR */case 0x51: ICount -= 5; MR_Iy(I);NES_M_EOR(I);break; /* EOR ($ss),y INDIRINDEX */case 0x61: ICount -= 6; MR_Ix(I);NES_M_ADC(I);break; /* ADC ($ss,x) INDEXINDIR */case 0x71: ICount -= 5; MR_Iy(I);NES_M_ADC(I);break; /* ADC ($ss),y INDIRINDEX */case 0x81: ICount -= 6; MW_Ix(RA);break; /* STA ($ss,x) INDEXINDIR */case 0x91: ICount -= 6; MW_Iy(RA);break; /* STA ($ss),y INDIRINDEX */case 0xA1: ICount -= 6; MR_Ix(RA);NES_M_FL(RA);break; /* LDA ($ss,x) INDEXINDIR */case 0xB1: ICount -= 5; MR_Iy(RA);NES_M_FL(RA);break; /* LDA ($ss),y INDIRINDEX */case 0xC1: ICount -= 6; MR_Ix(I);NES_M_CMP(RA,I);break; /* CMP ($ss,x) INDEXINDIR */case 0xD1: ICount -= 5; MR_Iy(I);NES_M_CMP(RA,I);break; /* CMP ($ss),y INDIRINDEX */case 0xE1: ICount -= 6; MR_Ix(I);NES_M_SBC(I);break; /* SBC ($ss,x) INDEXINDIR */case 0xF1: ICount -= 5; MR_Iy(I);NES_M_SBC(I);break; /* SBC ($ss),y INDIRINDEX */case 0x0A: ICount -= 2; NES_M_ASL(RA);break; /* ASL a ACC */case 0x2A: ICount -= 2; NES_M_ROL(RA);break; /* ROL a ACC */case 0x4A: ICount -= 2; NES_M_LSR(RA);break; /* LSR a ACC */case 0x6A: ICount -= 2; NES_M_ROR(RA);break; /* ROR a ACC */default: /* Try to execute a patch function. If it fails, treat */ /* the opcode as undefined. */ break;#endif /*INES */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -