summaryrefslogtreecommitdiff
path: root/main.asm
diff options
context:
space:
mode:
authorDuncan Smith2010-06-18 16:46:38 -0700
committerDuncan Smith2010-06-18 16:46:38 -0700
commit017aeae0af5030d13d7ad9a4b1d9137ce3c7589f (patch)
treedad5a1651e40d2c30c1b5c126566b2c60a93e34f /main.asm
parent307b04ac519dbd85825260616781a7eeab4ce2c5 (diff)
Trying to get the flags storage to work ...
Diffstat (limited to 'main.asm')
-rw-r--r--main.asm84
1 files changed, 56 insertions, 28 deletions
diff --git a/main.asm b/main.asm
index 2d53b03..3082edb 100644
--- a/main.asm
+++ b/main.asm
@@ -14,7 +14,7 @@
;;; A6 = emulated PC XXX
;;; A5 = instruction table base pointer
;;; A4 = emulated SP XXX
-;;; A3 =
+;;; A3 = pointer to flag_storage
;;; A2 =
;;; A1 =
;;; A0 =
@@ -34,6 +34,11 @@
;;; but I don't really care to go to the effort to make it so.
;;; D7 = IX (hi), IY (low)
+;;; Assemble with the following flags:
+;;; a68k -l -n -g -t main.asm
+;;; -n is important, it disables optimizations
+
+
;;; emulated I and R are both in RAM
xdef _ti89
@@ -166,7 +171,7 @@ DONE MACRO
clr.w d0 ; 4 cycles
move.b (a4)+,d0 ; 8 cycles
rol.w #5,d0 ;16 cycles
- jmp 0(a3,d0) ;14 cycles
+ jmp 0(a5,d0) ;14 cycles
;; overhead: 42 cycles
ENDM
@@ -212,9 +217,9 @@ _main:
bsr emu_setup
rts
- include "flags.asm"
include "ports.asm"
include "interrupts.asm"
+ include "flags.asm"
emu_setup:
movea emu_plain_op,a5
@@ -783,11 +788,13 @@ emu_op_36:
emu_op_37:
;; SCF
;; Set Carry Flag
- move.b #%00111011,(flag_valid).w
+ move.b #%00111011,flag_valid-flag_storage(a3)
+ move.b #%00111011,17(a3)
move.b d3,d1
ori.b #%00000001,d1
andi.b #%00101001,d1
- or.b d1,(flag_byte).w
+; or.b d1,flag_byte(a3)
+ or.b d1,16(a3)
DONE
START
@@ -848,7 +855,8 @@ emu_op_3f:
;; Toggle carry flag
bsr flags_normalize
;; SZ5H3PNC
- eor.b #%00010001,(flag_byte).w
+; eor.b #%00010001,flag_byte-flag_storage(a3)
+ eor.b #%00010001,16(a3)
DONE
START
@@ -1347,10 +1355,13 @@ emu_op_7f:
F_ADD_B MACRO ; 14 bytes?
move.b \1,f_tmp_src_b ; preserve operands for flag work
move.b \2,f_tmp_dst_b
- move.b #1,(f_tmp_byte).w
+; move.b #1,(f_tmp_byte-flag_storage)(a3)
+ move.b #1,0(a3)
add \1,\2
- move sr,(f_host_ccr).w
- move.w #0202,(flag_byte).w
+; move sr,(f_host_sr-flag_storage)(a3)
+ move sr,14(a3)
+; move.w #0202,(flag_byte-flag_storage)(a3)
+ move.w #0202,16(a3)
ENDM
START
@@ -1415,14 +1426,18 @@ emu_op_87:
F_ADC_B MACRO ; S34
;; XXX TOO BIG
bsr flags_normalize
- move.b (flag_byte).w,d0
+ move.b flag_byte(pc),d0
andi.b #1,d0
add.b \1,d0
- move.b d0,(f_tmp_src_b).w
- move.b \2,(f_tmp_dst_b).w
+; move.b d0,(f_tmp_src_b-flag_storage)(a3)
+ move.b d0,2(a3)
+; move.b \2,(f_tmp_dst_b-flag_storage)(a3)
+ move.b \2,3(a3)
add.b d0,\2
- move sr,(f_host_ccr).w
- move.w #$0202,(flag_byte).w
+; move sr,(f_host_ccr-flag_storage)(a3)
+ move sr,15(a3)
+; move.w #$0202,(flag_byte-flag_storage)(a3)
+ move.w #$0202,16(a3)
ENDM
START
@@ -1492,13 +1507,20 @@ emu_op_8f:
;; XXX CHECK
F_SUB_B MACRO ; 22 bytes?
;; XXX use lea and then d(an) if you have a spare register.
- move.b \1,(f_tmp_src_b).w ; preserve operands for flagging
- move.b \2,(f_tmp_dst_b).w
- move.b #1,(f_tmp_byte).w
- andi.b #%00000010,(flag_valid).w
- move.b #%00000010,(flag_byte).w
+ ;; preserve operands for flagging
+; move.b \1,(f_tmp_src_b-flag_storage)(a3)
+ move.b \1,2(a3)
+; move.b \2,(f_tmp_dst_b-flag_storage)(a3)
+ move.b \2,3(a3)
+; move.b #1,(f_tmp_byte-flag_storage)(a3)
+ move.b #1,0(a3)
+; andi.b #%00000010,(flag_valid-flag_storage)(a3)
+ andi.b #%00000010,17(a3)
+; move.b #%00000010,(flag_byte-flag_storage)(a3)
+ move.b #%00000010,16(a3)
sub \1,\2
- move sr,(f_host_ccr).w
+; move sr,(f_host_sr-flag_storage)(a3)
+ move sr,14(a0)
ENDM
START
@@ -1563,14 +1585,18 @@ emu_op_97:
F_SBC_B MACRO
;; XXX TOO BIG
bsr flags_normalize
- move.b (flag_byte).w,d0
+ move.b flag_byte(pc),d0
andi.b #1,d0
add.b \1,d0
- move.b d0,(f_tmp_src_b).w
- move.b \2,(f_tmp_dst_b).w
+; move.b d0,(f_tmp_src_b-flag_storage)(a3)
+ move.b d0,2(a3)
+; move.b \2,(f_tmp_dst_b-flag_storage)(a3)
+ move.b \2,3(a3)
sub.b d0,\2
- move sr,(f_host_ccr).w
- move.w #$0202,(flag_byte).w
+; move sr,(f_host_sr-flag_storage)(a3)
+ move sr,14(a3)
+; move.w #$0202,(flag_byte-flag_storage)(a3)
+ move.w #$0202,16(a3)
ENDM
@@ -2287,8 +2313,10 @@ emu_op_f1:
;; POP AF
;; SPEED this can be made faster ...
POPW d3
- move.w d3,(flag_byte).w
- move.b #$ff,(flag_valid).w
+; move.w d3,(flag_byte-flag_storage)(a3)
+ move.w d3,16(a3)
+; move.b #$ff,(flag_valid-flag_storage)(a3)
+ move.b #$ff,17(a3)
DONE
START
@@ -2316,7 +2344,7 @@ emu_op_f5:
;; PUSH AF
bsr flags_normalize
LOHI d3
- move.b (flag_byte).w,d3
+ move.b flag_byte(pc),d3
HILO d3
PUSHW d3
DONE