X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=ops.h;h=c5004d80663f4e5428c847c6efd358b4b0503028;hp=7e7075a76745416af6d5fea9fea7dd191883fb49;hb=396c448eb538587248ddbf586a90371c71b48183;hpb=c62d28102c77e19c291c78bf6bf7f0a81abd54b9 diff --git a/ops.h b/ops.h index 7e7075a..c5004d8 100644 --- a/ops.h +++ b/ops.h @@ -22,7 +22,8 @@ case 0x00: /* BRK */ _PC++; PUSH(_PC>>8); PUSH(_PC); - PUSH(_P|U_FLAG|B_FLAG); + _P|=B_FLAG; + PUSH(_P|U_FLAG); _P|=I_FLAG; _PC=RdMem(0xFFFE); _PC|=RdMem(0xFFFF)<<8; @@ -34,7 +35,7 @@ case 0x40: /* RTI */ _PC=POP(); _PC|=POP()<<8; break; - + case 0x60: /* RTS */ _PC=POP(); _PC|=POP()<<8; @@ -56,16 +57,19 @@ case 0x28: /* PLP */ break; case 0x4C: { - uint16 ptmp=_PC; unsigned int npc; - +/* + uint16 ptmp=_PC; npc=RdMem(ptmp); ptmp++; npc|=RdMem(ptmp)<<8; +*/ + npc=RdMem(_PC++); + npc|=RdMem(_PC++)<<8; _PC=npc; } break; /* JMP ABSOLUTE */ -case 0x6C: +case 0x6C: { uint32 tmp; GetAB(tmp); @@ -75,12 +79,12 @@ case 0x6C: break; case 0x20: /* JSR */ { - uint8 npc; + uint32 npc; npc=RdMem(_PC++); PUSH(_PC>>8); PUSH(_PC); - _PC=RdMem(_PC)<<8; - _PC|=npc; + npc|=RdMem(_PC++)<<8; + _PC=npc; } break; @@ -331,8 +335,8 @@ case 0x8F: ST_AB(_A&_X); case 0x83: ST_IX(_A&_X); /* ARR - ARGH, MATEY! */ -case 0x6B: { - uint8 arrtmp; +case 0x6B: { + uint8 arrtmp; LD_IM(AND;_P&=~V_FLAG;_P|=(_A^(_A>>1))&0x40;arrtmp=_A>>7;_A>>=1;_A|=(_P&C_FLAG)<<7;_P&=~C_FLAG;_P|=arrtmp;X_ZN(_A)); } /* ASR */ @@ -341,26 +345,26 @@ case 0x4B: LD_IM(AND;LSRA); /* ATX(OAL) Is this(OR with $EE) correct? */ case 0xAB: LD_IM(_A|=0xEE;AND;_X=_A); -/* AXS */ +/* AXS */ case 0xCB: LD_IM(AXS); /* DCP */ -case 0xC7: LD_ZP(DEC;CMP); -case 0xD7: LD_ZPX(DEC;CMP); -case 0xCF: LD_AB(DEC;CMP); -case 0xDF: LD_ABX(DEC;CMP); -case 0xDB: LD_ABY(DEC;CMP); -case 0xC3: LD_IX(DEC;CMP); -case 0xD3: LD_IY(DEC;CMP); +case 0xC7: RMW_ZP(DEC;CMP); +case 0xD7: RMW_ZPX(DEC;CMP); +case 0xCF: RMW_AB(DEC;CMP); +case 0xDF: RMW_ABX(DEC;CMP); +case 0xDB: RMW_ABY(DEC;CMP); +case 0xC3: RMW_IX(DEC;CMP); +case 0xD3: RMW_IY(DEC;CMP); /* ISC */ -case 0xE7: LD_ZP(INC;SBC); -case 0xF7: LD_ZPX(INC;SBC); -case 0xEF: LD_AB(INC;SBC); -case 0xFF: LD_ABX(INC;SBC); -case 0xFB: LD_ABY(INC;SBC); -case 0xE3: LD_IX(INC;SBC); -case 0xF3: LD_IY(INC;SBC); +case 0xE7: RMW_ZP(INC;SBC); +case 0xF7: RMW_ZPX(INC;SBC); +case 0xEF: RMW_AB(INC;SBC); +case 0xFF: RMW_ABX(INC;SBC); +case 0xFB: RMW_ABY(INC;SBC); +case 0xE3: RMW_IX(INC;SBC); +case 0xF3: RMW_IY(INC;SBC); /* DOP */ @@ -468,11 +472,11 @@ case 0x9B: _S=_A&_X;ST_ABY(_S& (((A-_Y)>>8)+1) ); /* TOP */ case 0x0C: LD_AB(;); -case 0x1C: -case 0x3C: -case 0x5C: -case 0x7C: -case 0xDC: +case 0x1C: +case 0x3C: +case 0x5C: +case 0x7C: +case 0xDC: case 0xFC: LD_ABX(;); /* XAA - BIG QUESTION MARK HERE */