diff options
| author | Astrid Smith | 2010-06-09 17:58:30 -0700 |
|---|---|---|
| committer | Astrid Smith | 2010-06-09 17:58:30 -0700 |
| commit | f64c9c2af72e18b0d52972c7729855049137f1e8 (patch) | |
| tree | 50519b9811d77228a288490e455c3f7e5c9ed858 /flags.asm | |
| parent | 7be0b77190fb706f68beb57e33fe3c38ce6ad5cf (diff) | |
Parted out flags to separate file, try 1 at fixing alignment issue
Diffstat (limited to 'flags.asm')
| -rw-r--r-- | flags.asm | 126 |
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. + |
