summaryrefslogtreecommitdiff
path: root/flags.asm
diff options
context:
space:
mode:
authorDuncan Smith2010-06-09 17:58:30 -0700
committerDuncan Smith2010-06-09 17:58:30 -0700
commit00456d52f13d62a86f4f6abcbef63d2ad1e94b25 (patch)
treea2e2d958e8b85c61f8ed5f82fe4775795dbe9736 /flags.asm
parent8f5536f9b6d652e96824a1a289df973c4e94fbc7 (diff)
Parted out flags to separate file, try 1 at fixing alignment issue
Diffstat (limited to 'flags.asm')
-rw-r--r--flags.asm126
1 files changed, 126 insertions, 0 deletions
diff --git a/flags.asm b/flags.asm
new file mode 100644
index 0000000..1dec86e
--- /dev/null
+++ b/flags.asm
@@ -0,0 +1,126 @@
+;; N =S
+;; Z = Z
+;; V ~ P
+;; C= C
+;;
+;; =CCR= == z80==
+;; XNZVC SZ5H3PNC
+;; 00000 00000000
+;; 00001 00000001
+;; 00010 00000100
+;; 00011 00000101
+;; 00100 01000000
+;; 00101 01000001
+;; 00110 01000100
+;; 00111 01000101
+;; 01000 10000000
+;; 01001 10000001
+;; 01010 10000100
+;; 01011 10000101
+;; 01100 11000000
+;; 01101 11000001
+;; 01110 11000100
+;; 01111 11000101
+;; 10000 00000000
+;; 10001 00000001
+;; 10010 00000100
+;; 10011 00000101
+;; 10100 01000000
+;; 10101 01000001
+;; 10110 01000100
+;; 10111 01000101
+;; 11000 10000000
+;; 11001 10000001
+;; 11010 10000100
+;; 11011 10000101
+;; 11100 11000000
+;; 11101 11000001
+;; 11110 11000100
+;; 11111 11000101
+
+flags_set:
+ ;; Routine to set the given flags
+ ;; Noted in d0 by a 1 bit
+ or.b d0,flag_byte
+ or.b d0,flag_valid
+ rts
+
+flags_clear:
+ ;; Clear the given flags
+ ;; Noted in d0 by a 1 bit
+ or.b d0,flag_valid
+ not.b d0
+ and.b d0,flag_byte
+ rts
+
+ ;; Routine to turn 68k flags into z80 flags.
+ ;; Preconditions:
+ ;; Flags to change are noted in d0 by a 1 bit
+flags_normalize:
+ move.b host_ccr,d1
+ movea lut_ccr(pc),a1
+ move.b (lut_ccr,a1),d1
+ ;; XXX do this
+ rts
+
+ ;; LUT for the CCR -> F mapping
+lut_ccr:
+ dc.b %00000000
+ dc.b %00000001
+ dc.b %00000100
+ dc.b %00000101
+ dc.b %01000000
+ dc.b %01000001
+ dc.b %01000100
+ dc.b %01000101
+ dc.b %10000000
+ dc.b %10000001
+ dc.b %10000100
+ dc.b %10000101
+ dc.b %11000000
+ dc.b %11000001
+ dc.b %11000100
+ dc.b %11000101
+ dc.b %00000000
+ dc.b %00000001
+ dc.b %00000100
+ dc.b %00000101
+ dc.b %01000000
+ dc.b %01000001
+ dc.b %01000100
+ dc.b %01000101
+ dc.b %10000000
+ dc.b %10000001
+ dc.b %10000100
+ dc.b %10000101
+ dc.b %11000000
+ dc.b %11000001
+ dc.b %11000100
+ dc.b %11000101
+
+lut_valid:
+ dc.b %11000101
+
+storage:
+ ;; 1 if tmp_???b is valid, 0 if tmp_???w is valid
+f_tmp_byte: ds.b 0
+ ;; 2 if P is 0, 3 if P is 1, 4 if P is Parity, 5 if P is oVerflow
+f_tmp_p_type: ds.b 0
+
+ ;; byte operands
+f_tmp_src_b: ds.b 0
+f_tmp_dst_b: ds.b 0
+f_tmp_result_b: ds.b 0
+
+EVEN ;; word operands
+f_tmp_src_w: ds.w 0
+f_tmp_dst_w: ds.w 0
+f_tmp_result_w: ds.w 0
+
+ ;; 000XNZVC
+f_host_ccr: ds.b 0
+
+EVEN
+flag_byte: ds.b 0 ; Byte of all flags
+flag_valid: ds.b 0 ; Validity mask -- 1 if valid.
+