start using libpicofe, move some files
[fceu.git] / ops.h
diff --git a/ops.h b/ops.h
index 7e7075a..c5004d8 100644 (file)
--- 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 */