summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flags.asm19
-rw-r--r--main.asm5
2 files changed, 21 insertions, 3 deletions
diff --git a/flags.asm b/flags.asm
index 181cfd8..8df7c5d 100644
--- a/flags.asm
+++ b/flags.asm
@@ -92,7 +92,7 @@ F_ADD_SAVE MACRO
;; Normalize and return carry bit (is loaded into Z bit)
;; Destroys d1
-F_NORM_C MACRO
+f_norm_c:
move.b flag_valid,d1
andi.b #%00000001,d1
bne FNC_ok ; Bit is valid
@@ -103,7 +103,22 @@ F_NORM_C MACRO
FNC_ok:
move.b flag_byte,d1
andi.b #%00000001,d1
- ENDM
+ rts
+
+ ;; Normalize and return zero bit (loaded into Z bit)
+ ;; Destroys d1
+f_norm_z:
+ move.b flag_valid,d1
+ andi.b #%01000000,d1
+ bne FNZ_ok ; Bit is valid
+ move.b f_host_ccr,d1
+ andi.b #%01000000,d1
+ or.b d1,flag_byte
+ ori.b #%01000000,flag_valid
+FNZ_ok:
+ move.b flag_byte,d1
+ andi.b #%01000000,d1
+ rts
;; Routine to turn 68k flags into z80 flags.
diff --git a/main.asm b/main.asm
index 2a93928..d069ee8 100644
--- a/main.asm
+++ b/main.asm
@@ -638,7 +638,7 @@ emu_op_30:
;; JR NC,immed.b
;; If carry clear
;; PC <- PC+immed.b
- F_NORM_C
+ bsr f_norm_c
bne end_30 ; branch taken: carry set
FETCHBI d1
add.w d1,d2
@@ -1732,6 +1732,9 @@ emu_op_c0:
;; PCl <- (SP)
;; PCh <- (SP+1)
;; SP <- (SP+2)
+ bsr f_norm_z
+ beq emu_op_c9 ; RET
+ DONE
START
emu_op_c1: