⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nes6502.c

📁 linux下的MPEG1
💻 C
📖 第 1 页 / 共 4 页
字号:
         ADC(4, ABSOLUTE_BYTE);         break;      case 0x6E:  /* ROR $nnnn */         ROR(6, ABSOLUTE, mem_write, addr);         break;      case 0x6F:  /* RRA $nnnn */         RRA(6, ABSOLUTE, mem_write, addr);         break;      case 0x70:  /* BVS $nnnn */         BVS();         break;      case 0x71:  /* ADC ($nn),Y */         ADC(5, INDIR_Y_BYTE);         break;      case 0x73:  /* RRA ($nn),Y */         RRA(8, INDIR_Y, mem_write, addr);         break;      case 0x75:  /* ADC $nn,X */         ADC(4, ZP_IND_X_BYTE);         break;      case 0x76:  /* ROR $nn,X */         ROR(6, ZP_IND_X, ZP_WRITE, baddr);         break;      case 0x77:  /* RRA $nn,X */         RRA(6, ZP_IND_X, ZP_WRITE, baddr);         break;      case 0x78:  /* SEI */         SEI();         break;      case 0x79:  /* ADC $nnnn,Y */         ADC(4, ABS_IND_Y_BYTE);         break;      case 0x7B:  /* RRA $nnnn,Y */         RRA(7, ABS_IND_Y, mem_write, addr);         break;      case 0x7D:  /* ADC $nnnn,X */         ADC(4, ABS_IND_X_BYTE);         break;      case 0x7E:  /* ROR $nnnn,X */         ROR(7, ABS_IND_X, mem_write, addr);         break;      case 0x7F:  /* RRA $nnnn,X */         RRA(7, ABS_IND_X, mem_write, addr);         break;      case 0x80:  /* NOP #$nn */      case 0x82:  /* NOP #$nn */      case 0x89:  /* NOP #$nn */      case 0xC2:  /* NOP #$nn */      case 0xE2:  /* NOP #$nn */         DOP(2);         break;      case 0x81:  /* STA ($nn,X) */         STA(6, INDIR_X_ADDR, mem_write, addr);         break;      case 0x83:  /* SAX ($nn,X) */         SAX(6, INDIR_X_ADDR, mem_write, addr);         break;      case 0x84:  /* STY $nn */         STY(3, ZERO_PAGE_ADDR, ZP_WRITE, baddr);         break;      case 0x85:  /* STA $nn */         STA(3, ZERO_PAGE_ADDR, ZP_WRITE, baddr);         break;      case 0x86:  /* STX $nn */         STX(3, ZERO_PAGE_ADDR, ZP_WRITE, baddr);         break;      case 0x87:  /* SAX $nn */         SAX(3, ZERO_PAGE_ADDR, ZP_WRITE, baddr);         break;      case 0x88:  /* DEY */         DEY();         break;      case 0x8A:  /* TXA */         TXA();         break;      case 0x8B:  /* ANE #$nn */         ANE(2, IMMEDIATE_BYTE);         break;      case 0x8C:  /* STY $nnnn */         STY(4, ABSOLUTE_ADDR, mem_write, addr);         break;      case 0x8D:  /* STA $nnnn */         STA(4, ABSOLUTE_ADDR, mem_write, addr);         break;      case 0x8E:  /* STX $nnnn */         STX(4, ABSOLUTE_ADDR, mem_write, addr);         break;            case 0x8F:  /* SAX $nnnn */         SAX(4, ABSOLUTE_ADDR, mem_write, addr);         break;      case 0x90:  /* BCC $nnnn */         BCC();         break;      case 0x91:  /* STA ($nn),Y */         STA(6, INDIR_Y_ADDR, mem_write, addr);         break;      case 0x93:  /* SHA ($nn),Y */         SHA(6, INDIR_Y_ADDR, mem_write, addr);         break;      case 0x94:  /* STY $nn,X */         STY(4, ZP_IND_X_ADDR, ZP_WRITE, baddr);         break;      case 0x95:  /* STA $nn,X */         STA(4, ZP_IND_X_ADDR, ZP_WRITE, baddr);         break;      case 0x96:  /* STX $nn,Y */         STX(4, ZP_IND_Y_ADDR, ZP_WRITE, baddr);         break;      case 0x97:  /* SAX $nn,Y */         SAX(4, ZP_IND_Y_ADDR, ZP_WRITE, baddr);         break;      case 0x98:  /* TYA */         TYA();         break;      case 0x99:  /* STA $nnnn,Y */         STA(5, ABS_IND_Y_ADDR, mem_write, addr);         break;      case 0x9A:  /* TXS */         TXS();         break;      case 0x9B:  /* SHS $nnnn,Y */         SHS(5, ABS_IND_Y_ADDR, mem_write, addr);         break;      case 0x9C:  /* SHY $nnnn,X */         SHY(5, ABS_IND_X_ADDR, mem_write, addr);         break;      case 0x9D:  /* STA $nnnn,X */         STA(5, ABS_IND_X_ADDR, mem_write, addr);         break;      case 0x9E:  /* SHX $nnnn,Y */         SHX(5, ABS_IND_Y_ADDR, mem_write, addr);         break;      case 0x9F:  /* SHA $nnnn,Y */         SHA(5, ABS_IND_Y_ADDR, mem_write, addr);         break;            case 0xA0:  /* LDY #$nn */         LDY(2, IMMEDIATE_BYTE);         break;      case 0xA1:  /* LDA ($nn,X) */         LDA(6, INDIR_X_BYTE);         break;      case 0xA2:  /* LDX #$nn */         LDX(2, IMMEDIATE_BYTE);         break;      case 0xA3:  /* LAX ($nn,X) */         LAX(6, INDIR_X_BYTE);         break;      case 0xA4:  /* LDY $nn */         LDY(3, ZERO_PAGE_BYTE);         break;      case 0xA5:  /* LDA $nn */         LDA(3, ZERO_PAGE_BYTE);         break;      case 0xA6:  /* LDX $nn */         LDX(3, ZERO_PAGE_BYTE);         break;      case 0xA7:  /* LAX $nn */         LAX(3, ZERO_PAGE_BYTE);         break;      case 0xA8:  /* TAY */         TAY();         break;      case 0xA9:  /* LDA #$nn */         LDA(2, IMMEDIATE_BYTE);         break;      case 0xAA:  /* TAX */         TAX();         break;      case 0xAB:  /* LXA #$nn */         LXA(2, IMMEDIATE_BYTE);         break;      case 0xAC:  /* LDY $nnnn */         LDY(4, ABSOLUTE_BYTE);         break;      case 0xAD:  /* LDA $nnnn */         LDA(4, ABSOLUTE_BYTE);         break;            case 0xAE:  /* LDX $nnnn */         LDX(4, ABSOLUTE_BYTE);         break;      case 0xAF:  /* LAX $nnnn */         LAX(4, ABSOLUTE_BYTE);         break;      case 0xB0:  /* BCS $nnnn */         BCS();         break;      case 0xB1:  /* LDA ($nn),Y */         LDA(5, INDIR_Y_BYTE);         break;      case 0xB3:  /* LAX ($nn),Y */         LAX(5, INDIR_Y_BYTE);         break;      case 0xB4:  /* LDY $nn,X */         LDY(4, ZP_IND_X_BYTE);         break;      case 0xB5:  /* LDA $nn,X */         LDA(4, ZP_IND_X_BYTE);         break;      case 0xB6:  /* LDX $nn,Y */         LDX(4, ZP_IND_Y_BYTE);         break;      case 0xB7:  /* LAX $nn,Y */         LAX(4, ZP_IND_Y_BYTE);         break;      case 0xB8:  /* CLV */         CLV();         break;      case 0xB9:  /* LDA $nnnn,Y */         LDA(4, ABS_IND_Y_BYTE);         break;      case 0xBA:  /* TSX */         TSX();         break;      case 0xBB:  /* LAS $nnnn,Y */         LAS(4, ABS_IND_Y_BYTE);         break;      case 0xBC:  /* LDY $nnnn,X */         LDY(4, ABS_IND_X_BYTE);         break;      case 0xBD:  /* LDA $nnnn,X */         LDA(4, ABS_IND_X_BYTE);         break;      case 0xBE:  /* LDX $nnnn,Y */         LDX(4, ABS_IND_Y_BYTE);         break;      case 0xBF:  /* LAX $nnnn,Y */         LAX(4, ABS_IND_Y_BYTE);         break;      case 0xC0:  /* CPY #$nn */         CPY(2, IMMEDIATE_BYTE);         break;      case 0xC1:  /* CMP ($nn,X) */         CMP(6, INDIR_X_BYTE);         break;      case 0xC3:  /* DCP ($nn,X) */         DCP(8, INDIR_X, mem_write, addr);         break;      case 0xC4:  /* CPY $nn */         CPY(3, ZERO_PAGE_BYTE);         break;      case 0xC5:  /* CMP $nn */         CMP(3, ZERO_PAGE_BYTE);         break;      case 0xC6:  /* DEC $nn */         DEC(5, ZERO_PAGE, ZP_WRITE, baddr);         break;      case 0xC7:  /* DCP $nn */         DCP(5, ZERO_PAGE, ZP_WRITE, baddr);         break;      case 0xC8:  /* INY */         INY();         break;      case 0xC9:  /* CMP #$nn */         CMP(2, IMMEDIATE_BYTE);         break;      case 0xCA:  /* DEX */         DEX();         break;      case 0xCB:  /* SBX #$nn */         SBX(2, IMMEDIATE_BYTE);         break;      case 0xCC:  /* CPY $nnnn */         CPY(4, ABSOLUTE_BYTE);         break;      case 0xCD:  /* CMP $nnnn */         CMP(4, ABSOLUTE_BYTE);         break;      case 0xCE:  /* DEC $nnnn */         DEC(6, ABSOLUTE, mem_write, addr);         break;      case 0xCF:  /* DCP $nnnn */         DCP(6, ABSOLUTE, mem_write, addr);         break;            case 0xD0:  /* BNE $nnnn */         BNE();         break;      case 0xD1:  /* CMP ($nn),Y */         CMP(5, INDIR_Y_BYTE);         break;      case 0xD3:  /* DCP ($nn),Y */         DCP(8, INDIR_Y, mem_write, addr);         break;      case 0xD5:  /* CMP $nn,X */         CMP(4, ZP_IND_X_BYTE);         break;      case 0xD6:  /* DEC $nn,X */         DEC(6, ZP_IND_X, ZP_WRITE, baddr);         break;      case 0xD7:  /* DCP $nn,X */         DCP(6, ZP_IND_X, ZP_WRITE, baddr);         break;      case 0xD8:  /* CLD */         CLD();         break;      case 0xD9:  /* CMP $nnnn,Y */         CMP(4, ABS_IND_Y_BYTE);         break;      case 0xDB:  /* DCP $nnnn,Y */         DCP(7, ABS_IND_Y, mem_write, addr);         break;                        case 0xDD:  /* CMP $nnnn,X */         CMP(4, ABS_IND_X_BYTE);         break;      case 0xDE:  /* DEC $nnnn,X */         DEC(7, ABS_IND_X, mem_write, addr);         break;      case 0xDF:  /* DCP $nnnn,X */         DCP(7, ABS_IND_X, mem_write, addr);         break;      case 0xE0:  /* CPX #$nn */         CPX(2, IMMEDIATE_BYTE);         break;      case 0xE1:  /* SBC ($nn,X) */         SBC(6, INDIR_X_BYTE);         break;      case 0xE3:  /* ISB ($nn,X) */         ISB(8, INDIR_X, mem_write, addr);         break;      case 0xE4:  /* CPX $nn */         CPX(3, ZERO_PAGE_BYTE);         break;      case 0xE5:  /* SBC $nn */         SBC(3, ZERO_PAGE_BYTE);         break;      case 0xE6:  /* INC $nn */         INC(5, ZERO_PAGE, ZP_WRITE, baddr);         break;      case 0xE7:  /* ISB $nn */         ISB(5, ZERO_PAGE, ZP_WRITE, baddr);         break;      case 0xE8:  /* INX */         INX();         break;      case 0xE9:  /* SBC #$nn */      case 0xEB:  /* USBC #$nn */         SBC(2, IMMEDIATE_BYTE);         break;      case 0xEA:  /* NOP */         NOP();         break;      case 0xEC:  /* CPX $nnnn */         CPX(4, ABSOLUTE_BYTE);         break;      case 0xED:  /* SBC $nnnn */         SBC(4, ABSOLUTE_BYTE);         break;      case 0xEE:  /* INC $nnnn */         INC(6, ABSOLUTE, mem_write, addr);         break;      case 0xEF:  /* ISB $nnnn */         ISB(6, ABSOLUTE, mem_write, addr);         break;      case 0xF0:  /* BEQ $nnnn */         BEQ();         break;      case 0xF1:  /* SBC ($nn),Y */         SBC(5, INDIR_Y_BYTE);         break;      case 0xF3:  /* ISB ($nn),Y */         ISB(8, INDIR_Y, mem_write, addr);         break;      case 0xF5:  /* SBC $nn,X */         SBC(4, ZP_IND_X_BYTE);         break;      case 0xF6:  /* INC $nn,X */         INC(6, ZP_IND_X, ZP_WRITE, baddr);         break;      case 0xF7:  /* ISB $nn,X */         ISB(6, ZP_IND_X, ZP_WRITE, baddr);         break;      case 0xF8:  /* SED */         SED();         break;      case 0xF9:  /* SBC $nnnn,Y */         SBC(4, ABS_IND_Y_BYTE);         break;      case 0xFB:  /* ISB $nnnn,Y */         ISB(7, ABS_IND_Y, mem_write, addr);         break;      case 0xFD:  /* SBC $nnnn,X */         SBC(4, ABS_IND_X_BYTE);         break;      case 0xFE:  /* INC $nnnn,X */         INC(7, ABS_IND_X, mem_write, addr);         break;      case 0xFF:  /* ISB $nnnn,X */         ISB(7, ABS_IND_X, mem_write, addr);         break;      }      /* Calculate remaining/elapsed clock cycles */      remaining_cycles -= instruction_cycles;      total_cycles += instruction_cycles;   }_execute_done:   /* restore local copy of regs */   SET_LOCAL_REGS();   /* Return our actual amount of executed cycles */   return (total_cycles - old_cycles);}/* Initialize tables, etc. */void nes6502_init(void){   int index;   /* Build the N / Z flag lookup table */   flag_table[0] = Z_FLAG;   for (index = 1; index < 256; index++)      flag_table[index] = (index & 0x80) ? N_FLAG : 0;   reg_A = reg_X = reg_Y = 0;   reg_S = 0xFF;                             /* Stack grows down */}/* Issue a CPU Reset */void nes6502_reset(void){   reg_P = Z_FLAG | R_FLAG | I_FLAG;         /* Reserved bit always 1 */   int_pending = dma_cycles = 0;             /* No pending interrupts */   reg_PC = bank_readaddress(RESET_VECTOR);  /* Fetch reset vector */   /* TODO: 6 cycles for RESET? */}/* Non-maskable interrupt */void nes6502_nmi(void){   int_pending |= NMI_MASK;}/* Interrupt request */void nes6502_irq(void){   int_pending |= IRQ_MASK;}/* Set dma period (in cycles) */void nes6502_setdma(int cycles){   dma_cycles += cycles;}/*** $Log: nes6502.c,v $** Revision 1.2  2003/01/09 19:50:03  jkeil** NSF audio files were crashing on SPARC.**** - Define the correct HOST_ENDIAN for SPARC** - remove unaligned memory accesses**** Revision 1.1  2003/01/08 07:04:35  tmmm** initial import of Nosefart sources**** Revision 1.6  2000/07/04 04:50:07  matt** minor change to includes**** Revision 1.5  2000/07/03 02:18:16  matt** added a few notes about potential failure cases**** Revision 1.4  2000/06/09 15:12:25  matt** initial revision***/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -