.equ OP_DI = (37<<10)
.equ OP_EI = (38<<10)
.equ OP_INV = (39<<10)
+.equ OP_CPFA = (40<<10)
opjumps:
rjmp do_op_nop
rjmp do_op_di
rjmp do_op_ei
rjmp do_op_inv
+ rjmp do_op_cpfa
;How the flags are supposed to work:
;
;
do_op_adda:
- add opl,z_a
+ add z_a,opl
in temp,sreg
- ldpmx z_flags,sz53p_tab,opl ;S,Z,P flag
+ ldpmx z_flags,sz53p_tab,z_a ;S,Z,P flag
bmov z_flags,ZFL_C, temp,AVR_C
do_z80_flags_HP
ret
clc
sbrc z_flags,ZFL_C
sec
- adc opl,z_a
+ adc z_a,opl
in temp,sreg
- ldpmx z_flags,sz53p_tab,opl ;S,Z,P
+ ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
bmov z_flags,ZFL_C, temp,AVR_C
do_z80_flags_HP
ret
;|Mnemonic |SZHPNC|Description |Notes |
;----------------------------------------------------------------
;|SUB s |***V1*|Subtract |A=A-s |
-;|CP s |***V1*|Compare |A-s |
;|----------|SZHP C|---------- 8080 ----------------------------|
;|SUB s |***P *|Subtract |A=A-s |
-;|CP s |***P *|Compare |A-s |
;
do_op_subfa:
+ sub z_a,opl
+ in temp,sreg
+ ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
+ bmov z_flags,ZFL_C, temp,AVR_C
+ do_z80_flags_HP
+ do_z80_flags_set_N
+ ret
+
+;----------------------------------------------------------------
+;|Mnemonic |SZHPNC|Description |Notes |
+;----------------------------------------------------------------
+;|CP s |***V1*|Compare |A-s |
+;|----------|SZHP C|---------- 8080 ----------------------------|
+;|CP s |***P *|Compare |A-s |
+
+;
+do_op_cpfa:
mov temp,z_a
sub temp,opl
mov opl,temp
;
;
do_op_sbcfa:
- mov temp,z_a
clc
sbrc z_flags,ZFL_C
sec
- sbc temp,opl
- mov opl,temp
+ sbc z_a,opl
in temp,sreg
- ldpmx z_flags,sz53p_tab,opl ;S,Z,P
+ ldpmx z_flags,sz53p_tab,z_a ;S,Z,P
bmov z_flags,ZFL_C, temp,AVR_C
do_z80_flags_HP
do_z80_flags_set_N
;
; TODO H-Flag
do_op_anda:
- and opl,z_a ;
- ldpmx z_flags,sz53p_tab,opl ;S,Z,P,N,C
+ and z_a,opl ;
+ ldpmx z_flags,sz53p_tab,z_a ;S,Z,P,N,C
do_z80_flags_op_and
ret
;
; TODO: H-Flag
do_op_ora:
- or opl,z_a
- ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N,C
+ or z_a,opl
+ ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N,C
do_z80_flags_op_or
ret
;
; TODO: H-Flag
do_op_xora:
- eor opl,z_a
- ldpmx z_flags,sz53p_tab,opl ;S,Z,H,P,N,C
+ eor z_a,opl
+ ldpmx z_flags,sz53p_tab,z_a ;S,Z,H,P,N,C
do_z80_flags_op_or
ret
;
;
do_op_cpl:
- com opl
+ com z_a
do_z80_flags_set_HN
ret
.dw (FETCH_L | OP_INC | STORE_L ) ; 2C INC L
.dw (FETCH_L | OP_DEC | STORE_L ) ; 2D DEC L
.dw (FETCH_DIR8 | OP_NOP | STORE_L ) ; 2E nn LD L,n
-.dw (FETCH_A | OP_CPL | STORE_A ) ; 2F CPL
+.dw (FETCH_NOP | OP_CPL | STORE_NOP) ; 2F CPL
.dw (FETCH_NOP | OP_INV | STORE_NOP) ; 30 oo JR NC,o (Z80)
.dw (FETCH_DIR16| OP_NOP | STORE_SP ) ; 31 nn nn LD SP,nn
.dw (FETCH_DIR16| OP_NOP | STORE_AM ) ; 32 nn nn LD (nn),A
.dw (FETCH_L | OP_NOP | STORE_A ) ; 7D LD A,r
.dw (FETCH_MHL | OP_NOP | STORE_A ) ; 7E LD A,r
.dw (FETCH_A | OP_NOP | STORE_A ) ; 7F LD A,r
-.dw (FETCH_B | OP_ADDA | STORE_A ) ; 80 ADD A,r
-.dw (FETCH_C | OP_ADDA | STORE_A ) ; 81 ADD A,r
-.dw (FETCH_D | OP_ADDA | STORE_A ) ; 82 ADD A,r
-.dw (FETCH_E | OP_ADDA | STORE_A ) ; 83 ADD A,r
-.dw (FETCH_H | OP_ADDA | STORE_A ) ; 84 ADD A,r
-.dw (FETCH_L | OP_ADDA | STORE_A ) ; 85 ADD A,r
-.dw (FETCH_MHL | OP_ADDA | STORE_A ) ; 86 ADD A,r
-.dw (FETCH_A | OP_ADDA | STORE_A ) ; 87 ADD A,r
-.dw (FETCH_B | OP_ADCA | STORE_A ) ; 88 ADC A,r
-.dw (FETCH_C | OP_ADCA | STORE_A ) ; 89 ADC A,r
-.dw (FETCH_D | OP_ADCA | STORE_A ) ; 8A ADC A,r
-.dw (FETCH_E | OP_ADCA | STORE_A ) ; 8B ADC A,r
-.dw (FETCH_H | OP_ADCA | STORE_A ) ; 8C ADC A,r
-.dw (FETCH_L | OP_ADCA | STORE_A ) ; 8D ADC A,r
-.dw (FETCH_MHL | OP_ADCA | STORE_A ) ; 8E ADC A,r
-.dw (FETCH_A | OP_ADCA | STORE_A ) ; 8F ADC A,r
-.dw (FETCH_B | OP_SUBFA | STORE_A ) ; 90 SUB A,r
-.dw (FETCH_C | OP_SUBFA | STORE_A ) ; 91 SUB A,r
-.dw (FETCH_D | OP_SUBFA | STORE_A ) ; 92 SUB A,r
-.dw (FETCH_E | OP_SUBFA | STORE_A ) ; 93 SUB A,r
-.dw (FETCH_H | OP_SUBFA | STORE_A ) ; 94 SUB A,r
-.dw (FETCH_L | OP_SUBFA | STORE_A ) ; 95 SUB A,r
-.dw (FETCH_MHL | OP_SUBFA | STORE_A ) ; 96 SUB A,r
-.dw (FETCH_A | OP_SUBFA | STORE_A ) ; 97 SUB A,r
-.dw (FETCH_B | OP_SBCFA | STORE_A ) ; 98 SBC A,r
-.dw (FETCH_C | OP_SBCFA | STORE_A ) ; 99 SBC A,r
-.dw (FETCH_D | OP_SBCFA | STORE_A ) ; 9A SBC A,r
-.dw (FETCH_E | OP_SBCFA | STORE_A ) ; 9B SBC A,r
-.dw (FETCH_H | OP_SBCFA | STORE_A ) ; 9C SBC A,r
-.dw (FETCH_L | OP_SBCFA | STORE_A ) ; 9D SBC A,r
-.dw (FETCH_MHL | OP_SBCFA | STORE_A ) ; 9E SBC A,r
-.dw (FETCH_A | OP_SBCFA | STORE_A ) ; 9F SBC A,r
-.dw (FETCH_B | OP_ANDA | STORE_A ) ; A0 AND A,r
-.dw (FETCH_C | OP_ANDA | STORE_A ) ; A1 AND A,r
-.dw (FETCH_D | OP_ANDA | STORE_A ) ; A2 AND A,r
-.dw (FETCH_E | OP_ANDA | STORE_A ) ; A3 AND A,r
-.dw (FETCH_H | OP_ANDA | STORE_A ) ; A4 AND A,r
-.dw (FETCH_L | OP_ANDA | STORE_A ) ; A5 AND A,r
-.dw (FETCH_MHL | OP_ANDA | STORE_A ) ; A6 AND A,r
-.dw (FETCH_A | OP_ANDA | STORE_A ) ; A7 AND A,r
-.dw (FETCH_B | OP_XORA | STORE_A ) ; A8 XOR A,r
-.dw (FETCH_C | OP_XORA | STORE_A ) ; A9 XOR A,r
-.dw (FETCH_D | OP_XORA | STORE_A ) ; AA XOR A,r
-.dw (FETCH_E | OP_XORA | STORE_A ) ; AB XOR A,r
-.dw (FETCH_H | OP_XORA | STORE_A ) ; AC XOR A,r
-.dw (FETCH_L | OP_XORA | STORE_A ) ; AD XOR A,r
-.dw (FETCH_MHL | OP_XORA | STORE_A ) ; AE XOR A,r
-.dw (FETCH_A | OP_XORA | STORE_A ) ; AF XOR A,r
-.dw (FETCH_B | OP_ORA | STORE_A ) ; B0 OR A,r
-.dw (FETCH_C | OP_ORA | STORE_A ) ; B1 OR A,r
-.dw (FETCH_D | OP_ORA | STORE_A ) ; B2 OR A,r
-.dw (FETCH_E | OP_ORA | STORE_A ) ; B3 OR A,r
-.dw (FETCH_H | OP_ORA | STORE_A ) ; B4 OR A,r
-.dw (FETCH_L | OP_ORA | STORE_A ) ; B5 OR A,r
-.dw (FETCH_MHL | OP_ORA | STORE_A ) ; B6 OR A,r
-.dw (FETCH_A | OP_ORA | STORE_A ) ; B7 OR A,r
-.dw (FETCH_B | OP_SUBFA | STORE_NOP) ; B8 CP A,r
-.dw (FETCH_C | OP_SUBFA | STORE_NOP) ; B9 CP A,r
-.dw (FETCH_D | OP_SUBFA | STORE_NOP) ; BA CP A,r
-.dw (FETCH_E | OP_SUBFA | STORE_NOP) ; BB CP A,r
-.dw (FETCH_H | OP_SUBFA | STORE_NOP) ; BC CP A,r
-.dw (FETCH_L | OP_SUBFA | STORE_NOP) ; BD CP A,r
-.dw (FETCH_MHL | OP_SUBFA | STORE_NOP) ; BE CP A,r
-.dw (FETCH_A | OP_SUBFA | STORE_NOP) ; BF CP A,r
+.dw (FETCH_B | OP_ADDA | STORE_NOP) ; 80 ADD A,r
+.dw (FETCH_C | OP_ADDA | STORE_NOP) ; 81 ADD A,r
+.dw (FETCH_D | OP_ADDA | STORE_NOP) ; 82 ADD A,r
+.dw (FETCH_E | OP_ADDA | STORE_NOP) ; 83 ADD A,r
+.dw (FETCH_H | OP_ADDA | STORE_NOP) ; 84 ADD A,r
+.dw (FETCH_L | OP_ADDA | STORE_NOP) ; 85 ADD A,r
+.dw (FETCH_MHL | OP_ADDA | STORE_NOP) ; 86 ADD A,r
+.dw (FETCH_A | OP_ADDA | STORE_NOP) ; 87 ADD A,r
+.dw (FETCH_B | OP_ADCA | STORE_NOP) ; 88 ADC A,r
+.dw (FETCH_C | OP_ADCA | STORE_NOP) ; 89 ADC A,r
+.dw (FETCH_D | OP_ADCA | STORE_NOP) ; 8A ADC A,r
+.dw (FETCH_E | OP_ADCA | STORE_NOP) ; 8B ADC A,r
+.dw (FETCH_H | OP_ADCA | STORE_NOP) ; 8C ADC A,r
+.dw (FETCH_L | OP_ADCA | STORE_NOP) ; 8D ADC A,r
+.dw (FETCH_MHL | OP_ADCA | STORE_NOP) ; 8E ADC A,r
+.dw (FETCH_A | OP_ADCA | STORE_NOP) ; 8F ADC A,r
+.dw (FETCH_B | OP_SUBFA | STORE_NOP) ; 90 SUB A,r
+.dw (FETCH_C | OP_SUBFA | STORE_NOP) ; 91 SUB A,r
+.dw (FETCH_D | OP_SUBFA | STORE_NOP) ; 92 SUB A,r
+.dw (FETCH_E | OP_SUBFA | STORE_NOP) ; 93 SUB A,r
+.dw (FETCH_H | OP_SUBFA | STORE_NOP) ; 94 SUB A,r
+.dw (FETCH_L | OP_SUBFA | STORE_NOP) ; 95 SUB A,r
+.dw (FETCH_MHL | OP_SUBFA | STORE_NOP) ; 96 SUB A,r
+.dw (FETCH_A | OP_SUBFA | STORE_NOP) ; 97 SUB A,r
+.dw (FETCH_B | OP_SBCFA | STORE_NOP) ; 98 SBC A,r
+.dw (FETCH_C | OP_SBCFA | STORE_NOP) ; 99 SBC A,r
+.dw (FETCH_D | OP_SBCFA | STORE_NOP) ; 9A SBC A,r
+.dw (FETCH_E | OP_SBCFA | STORE_NOP) ; 9B SBC A,r
+.dw (FETCH_H | OP_SBCFA | STORE_NOP) ; 9C SBC A,r
+.dw (FETCH_L | OP_SBCFA | STORE_NOP) ; 9D SBC A,r
+.dw (FETCH_MHL | OP_SBCFA | STORE_NOP) ; 9E SBC A,r
+.dw (FETCH_A | OP_SBCFA | STORE_NOP) ; 9F SBC A,r
+.dw (FETCH_B | OP_ANDA | STORE_NOP) ; A0 AND A,r
+.dw (FETCH_C | OP_ANDA | STORE_NOP) ; A1 AND A,r
+.dw (FETCH_D | OP_ANDA | STORE_NOP) ; A2 AND A,r
+.dw (FETCH_E | OP_ANDA | STORE_NOP) ; A3 AND A,r
+.dw (FETCH_H | OP_ANDA | STORE_NOP) ; A4 AND A,r
+.dw (FETCH_L | OP_ANDA | STORE_NOP) ; A5 AND A,r
+.dw (FETCH_MHL | OP_ANDA | STORE_NOP) ; A6 AND A,r
+.dw (FETCH_A | OP_ANDA | STORE_NOP) ; A7 AND A,r
+.dw (FETCH_B | OP_XORA | STORE_NOP) ; A8 XOR A,r
+.dw (FETCH_C | OP_XORA | STORE_NOP) ; A9 XOR A,r
+.dw (FETCH_D | OP_XORA | STORE_NOP) ; AA XOR A,r
+.dw (FETCH_E | OP_XORA | STORE_NOP) ; AB XOR A,r
+.dw (FETCH_H | OP_XORA | STORE_NOP) ; AC XOR A,r
+.dw (FETCH_L | OP_XORA | STORE_NOP) ; AD XOR A,r
+.dw (FETCH_MHL | OP_XORA | STORE_NOP) ; AE XOR A,r
+.dw (FETCH_A | OP_XORA | STORE_NOP) ; AF XOR A,r
+.dw (FETCH_B | OP_ORA | STORE_NOP) ; B0 OR A,r
+.dw (FETCH_C | OP_ORA | STORE_NOP) ; B1 OR A,r
+.dw (FETCH_D | OP_ORA | STORE_NOP) ; B2 OR A,r
+.dw (FETCH_E | OP_ORA | STORE_NOP) ; B3 OR A,r
+.dw (FETCH_H | OP_ORA | STORE_NOP) ; B4 OR A,r
+.dw (FETCH_L | OP_ORA | STORE_NOP) ; B5 OR A,r
+.dw (FETCH_MHL | OP_ORA | STORE_NOP) ; B6 OR A,r
+.dw (FETCH_A | OP_ORA | STORE_NOP) ; B7 OR A,r
+.dw (FETCH_B | OP_CPFA | STORE_NOP) ; B8 CP A,r
+.dw (FETCH_C | OP_CPFA | STORE_NOP) ; B9 CP A,r
+.dw (FETCH_D | OP_CPFA | STORE_NOP) ; BA CP A,r
+.dw (FETCH_E | OP_CPFA | STORE_NOP) ; BB CP A,r
+.dw (FETCH_H | OP_CPFA | STORE_NOP) ; BC CP A,r
+.dw (FETCH_L | OP_CPFA | STORE_NOP) ; BD CP A,r
+.dw (FETCH_MHL | OP_CPFA | STORE_NOP) ; BE CP A,r
+.dw (FETCH_A | OP_CPFA | STORE_NOP) ; BF CP A,r
.dw (FETCH_NOP | OP_IFNZ | STORE_RET) ; C0 RET NZ
.dw (FETCH_NOP | OP_POP16 | STORE_BC ) ; C1 POP BC
.dw (FETCH_DIR16| OP_IFNZ | STORE_PC ) ; C2 nn nn JP NZ,nn
.dw (FETCH_DIR16| OP_NOP | STORE_PC ) ; C3 nn nn JP nn
.dw (FETCH_DIR16| OP_IFNZ | STORE_CALL) ; C4 nn nn CALL NZ,nn
.dw (FETCH_BC | OP_PUSH16 | STORE_NOP) ; C5 PUSH BC
-.dw (FETCH_DIR8 | OP_ADDA | STORE_A ) ; C6 nn ADD A,n
+.dw (FETCH_DIR8 | OP_ADDA | STORE_NOP) ; C6 nn ADD A,n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; C7 RST 0
.dw (FETCH_NOP | OP_IFZ | STORE_RET) ; C8 RET Z
.dw (FETCH_NOP | OP_NOP | STORE_RET) ; C9 RET
.dw (FETCH_NOP | OP_INV | STORE_NOP) ; CB (Z80 specific)
.dw (FETCH_DIR16| OP_IFZ | STORE_CALL) ; CC nn nn CALL Z,nn
.dw (FETCH_DIR16| OP_NOP | STORE_CALL) ; CD nn nn CALL nn
-.dw (FETCH_DIR8 | OP_ADCA | STORE_A ) ; CE nn ADC A,n
+.dw (FETCH_DIR8 | OP_ADCA | STORE_NOP) ; CE nn ADC A,n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; CF RST 8H
.dw (FETCH_NOP | OP_IFNC | STORE_RET) ; D0 RET NC
.dw (FETCH_NOP | OP_POP16 | STORE_DE ) ; D1 POP DE
.dw (FETCH_DIR8 | OP_OUTA | STORE_NOP) ; D3 nn OUT (n),A
.dw (FETCH_DIR16| OP_IFNC | STORE_CALL) ; D4 nn nn CALL NC,nn
.dw (FETCH_DE | OP_PUSH16 | STORE_NOP) ; D5 PUSH DE
-.dw (FETCH_DIR8 | OP_SUBFA | STORE_A ) ; D6 nn SUB n
+.dw (FETCH_DIR8 | OP_SUBFA | STORE_NOP) ; D6 nn SUB n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; D7 RST 10H
.dw (FETCH_NOP | OP_IFC | STORE_RET) ; D8 RET C
.dw (FETCH_NOP | OP_INV | STORE_NOP) ; D9 EXX (Z80)
.dw (FETCH_DIR8 | OP_IN | STORE_A ) ; DB nn IN A,(n)
.dw (FETCH_DIR16| OP_IFC | STORE_CALL) ; DC nn nn CALL C,nn
.dw (FETCH_NOP | OP_INV | STORE_NOP) ; DD (Z80)
-.dw (FETCH_DIR8 | OP_SBCFA | STORE_A ) ; DE nn SBC A,n
+.dw (FETCH_DIR8 | OP_SBCFA | STORE_NOP) ; DE nn SBC A,n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; DF RST 18H
.dw (FETCH_NOP | OP_IFPO | STORE_RET) ; E0 RET PO
.dw (FETCH_NOP | OP_POP16 | STORE_HL ) ; E1 POP HL
.dw (FETCH_MSP | OP_EXHL | STORE_MSP) ; E3 EX (SP),HL
.dw (FETCH_DIR16| OP_IFPO | STORE_CALL) ; E4 nn nn CALL PO,nn
.dw (FETCH_HL | OP_PUSH16 | STORE_NOP) ; E5 PUSH HL
-.dw (FETCH_DIR8 | OP_ANDA | STORE_A ) ; E6 nn AND n
+.dw (FETCH_DIR8 | OP_ANDA | STORE_NOP) ; E6 nn AND n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; E7 RST 20H
.dw (FETCH_NOP | OP_IFPE | STORE_RET) ; E8 RET PE
.dw (FETCH_HL | OP_NOP | STORE_PC ) ; E9 JP (HL)
.dw (FETCH_DE | OP_EXHL | STORE_DE ) ; EB EX DE,HL
.dw (FETCH_DIR16| OP_IFPE | STORE_CALL) ; EC nn nn CALL PE,nn
.dw (FETCH_NOP | OP_INV | STORE_NOP) ; ED (Z80 specific)
-.dw (FETCH_DIR8 | OP_XORA | STORE_A ) ; EE nn XOR n
+.dw (FETCH_DIR8 | OP_XORA | STORE_NOP) ; EE nn XOR n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; EF RST 28H
.dw (FETCH_NOP | OP_IFP | STORE_RET) ; F0 RET P
.dw (FETCH_NOP | OP_POP16 | STORE_AF ) ; F1 POP AF
.dw (FETCH_NOP | OP_DI | STORE_NOP) ; F3 DI
.dw (FETCH_DIR16| OP_IFP | STORE_CALL) ; F4 nn nn CALL P,nn
.dw (FETCH_AF | OP_PUSH16 | STORE_NOP) ; F5 PUSH AF
-.dw (FETCH_DIR8 | OP_ORA | STORE_A ) ; F6 nn OR n
+.dw (FETCH_DIR8 | OP_ORA | STORE_NOP) ; F6 nn OR n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; F7 RST 30H
.dw (FETCH_NOP | OP_IFM | STORE_RET) ; F8 RET M
.dw (FETCH_HL | OP_NOP | STORE_SP ) ; F9 LD SP,HL
.dw (FETCH_NOP | OP_EI | STORE_NOP) ; FB EI
.dw (FETCH_DIR16| OP_IFM | STORE_CALL) ; FC nn nn CALL M,nn
.dw (FETCH_NOP | OP_INV | STORE_NOP) ; FD (Z80 specific)
-.dw (FETCH_DIR8 | OP_SUBFA | STORE_NOP) ; FE nn CP n
+.dw (FETCH_DIR8 | OP_CPFA | STORE_NOP) ; FE nn CP n
.dw (FETCH_RST | OP_NOP | STORE_CALL) ; FF RST 38H
; vim:set ts=8 noet nowrap