diff --git a/zsnes/src/cpu/65816d.inc b/zsnes/src/cpu/65816d.inc index 828ec325..fe9c0948 100644 --- a/zsnes/src/cpu/65816d.inc +++ b/zsnes/src/cpu/65816d.inc @@ -393,6 +393,7 @@ NEWSYM joinflags sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpb] mov [eax+ebx],cl @@ -448,6 +449,7 @@ BRKemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpc+1] mov [eax+ebx],cl @@ -537,6 +539,7 @@ BRKemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpb] mov [eax+ebx],cl @@ -592,6 +595,7 @@ COPemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpc+1] mov [eax+ebx],cl diff --git a/zsnes/src/cpu/65816db.inc b/zsnes/src/cpu/65816db.inc index 43188113..1e07a166 100644 --- a/zsnes/src/cpu/65816db.inc +++ b/zsnes/src/cpu/65816db.inc @@ -382,6 +382,7 @@ EXTSYM dmadata sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpb] mov [eax+ebx],cl @@ -437,6 +438,7 @@ BRKemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpc+1] mov [eax+ebx],cl @@ -535,6 +537,7 @@ BRKemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpb] mov [eax+ebx],cl @@ -590,6 +593,7 @@ COPemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpc+1] mov [eax+ebx],cl diff --git a/zsnes/src/cpu/65816dc.inc b/zsnes/src/cpu/65816dc.inc index 19ace61f..8c9a5a37 100644 --- a/zsnes/src/cpu/65816dc.inc +++ b/zsnes/src/cpu/65816dc.inc @@ -392,6 +392,7 @@ EXTSYM dmadata sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpb] mov [eax+ebx],cl @@ -447,6 +448,7 @@ BRKemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpc+1] mov [eax+ebx],cl @@ -545,6 +547,7 @@ BRKemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpb] mov [eax+ebx],cl @@ -600,6 +603,7 @@ COPemulmode sub ebx,eax mov [xpc],bx mov eax,[wramdata] + xor ebx,ebx mov bx,[xs] mov cl,[xpc+1] mov [eax+ebx],cl diff --git a/zsnes/src/cpu/e65816.inc b/zsnes/src/cpu/e65816.inc index b0c84a33..a2ac741c 100644 --- a/zsnes/src/cpu/e65816.inc +++ b/zsnes/src/cpu/e65816.inc @@ -1903,8 +1903,13 @@ COp5B: ; TCD i endloop COp1B: ; TCS i mov ax,[xa] + test byte[xe],1 + jnz .emul mov [xs],ax endloop +.emul + mov [xs],al + endloop COp7B: ; TDC i mov ax,[xd] mov [xa],ax diff --git a/zsnes/src/cpu/e65816b.inc b/zsnes/src/cpu/e65816b.inc index 6f95f2ca..ba09a70c 100644 --- a/zsnes/src/cpu/e65816b.inc +++ b/zsnes/src/cpu/e65816b.inc @@ -1896,8 +1896,13 @@ COp5B: ; TCD i endloop COp1B: ; TCS i mov ax,[xa] + test byte[xe],1 + jnz .emul mov [xs],ax endloop +.emul + mov [xs],al + endloop COp7B: ; TDC i mov ax,[xd] mov [xa],ax diff --git a/zsnes/src/cpu/e65816c.inc b/zsnes/src/cpu/e65816c.inc index 744f9ea2..a266f18e 100644 --- a/zsnes/src/cpu/e65816c.inc +++ b/zsnes/src/cpu/e65816c.inc @@ -1896,8 +1896,13 @@ COp5B: ; TCD i endloop COp1B: ; TCS i mov ax,[xa] + test byte[xe],1 + jnz .emul mov [xs],ax endloop +.emul + mov [xs],al + endloop COp7B: ; TDC i mov ax,[xd] mov [xa],ax diff --git a/zsnes/src/cpu/irq.asm b/zsnes/src/cpu/irq.asm index 3344e15a..6010cf76 100644 --- a/zsnes/src/cpu/irq.asm +++ b/zsnes/src/cpu/irq.asm @@ -152,6 +152,7 @@ NEWSYM NMIemulmode mov [xs],cx xor bh,bh + mov [xpb],bh mov bl,[xpb] xor eax,eax mov ax,[nmiv8] @@ -320,6 +321,7 @@ NEWSYM IRQemulmode mov [xs],cx xor bh,bh + mov [xpb],bh mov bl,[xpb] xor eax,eax mov ax,[irqv8] @@ -428,6 +430,7 @@ NEWSYM IRQemulmodedeb mov [xs],cx xor bh,bh + mov [xpb],bh mov bl,[xpb] xor eax,eax mov ax,[irqv8] @@ -534,6 +537,7 @@ NEWSYM NMIemulmodedeb mov [xs],cx xor bh,bh + mov [xpb],bh mov bl,[xpb] xor eax,eax mov ax,[nmiv8]