diff options
| author | Duncan Smith | 2010-06-26 13:47:25 -0700 |
|---|---|---|
| committer | Duncan Smith | 2010-06-26 13:47:25 -0700 |
| commit | 1fa0a81e756870d263d6c4f7ffa5dc71e2299d09 (patch) | |
| tree | 3855a8a95261b6ec8d35c4d051dbb95fb35736a7 | |
| parent | 5e36765df09585ec20587299f3cd2f6b3c93a443 (diff) | |
Parted out ADC macro-instruction
| -rw-r--r-- | alu.asm | 13 | ||||
| -rw-r--r-- | main.asm | 2 | ||||
| -rw-r--r-- | opcodes.asm | 14 |
3 files changed, 18 insertions, 11 deletions
@@ -14,6 +14,19 @@ alu_add: rts alu_adc: + ;; ADC instruction + ;; ADC d1,d0 + ;; d1 + d0 + carry -> d1 + 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) + add.b d2,d1 + move sr,(f_host_ccr-flag_storage)(a3) + move.w #$0202,(flag_byte-flag_storage)(a3) + rts alu_sbc: ;; SBC instruction @@ -21,7 +21,7 @@ ;;; ;;; D0 = current instruction, scratch for macros ;;; D1 = scratch for instructions -;;; D2 = undefined +;;; D2 = further scratch ;;; ;;; ;;; The following have their shadows in the top half of the register diff --git a/opcodes.asm b/opcodes.asm index 9154ec4..2301c71 100644 --- a/opcodes.asm +++ b/opcodes.asm @@ -1288,16 +1288,10 @@ emu_op_87: ;; Do an ADC \2,\1 F_ADC_B MACRO ; S34 - ;; 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) - add.b d0,\2 - move sr,(f_host_ccr-flag_storage)(a3) - move.w #$0202,(flag_byte-flag_storage)(a3) + move.b \2,d1 + move.b \1,d0 + bsr alu_adc + move.b d1,\2 ENDM START |
