summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alu.asm19
-rw-r--r--opcodes.asm15
2 files changed, 22 insertions, 12 deletions
diff --git a/alu.asm b/alu.asm
index cce4011..18f5260 100644
--- a/alu.asm
+++ b/alu.asm
@@ -1,4 +1,21 @@
;; Parting out the big math/logic routines from the
;; instruction dispatch table.
-
+alu_sbc:
+ ;; SBC instruction
+ ;; SBC d1,d0
+ ;; d1 - (d0+C) -> d1
+ ;; sets flags
+
+ push.l d2
+ bsr flags_normalize
+ move.b flag_byte(pc),d2
+ andi.b #1,d2
+ add.b d0,d2
+ move.b d2,(f_tmp_src_b-flag_storage)(a3)
+ move.b d1,(f_tmp_dst_b-flag_storage)(a3)
+ sub.b d2,d1
+ move sr,(f_host_sr-flag_storage)(a3)
+ move.w #$0202,(flag_byte-flag_storage)(a3)
+ pop.l d2
+ rts
diff --git a/opcodes.asm b/opcodes.asm
index 9b550ea..35a7f4f 100644
--- a/opcodes.asm
+++ b/opcodes.asm
@@ -1439,17 +1439,10 @@ emu_op_97:
;; Do a SBC \2,\1
F_SBC_B MACRO
- ;; XXX TOO BIG
- bsr flags_normalize
- move.b flag_byte(pc),d0
- andi.b #1,d0
- add.b \1,d0
- move.b d0,(f_tmp_src_b-flag_storage)(a3)
- move.b \2,(f_tmp_dst_b-flag_storage)(a3)
- sub.b d0,\2
- move sr,(f_host_sr-flag_storage)(a3)
- move.w #$0202,(flag_byte-flag_storage)(a3)
-
+ move.b \2,d1
+ move.b \1,d0
+ bsr alu_sbc
+ move.b d1,\2
ENDM
START