diff engine.c @ 13:2aebc6b17fbf

swi/rti bug fixed
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 07 Jul 2018 12:45:31 +0900
parents ce7323f9b937
children 807141dc5ee8
line wrap: on
line diff
--- a/engine.c	Sat Jul 07 00:37:24 2018 +0900
+++ b/engine.c	Sat Jul 07 12:45:31 2018 +0900
@@ -250,14 +250,15 @@
    			 PUSHBYTE(idpreg)
    			 PUSHBYTE(ibreg)
    			 PUSHBYTE(iareg)
+   			 iccreg|=0x80;
    			 PUSHBYTE(iccreg)
    			 iccreg|=0x90;
      			 ipcreg=GETWORD(0xfff8);
     }
     if(irq==2&&!(iccreg&0x40)) { /* Fast IRQ */
 			 PUSHWORD(ipcreg)
+   			 iccreg&=0x7f;
    			 PUSHBYTE(iccreg)
-   			 iccreg&=0x7f;
     			 iccreg|=0x50;
     			 ipcreg=GETWORD(0xfff6);
     }
@@ -665,8 +666,8 @@
  		if(tb&0x80)PULUWORD(ipcreg) break;
    case 0x39: /* RTS*/ PULLWORD(ipcreg) break;
    case 0x3A: /* ABX*/ ixreg+=ibreg; break;
-   case 0x3B: /* RTI*/  tb=iccreg&0x80;
-			PULLBYTE(iccreg)
+   case 0x3B: /* RTI*/  PULLBYTE(iccreg)
+                        tb=iccreg&0x80;
 			if(tb)
  			{
   			 PULLBYTE(iareg)
@@ -706,8 +707,8 @@
    			 PUSHBYTE(idpreg)
    			 PUSHBYTE(ibreg)
    			 PUSHBYTE(iareg)
+   			 iccreg|=0x80;
    			 PUSHBYTE(iccreg)
-   			 iccreg|=0x80;
    			 if(!iflag)iccreg|=0x50;
    			 switch(iflag) {
                           case 0:ipcreg=GETWORD(0xfffa);break;