ld c,a\r
call pstr ;print mnemonic\r
call p_goto_col\r
- ex de,hl\r
- call CALL_HL ;print arguments\r
+ call pr_instr_args ;print arguments\r
pop bc\r
scf\r
ret\r
inc hl\r
jr lookup_op\r
l1a7fh:\r
- ld de,p_arg_none\r
+ ld e,a_noarg\r
inc hl\r
ld c,(hl)\r
jr get_mnemonic\r
inc hl\r
inc hl\r
inc hl\r
- inc hl\r
ld a,(hl)\r
and a\r
jr nz,lookup_op_arg\r
inc hl\r
ld c,(hl)\r
inc c\r
- ret z\r
+ ret z ;carry clear\r
dec c\r
inc hl\r
ld e,(hl)\r
- inc hl\r
- ld d,(hl)\r
get_mnemonic:\r
ld hl,t_MNEMONICS\r
ld b,0\r
scf\r
ret\r
\r
+lookup_branch_op ;TODO\r
+ ld a,(iy+000h)\r
+ and (hl)\r
+ inc hl\r
+ cp (hl)\r
+ jr z,l1aa8_br\r
+ inc hl\r
+ inc hl\r
+ inc hl\r
+ ld a,(hl)\r
+ and a\r
+ jr nz,lookup_branch_op\r
+ ret\r
+\r
+l1aa8_br:\r
+ inc hl\r
+ ld e,(hl)\r
+ inc hl\r
+ ld d,(hl)\r
+ scf\r
+ ret\r
+\r
;-------------------------------------------------------------------------------\r
; 1 byte opcodes (no parameters)\r
; Format: db opcode, t_MNEMONICS-index\r
; dw argument formating function\r
b_1ad1_start:\r
db 0c0h,040h,o_LD ;ld r[y],r[z]\r
- dw p_arg_ry_rz\r
+ db a_rr\r
db 0f8h,080h,o_ADD ;add a,r[z]\r
- dw p_arg_a_r\r
+ db a_ar\r
db 0f8h,088h,o_ADC ;adc a,r[z]\r
- dw p_arg_a_r\r
+ db a_ar\r
db 0f8h,090h,o_SUB ;sub r[z]\r
- dw p_rz\r
+ db a_r\r
db 0f8h,098h,o_SBC ;sbc a,r[z]\r
- dw p_arg_a_r\r
+ db a_ar\r
db 0f8h,0a0h,o_AND ;and r[z]\r
- dw p_rz\r
+ db a_r\r
db 0f8h,0a8h,o_XOR ;xor r[z]\r
- dw p_rz\r
+ db a_r\r
db 0f8h,0b0h,o_OR ;or r[z]\r
- dw p_rz\r
+ db a_r\r
db 0f8h,0b8h,o_CP ;cp r[z]\r
- dw p_rz\r
+ db a_r\r
db 0c7h,0c0h,o_RET ;ret cc\r
- dw p_cc\r
+ db a_cc\r
db 0c7h,0c7h,o_RST ;rst\r
- dw p_arg_rst\r
+ db a_rst\r
db 0cfh,0c1h,o_POP ;pop rp2\r
- dw p_rp2\r
+ db a_p2\r
db 0cfh,0c5h,o_PUSH ;push rp2\r
- dw p_rp2\r
+ db a_p2\r
db 0ffh,0e3h,o_EX ;ex (sp),hl\r
- dw l1ca0h\r
+ db a_esphl\r
db 0ffh,0e9h,o_JP ;jp (hl)\r
- dw l1caeh\r
+ db a_hl\r
db 0ffh,0ebh,o_EX ;ex de,hl\r
- dw p_arg_ex_dehl\r
+ db a_dehl\r
db 0ffh,0f9h,o_LD ;ld sp,hl\r
- dw l1cc1h\r
+ db a_lsphl\r
db 0cfh,003h,o_INC ;inc rp\r
- dw p_rp\r
+ db a_p\r
db 0cfh,00bh,o_DEC ;dec rp\r
- dw p_rp\r
+ db a_p\r
db 0c7h,004h,o_INC ;inc r[y]\r
- dw p_ry\r
+ db a_ry\r
db 0c7h,005h,o_DEC ;dec r[y]\r
- dw p_ry\r
+ db a_ry\r
db 0ffh,008h,o_EX ;ex af,af'\r
- dw p_arg_ex_afaf\r
+ db a_eaf\r
db 0cfh,009h,o_ADD ;add hl,rp\r
- dw l1dcah\r
+ db a_hlp\r
db 0efh,002h,o_LD ;ld (rp),a ;rp=bc,de\r
- dw l1cdch\r
+ db a_pa\r
db 0efh,00ah,o_LD ;ld a,(rp) ;rp=bc,de\r
- dw l1ce5h\r
+ db a_ap\r
db 0\r
\r
-; 2 byte opdodes\r
+; 2 byte opcodes\r
b_1b54_start:\r
db 0c7h,006h,o_LD ;ld r[y],nn\r
- dw l1cfah\r
+ db a_rn\r
db 0ffh,0c6h,o_ADD ;add a,nn\r
- dw l1cf5h\r
+ db a_an\r
db 0ffh,0ceh,o_ADC ;adc a,nn\r
- dw l1cf5h\r
+ db a_an\r
db 0ffh,0d6h,o_SUB ;sub nn\r
- dw l1d09h\r
+ db a_n\r
db 0ffh,0deh,o_SBC ;sbc a,nn\r
- dw l1cf5h\r
+ db a_an\r
db 0ffh,0e6h,o_AND ;and nn\r
- dw l1d09h\r
+ db a_n\r
db 0ffh,0eeh,o_XOR ;xor nn\r
- dw l1d09h\r
+ db a_n\r
db 0ffh,0f6h,o_OR ;or nn\r
- dw l1d09h\r
+ db a_n\r
db 0ffh,0feh,o_CP ;cp nn\r
- dw l1d09h\r
+ db a_n\r
db 0ffh,010h,o_DJNZ ;djnz\r
- dw p_arg_jrel\r
+ db a_j\r
db 0ffh,018h,o_JR ;jr\r
- dw p_arg_jrel\r
+ db a_j\r
db 0e7h,020h,o_JR ;jr cc,\r
- dw p_arg_cc_jrel\r
+ db a_ccj\r
db 0ffh,0d3h,o_OUT ;out (nn),a\r
- dw l1d37h\r
+ db a_ma\r
db 0ffh,0dbh,o_IN ;in a,(nn)\r
- dw l1d29h\r
+ db a_am\r
db 0\r
\r
; 3 byte opcodes\r
b_1b9b_start:\r
db 0c7h,0c2h,o_JP ;jp cc,mn\r
- dw p_arg_cc_mn\r
+ db a_ccnn\r
db 0c7h,0c4h,o_CALL ;call cc,mn\r
- dw p_arg_cc_mn\r
+ db a_ccnn\r
db 0cfh,001h,o_LD ;ld ww,mn\r
- dw p_arg_ww_mn\r
+ db a_rnn\r
db 0ffh,0c3h,o_JP ;jp mn\r
- dw p_arg_mn\r
+ db a_nn\r
db 0ffh,0cdh,o_CALL ;call mn\r
- dw p_arg_mn\r
+ db a_nn\r
db 0ffh,022h,o_LD ;ld (mn),hl\r
- dw p_arg_addr_hl\r
+ db a_mmhl\r
db 0ffh,02ah,o_LD ;ld hl,(mn)\r
- dw p_arg_hl_addr\r
+ db a_hlmm\r
db 0ffh,032h,o_LD ;ld (mn),a\r
- dw p_arg_addr_a\r
+ db a_mma\r
db 0ffh,03ah,o_LD ;ld a,(mn)\r
- dw p_arg_a_addr\r
+ db a_amm\r
db 0\r
\r
; Prefix ED + 1 byte opcode, no arguments\r
\r
b_1bf4_start:\r
db 0ffh,070h,o_IN ;in (c) ;\r
- dw p_arg_in_c_0 ;\r
+ db a_c\r
db 0c7h,040h,o_IN ;in r,(c) ;r=b,c,d,e,h,l,a\r
- dw p_arg_in_c ;\r
+ db a_rc\r
db 0ffh,071h,0ffh ;out (c),0 ;\r
- dw p_arg_out_c ;\r
+ db a_cr\r
db 0c7h,041h,o_OUT ;out (c),r ;r=b,c,d,e,h,l,a\r
- dw p_arg_out_c ;\r
+ db a_cr\r
db 0cfh,042h,o_SBC ;sbc hl,rp\r
- dw l1dcah ;\r
+ db a_hlp\r
db 0cfh,04ah,o_ADC ;adc hl,rp\r
- dw l1dcah ;\r
+ db a_hlp\r
db 0ffh,046h,o_IM ;im 0\r
- dw l1d85h ;\r
+ db a_im0\r
db 0ffh,056h,o_IM ;im 1\r
- dw l1d89h ;\r
+ db a_im1\r
db 0ffh,05eh,o_IM ;im 2\r
- dw l1d8dh ;\r
+ db a_im2\r
db 0e7h,047h,o_LD ;ld i,a ... ld a,r\r
- dw p_arg_IR ;\r
+ db a_ai\r
db 0cfh,04ch,o_MLT ;mlt rr\r
- dw p_rp\r
+ db a_p\r
db 0c7h,004h,o_TST ;tst r\r
- dw p_ry\r
+ db a_ry\r
db 0\r
\r
l228bh:\r
- db 0ffh,030h,0ffh ;in0 (m)\r
- dw p_arg_r_m\r
+ db 0ffh,030h,o_IN0 ;in0 (m)\r
+ db a_m\r
db 0c7h,000h,o_IN0 ;in0 r,(m) ;r=b,c,d,e,h,l,a\r
- dw p_arg_r_m\r
+ db a_rm\r
db 0ffh,031h,0ffh ;out0 (m),0\r
- dw p_arg_m_r\r
+ db a_mr\r
db 0c7h,001h,o_OUT0 ;out0 (m),r ;r=b,c,d,e\r
- dw p_arg_m_r\r
+ db a_mr\r
db 0ffh,064h,o_TST ;tst m\r
- dw l1d09h\r
+ db a_n\r
db 0ffh,074h,o_TSTIO ;tstio m\r
- dw l1d09h\r
+ db a_n\r
db 0\r
\r
; Prefix ED + 1 byte opcode + 2 byte address\r
; dw argument formating function\r
b_1c40_start:\r
db 0cfh,043h,o_LD ;ld (mn),ww ;ww=bc,de,hl,sp\r
- dw p_arg_addr_ww\r
+ db a_mmp\r
db 0cfh,04bh,o_LD ;ld ww,(mn) ;ww=bc,de,hl,sp\r
- dw p_arg_ww_addr\r
+ db a_pmm\r
db 0\r
\r
; CB\r
b_1c55_start:\r
db 0f8h,000h,o_RLC ;rlc g\r
- dw p_rz_cb\r
+ db a_cbr\r
db 0f8h,008h,o_RRC ;rrc g\r
- dw p_rz_cb\r
+ db a_cbr\r
db 0f8h,010h,o_RL ;rl g\r
- dw p_rz_cb\r
+ db a_cbr\r
db 0f8h,018h,o_RR ;rr g\r
- dw p_rz_cb\r
+ db a_cbr\r
db 0f8h,020h,o_SLA ;sla g\r
- dw p_rz_cb\r
+ db a_cbr\r
db 0f8h,028h,o_SRA ;sra g\r
- dw p_rz_cb\r
+ db a_cbr\r
db 0f8h,038h,o_SRL ;srl g\r
- dw p_rz_cb\r
+ db a_cbr\r
db 0c0h,040h,o_BIT ;bit b,g\r
- dw p_arg_bitop\r
+ db a_bcbr\r
db 0c0h,080h,o_RES ;res b,g\r
- dw p_arg_bitop\r
+ db a_bcbr\r
db 0c0h,0c0h,o_SET ;set b,g\r
- dw p_arg_bitop\r
+ db a_bcbr\r
db 0\r
\r
;-------------------------------------------------------------------------------\r
+;-------------------------------------------------------------------------------\r
\r
-p_arg_ry_rz:\r
- call p_ry\r
- call p_char_comma\r
- jp p_rz\r
-p_arg_a_r:\r
- call p_A_comma\r
- jp p_rz\r
\r
-p_arg_r_m:\r
- call p_ry\r
- call p_char_comma\r
- jp sub_1d2ch\r
+pr_instr_args:\r
+ ld hl,t_argf\r
+ ld d,0\r
+ add hl,de\r
+pria_l:\r
+ ld a,(hl) ;get next token\r
+ inc hl\r
+ or a\r
+ ret z ;\r
+ jp m,pria_1\r
+ call outchar ;print as normal character\r
+ jr pria_l\r
\r
-p_arg_m_r:\r
- call sub_1d2ch\r
- call p_char_comma\r
- jp p_ry\r
+pria_1: ;\r
+ push hl\r
+ ld hl,do_arg_n\r
+ and 07fh\r
+ call add_hl_a2\r
+ ld a,(hl)\r
+ inc hl\r
+ ld h,(hl)\r
+ ld l,a\r
+ call CALL_HL\r
+ pop hl\r
+ jr pria_l\r
\r
-p_arg_rst:\r
- ld a,(iy+000h)\r
- and 038h\r
- jp out_hex\r
+;\r
+; http://www.z80.info/decoding.htm\r
+;\r
+; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |\r
+; | x | y | z |\r
+; | p | q |\r
+;\r
\r
-l1ca0h:\r
- call pstr_inl\r
- DC '(SP),'\r
- jp p_arg_hlixiy\r
+t_argf:\r
+; 1 byte opcodes\r
+a_rr equ $-t_argf\r
+ db fi_ry,',' ;ld r[y],r[z]\r
+a_r equ $-t_argf\r
+ db fi_rz,0 ;op r[z]\r
+a_ar equ $-t_argf\r
+ db 'A,',fi_rz,0 ;op A,r[z]\r
+a_cc equ $-t_argf\r
+ db fi_ccy,0 ;op cc[y]\r
+a_rst equ $-t_argf\r
+ db fi_rst,0 ;rst y*8\r
+a_p2 equ $-t_argf\r
+ db fi_rp2,0 ;rp2[p]\r
+a_esphl equ $-t_argf\r
+ db '(SP),',fi_hlixiy,0 ;ex (sp),hl\r
+a_hl equ $-t_argf\r
+ db '(',fi_hlixiy,')',0 ;jp (hl)\r
+a_dehl equ $-t_argf\r
+ db 'DE,HL',0\r
+a_lsphl equ $-t_argf\r
+ db 'SP,',fi_hlixiy,0 ;ld SP,HL\r
+a_eaf equ $-t_argf\r
+ db 'AF,AF''',0 ;ex af,af'\r
+a_hlp equ $-t_argf\r
+ db fi_hlixiy,',' ;add hl,rp\r
+a_p equ $-t_argf\r
+ db fi_rp,0 ;rp[p]\r
+a_pa equ $-t_argf\r
+ db '(',fi_rp,'),A',0 ;ld (rp),a ;rp=bc,de\r
+a_ap equ $-t_argf\r
+ db 'A,(',fi_rp,')',0 ;ld a,(rp) ;rp=bc,de\r
\r
-l1caeh:\r
- call p_char_lparen\r
- call p_arg_hlixiy\r
- jr out_rparen\r
+; 2 byte opcodes\r
+a_rn equ $-t_argf\r
+ db fi_ry,',',fi_n,0 ;ld r[y],n\r
+a_an equ $-t_argf\r
+ db 'A,' ;op a,n\r
+a_n equ $-t_argf\r
+ db fi_n,0 ;op n\r
+a_ccj equ $-t_argf\r
+ db fi_ccy2,',' ;jr cc,j ;cc = nz,z,nc,c\r
+a_j equ $-t_argf\r
+ db fi_j,0 ;jr j\r
+a_ma equ $-t_argf\r
+ db '(',fi_n,'),A',0 ;out (n),a\r
+a_am equ $-t_argf\r
+ db 'A,(',fi_n,')',0 ;in a,(n)\r
+\r
+; 3 byte opcodes\r
+a_ccnn equ $-t_argf\r
+ db fi_ccy,',',fi_nn,0 ;op cc[y],nn\r
+a_rnn equ $-t_argf\r
+ db fi_rp,',' ;ld rp[p],nn\r
+a_nn equ $-t_argf\r
+ db fi_nn,0 ;jp nn\r
+a_mmhl equ $-t_argf\r
+ db '(',fi_nn,'),',fi_hlixiy,0 ;ld (nn),hl\r
+a_hlmm equ $-t_argf\r
+ db fi_hlixiy,',(',fi_nn,')',0 ;ld hl,(nn)\r
+a_mma equ $-t_argf\r
+ db '(',fi_nn,'),A',0 ;ld (nn),a\r
+a_amm equ $-t_argf\r
+ db 'A,(',fi_nn,')',0 ;ld a,(nn)\r
\r
-p_arg_ex_dehl:\r
- call pstr_inl\r
- DC 'DE,HL'\r
-p_arg_none:\r
- ret\r
+; Prefix ED + 1 byte opcode\r
+a_rc equ $-t_argf\r
+ db fi_ry,',' ;in r[y],(c)\r
+a_c equ $-t_argf\r
+ db '(C)',0 ;in (c)\r
+a_cr equ $-t_argf\r
+ db '(C),' ;out (c),r[y]\r
+a_ry equ $-t_argf\r
+ db fi_ry,0 ;inc r[y]\r
+a_im0 equ $-t_argf\r
+ db '0',0 ;im 0\r
+a_im1 equ $-t_argf\r
+ db '1',0 ;im 1\r
+a_im2 equ $-t_argf\r
+ db '2',0 ;im 2\r
+a_ai equ $-t_argf\r
+ db fi_ir,0 ;ld a,i ... r,a\r
\r
-l1cc1h:\r
- call pstr_inl\r
- DC 'SP,'\r
- jp p_arg_hlixiy\r
+; Prefix ED + 2 byte (opcode + immediate)\r
+a_rm equ $-t_argf\r
+ db fi_ry,',' ;in0 r[y],(n)\r
+a_m equ $-t_argf\r
+ db '(',fi_n,')',0 ;in0 (n)\r
+a_mr equ $-t_argf\r
+ db '(',fi_n,'),',fi_ry,0 ;out0 (n),r[y]\r
\r
-p_arg_ex_afaf:\r
- call pstr_inl\r
- DC 'AF,AF'''\r
- ret\r
-\r
-l1cdch:\r
- call sub_1ce8h\r
- call p_char_comma\r
- jp p_char_A\r
-\r
-l1ce5h:\r
- call p_A_comma\r
-sub_1ce8h:\r
- call p_char_lparen\r
- call p_rp\r
- jr out_rparen\r
-\r
-l1cf5h:\r
- call p_A_comma\r
- jr l1d09h\r
-l1cfah:\r
- call p_ry\r
- call p_char_comma\r
- ld a,(isprefix_ixiy)\r
- and a\r
- ld a,(iy+002h)\r
- jr nz,l1d0ch\r
-l1d09h:\r
- ld a,(iy+001h)\r
-l1d0ch:\r
- jp out_hex\r
+; Prefix ED + 3 byte (opcode + address)\r
+a_mmp equ $-t_argf\r
+ db '(',fi_nn,'),',fi_rp,0 ;ld (nn),rp\r
+a_pmm equ $-t_argf\r
+ db fi_rp,',(',fi_nn,')',0 ;ld rp,(nn)\r
\r
-p_arg_cc_jrel:\r
- ld a,(iy+000h)\r
- and 018h\r
- call p_arg_cc0\r
- call p_char_comma\r
-p_arg_jrel:\r
- ld c,(iy+001h)\r
- ld a,c\r
- rla\r
- sbc a,a\r
- ld b,a\r
- push iy\r
- pop hl\r
- add hl,bc\r
- inc hl\r
- inc hl\r
- jr l1d4eh\r
+; Prefix CB + 1 byte opcode\r
+a_bcbr equ $-t_argf\r
+ db fi_y,',' ;op y,r[z]\r
+a_cbr equ $-t_argf\r
+ db fi_rz_cb,0 ;op r[z]\r
+a_noarg equ $-t_argf\r
+ db 0\r
\r
-l1d29h:\r
- call p_A_comma\r
-sub_1d2ch:\r
- call p_char_lparen\r
- ld a,(iy+001h)\r
-p_arg_nn_rp:\r
- call out_hex\r
-out_rparen:\r
- jr p_char_rparen\r
\r
-l1d37h:\r
- call sub_1d2ch\r
- jr p_char_comma_A\r
+;-------------------------------------------------------------------------------\r
\r
-p_arg_cc_mn:\r
- call p_arg_cc\r
- call p_char_comma\r
-p_arg_mn:\r
- ld l,(iy+001h)\r
- ld h,(iy+002h)\r
-l1d4eh:\r
- jp out_hl\r
+argpf_index defl 0\r
+\r
+argpf macro x\r
+fi_&x equ 80h+argpf_index\r
+ dw p_&x\r
+argpf_index defl argpf_index+1\r
+ endm\r
+\r
+do_arg_n:\r
+ argpf ry\r
+ argpf rz\r
+ argpf ccy\r
+ argpf ccy2\r
+ argpf rst\r
+ argpf rp\r
+ argpf rp2\r
+ argpf hlixiy\r
+ argpf n\r
+ argpf j\r
+ argpf nn\r
+ argpf ir\r
+ argpf rz_cb\r
+ argpf y\r
\r
-p_arg_ww_mn:\r
- call p_rp\r
- call p_char_comma\r
- jr p_arg_mn\r
-\r
-p_arg_addr_hl:\r
- call p_arg_addr\r
- call p_char_comma\r
- jp p_arg_hlixiy\r
-\r
-p_arg_hl_addr:\r
- call p_arg_hlixiy\r
- call p_char_comma\r
- jp p_arg_addr\r
-\r
-p_arg_addr_a:\r
- call p_arg_addr\r
-p_char_comma_A:\r
- call p_char_comma\r
- jr p_char_A\r
-\r
-p_A_comma:\r
- call p_char_A\r
-p_char_comma:\r
- ld a,','\r
- db 021h\r
-p_char_A:\r
- ld a,'A'\r
- db 021h\r
-l1d85h:\r
- ld a,'0'\r
- db 021h\r
-l1d89h:\r
- ld a,'1'\r
- db 021h\r
-l1d8dh:\r
- ld a,'2'\r
- db 021h\r
-p_char_rparen:\r
- ld a,')'\r
- db 021h\r
-p_char_lparen:\r
- ld a,'('\r
- jp outchar\r
\r
-p_arg_IR:\r
+p_ir:\r
ld a,(iy+000h)\r
rra\r
rra\r
ld hl,t_arg_IR\r
jp p_arg\r
\r
-t_arg_IR:\r
- DC 'I,A'\r
- DC 'R,A'\r
- DC 'A,I'\r
- DC 'A,R'\r
- db 0\r
\r
-p_arg_in_c:\r
- call p_ry\r
- call p_char_comma\r
-p_arg_in_c_0:\r
- ld hl,t__C_\r
- jp pstr\r
+get_cb_opc:\r
+ ld a,(isprefix_ixiy)\r
+ and a\r
+ ld a,(iy+001h)\r
+ ret z\r
+ ld a,(iy+002h)\r
+ ret\r
\r
-p_arg_out_c:\r
- ld hl,t__C_\r
- call pstr\r
- call p_char_comma\r
- jr p_ry\r
-\r
-l1dcah:\r
- call p_arg_hlixiy\r
- call p_char_comma\r
- jp p_rp\r
-\r
-p_arg_addr_ww:\r
- call p_arg_addr\r
- call p_char_comma\r
- jp p_rp\r
-\r
-p_arg_ww_addr:\r
- call p_rp\r
- call p_char_comma\r
- jr p_arg_addr\r
-\r
-p_arg_a_addr:\r
- call p_A_comma\r
-p_arg_addr:\r
- call p_char_lparen\r
- call p_arg_mn\r
- jr p_char_rparen\r
-\r
-p_arg_bitop:\r
+p_y:\r
call get_cb_opc\r
- push af\r
rra\r
rra\r
rra\r
and 007h\r
-; add a,'0'\r
-; call outchar\r
- call out_dgt\r
- call p_char_comma\r
- pop af\r
- jr p_r0\r
+ jp out_dgt\r
\r
p_rz_cb:\r
call get_cb_opc\r
jr p_r0\r
\r
-get_cb_opc:\r
- ld a,(isprefix_ixiy)\r
- and a\r
- ld a,(iy+001h)\r
- ret z\r
- ld a,(iy+002h)\r
- ret\r
-\r
p_ry:\r
ld a,(iy+000h)\r
rra\r
l1e61h:\r
call outchar\r
pop af\r
- jp p_arg_nn_rp\r
-\r
-t_lp_IXIY:\r
- DC '(IX'\r
- DC '(IY'\r
-\r
-p_arg_hlixiy:\r
- ld a,(isprefix_ixiy)\r
- ld hl,t_HL.IX.IY\r
- jr p_arg\r
+ call out_hex\r
+ ld a,')'\r
+ jp outchar\r
\r
p_rp2:\r
-p_arg_zz:\r
ld hl,t_arg_rp2\r
jr l1e8eh\r
p_rp:\r
-p_arg_ww:\r
ld hl,t_arg_rp\r
l1e8eh:\r
ld a,(iy+000h)\r
rra\r
and 003h\r
cp 002h\r
- jr z,p_arg_hlixiy\r
+ jr nz,p_arg\r
+p_hlixiy:\r
+ ld a,(isprefix_ixiy)\r
+ ld hl,t_HL.IX.IY\r
jr p_arg\r
\r
-p_cc:\r
-p_arg_cc:\r
+p_ccy2:\r
+ ld a,(iy+000h)\r
+ and 018h\r
+ jr p_cc0\r
+p_ccy:\r
ld a,(iy+000h)\r
-p_arg_cc0:\r
+p_cc0:\r
rra\r
rra\r
rra\r
p_arg0:\r
jp pstr_sel\r
\r
-;-------------------------------------------------------------------------------\r
\r
-if 0\r
-p_bli:\r
+p_n:\r
+ ld a,(isprefix_ixiy)\r
+ and a\r
+ ld a,(iy+001h)\r
+ jr z,out_hex_0\r
+ ld a,(iy+002h)\r
+ jr out_hex_0\r
+\r
+p_rst:\r
ld a,(iy+000h)\r
- rra\r
- and 00ch\r
+ and 038h\r
+out_hex_0:\r
+ jp out_hex\r
+\r
+\r
+p_j:\r
+ ld c,(iy+001h)\r
+ ld a,c\r
+ rla\r
+ sbc a,a\r
ld b,a\r
- ld a,(iy+000h)\r
- and 003h\r
- or b\r
- ld hl,t_mn_bli\r
- jr p_arg\r
-endif\r
+ push iy\r
+ pop hl\r
+ add hl,bc\r
+ inc hl\r
+ inc hl\r
+ jr out_hl_0\r
+\r
+p_nn:\r
+ ld l,(iy+001h)\r
+ ld h,(iy+002h)\r
+out_hl_0:\r
+ jp out_hl\r
\r
;-------------------------------------------------------------------------------\r
\r
DC 'P'\r
DC 'M'\r
DB 0\r
-t__C_:\r
- DC '(C)'\r
- DB 0\r
-\r
-;-------------------------------------------------------------------------------\r
-;-------------------------------------------------------------------------------\r
-if 0\r
-\r
-lookup_argstr:\r
- ;todo\r
- ret\r
\r
+t_lp_IXIY:\r
+ DC '(IX'\r
+ DC '(IY'\r
\r
-pr_instr_args:\r
- ld hl,t_argf\r
- call lookup_argstr\r
-\r
- ret z\r
-\r
-pria_l:\r
- ld a,(hl) ;get next token\r
- inc hl\r
- or a\r
- ret z ;\r
- jp m,pria_1\r
- call outchar ;print as normal character\r
- jr pria_l\r
-\r
-pria_1: ;\r
- push hl\r
- ld hl,do_arg_n\r
- and 07fh\r
- call add_hl_a2\r
- ld a,(hl)\r
- inc hl\r
- ld h,(hl)\r
- ld l,a\r
- call CALL_HL\r
- pop hl\r
- jr pria_l\r
-\r
-;\r
-; http://www.z80.info/decoding.htm\r
-;\r
-; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |\r
-; | x | y | z |\r
-; | p | q |\r
-;\r
-\r
-t_argf:\r
- db fi_ry,',',fi_rz,0 ;ld r[y],r[z]\r
- db 'A,',fi_rz,0 ;op A,r[z]\r
- db fi_rz,0 ;op r[z]\r
- db fi_ccy,0 ;op cc[y]\r
- db fi_rst,0 ;\r
- db fi_rp2,0 ;rp2[p]\r
- db '(SP),',fi_hlixiy,0 ;ex (sp),hl\r
- db fi_hlixiy,0 ;jp (hl)\r
- db 'DE,HL',0\r
- db 'SP,',fi_hlixiy,0 ;ld SP,HL\r
- db fi_rp,0 ;rp[p]\r
- db fi_ry,0 ;inc r[y]\r
- db 'AF,AF''',0 ;ex af,af'\r
- db fi_hlixiy,fi_rp,0 ;add hl,rp\r
- db '(',fi_rp,'),A',0 ;ld (rp),a ;rp=bc,de\r
- db 'A,(',fi_rp,')',0 ;ld a,(rp) ;rp=bc,de\r
-\r
- db fi_ry,fi_n,0 ;ld r[y],n\r
- db 'A,',fi_n,0 ;op a,n\r
- db fi_n,0 ;op n\r
- db fi_j,0 ;jr j\r
- db fi_ccy2,fi_j,0 ;jr cc,j ;cc = nz,z,nc,c\r
- db '(',fi_n,'),',fi_ry,0 ;out (n),a\r
- db fi_ry,',(',fi_n,')',0 ;in a,(n)\r
-\r
- db fi_ccy,fi_nn,0 ;op cc[y],nn\r
- db fi_rp,fi_nn,0 ;ld rp[p],nn\r
- db fi_nn,0 ;jp nn\r
- db '(',fi_nn,'),',fi_hlixiy,0 ;ld (nn),hl\r
- db fi_hlixiy,',(',fi_nn,')',0 ;ld hl,(nn)\r
- db '(',fi_nn,'),A',0 ;ld (nn),a\r
- db 'A,(',fi_nn,')',0 ;ld a,(nn)\r
-\r
- db fi_ry,'(C)',0 ;in r[y],(c)\r
- db '(C)',0 ;in (c)\r
- db '(C)',fi_ry,0 ;out (c),r[y]\r
- db '0',0 ;im 0\r
- db '1',0 ;im 1\r
- db '2',0 ;im 2\r
- db fi_ir,0 ;ld a,i ... r,a\r
-\r
- db fi_ry,'(',fi_n,')',0 ;in0 r[y],(n)\r
- db '(',fi_n,')',0 ;in0 (n)\r
- db '(',fi_n,')',fi_ry,0 ;out0 (n),r[y]\r
-\r
- db '(',fi_nn,'),',fi_rp,0 ;ld (nn),rp\r
- db fi_rp,',(',fi_nn,')',0 ;ld rp,(nn)\r
-\r
- db fi_rz_cb,0 ;op r[z]\r
- db fi_y,',',fi_rz_cb,0 ;op y,r[z]\r
-\r
-\r
-;-------------------------------------------------------------------------------\r
-\r
-argpf_index defl 0\r
-\r
-argpf macro x\r
-fi_&x equ 80h+argpf_index\r
- dw p_&x\r
-argpf_index defl argpf_index+1\r
- endm\r
-\r
-do_arg_n:\r
- argpf ry\r
- argpf rz\r
- argpf m8\r
- argpf rst\r
- argpf hlixiy\r
- argpf rp\r
- argpf rp2\r
-\r
-p_ry:\r
-p_rz:\r
-p_m8:\r
-p_rst:\r
-p_hlixiy:\r
-p_rp:\r
-p_rp2:\r
+t_arg_IR:\r
+ DC 'I,A'\r
+ DC 'R,A'\r
+ DC 'A,I'\r
+ DC 'A,R'\r
+ db 0\r
\r
\r
-endif\r
-;-------------------------------------------------------------------------------\r
;-------------------------------------------------------------------------------\r
\r
tc_set_bp:\r
call bp_trace_enter\r
ld iy,(reg.pc)\r
ld hl,t_op_branch\r
- call lookup_op_arg\r
+ call lookup_branch_op\r
ccf\r
ret c\r
ex de,hl\r
;-------------------------------------------------------------------------------\r
\r
t_op_branch:\r
- db 0ffh,0ddh,0 ;Prefix DD\r
+ db 0ffh,0ddh ;Prefix DD\r
dw l20a7h\r
- db 0ffh,0fdh,0 ;Prefix FD\r
+ db 0ffh,0fdh ;Prefix FD\r
dw l20ach\r
- db 0ffh,0edh,0 ;Prefix ED\r
+ db 0ffh,0edh ;Prefix ED\r
dw l20b8h\r
t_op_branch0:\r
- db 0ffh,0cdh,0 ;call mn\r
+ db 0ffh,0cdh ;call mn\r
dw l2080h\r
- db 0ffh,0c3h,0 ;jp mn\r
+ db 0ffh,0c3h ;jp mn\r
dw l208bh\r
- db 0ffh,0e9h,0 ;jp ()\r
+ db 0ffh,0e9h ;jp ()\r
dw l20a2h\r
- db 0ffh,0c9h,0 ;ret\r
+ db 0ffh,0c9h ;ret\r
dw l20dch\r
- db 0ffh,0cfh,0 ;rst 8\r
+ db 0ffh,0cfh ;rst 8\r
dw l2115h\r
- db 0c7h,0c7h,0 ;rst n\r
+ db 0c7h,0c7h ;rst n\r
dw l20f9h\r
- db 0c7h,0c4h,0 ;call cc,mn\r
+ db 0c7h,0c4h ;call cc,mn\r
dw l2080h\r
- db 0f7h,010h,0 ;djnz d; jr d\r
+ db 0f7h,010h ;djnz d; jr d\r
dw l2093h\r
- db 0e7h,020h,0 ;jr cc,d\r
+ db 0e7h,020h ;jr cc,d\r
dw l2093h\r
- db 0c7h,0c2h,0 ;jp cc,mn\r
+ db 0c7h,0c2h ;jp cc,mn\r
dw l208bh\r
- db 0c7h,0c0h,0 ;ret cc\r
+ db 0c7h,0c0h ;ret cc\r
dw l20c5h\r
db 0\r
\r