; - Use Digital Research Link-80 to generate a .PRL file (op switch).\r
; - Cut the .PRL header (first 256 byte) end rename the result to DDTZ.COM.\r
\r
-;-------------------------------------------------------------------------------\r
-; Relocation loader\r
-;\r
-\r
-TPA equ 0100h\r
- cseg\r
- .phase TPA\r
-\r
- jp start\r
-\r
-ldr_end:\r
-ldr_size equ $ - TPA\r
-current_phase defl $\r
-\r
- .dephase\r
-current_cseg defl $\r
-\r
-;-------------------------------------------------------------------------------\r
-; DDT/Z core\r
-;\r
\r
; Some greneral definitions\r
\r
-TAB equ 9\r
-LF equ 10\r
-CR equ 13\r
+BS equ 08h\r
+TAB equ 09h\r
+CR equ 0dh\r
+LF equ 0ah\r
+DEL equ 7fh\r
+CNTRX equ 'X'-'@'\r
\r
; CP/M memory layout\r
\r
BDOS equ 5\r
-dfcb1 equ 05ch\r
-dfcb2 equ 06ch\r
-DMA_BUF equ 080h\r
TPA equ 0100h\r
\r
-; BDOS function calls\r
-\r
-BDOS_CIN equ 1 ;Console Input\r
-BDOS_COUT equ 2 ;Console Output\r
-BDOS_PSTR equ 9 ;Print String\r
-BDOS_CBUF equ 10 ;Read Console Buffer\r
-BDOS_CSTAT equ 11 ;Get Console Status\r
-BDOS_OPEN equ 15 ;Open File\r
-BDOS_CLOSE equ 16 ;Close File\r
-BDOS_DELETE equ 19 ;Delete File\r
-BDOS_READ equ 20 ;Read Sequential\r
-BDOS_WRITE equ 21 ;Write Sequential\r
-BDOS_CREATE equ 22 ;Make File\r
-BDOS_SETDMA equ 26 ;Set DMA Address\r
-\r
; ddtz specific definitions\r
\r
-STACK_SIZE equ 64 ;ddtz internal stack\r
+STACK_SIZE equ 80 ;ddtz internal stack\r
CONBUF_SIZE equ 80 ;Size of console input buffer\r
-EXPR_BUF_SIZE equ 128 ;expressen buffer for conditional breakpoints\r
BP_CNT equ 12 ;Number of breakpoints\r
-BP_SIZE equ 8 ;Size of a breakpoint record\r
-YREG_CNT equ 10 ;Number of Y registers (0..9)\r
+BP_SIZE equ 4 ;Size of a breakpoint record\r
+\r
+bitmap_size equ (prog_size+7)/8\r
\r
;-------------------------------------------------------------------------------\r
\r
-ddtz_base:\r
- jp ddtz_bdos\r
+ cseg\r
+start::\r
+ddtz_base::\r
+ jr reloc\r
+ nop\r
l0003h:\r
- rst 30h\r
-sub_0004h:\r
+ rst 30h ;rst used by ddtz\r
+di_or_ei: ;ints enabled/disabled while ddtz is running\r
nop\r
ret\r
-ddtz_bdos:\r
- jp 0\r
\r
-current_cseg defl $ - current_cseg\r
- .phase current_phase + current_cseg\r
-signon:\r
- db 'DDT/180',TAB\r
- db '[8101] 002',CR,LF,'$'\r
-msgz80:\r
- db 'Z80 or better required!',cr,lf,'$'\r
+?const: jp 0 ; return console input status\r
+?conin: jp 0 ; return console input character\r
+?cono: jp 0 ; send console output character\r
\r
-current_phase defl $\r
- .dephase\r
-current_cseg defl $\r
- ds STACK_SIZE - (current_phase - signon)\r
+;-------------------------------------------------------------------------------\r
\r
+signon:\r
+ db 'DDTZ/180'\r
+ db ' - Version '\r
+ maclib version.inc\r
+ defvers\r
+ dc ' ('\r
\r
-stack:\r
-reg.l2: db 000h\r
-reg.h2: db 000h\r
-reg.e2: db 000h\r
-reg.d2: db 000h\r
-reg.c2: db 000h\r
-reg.b2: db 000h\r
-reg.f2: db 000h\r
-reg.a2: db 000h\r
-l004eh: db 000h\r
-reg.i: db 000h\r
-reg.iy: dw 0000h\r
-reg.ix: dw 0000h\r
-reg.f: db 000h\r
-reg.a: db 000h\r
-reg.c: db 000h\r
-reg.b: db 000h\r
-reg.e: db 000h\r
-reg.d: db 000h\r
-reg.l: db 000h\r
-reg.h: db 000h\r
-reg_sp: dw TPA\r
-reg.iff:\r
- db 0f3h\r
- db 0c3h\r
-REG.PC: dw TPA\r
-l0062h: dw 0000h\r
-offs.@: dw 0\r
+;-------------------------------------------------------------------------------\r
+; Clear old position\r
\r
-CMD_ERR:dw l0146h\r
-cmd_rpt:dw mainloop\r
+cmde_clr:\r
+ ld (hl),0\r
+ inc hl\r
+ dec bc\r
+ ld a,b\r
+ or c\r
+ jr nz,cmde_clr\r
\r
-conbuf:\r
- db CONBUF_SIZE\r
+; Determine current position\r
\r
- ld sp,stack\r
+reloc:\r
+ ld bc,(028h-2)\r
+ ld de,(028h)\r
+ ld a,i ;get iff2\r
+ ex af,af'\r
+ di\r
+ ld sp,028h ;rst instr needs a minimal stack\r
+ ld hl,0e9e1h ;opcpdes pop hl/jp (hl)\r
+ ld (028h),hl\r
+ rst 028h\r
+wearehere:\r
+ ld (028h-2),bc\r
+ ld (028h),de\r
+ ld de,-(wearehere-ddtz_base)\r
+ add hl,de ; hl:\r
+\r
+ ld de,ddtz_base ; de:\r
+ or a\r
+ sbc hl,de\r
+ ex de,hl ; de: reloc offset\r
+ ld hl,stack\r
+ add hl,de\r
+ ld sp,hl\r
+ ex af,af'\r
+ push af\r
+ pop bc\r
+ bit 2,c\r
+ jr z,$+3\r
+ ei\r
+ ld hl,ddtz_end ;start of reloc bitmap\r
+ add hl,de\r
+\r
+ push hl\r
exx\r
- ld de,ddtz_base\r
- or a\r
- sbc hl,de\r
- add hl,de\r
- jr c,l0079h\r
- ex de,hl\r
-l0079h:\r
- ld de,TPA\r
-l007ch:\r
- dec hl\r
- ld (hl),000h\r
- ld a,h\r
- sub d\r
- ld b,a\r
- ld a,l\r
- sub e\r
- or b\r
- jr nz,l007ch\r
- ld a,i\r
- ld (reg.i),a\r
- ld a,0f3h\r
- jp po,l0093h\r
- ld a,0fbh\r
+ pop hl\r
+ ld bc,0108h ;init bit counter b (c==reload val)\r
+ exx\r
+\r
+ LD HL,ddtz_base\r
+ add hl,de ;--> ddtz_base\r
+ ld bc,prog_size\r
+reloc_lp:\r
+ EXX\r
+ djnz reloc_nl\r
+ ld b,c ;reload bit counter\r
+ LD e,(HL) ;get next 8 relocation bits\r
+ INC HL\r
+reloc_nl:\r
+ sla e\r
+ EXX\r
+ JR NC,reloc_next\r
+ DEC HL\r
+ LD A,(HL)\r
+ ADD A,E\r
+ LD (HL),A\r
+ INC HL\r
+ LD A,(HL)\r
+ ADC A,D\r
+ LD (HL),A\r
+reloc_next:\r
+ inc hl\r
+ dec bc\r
+ ld a,b\r
+ or c\r
+ jr nz,reloc_lp\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+\r
+init::\r
+ LD SP,stack\r
+\r
+ ld hl,(1) ;wboot addr\r
+ ld de,?const\r
+ ex de,hl\r
+ ld b,3\r
+vini_l:\r
+ inc de\r
+ inc de\r
+ inc de\r
+ inc hl\r
+ ld (hl),e\r
+ inc hl\r
+ ld (hl),d\r
+ inc hl\r
+ djnz vini_l\r
+\r
+ ld hl,signon\r
+ call pstr\r
+ ld hl,ddtz_base\r
+ call out_hl\r
+ call pstr_inl\r
+ dc ' - '\r
+ ld de,prog_size+bitmap_size-1\r
+ add hl,de\r
+ call out_hl\r
+ call pstr_inl\r
+ dc ')',CR,LF\r
+\r
+ ld a,i\r
+ ld (reg.i),a\r
+ ld a,0f3h\r
+ jp po,l0093h\r
+ ld a,0fbh\r
l0093h:\r
- ld (reg.iff),a\r
- call sub_0004h\r
- ld hl,ddtz_base\r
- ld l,000h\r
- ld (reg_sp),hl\r
- call cpy_fcb2\r
- ld a,(dfcb1+1)\r
- cp ' '\r
- ld hl,0\r
- call nz,read_file\r
- jr mainloop\r
-\r
- ds CONBUF_SIZE + 3 - ($ - conbuf)\r
-\r
-mainloop:\r
- ld sp,stack ;00bd 31 46 00 1 F .\r
- ld hl,l0146h ;00c0 21 46 01 ! F .\r
- ld (CMD_ERR),hl ;00c3 22 66 00 " f .\r
- ld hl,(REG.PC) ;00c6 2a 60 00 * ` .\r
- ld (l0062h),hl ;00c9 22 62 00 " b .\r
- call bp_clr_temporary ;00cc cd 54 07 . T .\r
- ld hl,(cmd_rpt) ;00cf 2a 68 00 * h .\r
- ld de,mainloop ;00d2 11 bd 00 . . .\r
- call cp_hl_de ;00d5 cd ee 02 . . .\r
- ld a,'>' ;00d8 3e 3e > >\r
- call outchar ;00da cd 5d 02 . ] .\r
- call nz,outchar ;00dd c4 5d 02 . ] .\r
- call z,outbl ;00e0 cc 9f 02 . . .\r
- call get_line ;00e3 cd 4e 01 . N .\r
- call skipbl ;00e6 cd bf 02 . . .\r
- jr z,exe_hl ;00e9 28 1f ( .\r
- ld hl,mainloop ;00eb 21 bd 00 ! . .\r
- ld (cmd_rpt),hl ;00ee 22 68 00 " h .\r
- inc de ;00f1 13 .\r
- sub '@' ;00f2 d6 40 . @\r
- jr c,ERROR ;00f4 38 11 8 .\r
- cp 'Z'+1-'@' ;00f6 fe 1b . .\r
- jr nc,ERROR ;00f8 30 0d 0 .\r
- add a,a ;00fa 87 .\r
- ld hl,CMDTAB ;00fb 21 10 01 ! . .\r
- call add_hl_a ;00fe cd b9 02 . . .\r
- ld a,(hl) ;0101 7e ~\r
- inc hl ;0102 23 #\r
- ld h,(hl) ;0103 66 f\r
- ld l,a ;0104 6f o\r
- jr exe_hl ;0105 18 03 . .\r
+ ld (reg.iff),a\r
+ call di_or_ei\r
+ ld hl,ddtz_base\r
+ ld l,000h\r
+ ld (reg_sp),hl\r
+\r
+ jp mainloop\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+CMDTAB::\r
+; dw ERROR ;cmd_@ ;examine/substitute the displacement register @\r
+; dw ERROR ;cmd_A ;Assemble\r
+ dw cmd_B ;Breakpoints display/set/clear\r
+ dw ERROR ;cmd_C ;trace over Calls\r
+ dw cmd_D ;Display memory in hex and ascii\r
+ dw cmd_E ;rElocate debugger\r
+ dw ERROR ;cmd_F ;specify Filename and command line\r
+ dw cmd_G ;Go\r
+ dw cmd_H ;compute Hex and other expressions\r
+ dw cmd_I ;Input a byte from port\r
+ dw ERROR ;\r
+ dw ERROR ;\r
+ dw cmd_L ;List disassembled code\r
+ dw cmd_M ;Move memory [and verify]\r
+ dw ERROR ;\r
+ dw cmd_O ;Output a byte to port\r
+ dw ERROR ;\r
+ dw cmd_Q ;Qery memory for byte string\r
+ dw cmd_R ;Read binary or hex file\r
+ dw cmd_S ;Substitute memory\r
+ dw cmd_T ;Trace\r
+ dw ERROR ;\r
+ dw cmd_V ;Verify (compare) two memory areas\r
+ dw ERROR ;cmd_W ;Write a file to disk\r
+ dw cmd_X ;eXamine [and substitute] registers\r
+ dw ERROR ;cmd_Y ;examine [and substitute] Y variables\r
+ dw cmd_Z ;Zap (fill) memory with a byte string\r
+\r
ERROR:\r
- ld hl,(CMD_ERR) ;0107 2a 66 00 * f .\r
+ call pstr_inl\r
+ dc '?',CR,LF\r
+ ;fall thru\r
+mainloop::\r
+ ld sp,stack\r
+ ld hl,(reg.pc)\r
+ call bp_clr_temporary\r
+ ld hl,(cmd_rpt)\r
+ ld de,mainloop\r
+ push de\r
+ call cp_hl_de\r
+ ld a,'>'\r
+ call outchar\r
+ call nz,outchar\r
+ call z,outbl\r
+ call get_line\r
+ call skipbl\r
+ jr z,exe_hl\r
+ pop hl\r
+ push hl\r
+ ld (cmd_rpt),hl\r
+ inc de\r
+ sub 'B'\r
+ jr c,ERROR\r
+ cp 'Z'+1-'@'\r
+ jr nc,ERROR\r
+ ld hl,CMDTAB\r
+ call add_hl_a2\r
+ ld a,(hl)\r
+ inc hl\r
+ ld h,(hl)\r
+ ld l,a\r
exe_hl:\r
- call CALL_HL ;010a cd 0f 01 . . .\r
- jr mainloop ;010d 18 ae . .\r
-\r
-CMDTAB:\r
- dw cmd_@ ;0110 92 0d . .\r
- dw cmd_A ;0112 fe 11 . .\r
- dw cmd_B ;0114 6d 07 m .\r
- dw cmd_C ;0116 17 21 . !\r
- dw cmd_D ;0118 48 0f H .\r
- dw ERROR ;011a 07 01 . .\r
- dw cmd_F ;011c af 0f . .\r
- dw cmd_G ;011e 31 07 1 .\r
- dw cmd_H ;0120 3d 0e = .\r
- dw cmd_I ;0122 a3 0d . .\r
- dw ERROR ;0124 07 01 . .\r
- dw ERROR ;0126 07 01 . .\r
- dw cmd_L ;0128 cd 18 . .\r
- dw cmd_M ;012a 19 0e . .\r
- dw ERROR ;012c 07 01 . .\r
- dw cmd_O ;012e c7 0d . .\r
- dw ERROR ;0130 07 01 . .\r
- dw cmd_Q ;0132 84 0e . .\r
- dw cmd_R ;0134 62 10 b .\r
- dw cmd_S ;0136 5a 0d Z .\r
- dw cmd_T ;0138 1e 21 . !\r
- dw ERROR ;013a 07 01 . .\r
- dw cmd_V ;013c ea 0d . .\r
- dw cmd_W ;013e a0 11 . .\r
- dw cmd_X ;0140 f1 0b . .\r
- dw cmd_Y ;0142 b2 0b . .\r
- dw cmd_Z ;0144 ba 0e . .\r
-\r
-l0146h:\r
- ld a,'?' ;0146 3e 3f > ?\r
- call outchar ;0148 cd 5d 02 . ] .\r
- jp crlf ;014b c3 a3 02 . . .\r
-get_line:\r
- push hl ;014e e5 .\r
- ld de,conbuf ;014f 11 6a 00 . j .\r
- ld c,BDOS_CBUF ;0152 0e 0a . .\r
- call ddtz_bdos ;0154 cd 00 00 . . .\r
- call crlf ;0157 cd a3 02 . . .\r
- ld de,conbuf+1 ;015a 11 6b 00 . k .\r
- ld a,(de) ;015d 1a .\r
- ld b,a ;015e 47 G\r
- ld c,0 ;015f 0e 00 . .\r
- inc b ;0161 04 .\r
-l0162h:\r
- inc de ;0162 13 .\r
- dec b ;0163 05 .\r
- jr z,l0194h ;0164 28 2e ( .\r
- ld a,(de) ;0166 1a .\r
- bit 0,c ;0167 cb 41 . A\r
- call z,toupper ;0169 cc 9b 01 . . .\r
- ld (de),a ;016c 12 .\r
- cp '''' ;016d fe 27 . '\r
- jr nz,l0162h ;016f 20 f1 .\r
- push de ;0171 d5 .\r
- dec de ;0172 1b .\r
- ld a,(de) ;0173 1a .\r
- cp '''' ;0174 fe 27 . '\r
- jr z,l0190h ;0176 28 18 ( .\r
- dec de ;0178 1b .\r
- ld a,(de) ;0179 1a .\r
- cp '^' ;017a fe 5e . ^\r
- jr z,l0184h ;017c 28 06 ( .\r
- dec de ;017e 1b .\r
- ld a,(de) ;017f 1a .\r
- cp '^' ;0180 fe 5e . ^\r
- jr nz,l0190h ;0182 20 0c .\r
-l0184h:\r
- inc de ;0184 13 .\r
- push bc ;0185 c5 .\r
- call sub_0303h ;0186 cd 03 03 . . .\r
- pop bc ;0189 c1 .\r
- dec de ;018a 1b .\r
- ld a,(de) ;018b 1a .\r
- cp '''' ;018c fe 27 . '\r
- jr z,l0191h ;018e 28 01 ( .\r
-l0190h:\r
- inc c ;0190 0c .\r
-l0191h:\r
- pop de ;0191 d1 .\r
- jr l0162h ;0192 18 ce . .\r
-l0194h:\r
- xor a ;0194 af .\r
- ld (de),a ;0195 12 .\r
- ld de,conbuf+2 ;0196 11 6c 00 . l .\r
- pop hl ;0199 e1 .\r
- ret ;019a c9 .\r
+CALL_HL:\r
+ jp (hl)\r
\r
-toupper:\r
- cp 'a' ;019b fe 61 . a\r
- ret c ;019d d8 .\r
- cp 'z'+1 ;019e fe 7b . {\r
- ret nc ;01a0 d0 .\r
- and 05fh ;01a1 e6 5f . _\r
- ret ;01a3 c9 .\r
-\r
-out.hl.@:\r
- call out_hl ;01a4 cd 13 02 . . .\r
- push de ;01a7 d5 .\r
- push hl ;01a8 e5 .\r
- ld de,(offs.@) ;01a9 ed 5b 64 00 . [ d .\r
- ld a,d ;01ad 7a z\r
- or e ;01ae b3 .\r
- jr z,l01bfh ;01af 28 0e ( .\r
- call outbl ;01b1 cd 9f 02 . . .\r
- ld a,'@' ;01b4 3e 40 > @\r
- call outchar ;01b6 cd 5d 02 . ] .\r
- and a ;01b9 a7 .\r
- sbc hl,de ;01ba ed 52 . R\r
- call out_hl ;01bc cd 13 02 . . .\r
-l01bfh:\r
- pop hl ;01bf e1 .\r
- pop de ;01c0 d1 .\r
- ret ;01c1 c9 .\r
-out.bin.w:\r
- ld a,h ;01c2 7c |\r
- call out.bin.b ;01c3 cd c7 01 . . .\r
- ld a,l ;01c6 7d }\r
-out.bin.b:\r
- ld b,8 ;01c7 06 08 . .\r
-l01c9h:\r
- add a,a ;01c9 87 .\r
- push af ;01ca f5 .\r
- ld a,00 ;01cb 3e 00 > .\r
- adc a,a ;01cd 8f .\r
- call out_dgt ;01ce cd 21 02 . ! .\r
- pop af ;01d1 f1 .\r
- djnz l01c9h ;01d2 10 f5 . .\r
- ld a,'"' ;01d4 3e 22 > "\r
- jp outchar ;01d6 c3 5d 02 . ] .\r
+;-------------------------------------------------------------------------------\r
+\r
+crlf:\r
+ call pstr_inl\r
+ dc CR,LF\r
+ xor a\r
+ ld (con_col),a\r
+ call inchar\r
+ jr c,mainloop\r
+ ret\r
\r
sub_01d9h:\r
- ld a,'-' ;01d9 3e 2d > -\r
- call outchar ;01db cd 5d 02 . ] .\r
- dec hl ;01de 2b +\r
- jp cpl.hl ;01df c3 79 05 . y .\r
+ call pstr_inl\r
+ dc '-'\r
+ jp neg.hl\r
\r
out_hl_dec_neg:\r
- push hl ;01e2 e5 .\r
- call sub_01d9h ;01e3 cd d9 01 . . .\r
- defb 03eh ;01e6 3e >\r
+ push hl\r
+ call sub_01d9h\r
+ defb 03eh ;ld a,.. swallow push hl\r
out.hl.dec:\r
- push hl ;01e7 e5 .\r
- ld b,006h ;01e8 06 06 . .\r
- call sub_01f9h ;01ea cd f9 01 . . .\r
- pop hl ;01ed e1 .\r
- ld a,'.' ;01ee 3e 2e > .\r
- call outchar ;01f0 cd 5d 02 . ] .\r
+ push hl\r
+ ld b,006h\r
+ call sub_01f9h\r
+ pop hl\r
+ call pstr_inl\r
+ dc '.'\r
l01f3h:\r
- call outbl ;01f3 cd 9f 02 . . .\r
- djnz l01f3h ;01f6 10 fb . .\r
- ret ;01f8 c9 .\r
+ call outbl\r
+ djnz l01f3h\r
+ ret\r
+\r
sub_01f9h:\r
- dec b ;01f9 05 .\r
- push de ;01fa d5 .\r
- ld de,10 ;01fb 11 0a 00 . . .\r
- call div_hl_de ;01fe cd 75 04 . u .\r
- ld a,h ;0201 7c |\r
- or l ;0202 b5 .\r
- call nz,sub_01f9h ;0203 c4 f9 01 . . .\r
- ld a,e ;0206 7b {\r
- pop de ;0207 d1 .\r
- jr out_dgt ;0208 18 17 . .\r
+ dec b\r
+ push de\r
+ ld de,10\r
+ call div_hl_de\r
+ ld a,h\r
+ or l\r
+ call nz,sub_01f9h\r
+ ld a,e\r
+ pop de\r
+ jr out_dgt\r
\r
out_hl_neg:\r
- push hl ;020a e5 .\r
- call sub_01d9h ;020b cd d9 01 . . .\r
- call out_hl ;020e cd 13 02 . . .\r
- pop hl ;0211 e1 .\r
- ret ;0212 c9 .\r
+ push hl\r
+ call sub_01d9h\r
+ call out_hl\r
+ pop hl\r
+ ret\r
\r
out_hl:\r
- ld a,h ;0213 7c |\r
- call out_hex ;0214 cd 18 02 . . .\r
- ld a,l ;0217 7d }\r
+ ld a,h\r
+ call out_hex\r
+ ld a,l\r
\r
out_hex:\r
- push af ;0218 f5 .\r
- rra ;0219 1f .\r
- rra ;021a 1f .\r
- rra ;021b 1f .\r
- rra ;021c 1f .\r
- call out_dgt ;021d cd 21 02 . ! .\r
- pop af ;0220 f1 .\r
+ push af\r
+ rra\r
+ rra\r
+ rra\r
+ rra\r
+ call out_dgt\r
+ pop af\r
\r
out_dgt:\r
- and 0fh ;0221 e6 0f . .\r
- cp 10 ;0223 fe 0a . .\r
- jr c,l0229h ;0225 38 02 8 .\r
- add a,007h ;0227 c6 07 . .\r
-l0229h:\r
- add a,'0' ;0229 c6 30 . 0\r
- jr outchar ;022b 18 30 . 0\r
-l022dh:\r
- ld a,'-' ;022d 3e 2d > -\r
- call outchar ;022f cd 5d 02 . ] .\r
- ld a,040h ;0232 3e 40 > @\r
+ or 0f0h\r
+ daa\r
+ add a,0a0h\r
+ adc a,040h\r
+ jr outchar\r
+\r
+out.bin.w:\r
+ ld a,h\r
+ call out.bin.b\r
+ ld a,l\r
+out.bin.b:\r
+ ld b,8\r
+l01c9h:\r
+ rlca\r
+ push af\r
+ and 1\r
+ call out_dgt\r
+ pop af\r
+ djnz l01c9h\r
+ ld a,'"'\r
+ jr outchar\r
+\r
out.ascii:\r
- ex af,af' ;0234 08 .\r
- call outquote ;0235 cd 5b 02 . [ .\r
- ex af,af' ;0238 08 .\r
- push af ;0239 f5 .\r
- res 7,a ;023a cb bf . .\r
- cp ' ' ;023c fe 20 .\r
- jr nc,l0242h ;023e 30 02 0 .\r
- sub 0c0h ;0240 d6 c0 . .\r
+ push bc\r
+ ld c,a\r
+ res 7,a\r
+ cp ' '\r
+ push af\r
+ call nc,outbl\r
+ call pstr_inl\r
+ dc ''''\r
+ pop af\r
+ jr nc,l0242h\r
+ sub 0c0h\r
+ ld b,a\r
+ call pstr_inl\r
+ dc '^'\r
+ ld a,b\r
l0242h:\r
- call outchar ;0242 cd 5d 02 . ] .\r
- push af ;0245 f5 .\r
- cp '''' ;0246 fe 27 . '\r
- call z,outchar ;0248 cc 5d 02 . ] .\r
- pop af ;024b f1 .\r
- ex af,af' ;024c 08 .\r
- call outquote ;024d cd 5b 02 . [ .\r
- pop af ;0250 f1 .\r
- or a ;0251 b7 .\r
- ld a,'.' ;0252 3e 2e > .\r
- call m,outchar ;0254 fc 5d 02 . ] .\r
- ex af,af' ;0257 08 .\r
- jr c,l022dh ;0258 38 d3 8 .\r
- ret ;025a c9 .\r
-\r
-p_char_lparen:\r
- ld a,'('\r
+ call outchar\r
+ cp ''''\r
+ call z,outchar\r
+ call pstr_inl\r
+ dc ''''\r
+ sla c\r
+ pop bc\r
+ ret nc\r
+ ld a,'.'\r
jr outchar\r
\r
-outquote:\r
- ld a,'''' ;025b 3e 27 > '\r
+outbl6:\r
+ call outbl2\r
+outbl4:\r
+ call outbl2\r
+outbl2:\r
+ call outbl\r
+outbl:\r
+ ld a,' '\r
outchar:\r
- push hl ;025d e5 .\r
- push de ;025e d5 .\r
- push bc ;025f c5 .\r
- push af ;0260 f5 .\r
- and 07fh ;0261 e6 7f . \7f\r
- ld e,a ;0263 5f _\r
- ld c,BDOS_COUT ;0264 0e 02 . .\r
- call ddtz_bdos ;0266 cd 00 00 . . .\r
- ld hl,con_col ;0269 21 72 02 ! r .\r
- inc (hl) ;026c 34 4\r
- pop af ;026d f1 .\r
- pop bc ;026e c1 .\r
- pop de ;026f d1 .\r
- pop hl ;0270 e1 .\r
- ret ;0271 c9 .\r
+ push ix\r
+ push iy\r
+ push hl\r
+ push de\r
+ push bc\r
+ push af\r
+ and 07fh\r
+ ld c,a\r
+ call ?cono\r
+ ld hl,con_col\r
+ inc (hl)\r
+ pop af\r
+ pop bc\r
+ pop de\r
+ pop hl\r
+ pop iy\r
+ pop ix\r
+ ret\r
+\r
+p_goto_col:\r
+ ld a,(con_col)\r
+ cp c\r
+ ret nc\r
+ ret z\r
+ call outbl\r
+ jr p_goto_col\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+incharw:\r
+ call inchar\r
+ jr nc,incharw\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
inchar:\r
- push hl ;0273 e5 .\r
- push de ;0274 d5 .\r
- push bc ;0275 c5 .\r
- ld c,BDOS_CSTAT ;0276 0e 0b . .\r
- call ddtz_bdos ;0278 cd 00 00 . . .\r
- and a ;027b a7 .\r
- jr z,l0284h ;027c 28 06 ( .\r
- ld c,BDOS_CIN ;027e 0e 01 . .\r
- call ddtz_bdos ;0280 cd 00 00 . . .\r
- scf ;0283 37 7\r
-l0284h:\r
- pop bc ;0284 c1 .\r
- pop de ;0285 d1 .\r
- pop hl ;0286 e1 .\r
- ret ;0287 c9 .\r
-pstr:\r
- ld c,0 ;0288 0e 00 . .\r
-l028ah:\r
- ld a,(hl) ;028a 7e ~\r
- inc hl ;0291 23 #\r
- and a ;028b a7 .\r
- ret z ;028c c8 .\r
- call outchar ;028d cd 5d 02 . ] .\r
- inc c ;0290 0c .\r
- and a ;0292 a7 .\r
- ret m ;0293 f8 .\r
- jr l028ah ;0294 18 f4 . .\r
+ push ix\r
+ push hl\r
+ push de\r
+ push bc\r
+ call ?const\r
+ and a\r
+ jr z,inch1\r
+ call ?conin\r
+ scf\r
+inch1:\r
+ pop bc\r
+ pop de\r
+ pop hl\r
+ pop ix\r
+ ret\r
\r
-pstr_inl:\r
- ex (sp),hl\r
- call pstr\r
- ex (sp),hl\r
+;-------------------------------------------------------------------------------\r
+\r
+DELC:\r
+ ld a,b\r
+ or a\r
+ ret z\r
+ call DELC1\r
+ dec hl\r
+ dec b\r
+ ld a,(hl)\r
+ cp ' '\r
+ ret nc\r
+DELC1:\r
+ call pstr_inl\r
+ dc BS,' ',BS\r
ret\r
\r
-outbl6:\r
- call outbl2 ;0296 cd 9c 02 . . .\r
-outbl4:\r
- call outbl2 ;0299 cd 9c 02 . . .\r
-outbl2:\r
- call outbl ;029c cd 9f 02 . . .\r
-outbl:\r
- ld a,' ' ;029f 3e 20 >\r
- jr outchar ;02a1 18 ba . .\r
-crlf:\r
- call inchar ;02a3 cd 73 02 . s .\r
- ld a,CR ;02a6 3e 0d > .\r
- call outchar ;02a8 cd 5d 02 . ] .\r
- ld a,LF ;02ab 3e 0a > .\r
- call outchar ;02ad cd 5d 02 . ] .\r
- ld a,0 ;02b0 3e 00 > .\r
- ld (con_col),a ;02b2 32 72 02 2 r .\r
- jp c,mainloop ;02b5 da bd 00 . . .\r
- ret ;02b8 c9 .\r
+DELL:\r
+ ld a,b ;\r
+ or a ;\r
+ ret z ;\r
+ call DELC ;\r
+ jr DELL ;\r
\r
-add_hl_a:\r
- add a,l ;02b9 85 .\r
- ld l,a ;02ba 6f o\r
- ret nc ;02bb d0 .\r
- inc h ;02bc 24 $\r
- ret ;02bd c9 .\r
+;-------------------------------------------------------------------------------\r
+\r
+get_line:\r
+ push hl ;\r
+ ld hl,conbuf ;\r
+ ld b,0 ;\r
+inlnxtch:\r
+ ld a,b ;\r
+ cp CONBUF_SIZE ;\r
+ jr z,inl_e ;\r
+ call incharw ;\r
+ cp CR ;\r
+ jr z,inl_e ;Accept line\r
+ cp LF ;\r
+ jr z,inl_e ;Accept line\r
+\r
+ cp BS ;\r
+ jr z,gl_1 ;\r
+ cp DEL ;\r
+ jr nz,gl_2 ;\r
+gl_1:\r
+ call DELC ;Delete Char\r
+ jr inlnxtch ;\r
+gl_2:\r
+ cp CNTRX ;\r
+ jr nz,gl_3 ;\r
+ call DELL ;Delete Line\r
+ jr inlnxtch ;\r
+gl_3:\r
+ cp TAB ;\r
+ jr nz,gl_4 ;\r
+ ld a,' ' ;\r
+gl_4:\r
+ ld (hl),a ;\r
+ cp ' ' ;\r
+ jr nc,gl_5 ;\r
+ ld a,'^' ;Controll characters\r
+ call outchar ;\r
+ ld a,(hl) ;\r
+ add a,'@' ;\r
+gl_5:\r
+ call outchar ;\r
+ inc hl ;\r
+ inc b ;\r
+ jr inlnxtch ;\r
+\r
+inl_e:\r
+ ld (hl),0\r
+ call CRLF ;\r
+ ld de,conbuf ;\r
+ pop hl ;\r
+ ret ;\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+get_char_upper:\r
+ ld a,(de)\r
+toupper:\r
+ cp 'a'\r
+ ret c\r
+ cp 'z'+1\r
+ ccf\r
+ ret c\r
+ and 05fh\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
skipbl0:\r
- inc de ;02be 13 .\r
+ inc de\r
skipbl:\r
- ld a,(de) ;02bf 1a .\r
- cp ' ' ;02c0 fe 20 .\r
- jr z,skipbl0 ;02c2 28 fa ( .\r
- cp TAB ;02c4 fe 09 . .\r
- jr z,skipbl0 ;02c6 28 f6 ( .\r
- or a ;02c8 b7 .\r
- ret ;02c9 c9 .\r
+ call get_char_upper\r
+ cp ' '\r
+ jr z,skipbl0\r
+ or a\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
next_arg:\r
- call skipbl ;02ca cd bf 02 . . .\r
- cp ',' ;02cd fe 2c . ,\r
- ret nz ;02cf c0 .\r
- inc de ;02d0 13 .\r
- call skipbl ;02d1 cd bf 02 . . .\r
- cp a ;02d4 bf .\r
- ret ;02d5 c9 .\r
+ call skipbl\r
+ cp ','\r
+ ret nz\r
+ call skipbl0\r
+ cp a\r
+ ret\r
\r
assert_eol:\r
- call skipbl ;02d6 cd bf 02 . . .\r
- ret z ;02d9 c8 .\r
+ call skipbl\r
+ ret z\r
to_error:\r
- jp ERROR ;02da c3 07 01 . . .\r
-\r
-chk_sp:\r
- push hl ;02dd e5 .\r
- push de ;02de d5 .\r
- ld hl,0 ;02df 21 00 00 ! . .\r
- add hl,sp ;02e2 39 9\r
- ld de,stack-40 ;02e3 11 1e 00 . . .\r
- call cp_hl_de ;02e6 cd ee 02 . . .\r
- pop de ;02e9 d1 .\r
- pop hl ;02ea e1 .\r
- jr c,to_error ;02eb 38 ed 8 .\r
- ret ;02ed c9 .\r
+ jp ERROR\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+chk_stack:\r
+ push hl\r
+ push de\r
+ ld hl,0\r
+ add hl,sp\r
+ ld de,stack-(STACK_SIZE-28)\r
+ call cp_hl_de\r
+ pop de\r
+ pop hl\r
+ jr c,to_error\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+add_hl_a2:\r
+ add a,a\r
+add_hl_a:\r
+ add a,l\r
+ ld l,a\r
+ ret nc\r
+ inc h\r
+ ret\r
\r
cp_hl_de:\r
- and a ;02ee a7 .\r
- sbc hl,de ;02ef ed 52 . R\r
- add hl,de ;02f1 19 .\r
- ret ;02f2 c9 .\r
+ and a\r
+ sbc hl,de\r
+ add hl,de\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
lookupch:\r
- ld b,0 ;02f3 06 00 . .\r
+ ld b,0\r
l02f5h:\r
- ld a,(hl) ;02f5 7e ~\r
- and a ;02f6 a7 .\r
- ret z ;02f7 c8 .\r
- ld a,(de) ;02f8 1a .\r
- cp (hl) ;02f9 be .\r
- jr z,l0300h ;02fa 28 04 ( .\r
- inc hl ;02fc 23 #\r
- inc b ;02fd 04 .\r
- jr l02f5h ;02fe 18 f5 . .\r
+ ld a,(hl)\r
+ and a\r
+ ret z\r
+ call get_char_upper\r
+ cp (hl)\r
+ jr z,l0300h\r
+ inc hl\r
+ inc b\r
+ jr l02f5h\r
l0300h:\r
- scf ;0300 37 7\r
- inc de ;0301 13 .\r
- ret ;0302 c9 .\r
+ scf\r
+ inc de\r
+ ret\r
\r
sub_0303h:\r
- ld hl,b_0cc3_start ;0303 21 c3 0c ! . .\r
- ld b,07fh ;0306 06 7f .\r
- jr l030ch ;0308 18 02 . .\r
-\r
-sub_030ah:\r
- ld b,0ffh ;030a 06 ff . .\r
+ ld hl,t_reg_names\r
+ ld b,07fh\r
l030ch:\r
- inc b ;030c 04 .\r
- ld a,(hl) ;030d 7e ~\r
- and a ;030e a7 .\r
- ret z ;030f c8 .\r
- call sub_031ch ;0310 cd 1c 03 . . .\r
- jr nc,l030ch ;0313 30 f7 0 .\r
- res 7,b ;0315 cb b8 . .\r
- ret ;0317 c9 .\r
-\r
-sub_0318h:\r
- push bc ;0318 c5 .\r
- res 7,b ;0319 cb b8 . .\r
- defb 03eh ;031b 3e >\r
+ inc b\r
+ ld a,(hl)\r
+ and a\r
+ ret z\r
+ call sub_031ch\r
+ jr nc,l030ch\r
+ res 7,b\r
+ ret\r
+\r
sub_031ch:\r
- push bc ;031c c5 .\r
- push de ;031d d5 .\r
+ push bc\r
+ push de\r
l031eh:\r
- ld a,(de) ;031e 1a .\r
- xor (hl) ;031f ae .\r
- and 07fh ;0320 e6 7f .\r
- jr nz,l0336h ;0322 20 12 .\r
- bit 7,(hl) ;0324 cb 7e . ~\r
- inc hl ;0326 23 #\r
- inc de ;0327 13 .\r
- jr z,l031eh ;0328 28 f4 ( .\r
- scf ;032a 37 7\r
- bit 7,b ;032b cb 78 . x\r
- call z,sub_060ch ;032d cc 0c 06 . . .\r
- jr nc,l0339h ;0330 30 07 0 .\r
- pop af ;0332 f1 .\r
- scf ;0333 37 7\r
- pop bc ;0334 c1 .\r
- ret ;0335 c9 .\r
+ call get_char_upper\r
+ xor (hl)\r
+ and 07fh\r
+ jr nz,l0336h\r
+ bit 7,(hl)\r
+ inc hl\r
+ inc de\r
+ jr z,l031eh\r
+ scf\r
+ bit 7,b\r
+ call z,sub_060ch\r
+ jr nc,l0339h\r
+ pop af\r
+ scf\r
+ pop bc\r
+ ret\r
l0336h:\r
- call sub_0345h ;0336 cd 45 03 . E .\r
+ call str_sel_next\r
l0339h:\r
- pop de ;0339 d1 .\r
- and a ;033a a7 .\r
- pop bc ;033b c1 .\r
- ret ;033c c9 .\r
-\r
-sel_dc_string:\r
- inc b ;033d 04 .\r
-l033eh:\r
- dec b ;033e 05 .\r
- ret z ;033f c8 .\r
- call sub_0345h ;0340 cd 45 03 . E .\r
- jr l033eh ;0343 18 f9 . .\r
-\r
-sub_0345h:\r
- ld a,(hl) ;0345 7e ~\r
- and a ;0346 a7 .\r
- ret z ;0347 c8 .\r
+ pop de\r
+ and a\r
+ pop bc\r
+ ret\r
+\r
+str_sel:\r
+ inc b\r
+ jr str_sel2\r
+str_sel1:\r
+ call str_sel_next\r
+str_sel2:\r
+ djnz str_sel1\r
+ ret\r
+\r
+str_sel_next:\r
+ ld a,(hl)\r
+ and a\r
+ ret z\r
l0348h:\r
- ld a,(hl) ;0348 7e ~\r
- inc hl ;0349 23 #\r
- and a ;034a a7 .\r
- ret m ;034b f8 .\r
- jr l0348h ;034c 18 fa . .\r
-\r
-sub_034eh:\r
- call get_arg_range ;034e cd 7d 03 . } .\r
- push hl ;0351 e5 .\r
- push bc ;0352 c5 .\r
- call next_arg ;0353 cd ca 02 . . .\r
- call sub_0363h ;0356 cd 63 03 . c .\r
- ex de,hl ;0359 eb .\r
- pop bc ;035a c1 .\r
- pop hl ;035b e1 .\r
- ret ;035c c9 .\r
+ ld a,(hl)\r
+ inc hl\r
+ and a\r
+ ret m\r
+ jr l0348h\r
+\r
+get_arg_range_target:\r
+ call get_arg_range\r
+ push hl\r
+ push bc\r
+ call next_arg\r
+ call get_arg_final\r
+ ex de,hl\r
+ pop bc\r
+ pop hl\r
+ ret\r
\r
sub_035dh:\r
- call expr ;035d cd be 03 . . .\r
- jr c,error0 ;0360 38 33 8 3\r
- ret ;0362 c9 .\r
+ call expr\r
+ jr c,error0\r
+ ret\r
\r
-sub_0363h:\r
- call sub_035dh ;0363 cd 5d 03 . ] .\r
+get_arg_final:\r
+ call sub_035dh\r
l0366h:\r
- jp assert_eol ;0366 c3 d6 02 . . .\r
+ jp assert_eol\r
\r
get_lastarg_def:\r
- call get_arg_def ;0369 cd 6e 03 . n .\r
- jr l0366h ;036c 18 f8 . .\r
+ call get_arg_def\r
+ jr l0366h\r
\r
get_arg_def:\r
- push hl ;036e e5 .\r
- call expr ;036f cd be 03 . . .\r
- jr c,l0375h ;0372 38 01 8 .\r
- ex (sp),hl ;0374 e3 .\r
+ push hl\r
+ call expr\r
+ jr c,l0375h\r
+ ex (sp),hl\r
l0375h:\r
- pop hl ;0375 e1 .\r
- ret ;0376 c9 .\r
+ pop hl\r
+ ret\r
\r
sub_0377h:\r
- call b_037c_start ;0377 cd 7c 03 . | .\r
- jr l0366h ;037a 18 ea . .\r
+ call b_037c_start\r
+ jr l0366h\r
\r
b_037c_start:\r
- defb 0e6h ;037c e6 .\r
+ defb 0e6h ;and a,.. clear carry\r
get_arg_range:\r
- scf ;037d 37 7\r
- ex af,af' ;037e 08 .\r
- push bc ;037f c5 .\r
- push hl ;0380 e5 .\r
- call expr ;0381 cd be 03 . . .\r
- jr nc,l038ch ;0384 30 06 0 .\r
- ex af,af' ;0386 08 .\r
- jr c,error0 ;0387 38 0c 8 .\r
- ex af,af' ;0389 08 .\r
- pop hl ;038a e1 .\r
- defb 03eh ;038b 3e >\r
+ scf\r
+ ex af,af'\r
+ push bc\r
+ push hl\r
+ call expr\r
+ jr nc,l038ch\r
+ ex af,af'\r
+ jr c,error0\r
+ ex af,af'\r
+ pop hl\r
+ defb 03eh ;ld a,.. swallow pop af\r
l038ch:\r
- pop af ;038c f1 .\r
- call get_range ;038d cd 9a 03 . . .\r
- jr nc,l0398h ;0390 30 06 0 .\r
- ex af,af' ;0392 08 .\r
- pop bc ;0393 c1 .\r
- ret nc ;0394 d0 .\r
+ pop af\r
+ call get_range\r
+ jr nc,l0398h\r
+ ex af,af'\r
+ pop bc\r
+ ret nc\r
error0:\r
- jp ERROR ;0395 c3 07 01 . . .\r
+ jp ERROR\r
l0398h:\r
- pop af ;0398 f1 .\r
- ret ;0399 c9 .\r
+ pop af\r
+ ret\r
\r
get_range:\r
- call next_arg ;039a cd ca 02 . . .\r
- cp 'S' ;039d fe 53 . S\r
- jr nz,l03a2h ;039f 20 01 .\r
- inc de ;03a1 13 .\r
+ call next_arg\r
+ cp 'S'\r
+ jr nz,l03a2h\r
+ inc de\r
l03a2h:\r
- push hl ;03a2 e5 .\r
- push af ;03a3 f5 .\r
- call expr ;03a4 cd be 03 . . .\r
- jr c,l03b8h ;03a7 38 0f 8 .\r
- ld b,h ;03a9 44 D\r
- ld c,l ;03aa 4d M\r
- pop af ;03ab f1 .\r
- pop hl ;03ac e1 .\r
- jr z,l03b6h ;03ad 28 07 ( .\r
- ld a,c ;03af 79 y\r
- sub l ;03b0 95 .\r
- ld c,a ;03b1 4f O\r
- ld a,b ;03b2 78 x\r
- sbc a,h ;03b3 9c .\r
- ld b,a ;03b4 47 G\r
- inc bc ;03b5 03 .\r
+ push hl\r
+ push af ;'S' flag\r
+ call expr\r
+ jr c,l03b8h\r
+ ld b,h\r
+ ld c,l\r
+ pop af\r
+ pop hl\r
+ jr z,l03b6h ;'S'?\r
+ ld a,c\r
+ sub l\r
+ ld c,a\r
+ ld a,b\r
+ sbc a,h\r
+ ld b,a\r
+ inc bc\r
l03b6h:\r
- and a ;03b6 a7 .\r
- ret ;03b7 c9 .\r
+ and a\r
+ ret\r
l03b8h:\r
- pop af ;03b8 f1 .\r
- pop hl ;03b9 e1 .\r
- jr z,error0 ;03ba 28 d9 ( .\r
- scf ;03bc 37 7\r
- ret ;03bd c9 .\r
+ pop af\r
+ pop hl\r
+ jr z,error0 ;'S', but no expression following\r
+ scf\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
expr:\r
- call skipbl ;03be cd bf 02 . . .\r
+ call skipbl\r
expr1:\r
- call do_subexpr ;03c1 cd 2f 04 . / .\r
- ret c ;03c4 d8 .\r
- call do_rel_op ;03c5 cd ef 03 . . .\r
- ret nc ;03c8 d0 .\r
- push bc ;03c9 c5 .\r
- push hl ;03ca e5 .\r
- call do_subexpr ;03cb cd 2f 04 . / .\r
- jr c,error0 ;03ce 38 c5 8 .\r
- ex de,hl ;03d0 eb .\r
- ex (sp),hl ;03d1 e3 .\r
- and a ;03d2 a7 .\r
- sbc hl,de ;03d3 ed 52 . R\r
- ld hl,0ffffh ;03d5 21 ff ff ! . .\r
- pop de ;03d8 d1 .\r
- ret ;03d9 c9 .\r
-\r
-do_op_eq:\r
- jr z,l03edh ;03da 28 11 ( .\r
- jr l03ech ;03dc 18 0e . .\r
-do_op_ne:\r
- jr nz,l03edh ;03de 20 0d .\r
- jr l03ech ;03e0 18 0a . .\r
-do_op_le:\r
- jr z,l03edh ;03e2 28 09 ( .\r
-do_op_lt:\r
- jr c,l03edh ;03e4 38 07 8 .\r
- jr l03ech ;03e6 18 04 . .\r
-do_op_gt:\r
- jr z,l03ech ;03e8 28 02 ( .\r
-do_op_ge:\r
- jr nc,l03edh ;03ea 30 01 0 .\r
-l03ech:\r
- inc hl ;03ec 23 #\r
-l03edh:\r
- and a ;03ed a7 .\r
- ret ;03ee c9 .\r
-do_rel_op:\r
- push hl ;03ef e5 .\r
- ld hl,tab_eq_le_ge ;03f0 21 1f 04 ! . .\r
- call lookupch ;03f3 cd f3 02 . . .\r
- jr nc,l041dh ;03f6 30 25 0 %\r
- ld a,b ;03f8 78 x\r
- or a ;03f9 b7 .\r
- jr z,l0411h ;03fa 28 15 ( .\r
- ld a,(de) ;03fc 1a .\r
- cp '=' ;03fd fe 3d . =\r
- jr nz,l0406h ;03ff 20 05 .\r
- inc de ;0401 13 .\r
- inc b ;0402 04 .\r
- inc b ;0403 04 .\r
- jr l0411h ;0404 18 0b . .\r
-l0406h:\r
- bit 0,b ;0406 cb 40 . @\r
- jr z,l0411h ;0408 28 07 ( .\r
- cp '>' ;040a fe 3e . >\r
- jr nz,l0411h ;040c 20 03 .\r
- inc de ;040e 13 .\r
- ld b,005h ;040f 06 05 . .\r
-l0411h:\r
- ld hl,tab_func_eqlege ;0411 21 23 04 ! # .\r
- ld a,b ;0414 78 x\r
- add a,a ;0415 87 .\r
- call add_hl_a ;0416 cd b9 02 . . .\r
- ld c,(hl) ;0419 4e N\r
- inc hl ;041a 23 #\r
- ld b,(hl) ;041b 46 F\r
- scf ;041c 37 7\r
-l041dh:\r
- pop hl ;041d e1 .\r
- ret ;041e c9 .\r
-\r
-tab_eq_le_ge:\r
- db '=<>',0\r
-\r
-tab_func_eqlege:\r
- dw do_op_eq ;0423 da 03 . .\r
- dw do_op_lt ;0425 e4 03 . .\r
- dw do_op_gt ;0427 e8 03 . .\r
- dw do_op_le ;0429 e2 03 . .\r
- dw do_op_ge ;042b ea 03 . .\r
- dw do_op_ne ;042d de 03 . .\r
-\r
-do_subexpr:\r
- call do_factor ;042f cd e4 04 . . .\r
- ret c ;0432 d8 .\r
+ call do_factor\r
+ ret c\r
l0433h:\r
- call do_binary_op ;0433 cd ae 04 . . .\r
- push hl ;0436 e5 .\r
- push bc ;0437 c5 .\r
- call do_factor ;0438 cd e4 04 . . .\r
- pop bc ;043b c1 .\r
- ex de,hl ;043c eb .\r
- ex (sp),hl ;043d e3 .\r
- jr nc,l0447h ;043e 30 07 0 .\r
- pop de ;0440 d1 .\r
- ld a,b ;0441 78 x\r
- or c ;0442 b1 .\r
- ret z ;0443 c8 .\r
- jp ERROR ;0444 c3 07 01 . . .\r
+ call do_binary_op\r
+ push hl\r
+ push bc\r
+ call do_factor\r
+ pop bc\r
+ ex de,hl\r
+ ex (sp),hl\r
+ jr nc,l0447h\r
+ pop de\r
+ ld a,b\r
+ or c\r
+ ret z\r
+ jp ERROR\r
\r
l0447h:\r
- ld a,b ;0447 78 x\r
- or c ;0448 b1 .\r
- push bc ;0449 c5 .\r
- ret nz ;044a c0 .\r
- pop bc ;044b c1 .\r
+ ld a,b\r
+ or c\r
+ push bc\r
+ ret nz\r
+ pop bc\r
\r
doop_add:\r
- add hl,de ;044c 19 .\r
+ add hl,de\r
l044dh:\r
- pop de ;044d d1 .\r
- jr l0433h ;044e 18 e3 . .\r
+ pop de\r
+ jr l0433h\r
\r
doop_sub:\r
- and a ;0450 a7 .\r
- sbc hl,de ;0451 ed 52 . R\r
- jr l044dh ;0453 18 f8 . .\r
+ and a\r
+ sbc hl,de\r
+ jr l044dh\r
\r
doop_mlt:\r
- push bc ;0455 c5 .\r
- ld b,h ;0456 44 D\r
- ld c,l ;0457 4d M\r
- ld hl,0 ;0458 21 00 00 ! . .\r
- ld a,010h ;045b 3e 10 > .\r
+ push bc\r
+ ld b,h\r
+ ld c,l\r
+ ld hl,0\r
+ ld a,010h\r
l045dh:\r
- add hl,hl ;045d 29 )\r
- ex de,hl ;045e eb .\r
- add hl,hl ;045f 29 )\r
- ex de,hl ;0460 eb .\r
- jr nc,l0464h ;0461 30 01 0 .\r
- add hl,bc ;0463 09 .\r
+ add hl,hl\r
+ ex de,hl\r
+ add hl,hl\r
+ ex de,hl\r
+ jr nc,l0464h\r
+ add hl,bc\r
l0464h:\r
- dec a ;0464 3d =\r
- jr nz,l045dh ;0465 20 f6 .\r
- pop bc ;0467 c1 .\r
- jr l044dh ;0468 18 e3 . .\r
+ dec a\r
+ jr nz,l045dh\r
+ pop bc\r
+ jr l044dh\r
\r
doop_div:\r
- call div_hl_de ;046a cd 75 04 . u .\r
- jr l044dh ;046d 18 de . .\r
+ call div_hl_de\r
+ jr l044dh\r
\r
doop_mod:\r
- call div_hl_de ;046f cd 75 04 . u .\r
- ex de,hl ;0472 eb .\r
- jr l044dh ;0473 18 d8 . .\r
+ call div_hl_de\r
+ ex de,hl\r
+ jr l044dh\r
\r
; divide x/y\r
; hl: x\r
; de: r (x%y)\r
\r
div_hl_de:\r
- push bc ;0475 c5 .\r
- ex de,hl ;0476 eb .\r
- ld b,h ;0477 44 D\r
- ld c,l ;0478 4d M\r
- ld hl,0 ;0479 21 00 00 ! . .\r
- ld a,16 ;047c 3e 10 > .\r
+ push bc\r
+ ex de,hl ;de: x\r
+ ld b,h ;bc: y\r
+ ld c,l\r
+ ld hl,0 ;hl: r\r
+ ld a,16\r
\r
; de: x (x shifted out, q shifted in)\r
; bc: y\r
; hl: r (initially 0)\r
\r
-l047eh:\r
- push af ;047e f5 .\r
- add hl,hl ;047f 29 )\r
- ex de,hl ;0480 eb .\r
- xor a ;0481 af .\r
- add hl,hl ;0482 29 )\r
- ex de,hl ;0483 eb .\r
- adc a,l ;0484 8d .\r
- sub c ;0485 91 .\r
- ld l,a ;0486 6f o\r
- ld a,h ;0487 7c |\r
- sbc a,b ;0488 98 .\r
- ld h,a ;0489 67 g\r
- inc de ;048a 13 .\r
- jr nc,l048fh ;048b 30 02 0 .\r
- add hl,bc ;048d 09 .\r
- dec de ;048e 1b .\r
-l048fh:\r
- pop af ;048f f1 .\r
- dec a ;0490 3d =\r
- jr nz,l047eh ;0491 20 eb .\r
- ex de,hl ;0493 eb .\r
- pop bc ;0494 c1 .\r
- ret ;0495 c9 .\r
+div_lp:\r
+ ex de,hl\r
+ add hl,hl ;x <<= 1\r
+ ex de,hl\r
+ adc hl,hl ;r <<= 1\r
+ inc de\r
+ or a\r
+ sbc hl,bc\r
+ jr nc,div_norestore\r
+ dec de\r
+ add hl,bc\r
+div_norestore:\r
+ dec a\r
+ jr nz,div_lp\r
+ ex de,hl\r
+ pop bc\r
+ ret\r
\r
doop_and:\r
- ld a,h ;0496 7c |\r
- and d ;0497 a2 .\r
- ld h,a ;0498 67 g\r
- ld a,l ;0499 7d }\r
- and e ;049a a3 .\r
- ld l,a ;049b 6f o\r
- jr l044dh ;049c 18 af . .\r
+ ld a,h\r
+ and d\r
+ ld h,a\r
+ ld a,l\r
+ and e\r
+ ld l,a\r
+ jr l044dh\r
\r
doop_or:\r
- ld a,h ;049e 7c |\r
- or d ;049f b2 .\r
- ld h,a ;04a0 67 g\r
- ld a,l ;04a1 7d }\r
- or e ;04a2 b3 .\r
- ld l,a ;04a3 6f o\r
- jr l044dh ;04a4 18 a7 . .\r
+ ld a,h\r
+ or d\r
+ ld h,a\r
+ ld a,l\r
+ or e\r
+ ld l,a\r
+ jr l044dh\r
\r
doop_xor:\r
- ld a,h ;04a6 7c |\r
- xor d ;04a7 aa .\r
- ld h,a ;04a8 67 g\r
- ld a,l ;04a9 7d }\r
- xor e ;04aa ab .\r
- ld l,a ;04ab 6f o\r
- jr l044dh ;04ac 18 9f . .\r
+ ld a,h\r
+ xor d\r
+ ld h,a\r
+ ld a,l\r
+ xor e\r
+ ld l,a\r
+ jr l044dh\r
\r
do_binary_op:\r
- push hl ;04ae e5 .\r
- ld hl,tab_op_a ;04af 21 c2 04 ! . .\r
- call lookupch ;04b2 cd f3 02 . . .\r
- ld a,b ;04b5 78 x\r
- ld hl,tblf_opa ;04b6 21 cb 04 ! . .\r
- add a,a ;04b9 87 .\r
- call add_hl_a ;04ba cd b9 02 . . .\r
- ld c,(hl) ;04bd 4e N\r
- inc hl ;04be 23 #\r
- ld b,(hl) ;04bf 46 F\r
- pop hl ;04c0 e1 .\r
- ret ;04c1 c9 .\r
+ push hl\r
+ ld hl,tab_op_a\r
+ call lookupch\r
+ ld a,b\r
+ ld hl,tblf_opa\r
+ call add_hl_a2\r
+ ld c,(hl)\r
+ inc hl\r
+ ld b,(hl)\r
+ pop hl\r
+ ret\r
\r
tab_op_a:\r
DB '+-*/%&!#',0\r
\r
tblf_opa:\r
- dw doop_add ;04cb 4c 04 L .\r
- dw doop_sub ;04cd 50 04 P .\r
- dw doop_mlt ;04cf 55 04 U .\r
- dw doop_div ;04d1 6a 04 j .\r
- dw doop_mod ;04d3 6f 04 o .\r
- dw doop_and ;04d5 96 04 . .\r
- dw doop_or ;04d7 9e 04 . .\r
- dw doop_xor ;04d9 a6 04 . .\r
- dw 0 ;04db 00 00 . .\r
+ dw doop_add\r
+ dw doop_sub\r
+ dw doop_mlt\r
+ dw doop_div\r
+ dw doop_mod\r
+ dw doop_and\r
+ dw doop_or\r
+ dw doop_xor\r
+ dw 0\r
+\r
+;-------------------------------------------------------------------------------\r
\r
fact_factor:\r
- call do_factor ;04dd cd e4 04 . . .\r
- ret nc ;04e0 d0 .\r
- jp ERROR ;04e1 c3 07 01 . . .\r
+ call do_factor\r
+ ret nc\r
+ jp ERROR\r
\r
do_factor:\r
- call chk_sp ;04e4 cd dd 02 . . .\r
- call get.number ;04e7 cd aa 05 . . .\r
- ret nc ;04ea d0 .\r
- inc de ;04eb 13 .\r
- ld hl,(BDOS+1) ;04ec 21 ff ff ! . .\r
- cp 'T' ;04ef fe 54 . T\r
- ret z ;04f1 c8 .\r
- ld hl,(high_load) ;04f2 2a 9c 11 * . .\r
- cp 'H' ;04f5 fe 48 . H\r
- ret z ;04f7 c8 .\r
- ld hl,(max_load) ;04f8 2a 9e 11 * . .\r
- cp 'M' ;04fb fe 4d . M\r
- ret z ;04fd c8 .\r
- ld hl,TPA ;04fe 21 00 01 ! . .\r
- cp 'L' ;0501 fe 4c . L\r
- ret z ;0503 c8 .\r
- ld hl,(offs.@) ;0504 2a 64 00 * d .\r
- cp '@' ;0507 fe 40 . @\r
- ret z ;0509 c8 .\r
- ld hl,(l0062h) ;050a 2a 62 00 * b .\r
- cp '$' ;050d fe 24 . $\r
- ret z ;050f c8 .\r
- cp '-' ;0510 fe 2d . -\r
- jr z,fact_factneg ;0512 28 61 ( a\r
- cp '~' ;0514 fe 7e . ~\r
- jr z,fact_factinv ;0516 28 68 ( h\r
- cp '+' ;0518 fe 2b . +\r
- jr z,fact_factor ;051a 28 c1 ( .\r
- cp '^' ;051c fe 5e . ^\r
- jr z,fact_reg.CPU ;051e 28 45 ( E\r
- cp 'Y' ;0520 fe 59 . Y\r
- jr z,fact_reg.Y ;0522 28 10 ( .\r
- cp '(' ;0524 fe 28 . (\r
- jr z,fact_mem ;0526 28 5d ( ]\r
- cp '[' ;0528 fe 5b . [\r
- jp z,expr_brckt ;052a ca 9d 05 . . .\r
- cp '''' ;052d fe 27 . '\r
- jr z,fact_factstring ;052f 28 17 ( .\r
- dec de ;0531 1b .\r
- scf ;0532 37 7\r
- ret ;0533 c9 .\r
-\r
-fact_reg.Y:\r
- call get.decdigit ;0534 cd 1d 06 . . .\r
- jp c,ERROR ;0537 da 07 01 . . .\r
- inc de ;053a 13 .\r
- add a,a ;053b 87 .\r
- ld hl,reg_Y ;053c 21 9e 0b ! . .\r
- call add_hl_a ;053f cd b9 02 . . .\r
- ld a,(hl) ;0542 7e ~\r
- inc hl ;0543 23 #\r
- ld h,(hl) ;0544 66 f\r
- ld l,a ;0545 6f o\r
- and a ;0546 a7 .\r
- ret ;0547 c9 .\r
+ call chk_stack\r
+ call get.number\r
+ ret nc\r
+ inc de\r
+ ld hl,ddtz_base-1\r
+ cp 'T'\r
+ ret z\r
+ ld hl,(high_load)\r
+ cp 'H'\r
+ ret z\r
+ ld hl,(max_load)\r
+ cp 'M'\r
+ ret z\r
+ ld hl,TPA\r
+ cp 'L'\r
+ ret z\r
+ ld hl,(reg.pc)\r
+ cp '$'\r
+ ret z\r
+ cp '-'\r
+ jr z,fact_factneg\r
+ cp '~'\r
+ jr z,fact_factinv\r
+ cp '+'\r
+ jr z,fact_factor\r
+ cp '^'\r
+ jr z,fact_reg.CPU\r
+ cp '('\r
+ jr z,fact_mem\r
+ cp '['\r
+ jr z,expr_brckt\r
+ cp ''''\r
+ jr z,fact_factstring\r
+ dec de\r
+ scf\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
fact_factstring:\r
- ld hl,0 ;0548 21 00 00 ! . .\r
+ ld hl,0\r
l054bh:\r
- ld a,(de) ;054b 1a .\r
- cp '''' ;054c fe 27 . '\r
- jr z,l0557h ;054e 28 07 ( .\r
- and a ;0550 a7 .\r
- ret z ;0551 c8 .\r
+ ld a,(de)\r
+ cp ''''\r
+ jr z,l0557h\r
+ and a\r
+ ret z\r
l0552h:\r
- ld h,l ;0552 65 e\r
- ld l,a ;0553 6f o\r
- inc de ;0554 13 .\r
- jr l054bh ;0555 18 f4 . .\r
+ ld h,l\r
+ ld l,a\r
+ inc de\r
+ jr l054bh\r
l0557h:\r
- inc de ;0557 13 .\r
- ld a,(de) ;0558 1a .\r
- cp '''' ;0559 fe 27 . '\r
- jr z,l0552h ;055b 28 f5 ( .\r
- sub '.' ;055d d6 2e . .\r
- or a ;055f b7 .\r
- ret nz ;0560 c0 .\r
- inc de ;0561 13 .\r
- set 7,l ;0562 cb fd . .\r
- ret ;0564 c9 .\r
+ inc de\r
+ ld a,(de)\r
+ cp ''''\r
+ jr z,l0552h\r
+ sub '.'\r
+ or a\r
+ ret nz\r
+ inc de\r
+ set 7,l\r
+ ret\r
\r
fact_reg.CPU:\r
- call sub_0caeh ;0565 cd ae 0c . . .\r
- jr nc,error4 ;0568 30 3d 0 =\r
- ld a,(hl) ;056a 7e ~\r
- inc hl ;056b 23 #\r
- ld h,(hl) ;056c 66 f\r
- ld l,a ;056d 6f o\r
- and a ;056e a7 .\r
- bit 0,c ;056f cb 41 . A\r
- ret nz ;0571 c0 .\r
- ld h,000h ;0572 26 00 & .\r
- ret ;0574 c9 .\r
+ call sub_0caeh\r
+ jr nc,error1\r
+ ld a,(hl)\r
+ inc hl\r
+ ld h,(hl)\r
+ ld l,a\r
+ and a\r
+ bit 0,c\r
+ ret nz\r
+ ld h,000h\r
+ ret\r
+\r
+fact_factinv:\r
+ call fact_factor\r
+ jr cpl.hl\r
\r
fact_factneg:\r
- call fact_factor ;0575 cd dd 04 . . .\r
- dec hl ;0578 2b +\r
+ call fact_factor\r
+neg.hl:\r
+ dec hl\r
cpl.hl:\r
- ld a,h ;0579 7c |\r
- cpl ;057a 2f /\r
- ld h,a ;057b 67 g\r
- ld a,l ;057c 7d }\r
- cpl ;057d 2f /\r
- ld l,a ;057e 6f o\r
- ret ;057f c9 .\r
-\r
-fact_factinv:\r
- call fact_factor ;0580 cd dd 04 . . .\r
- jr cpl.hl ;0583 18 f4 . .\r
+ ld a,h\r
+ cpl\r
+ ld h,a\r
+ ld a,l\r
+ cpl\r
+ ld l,a\r
+ ret\r
\r
fact_mem:\r
- call expr1 ;0585 cd c1 03 . . .\r
- jr c,error4 ;0588 38 1d 8 .\r
- ld a,(de) ;058a 1a .\r
- cp ')' ;058b fe 29 . )\r
- jr nz,error4 ;058d 20 18 .\r
- inc de ;058f 13 .\r
- ld a,(hl) ;0590 7e ~\r
- inc hl ;0591 23 #\r
- ld h,(hl) ;0592 66 f\r
- ld l,a ;0593 6f o\r
- ld a,(de) ;0594 1a .\r
- inc de ;0595 13 .\r
- cp '.' ;0596 fe 2e . .\r
- ret z ;0598 c8 .\r
- dec de ;0599 1b .\r
- xor a ;059a af .\r
- ld h,a ;059b 67 g\r
- ret ;059c c9 .\r
+ call expr1\r
+ jr c,error1\r
+ ld a,(de)\r
+ cp ')'\r
+ jr nz,error1\r
+ inc de\r
+ ld a,(hl)\r
+ inc hl\r
+ ld h,(hl)\r
+ ld l,a\r
+ ld a,(de)\r
+ inc de\r
+ cp '.'\r
+ ret z\r
+ dec de\r
+ xor a\r
+ ld h,a\r
+ ret\r
\r
expr_brckt:\r
- call expr1 ;059d cd c1 03 . . .\r
- jr c,error4 ;05a0 38 05 8 .\r
- ld a,(de) ;05a2 1a .\r
- cp ']' ;05a3 fe 5d . ]\r
- inc de ;05a5 13 .\r
- ret z ;05a6 c8 .\r
-error4:\r
- jp ERROR ;05a7 c3 07 01 . . .\r
+ call expr1\r
+ jr c,error1\r
+ ld a,(de)\r
+ cp ']'\r
+ inc de\r
+ ret z\r
+error1:\r
+ jp ERROR\r
+\r
+;-------------------------------------------------------------------------------\r
\r
get.number:\r
- call get.hexdigit ;05aa cd 11 06 . . .\r
- ret c ;05ad d8 .\r
- push de ;05ae d5 .\r
+ call get.hexdigit\r
+ ret c\r
+ push de\r
test_number:\r
- inc de ;05af 13 .\r
- call get.hexdigit ;05b0 cd 11 06 . . .\r
- jr nc,test_number ;05b3 30 fa 0 .\r
- pop de ;05b5 d1 .\r
- cp '.' ;05b6 fe 2e . .\r
- jr z,get_dec_number ;05b8 28 36 ( 6\r
- cp '"' ;05ba fe 22 . "\r
- jr z,get_bin_number ;05bc 28 17 ( .\r
- ld hl,0 ;05be 21 00 00 ! . .\r
+ inc de\r
+ call get.hexdigit\r
+ jr nc,test_number\r
+ pop de\r
+ cp '.'\r
+ jr z,get_dec_number\r
+ cp '"'\r
+ jr z,get_bin_number\r
+ ld hl,0\r
next_hexdigit:\r
- call get.hexdigit ;05c1 cd 11 06 . . .\r
- jr c,hexnum_done ;05c4 38 0a 8 .\r
- add hl,hl ;05c6 29 )\r
- add hl,hl ;05c7 29 )\r
- add hl,hl ;05c8 29 )\r
- add hl,hl ;05c9 29 )\r
- call add_hl_a ;05ca cd b9 02 . . .\r
- inc de ;05cd 13 .\r
- jr next_hexdigit ;05ce 18 f1 . .\r
+ call get.hexdigit\r
+ jr c,hexnum_done\r
+ add hl,hl\r
+ add hl,hl\r
+ add hl,hl\r
+ add hl,hl\r
+ call add_hl_a\r
+ inc de\r
+ jr next_hexdigit\r
\r
hexnum_done:\r
- xor 'H' ;05d0 ee 48 . H\r
- ret nz ;05d2 c0 .\r
- inc de ;05d3 13 .\r
- ret ;05d4 c9 .\r
+ xor 'H'\r
+ ret nz\r
+ inc de\r
+ ret\r
\r
get_bin_number:\r
- ld hl,0 ;05d5 21 00 00 ! . .\r
+ ld hl,0\r
next_bindigit:\r
- call get.bindigit ;05d8 cd 22 06 . " .\r
+ call get.bindigit\r
l05dbh:\r
- inc de ;05db 13 .\r
- jr c,l05e4h ;05dc 38 06 8 .\r
- add hl,hl ;05de 29 )\r
- call add_hl_a ;05df cd b9 02 . . .\r
- jr next_bindigit ;05e2 18 f4 . .\r
+ inc de\r
+ jr c,l05e4h\r
+ add hl,hl\r
+ call add_hl_a\r
+ jr next_bindigit\r
l05e4h:\r
- cp '"' ;05e4 fe 22 . "\r
- jp nz,ERROR ;05e6 c2 07 01 . . .\r
- call get.bindigit ;05e9 cd 22 06 . " .\r
- jr nc,l05dbh ;05ec 30 ed 0 .\r
- or a ;05ee b7 .\r
- ret ;05ef c9 .\r
+ cp '"'\r
+ jr nz,error11\r
+ call get.bindigit\r
+ jr nc,l05dbh\r
+ or a\r
+ ret\r
\r
get_dec_number:\r
- ld hl,0 ;05f0 21 00 00 ! . .\r
+ ld hl,0\r
next_decdigit:\r
- call get.decdigit ;05f3 cd 1d 06 . . .\r
- inc de ;05f6 13 .\r
- jr c,decnum_done ;05f7 38 0d 8 .\r
- push bc ;05f9 c5 .\r
- add hl,hl ;05fa 29 )\r
- ld b,h ;05fb 44 D\r
- ld c,l ;05fc 4d M\r
- add hl,hl ;05fd 29 )\r
- add hl,hl ;05fe 29 )\r
- add hl,bc ;05ff 09 .\r
- pop bc ;0600 c1 .\r
- call add_hl_a ;0601 cd b9 02 . . .\r
- jr next_decdigit ;0604 18 ed . .\r
+ call get.decdigit\r
+ inc de\r
+ jr c,decnum_done\r
+ push bc\r
+ add hl,hl\r
+ ld b,h\r
+ ld c,l\r
+ add hl,hl\r
+ add hl,hl\r
+ add hl,bc\r
+ pop bc\r
+ call add_hl_a\r
+ jr next_decdigit\r
decnum_done:\r
- cp '.' ;0606 fe 2e . .\r
- ret z ;0608 c8 .\r
- jp ERROR ;0609 c3 07 01 . . .\r
+ cp '.'\r
+ ret z\r
+error11:\r
+ jp ERROR\r
\r
sub_060ch:\r
- ld a,(de) ;060c 1a .\r
- cp '[' ;060d fe 5b . [\r
- jr l0614h ;060f 18 03 . .\r
+ call get_char_upper\r
+ cp 'Z'+1\r
+ jr l0614h\r
\r
get.hexdigit:\r
ld a,(de)\r
hex_digit:\r
+ call toupper\r
cp 'F'+1\r
l0614h:\r
ccf\r
ret\r
\r
get.decdigit:\r
- ld a,(de)\r
+ call get_char_upper\r
l061eh:\r
cp '9'+1\r
jr l0625h\r
\r
get.bindigit:\r
- ld a,(de)\r
+ call get_char_upper\r
cp '1'+1\r
l0625h:\r
ccf\r
sub '0'\r
ret\r
\r
+;-------------------------------------------------------------------------------\r
+\r
p_cpustat0:\r
- call assert_eol ;062d cd d6 02 . . .\r
+ call assert_eol\r
p_cpustat:\r
- call p_f ;0630 cd 6e 06 . n .\r
- call outbl2 ;0633 cd 9c 02 . . .\r
- ld hl,b_06e9_start ;0636 21 e9 06 ! . .\r
- ld de,b_0709_start ;0639 11 09 07 . . .\r
- ld b,6 ;063c 06 06 . .\r
+ call p_f\r
+ call outbl2\r
+ ld hl,b_06e9_start\r
+ ld de,b_0709_start\r
+ ld b,6\r
l063eh:\r
- call p_regs ;063e cd b2 06 . . .\r
- djnz l063eh ;0641 10 fb . .\r
- push hl ;0643 e5 .\r
- push de ;0644 d5 .\r
- ld iy,(REG.PC) ;0645 fd 2a 60 00 . * ` .\r
- call p_disas_instr ;0649 cd 65 19 . e .\r
- exx ;064c d9 .\r
- ex af,af' ;064d 08 .\r
- call crlf ;064e cd a3 02 . . .\r
- call p_f2 ;0651 cd 81 06 . . .\r
- call outbl2 ;0654 cd 9c 02 . . .\r
- pop de ;0657 d1 .\r
- pop hl ;0658 e1 .\r
- ld b,7 ;0659 06 07 . .\r
+ call p_regs\r
+ djnz l063eh\r
+ call outbl6\r
+ push hl\r
+ push de\r
+ ld iy,(reg.pc)\r
+ call p_disas_instr\r
+ pop de\r
+ pop hl\r
+ call crlf\r
+ call p_f2\r
+ call outbl2\r
+ ld b,7\r
l065bh:\r
- call p_regs ;065b cd b2 06 . . .\r
- djnz l065bh ;065e 10 fb . .\r
- exx ;0660 d9 .\r
- ex af,af' ;0661 08 .\r
- and a ;0662 a7 .\r
- jr z,l066bh ;0663 28 06 ( .\r
- call outbl6 ;0665 cd 96 02 . . .\r
- call p_offset ;0668 cd 49 19 . I .\r
-l066bh:\r
- jp crlf ;066b c3 a3 02 . . .\r
+ call p_regs\r
+ djnz l065bh\r
+ jp crlf\r
\r
p_f:\r
- ld a,(reg.f) ;066e 3a 54 00 : T .\r
- call p_flags ;0671 cd 8a 06 . . .\r
- ld a,(reg.iff) ;0674 3a 5e 00 : ^ .\r
- cp 0f3h ;0677 fe f3 . .\r
- jp z,outbl ;0679 ca 9f 02 . . .\r
- ld a,'E' ;067c 3e 45 > E\r
- jp outchar ;067e c3 5d 02 . ] .\r
+ ld a,(reg.f)\r
+ call p_flags\r
+ ld a,(reg.iff)\r
+ cp 0f3h\r
+ jr z,outbl_1\r
+ ld a,'E'\r
+ jp outchar\r
p_f2:\r
- ld a,(reg.f2) ;0681 3a 4c 00 : L .\r
- call p_flags ;0684 cd 8a 06 . . .\r
- jp outbl ;0687 c3 9f 02 . . .\r
+ ld a,(reg.f2)\r
+ call p_flags\r
+ jr outbl_1\r
+\r
p_flags:\r
- ld b,a ;068a 47 G\r
- ld a,'S' ;068b 3e 53 > S\r
- call sub_06aah ;068d cd aa 06 . . .\r
- ld a,'Z' ;0690 3e 5a > Z\r
- call sub_06aah ;0692 cd aa 06 . . .\r
- rl b ;0695 cb 10 . .\r
- ld a,'H' ;0697 3e 48 > H\r
- call sub_06aah ;0699 cd aa 06 . . .\r
- rl b ;069c cb 10 . .\r
- ld a,'V' ;069e 3e 56 > V\r
- call sub_06aah ;06a0 cd aa 06 . . .\r
- ld a,'N' ;06a3 3e 4e > N\r
- call sub_06aah ;06a5 cd aa 06 . . .\r
- ld a,'C' ;06a8 3e 43 > C\r
-sub_06aah:\r
- rl b ;06aa cb 10 . .\r
- jp c,outchar ;06ac da 5d 02 . ] .\r
- jp outbl ;06af c3 9f 02 . . .\r
+ push hl\r
+ ld hl,t_flag_names+7\r
+ ld c,a\r
+ ld b,8\r
+fl_loop:\r
+ ld a,' '\r
+ cp (hl)\r
+ ld a,c\r
+ rlca\r
+ ld c,a\r
+ jr z,fl_skip\r
+ ld a,(hl)\r
+ call c,outchar\r
+ call nc,outbl\r
+fl_skip:\r
+ dec hl\r
+ djnz fl_loop\r
+ pop hl\r
+ ret\r
\r
p_regs:\r
- push bc ;06b2 c5 .\r
- push de ;06b3 d5 .\r
- call pstr ;06b4 cd 88 02 . . .\r
- ld a,'=' ;06b7 3e 3d > =\r
- call outchar ;06b9 cd 5d 02 . ] .\r
- ex (sp),hl ;06bc e3 .\r
- ld e,(hl) ;06bd 5e ^\r
- inc hl ;06be 23 #\r
- ld d,(hl) ;06bf 56 V\r
- inc hl ;06c0 23 #\r
- ld a,(hl) ;06c1 7e ~\r
- inc hl ;06c2 23 #\r
- push hl ;06c3 e5 .\r
- and a ;06c4 a7 .\r
- jr z,l06deh ;06c5 28 17 ( .\r
- push af ;06c7 f5 .\r
- ld a,(de) ;06c8 1a .\r
- ld l,a ;06c9 6f o\r
- inc de ;06ca 13 .\r
- ld a,(de) ;06cb 1a .\r
- ld h,a ;06cc 67 g\r
- pop af ;06cd f1 .\r
- dec a ;06ce 3d =\r
- jr z,l06d9h ;06cf 28 08 ( .\r
- call out.hl.@ ;06d1 cd a4 01 . . .\r
- call z,outbl6 ;06d4 cc 96 02 . . .\r
- jr l06e2h ;06d7 18 09 . .\r
-l06d9h:\r
- call out_hl ;06d9 cd 13 02 . . .\r
- jr l06e2h ;06dc 18 04 . .\r
+ push de\r
+ call pstr\r
+ call pstr_inl\r
+ dc '='\r
+ ex (sp),hl\r
+ ld e,(hl)\r
+ inc hl\r
+ ld d,(hl)\r
+ inc hl\r
+ ld a,(hl)\r
+ inc hl\r
+ push hl\r
+ and a\r
+ jr z,l06deh\r
+ ex de,hl\r
+ ld e,(hl)\r
+ inc hl\r
+ ld d,(hl)\r
+ ex de,hl\r
+ call out_hl\r
+ jr l06e2h\r
l06deh:\r
- ld a,(de) ;06de 1a .\r
- call out_hex ;06df cd 18 02 . . .\r
+ ld a,(de)\r
+ call out_hex\r
l06e2h:\r
- call outbl ;06e2 cd 9f 02 . . .\r
- pop de ;06e5 d1 .\r
- pop hl ;06e6 e1 .\r
- pop bc ;06e7 c1 .\r
- ret ;06e8 c9 .\r
+ pop de\r
+ pop hl\r
+outbl_1:\r
+ jp outbl\r
\r
b_06e9_start:\r
DC 'A '\r
DB 0\r
\r
b_0709_start:\r
- dw reg.a ;0709 55 00 U .\r
- db 000h ;070b 00 .\r
- dw reg.c ;070c 56 00 V .\r
- db 001h ;070e 01 .\r
- dw reg.e ;070f 58 00 X .\r
- db 001h ;0711 01 .\r
- dw reg.l ;0712 5a 00 Z .\r
- db 001h ;0714 01 .\r
- dw reg_sp ;0715 5c 00 \ .\r
- db 001h ;0717 01 .\r
- dw REG.PC ;0718 60 00 ` .\r
- db 002h ;071a 02 .\r
- dw reg.a2 ;071b 4d 00 M .\r
- db 000h ;071d 00 .\r
- dw reg.c2 ;071e 4a 00 J .\r
- db 001h ;0720 01 .\r
- dw reg.e2 ;0721 48 00 H .\r
- db 001h ;0723 01 .\r
- dw reg.l2 ;0724 46 00 F .\r
- db 001h ;0726 01 .\r
- dw reg.ix ;0727 52 00 R .\r
- db 001h ;0729 01 .\r
- dw reg.iy ;072a 50 00 P .\r
- db 001h ;072c 01 .\r
- dw reg.i ;072d 4f 00 O .\r
- db 000h ;072f 00 .\r
- db 000h ;0730 00 .\r
+ dw reg.a\r
+ db 000h\r
+ dw reg.c\r
+ db 001h\r
+ dw reg.e\r
+ db 001h\r
+ dw reg.l\r
+ db 001h\r
+ dw reg_sp\r
+ db 001h\r
+ dw reg.pc\r
+ db 002h\r
+ dw reg.a2\r
+ db 000h\r
+ dw reg.c2\r
+ db 001h\r
+ dw reg.e2\r
+ db 001h\r
+ dw reg.l2\r
+ db 001h\r
+ dw reg.ix\r
+ db 001h\r
+ dw reg.iy\r
+ db 001h\r
+ dw reg.i\r
+ db 000h\r
+ db 000h\r
+\r
+;-------------------------------------------------------------------------------\r
+; > E addr\r
+; relocate debugger to addr\r
+; > ER addr\r
+; relocate just below addr\r
+;\r
+; Move debugger to given address and restart.\r
+; New location must not overlap with current location.\r
+\r
+\r
+cmd_E:\r
+ call skipbl\r
+ sub 'R'\r
+ jr nz,$+3\r
+ inc de\r
+ push af\r
+ call get_arg_final\r
+\r
+ ld bc,prog_size+bitmap_size\r
+ pop af\r
+ jr nz,cmde_bottom\r
+ sbc hl,bc\r
+cmde_bottom:\r
+ ld ix,cmde_clr-ddtz_base\r
+ ex de,hl ;de = dst\r
+ add ix,de\r
+ ld hl,ddtz_base ;hl = src\r
+\r
+ push hl\r
+ or a\r
+ sbc hl,de\r
+ call c,neg.hl ;abs(distance)\r
+ or a\r
+ sbc hl,bc\r
+ jp c,error\r
+ pop hl\r
+ push hl\r
+ push bc\r
+ ldir\r
+ pop bc\r
+ pop hl\r
+ jp (ix)\r
+\r
+;-------------------------------------------------------------------------------\r
+; > G [startaddr] [;breakp..]\r
+; Go [to start] [with temporary breakpoints]\r
\r
cmd_G:\r
- sub a ;0731 97 .\r
- ld (trace_call_flag),a ;0732 32 e3 21 2 . !\r
- ld (l0941h),a ;0735 32 41 09 2 A .\r
- call expr ;0738 cd be 03 . . .\r
- jr c,l0740h ;073b 38 03 8 .\r
- ld (REG.PC),hl ;073d 22 60 00 " ` .\r
+ sub a\r
+ ld (bp_p_cpu_flag),a\r
+ call expr\r
+ jr c,l0740h\r
+ ld (reg.pc),hl\r
l0740h:\r
- call skipbl ;0740 cd bf 02 . . .\r
- jp z,user_go ;0743 ca 25 0a . % .\r
- cp ';' ;0746 fe 3b . ;\r
- jp nz,ERROR ;0748 c2 07 01 . . .\r
- inc de ;074b 13 .\r
- ld a,002h ;074c 3e 02 > .\r
- call bp_enter ;074e cd 10 08 . . .\r
- jp user_go ;0751 c3 25 0a . % .\r
+ call skipbl\r
+ jr z,user_go0\r
+ cp ';'\r
+ jp nz,ERROR\r
+ inc de\r
+ ld a,002h\r
+ call bp_enter\r
+user_go0:\r
+ jp user_go\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+bpl_init:\r
+ ld b,BP_CNT\r
+ ld ix,bp_tab\r
+ ex (sp),hl\r
+ ld (pbl_loop_adr),hl\r
+ ex (sp),hl\r
+ ret\r
+\r
+bpl_next:\r
+ ld de,BP_SIZE\r
+ push af\r
+ add ix,de\r
+ pop af\r
+ dec b\r
+ ret z\r
+\r
+ ex (sp),hl\r
+ ld hl,(pbl_loop_adr)\r
+ ex (sp),hl\r
+ ret\r
\r
bp_clr_temporary:\r
- ld b,BP_CNT ;0754 06 0c . .\r
- ld ix,bp_tab ;0756 dd 21 b8 0a . ! . .\r
-l075ah:\r
- ld a,(ix+000h) ;075a dd 7e 00 . ~ .\r
- and 0f1h ;075d e6 f1 . .\r
- ld (ix+000h),a ;075f dd 77 00 . w .\r
- call bp_clr_condition ;0762 cd 5f 0a . _ .\r
- ld de,BP_SIZE ;0765 11 08 00 . . .\r
- add ix,de ;0768 dd 19 . .\r
- djnz l075ah ;076a 10 ee . .\r
- ret ;076c c9 .\r
+ call bpl_init\r
+\r
+ ld a,(ix+000h)\r
+ and 0f1h\r
+ ld (ix+000h),a\r
+\r
+ call bpl_next\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+; > B\r
+; display all breakpoints\r
+; > B breakp [breakp..]\r
+; set breakpoints\r
+; > BX\r
+; clear all breakpoints\r
+; > BX breakp [breakp..]\r
+; clear breakpoints\r
+;\r
+; breakp can be any valid expression\r
\r
cmd_B:\r
- call skipbl ;076d cd bf 02 . . .\r
- jr z,l07b7h ;0770 28 45 ( E\r
- inc de ;0772 13 .\r
- cp 'X' ;0773 fe 58 . X\r
- jr z,l077dh ;0775 28 06 ( .\r
- dec de ;0777 1b .\r
- ld a,001h ;0778 3e 01 > .\r
- jp bp_enter ;077a c3 10 08 . . .\r
-l077dh:\r
- call skipbl ;077d cd bf 02 . . .\r
- jr z,bp_clr_all ;0780 28 10 ( .\r
-l0782h:\r
- call expr ;0782 cd be 03 . . .\r
- jp c,assert_eol ;0785 da d6 02 . . .\r
- push de ;0788 d5 .\r
- call bp_clr ;0789 cd 93 07 . . .\r
- pop de ;078c d1 .\r
- call next_arg ;078d cd ca 02 . . .\r
- jr l0782h ;0790 18 f0 . .\r
+ call skipbl\r
+ jr z,bp_print\r
+ inc de\r
+ cp 'X'\r
+ jr z,bp_clr0\r
+ dec de\r
+ ld a,001h\r
+ jp bp_enter\r
+\r
+bp_clr0:\r
+ call skipbl\r
+ jr z,bp_clr_all\r
+bp_clr_next:\r
+ call expr\r
+ jp c,assert_eol\r
+ push de\r
+ call bp_clr\r
+ pop de\r
+ call next_arg\r
+ jr bp_clr_next\r
\r
bp_clr_all:\r
- scf ;0792 37 7\r
+ scf\r
bp_clr:\r
- ld b,BP_CNT ;0793 06 0c . .\r
- ld ix,bp_tab ;0795 dd 21 b8 0a . ! . .\r
-l0799h:\r
- push af ;0799 f5 .\r
- jr c,l07a7h ;079a 38 0b 8 .\r
- ld e,(ix+002h) ;079c dd 5e 02 . ^ .\r
- ld d,(ix+003h) ;079f dd 56 03 . V .\r
- call cp_hl_de ;07a2 cd ee 02 . . .\r
- jr nz,l07aeh ;07a5 20 07 .\r
+ call bpl_init\r
+\r
+ push af\r
+ jr c,l07a7h\r
+ ld e,(ix+002h)\r
+ ld d,(ix+003h)\r
+ call cp_hl_de\r
+ jr nz,l07aeh\r
l07a7h:\r
- ld (ix+000h),000h ;07a7 dd 36 00 00 . 6 . .\r
- call bp_clr_condition ;07ab cd 5f 0a . _ .\r
+ ld (ix+000h),000h\r
l07aeh:\r
- ld de,BP_SIZE ;07ae 11 08 00 . . .\r
- add ix,de ;07b1 dd 19 . .\r
- pop af ;07b3 f1 .\r
- djnz l0799h ;07b4 10 e3 . .\r
- ret ;07b6 c9 .\r
-\r
-l07b7h:\r
- ld b,BP_CNT ;07b7 06 0c . .\r
- ld ix,bp_tab ;07b9 dd 21 b8 0a . ! . .\r
-l07bdh:\r
- bit 0,(ix+000h) ;07bd dd cb 00 46 . . . F\r
- jr z,l0808h ;07c1 28 45 ( E\r
- ld a,'R' ;07c3 3e 52 > R\r
- bit 4,(ix+000h) ;07c5 dd cb 00 66 . . . f\r
- jr nz,l07cdh ;07c9 20 02 .\r
- ld a,' ' ;07cb 3e 20 >\r
-l07cdh:\r
- call outchar ;07cd cd 5d 02 . ] .\r
- call outbl ;07d0 cd 9f 02 . . .\r
- ld l,(ix+002h) ;07d3 dd 6e 02 . n .\r
- ld h,(ix+003h) ;07d6 dd 66 03 . f .\r
- call out.hl.@ ;07d9 cd a4 01 . . .\r
- call outbl2 ;07dc cd 9c 02 . . .\r
- ld a,':' ;07df 3e 3a > :\r
- call outchar ;07e1 cd 5d 02 . ] .\r
- ld l,(ix+004h) ;07e4 dd 6e 04 . n .\r
- ld h,(ix+005h) ;07e7 dd 66 05 . f .\r
- call out_hl ;07ea cd 13 02 . . .\r
- ld l,(ix+006h) ;07ed dd 6e 06 . n .\r
- ld h,(ix+007h) ;07f0 dd 66 07 . f .\r
- ld a,h ;07f3 7c |\r
- or l ;07f4 b5 .\r
- jr z,l0805h ;07f5 28 0e ( .\r
- call outbl4 ;07f7 cd 99 02 . . .\r
- ld a,'I' ;07fa 3e 49 > I\r
- call outchar ;07fc cd 5d 02 . ] .\r
- call outbl2 ;07ff cd 9c 02 . . .\r
- call pstr ;0802 cd 88 02 . . .\r
-l0805h:\r
- call crlf ;0805 cd a3 02 . . .\r
-l0808h:\r
- ld de,BP_SIZE ;0808 11 08 00 . . .\r
- add ix,de ;080b dd 19 . .\r
- djnz l07bdh ;080d 10 ae . .\r
- ret ;080f c9 .\r
+ pop af\r
+ call bpl_next\r
+ ret\r
+\r
+bp_print:\r
+ ld c,0\r
+ call bpl_init\r
\r
+ bit 0,(ix+000h)\r
+ jr z,bp_pr_cont\r
+ ld l,(ix+002h)\r
+ ld h,(ix+003h)\r
+ call out_hl\r
+ call outbl2\r
+ inc c\r
+bp_pr_cont:\r
+ call bpl_next\r
+ ld a,c\r
+ or a\r
+ call nz,crlf\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
; Add break points to list\r
; A = 1 Permanent (B command)\r
; A = 2 Temporary (G command)\r
\r
bp_enter:\r
- ld b,a ;0810 47 G\r
- call skipbl ;0811 cd bf 02 . . .\r
- ret z ;0814 c8 .\r
- cp 'R' ;0815 fe 52 . R\r
- jr nz,l081ch ;0817 20 03 .\r
- inc de ;0819 13 .\r
- set 4,b ;081a cb e0 . .\r
-l081ch:\r
- push bc ;081c c5 .\r
- call expr ;081d cd be 03 . . .\r
- jp c,ERROR ;0820 da 07 01 . . .\r
- pop bc ;0823 c1 .\r
- bit 0,b ;0824 cb 40 . @\r
- push bc ;0826 c5 .\r
- push de ;0827 d5 .\r
- push hl ;0828 e5 .\r
- call nz,bp_clr ;0829 c4 93 07 . . .\r
- pop hl ;082c e1 .\r
- call bp_get_freeslot ;082d cd 54 08 . T .\r
- pop de ;0830 d1 .\r
- ld (ix+002h),l ;0831 dd 75 02 . u .\r
- ld (ix+003h),h ;0834 dd 74 03 . t .\r
- call bp_get_count ;0837 cd 6c 08 . l .\r
- ld (ix+004h),l ;083a dd 75 04 . u .\r
- ld (ix+005h),h ;083d dd 74 05 . t .\r
- call bp_get_condition ;0840 cd 7d 08 . } .\r
- ld (ix+006h),l ;0843 dd 75 06 . u .\r
- ld (ix+007h),h ;0846 dd 74 07 . t .\r
- call next_arg ;0849 cd ca 02 . . .\r
- pop af ;084c f1 .\r
- ld (ix+000h),a ;084d dd 77 00 . w .\r
- and 00fh ;0850 e6 0f . .\r
- jr bp_enter ;0852 18 bc . .\r
+ ld b,a\r
+ call skipbl\r
+ ret z\r
+\r
+ push bc\r
+ call expr\r
+ jr c,error12\r
+ pop bc\r
+ bit 0,b\r
+ push bc\r
+ push de\r
+ push hl\r
+ call nz,bp_clr\r
+ pop hl\r
+ call bp_get_freeslot\r
+ pop de\r
+ ld (ix+002h),l\r
+ ld (ix+003h),h\r
+ call next_arg\r
+ pop af\r
+ ld (ix+000h),a\r
+ and 00fh\r
+ jr bp_enter\r
\r
bp_get_freeslot:\r
- ld b,BP_CNT ;0854 06 0c . .\r
- ld ix,bp_tab ;0856 dd 21 b8 0a . ! . .\r
-l085ah:\r
- ld a,(ix+000h) ;085a dd 7e 00 . ~ .\r
- and 00fh ;085d e6 0f . .\r
- ret z ;085f c8 .\r
- push bc ;0860 c5 .\r
- ld bc,BP_SIZE ;0861 01 08 00 . . .\r
- add ix,bc ;0864 dd 09 . .\r
- pop bc ;0866 c1 .\r
- djnz l085ah ;0867 10 f1 . .\r
- jp ERROR ;0869 c3 07 01 . . .\r
-\r
-bp_get_count:\r
- call skipbl ;086c cd bf 02 . . .\r
- ld hl,1 ;086f 21 01 00 ! . .\r
- cp ':' ;0872 fe 3a . :\r
- ret nz ;0874 c0 .\r
- inc de ;0875 13 .\r
- call expr ;0876 cd be 03 . . .\r
- jp c,ERROR ;0879 da 07 01 . . .\r
- ret ;087c c9 .\r
-\r
-bp_get_condition:\r
- call skipbl ;087d cd bf 02 . . .\r
- cp 'I' ;0880 fe 49 . I\r
- ld hl,0 ;0882 21 00 00 ! . .\r
- ret nz ;0885 c0 .\r
- inc de ;0886 13 .\r
- call skipbl ;0887 cd bf 02 . . .\r
- push de ;088a d5 .\r
- call expr ;088b cd be 03 . . .\r
- jp c,ERROR ;088e da 07 01 . . .\r
- ex de,hl ;0891 eb .\r
- pop de ;0892 d1 .\r
- push de ;0893 d5 .\r
- sbc hl,de ;0894 ed 52 . R\r
- ld b,h ;0896 44 D\r
- ld c,l ;0897 4d M\r
- ld hl,(expr_p1) ;0898 2a 18 0b * . .\r
- push hl ;089b e5 .\r
- add hl,bc ;089c 09 .\r
- ld de,expr_bufe ;089d 11 9c 0b . . .\r
- call cp_hl_de ;08a0 cd ee 02 . . .\r
- jp nc,ERROR ;08a3 d2 07 01 . . .\r
- pop hl ;08a6 e1 .\r
- ld (expr_p2),hl ;08a7 22 1a 0b " . .\r
- pop de ;08aa d1 .\r
- ex de,hl ;08ab eb .\r
- ldir ;08ac ed b0 . .\r
- xor a ;08ae af .\r
- ld (de),a ;08af 12 .\r
- inc de ;08b0 13 .\r
- ex de,hl ;08b1 eb .\r
- ld (expr_p1),hl ;08b2 22 18 0b " . .\r
- ld hl,(expr_p2) ;08b5 2a 1a 0b * . .\r
- ret ;08b8 c9 .\r
+ call bpl_init\r
+\r
+ ld a,(ix+000h)\r
+ and 00fh\r
+ ret z\r
+\r
+ call bpl_next\r
+error12\r
+ jp ERROR\r
+\r
+\r
+;-------------------------------------------------------------------------------\r
+; Breakpoint handling routine.\r
\r
bpddtz:\r
- ld (reg.l),hl ;08b9 22 5a 00 " Z .\r
- pop hl ;08bc e1 .\r
- dec hl ;08bd 2b +\r
- ld (REG.PC),hl ;08be 22 60 00 " ` .\r
- ld (reg_sp),sp ;08c1 ed 73 5c 00 . s \ .\r
- ld sp,reg.l ;08c5 31 5a 00 1 Z .\r
- push de ;08c8 d5 .\r
- push bc ;08c9 c5 .\r
- push af ;08ca f5 .\r
- push ix ;08cb dd e5 . .\r
- push iy ;08cd fd e5 . .\r
- ld a,i ;08cf ed 57 . W\r
- call sub_0004h ;08d1 cd 04 00 . . .\r
- ld h,a ;08d4 67 g\r
- ld l,000h ;08d5 2e 00 . .\r
- push hl ;08d7 e5 .\r
- ld a,0f3h ;08d8 3e f3 > .\r
- jp po,l08dfh ;08da e2 df 08 . . .\r
- ld a,0fbh ;08dd 3e fb > .\r
+ ld (reg.l),hl\r
+ pop hl\r
+ dec hl\r
+ ld (reg.pc),hl\r
+ ld (reg_sp),sp\r
+ ld sp,reg.l\r
+ push de\r
+ push bc\r
+ push af\r
+ push ix\r
+ push iy\r
+ ld a,i\r
+ call di_or_ei\r
+ ld h,a\r
+ ld l,000h\r
+ push hl\r
+ ld a,0f3h ; EI\r
+ jp po,l08dfh\r
+ ld a,0fbh ; DI\r
l08dfh:\r
- ld (reg.iff),a ;08df 32 5e 00 2 ^ .\r
- ex af,af' ;08e2 08 .\r
- push af ;08e3 f5 .\r
- exx ;08e4 d9 .\r
- push bc ;08e5 c5 .\r
- push de ;08e6 d5 .\r
- push hl ;08e7 e5 .\r
- call sub_097ah ;08e8 cd 7a 09 . z .\r
- ld a,(b_21e2_start) ;08eb 3a e2 21 : . !\r
- dec a ;08ee 3d =\r
- jr z,l090bh ;08ef 28 1a ( .\r
- call inchar ;08f1 cd 73 02 . s .\r
- jr c,l0902h ;08f4 38 0c 8 .\r
- call sub_0913h ;08f6 cd 13 09 . . .\r
- and a ;08f9 a7 .\r
- jp z,user_go ;08fa ca 25 0a . % .\r
- and 083h ;08fd e6 83 . .\r
- jp z,l2151h ;08ff ca 51 21 . Q !\r
-l0902h:\r
- call bp_clr_temporary ;0902 cd 54 07 . T .\r
- call p_cpustat ;0905 cd 30 06 . 0 .\r
- jp mainloop ;0908 c3 bd 00 . . .\r
+ ld (reg.iff),a\r
+ ex af,af'\r
+ push af\r
+ exx\r
+ push bc\r
+ push de\r
+ push hl\r
+ call bp_restore_mem\r
+ ld a,(b_21e2_start)\r
+ dec a\r
+ jr z,l090bh\r
+ call inchar ;Keyboard hit?\r
+ jr c,do_break ;yes\r
+ call sub_0913h\r
+ and a\r
+ jp z,user_go\r
+ and 083h\r
+ jp z,l2151h\r
+do_break:\r
+ call bp_clr_temporary\r
+ call p_cpustat\r
+ jp mainloop\r
\r
l090bh:\r
- ld (b_21e2_start),a ;090b 32 e2 21 2 . !\r
- ld c,007h ;090e 0e 07 . .\r
- jp l0a41h ;0910 c3 41 0a . A .\r
+ ld (b_21e2_start),a\r
+ ld c,007h\r
+ jp l0a41h\r
\r
sub_0913h:\r
- ld a,080h ;0913 3e 80 > .\r
- ex af,af' ;0915 08 .\r
- sub a ;0916 97 .\r
- ld (l0941h),a ;0917 32 41 09 2 A .\r
- ld b,BP_CNT ;091a 06 0c . .\r
- ld ix,bp_tab ;091c dd 21 b8 0a . ! . .\r
-l0920h:\r
- ld a,(ix+000h) ;0920 dd 7e 00 . ~ .\r
- and 007h ;0923 e6 07 . .\r
- jr z,l0938h ;0925 28 11 ( .\r
- ld e,(ix+002h) ;0927 dd 5e 02 . ^ .\r
- ld d,(ix+003h) ;092a dd 56 03 . V .\r
- ld hl,(REG.PC) ;092d 2a 60 00 * ` .\r
- call cp_hl_de ;0930 cd ee 02 . . .\r
- push bc ;0933 c5 .\r
- call z,sub_0942h ;0934 cc 42 09 . B .\r
- pop bc ;0937 c1 .\r
+ ld a,080h\r
+ ex af,af'\r
+ sub a\r
+ ld (bp_p_cpu_flag),a\r
+ call bpl_init\r
+\r
+ ld a,(ix+000h)\r
+ and 007h\r
+ jr z,l0938h\r
+ ld e,(ix+002h)\r
+ ld d,(ix+003h)\r
+ ld hl,(reg.pc)\r
+ call cp_hl_de\r
+ jr nz,l0938h\r
+ ex af,af'\r
+ res 7,a\r
+ or (ix+000h)\r
+ ex af,af'\r
l0938h:\r
- ld de,BP_SIZE ;0938 11 08 00 . . .\r
- add ix,de ;093b dd 19 . .\r
- djnz l0920h ;093d 10 e1 . .\r
- ex af,af' ;093f 08 .\r
- ret ;0940 c9 .\r
-\r
-sub_0942h:\r
- ex af,af' ;0942 08 .\r
- res 7,a ;0943 cb bf . .\r
- ex af,af' ;0945 08 .\r
- ld e,(ix+006h) ;0946 dd 5e 06 . ^ .\r
- ld d,(ix+007h) ;0949 dd 56 07 . V .\r
- ld a,d ;094c 7a z\r
- or e ;094d b3 .\r
- ld hl,0ffffh ;094e 21 ff ff ! . .\r
- call nz,expr ;0951 c4 be 03 . . .\r
- ld a,h ;0954 7c |\r
- or l ;0955 b5 .\r
- jr z,l0969h ;0956 28 11 ( .\r
- ld e,(ix+004h) ;0958 dd 5e 04 . ^ .\r
- ld d,(ix+005h) ;095b dd 56 05 . V .\r
- dec de ;095e 1b .\r
- ld a,d ;095f 7a z\r
- or e ;0960 b3 .\r
- jr z,l0974h ;0961 28 11 ( .\r
- ld (ix+004h),e ;0963 dd 73 04 . s .\r
- ld (ix+005h),d ;0966 dd 72 05 . r .\r
-l0969h:\r
- bit 4,(ix+000h) ;0969 dd cb 00 66 . . . f\r
- ret z ;096d c8 .\r
- ld a,001h ;096e 3e 01 > .\r
- ld (l0941h),a ;0970 32 41 09 2 A .\r
- ret ;0973 c9 .\r
-l0974h:\r
- ex af,af' ;0974 08 .\r
- or (ix+000h) ;0975 dd b6 00 . . .\r
- ex af,af' ;0978 08 .\r
- ret ;0979 c9 .\r
-\r
-sub_097ah:\r
- ld b,BP_CNT ;097a 06 0c . .\r
- ld ix,bp_tab ;097c dd 21 b8 0a . ! . .\r
-l0980h:\r
- bit 5,(ix+000h) ;0980 dd cb 00 6e . . . n\r
- res 5,(ix+000h) ;0984 dd cb 00 ae . . . .\r
- jr z,l099ah ;0988 28 10 ( .\r
- ld l,(ix+002h) ;098a dd 6e 02 . n .\r
- ld h,(ix+003h) ;098d dd 66 03 . f .\r
- ld a,(l0003h) ;0990 3a 03 00 : . .\r
- cp (hl) ;0993 be .\r
- jr nz,l099ah ;0994 20 04 .\r
- ld a,(ix+001h) ;0996 dd 7e 01 . ~ .\r
- ld (hl),a ;0999 77 w\r
+ call bpl_next\r
+ ex af,af'\r
+ ret\r
+\r
+bp_restore_mem:\r
+ call bpl_init\r
+\r
+ bit 5,(ix+000h)\r
+ res 5,(ix+000h)\r
+ jr z,l099ah\r
+ ld l,(ix+002h)\r
+ ld h,(ix+003h)\r
+ ld a,(l0003h)\r
+ cp (hl)\r
+ jr nz,l099ah\r
+ ld a,(ix+001h)\r
+ ld (hl),a\r
l099ah:\r
- res 3,(ix+000h) ;099a dd cb 00 9e . . . .\r
- ld de,BP_SIZE ;099e 11 08 00 . . .\r
- add ix,de ;09a1 dd 19 . .\r
- djnz l0980h ;09a3 10 db . .\r
- ret ;09a5 c9 .\r
-\r
-sub_09a6h:\r
- ld b,BP_CNT ;09a6 06 0c . .\r
- ld ix,bp_tab ;09a8 dd 21 b8 0a . ! . .\r
-l09ach:\r
- ld a,(ix+000h) ;09ac dd 7e 00 . ~ .\r
- and 003h ;09af e6 03 . .\r
- jr z,l09c0h ;09b1 28 0d ( .\r
- ld e,(ix+002h) ;09b3 dd 5e 02 . ^ .\r
- ld d,(ix+003h) ;09b6 dd 56 03 . V .\r
- ld hl,(REG.PC) ;09b9 2a 60 00 * ` .\r
- call cp_hl_de ;09bc cd ee 02 . . .\r
- ret z ;09bf c8 .\r
-l09c0h:\r
- ld de,BP_SIZE ;09c0 11 08 00 . . .\r
- add ix,de ;09c3 dd 19 . .\r
- djnz l09ach ;09c5 10 e5 . .\r
- sub a ;09c7 97 .\r
- inc a ;09c8 3c <\r
- ret ;09c9 c9 .\r
-\r
-sub_09cah:\r
- call bp_get_freeslot ;09ca cd 54 08 . T .\r
- ld (ix+004h),001h ;09cd dd 36 04 01 . 6 . .\r
- ld (ix+005h),000h ;09d1 dd 36 05 00 . 6 . .\r
- ld (ix+002h),l ;09d5 dd 75 02 . u .\r
- ld (ix+003h),h ;09d8 dd 74 03 . t .\r
- ld (ix+006h),000h ;09db dd 36 06 00 . 6 . .\r
- ld (ix+007h),000h ;09df dd 36 07 00 . 6 . .\r
- ld a,(b_21e2_start) ;09e3 3a e2 21 : . !\r
- and a ;09e6 a7 .\r
- ld a,008h ;09e7 3e 08 > .\r
- jr nz,l09edh ;09e9 20 02 .\r
- ld a,004h ;09eb 3e 04 > .\r
-l09edh:\r
- ld (ix+000h),a ;09ed dd 77 00 . w .\r
- ret ;09f0 c9 .\r
-\r
-sub_09f1h:\r
- ld b,BP_CNT ;09f1 06 0c . .\r
- ld ix,bp_tab ;09f3 dd 21 b8 0a . ! . .\r
-l09f7h:\r
- ld a,(ix+000h) ;09f7 dd 7e 00 . ~ .\r
- and c ;09fa a1 .\r
- jr z,l0a1dh ;09fb 28 20 (\r
- set 5,(ix+000h) ;09fd dd cb 00 ee . . . .\r
- ld l,(ix+002h) ;0a01 dd 6e 02 . n .\r
- ld h,(ix+003h) ;0a04 dd 66 03 . f .\r
- ld a,(hl) ;0a07 7e ~\r
- ld (ix+001h),a ;0a08 dd 77 01 . w .\r
- ld a,(l0003h) ;0a0b 3a 03 00 : . .\r
- ld (hl),a ;0a0e 77 w\r
- and 038h ;0a0f e6 38 . 8\r
- ld h,000h ;0a11 26 00 & .\r
- ld l,a ;0a13 6f o\r
- ld (hl),0c3h ;0a14 36 c3 6 .\r
- inc hl ;0a16 23 #\r
- ld de,bpddtz ;0a17 11 b9 08 . . .\r
- ld (hl),e ;0a1a 73 s\r
- inc hl ;0a1b 23 #\r
- ld (hl),d ;0a1c 72 r\r
+ res 3,(ix+000h)\r
+\r
+ call bpl_next\r
+ ret\r
+\r
+bp_tst_@pc:\r
+ call bpl_init\r
+\r
+ ld a,(ix+000h)\r
+ and 003h\r
+ jr z,bp_tst_e\r
+ ld e,(ix+002h)\r
+ ld d,(ix+003h)\r
+ ld hl,(reg.pc)\r
+ call cp_hl_de\r
+ ret z\r
+bp_tst_e:\r
+ call bpl_next\r
+ sub a\r
+ inc a\r
+ ret\r
+\r
+bp_trace_enter:\r
+ call bp_get_freeslot\r
+ ld (ix+002h),l\r
+ ld (ix+003h),h\r
+ ld a,(b_21e2_start)\r
+ and a\r
+ ld a,008h\r
+ jr nz,bp_t_e\r
+ rra\r
+bp_t_e:\r
+ ld (ix+000h),a\r
+ ret\r
+\r
+bp_set_to_mem:\r
+ call bpl_init\r
+\r
+ ld a,(ix+000h)\r
+ and c\r
+ jr z,l0a1dh\r
+ set 5,(ix+000h)\r
+ ld l,(ix+002h)\r
+ ld h,(ix+003h)\r
+ ld a,(hl)\r
+ ld (ix+001h),a\r
+ ld a,(l0003h)\r
+ ld (hl),a\r
+ and 038h\r
+ ld h,000h\r
+ ld l,a\r
+ ld (hl),0c3h\r
+ inc hl\r
+ ld de,bpddtz\r
+ ld (hl),e\r
+ inc hl\r
+ ld (hl),d\r
l0a1dh:\r
- ld de,BP_SIZE ;0a1d 11 08 00 . . .\r
- add ix,de ;0a20 dd 19 . .\r
- djnz l09f7h ;0a22 10 d3 . .\r
- ret ;0a24 c9 .\r
+\r
+ call bpl_next\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
user_go:\r
- sub a ;0a25 97 .\r
- ld (b_21e2_start),a ;0a26 32 e2 21 2 . !\r
- ld a,(l0941h) ;0a29 3a 41 09 : A .\r
- and a ;0a2c a7 .\r
- call nz,p_cpustat ;0a2d c4 30 06 . 0 .\r
- call sub_09a6h ;0a30 cd a6 09 . . .\r
- ld c,007h ;0a33 0e 07 . .\r
- jr nz,l0a41h ;0a35 20 0a .\r
- ld a,001h ;0a37 3e 01 > .\r
- ld (b_21e2_start),a ;0a39 32 e2 21 2 . !\r
- call sub_1ffeh ;0a3c cd fe 1f . . .\r
- ld c,008h ;0a3f 0e 08 . .\r
+ sub a\r
+ ld (b_21e2_start),a\r
+ ld a,(bp_p_cpu_flag)\r
+ and a\r
+ call nz,p_cpustat\r
+ call bp_tst_@pc\r
+ ld c,007h\r
+ jr nz,l0a41h\r
+ ld a,001h\r
+ ld (b_21e2_start),a\r
+ call tc_set_bp\r
+ ld c,008h\r
l0a41h:\r
- call sub_09f1h ;0a41 cd f1 09 . . .\r
- ld sp,reg.l2 ;0a44 31 46 00 1 F .\r
- pop hl ;0a47 e1 .\r
- pop de ;0a48 d1 .\r
- pop bc ;0a49 c1 .\r
- pop af ;0a4a f1 .\r
- exx ;0a4b d9 .\r
- ex af,af' ;0a4c 08 .\r
- pop af ;0a4d f1 .\r
- ld i,a ;0a4e ed 47 . G\r
- pop iy ;0a50 fd e1 . .\r
- pop ix ;0a52 dd e1 . .\r
- pop af ;0a54 f1 .\r
- pop bc ;0a55 c1 .\r
- pop de ;0a56 d1 .\r
- pop hl ;0a57 e1 .\r
- ld sp,(reg_sp) ;0a58 ed 7b 5c 00 . { \ .\r
- jp reg.iff ;0a5c c3 5e 00 . ^ .\r
-\r
-bp_clr_condition:\r
- ld a,(ix+000h) ;0a5f dd 7e 00 . ~ .\r
- and 003h ;0a62 e6 03 . .\r
- ret nz ;0a64 c0 .\r
- ld e,(ix+006h) ;0a65 dd 5e 06 . ^ .\r
- ld d,(ix+007h) ;0a68 dd 56 07 . V .\r
- ld a,d ;0a6b 7a z\r
- or e ;0a6c b3 .\r
- ret z ;0a6d c8 .\r
- push bc ;0a6e c5 .\r
- ld h,d ;0a6f 62 b\r
- ld l,e ;0a70 6b k\r
- sub a ;0a71 97 .\r
- ld (ix+006h),a ;0a72 dd 77 06 . w .\r
- ld (ix+007h),a ;0a75 dd 77 07 . w .\r
- ld bc,0ffffh ;0a78 01 ff ff . . .\r
- cpir ;0a7b ed b1 . .\r
-l0a7dh:\r
- push de ;0a7d d5 .\r
- ld de,(expr_p1) ;0a7e ed 5b 18 0b . [ . .\r
- call cp_hl_de ;0a82 cd ee 02 . . .\r
- pop de ;0a85 d1 .\r
- jr nc,l0a93h ;0a86 30 0b 0 .\r
- call sub_0a99h ;0a88 cd 99 0a . . .\r
-l0a8bh:\r
- ld a,(hl) ;0a8b 7e ~\r
- ldi ;0a8c ed a0 . .\r
- and a ;0a8e a7 .\r
- jr nz,l0a8bh ;0a8f 20 fa .\r
- jr l0a7dh ;0a91 18 ea . .\r
-l0a93h:\r
- ld (expr_p1),de ;0a93 ed 53 18 0b . S . .\r
- pop bc ;0a97 c1 .\r
- ret ;0a98 c9 .\r
-\r
-sub_0a99h:\r
- ld iy,bp_tab ;0a99 fd 21 b8 0a . ! . .\r
- push de ;0a9d d5 .\r
-l0a9eh:\r
- ld e,(iy+006h) ;0a9e fd 5e 06 . ^ .\r
- ld d,(iy+007h) ;0aa1 fd 56 07 . V .\r
- call cp_hl_de ;0aa4 cd ee 02 . . .\r
- jr z,l0ab0h ;0aa7 28 07 ( .\r
- ld de,BP_SIZE ;0aa9 11 08 00 . . .\r
- add iy,de ;0aac fd 19 . .\r
- jr l0a9eh ;0aae 18 ee . .\r
-l0ab0h:\r
- pop de ;0ab0 d1 .\r
- ld (iy+006h),e ;0ab1 fd 73 06 . s .\r
- ld (iy+007h),d ;0ab4 fd 72 07 . r .\r
- ret ;0ab7 c9 .\r
-\r
-cmd_Y:\r
- call get.decdigit ;0bb2 cd 1d 06 . . .\r
- jr c,l0bc3h ;0bb5 38 0c 8 .\r
- inc de ;0bb7 13 .\r
- push af ;0bb8 f5 .\r
- call assert_eol ;0bb9 cd d6 02 . . .\r
- pop af ;0bbc f1 .\r
- call sub_0bdch ;0bbd cd dc 0b . . .\r
- jp l0c15h ;0bc0 c3 15 0c . . .\r
-l0bc3h:\r
- call assert_eol ;0bc3 cd d6 02 . . .\r
- xor a ;0bc6 af .\r
-l0bc7h:\r
- push af ;0bc7 f5 .\r
- call sub_0bdch ;0bc8 cd dc 0b . . .\r
- call outbl4 ;0bcb cd 99 02 . . .\r
- pop af ;0bce f1 .\r
- inc a ;0bcf 3c <\r
- bit 0,a ;0bd0 cb 47 . G\r
- push af ;0bd2 f5 .\r
- call z,crlf ;0bd3 cc a3 02 . . .\r
- pop af ;0bd6 f1 .\r
- cp YREG_CNT ;0bd7 fe 0a . .\r
- jr c,l0bc7h ;0bd9 38 ec 8 .\r
- ret ;0bdb c9 .\r
-\r
-sub_0bdch:\r
- ld c,a ;0bdc 4f O\r
- ld b,0 ;0bdd 06 00 . .\r
- add a,'0'+080h ;0bdf c6 b0 . .\r
- ld de,msg_Y+1 ;0be1 11 9d 0b . . .\r
- ld (de),a ;0be4 12 .\r
- dec de ;0be5 1b .\r
- ld hl,reg_Y ;0be6 21 9e 0b ! . .\r
- add hl,bc ;0be9 09 .\r
- add hl,bc ;0bea 09 .\r
- ex de,hl ;0beb eb .\r
- ld c,003h ;0bec 0e 03 . .\r
- jp l0c33h ;0bee c3 33 0c . 3 .\r
+ call bp_set_to_mem\r
+ ld sp,reg.l2\r
+ pop hl\r
+ pop de\r
+ pop bc\r
+ pop af\r
+ exx\r
+ ex af,af'\r
+ pop af\r
+ ld i,a\r
+ pop iy\r
+ pop ix\r
+ pop af\r
+ pop bc\r
+ pop de\r
+ pop hl\r
+ ld sp,(reg_sp)\r
+ jp reg.iff\r
+\r
+;-------------------------------------------------------------------------------\r
+; > Y\r
+; examine all Y variables\r
+; > Y[0..9]\r
+; examine (and substitute) an Y variable\r
+\r
+\r
+;-------------------------------------------------------------------------------\r
+; > X\r
+; eXamine (display) all cpu registers and\r
+; the instruction at the current program counter\r
+; > X register\r
+; eXamine (and substitute) a register\r
+\r
\r
cmd_X:\r
- call skipbl ;0bf1 cd bf 02 . . .\r
- call sub_0caeh ;0bf4 cd ae 0c . . .\r
- jp nc,p_cpustat0 ;0bf7 d2 2d 06 . - .\r
- call assert_eol ;0bfa cd d6 02 . . .\r
- ld a,b ;0bfd 78 x\r
- cp 01eh ;0bfe fe 1e . .\r
- jr z,l0c5fh ;0c00 28 5d ( ]\r
- cp 01fh ;0c02 fe 1f . .\r
- jr z,l0c4fh ;0c04 28 49 ( I\r
- cp 01dh ;0c06 fe 1d . .\r
- jp z,ERROR ;0c08 ca 07 01 . . .\r
- ex de,hl ;0c0b eb .\r
- ld hl,b_0cc3_start ;0c0c 21 c3 0c ! . .\r
- call sel_dc_string ;0c0f cd 3d 03 . = .\r
-l0c12h:\r
- call l0c33h ;0c12 cd 33 0c . 3 .\r
-l0c15h:\r
- call outbl ;0c15 cd 9f 02 . . .\r
- push de ;0c18 d5 .\r
- push bc ;0c19 c5 .\r
- call get_line ;0c1a cd 4e 01 . N .\r
- call skipbl ;0c1d cd bf 02 . . .\r
- jr z,l0c30h ;0c20 28 0e ( .\r
- call sub_0363h ;0c22 cd 63 03 . c .\r
- ld b,h ;0c25 44 D\r
- ld c,l ;0c26 4d M\r
- pop af ;0c27 f1 .\r
- pop hl ;0c28 e1 .\r
- ld (hl),c ;0c29 71 q\r
- bit 0,a ;0c2a cb 47 . G\r
- ret z ;0c2c c8 .\r
- inc hl ;0c2d 23 #\r
- ld (hl),b ;0c2e 70 p\r
- ret ;0c2f c9 .\r
+ call skipbl\r
+ call sub_0caeh\r
+ jp nc,p_cpustat0\r
+ call assert_eol\r
+ ld a,b\r
+ cp 25\r
+ jr z,l0c5fh\r
+ cp 26\r
+ jr z,l0c4fh\r
+ ex de,hl\r
+ ld hl,t_reg_names\r
+ call pstr_sel\r
+ call l0c33h\r
+\r
+ call outbl\r
+ push de\r
+ push bc\r
+ call get_line\r
+ call skipbl\r
+ jr z,l0c30h\r
+ call get_arg_final\r
+ ex de,hl\r
+ pop bc\r
+ pop hl\r
+ ld (hl),e\r
+ bit 0,c\r
+ ret z\r
+ inc hl\r
+ ld (hl),d\r
+ ret\r
l0c30h:\r
- pop af ;0c30 f1 .\r
- pop hl ;0c31 e1 .\r
- ret ;0c32 c9 .\r
+ pop af\r
+ pop hl\r
+ ret\r
\r
l0c33h:\r
- ld b,c ;0c33 41 A\r
- call pstr ;0c34 cd 88 02 . . .\r
- ld a,'=' ;0c37 3e 3d > =\r
- call outchar ;0c39 cd 5d 02 . ] .\r
- ld a,(de) ;0c3c 1a .\r
- bit 0,b ;0c3d cb 40 . @\r
- jp z,out_hex ;0c3f ca 18 02 . . .\r
- ld l,a ;0c42 6f o\r
- inc de ;0c43 13 .\r
- ld a,(de) ;0c44 1a .\r
- dec de ;0c45 1b .\r
- ld h,a ;0c46 67 g\r
- bit 1,b ;0c47 cb 48 . H\r
- jp z,out_hl ;0c49 ca 13 02 . . .\r
- jp out.hl.@ ;0c4c c3 a4 01 . . .\r
+ call pstr_inl\r
+ dc '='\r
+ ld a,(de)\r
+ bit 0,c\r
+ jp z,out_hex\r
+ ld l,a\r
+ inc de\r
+ ld a,(de)\r
+ dec de\r
+ ld h,a\r
+ jp out_hl\r
\r
l0c4fh:\r
- call p_f ;0c4f cd 6e 06 . n .\r
- ld a,0f3h ;0c52 3e f3 > .\r
- ld (reg.iff),a ;0c54 32 5e 00 2 ^ .\r
- scf ;0c57 37 7\r
- call sub_0c6ah ;0c58 cd 6a 0c . j .\r
- ld (reg.f),a ;0c5b 32 54 00 2 T .\r
- ret ;0c5e c9 .\r
+ call p_f\r
+ ld a,0f3h\r
+ ld (reg.iff),a\r
+ scf\r
+ call sub_0c6ah\r
+ ld (reg.f),a\r
+ ret\r
l0c5fh:\r
- call p_f2 ;0c5f cd 81 06 . . .\r
- and a ;0c62 a7 .\r
- call sub_0c6ah ;0c63 cd 6a 0c . j .\r
- ld (reg.f2),a ;0c66 32 4c 00 2 L .\r
- ret ;0c69 c9 .\r
+ call p_f2\r
+ and a\r
+ call sub_0c6ah\r
+ ld (reg.f2),a\r
+ ret\r
+\r
sub_0c6ah:\r
- ex af,af' ;0c6a 08 .\r
- ld b,000h ;0c6b 06 00 . .\r
- call outbl ;0c6d cd 9f 02 . . .\r
- call assert_eol ;0c70 cd d6 02 . . .\r
- call get_line ;0c73 cd 4e 01 . N .\r
+ push af\r
+ call outbl\r
+ call assert_eol\r
+ call get_line\r
+ pop af\r
+ ex af,af'\r
+ ld b,0\r
l0c76h:\r
- call skipbl ;0c76 cd bf 02 . . .\r
- ld a,b ;0c79 78 x\r
- ret z ;0c7a c8 .\r
- push bc ;0c7b c5 .\r
- ld hl,b_0ca4_start ;0c7c 21 a4 0c ! . .\r
- call lookupch ;0c7f cd f3 02 . . .\r
- jp nc,ERROR ;0c82 d2 07 01 . . .\r
- ld a,b ;0c85 78 x\r
- cp 008h ;0c86 fe 08 . .\r
- jr z,l0c97h ;0c88 28 0d ( .\r
- pop bc ;0c8a c1 .\r
- rlca ;0c8b 07 .\r
- rlca ;0c8c 07 .\r
- rlca ;0c8d 07 .\r
- add a,0c0h ;0c8e c6 c0 . .\r
- ld (l0c94h),a ;0c90 32 94 0c 2 . .\r
- defb 0cbh ;0c93 cb .\r
-l0c94h:\r
- defb 0c0h ;0c94 c0 .\r
- jr l0c76h ;0c95 18 df . .\r
+ call skipbl\r
+ ld a,b\r
+ ret z\r
+ push bc\r
+ ld hl,t_flag_names\r
+ call lookupch\r
+ jp nc,ERROR\r
+ inc b\r
+ xor a\r
+ scf\r
+nxt_f:\r
+ rla\r
+ djnz nxt_f\r
+ pop bc\r
+ jr c,l0c97h\r
+ or b\r
+ ld b,a\r
+ jr l0c76h\r
+\r
l0c97h:\r
- ex af,af' ;0c97 08 .\r
- jp nc,ERROR ;0c98 d2 07 01 . . .\r
- ex af,af' ;0c9b 08 .\r
- ld a,0fbh ;0c9c 3e fb > .\r
- ld (reg.iff),a ;0c9e 32 5e 00 2 ^ .\r
- pop bc ;0ca1 c1 .\r
- jr l0c76h ;0ca2 18 d2 . .\r
-\r
-b_0ca4_start:\r
+ ex af,af'\r
+ jp nc,ERROR\r
+ ex af,af'\r
+ ld a,0fbh\r
+ ld (reg.iff),a\r
+ jr l0c76h\r
+\r
+t_flag_names:\r
db 'CNV H ZSE',0\r
\r
sub_0caeh:\r
- call sub_0303h ;0cae cd 03 03 . . .\r
- ret nc ;0cb1 d0 .\r
- ld a,b ;0cb2 78 x\r
- add a,b ;0cb3 80 .\r
- add a,b ;0cb4 80 .\r
- ld hl,b_0cfa_start ;0cb5 21 fa 0c ! . .\r
- call add_hl_a ;0cb8 cd b9 02 . . .\r
- ld c,(hl) ;0cbb 4e N\r
- inc hl ;0cbc 23 #\r
- ld a,(hl) ;0cbd 7e ~\r
- inc hl ;0cbe 23 #\r
- ld h,(hl) ;0cbf 66 f\r
- ld l,a ;0cc0 6f o\r
- scf ;0cc1 37 7\r
- ret ;0cc2 c9 .\r
-\r
-b_0cc3_start:\r
- DC 'BC'''\r
- DC 'DE'''\r
- DC 'HL'''\r
- DC 'BC'\r
- DC 'DE'\r
- DC 'HL'\r
- DC 'A'''\r
- DC 'B'''\r
- DC 'C'''\r
- DC 'D'''\r
- DC 'E'''\r
- DC 'H'''\r
- DC 'L'''\r
- DC 'A'\r
- DC 'B'\r
- DC 'C'\r
- DC 'D'\r
- DC 'E'\r
- DC 'H'\r
- DC 'L'\r
- DC 'IX'\r
- DC 'IY'\r
- DC 'SP'\r
- DC 'PC'\r
- DC 'X'\r
- DC 'Y'\r
- DC 'S'\r
- DC 'P'\r
- DC 'I'\r
- DC 'IP'\r
- DC 'F'''\r
- DC 'F'\r
+ call sub_0303h\r
+ ret nc\r
+ ld a,b\r
+ add a,b\r
+ add a,b\r
+ ld hl,b_0cfa_start\r
+ call add_hl_a\r
+ ld c,(hl)\r
+ inc hl\r
+ ld a,(hl)\r
+ inc hl\r
+ ld h,(hl)\r
+ ld l,a\r
+ scf\r
+ ret\r
+\r
+t_reg_names:\r
+ DC 'BC''' ;0\r
+ DC 'DE''' ;1\r
+ DC 'HL''' ;2\r
+ DC 'BC' ;3\r
+ DC 'DE' ;4\r
+ DC 'HL' ;5\r
+ DC 'A''' ;6\r
+ DC 'B''' ;7\r
+ DC 'C''' ;8\r
+ DC 'D''' ;9\r
+ DC 'E''' ;10\r
+ DC 'H''' ;11\r
+ DC 'L''' ;12\r
+ DC 'A' ;13\r
+ DC 'B' ;14\r
+ DC 'C' ;15\r
+ DC 'D' ;16\r
+ DC 'E' ;17\r
+ DC 'H' ;18\r
+ DC 'L' ;19\r
+ DC 'IX' ;20\r
+ DC 'IY' ;21\r
+ DC 'SP' ;22\r
+ DC 'PC' ;23\r
+ DC 'I' ;24\r
+ DC 'F''' ;25\r
+ DC 'F' ;26\r
DB 0\r
\r
b_0cfa_start:\r
- db 003h ;0cfa 03 .\r
- dw reg.c2 ;0cfb 4a 00 J .\r
- db 003h ;0cfd 03 .\r
- dw reg.e2 ;0cfe 48 00 H .\r
- db 003h ;0d00 03 .\r
- dw reg.l2 ;0d01 46 00 F .\r
- db 003h ;0d03 03 .\r
- dw reg.c ;0d04 56 00 V .\r
- db 003h ;0d06 03 .\r
- dw reg.e ;0d07 58 00 X .\r
- db 003h ;0d09 03 .\r
- dw reg.l ;0d0a 5a 00 Z .\r
- db 000h ;0d0c 00 .\r
- dw reg.a2 ;0d0d 4d 00 M .\r
- db 000h ;0d0f 00 .\r
- dw reg.b2 ;0d10 4b 00 K .\r
- db 000h ;0d12 00 .\r
- dw reg.c2 ;0d13 4a 00 J .\r
- db 000h ;0d15 00 .\r
- dw reg.d2 ;0d16 49 00 I .\r
- db 000h ;0d18 00 .\r
- dw reg.e2 ;0d19 48 00 H .\r
- db 000h ;0d1b 00 .\r
- dw reg.h2 ;0d1c 47 00 G .\r
- db 000h ;0d1e 00 .\r
- dw reg.l2 ;0d1f 46 00 F .\r
- db 000h ;0d21 00 .\r
- dw reg.a ;0d22 55 00 U .\r
- db 000h ;0d24 00 .\r
- dw reg.b ;0d25 57 00 W .\r
- db 000h ;0d27 00 .\r
- dw reg.c ;0d28 56 00 V .\r
- db 000h ;0d2a 00 .\r
- dw reg.d ;0d2b 59 00 Y .\r
- db 000h ;0d2d 00 .\r
- dw reg.e ;0d2e 58 00 X .\r
- db 000h ;0d30 00 .\r
- dw reg.h ;0d31 5b 00 [ .\r
- db 000h ;0d33 00 .\r
- dw reg.l ;0d34 5a 00 Z .\r
- db 003h ;0d36 03 .\r
- dw reg.ix ;0d37 52 00 R .\r
- db 003h ;0d39 03 .\r
- dw reg.iy ;0d3a 50 00 P .\r
- db 003h ;0d3c 03 .\r
- dw reg_sp ;0d3d 5c 00 \ .\r
- db 003h ;0d3f 03 .\r
- dw REG.PC ;0d40 60 00 ` .\r
- db 003h ;0d42 03 .\r
- dw reg.ix ;0d43 52 00 R .\r
- db 003h ;0d45 03 .\r
- dw reg.iy ;0d46 50 00 P .\r
- db 003h ;0d48 03 .\r
- dw reg_sp ;0d49 5c 00 \ .\r
- db 003h ;0d4b 03 .\r
- dw REG.PC ;0d4c 60 00 ` .\r
- db 000h ;0d4e 00 .\r
- dw reg.i ;0d4f 4f 00 O .\r
- db 003h ;0d51 03 .\r
- dw l004eh ;0d52 4e 00 N .\r
- db 000h ;0d54 00 .\r
- dw reg.f2 ;0d55 4c 00 L .\r
- db 000h ;0d57 00 .\r
- dw reg.f ;0d58 54 00 T .\r
+ db 003h\r
+ dw reg.c2\r
+ db 003h\r
+ dw reg.e2\r
+ db 003h\r
+ dw reg.l2\r
+ db 003h\r
+ dw reg.c\r
+ db 003h\r
+ dw reg.e\r
+ db 003h\r
+ dw reg.l\r
+ db 000h\r
+ dw reg.a2\r
+ db 000h\r
+ dw reg.b2\r
+ db 000h\r
+ dw reg.c2\r
+ db 000h\r
+ dw reg.d2\r
+ db 000h\r
+ dw reg.e2\r
+ db 000h\r
+ dw reg.h2\r
+ db 000h\r
+ dw reg.l2\r
+ db 000h\r
+ dw reg.a\r
+ db 000h\r
+ dw reg.b\r
+ db 000h\r
+ dw reg.c\r
+ db 000h\r
+ dw reg.d\r
+ db 000h\r
+ dw reg.e\r
+ db 000h\r
+ dw reg.h\r
+ db 000h\r
+ dw reg.l\r
+ db 003h\r
+ dw reg.ix\r
+ db 003h\r
+ dw reg.iy\r
+ db 003h\r
+ dw reg_sp\r
+ db 003h\r
+ dw reg.pc\r
+ db 000h\r
+ dw reg.i\r
+ db 000h\r
+ dw reg.f2\r
+ db 000h\r
+ dw reg.f\r
+\r
+;-------------------------------------------------------------------------------\r
+; > S [startaddr]\r
+; Substitute memory\r
\r
cmd_S:\r
- ld hl,(last_S) ;0d5a 2a 90 0d * . .\r
- call get_lastarg_def ;0d5d cd 69 03 . i .\r
+ ld hl,(last_S)\r
+ call get_lastarg_def\r
l0d60h:\r
- ld (last_S),hl ;0d60 22 90 0d " . .\r
- call out.hl.@ ;0d63 cd a4 01 . . .\r
- call outbl ;0d66 cd 9f 02 . . .\r
- ld a,(hl) ;0d69 7e ~\r
- call out_hex ;0d6a cd 18 02 . . .\r
- call outbl2 ;0d6d cd 9c 02 . . .\r
- call get_line ;0d70 cd 4e 01 . N .\r
- call skipbl ;0d73 cd bf 02 . . .\r
- inc hl ;0d76 23 #\r
- jr z,l0d60h ;0d77 28 e7 ( .\r
- dec hl ;0d79 2b +\r
- inc de ;0d7a 13 .\r
- cp '.' ;0d7b fe 2e . .\r
- jp z,assert_eol ;0d7d ca d6 02 . . .\r
- cp '-' ;0d80 fe 2d . -\r
- jr nz,l0d8ah ;0d82 20 06 .\r
- ld a,(de) ;0d84 1a .\r
- or a ;0d85 b7 .\r
- dec hl ;0d86 2b +\r
- jr z,l0d60h ;0d87 28 d7 ( .\r
- inc hl ;0d89 23 #\r
+ ld (last_S),hl\r
+ call out_hl\r
+ call outbl\r
+ ld a,(hl)\r
+ call out_hex\r
+ call outbl2\r
+ call get_line\r
+ call skipbl\r
+ inc hl\r
+ jr z,l0d60h\r
+ dec hl\r
+ inc de\r
+ cp '.'\r
+ jr nz,cmds_dash\r
+ call get_char_upper\r
+ or a\r
+ jr nz,l0d8ah\r
+ ret\r
+cmds_dash:\r
+ jp z,assert_eol\r
+ cp '-'\r
+ jr nz,l0d8ah\r
+ call get_char_upper\r
+ or a\r
+ dec hl\r
+ jr z,l0d60h\r
+ inc hl\r
l0d8ah:\r
- dec de ;0d8a 1b .\r
- call sub_0ef8h ;0d8b cd f8 0e . . .\r
- jr l0d60h ;0d8e 18 d0 . .\r
+ dec de\r
+ call sub_0ef8h\r
+ jr l0d60h\r
+\r
+;-------------------------------------------------------------------------------\r
+; > @\r
+; examine (substitute) displacement register @\r
\r
-cmd_@:\r
- call assert_eol ;0d92 cd d6 02 . . .\r
- ld hl,msg_offset ;0d95 21 a0 0d ! . .\r
- ld de,offs.@ ;0d98 11 64 00 . d .\r
- ld c,001h ;0d9b 0e 01 . .\r
- jp l0c12h ;0d9d c3 12 0c . . .\r
+;cmd_@:\r
\r
-msg_offset:\r
- dc '@' ;0da0 c0 .\r
+;-------------------------------------------------------------------------------\r
+; >>I [port]\r
+; Input a byte from port\r
\r
cmd_I:\r
- ld hl,cmd_I ;0da3 21 a3 0d ! . .\r
- ld (cmd_rpt),hl ;0da6 22 68 00 " h .\r
- ld hl,(last_I) ;0da9 2a a1 0d * . .\r
- call get_lastarg_def ;0dac cd 69 03 . i .\r
- ld (last_I),hl ;0daf 22 a1 0d " . .\r
- ld b,h ;0db2 44 D\r
- ld c,l ;0db3 4d M\r
- in a,(c) ;0db4 ed 78 . x\r
- push af ;0db6 f5 .\r
- call out_hex ;0db7 cd 18 02 . . .\r
- call outbl4 ;0dba cd 99 02 . . .\r
- pop af ;0dbd f1 .\r
- call out.bin.b ;0dbe cd c7 01 . . .\r
- jp crlf ;0dc1 c3 a3 02 . . .\r
+ ld (cmd_rpt),hl\r
+ ld hl,(last_I)\r
+ call get_lastarg_def\r
+ ld (last_I),hl\r
+ ld b,h\r
+ ld c,l\r
+ in a,(c)\r
+ push af\r
+ call out_hex\r
+ call outbl4\r
+ pop af\r
+ call out.bin.b\r
+ jp crlf\r
+\r
+;-------------------------------------------------------------------------------\r
+; >>O [byte] [port]\r
+; Output a byte to a port\r
\r
cmd_O:\r
- ld hl,cmd_O ;0dc7 21 c7 0d ! . .\r
- ld (cmd_rpt),hl ;0dca 22 68 00 " h .\r
- ld hl,(last_O_val) ;0dcd 2a c6 0d * . .\r
- call get_arg_def ;0dd0 cd 6e 03 . n .\r
- ld a,l ;0dd3 7d }\r
- ld (last_O_val),a ;0dd4 32 c6 0d 2 . .\r
- push af ;0dd7 f5 .\r
- call next_arg ;0dd8 cd ca 02 . . .\r
- ld hl,(last_O_addr) ;0ddb 2a c4 0d * . .\r
- call get_lastarg_def ;0dde cd 69 03 . i .\r
- ld (last_O_addr),hl ;0de1 22 c4 0d " . .\r
- ld b,h ;0de4 44 D\r
- ld c,l ;0de5 4d M\r
- pop af ;0de6 f1 .\r
- out (c),a ;0de7 ed 79 . y\r
- ret ;0de9 c9 .\r
+ ld (cmd_rpt),hl\r
+ ld hl,(last_O_val)\r
+ call get_arg_def\r
+ ld a,l\r
+ ld (last_O_val),a\r
+ push af\r
+ call next_arg\r
+ ld hl,(last_O_addr)\r
+ call get_lastarg_def\r
+ ld (last_O_addr),hl\r
+ ld b,h\r
+ ld c,l\r
+ pop af\r
+ out (c),a\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+; > V startaddr endaddr targetaddr\r
+; Verify (compare) two memory areas\r
\r
cmd_V:\r
- call sub_034eh ;0dea cd 4e 03 . N .\r
+ call get_arg_range_target\r
l0dedh:\r
- push bc ;0ded c5 .\r
- ld a,(de) ;0dee 1a .\r
- ld b,(hl) ;0def 46 F\r
- cp b ;0df0 b8 .\r
- jr z,l0e10h ;0df1 28 1d ( .\r
- ld c,a ;0df3 4f O\r
- call out.hl.@ ;0df4 cd a4 01 . . .\r
- call outbl ;0df7 cd 9f 02 . . .\r
- ld a,b ;0dfa 78 x\r
- call out_hex ;0dfb cd 18 02 . . .\r
- call outbl2 ;0dfe cd 9c 02 . . .\r
- ld a,c ;0e01 79 y\r
- call out_hex ;0e02 cd 18 02 . . .\r
- call outbl ;0e05 cd 9f 02 . . .\r
- ex de,hl ;0e08 eb .\r
- call out.hl.@ ;0e09 cd a4 01 . . .\r
- ex de,hl ;0e0c eb .\r
- call crlf ;0e0d cd a3 02 . . .\r
+ push bc\r
+ ld a,(de)\r
+ ld b,(hl)\r
+ cp b\r
+ jr z,l0e10h\r
+ ld c,a\r
+ call out_hl\r
+ call outbl\r
+ ld a,b\r
+ call out_hex\r
+ call outbl2\r
+ ld a,c\r
+ call out_hex\r
+ call outbl\r
+ ex de,hl\r
+ call out_hl\r
+ ex de,hl\r
+ call crlf\r
l0e10h:\r
- pop bc ;0e10 c1 .\r
- inc hl ;0e11 23 #\r
- inc de ;0e12 13 .\r
- dec bc ;0e13 0b .\r
- ld a,b ;0e14 78 x\r
- or c ;0e15 b1 .\r
- jr nz,l0dedh ;0e16 20 d5 .\r
- ret ;0e18 c9 .\r
+ pop bc\r
+ inc de\r
+ cpi\r
+ jp pe,l0dedh\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+; > M startaddr endaddr destaddr\r
+; Move memory\r
\r
cmd_M:\r
- ld a,(de) ;0e19 1a .\r
- cp 'V' ;0e1a fe 56 . V\r
- jr nz,l0e1fh ;0e1c 20 01 .\r
- inc de ;0e1e 13 .\r
-l0e1fh:\r
- push af ;0e1f f5 .\r
- call sub_034eh ;0e20 cd 4e 03 . N .\r
- push hl ;0e23 e5 .\r
- push de ;0e24 d5 .\r
- push bc ;0e25 c5 .\r
- call cp_hl_de ;0e26 cd ee 02 . . .\r
- jr nc,$+11 ;0e29 30 09 0 .\r
- add hl,bc ;0e2b 09 .\r
- ex de,hl ;0e2c eb .\r
- add hl,bc ;0e2d 09 .\r
- ex de,hl ;0e2e eb .\r
- dec hl ;0e2f 2b +\r
- dec de ;0e30 1b .\r
- lddr ;0e31 ed b8 . .\r
- ld bc,0b0edh ;0e33 01 ed b0 . . .\r
- pop bc ;0e36 c1 .\r
- pop de ;0e37 d1 .\r
- pop hl ;0e38 e1 .\r
- pop af ;0e39 f1 .\r
- jr z,l0dedh ;0e3a 28 b1 ( .\r
- ret ;0e3c c9 .\r
+ call get_arg_range_target\r
+ call cp_hl_de\r
+ jr nc,cmdm_up\r
+ add hl,bc\r
+ ex de,hl\r
+ add hl,bc\r
+ ex de,hl\r
+ dec hl\r
+ dec de\r
+ lddr\r
+ ret\r
+cmdm_up:\r
+ ldir\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+; > H\r
+; display Highest load address of last filed loaded, Maximum "High"\r
+; off all loaded files, and Top address of available memory\r
+; > H expression\r
+; evaluate expression and display result in hex, decimal and other formats\r
\r
cmd_H:\r
- call expr ;0e3d cd be 03 . . .\r
- jp c,p_max_high0 ;0e40 da 6f 11 . o .\r
- call next_arg ;0e43 cd ca 02 . . .\r
- push hl ;0e46 e5 .\r
- call expr ;0e47 cd be 03 . . .\r
- push af ;0e4a f5 .\r
- call assert_eol ;0e4b cd d6 02 . . .\r
- pop af ;0e4e f1 .\r
- ex de,hl ;0e4f eb .\r
- pop hl ;0e50 e1 .\r
- jr c,l0e5eh ;0e51 38 0b 8 .\r
- push hl ;0e53 e5 .\r
- push de ;0e54 d5 .\r
- add hl,de ;0e55 19 .\r
- call l0e5eh ;0e56 cd 5e 0e . ^ .\r
- pop de ;0e59 d1 .\r
- pop hl ;0e5a e1 .\r
- and a ;0e5b a7 .\r
- sbc hl,de ;0e5c ed 52 . R\r
-l0e5eh:\r
- call out_hl ;0e5e cd 13 02 . . .\r
- call outbl2 ;0e61 cd 9c 02 . . .\r
- call out_hl_neg ;0e64 cd 0a 02 . . .\r
- call outbl4 ;0e67 cd 99 02 . . .\r
- call out.hl.dec ;0e6a cd e7 01 . . .\r
- call outbl2 ;0e6d cd 9c 02 . . .\r
- call out_hl_dec_neg ;0e70 cd e2 01 . . .\r
- call outbl4 ;0e73 cd 99 02 . . .\r
- call out.bin.w ;0e76 cd c2 01 . . .\r
- call outbl2 ;0e79 cd 9c 02 . . .\r
- ld a,l ;0e7c 7d }\r
- call out.ascii ;0e7d cd 34 02 . 4 .\r
- jp crlf ;0e80 c3 a3 02 . . .\r
+ call expr\r
+ jp c,p_max_high0\r
+ call assert_eol\r
+ call out_hl\r
+ call outbl2\r
+ call out_hl_neg\r
+ call outbl4\r
+ call out.hl.dec\r
+ call outbl2\r
+ call out_hl_dec_neg\r
+ call outbl4\r
+ call out.bin.w\r
+ call outbl2\r
+ ld a,l\r
+ call out.ascii\r
+ jp crlf\r
+\r
+;-------------------------------------------------------------------------------\r
+; > Q[J] startaddr endaddr bytes\r
+; Query memory for a byte string [Justified]\r
\r
cmd_Q:\r
- ld a,(de) ;0e84 1a .\r
- sub 'J' ;0e85 d6 4a . J\r
- ld (cmd_Q_jopt),a ;0e87 32 83 0e 2 . .\r
- jr nz,l0e8dh ;0e8a 20 01 .\r
- inc de ;0e8c 13 .\r
-l0e8dh:\r
- call get_arg_range ;0e8d cd 7d 03 . } .\r
- push bc ;0e90 c5 .\r
- push hl ;0e91 e5 .\r
- call sub_0ee6h ;0e92 cd e6 0e . . .\r
- pop hl ;0e95 e1 .\r
+ call get_arg_range\r
+ push bc\r
+ push hl\r
+ call sub_0ee6h\r
+ pop hl\r
l0e96h:\r
- call sub_0ed7h ;0e96 cd d7 0e . . .\r
- jr nz,l0eb0h ;0e99 20 15 .\r
- push bc ;0e9b c5 .\r
- push hl ;0e9c e5 .\r
- ld a,(cmd_Q_jopt) ;0e9d 3a 83 0e : . .\r
- or a ;0ea0 b7 .\r
- jr nz,l0ea7h ;0ea1 20 04 .\r
- ld bc,-8 ;0ea3 01 f8 ff . . .\r
- add hl,bc ;0ea6 09 .\r
-l0ea7h:\r
- ld bc,16 ;0ea7 01 10 00 . . .\r
- and a ;0eaa a7 .\r
- call sub_0f58h ;0eab cd 58 0f . X .\r
- pop hl ;0eae e1 .\r
- pop bc ;0eaf c1 .\r
+ push hl\r
+ push de\r
+ push bc\r
+l0edah:\r
+ ld a,(de)\r
+ cp (hl)\r
+ jr nz,l0ee2h\r
+ inc de\r
+ inc hl\r
+ djnz l0edah\r
+l0ee2h:\r
+ pop bc\r
+ pop de\r
+ pop hl\r
+ jr nz,l0eb0h\r
+ push bc\r
+ ld bc,16\r
+ and a ;clear carry\r
+ call sub_0f58h\r
+ pop bc\r
l0eb0h:\r
- inc hl ;0eb0 23 #\r
- ex (sp),hl ;0eb1 e3 .\r
- dec hl ;0eb2 2b +\r
- ld a,h ;0eb3 7c |\r
- or l ;0eb4 b5 .\r
- ex (sp),hl ;0eb5 e3 .\r
- jr nz,l0e96h ;0eb6 20 de .\r
- pop bc ;0eb8 c1 .\r
- ret ;0eb9 c9 .\r
+ inc hl\r
+ ex (sp),hl\r
+ dec hl\r
+ ld a,h\r
+ or l\r
+ ex (sp),hl\r
+ jr nz,l0e96h\r
+ pop bc\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+; > Z startaddr endaddr bytes\r
+; Zap (fill) memory with a byte string\r
\r
cmd_Z:\r
- call get_arg_range ;0eba cd 7d 03 . } .\r
- push bc ;0ebd c5 .\r
- push hl ;0ebe e5 .\r
- call sub_0ee6h ;0ebf cd e6 0e . . .\r
- ld a,b ;0ec2 78 x\r
- pop hl ;0ec3 e1 .\r
- pop bc ;0ec4 c1 .\r
- push hl ;0ec5 e5 .\r
- ex de,hl ;0ec6 eb .\r
+ call get_arg_range\r
+ push bc\r
+ push hl\r
+ call sub_0ee6h\r
+ ld a,b\r
+ pop hl\r
+ pop bc\r
+ push hl\r
+ ex de,hl\r
l0ec7h:\r
- ldi ;0ec7 ed a0 . .\r
- jp po,l0ed3h ;0ec9 e2 d3 0e . . .\r
- dec a ;0ecc 3d =\r
- jr nz,l0ec7h ;0ecd 20 f8 .\r
- pop hl ;0ecf e1 .\r
- ldir ;0ed0 ed b0 . .\r
- ret ;0ed2 c9 .\r
+ ldi\r
+ jp po,l0ed3h\r
+ dec a\r
+ jr nz,l0ec7h\r
+ pop hl\r
+ ldir\r
+ ret\r
l0ed3h:\r
- pop hl ;0ed3 e1 .\r
- ret ;0ed4 c9 .\r
-\r
-sub_0ed7h:\r
- push hl ;0ed7 e5 d5 . .\r
- push de\r
- push bc ;0ed9 c5 .\r
-l0edah:\r
- ld a,(de) ;0eda 1a .\r
- cp (hl) ;0edb be .\r
- jr nz,l0ee2h ;0edc 20 04 .\r
- inc de ;0ede 13 .\r
- inc hl ;0edf 23 #\r
- djnz l0edah ;0ee0 10 f8 . .\r
-l0ee2h:\r
- pop bc ;0ee2 c1 .\r
- pop de ;0ee3 d1 .\r
- pop hl ;0ee4 e1 .\r
- ret ;0ee5 c9 .\r
+ pop hl\r
+ ret\r
\r
sub_0ee6h:\r
- ld hl,conbuf+1 ;0ee6 21 6b 00 ! k .\r
- call sub_0ef7h ;0ee9 cd f7 0e . . .\r
- ld de,conbuf+1 ;0eec 11 6b 00 . k .\r
- and a ;0eef a7 .\r
- sbc hl,de ;0ef0 ed 52 . R\r
- ld b,l ;0ef2 45 E\r
- ret nz ;0ef3 c0 .\r
- jp ERROR ;0ef4 c3 07 01 . . .\r
-\r
-sub_0ef7h:\r
- db 0e6h ;0ef7 e6 and 037h (clear carry)\r
-sub_0ef8h:\r
- scf ;0ef8 37 . 7\r
+ ld hl,conbuf\r
+ call sub_0ef7h\r
+ ld de,conbuf\r
+ and a\r
+ sbc hl,de\r
+ ld b,l\r
+ ret nz\r
+ jp ERROR\r
+\r
+sub_0ef7h: ;from cmd_Q, cmd_Z\r
+ db 0e6h ;and 037h (clear carry)\r
+sub_0ef8h: ;from cmd_S\r
+ scf\r
l0ef9h:\r
- push af ;0ef9 f5 .\r
- call next_arg ;0efa cd ca 02 . . .\r
- cp 'W' ;0efd fe 57 . W\r
- jr nz,l0f0eh ;0eff 20 0d .\r
- inc de ;0f01 13 .\r
- push hl ;0f02 e5 .\r
- call sub_035dh ;0f03 cd 5d 03 . ] .\r
- ex de,hl ;0f06 eb .\r
- ex (sp),hl ;0f07 e3 .\r
- ld (hl),e ;0f08 73 s\r
- inc hl ;0f09 23 #\r
- ld a,d ;0f0a 7a z\r
- pop de ;0f0b d1 .\r
- jr l0f1ah ;0f0c 18 0c . .\r
-l0f0eh:\r
- cp '''' ;0f0e fe 27 . '\r
- jr z,l0f1eh ;0f10 28 0c ( .\r
- push hl ;0f12 e5 .\r
- call expr ;0f13 cd be 03 . . .\r
- ld a,l ;0f16 7d }\r
- pop hl ;0f17 e1 .\r
- jr c,l0f42h ;0f18 38 28 8 (\r
-l0f1ah:\r
- ld (hl),a ;0f1a 77 w\r
- inc hl ;0f1b 23 #\r
- jr l0f3ah ;0f1c 18 1c . .\r
+ push af\r
+ call next_arg\r
+ cp ''''\r
+ jr z,l0f1eh\r
+ push hl\r
+ call expr\r
+ ld a,l\r
+ pop hl\r
+ jr c,l0f42h\r
+ ld (hl),a\r
+ inc hl\r
+ jr l0f3ah\r
l0f1eh:\r
- inc de ;0f1e 13 .\r
- ld a,(de) ;0f1f 1a .\r
- cp '''' ;0f20 fe 27 . '\r
- jr z,l0f2bh ;0f22 28 07 ( .\r
- or a ;0f24 b7 .\r
- jr z,l0f42h ;0f25 28 1b ( .\r
+ inc de\r
+ ld a,(de)\r
+ cp ''''\r
+ jr z,l0f2bh\r
+ or a\r
+ jr z,l0f42h\r
l0f27h:\r
- ld (hl),a ;0f27 77 w\r
- inc hl ;0f28 23 #\r
- jr l0f1eh ;0f29 18 f3 . .\r
+ ld (hl),a\r
+ inc hl\r
+ jr l0f1eh\r
l0f2bh:\r
- inc de ;0f2b 13 .\r
- ld a,(de) ;0f2c 1a .\r
- cp '''' ;0f2d fe 27 . '\r
- jr z,l0f27h ;0f2f 28 f6 ( .\r
- cp '.' ;0f31 fe 2e . .\r
- jr nz,l0f3ah ;0f33 20 05 .\r
- inc de ;0f35 13 .\r
- dec hl ;0f36 2b +\r
- set 7,(hl) ;0f37 cb fe . .\r
- inc hl ;0f39 23 #\r
+ inc de\r
+ ld a,(de)\r
+ cp ''''\r
+ jr z,l0f27h\r
+ cp '.'\r
+ jr nz,l0f3ah\r
+ inc de\r
+ dec hl\r
+ set 7,(hl)\r
+ inc hl\r
l0f3ah:\r
- pop af ;0f3a f1 .\r
- jr nc,l0ef9h ;0f3b 30 bc 0 .\r
- ld (last_S),hl ;0f3d 22 90 0d " . .\r
- jr l0ef9h ;0f40 18 b7 . .\r
+ pop af\r
+ jr nc,l0ef9h\r
+ ld (last_S),hl\r
+ jr l0ef9h\r
l0f42h:\r
- pop af ;0f42 f1 .\r
- ret nc ;0f43 d0 .\r
- ld (last_S),hl ;0f44 22 90 0d " . .\r
- ret ;0f47 c9 .\r
+ pop af\r
+ ret nc\r
+ ld (last_S),hl\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+; >>D [startaddr] [endaddr]\r
+; Display memory in hex and ASCII\r
\r
cmd_D:\r
- ld hl,cmd_D ;0f48 21 48 0f ! H .\r
- ld (cmd_rpt),hl ;0f4b 22 68 00 " h .\r
- ld hl,(last_D) ;0f4e 2a d5 0e * . .\r
- ld bc,128 ;0f51 01 80 00 . . .\r
- call sub_0377h ;0f54 cd 77 03 . w .\r
- scf ;0f57 37 7\r
+ ld (cmd_rpt),hl\r
+ ld hl,(last_D)\r
+ ld bc,128\r
+ call sub_0377h\r
+ scf\r
sub_0f58h:\r
- push bc ;0f58 c5 .\r
- push de ;0f59 d5 .\r
- push hl ;0f5a e5 .\r
- ex af,af' ;0f5b 08 .\r
+ push bc\r
+ push de\r
+ push hl\r
+ push af\r
l0f5ch:\r
- call out.hl.@ ;0f5c cd a4 01 . . .\r
- call z,outbl2 ;0f5f cc 9c 02 . . .\r
- call outbl ;0f62 cd 9f 02 . . .\r
- ld de,0 ;0f65 11 00 00 . . .\r
+ call out_hl\r
+ call outbl2\r
+ ld de,0\r
l0f68h:\r
- ld a,(hl) ;0f68 7e ~\r
- inc hl ;0f69 23 #\r
- call out_hex ;0f6a cd 18 02 . . .\r
- call outbl ;0f6d cd 9f 02 . . .\r
- dec bc ;0f70 0b .\r
- inc e ;0f71 1c .\r
- ld a,e ;0f72 7b {\r
- cp 010h ;0f73 fe 10 . .\r
- jr z,l0f80h ;0f75 28 09 ( .\r
- and 003h ;0f77 e6 03 . .\r
- call z,outbl ;0f79 cc 9f 02 . . .\r
- ld a,b ;0f7c 78 x\r
- or c ;0f7d b1 .\r
- jr nz,l0f68h ;0f7e 20 e8 .\r
+ ld a,(hl)\r
+ inc hl\r
+ call out_hex\r
+ call outbl\r
+ dec bc\r
+ inc e\r
+ ld a,e\r
+ cp 010h\r
+ jr z,l0f80h\r
+ and 003h\r
+ call z,outbl\r
+ ld a,b\r
+ or c\r
+ jr nz,l0f68h\r
l0f80h:\r
- call outbl ;0f80 cd 9f 02 . . .\r
- and a ;0f83 a7 .\r
- sbc hl,de ;0f84 ed 52 . R\r
+ call outbl\r
+ and a\r
+ sbc hl,de\r
l0f86h:\r
- ld a,(hl) ;0f86 7e ~\r
- call sub_0fa3h ;0f87 cd a3 0f . . .\r
- call outchar ;0f8a cd 5d 02 . ] .\r
- inc hl ;0f8d 23 #\r
- dec e ;0f8e 1d .\r
- jr nz,l0f86h ;0f8f 20 f5 .\r
- ex af,af' ;0f91 08 .\r
- jr nc,l0f97h ;0f92 30 03 0 .\r
- ld (last_D),hl ;0f94 22 d5 0e " . .\r
+ ld a,(hl)\r
+ call sub_0fa3h\r
+ call outchar\r
+ inc hl\r
+ dec e\r
+ jr nz,l0f86h\r
+ pop af\r
+ push af\r
+ jr nc,l0f97h\r
+ ld (last_D),hl\r
l0f97h:\r
- ex af,af' ;0f97 08 .\r
- call crlf ;0f98 cd a3 02 . . .\r
- ld a,b ;0f9b 78 x\r
- or c ;0f9c b1 .\r
- jr nz,l0f5ch ;0f9d 20 bd .\r
- pop hl ;0f9f e1 .\r
- pop de ;0fa0 d1 .\r
- pop bc ;0fa1 c1 .\r
- ret ;0fa2 c9 .\r
+ call crlf\r
+ ld a,b\r
+ or c\r
+ jr nz,l0f5ch\r
+ pop af\r
+ pop hl\r
+ pop de\r
+ pop bc\r
+ ret\r
\r
sub_0fa3h:\r
- and 07fh ;0fa3 e6 7f . \7f\r
- cp 07fh ;0fa5 fe 7f . \7f\r
- jr z,l0fach ;0fa7 28 03 ( .\r
- cp ' ' ;0fa9 fe 20 .\r
- ret nc ;0fab d0 .\r
+ and 07fh\r
+ cp 07fh\r
+ jr z,l0fach\r
+ cp ' '\r
+ ret nc\r
l0fach:\r
- ld a,'.' ;0fac 3e 2e > .\r
- ret ;0fae c9 .\r
+ ld a,'.'\r
+ ret\r
\r
-cmd_F:\r
- push de\r
- ld hl,DMA_BUF+1\r
- ld (hl),' '\r
- inc hl\r
-l0fb6h:\r
- ld a,(de)\r
- ld (hl),a\r
- inc hl\r
- inc de\r
- and a\r
- jr nz,l0fb6h\r
- ld a,l\r
- sub DMA_BUF+2\r
- ld (DMA_BUF),a\r
- pop hl\r
- ld de,dfcb1\r
- call parse_filename\r
- ld de,dfcb2\r
- call parse_filename\r
- ;fall thru\r
+;-------------------------------------------------------------------------------\r
+; > Fcommandline\r
+; specifiy filenames and command line\r
\r
-cpy_fcb2:\r
- ld hl,dfcb2\r
- ld de,fcbsym\r
- ld bc,16\r
- ldir\r
- ret\r
+;cmd_F:\r
+\r
+;-------------------------------------------------------------------------------\r
+; > R [displacement]\r
+; Read Intel Hex File from console [add displacement]\r
\r
-parse_filename:\r
- call sub_102ch ;0fcd cd 2c 10 . , .\r
- push de ;0fd0 d5 .\r
- push bc ;0fd1 c5 .\r
- ld b,(hl) ;0fd2 46 F\r
- inc hl ;0fd3 23 #\r
- ld a,(hl) ;0fd4 7e ~\r
- cp ':' ;0fd5 fe 3a . :\r
- jr nz,l0fe1h ;0fd7 20 08 .\r
- inc hl ;0fd9 23 #\r
- ld a,b ;0fda 78 x\r
- sub 040h ;0fdb d6 40 . @\r
- and 01fh ;0fdd e6 1f . .\r
- jr l0fe3h ;0fdf 18 02 . .\r
-l0fe1h:\r
- dec hl ;0fe1 2b +\r
- xor a ;0fe2 af .\r
-l0fe3h:\r
- ld (de),a ;0fe3 12 .\r
- inc de ;0fe4 13 .\r
- ld b,8 ;0fe5 06 08 . .\r
- call sub_0ff2h ;0fe7 cd f2 0f . . .\r
- ld b,3 ;0fea 06 03 . .\r
- call sub_0ff2h ;0fec cd f2 0f . . .\r
- pop bc ;0fef c1 .\r
- pop de ;0ff0 d1 .\r
- ret ;0ff1 c9 .\r
-\r
-sub_0ff2h:\r
- call sub_1012h ;0ff2 cd 12 10 . . .\r
- jr z,l0ffeh ;0ff5 28 07 ( .\r
- inc hl ;0ff7 23 #\r
- ld (de),a ;0ff8 12 .\r
- inc de ;0ff9 13 .\r
- djnz sub_0ff2h ;0ffa 10 f6 . .\r
- jr l1003h ;0ffc 18 05 . .\r
-l0ffeh:\r
- ld a,c ;0ffe 79 y\r
-l0fffh:\r
- ld (de),a ;0fff 12 .\r
- inc de ;1000 13 .\r
- djnz l0fffh ;1001 10 fc . .\r
-l1003h:\r
- call sub_1012h ;1003 cd 12 10 . . .\r
- inc hl ;1006 23 #\r
- jr nz,l1003h ;1007 20 fa .\r
- cp '*' ;1009 fe 2a . *\r
- jr z,l1003h ;100b 28 f6 ( .\r
- cp '.' ;100d fe 2e . .\r
- ret z ;100f c8 .\r
- dec hl ;1010 2b +\r
- ret ;1011 c9 .\r
-\r
-sub_1012h:\r
- ld a,(hl) ;1012 7e ~\r
- ld c,' ' ;1013 0e 20 .\r
- and 01fh ;1015 e6 1f . .\r
- ret z ;1017 c8 .\r
- ld a,(hl) ;1018 7e ~\r
- cp ' ' ;1019 fe 20 .\r
- ret z ;101b c8 .\r
- call sub_1043h ;101c cd 43 10 . C .\r
- ret z ;101f c8 .\r
- cp '/' ;1020 fe 2f . /\r
- ret z ;1022 c8 .\r
- cp '.' ;1023 fe 2e . .\r
- ret z ;1025 c8 .\r
- ld c,'?' ;1026 0e 3f . ?\r
- cp '*' ;1028 fe 2a . *\r
- ret ;102a c9 .\r
-\r
-l102bh:\r
- inc hl ;102b 23 #\r
-sub_102ch:\r
- ld a,(hl) ;102c 7e ~\r
- cp '/' ;102d fe 2f . /\r
- jr z,l103bh ;102f 28 0a ( .\r
- call sub_1043h ;1031 cd 43 10 . C .\r
- jr z,l102bh ;1034 28 f5 ( .\r
-l1036h:\r
- cp ' ' ;1036 fe 20 .\r
- jr z,l102bh ;1038 28 f1 ( .\r
- ret ;103a c9 .\r
-\r
-l103bh:\r
- ld a,(hl) ;103b 7e ~\r
- cp ' '+1 ;103c fe 21 . !\r
- jr c,l1036h ;103e 38 f6 8 .\r
- inc hl ;1040 23 #\r
- jr l103bh ;1041 18 f8 . .\r
-\r
-sub_1043h:\r
- cp '=' ;1043 fe 3d . =\r
- ret z ;1045 c8 .\r
- cp '_' ;1046 fe 5f . _\r
- ret z ;1048 c8 .\r
- cp ',' ;1049 fe 2c . ,\r
- ret ;104b c9 .\r
-\r
-setup_fcb:\r
+cmd_R:\r
+ ld hl,0\r
+ call get_lastarg_def ;get offset from command line\r
+ push hl\r
+ ld hl,0\r
+ ld (high_load),hl\r
+w_recstart:\r
+ call i.getchar\r
+ jr z,rdhex_done\r
+ cp ':'\r
+ jr nz,w_recstart\r
+ ld c,0 ;init checksum\r
+ call i.gethexbyte ;record len\r
+ ld b,a\r
+ call i.gethexbyte ;address high\r
+ ld h,a\r
+ call i.gethexbyte ;address low\r
+ ld l,a\r
+ call i.gethexbyte ;record type (ignored)\r
+ ld a,b\r
+ and a ;record len == 0?\r
+ jr z,rdhex_done\r
+l16c6h:\r
+ call i.gethexbyte\r
+ pop de ;offset\r
push de\r
- ld hl,12\r
+ push hl\r
add hl,de\r
- xor a\r
- ld b,21\r
-l1052h:\r
- ld (hl),a\r
+ call i.storebyte\r
+ pop hl\r
inc hl\r
- djnz l1052h\r
- ld de,DMA_BUF\r
- ld c,BDOS_SETDMA\r
- call ddtz_bdos\r
- pop de\r
- ret\r
+ djnz l16c6h ;repeat for record len\r
+ call i.gethexbyte ;checksum\r
+ ld a,c\r
+ and a\r
+ jr nz,error2 ;exit if checksum error\r
+ jr w_recstart ;next record\r
\r
-file_open:\r
- ld (cur_fcb),de\r
- call setup_fcb ;106f cd 4c 10 . L .\r
- ld c,BDOS_OPEN ;1072 0e 0f . .\r
- call ddtz_bdos ;1074 cd 00 00 . . .\r
- inc a ;1077 3c <\r
- jp z,ERROR ;1078 ca 07 01 . . .\r
- ld a,080h ;10a9 3e 80 > .\r
- ld (cmdR_rindex),a ;10ab 32 20 11 2 .\r
- ret\r
+rdhex_done:\r
+ pop hl\r
+ call i.gethexbyte\r
+ jp p_max_high\r
\r
-read_byte:\r
- ld a,(cmdR_rindex) ;1105 3a 20 11 : .\r
- cp 080h ;1108 fe 80 . .\r
- jr nz,l1111h ;110a 20 05 .\r
- call read_sector ;110c cd 21 11 . ! .\r
- ret z ;110f c8 .\r
- sub a ;1110 97 .\r
-l1111h:\r
- inc a ;1111 3c <\r
- ld (cmdR_rindex),a ;1112 32 20 11 2 .\r
- push hl ;1115 e5 .\r
- add a,07fh ;1116 c6 7f . \7f\r
- ld l,a ;1118 6f o\r
- ld h,000h ;1119 26 00 & .\r
- ld a,(hl) ;111b 7e ~\r
- pop hl ;111c e1 .\r
- cp 01ah ;111d fe 1a . .\r
- ret ;111f c9 .\r
-\r
-read_sector:\r
- push hl ;1121 e5 .\r
- push de ;1122 d5 .\r
- push bc ;1123 c5 .\r
- ld de,(cur_fcb) ;1124 11 5c 00 . \ .\r
- ld c,BDOS_READ ;1127 0e 14 . .\r
- call ddtz_bdos ;1129 cd 00 00 . . .\r
- dec a ;112c 3d =\r
- jr z,l1132h ;112d 28 03 ( .\r
- jp p,ERROR ;112f f2 07 01 . . .\r
-l1132h:\r
- pop bc ;1132 c1 .\r
- pop de ;1133 d1 .\r
- pop hl ;1134 e1 .\r
- ret ;1135 c9 .\r
-\r
-cmdR_storebyte:\r
- push af ;1136 f5 .\r
- push de ;1137 d5 .\r
- ld de,TPA ;1138 11 00 01 . . .\r
- call cp_hl_de ;113b cd ee 02 . . .\r
- jp c,ERROR ;113e da 07 01 . . .\r
- ld de,(BDOS+1) ;1141 ed 5b 06 00 . [ . .\r
- call cp_hl_de ;1145 cd ee 02 . . .\r
- jp nc,ERROR ;1148 d2 07 01 . . .\r
- ld de,(high_load) ;114b ed 5b 9c 11 . [ . .\r
- call cp_hl_de ;114f cd ee 02 . . .\r
- jr c,l1157h ;1152 38 03 8 .\r
- ld (high_load),hl ;1154 22 9c 11 " . .\r
-l1157h:\r
- ld de,(max_load) ;1157 ed 5b 9e 11 . [ . .\r
- call cp_hl_de ;115b cd ee 02 . . .\r
- jr c,l1163h ;115e 38 03 8 .\r
- ld (max_load),hl ;1160 22 9e 11 " . .\r
-l1163h:\r
- pop de ;1163 d1 .\r
- pop af ;1164 f1 .\r
- ld (hl),a ;1165 77 w\r
- ret ;1166 c9 .\r
-\r
-strncmp:\r
- ld a,(de) ;1167 1a .\r
- cp (hl) ;1168 be .\r
- inc de ;1169 13 .\r
- inc hl ;116a 23 #\r
- ret nz ;116b c0 .\r
- djnz strncmp ;116c 10 f9 . .\r
- ret ;116e c9 .\r
-\r
-str_hex:\r
- db 'HEX'\r
-\r
-read_hexchar:\r
- call read_hexdigit\r
+i.gethexbyte:\r
+ call sub_16f6h\r
rlca\r
rlca\r
rlca\r
rlca\r
ld d,a\r
- call read_hexdigit\r
+ call sub_16f6h\r
add a,d\r
ld d,a\r
add a,c\r
ld a,d\r
ret\r
\r
-read_hexdigit:\r
- call read_byte\r
- jr z,error8\r
-hex_digit_v:\r
+sub_16f6h:\r
+ call i.getchar\r
+ jr z,error2\r
call hex_digit\r
ret nc\r
-error8:\r
+error2:\r
jp ERROR\r
\r
-read_hexbyte:\r
- call read_byte\r
-read_hexbyte0:\r
- push bc\r
- call hex_digit_v\r
- rlca\r
- rlca\r
- rlca\r
- rlca\r
- ld c,a\r
- call read_byte\r
- call hex_digit_v\r
- or c\r
- pop bc\r
+i.getchar:\r
+ call incharw\r
+ cp 01ah\r
ret\r
\r
-cmd_R:\r
- ld hl,0 ;1062 21 00 00 ! . .\r
- call get_lastarg_def ;1065 cd 69 03 . i .\r
-read_file:\r
- ld de,dfcb1+1\r
- ld a,(de)\r
- cp '?'\r
- jr z,read_symfile\r
- dec de\r
- push hl ;1068 e5 .\r
- ld hl,0 ;1069 21 00 00 ! . .\r
- ld (high_load),hl ;106c 22 9c 11 " . .\r
- call file_open\r
- ld hl,dfcb1+9 ;107b 21 65 00 ! e .\r
- ld de,str_hex ;107e 11 a5 10 . . .\r
- ld b,3 ;1081 06 03 . .\r
- call strncmp ;1083 cd 67 11 . g .\r
- pop hl ;1086 e1 .\r
- jr z,read_hexfile ;1087 28 1f ( .\r
- ld de,TPA ;1089 11 00 01 . . .\r
- add hl,de ;108c 19 .\r
- push hl ;108d e5 .\r
-l108eh:\r
- call read_sector ;108e cd 21 11 . ! .\r
- pop hl ;1091 e1 .\r
- jr z,read_symfile ;1092 ca 72 11 . r .\r
- ld de,DMA_BUF ;1095 11 80 00 . . .\r
- ld b,080h ;1098 06 80 . .\r
-l109ah:\r
- ld a,(de) ;109a 1a .\r
- call cmdR_storebyte ;109b cd 36 11 . 6 .\r
- inc de ;109e 13 .\r
- inc hl ;109f 23 #\r
- djnz l109ah ;10a0 10 f8 . .\r
- push hl ;10a2 e5 .\r
- jr l108eh ;10a3 18 e9 . .\r
-\r
-read_hexfile:\r
- push hl ;10a8 e5 .\r
-l10aeh:\r
- call read_byte ;10ae cd 05 11 . . .\r
- jr z,rdhex_done ;10b1 28 31 ( 1\r
- cp ':' ;10b3 fe 3a . :\r
- jr nz,l10aeh ;10b5 20 f7 .\r
- ld c,0 ;10b7 0e 00 . .\r
- call read_hexchar ;10b9 cd e8 10 . . .\r
- ld b,a ;10bc 47 G\r
- call read_hexchar ;10bd cd e8 10 . . .\r
- ld h,a ;10c0 67 g\r
- call read_hexchar ;10c1 cd e8 10 . . .\r
- ld l,a ;10c4 6f o\r
- ld a,b ;10c5 78 x\r
- and a ;10c6 a7 .\r
- jr z,rdhex_done ;10c7 28 1b ( .\r
- call read_hexchar ;10c9 cd e8 10 . . .\r
-l10cch:\r
- call read_hexchar ;10cc cd e8 10 . . .\r
- pop de ;10cf d1 .\r
- push de ;10d0 d5 .\r
- push hl ;10d1 e5 .\r
- add hl,de ;10d2 19 .\r
- call cmdR_storebyte ;10d3 cd 36 11 . 6 .\r
- pop hl ;10d6 e1 .\r
- inc hl ;10d7 23 #\r
- djnz l10cch ;10d8 10 f2 . .\r
- call read_hexchar ;10da cd e8 10 . . .\r
- ld a,c ;10dd 79 y\r
- and a ;10de a7 .\r
- jr nz,error9 ;10df c2 07 01 . . .\r
- jr l10aeh ;10e2 18 ca . .\r
-rdhex_done:\r
- pop hl ;10e4 e1 .\r
- jr read_symfile ;10e5 c3 72 11 . r .\r
-\r
-read_symfile:\r
- ld de,fcbsym+1\r
- ld a,(de)\r
- cp ' '\r
- jp z,p_max_high\r
-\r
- call pstr_inl\r
- db 'SYMBOLS',CR,LF+80h\r
+i.storebyte:\r
+ push af\r
+ push de\r
+ ld de,TPA ;lowest allowed load address\r
+ call cp_hl_de\r
+ jr c,error2\r
+ ld de,(BDOS+1) ;highest allowed load address\r
+ call cp_hl_de\r
+ jr nc,error2\r
+ ld de,(high_load)\r
+ call cp_hl_de\r
+ jr c,l1157h\r
+ ld (high_load),hl\r
+l1157h:\r
+ ld de,(max_load)\r
+ call cp_hl_de\r
+ jr c,l1163h\r
+ ld (max_load),hl\r
+l1163h:\r
+ pop de\r
+ pop af\r
+ ld (hl),a ;store byte\r
+ ret\r
\r
- dec de\r
- call file_open\r
-;------------------------------------------------------------------------\r
-rs_1:\r
- call read_byte\r
-rs_2:\r
- cp 1ah\r
- jr z,p_max_high\r
- cp '!'\r
- jr c,rs_1\r
- call read_hexbyte0\r
- ld d,a\r
- call read_hexbyte ; symval\r
- ld e,a\r
- push de ; symval\r
- call read_byte\r
- cp ' '\r
- jr z,rs_4\r
- pop hl ; discard symval\r
-rs_3: call read_byte\r
- cp ' '\r
- jr c,rs_2\r
- jr rs_3\r
-;\r
-rs_4: ld hl,(BDOS+1) ;\r
- ld e,0 ; setup symlen\r
-rs_5: dec hl ;\r
- call read_byte ;\r
- cp TAB ;\r
- jr z,rs_6 ;\r
- cp CR ;\r
- jr z,rs_6 ;\r
- cp '!' ;\r
- jr c,error9 ;\r
- ld (hl),a ;\r
- inc e ; symlen++\r
- ld a,e ;\r
- cp 10h+1 ;\r
- jr c,rs_5 ;\r
-error9:\r
- jp ERROR ;\r
-;\r
-rs_6: push de ; symlen\r
- push hl ;\r
- ex de,hl ;\r
- ld hl,(BDOS+1) ;\r
- inc hl ;\r
- ld e,(hl) ;\r
- inc hl ;\r
- ld d,(hl) ;\r
- pop hl ;\r
- ld (hl),d ;\r
- dec hl ;\r
- ld (hl),e ;\r
- dec hl ;\r
- ld (hl),0c3h ;\r
-\r
- ld de,(max_load) ;\r
- call cp_hl_de ;\r
- jr c,error9 ;\r
-\r
- ld de,(reg_sp) ;\r
- call cp_hl_de ;\r
- jr nc,rs_61 ;\r
- ld (reg_sp),hl ;\r
-rs_61:\r
-\r
- ld de,(BDOS+1) ;\r
- ld (BDOS+1),hl ;\r
- ex de,hl ;\r
- pop de ;\r
- ld (hl),e ; symlen\r
- inc hl ;\r
- pop de ; symval\r
- ld (hl),e ;\r
- inc hl ;\r
- ld (hl),d ;\r
- jp rs_1 ;\r
-;------------------------------------------------------------------------\r
+;-------------------------------------------------------------------------------\r
\r
p_max_high0:\r
call assert_eol\r
DC ' Max = '\r
ld hl,(max_load)\r
call out_hl\r
+ call pstr_inl\r
+ DC ' Top = '\r
+ ld hl,ddtz_base-1\r
+ call out_hl\r
jp crlf\r
\r
-cmd_W:\r
- call get_arg_range ;11a0 cd 7d 03 . } .\r
- call assert_eol ;11a3 cd d6 02 . . .\r
- push hl ;11a6 e5 .\r
- ld a,c ;11a7 79 y\r
- add a,07fh ;11a8 c6 7f . \7f\r
- jr nc,l11adh ;11aa 30 01 0 .\r
- inc b ;11ac 04 .\r
-l11adh:\r
- and 080h ;11ad e6 80 . .\r
- ld c,a ;11af 4f O\r
- push bc ;11b0 c5 .\r
- ld a,(dfcb1+1) ;11b1 3a 5d 00 : ] .\r
- cp ' ' ;11b4 fe 20 .\r
- jr z,error5 ;11b6 28 3b ( ;\r
- ld de,dfcb1\r
- call setup_fcb ;11b8 cd 4c 10 . L .\r
- push de ;11bb d5 .\r
- ld c,BDOS_DELETE ;11bc 0e 13 . .\r
- call ddtz_bdos ;11be cd 00 00 . . .\r
- pop de ;11c1 d1 .\r
- ld c,BDOS_CREATE ;11c2 0e 16 . .\r
- call ddtz_bdos ;11c4 cd 00 00 . . .\r
- inc a ;11c7 3c <\r
- jr z,error5 ;11c8 28 29 ( )\r
- pop bc ;11ca c1 .\r
- pop hl ;11cb e1 .\r
-l11cch:\r
- ld a,b ;11cc 78 x\r
- or c ;11cd b1 .\r
- jr z,close_file ;11ce 28 26 ( &\r
- push bc ;11d0 c5 .\r
- ld de,080h ;11d1 11 80 00 . . . DMA_BUF\r
- ld b,d ;11d4 42 B\r
- ld c,e ;11d5 4b K\r
- ldir ;11d6 ed b0 . .\r
- call write_sector ;11d8 cd e4 11 . . .\r
- ex (sp),hl ;11db e3 .\r
- ld bc,0ff80h ;11dc 01 80 ff . . .\r
- add hl,bc ;11df 09 .\r
- ex (sp),hl ;11e0 e3 .\r
- pop bc ;11e1 c1 .\r
- jr l11cch ;11e2 18 e8 . .\r
-\r
-write_sector:\r
- push hl ;11e4 e5 .\r
- ld de,dfcb1 ;11e5 11 5c 00 . \ .\r
- ld c,BDOS_WRITE ;11e8 0e 15 . .\r
- call ddtz_bdos ;11ea cd 00 00 . . .\r
- pop hl ;11ed e1 .\r
- and a ;11ee a7 .\r
- ret z ;11ef c8 .\r
- call close_file ;11f0 cd f6 11 . . .\r
-error5:\r
- jp ERROR ;11f3 c3 07 01 . . .\r
-\r
-close_file:\r
- ld de,dfcb1 ;11f6 11 5c 00 . \ .\r
- ld c,BDOS_CLOSE ;11f9 0e 10 . .\r
- jp ddtz_bdos ;11fb c3 00 00 . . .\r
-\r
-cmd_A:\r
- ld hl,(last_A) ;11fe 2a 64 12 * d .\r
- call get_lastarg_def ;1201 cd 69 03 . i .\r
- push hl ;1204 e5 .\r
- pop iy ;1205 fd e1 . .\r
- ld hl,l1259h ;1207 21 59 12 ! Y .\r
- ld (CMD_ERR),hl ;120a 22 66 00 " f .\r
- ld (l1262h),sp ;120d ed 73 62 12 . s b .\r
-l1211h:\r
- push iy ;1211 fd e5 . .\r
- pop hl ;1213 e1 .\r
- ld (last_A),hl ;1214 22 64 12 " d .\r
- ld (l0062h),hl ;1217 22 62 00 " b .\r
- push hl ;121a e5 .\r
- call p_disas_line ;121b cd 2d 19 . - .\r
- pop iy ;121e fd e1 . .\r
- ld c,b ;1220 48 H\r
- ld de,(offs.@) ;1221 ed 5b 64 00 . [ d .\r
- ld a,d ;1225 7a z\r
- or e ;1226 b3 .\r
- ld b,011h ;1227 06 11 . .\r
- jr z,l122dh ;1229 28 02 ( .\r
- ld b,019h ;122b 06 19 . .\r
-l122dh:\r
- call outbl ;122d cd 9f 02 . . .\r
- ld a,(con_col) ;1230 3a 72 02 : r .\r
- cp b ;1233 b8 .\r
- jr c,l122dh ;1234 38 f7 8 .\r
- push bc ;1236 c5 .\r
- call get_line ;1237 cd 4e 01 . N .\r
- pop bc ;123a c1 .\r
- call skipbl ;123b cd bf 02 . . .\r
- cp '.' ;123e fe 2e . .\r
- ret z ;1240 c8 .\r
- cp '-' ;1241 fe 2d . -\r
- jr nz,l124bh ;1243 20 06 .\r
- ld iy,(cmd_A_prev) ;1245 fd 2a 66 12 . * f .\r
- jr l1211h ;1249 18 c6 . .\r
-l124bh:\r
- and a ;124b a7 .\r
- call nz,sub_1268h ;124c c4 68 12 . h .\r
- ld (cmd_A_prev),iy ;124f fd 22 66 12 . " f .\r
- ld b,0 ;1253 06 00 . .\r
- add iy,bc ;1255 fd 09 . .\r
- jr l1211h ;1257 18 b8 . .\r
-l1259h:\r
- call l0146h ;1259 cd 46 01 . F .\r
- ld sp,(l1262h) ;125c ed 7b 62 12 . { b .\r
- jr l1211h ;1260 18 af . .\r
-\r
-sub_1268h:\r
- call skipbl ;1268 cd bf 02 . . .\r
- ld hl,t_MNEMONICS ;126b 21 c6 1e ! . .\r
- call sub_030ah ;126e cd 0a 03 . . .\r
- jp nc,ERROR ;1271 d2 07 01 . . .\r
- call skipbl ;1274 cd bf 02 . . .\r
- push de ;1277 d5 .\r
- ld a,b ;1278 78 x\r
- add a,b ;1279 80 .\r
- add a,b ;127a 80 .\r
- ld hl,b_1289_start ;127b 21 89 12 ! . .\r
- call add_hl_a ;127e cd b9 02 . . .\r
- ld e,(hl) ;1281 5e ^\r
- inc hl ;1282 23 #\r
- ld d,(hl) ;1283 56 V\r
- inc hl ;1284 23 #\r
- ld b,(hl) ;1285 46 F\r
- ex de,hl ;1286 eb .\r
- pop de ;1287 d1 .\r
-\r
-CALL_HL:\r
- jp (hl) ;1288 e9 .\r
-\r
-b_1289_start:\r
- dw as.ADC_SBC ;ADC 1289 51 15 Q .\r
- db 088h ; 128b 88 .\r
- dw as.ADD ;ADD 128c 71 15 q .\r
- db 080h ; 128e 80 .\r
- dw as.AND_CP_OR_SUB_XOR ;AND 128f a8 15 . .\r
- db 0a0h ; 1291 a0 .\r
- dw as.BITOP ;BIT 1292 09 16 . .\r
- db 040h ; 1294 40 @\r
- dw as.CALL ;CALL 1295 2d 16 - .\r
- db 0c4h ; 1297 c4 .\r
- dw as.opc.noarg ;CCF 1298 3b 15 ; .\r
- db 03fh ; 129a 3f ?\r
- dw as.AND_CP_OR_SUB_XOR ;CP 129b a8 15 . .\r
- db 0b8h ; 129d b8 .\r
- dw gen.opc.ED2 ;CPD 129e 44 15 D .\r
- db 0a9h ; 12a0 a9 .\r
- dw gen.opc.ED2 ;CPDR 12a1 44 15 D .\r
- db 0b9h ; 12a3 b9 .\r
- dw gen.opc.ED2 ;CPI 12a4 44 15 D .\r
- db 0a1h ; 12a6 a1 .\r
- dw gen.opc.ED2 ;CPIR 12a7 44 15 D .\r
- db 0b1h ; 12a9 b1 .\r
- dw as.opc.noarg ;CPL 12aa 3b 15 ; .\r
- db 02fh ; 12ac 2f /\r
- dw as.opc.noarg ;DAA 12ad 3b 15 ; .\r
- db 027h ; 12af 27 '\r
- dw as.DEC_INC ;DEC 12b0 98 17 . .\r
- db 005h ; 12b2 05 .\r
- dw as.opc.noarg ;DI 12b3 3b 15 ; .\r
- db 0f3h ; 12b5 f3 .\r
- dw as.DJNZ ;DJNZ 12b6 99 16 . .\r
- db 010h ; 12b8 10 .\r
- dw as.opc.noarg ;EI 12b9 3b 15 ; .\r
- db 0fbh ; 12bb fb .\r
- dw as.EX ;EX 12bc 49 17 I .\r
- db 0e3h ; 12be e3 .\r
- dw as.opc.noarg ;EXX 12bf 3b 15 ; .\r
- db 0d9h ; 12c1 d9 .\r
- dw as.opc.noarg ;HALT 12c2 3b 15 ; .\r
- db 076h ; 12c4 76 v\r
- dw as.IM ;IM 12c5 b4 16 . .\r
- db 046h ; 12c7 46 F\r
- dw as.IN ;IN 12c8 ed 16 . .\r
- db 040h ; 12ca 40 @\r
- dw as.DEC_INC ;INC 12cb 98 17 . .\r
- db 004h ; 12cd 04 .\r
- dw gen.opc.ED2 ;IND 12ce 44 15 D .\r
- db 0aah ; 12d0 aa .\r
- dw gen.opc.ED2 ;INDR 12d1 44 15 D .\r
- db 0bah ; 12d3 ba .\r
- dw gen.opc.ED2 ;INI 12d4 44 15 D .\r
- db 0a2h ; 12d6 a2 .\r
- dw gen.opc.ED2 ;INIR 12d7 44 15 D .\r
- db 0b2h ; 12d9 b2 .\r
- dw as.JP ;JP 12da 53 16 S .\r
- db 0c2h ; 12dc c2 .\r
- dw as.JR ;JR 12dd a0 16 . .\r
- db 020h ; 12df 20\r
- dw as.LD ;LD 12e0 52 13 R .\r
- db 040h ; 12e2 40 @\r
- dw gen.opc.ED2 ;LDD 12e3 44 15 D .\r
- db 0a8h ; 12e5 a8 .\r
- dw gen.opc.ED2 ;LDDR 12e6 44 15 D .\r
- db 0b8h ; 12e8 b8 .\r
- dw gen.opc.ED2 ;LDI 12e9 44 15 D .\r
- db 0a0h ; 12eb a0 .\r
- dw gen.opc.ED2 ;LDIR 12ec 44 15 D .\r
- db 0b0h ; 12ee b0 .\r
- dw gen.opc.ED2 ;NEG 12ef 44 15 D .\r
- db 044h ; 12f1 44 D\r
- dw as.opc.noarg ;NOP 12f2 3b 15 ; .\r
- db 000h ; 12f4 00 .\r
- dw as.AND_CP_OR_SUB_XOR ;OR 12f5 a8 15 . .\r
- db 0b0h ; 12f7 b0 .\r
- dw gen.opc.ED2 ;OTDR 12f8 44 15 D .\r
- db 0bbh ; 12fa bb .\r
- dw gen.opc.ED2 ;OTIR 12fb 44 15 D .\r
- db 0b3h ; 12fd b3 .\r
- dw as.OUT ;OUT 12fe 21 17 ! .\r
- db 041h ; 1300 41 A\r
- dw gen.opc.ED2 ;OUTD 1301 44 15 D .\r
- db 0abh ; 1303 ab .\r
- dw gen.opc.ED2 ;OUTI 1304 44 15 D .\r
- db 0a3h ; 1306 a3 .\r
- dw as.POP_PUSH ;POP 1307 d9 16 . .\r
- db 0c1h ; 1309 c1 .\r
- dw as.POP_PUSH ;PUSH 130a d9 16 . .\r
- db 0c5h ; 130c c5 .\r
- dw as.BITOP ;RES 130d 09 16 . .\r
- db 080h ; 130f 80 .\r
- dw as.RET ;RET 1310 45 16 E .\r
- db 0c0h ; 1312 c0 .\r
- dw gen.opc.ED2 ;RETI 1313 44 15 D .\r
- db 04dh ; 1315 4d M\r
- dw gen.opc.ED2 ;RETN 1316 44 15 D .\r
- db 045h ; 1318 45 E\r
- dw as.SHIFTOP ;RL 1319 d5 15 . .\r
- db 010h ; 131b 10 .\r
- dw as.opc.noarg ;RLA 131c 3b 15 ; .\r
- db 017h ; 131e 17 .\r
- dw as.SHIFTOP ;RLC 131f d5 15 . .\r
- db 000h ; 1321 00 .\r
- dw as.opc.noarg ;RLCA 1322 3b 15 ; .\r
- db 007h ; 1324 07 .\r
- dw gen.opc.ED2 ;RLD 1325 44 15 D .\r
- db 06fh ; 1327 6f o\r
- dw as.SHIFTOP ;RR 1328 d5 15 . .\r
- db 018h ; 132a 18 .\r
- dw as.opc.noarg ;RRA 132b 3b 15 ; .\r
- db 01fh ; 132d 1f .\r
- dw as.SHIFTOP ;RRC 132e d5 15 . .\r
- db 008h ; 1330 08 .\r
- dw as.opc.noarg ;RRCA 1331 3b 15 ; .\r
- db 00fh ; 1333 0f .\r
- dw gen.opc.ED2 ;RRD 1334 44 15 D .\r
- db 067h ; 1336 67 g\r
- dw as.RST ;RST 1337 ca 16 . .\r
- db 0c7h ; 1339 c7 .\r
- dw as.ADC_SBC ;SBC 133a 51 15 Q .\r
- db 098h ; 133c 98 .\r
- dw as.opc.noarg ;SCF 133d 3b 15 ; .\r
- db 037h ; 133f 37 7\r
- dw as.BITOP ;SET 1340 09 16 . .\r
- db 0c0h ; 1342 c0 .\r
- dw as.SHIFTOP ;SLA 1343 d5 15 . .\r
- db 020h ; 1345 20\r
- dw as.SHIFTOP ;SRA 1346 d5 15 . .\r
- db 028h ; 1348 28 (\r
- dw as.SHIFTOP ;SRL 1349 d5 15 . .\r
- db 038h ; 134b 38 8\r
- dw as.AND_CP_OR_SUB_XOR ;SUB 134c a8 15 . .\r
- db 090h ; 134e 90 .\r
- dw as.AND_CP_OR_SUB_XOR ;XOR 134f a8 15 . .\r
- db 0a8h ; 1351 a8 .\r
-\r
- dw as.IN0 ;IN0\r
- db 000h ;\r
- dw as.MLT ;MLT\r
- db 04ch ;\r
- dw gen.opc.ED2 ;OTDM\r
- db 08bh ;\r
- dw gen.opc.ED2 ;OTDMR\r
- db 09bh ;\r
- dw gen.opc.ED2 ;OTIM\r
- db 083h ;\r
- dw gen.opc.ED2 ;OTIMR\r
- db 093h ;\r
- dw as.OUTO ;OUT0\r
- db 001h ;\r
- dw gen.opc.ED2 ;SLP\r
- db 076h ;\r
- dw as.TST ;TST\r
- db 004h ;\r
- dw as.TSTIO ;TSTIO\r
- db 074h ;\r
-\r
-as.TST:\r
- call arg.r_HL_A ;\r
- jr nc,as.tst_0\r
- rlca\r
- rlca\r
- rlca\r
- add a,b\r
- ld b,a\r
- jp gen.opc.ED2\r
-as.tst_0:\r
- ld b,064h\r
-as.TSTIO:\r
- call arg.imm_8bit ;\r
- jr as.store_io0\r
-\r
-as.IN0:\r
- call arg.r_HL_A ;\r
- jr nc,error7\r
- cp 006h\r
- jr z,error7\r
- rlca\r
- rlca\r
- rlca\r
- add a,b\r
- ld b,a\r
- call assert_comma ;\r
- call arg.addr_8bit ;\r
- jr as.store_io0\r
-\r
-as.OUTO:\r
- call arg.addr_8bit ;\r
- call assert_comma ;\r
- call arg.r_HL_A ;\r
- jr nc,error7\r
- cp 006h\r
- jr z,error7\r
- rlca\r
- rlca\r
- rlca\r
- add a,b\r
- ld b,a\r
-\r
-as.store_io0:\r
- call assert_eol\r
- ld (iy+000h),0edh\r
- ld (iy+001h),b\r
- ld (iy+002h),l\r
- ld c,003h\r
- ret\r
+;-------------------------------------------------------------------------------\r
+; > Wstartaddr endaddr\r
+; Write a file to disk\r
\r
-as.MLT:\r
- call arg.ww ;\r
- jr nc,error7\r
- add a,b\r
- ld b,a\r
- jp gen.opc.ED2\r
+;cmd_W:\r
\r
-error7:\r
- jp ERROR\r
+;-------------------------------------------------------------------------------\r
+; > A [startaddr]\r
+; Assemble Zilog Z180 mnemonics\r
\r
-as.LD:\r
- call arg.r_HL_A ;1352 cd 2e 18 . . .\r
- jr c,l13d4h ;1355 38 7d 8 }\r
- call arg.IDX_displcmnt ;1357 cd 55 18 . U .\r
- jp c,l1471h ;135a da 71 14 . q .\r
- call arg.ww ;135d cd 1b 18 . . .\r
- jp c,l149ch ;1360 da 9c 14 . . .\r
- call arg.IX_IY ;1363 cd 3d 18 . = .\r
- jp c,l14f5h ;1366 da f5 14 . . .\r
- ld a,(de) ;1369 1a .\r
- cp 'I' ;136a fe 49 . I\r
- jp z,l1511h ;136c ca 11 15 . . .\r
- cp 'R' ;136f fe 52 . R\r
- jp z,l1519h ;1371 ca 19 15 . . .\r
- cp '(' ;1374 fe 28 . (\r
- jp nz,ERROR ;1376 c2 07 01 . . .\r
- inc de ;1379 13 .\r
- call arg.ww ;137a cd 1b 18 . . .\r
- jp c,l1528h ;137d da 28 15 . ( .\r
- call test_expr ;1380 cd 09 18 . . .\r
- call test_paren_close ;1383 cd c5 18 . . .\r
- call assert_comma ;1386 cd be 18 . . .\r
- call arg.ww ;1389 cd 1b 18 . . .\r
- jr c,l13c2h ;138c 38 34 8 4\r
- call arg.IX_IY ;138e cd 3d 18 . = .\r
- jr nc,l13aah ;1391 30 17 0 .\r
- ld b,022h ;1393 06 22 . "\r
-l1395h:\r
- call assert_eol ;1395 cd d6 02 . . .\r
- ld a,(prefix_ixiy) ;1398 3a cc 18 : . .\r
-l139bh:\r
- ld (iy+000h),a ;139b fd 77 00 . w .\r
- ld (iy+001h),b ;139e fd 70 01 . p .\r
- ld (iy+002h),l ;13a1 fd 75 02 . u .\r
- ld (iy+003h),h ;13a4 fd 74 03 . t .\r
- ld c,004h ;13a7 0e 04 . .\r
- ret ;13a9 c9 .\r
-l13aah:\r
- ld a,(de) ;13aa 1a .\r
- cp 'A' ;13ab fe 41 . A\r
- jp nz,ERROR ;13ad c2 07 01 . . .\r
- inc de ;13b0 13 .\r
- ld b,032h ;13b1 06 32 . 2\r
-as.store_3:\r
- call assert_eol ;13b3 cd d6 02 . . .\r
- ld (iy+000h),b ;13b6 fd 70 00 . p .\r
- ld (iy+001h),l ;13b9 fd 75 01 . u .\r
- ld (iy+002h),h ;13bc fd 74 02 . t .\r
- ld c,003h ;13bf 0e 03 . .\r
- ret ;13c1 c9 .\r
-l13c2h:\r
- cp 020h ;13c2 fe 20 .\r
- jr z,l13d0h ;13c4 28 0a ( .\r
- add a,043h ;13c6 c6 43 . C\r
- ld b,a ;13c8 47 G\r
-l13c9h:\r
- call assert_eol ;13c9 cd d6 02 . . .\r
- ld a,0edh ;13cc 3e ed > .\r
- jr l139bh ;13ce 18 cb . .\r
-l13d0h:\r
- ld b,022h ;13d0 06 22 . "\r
- jr as.store_3 ;13d2 18 df . .\r
-l13d4h:\r
- ld b,a ;13d4 47 G\r
- call assert_comma ;13d5 cd be 18 . . .\r
- call arg.r_HL_A ;13d8 cd 2e 18 . . .\r
- jr nc,l13f0h ;13db 30 13 0 .\r
- push af ;13dd f5 .\r
- ld a,b ;13de 78 x\r
- rlca ;13df 07 .\r
- rlca ;13e0 07 .\r
- rlca ;13e1 07 .\r
- ld b,a ;13e2 47 G\r
- pop af ;13e3 f1 .\r
- add a,b ;13e4 80 .\r
- add a,040h ;13e5 c6 40 . @\r
- cp 076h ;13e7 fe 76 . v\r
- jp z,ERROR ;13e9 ca 07 01 . . .\r
-l13ech:\r
- ld b,a ;13ec 47 G\r
- jp as.opc.noarg ;13ed c3 3b 15 . ; .\r
-l13f0h:\r
- call arg.IDX_displcmnt ;13f0 cd 55 18 . U .\r
- jr nc,l1413h ;13f3 30 1e 0 .\r
- ld a,b ;13f5 78 x\r
- rlca ;13f6 07 .\r
- rlca ;13f7 07 .\r
- rlca ;13f8 07 .\r
- add a,046h ;13f9 c6 46 . F\r
- cp 076h ;13fb fe 76 . v\r
- jp z,ERROR ;13fd ca 07 01 . . .\r
-\r
-l1400h:\r
- ld b,a ;1400 47 G\r
- call assert_eol ;1401 cd d6 02 . . .\r
- ld (iy+001h),b ;1404 fd 70 01 . p .\r
- ld (iy+002h),c ;1407 fd 71 02 . q .\r
- ld a,(prefix_ixiy) ;140a 3a cc 18 : . .\r
- ld (iy+000h),a ;140d fd 77 00 . w .\r
- ld c,003h ;1410 0e 03 . .\r
- ret ;1412 c9 .\r
-l1413h:\r
- ld a,(de) ;1413 1a .\r
- cp 'I' ;1414 fe 49 . I\r
- jr z,l1426h ;1416 28 0e ( .\r
- cp 'R' ;1418 fe 52 . R\r
- jr nz,l1432h ;141a 20 16 .\r
- ld a,b ;141c 78 x\r
- cp 007h ;141d fe 07 . .\r
- jp nz,ERROR ;141f c2 07 01 . . .\r
- ld b,05fh ;1422 06 5f . _\r
- jr l142eh ;1424 18 08 . .\r
-l1426h:\r
- ld a,b ;1426 78 x\r
- cp 007h ;1427 fe 07 . .\r
- jp nz,ERROR ;1429 c2 07 01 . . .\r
- ld b,057h ;142c 06 57 . W\r
-l142eh:\r
- inc de ;142e 13 .\r
- jp gen.opc.ED2 ;142f c3 44 15 . D .\r
-l1432h:\r
- cp '(' ;1432 fe 28 . (\r
- jr z,l144ch ;1434 28 16 ( .\r
- call arg.imm_8bit ;1436 cd ff 17 . . .\r
- ld a,b ;1439 78 x\r
- rlca ;143a 07 .\r
- rlca ;143b 07 .\r
- rlca ;143c 07 .\r
- add a,006h ;143d c6 06 . .\r
-l143fh:\r
- ld b,a ;143f 47 G\r
-as.store_2:\r
- call assert_eol ;1440 cd d6 02 . . .\r
- ld (iy+000h),b ;1443 fd 70 00 . p .\r
- ld (iy+001h),l ;1446 fd 75 01 . u .\r
- ld c,002h ;1449 0e 02 . .\r
- ret ;144b c9 .\r
-l144ch:\r
- inc de ;144c 13 .\r
- ld a,b ;144d 78 x\r
- cp 007h ;144e fe 07 . .\r
- jp nz,ERROR ;1450 c2 07 01 . . .\r
- call arg.ww ;1453 cd 1b 18 . . .\r
- jr nc,l1466h ;1456 30 0e 0 .\r
- cp 030h ;1458 fe 30 . 0\r
- jp nc,ERROR ;145a d2 07 01 . . .\r
- add a,00ah ;145d c6 0a . .\r
- ld b,a ;145f 47 G\r
- call test_paren_close ;1460 cd c5 18 . . .\r
- jp as.opc.noarg ;1463 c3 3b 15 . ; .\r
-l1466h:\r
- call test_expr ;1466 cd 09 18 . . .\r
- call test_paren_close ;1469 cd c5 18 . . .\r
- ld b,03ah ;146c 06 3a . :\r
- jp as.store_3 ;146e c3 b3 13 . . .\r
-\r
-l1471h:\r
- call assert_comma ;1471 cd be 18 . . .\r
- call arg.r_HL_A ;1474 cd 2e 18 . . .\r
- jr nc,l1483h ;1477 30 0a 0 .\r
- cp 006h ;1479 fe 06 . .\r
- jp z,ERROR ;147b ca 07 01 . . .\r
- add a,070h ;147e c6 70 . p\r
- jp l1400h ;1480 c3 00 14 . . .\r
-\r
-l1483h:\r
- call arg.imm_8bit ;1483 cd ff 17 . . .\r
- call assert_eol ;1486 cd d6 02 . . .\r
- ld a,(prefix_ixiy) ;1489 3a cc 18 : . .\r
- ld (iy+000h),a ;148c fd 77 00 . w .\r
- ld (iy+001h),036h ;148f fd 36 01 36 . 6 . 6\r
- ld (iy+002h),c ;1493 fd 71 02 . q .\r
- ld (iy+003h),l ;1496 fd 75 03 . u .\r
- ld c,004h ;1499 0e 04 . .\r
- ret ;149b c9 .\r
-l149ch:\r
- ld b,a ;149c 47 G\r
- call assert_comma ;149d cd be 18 . . .\r
- ld hl,t_HL.AF ;14a0 21 af 1f ! . .\r
- call sub_0318h ;14a3 cd 18 03 . . .\r
- jr c,l14c3h ;14a6 38 1b 8 .\r
- call arg.IX_IY ;14a8 cd 3d 18 . = .\r
- jr nc,l14cch ;14ab 30 1f 0 .\r
- ld a,b ;14ad 78 x\r
- cp 030h ;14ae fe 30 . 0\r
- jr nz,error6 ;14b0 20 73 s\r
- ld b,0f9h ;14b2 06 f9 . .\r
-l14b4h:\r
- call assert_eol ;14b4 cd d6 02 . . .\r
- ld a,(prefix_ixiy) ;14b7 3a cc 18 : . .\r
- ld (iy+000h),a ;14ba fd 77 00 . w .\r
- ld (iy+001h),b ;14bd fd 70 01 . p .\r
- ld c,002h ;14c0 0e 02 . .\r
- ret ;14c2 c9 .\r
-l14c3h:\r
- ld a,b ;14c3 78 x\r
- cp 030h ;14c4 fe 30 . 0\r
- jr nz,error6 ;14c6 20 5d ]\r
- ld b,0f9h ;14c8 06 f9 . .\r
- jr as.opc.noarg ;14ca 18 6f . o\r
-l14cch:\r
- ld a,(de) ;14cc 1a .\r
- cp '(' ;14cd fe 28 . (\r
- jr nz,l14e8h ;14cf 20 17 .\r
- inc de ;14d1 13 .\r
- call test_expr ;14d2 cd 09 18 . . .\r
- call test_paren_close ;14d5 cd c5 18 . . .\r
- ld a,b ;14d8 78 x\r
- cp 020h ;14d9 fe 20 .\r
- jr z,l14e3h ;14db 28 06 ( .\r
- add a,04bh ;14dd c6 4b . K\r
- ld b,a ;14df 47 G\r
- jp l13c9h ;14e0 c3 c9 13 . . .\r
-l14e3h:\r
- ld b,02ah ;14e3 06 2a . *\r
- jp as.store_3 ;14e5 c3 b3 13 . . .\r
-l14e8h:\r
- call test_expr ;14e8 cd 09 18 . . .\r
- call assert_eol ;14eb cd d6 02 . . .\r
- ld a,001h ;14ee 3e 01 > .\r
- add a,b ;14f0 80 .\r
- ld b,a ;14f1 47 G\r
- jp as.store_3 ;14f2 c3 b3 13 . . .\r
-l14f5h:\r
- call assert_comma ;14f5 cd be 18 . . .\r
- ld a,(de) ;14f8 1a .\r
- cp '(' ;14f9 fe 28 . (\r
- jr nz,l1509h ;14fb 20 0c .\r
- inc de ;14fd 13 .\r
- call test_expr ;14fe cd 09 18 . . .\r
- call test_paren_close ;1501 cd c5 18 . . .\r
- ld b,02ah ;1504 06 2a . *\r
- jp l1395h ;1506 c3 95 13 . . .\r
-l1509h:\r
- call test_expr ;1509 cd 09 18 . . .\r
- ld b,021h ;150c 06 21 . !\r
- jp l1395h ;150e c3 95 13 . . .\r
-l1511h:\r
- inc de ;1511 13 .\r
- call assert_comma ;1512 cd be 18 . . .\r
- ld b,047h ;1515 06 47 . G\r
- jr l151fh ;1517 18 06 . .\r
-l1519h:\r
- inc de ;1519 13 .\r
- call assert_comma ;151a cd be 18 . . .\r
- ld b,04fh ;151d 06 4f . O\r
-l151fh:\r
- ld a,(de) ;151f 1a .\r
- inc de ;1520 13 .\r
- cp 'A' ;1521 fe 41 . A\r
- jr z,gen.opc.ED2 ;1523 28 1f ( .\r
-error6:\r
- jp ERROR ;1525 c3 07 01 . . .\r
-\r
-l1528h:\r
- cp 020h ;1528 fe 20 .\r
- jr nc,error6 ;152a 30 f9 0 .\r
- add a,002h ;152c c6 02 . .\r
- ld b,a ;152e 47 G\r
- call test_paren_close ;152f cd c5 18 . . .\r
- call assert_comma ;1532 cd be 18 . . .\r
- ld a,(de) ;1535 1a .\r
- cp 'A' ;1536 fe 41 . A\r
- jr nz,error6 ;1538 20 eb .\r
- inc de ;153a 13 .\r
-as.opc.noarg:\r
- call assert_eol ;153b cd d6 02 . . .\r
- ld (iy+000h),b ;153e fd 70 00 . p .\r
- ld c,001h ;1541 0e 01 . .\r
- ret ;1543 c9 .\r
-\r
-gen.opc.ED2:\r
- call assert_eol ;1544 cd d6 02 . . .\r
- ld (iy+000h),0edh ;1547 fd 36 00 ed . 6 . .\r
- ld (iy+001h),b ;154b fd 70 01 . p .\r
- ld c,002h ;154e 0e 02 . .\r
- ret ;1550 c9 .\r
-\r
-as.ADC_SBC:\r
- ld hl,t_HL.AF ;1551 21 af 1f ! . .\r
- call sub_0318h ;1554 cd 18 03 . . .\r
- jr nc,as.AND_CP_OR_SUB_XOR ;1557 30 4f 0 O\r
- call assert_comma ;1559 cd be 18 . . .\r
- call arg.ww ;155c cd 1b 18 . . .\r
- jp nc,ERROR ;155f d2 07 01 . . .\r
- push af ;1562 f5 .\r
- ld a,b ;1563 78 x\r
- cp 088h ;1564 fe 88 . .\r
- ld b,04ah ;1566 06 4a . J\r
- jr z,l156ch ;1568 28 02 ( .\r
- ld b,042h ;156a 06 42 . B\r
-l156ch:\r
- pop af ;156c f1 .\r
- add a,b ;156d 80 .\r
-l156eh:\r
- ld b,a ;156e 47 G\r
- jr gen.opc.ED2 ;156f 18 d3 . .\r
-as.ADD:\r
- ld hl,t_HL.AF ;1571 21 af 1f ! . .\r
- call sub_0318h ;1574 cd 18 03 . . .\r
- jr c,l159ah ;1577 38 21 8 !\r
- call arg.IX_IY ;1579 cd 3d 18 . = .\r
- jr nc,as.AND_CP_OR_SUB_XOR ;157c 30 2a 0 *\r
- call assert_comma ;157e cd be 18 . . .\r
- ld hl,t_BC.DE.IX.SP ;1581 21 bd 1f ! . .\r
- ld a,(prefix_ixiy) ;1584 3a cc 18 : . .\r
- cp 0fdh ;1587 fe fd . .\r
- jr nz,l158eh ;1589 20 03 .\r
- ld hl,t_BC.DE.IY.SP ;158b 21 b4 1f ! . .\r
-l158eh:\r
- call arg.reg_16bit ;158e cd 18 18 . . .\r
- jp nc,ERROR ;1591 d2 07 01 . . .\r
- add a,009h ;1594 c6 09 . .\r
-l1596h:\r
- ld b,a ;1596 47 G\r
- jp l14b4h ;1597 c3 b4 14 . . .\r
-l159ah:\r
- call assert_comma ;159a cd be 18 . . .\r
- call arg.ww ;159d cd 1b 18 . . .\r
- jp nc,ERROR ;15a0 d2 07 01 . . .\r
- add a,009h ;15a3 c6 09 . .\r
- jp l13ech ;15a5 c3 ec 13 . . .\r
-as.AND_CP_OR_SUB_XOR:\r
- ld a,(de) ;15a8 1a .\r
- cp 'A' ;15a9 fe 41 . A\r
- jr nz,l15b8h ;15ab 20 0b .\r
- push de ;15ad d5 .\r
- inc de ;15ae 13 .\r
- call next_arg ;15af cd ca 02 . . .\r
- jr z,l15b7h ;15b2 28 03 ( .\r
- pop de ;15b4 d1 .\r
- jr l15b8h ;15b5 18 01 . .\r
-l15b7h:\r
- pop af ;15b7 f1 .\r
-l15b8h:\r
- call arg.r_HL_A ;15b8 cd 2e 18 . . .\r
- jr c,l15cbh ;15bb 38 0e 8 .\r
- call arg.IDX_displcmnt ;15bd cd 55 18 . U .\r
- jr c,l15cfh ;15c0 38 0d 8 .\r
- call arg.imm_8bit ;15c2 cd ff 17 . . .\r
- ld a,b ;15c5 78 x\r
- add a,046h ;15c6 c6 46 . F\r
- jp l143fh ;15c8 c3 3f 14 . ? .\r
-l15cbh:\r
- add a,b ;15cb 80 .\r
- jp l13ech ;15cc c3 ec 13 . . .\r
-l15cfh:\r
- ld a,b ;15cf 78 x\r
- add a,006h ;15d0 c6 06 . .\r
- jp l1400h ;15d2 c3 00 14 . . .\r
-\r
-as.SHIFTOP:\r
- call arg.r_HL_A ;15d5 cd 2e 18 . . .\r
- jr c,l15fah ;15d8 38 20 8\r
- call arg.IDX_displcmnt ;15da cd 55 18 . U .\r
- jp nc,ERROR ;15dd d2 07 01 . . .\r
- ld a,b ;15e0 78 x\r
- add a,006h ;15e1 c6 06 . .\r
- ld b,a ;15e3 47 G\r
-l15e4h:\r
- call assert_eol ;15e4 cd d6 02 . . .\r
- ld a,(prefix_ixiy) ;15e7 3a cc 18 : . .\r
- ld (iy+000h),a ;15ea fd 77 00 . w .\r
- ld (iy+001h),0cbh ;15ed fd 36 01 cb . 6 . .\r
- ld (iy+002h),c ;15f1 fd 71 02 . q .\r
- ld (iy+003h),b ;15f4 fd 70 03 . p .\r
- ld c,004h ;15f7 0e 04 . .\r
- ret ;15f9 c9 .\r
-\r
-l15fah:\r
- add a,b ;15fa 80 .\r
-l15fbh:\r
- ld b,a ;15fb 47 G\r
- call assert_eol ;15fc cd d6 02 . . .\r
- ld (iy+001h),b ;15ff fd 70 01 . p .\r
- ld (iy+000h),0cbh ;1602 fd 36 00 cb . 6 . .\r
- ld c,002h ;1606 0e 02 . .\r
- ret ;1608 c9 .\r
-\r
-as.BITOP:\r
- call arg.bit ;1609 cd d3 17 . . .\r
- call assert_comma ;160c cd be 18 . . .\r
- call arg.r_HL_A ;160f cd 2e 18 . . .\r
- jr c,l1624h ;1612 38 10 8 .\r
- call arg.IDX_displcmnt ;1614 cd 55 18 . U .\r
- jp nc,ERROR ;1617 d2 07 01 . . .\r
- ld a,l ;161a 7d }\r
- rlca ;161b 07 .\r
- rlca ;161c 07 .\r
- rlca ;161d 07 .\r
- add a,006h ;161e c6 06 . .\r
- add a,b ;1620 80 .\r
- ld b,a ;1621 47 G\r
- jr l15e4h ;1622 18 c0 . .\r
-l1624h:\r
- add a,b ;1624 80 .\r
- ld b,a ;1625 47 G\r
- ld a,l ;1626 7d }\r
- rlca ;1627 07 .\r
- rlca ;1628 07 .\r
- rlca ;1629 07 .\r
- add a,b ;162a 80 .\r
- jr l15fbh ;162b 18 ce . .\r
-\r
-as.CALL:\r
- push de ;162d d5 .\r
- call arg.cc_ZCPS ;162e cd a5 18 . . .\r
- jr nc,l163ch ;1631 30 09 0 .\r
- add a,b ;1633 80 .\r
- ld b,a ;1634 47 G\r
- call next_arg ;1635 cd ca 02 . . .\r
- jr z,l163eh ;1638 28 04 ( .\r
- pop de ;163a d1 .\r
- push de ;163b d5 .\r
-l163ch:\r
- ld b,0cdh ;163c 06 cd . .\r
-l163eh:\r
- pop af ;163e f1 .\r
- call test_expr ;163f cd 09 18 . . .\r
- jp as.store_3 ;1642 c3 b3 13 . . .\r
-\r
-as.RET:\r
- call arg.cc_ZCPS ;1645 cd a5 18 . . .\r
- jr nc,l164eh ;1648 30 04 0 .\r
- add a,b ;164a 80 .\r
- ld b,a ;164b 47 G\r
- jr l1650h ;164c 18 02 . .\r
-l164eh:\r
- ld b,0c9h ;164e 06 c9 . .\r
-l1650h:\r
- jp as.opc.noarg ;1650 c3 3b 15 . ; .\r
-\r
-as.JP:\r
- push de ;1653 d5 .\r
- call arg.cc_ZCPS ;1654 cd a5 18 . . .\r
- jr c,l1666h ;1657 38 0d 8 .\r
-l1659h:\r
- pop de ;1659 d1 .\r
- ld hl,l168ch ;165a 21 8c 16 ! . .\r
- call sub_030ah ;165d cd 0a 03 . . .\r
- jr c,l1674h ;1660 38 12 8 .\r
- ld b,0c3h ;1662 06 c3 . .\r
- jr l166eh ;1664 18 08 . .\r
-\r
-l1666h:\r
- add a,b ;1666 80 .\r
- ld b,a ;1667 47 G\r
- call next_arg ;1668 cd ca 02 . . .\r
- jr nz,l1659h ;166b 20 ec .\r
- pop af ;166d f1 .\r
-l166eh:\r
- call test_expr ;166e cd 09 18 . . .\r
- jp as.store_3 ;1671 c3 b3 13 . . .\r
-l1674h:\r
- call assert_eol ;1674 cd d6 02 . . .\r
- ld a,b ;1677 78 x\r
- and a ;1678 a7 .\r
- jr nz,l1680h ;1679 20 05 .\r
- ld b,0e9h ;167b 06 e9 . .\r
- jp as.opc.noarg ;167d c3 3b 15 . ; .\r
-l1680h:\r
- ld b,0ddh ;1680 06 dd . .\r
- dec a ;1682 3d =\r
- jr z,l1687h ;1683 28 02 ( .\r
- ld b,0fdh ;1685 06 fd . .\r
-l1687h:\r
- ld l,0e9h ;1687 2e e9 . .\r
- jp as.store_2 ;1689 c3 40 14 . @ .\r
-\r
-l168ch:\r
- DC '(HL)'\r
- DC '(IX)'\r
- DC '(IY)'\r
- DB 0\r
+;cmd_A:\r
\r
-as.DJNZ:\r
- call next_arg ;1699 cd ca 02 . . .\r
- ld b,010h ;169c 06 10 . .\r
- jr l16aeh ;169e 18 0e . .\r
-as.JR:\r
- call arg.cc_ZC ;16a0 cd ac 18 . . .\r
- jr c,l16a9h ;16a3 38 04 8 .\r
- ld b,018h ;16a5 06 18 . .\r
- jr l16aeh ;16a7 18 05 . .\r
-l16a9h:\r
- add a,b ;16a9 80 .\r
- ld b,a ;16aa 47 G\r
- call assert_comma ;16ab cd be 18 . . .\r
-l16aeh:\r
- call arg.j_displ ;16ae cd dc 17 . . .\r
- jp as.store_2 ;16b1 c3 40 14 . @ .\r
-\r
-as.IM:\r
- call arg.imm_8bit ;16b4 cd ff 17 . . .\r
- ld a,l ;16b7 7d }\r
- cp 003h ;16b8 fe 03 . .\r
- jr nc,error2 ;16ba 30 5c 0 \\r
- and a ;16bc a7 .\r
- jr z,l16c7h ;16bd 28 08 ( .\r
- ld b,056h ;16bf 06 56 . V\r
- cp 001h ;16c1 fe 01 . .\r
- jr z,l16c7h ;16c3 28 02 ( .\r
- ld b,05eh ;16c5 06 5e . ^\r
-l16c7h:\r
- jp gen.opc.ED2 ;16c7 c3 44 15 . D .\r
-\r
-as.RST:\r
- call arg.imm_8bit ;16ca cd ff 17 . . .\r
- ld a,l ;16cd 7d }\r
- push af ;16ce f5 .\r
- add a,b ;16cf 80 .\r
- ld b,a ;16d0 47 G\r
- pop af ;16d1 f1 .\r
- and 0c7h ;16d2 e6 c7 . .\r
- jr nz,error2 ;16d4 20 42 B\r
- jp as.opc.noarg ;16d6 c3 3b 15 . ; .\r
-\r
-as.POP_PUSH:\r
- call arg.IX_IY ;16d9 cd 3d 18 . = .\r
- jr c,l16e7h ;16dc 38 09 8 .\r
- call arg.zz ;16de cd 12 18 . . .\r
- jr nc,error2 ;16e1 30 35 0 5\r
- add a,b ;16e3 80 .\r
- jp l13ech ;16e4 c3 ec 13 . . .\r
-l16e7h:\r
- ld a,b ;16e7 78 x\r
- add a,020h ;16e8 c6 20 .\r
- jp l1596h ;16ea c3 96 15 . . .\r
-\r
-as.IN:\r
- call arg.r_HL_A ;16ed cd 2e 18 . . .\r
- jr nc,error2 ;16f0 30 26 0 &\r
- cp 006h ;16f2 fe 06 . .\r
- jr z,error2 ;16f4 28 22 ( "\r
- rlca ;16f6 07 .\r
- rlca ;16f7 07 .\r
- rlca ;16f8 07 .\r
- add a,b ;16f9 80 .\r
- ld b,a ;16fa 47 G\r
- cp 078h ;16fb fe 78 . x\r
- jr nz,l170fh ;16fd 20 10 .\r
- call assert_comma ;16ff cd be 18 . . .\r
- call sub_171bh ;1702 cd 1b 17 . . .\r
- jr c,l1715h ;1705 38 0e 8 .\r
- call arg.addr_8bit ;1707 cd f3 17 . . .\r
- ld b,0dbh ;170a 06 db . .\r
- jp as.store_2 ;170c c3 40 14 . @ .\r
-l170fh:\r
- call assert_comma ;170f cd be 18 . . .\r
- call sub_171bh ;1712 cd 1b 17 . . .\r
-l1715h:\r
- jp c,gen.opc.ED2 ;1715 da 44 15 . D .\r
-error2:\r
- jp ERROR ;1718 c3 07 01 . . .\r
-\r
-sub_171bh:\r
- ld hl,t__C_ ;171b 21 f4 1f ! . .\r
- jp sub_0318h ;171e c3 18 03 . . .\r
-\r
-as.OUT:\r
- call sub_171bh ;1721 cd 1b 17 . . .\r
- jr nc,l1739h ;1724 30 13 0 .\r
- call assert_comma ;1726 cd be 18 . . .\r
- call arg.r_HL_A ;1729 cd 2e 18 . . .\r
- jr nc,error2 ;172c 30 ea 0 .\r
- cp 006h ;172e fe 06 . .\r
- jr z,error2 ;1730 28 e6 ( .\r
- rlca ;1732 07 .\r
- rlca ;1733 07 .\r
- rlca ;1734 07 .\r
- add a,b ;1735 80 .\r
- jp l156eh ;1736 c3 6e 15 . n .\r
-\r
-l1739h:\r
- call arg.addr_8bit ;1739 cd f3 17 . . .\r
- call assert_comma ;173c cd be 18 . . .\r
- cp 'A' ;173f fe 41 . A\r
- jr nz,error2 ;1741 20 d5 .\r
- inc de ;1743 13 .\r
- ld b,0d3h ;1744 06 d3 . .\r
- jp as.store_2 ;1746 c3 40 14 . @ .\r
-\r
-as.EX:\r
- ld hl,b_176d_start ;1749 21 6d 17 ! m .\r
- call sub_030ah ;174c cd 0a 03 . . .\r
- jp nc,ERROR ;174f d2 07 01 . . .\r
- ld c,b ;1752 48 H\r
- call assert_eol ;1753 cd d6 02 . . .\r
- ld b,000h ;1756 06 00 . .\r
- ld hl,l178eh ;1758 21 8e 17 ! . .\r
- add hl,bc ;175b 09 .\r
- add hl,bc ;175c 09 .\r
- ld a,(hl) ;175d 7e ~\r
- ld (iy+000h),a ;175e fd 77 00 . w .\r
- ld c,001h ;1761 0e 01 . .\r
- inc hl ;1763 23 #\r
- ld a,(hl) ;1764 7e ~\r
- and a ;1765 a7 .\r
- ret z ;1766 c8 .\r
- ld (iy+001h),a ;1767 fd 77 01 . w .\r
- ld c,002h ;176a 0e 02 . .\r
- ret ;176c c9 .\r
-\r
-b_176d_start:\r
- DC 'AF,AF'''\r
-l1773h:\r
- DC 'DE,HL'\r
- DC '(SP),HL'\r
- DC '(SP),IX'\r
- DC '(SP),IY'\r
- db 0\r
-l178eh:\r
- db 008h,000h ;178e 08 .\r
- db 0ebh,000h ;1790 eb .\r
- db 0e3h,000h ;1792 e3 .\r
- db 0ddh,0e3h ;1794 dd .\r
- db 0fdh,0e3h ;1796 fd .\r
-\r
-as.DEC_INC:\r
- call arg.IX_IY ;1798 cd 3d 18 . = .\r
- jr c,l17b3h ;179b 38 16 8 .\r
- call arg.ww ;179d cd 1b 18 . . .\r
- jr c,l17bfh ;17a0 38 1d 8 .\r
- call arg.r_HL_A ;17a2 cd 2e 18 . . .\r
- jr c,l17cch ;17a5 38 25 8 %\r
- call arg.IDX_displcmnt ;17a7 cd 55 18 . U .\r
- jp nc,ERROR ;17aa d2 07 01 . . .\r
- ld a,b ;17ad 78 x\r
- add a,030h ;17ae c6 30 . 0\r
- jp l1400h ;17b0 c3 00 14 . . .\r
-l17b3h:\r
- ld a,b ;17b3 78 x\r
- ld b,023h ;17b4 06 23 . #\r
- cp 004h ;17b6 fe 04 . .\r
- jr z,l17bch ;17b8 28 02 ( .\r
- ld b,02bh ;17ba 06 2b . +\r
-l17bch:\r
- jp l14b4h ;17bc c3 b4 14 . . .\r
-l17bfh:\r
- push af ;17bf f5 .\r
- ld a,b ;17c0 78 x\r
- ld b,003h ;17c1 06 03 . .\r
- cp 004h ;17c3 fe 04 . .\r
- jr z,l17c9h ;17c5 28 02 ( .\r
- ld b,00bh ;17c7 06 0b . .\r
-l17c9h:\r
- pop af ;17c9 f1 .\r
- jr l17cfh ;17ca 18 03 . .\r
-l17cch:\r
- rlca ;17cc 07 .\r
- rlca ;17cd 07 .\r
- rlca ;17ce 07 .\r
-l17cfh:\r
- add a,b ;17cf 80 .\r
- jp l13ech ;17d0 c3 ec 13 . . .\r
-\r
-arg.bit:\r
- call arg.imm_8bit ;17d3 cd ff 17 . . .\r
- ld a,l ;17d6 7d }\r
- cp 008h ;17d7 fe 08 . .\r
- jr nc,error3 ;17d9 30 34 0 4\r
- ret ;17db c9 .\r
-\r
-arg.j_displ:\r
- call test_expr ;17dc cd 09 18 . . .\r
- push bc ;17df c5 .\r
- push iy ;17e0 fd e5 . .\r
- pop bc ;17e2 c1 .\r
- and a ;17e3 a7 .\r
- sbc hl,bc ;17e4 ed 42 . B\r
- dec hl ;17e6 2b +\r
- dec hl ;17e7 2b +\r
- pop bc ;17e8 c1 .\r
- call sub_1802h ;17e9 cd 02 18 . . .\r
- ld a,h ;17ec 7c |\r
- xor l ;17ed ad .\r
- bit 7,a ;17ee cb 7f . \7f\r
- jr nz,error3 ;17f0 20 1d .\r
- ret ;17f2 c9 .\r
-\r
-arg.addr_8bit:\r
- ld a,(de) ;17f3 1a .\r
- cp '(' ;17f4 fe 28 . (\r
- jr nz,arg.imm_8bit ;17f6 20 07 .\r
- inc de ;17f8 13 .\r
- call arg.imm_8bit ;17f9 cd ff 17 . . .\r
- jp test_paren_close ;17fc c3 c5 18 . . .\r
-\r
-arg.imm_8bit:\r
- call test_expr ;17ff cd 09 18 . . .\r
-sub_1802h:\r
- ld a,h ;1802 7c |\r
- and a ;1803 a7 .\r
- ret z ;1804 c8 .\r
- inc a ;1805 3c <\r
- ret z ;1806 c8 .\r
- jr error3 ;1807 18 06 . .\r
-\r
-test_expr:\r
- push bc ;1809 c5 .\r
- call expr ;180a cd be 03 . . .\r
- pop bc ;180d c1 .\r
- ret nc ;180e d0 .\r
-error3:\r
- jp ERROR ;180f c3 07 01 . . .\r
-\r
-arg.zz:\r
- push hl ;1812 e5 .\r
- ld hl,t_BC.DE.HL.AF ;1813 21 ab 1f ! . .\r
- jr l181fh ;1816 18 07 . .\r
-\r
-arg.reg_16bit:\r
- push hl ;1818 e5 .\r
- jr l181fh ;1819 18 04 . .\r
-\r
-arg.ww:\r
- push hl ;181b e5 .\r
- ld hl,t_BC.DE.HL.SP ;181c 21 a2 1f ! . .\r
-l181fh:\r
- push bc ;181f c5 .\r
- call sub_030ah ;1820 cd 0a 03 . . .\r
- jr nc,l182bh ;1823 30 06 0 .\r
- ld a,b ;1825 78 x\r
- rlca ;1826 07 .\r
- rlca ;1827 07 .\r
- rlca ;1828 07 .\r
- rlca ;1829 07 .\r
- scf ;182a 37 7\r
-l182bh:\r
- pop bc ;182b c1 .\r
- pop hl ;182c e1 .\r
- ret ;182d c9 .\r
-\r
-arg.r_HL_A:\r
- call skipbl ;182e cd bf 02 . . .\r
- push bc ;1831 c5 .\r
- push hl ;1832 e5 .\r
- ld hl,t_BCDEHL_HL_A ;1833 21 96 1f ! . .\r
- call sub_030ah ;1836 cd 0a 03 . . .\r
- ld a,b ;1839 78 x\r
- pop hl ;183a e1 .\r
- pop bc ;183b c1 .\r
- ret ;183c c9 .\r
-\r
-arg.IX_IY:\r
- push hl ;183d e5 .\r
- push bc ;183e c5 .\r
- ld hl,t_IX.IY ;183f 21 c8 1f ! . .\r
- call sub_030ah ;1842 cd 0a 03 . . .\r
- jr nc,l1852h ;1845 30 0b 0 .\r
- ld a,0ddh ;1847 3e dd > .\r
- dec b ;1849 05 .\r
- jr nz,l184eh ;184a 20 02 .\r
- ld a,0fdh ;184c 3e fd > .\r
-l184eh:\r
- ld (prefix_ixiy),a ;184e 32 cc 18 2 . .\r
- scf ;1851 37 7\r
-l1852h:\r
- pop bc ;1852 c1 .\r
- pop hl ;1853 e1 .\r
- ret ;1854 c9 .\r
-\r
-arg.IDX_displcmnt:\r
- push hl ;1855 e5 .\r
- push bc ;1856 c5 .\r
- ld a,(de) ;1857 1a .\r
- cp '(' ;1858 fe 28 . (\r
- jr nz,l18a1h ;185a 20 45 E\r
- push de ;185c d5 .\r
- inc de ;185d 13 .\r
- ld hl,t_IX.IY ;185e 21 c8 1f ! . .\r
- call sub_030ah ;1861 cd 0a 03 . . .\r
- jr nc,l18a0h ;1864 30 3a 0 :\r
- pop af ;1866 f1 .\r
- ld a,0ddh ;1867 3e dd > .\r
- dec b ;1869 05 .\r
- jr nz,l186eh ;186a 20 02 .\r
- ld a,0fdh ;186c 3e fd > .\r
-l186eh:\r
- ld (prefix_ixiy),a ;186e 32 cc 18 2 . .\r
- ld a,(de) ;1871 1a .\r
- cp '+' ;1872 fe 2b . +\r
- jr z,l1882h ;1874 28 0c ( .\r
- cp ')' ;1876 fe 29 . )\r
- ld hl,0 ;1878 21 00 00 ! . .\r
- jr z,l189ah ;187b 28 1d ( .\r
- cp '-' ;187d fe 2d . -\r
- jp nz,ERROR ;187f c2 07 01 . . .\r
-l1882h:\r
- push af ;1882 f5 .\r
- inc de ;1883 13 .\r
- call arg.imm_8bit ;1884 cd ff 17 . . .\r
- pop af ;1887 f1 .\r
- cp '+' ;1888 fe 2b . +\r
- jr z,l1894h ;188a 28 08 ( .\r
- ld b,h ;188c 44 D\r
- ld c,l ;188d 4d M\r
- ld hl,0 ;188e 21 00 00 ! . .\r
- and a ;1891 a7 .\r
- sbc hl,bc ;1892 ed 42 . B\r
-l1894h:\r
- ld a,(de) ;1894 1a .\r
- cp ')' ;1895 fe 29 . )\r
- jp nz,ERROR ;1897 c2 07 01 . . .\r
-l189ah:\r
- inc de ;189a 13 .\r
- pop bc ;189b c1 .\r
- ld c,l ;189c 4d M\r
- pop hl ;189d e1 .\r
- scf ;189e 37 7\r
- ret ;189f c9 .\r
-l18a0h:\r
- pop de ;18a0 d1 .\r
-l18a1h:\r
- pop bc ;18a1 c1 .\r
- pop hl ;18a2 e1 .\r
- and a ;18a3 a7 .\r
- ret ;18a4 c9 .\r
-\r
-arg.cc_ZCPS:\r
- ld hl,t_tstfl_ZCPS ;18a5 21 dc 1f ! . .\r
- ld c,007h ;18a8 0e 07 . .\r
- jr l18b1h ;18aa 18 05 . .\r
-\r
-arg.cc_ZC:\r
- ld hl,t_tstfl_ZC ;18ac 21 cd 1f ! . .\r
- ld c,003h ;18af 0e 03 . .\r
-l18b1h:\r
- push bc ;18b1 c5 .\r
- call sub_030ah ;18b2 cd 0a 03 . . .\r
- ld a,b ;18b5 78 x\r
- pop bc ;18b6 c1 .\r
- ret nc ;18b7 d0 .\r
- and c ;18b8 a1 .\r
- rlca ;18b9 07 .\r
- rlca ;18ba 07 .\r
- rlca ;18bb 07 .\r
- scf ;18bc 37 7\r
- ret ;18bd c9 .\r
-\r
-assert_comma:\r
- call next_arg ;18be cd ca 02 . . .\r
- ret z ;18c1 c8 .\r
-l18c2h:\r
- jp ERROR ;18c2 c3 07 01 . . .\r
-\r
-test_paren_close:\r
- ld a,(de) ;18c5 1a .\r
- cp ')' ;18c6 fe 29 . )\r
- jr nz,l18c2h ;18c8 20 f8 .\r
- inc de ;18ca 13 .\r
- ret ;18cb c9 .\r
+;-------------------------------------------------------------------------------\r
+; >>L [startaddr] [endaddr]\r
+; List disassembled code\r
\r
cmd_L:\r
- ld hl,cmd_L ;18cd 21 cd 18 ! . .\r
- ld (cmd_rpt),hl ;18d0 22 68 00 " h .\r
- call expr ;18d3 cd be 03 . . .\r
- jr nc,l18dbh ;18d6 30 03 0 .\r
- ld hl,(last_L) ;18d8 2a f9 1f * . .\r
+ ld (cmd_rpt),hl\r
+ call expr\r
+ jr nc,l18dbh\r
+ ld hl,(last_L)\r
l18dbh:\r
- push hl ;18db e5 .\r
- pop iy ;18dc fd e1 . .\r
- call next_arg ;18de cd ca 02 . . .\r
- call get_range ;18e1 cd 9a 03 . . .\r
- jr nc,l1905h ;18e4 30 1f 0 .\r
- call assert_eol ;18e6 cd d6 02 . . .\r
- ld b,16 ;18e9 06 10 . .\r
+ call next_arg\r
+ call get_range\r
+ jr nc,l1905h\r
+ call assert_eol\r
+ ld b,16\r
l18ebh:\r
- push bc ;18eb c5 .\r
- push iy ;18ec fd e5 . .\r
- pop hl ;18ee e1 .\r
- push hl ;18ef e5 .\r
- call p_disas_line ;18f0 cd 2d 19 . - .\r
- call crlf ;18f3 cd a3 02 . . .\r
- pop iy ;18f6 fd e1 . .\r
- ld c,b ;18f8 48 H\r
- ld b,0 ;18f9 06 00 . .\r
- add iy,bc ;18fb fd 09 . .\r
- ld (last_L),iy ;18fd fd 22 f9 1f . " . .\r
- pop bc ;1901 c1 .\r
- djnz l18ebh ;1902 10 e7 . .\r
- ret ;1904 c9 .\r
+ push bc\r
+ call cmdl_p_line\r
+ pop bc\r
+ djnz l18ebh\r
+ ret\r
+\r
l1905h:\r
- call assert_eol ;1905 cd d6 02 . . .\r
- ld h,b ;1908 60 `\r
- ld l,c ;1909 69 i\r
- ld a,b ;190a 78 x\r
- or c ;190b b1 .\r
- jr nz,l190fh ;190c 20 01 .\r
- dec hl ;190e 2b +\r
+ call assert_eol\r
+ ld d,h\r
+ ld e,l\r
+ add hl,bc\r
+ ex de,hl\r
l190fh:\r
- push hl ;190f e5 .\r
- push iy ;1910 fd e5 . .\r
- pop hl ;1912 e1 .\r
- push hl ;1913 e5 .\r
- call p_disas_line ;1914 cd 2d 19 . - .\r
- call crlf ;1917 cd a3 02 . . .\r
- pop iy ;191a fd e1 . .\r
- ld e,b ;191c 58 X\r
- ld d,000h ;191d 16 00 . .\r
- add iy,de ;191f fd 19 . .\r
- ld (last_L),iy ;1921 fd 22 f9 1f . " . .\r
- pop hl ;1925 e1 .\r
- and a ;1926 a7 .\r
- sbc hl,de ;1927 ed 52 . R\r
- ret z ;1929 c8 .\r
- ret c ;192a d8 .\r
- jr l190fh ;192b 18 e2 . .\r
-\r
-p_disas_line:\r
- call out.hl.@ ;192d cd a4 01 . . .\r
- call z,outbl ;1930 cc 9f 02 . . .\r
- call outbl ;1933 cd 9f 02 . . .\r
- sub a ;1936 97 .\r
- ld (con_col),a ;1937 32 72 02 2 r .\r
- call p_disas_instr ;193a cd 65 19 . e .\r
- and a ;193d a7 .\r
- ret z ;193e c8 .\r
-\r
-l193fh:\r
- call outbl ;193f cd 9f 02 . . .\r
- ld a,(con_col) ;1942 3a 72 02 : r .\r
- cp 16 ;1945 fe 10 . .\r
- jr c,l193fh ;1947 38 f6 8 .\r
-\r
-p_offset:\r
- ld de,(offs.@) ;1949 ed 5b 64 00 . [ d .\r
- ld a,d ;194d 7a z\r
- or e ;194e b3 .\r
- ret z ;194f c8 .\r
- call p_char_lparen ;1952 cd 5d 02 . ] .\r
- ld a,'@' ;1955 3e 40 > @\r
- call outchar ;1957 cd 5d 02 . ] .\r
- and a ;195a a7 .\r
- sbc hl,de ;195b ed 52 . R\r
- call out_hl ;195d cd 13 02 . . .\r
- jp out_rparen ;1962 c3 5d 02 . ] .\r
+ push de\r
+ call cmdl_p_line\r
+ pop de\r
+ call cp_hl_de\r
+ jr c,l190fh\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+cmdl_p_line:\r
+ push hl\r
+ call out_hl\r
+ call outbl2\r
+ sub a\r
+ ld (con_col),a\r
+ push hl\r
+ pop iy\r
+ call p_disas_instr\r
+ call crlf\r
+ pop hl\r
+ ld c,b\r
+ ld b,0\r
+ add hl,bc\r
+ ld (last_L),hl\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
p_disas_instr:\r
- sub a ;1965 97 .\r
- ld (l1ffdh),a ;1966 32 fd 1f 2 . .\r
- call disas_get_instrlen ;1969 cd 8c 19 . . .\r
- jr nc,l197fh ;196c 30 11 0 .\r
- push bc ;196e c5 .\r
- call p_mnemonic ;196f cd b9 1e . . .\r
- ex de,hl ;1972 eb .\r
- call call_hl ;1973 cd c1 19 . . .\r
- pop bc ;1976 c1 .\r
- ld a,(l1ffdh) ;1977 3a fd 1f : . .\r
- ld hl,(l1ffbh) ;197a 2a fb 1f * . .\r
- scf ;197d 37 7\r
- ret ;197e c9 .\r
+ call disas_get_instrlen\r
+ jr nc,l197fh\r
+ push bc\r
+ ld a,(con_col)\r
+ add a,5\r
+ ld c,a\r
+ call pstr ;print mnemonic\r
+ call p_goto_col\r
+ call pr_instr_args ;print arguments\r
+ pop bc\r
+ scf\r
+ ret\r
\r
l197fh:\r
call pstr_inl\r
DC '???'\r
- ld b,001h\r
+ ld b,1\r
sub a\r
ret\r
\r
disas_get_instrlen:\r
- sub a ;198c 97 .\r
- ld (isprefix_ixiy),a ;198d 32 f8 1f 2 . .\r
- ld a,(iy+000h) ;1990 fd 7e 00 . ~ .\r
- cp 0edh ;1993 fe ed . .\r
- jp z,disas_pfx.ED ;1995 ca 19 1a . . .\r
- cp 0ddh ;1998 fe dd . .\r
- jr z,l19abh ;199a 28 0f ( .\r
- cp 0fdh ;199c fe fd . .\r
- jr z,l19afh ;199e 28 0f ( .\r
+ sub a\r
+ ld (isprefix_ixiy),a\r
+ ld a,(iy+000h)\r
+ cp 0edh\r
+ jr z,disas_pfx.ED\r
+ cp 0ddh\r
+ jr z,l19abh\r
+ cp 0fdh\r
+ jr z,l19afh\r
sub_19a0h:\r
- ld a,(iy+000h) ;19a0 fd 7e 00 . ~ .\r
- cp 0cbh ;19a3 fe cb . .\r
- jp z,disas_pfx.CB ;19a5 ca 36 1a . 6 .\r
- jp disas_nopfx ;19a8 c3 4d 1a . M .\r
+ ld a,(iy+000h)\r
+ cp 0cbh\r
+ jr z,disas_pfx.CB\r
+ jr disas_nopfx\r
l19abh:\r
- ld a,1 ;19ab 3e 01 > .\r
- jr l19b1h ;19ad 18 02 . .\r
+ ld a,1\r
+ jr l19b1h\r
l19afh:\r
- ld a,2 ;19af 3e 02 > .\r
+ ld a,2\r
l19b1h:\r
- ld (isprefix_ixiy),a ;19b1 32 f8 1f 2 . .\r
- call disas_pfx.DDFD ;19b4 cd c2 19 . . .\r
- ret nc ;19b7 d0 .\r
- push bc ;19b8 c5 .\r
- call sub_19a0h ;19b9 cd a0 19 . . .\r
- pop af ;19bc f1 .\r
- add a,b ;19bd 80 .\r
- ld b,a ;19be 47 G\r
- scf ;19bf 37 7\r
- ret ;19c0 c9 .\r
+ ld (isprefix_ixiy),a\r
+ call disas_pfx.DDFD\r
+ ret nc\r
+ push bc\r
+ call sub_19a0h\r
+ pop af\r
+ add a,b\r
+ ld b,a\r
+ scf\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+disas_nopfx:\r
+ ld hl,b_1b54_start ;2 byte opcodes\r
+ call lookup_op_arg\r
+ ld b,2\r
+ ret c\r
+ ld hl,b_1ab6_start ;1 byte opcodes (no parameters)\r
+ call lookup_op\r
+ ld b,1\r
+ ret c\r
+ ld hl,b_1ad1_start ;1 byte opcodes\r
+ call lookup_op_arg\r
+ ld b,1\r
+ ret c\r
+ ld hl,b_1b9b_start ;3 byte opcodes\r
+ call lookup_op_arg\r
+ ld b,3\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+disas_pfx.ED:\r
+ inc iy\r
+ ld hl,l228bh\r
+ call lookup_op_arg\r
+ ld b,3\r
+ ret c\r
+ ld hl,b_1c40_start\r
+ call lookup_op_arg\r
+ ld b,4\r
+ ret c\r
+\r
+ ld hl,b_1bc9_start ;1 byte opcode, no arguments\r
+ call lookup_op\r
+ jr c,da_ed1\r
+\r
+ ld hl,b_1bf4_start\r
+ call lookup_op_arg\r
+ ret nc\r
+\r
+ ld a,e\r
+ cp a_noarg\r
+ jr nz,da_ed0\r
+ ld c,(iy+0)\r
+ ld a,c\r
+ rra\r
+ and 0ch\r
+ ld b,a\r
+ ld a,c\r
+ and 03h\r
+ call str_sel_ab\r
+\r
+da_ed0:\r
+ scf\r
+da_ed1:\r
+ ld b,2\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+disas_pfx.CB:\r
+ push iy\r
+ inc iy\r
+ ld a,(isprefix_ixiy)\r
+ and a\r
+ jr z,l1a42h\r
+ inc iy\r
+l1a42h:\r
+ ld hl,b_1c55_start\r
+ call lookup_op_arg\r
+ pop iy\r
+ ld b,2\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
disas_pfx.DDFD:\r
- inc iy ;19c2 fd 23 . #\r
- ld hl,b_19ef_start ;19c4 21 ef 19 ! . .\r
- call test_DDFD ;19c7 cd 8c 1a . . .\r
- ld b,002h ;19ca 06 02 . .\r
- ret c ;19cc d8 .\r
- ld hl,l1a0ah ;19cd 21 0a 1a ! . .\r
- call test_DDFD ;19d0 cd 8c 1a . . .\r
- ld b,001h ;19d3 06 01 . .\r
- ret c ;19d5 d8 .\r
- ld a,(iy+000h) ;19d6 fd 7e 00 . ~ .\r
- cp 0cbh ;19d9 fe cb . .\r
- jr nz,l19edh ;19db 20 10 .\r
- ld a,(iy+002h) ;19dd fd 7e 02 . ~ .\r
- cp 036h ;19e0 fe 36 . 6\r
- ret z ;19e2 c8 .\r
- and 007h ;19e3 e6 07 . .\r
- cp 006h ;19e5 fe 06 . .\r
- jr nz,l19edh ;19e7 20 04 .\r
- ld b,002h ;19e9 06 02 . .\r
- scf ;19eb 37 7\r
- ret ;19ec c9 .\r
+ inc iy\r
+ ld hl,b_19ef_start\r
+ call test_DDFD\r
+ ld b,002h\r
+ ret c\r
+ ld hl,l1a0ah\r
+ call test_DDFD\r
+ ld b,001h\r
+ ret c\r
+ ld a,(iy+000h)\r
+ cp 0cbh\r
+ jr nz,l19edh\r
+ ld a,(iy+002h)\r
+ cp 036h\r
+ ret z\r
+ and 007h\r
+ cp 006h\r
+ jr nz,l19edh\r
+ ld b,002h\r
+ scf\r
+ ret\r
l19edh:\r
- and a ;19ed a7 .\r
- ret ;19ee c9 .\r
+ and a\r
+ ret\r
\r
+;-------------------------------------------------------------------------------\r
; DD/FD 3 byte (ix+d)/(iy+d)\r
b_19ef_start:\r
- db 034h ;19ef 34 4\r
- db 035h ;19f0 35 5\r
- db 036h ;19f1 36 6\r
- db 046h ;19f2 46 F\r
- db 04eh ;19f3 4e N\r
- db 056h ;19f4 56 V\r
- db 05eh ;19f5 5e ^\r
- db 066h ;19f6 66 f\r
- db 06eh ;19f7 6e n\r
- db 070h ;19f8 70 p\r
- db 071h ;19f9 71 q\r
- db 072h ;19fa 72 r\r
- db 073h ;19fb 73 s\r
- db 074h ;19fc 74 t\r
- db 075h ;19fd 75 u\r
- db 077h ;19ff 77 w\r
- db 07eh ;1a00 7e ~\r
- db 086h ;1a01 86 .\r
- db 08eh ;1a02 8e .\r
- db 096h ;1a03 96 .\r
- db 09eh ;1a04 9e .\r
- db 0a6h ;1a05 a6 .\r
- db 0aeh ;1a06 ae .\r
- db 0b6h ;1a07 b6 .\r
- db 0beh ;1a08 be .\r
- db 0 ;1a09 00 .\r
+ db 034h\r
+ db 035h\r
+ db 036h\r
+ db 046h\r
+ db 04eh\r
+ db 056h\r
+ db 05eh\r
+ db 066h\r
+ db 06eh\r
+ db 070h\r
+ db 071h\r
+ db 072h\r
+ db 073h\r
+ db 074h\r
+ db 075h\r
+ db 077h\r
+ db 07eh\r
+ db 086h\r
+ db 08eh\r
+ db 096h\r
+ db 09eh\r
+ db 0a6h\r
+ db 0aeh\r
+ db 0b6h\r
+ db 0beh\r
+ db 0\r
\r
; DD/FD 2 byte\r
l1a0ah:\r
- db 009h ;1a0a 09 .\r
- db 019h ;1a0b 19 .\r
- db 021h ;1a0c 21 !\r
- db 022h ;1a0d 22 "\r
- db 023h ;1a0e 23 #\r
- db 029h ;1a0f 29 )\r
- db 02ah ;1a10 2a *\r
- db 02bh ;1a11 2b +\r
- db 039h ;1a12 39 9\r
- db 0e1h ;1a13 e1 .\r
- db 0e3h ;1a14 e3 .\r
- db 0e5h ;1a15 e5 .\r
- db 0e9h ;1a16 e9 .\r
- db 0f9h ;1a17 f9 .\r
- db 0 ;1a18 00 .\r
+ db 009h\r
+ db 019h\r
+ db 021h\r
+ db 022h\r
+ db 023h\r
+ db 029h\r
+ db 02ah\r
+ db 02bh\r
+ db 039h\r
+ db 0e1h\r
+ db 0e3h\r
+ db 0e5h\r
+ db 0e9h\r
+ db 0f9h\r
+ db 0\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+test_DDFD:\r
+ ld a,(hl)\r
+ and a\r
+ ret z\r
+ inc hl\r
+ cp (iy+000h)\r
+ jr nz,test_DDFD\r
+ scf\r
+ ret\r
\r
-disas_pfx.ED:\r
- inc iy ;1a19 fd 23 . #\r
- ld hl,b_1bc9_start ;1a1b 21 c9 1b ! . .\r
- call sub_1a72h ;1a1e cd 72 1a . r .\r
- ld b,2 ;1a21 06 02 . .\r
- ret c ;1a23 d8 .\r
- ld hl,b_1bf4_start ;1a24 21 f4 1b ! . .\r
- call lookup_opc ;1a27 cd 97 1a . . .\r
- ld b,2 ;1a2a 06 02 . .\r
- ret c ;1a2c d8 .\r
+lookup_op:\r
+ ld a,(hl)\r
+ inc hl\r
+ cp 0ffh\r
+ ret z\r
+ cp (iy+000h)\r
+ jr z,l1a7fh\r
+ inc hl\r
+ jr lookup_op\r
+l1a7fh:\r
+ ld b,(hl)\r
+ ld e,a_noarg\r
+ jr get_mnemonic\r
\r
- ld hl,l228bh\r
- call lookup_opc\r
- ld b,3\r
- ret c\r
- ld hl,b_1c40_start ;1a2d 21 40 1c ! @ .\r
- call lookup_opc ;1a30 cd 97 1a . . .\r
- ld b,4 ;1a33 06 04 . .\r
- ret ;1a35 c9 .\r
+lookup_op_arg:\r
+ call lookup_branch_op\r
+ ret nc\r
+ ld a,e\r
+ ld e,d\r
+ cp a,0ffh\r
+ ret z ;carry clear\r
+ ld b,a\r
\r
-disas_pfx.CB:\r
- push iy ;1a36 fd e5 . .\r
- inc iy ;1a38 fd 23 . #\r
- ld a,(isprefix_ixiy) ;1a3a 3a f8 1f : . .\r
- and a ;1a3d a7 .\r
- jr z,l1a42h ;1a3e 28 02 ( .\r
- inc iy ;1a40 fd 23 . #\r
-l1a42h:\r
- ld hl,b_1c55_start ;1a42 21 55 1c ! U .\r
- call lookup_opc ;1a45 cd 97 1a . . .\r
- pop iy ;1a48 fd e1 . .\r
- ld b,2 ;1a4a 06 02 . .\r
- ret ;1a4c c9 .\r
+get_mnemonic:\r
+ ld hl,t_MNEMONICS\r
+ bit 7,b\r
+ jr z,get_m1\r
+ res 7,b\r
+ ld a,(iy+000h)\r
+ rra\r
+ rra\r
+ rra\r
+ and 07h\r
+str_sel_ab:\r
+ add b\r
+ ld b,a\r
+get_m1:\r
+ call str_sel\r
+ scf\r
+ ret\r
\r
-disas_nopfx:\r
- ld hl,b_1b54_start ;1a4d 21 54 1b ! T .\r
- call lookup_opc ;1a50 cd 97 1a . . .\r
- ld b,2 ;1a53 06 02 . .\r
- ret c ;1a55 d8 .\r
- ld hl,b_1ab6_start ;1a56 21 b6 1a ! . .\r
- call sub_1a72h ;1a59 cd 72 1a . r .\r
- ld b,1 ;1a5c 06 01 . .\r
- ret c ;1a5e d8 .\r
- ld hl,b_1ad1_start ;1a5f 21 d1 1a ! . .\r
- call lookup_opc ;1a62 cd 97 1a . . .\r
- ld b,1 ;1a65 06 01 . .\r
- ret c ;1a67 d8 .\r
- ld hl,b_1b9b_start ;1a68 21 9b 1b ! . .\r
- call lookup_opc ;1a6b cd 97 1a . . .\r
- ret nc ;1a6e d0 .\r
- ld b,3 ;1a6f 06 03 . .\r
- ret ;1a71 c9 .\r
-\r
-sub_1a72h:\r
- ld a,(hl) ;1a72 7e ~\r
- cp 0ffh ;1a73 fe ff . .\r
- ret z ;1a75 c8 .\r
- cp (iy+000h) ;1a76 fd be 00 . . .\r
- jr z,l1a7fh ;1a79 28 04 ( .\r
- inc hl ;1a7b 23 #\r
- inc hl ;1a7c 23 #\r
- jr sub_1a72h ;1a7d 18 f3 . .\r
-l1a7fh:\r
- inc hl ;1a7f 23 #\r
- ld c,(hl) ;1a80 4e N\r
- ld hl,t_MNEMONICS ;1a81 21 c6 1e ! . .\r
- ld b,0 ;1a84 06 00 . .\r
- add hl,bc ;1a86 09 .\r
- ld de,l1c97h ;1a87 11 97 1c . . .\r
- scf ;1a8a 37 7\r
- ret ;1a8b c9 .\r
+lookup_branch_op ;TODO\r
+ ld a,(hl)\r
+ and a\r
+ ret z\r
+ inc hl\r
+ and (iy+000h)\r
+ cp (hl)\r
+ inc hl\r
+ jr z,l1aa8_br\r
+ inc hl\r
+ inc hl\r
+ jr lookup_branch_op\r
\r
-test_DDFD:\r
- ld a,(hl) ;1a8c 7e ~\r
- and a ;1a8d a7 .\r
- ret z ;1a8e c8 .\r
- inc hl ;1a8f 23 #\r
- cp (iy+000h) ;1a90 fd be 00 . . .\r
- jr nz,test_DDFD ;1a93 20 f7 .\r
- scf ;1a95 37 7\r
- ret ;1a96 c9 .\r
-\r
-lookup_opc:\r
- ld a,(iy+000h) ;1a97 fd 7e 00 . ~ .\r
- and (hl) ;1a9a a6 .\r
- inc hl ;1a9b 23 #\r
- cp (hl) ;1a9c be .\r
- jr z,l1aa8h ;1a9d 28 09 ( .\r
- inc hl ;1a9f 23 #\r
- inc hl ;1aa0 23 #\r
- inc hl ;1aa1 23 #\r
- inc hl ;1aa2 23 #\r
- ld a,(hl) ;1aa3 7e ~\r
- and a ;1aa4 a7 .\r
- jr nz,lookup_opc ;1aa5 20 f0 .\r
- ret ;1aa7 c9 .\r
-l1aa8h:\r
- inc hl ;1aa8 23 #\r
- ld c,(hl) ;1aa9 4e N\r
- inc hl ;1aaa 23 #\r
- ld e,(hl) ;1aab 5e ^\r
- inc hl ;1aac 23 #\r
- ld d,(hl) ;1aad 56 V\r
- ld hl,t_MNEMONICS ;1aae 21 c6 1e ! . .\r
- ld b,000h ;1ab1 06 00 . .\r
- add hl,bc ;1ab3 09 .\r
- scf ;1ab4 37 7\r
- ret ;1ab5 c9 .\r
+l1aa8_br:\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
b_1ab6_start:\r
- db 076h,039h ;halt\r
- db 0d9h,036h ;exx\r
- db 0f3h,02ch ;di\r
- db 0fbh,032h ;ei\r
- db 000h,069h ;nop\r
- db 007h,09eh ;rlca\r
- db 00fh,0adh ;rrca\r
- db 017h,098h ;rla\r
- db 01fh,0a7h ;rra\r
- db 027h,026h ;daa\r
- db 02fh,023h ;cpl\r
- db 037h,0bah ;scf\r
- db 03fh,010h ;ccf\r
+ db 076h,i_HALT ;halt\r
+ db 0d9h,i_EXX ;exx\r
+ db 0f3h,i_DI ;di\r
+ db 0fbh,i_EI ;ei\r
+ db 000h,i_NOP ;nop\r
+; db 007h,i_RLCA ;rlca\r
+; db 00fh,i_RRCA ;rrca\r
+; db 017h,i_RLA ;rla\r
+; db 01fh,i_RRA ;rra\r
+; db 027h,i_DAA ;daa\r
+; db 02fh,i_CPL ;cpl\r
+; db 037h,i_SCF ;scf\r
+; db 03fh,i_CCF ;ccf\r
+ db 0c9h,i_RET ;ret\r
db 0ffh\r
\r
\r
-; 1 byte opcodes\r
+; 1 byte opcodes\r
; Format: db mask, match, t_MNEMONICS-index\r
-; dw argument formating fuction\r
+; dw argument formating function\r
b_1ad1_start:\r
- db 0c0h,040h,056h ;ld r,r\r
- dw p_arg_r_r\r
- db 0f8h,080h,003h ;add a,r\r
- dw p_arg_a_r\r
- db 0f8h,088h,000h ;adc a,r\r
- dw p_arg_a_r\r
- db 0f8h,090h,0c9h ;sub r\r
- dw p_arg_rs\r
- db 0f8h,098h,0b7h ;sbc a,r\r
- dw p_arg_a_r\r
- db 0f8h,0a0h,006h ;and r\r
- dw p_arg_rs\r
- db 0f8h,0a8h,0cch ;xor r\r
- dw p_arg_rs\r
- db 0f8h,0b0h,06ch ;or r\r
- dw p_arg_rs\r
- db 0f8h,0b8h,013h ;cp r\r
- dw p_arg_rs\r
- db 0c7h,0c0h,08bh ;ret cc\r
- dw p_arg_cc\r
- db 0c7h,0c7h,0b4h ;rst\r
- dw l1c98h\r
- db 0ffh,0c9h,08bh ;ret\r
- dw l1c97h\r
- db 0cfh,0c1h,081h ;pop rr\r
- dw p_arg_zz\r
- db 0cfh,0c5h,084h ;push rr\r
- dw p_arg_zz\r
- db 0ffh,0e3h,034h ;ex (sp),hl\r
- dw l1ca0h\r
- db 0ffh,0e9h,052h ;jp (hl)\r
- dw l1caeh\r
- db 0ffh,0ebh,034h ;ex de,hl\r
- dw p_arg_ex_dehl\r
- db 0ffh,0f9h,056h ;ld sp,hl\r
- dw l1cc1h\r
- db 0cfh,003h,041h ;inc rr\r
- dw p_arg_ww\r
- db 0cfh,00bh,029h ;dec rr\r
- dw p_arg_ww\r
- db 0c7h,004h,041h ;inc r\r
- dw p_arg_r\r
- db 0c7h,005h,029h ;dec r\r
- dw p_arg_r\r
- db 0ffh,008h,034h ;ex af,af'\r
- dw p_arg_ex_afaf\r
- db 0cfh,009h,003h ;add hl,rr\r
- dw l1cd3h\r
- db 0efh,002h,056h ;ld (rr),a ;rr=bc,de\r
- dw l1cdch\r
- db 0efh,00ah,056h ;ld a,(rr) ;rr=bc,de\r
- dw l1ce5h\r
+ db 0c0h,040h,i_LD ;ld r[y],r[z]\r
+ db a_rr\r
+\r
+ db 0c0h,080h,i_ADD+080h ;add a,r[z]\r
+ db a_r\r
+\r
+; db 0f8h,080h,i_ADD ;add a,r[z]\r
+; db a_ar\r
+; db 0f8h,088h,i_ADC ;adc a,r[z]\r
+; db a_ar\r
+; db 0f8h,090h,i_SUB ;sub r[z]\r
+; db a_r\r
+; db 0f8h,098h,i_SBC ;sbc a,r[z]\r
+; db a_ar\r
+; db 0f8h,0a0h,i_AND ;and r[z]\r
+; db a_r\r
+; db 0f8h,0a8h,i_XOR ;xor r[z]\r
+; db a_r\r
+; db 0f8h,0b0h,i_OR ;or r[z]\r
+; db a_r\r
+; db 0f8h,0b8h,i_CP ;cp r[z]\r
+; db a_r\r
+\r
+ db 0c7h,0c0h,i_RET ;ret cc\r
+ db a_cc\r
+ db 0c7h,0c7h,i_RST ;rst\r
+ db a_rst\r
+ db 0cfh,0c1h,i_POP ;pop rp2\r
+ db a_p2\r
+ db 0cfh,0c5h,i_PUSH ;push rp2\r
+ db a_p2\r
+ db 0ffh,0e3h,i_EX ;ex (sp),hl\r
+ db a_esphl\r
+ db 0ffh,0e9h,i_JP ;jp (hl)\r
+ db a_hl\r
+ db 0ffh,0ebh,i_EX ;ex de,hl\r
+ db a_dehl\r
+ db 0ffh,0f9h,i_LD ;ld sp,hl\r
+ db a_lsphl\r
+ db 0cfh,003h,i_INC ;inc rp\r
+ db a_p\r
+ db 0cfh,00bh,i_DEC ;dec rp\r
+ db a_p\r
+ db 0c7h,004h,i_INC ;inc r[y]\r
+ db a_ry\r
+ db 0c7h,005h,i_DEC ;dec r[y]\r
+ db a_ry\r
+ db 0ffh,008h,i_EX ;ex af,af'\r
+ db a_eaf\r
+ db 0cfh,009h,i_ADD ;add hl,rp\r
+ db a_hlp\r
+ db 0efh,002h,i_LD ;ld (rp),a ;rp=bc,de\r
+ db a_pa\r
+ db 0efh,00ah,i_LD ;ld a,(rp) ;rp=bc,de\r
+ db a_ap\r
+\r
+ db 0c7h,007h,i_RLCA+080h;rlca\r
+ db a_noarg\r
+\r
db 0\r
\r
-; 2 byte opdodes\r
+; 2 byte opcodes\r
b_1b54_start:\r
- db 0c7h,006h,056h ;ld r,nn\r
- dw l1cfah\r
- db 0ffh,0c6h,003h ;add a,nn\r
- dw l1cf5h\r
- db 0ffh,0ceh,000h ;adc a,nn\r
- dw l1cf5h\r
- db 0ffh,0d6h,0c9h ;sub a,nn\r
- dw l1d09h\r
- db 0ffh,0deh,0b7h ;sbc a,nn\r
- dw l1cf5h\r
- db 0ffh,0e6h,006h ;and a,nn\r
- dw l1d09h\r
- db 0ffh,0eeh,0cch ;xor nn\r
- dw l1d09h\r
- db 0ffh,0f6h,06ch ;or nn\r
- dw l1d09h\r
- db 0ffh,0feh,013h ;cp a,nn\r
- dw l1d09h\r
- db 0ffh,010h,02eh ;djnz\r
- dw l1d1ah\r
- db 0ffh,018h,054h ;jr\r
- dw l1d1ah\r
- db 0e7h,020h,054h ;jr,cc\r
- dw l1d0fh\r
- db 0ffh,0d3h,076h ;out (nn),a\r
- dw l1d37h\r
- db 0ffh,0dbh,03fh ;in a,(nn)\r
- dw l1d29h\r
+ db 0c7h,006h,i_LD ;ld r[y],nn\r
+ db a_rn\r
+\r
+ db 0c7h,0c6h,i_ADD+080h ;add a,r[z]\r
+ db a_n\r
+\r
+; db 0ffh,0c6h,i_ADD ;add a,nn\r
+; db a_an\r
+; db 0ffh,0ceh,i_ADC ;adc a,nn\r
+; db a_an\r
+; db 0ffh,0d6h,i_SUB ;sub nn\r
+; db a_n\r
+; db 0ffh,0deh,i_SBC ;sbc a,nn\r
+; db a_an\r
+; db 0ffh,0e6h,i_AND ;and nn\r
+; db a_n\r
+; db 0ffh,0eeh,i_XOR ;xor nn\r
+; db a_n\r
+; db 0ffh,0f6h,i_OR ;or nn\r
+; db a_n\r
+; db 0ffh,0feh,i_CP ;cp nn\r
+; db a_n\r
+\r
+ db 0ffh,010h,i_DJNZ ;djnz\r
+ db a_j\r
+ db 0ffh,018h,i_JR ;jr\r
+ db a_j\r
+ db 0e7h,020h,i_JR ;jr cc,\r
+ db a_ccj\r
+ db 0ffh,0d3h,i_OUT ;out (nn),a\r
+ db a_ma\r
+ db 0ffh,0dbh,i_IN ;in a,(nn)\r
+ db a_am\r
db 0\r
\r
-; 3 byte opcodes\r
+; 3 byte opcodes\r
b_1b9b_start:\r
- db 0c7h,0c2h,052h ;jp cc,mn\r
- dw p_arg_cc_mn\r
- db 0c7h,0c4h,00ch ;call cc,mn\r
- dw p_arg_cc_mn\r
- db 0cfh,001h,056h ;ld ww,mn\r
- dw p_arg_ww_mn\r
- db 0ffh,0c3h,052h ;jp mn\r
- dw p_arg_mn\r
- db 0ffh,0cdh,00ch ;call mn\r
- dw p_arg_mn\r
- db 0ffh,022h,056h ;ld (mn),hl\r
- dw p_arg_addr_hl\r
- db 0ffh,02ah,056h ;ld hl,(mn)\r
- dw p_arg_hl_addr\r
- db 0ffh,032h,056h ;ld (mn),a\r
- dw p_arg_addr_a\r
- db 0ffh,03ah,056h ;ld a,(mn)\r
- dw p_arg_a_addr\r
+ db 0c7h,0c2h,i_JP ;jp cc,mn\r
+ db a_ccnn\r
+ db 0c7h,0c4h,i_CALL ;call cc,mn\r
+ db a_ccnn\r
+ db 0cfh,001h,i_LD ;ld ww,mn\r
+ db a_rnn\r
+ db 0ffh,0c3h,i_JP ;jp mn\r
+ db a_nn\r
+ db 0ffh,0cdh,i_CALL ;call mn\r
+ db a_nn\r
+ db 0ffh,022h,i_LD ;ld (mn),hl\r
+ db a_mmhl\r
+ db 0ffh,02ah,i_LD ;ld hl,(mn)\r
+ db a_hlmm\r
+ db 0ffh,032h,i_LD ;ld (mn),a\r
+ db a_mma\r
+ db 0ffh,03ah,i_LD ;ld a,(mn)\r
+ db a_amm\r
db 0\r
\r
; Prefix ED + 1 byte opcode, no arguments\r
; Format: opcode, t_MNEMONICS index\r
b_1bc9_start:\r
- db 044h,066h ;neg\r
- db 045h,092h ;retn\r
- db 04dh,08eh ;reti\r
- db 067h,0b1h ;rrd\r
- db 06fh,0a2h ;rld\r
- db 0a0h,05fh ;ldi\r
- db 0a1h,01ch ;cpi\r
- db 0a2h,04bh ;ini\r
- db 0a3h,07dh ;outi\r
- db 0a8h,058h ;ldd\r
- db 0a9h,015h ;cpd\r
- db 0aah,044h ;ind\r
- db 0abh,079h ;outd\r
- db 0b0h,062h ;ldir\r
- db 0b1h,01fh ;cpir\r
- db 0b2h,04eh ;inir\r
- db 0b3h,072h ;otir\r
- db 0b8h,05bh ;lddr\r
- db 0b9h,018h ;cpdr\r
- db 0bah,047h ;indr\r
- db 0bbh,06eh ;otdr\r
- db 08bh,0d5h ;otdm\r
- db 09bh,0d9h ;otdmr\r
- db 083h,0deh ;otim\r
- db 093h,0e2h ;otimr\r
- db 076h,0ebh ;slp\r
+ db 044h,i_NEG ;neg\r
+ db 045h,i_RETN ;retn\r
+ db 04dh,i_RETI ;reti\r
+ db 067h,i_RRD ;rrd\r
+ db 06fh,i_RLD ;rld\r
+; db 0a0h,i_LDI ;ldi\r
+; db 0a1h,i_CPI ;cpi\r
+; db 0a2h,i_INI ;ini\r
+; db 0a3h,i_OUTI ;outi\r
+; db 0a8h,i_LDD ;ldd\r
+; db 0a9h,i_CPD ;cpd\r
+; db 0aah,i_IND ;ind\r
+; db 0abh,i_OUTD ;outd\r
+; db 0b0h,i_LDIR ;ldir\r
+; db 0b1h,i_CPIR ;cpir\r
+; db 0b2h,i_INIR ;inir\r
+; db 0b3h,i_OTIR ;otir\r
+; db 0b8h,i_LDDR ;lddr\r
+; db 0b9h,i_CPDR ;cpdr\r
+; db 0bah,i_INDR ;indr\r
+; db 0bbh,i_OTDR ;otdr\r
+ db 08bh,i_OTDM ;otdm\r
+ db 09bh,i_OTDMR ;otdmr\r
+ db 083h,i_OTIM ;otim\r
+ db 093h,i_OTIMR ;otimr\r
+ db 076h,i_SLP ;slp\r
db 0ffh ;<end mark>\r
\r
b_1bf4_start:\r
- db 0e7h,040h,03fh ;in r,(c) ;r=b,c,d,e\r
- dw p_arg_in_c ;\r
- db 0f7h,060h,03fh ;in r,(c) ;r=h,l\r
- dw p_arg_in_c ;\r
- db 0ffh,078h,03fh ;in r,(c) ;r=a\r
- dw p_arg_in_c ;\r
- db 0e7h,041h,076h ;out (c),r ;r=b,c,d,e\r
- dw p_arg_out_c ;\r
- db 0f7h,061h,076h ;out (c),r ;r=h,l\r
- dw p_arg_out_c ;\r
- db 0ffh,079h,076h ;out (c),r ;r=a\r
- dw p_arg_out_c ;\r
- db 0cfh,042h,0b7h ;sbc hl,rr\r
- dw l1dcah ;\r
- db 0cfh,04ah,000h ;adc hl,rr\r
- dw l1dcah ;\r
- db 0ffh,046h,03dh ;im 0\r
- dw l1d85h ;\r
- db 0ffh,056h,03dh ;im 1\r
- dw l1d89h ;\r
- db 0ffh,05eh,03dh ;im 2\r
- dw l1d8dh ;\r
- db 0ffh,047h,056h ;ld i,a\r
- dw l1d92h ;\r
- db 0ffh,057h,056h ;ld a,i\r
- dw l1d97h ;\r
- db 0ffh,04fh,056h ;ld r,a\r
- dw l1d9ch ;\r
- db 0ffh,05fh,056h ;ld a,r\r
- dw l1da1h\r
- db 0cfh,04ch,0d2h ;mlt rr\r
- dw p_arg_ww\r
- db 0c7h,004h,0eeh ;tst r\r
- dw p_arg_r\r
+ db 0e4h,0a0h,i_LDI\r
+ db a_noarg\r
+ db 0ffh,070h,i_IN ;in (c) ;\r
+ db a_c\r
+ db 0c7h,040h,i_IN ;in r,(c) ;r=b,c,d,e,h,l,a\r
+ db a_rc\r
+ db 0ffh,071h,0ffh ;out (c),0 ;\r
+ db a_cr\r
+ db 0c7h,041h,i_OUT ;out (c),r ;r=b,c,d,e,h,l,a\r
+ db a_cr\r
+ db 0cfh,042h,i_SBC ;sbc hl,rp\r
+ db a_hlp\r
+ db 0cfh,04ah,i_ADC ;adc hl,rp\r
+ db a_hlp\r
+ db 0ffh,046h,i_IM ;im 0\r
+ db a_im0\r
+ db 0ffh,056h,i_IM ;im 1\r
+ db a_im1\r
+ db 0ffh,05eh,i_IM ;im 2\r
+ db a_im2\r
+ db 0e7h,047h,i_LD ;ld i,a ... ld a,r\r
+ db a_ai\r
+ db 0cfh,04ch,i_MLT ;mlt rr\r
+ db a_p\r
+ db 0c7h,004h,i_TST ;tst r\r
+ db a_ry\r
db 0\r
\r
l228bh:\r
- db 0e7h,000h,0cfh ;in0 r,(m) ;r=b,c,d,e\r
- dw p_arg_r_m\r
- db 0f7h,020h,0cfh ;in0 r,(m) ;r=h,l\r
- dw p_arg_r_m\r
- db 0ffh,038h,0cfh ;in0 a,(m)\r
- dw p_arg_r_m\r
- db 0e7h,001h,0e7h ;out0 (m),r ;r=b,c,d,e\r
- dw p_arg_m_r\r
- db 0f7h,021h,0e7h ;out0 (m),r ;r=h,l\r
- dw p_arg_m_r\r
- db 0ffh,039h,0e7h ;out0 (m),a\r
- dw p_arg_m_r\r
- db 0ffh,064h,0eeh ;tst m\r
- dw l1d09h\r
- db 0ffh,074h,0f1h ;tstio m\r
- dw l1d09h\r
+ db 0ffh,030h,i_IN0 ;in0 (m)\r
+ db a_m\r
+ db 0c7h,000h,i_IN0 ;in0 r,(m) ;r=b,c,d,e,h,l,a\r
+ db a_rm\r
+ db 0ffh,031h,0ffh ;out0 (m),0\r
+ db a_mr\r
+ db 0c7h,001h,i_OUT0 ;out0 (m),r ;r=b,c,d,e\r
+ db a_mr\r
+ db 0ffh,064h,i_TST ;tst m\r
+ db a_n\r
+ db 0ffh,074h,i_TSTIO ;tstio m\r
+ db a_n\r
db 0\r
\r
+; Prefix ED + 1 byte opcode + 2 byte address\r
+; Format: db mask, match, t_MNEMONICS-index\r
+; dw argument formating function\r
b_1c40_start:\r
- db 0efh,043h,056h ;ld (mn),ww ;ww=bc,de\r
- dw p_arg_addr_ww\r
- db 0ffh,073h,056h ;ld (mn),sp\r
- dw p_arg_addr_ww\r
- db 0efh,04bh,056h ;ld ww,(mn) ;ww=bc,de\r
- dw p_arg_ww_addr\r
- db 0ffh,07bh,056h ;ld sp,(mn)\r
- dw p_arg_ww_addr\r
+ db 0cfh,043h,i_LD ;ld (mn),ww ;ww=bc,de,hl,sp\r
+ db a_mmp\r
+ db 0cfh,04bh,i_LD ;ld ww,(mn) ;ww=bc,de,hl,sp\r
+ db a_pmm\r
db 0\r
\r
; CB\r
b_1c55_start:\r
- db 0f8h,000h,09bh ;rlc g\r
- dw l1e03h\r
- db 0f8h,008h,0aah ;rrc g\r
- dw l1e03h\r
- db 0f8h,010h,096h ;rl g\r
- dw l1e03h\r
- db 0f8h,018h,0a5h ;rr g\r
- dw l1e03h\r
- db 0f8h,020h,0c0h ;sla g\r
- dw l1e03h\r
- db 0f8h,028h,0c3h ;sra g\r
- dw l1e03h\r
- db 0f8h,038h,0c6h ;srl g\r
- dw l1e03h\r
- db 0c0h,040h,009h ;bit b,g\r
- dw p_arg_bitop\r
- db 0c0h,080h,088h ;res b,g\r
- dw p_arg_bitop\r
- db 0c0h,0c0h,0bdh ;set b,g\r
- dw p_arg_bitop\r
+ db 0c0h,000h,i_RLC+080h ;rlc g\r
+ db a_cbr\r
+\r
+; db 0f8h,000h,i_RLC ;rlc g\r
+; db a_cbr\r
+; db 0f8h,008h,i_RRC ;rrc g\r
+; db a_cbr\r
+; db 0f8h,010h,i_RL ;rl g\r
+; db a_cbr\r
+; db 0f8h,018h,i_RR ;rr g\r
+; db a_cbr\r
+; db 0f8h,020h,i_SLA ;sla g\r
+; db a_cbr\r
+; db 0f8h,028h,i_SRA ;sra g\r
+; db a_cbr\r
+; db 0f8h,038h,i_SRL ;srl g\r
+; db a_cbr\r
+ db 0c0h,040h,i_BIT ;bit b,g\r
+ db a_bcbr\r
+ db 0c0h,080h,i_RES ;res b,g\r
+ db a_bcbr\r
+ db 0c0h,0c0h,i_SET ;set b,g\r
+ db a_bcbr\r
db 0\r
\r
-p_arg_r_r:\r
- call p_arg_r ;1c88 cd 28 1e . ( .\r
- call p_char_comma ;1c8b cd b4 1e . . .\r
- jp p_arg_rs ;1c8e c3 30 1e . 0 .\r
-p_arg_a_r:\r
- call p_A_comma ;1c91 cd b1 1e . . .\r
- jp p_arg_rs ;1c94 c3 30 1e . 0 .\r
-l1c97h:\r
- ret ;1c97 c9 .\r
-\r
-;-----------------------------------------------------\r
-p_arg_r_m:\r
- call p_arg_r\r
- call p_char_comma\r
- jp sub_1d2ch\r
-\r
-p_arg_m_r:\r
- call sub_1d2ch\r
- call p_char_comma\r
- jp p_arg_r\r
-;-----------------------------------------------------\r
-\r
-l1c98h:\r
- ld a,(iy+000h) ;1c98 fd 7e 00 . ~ .\r
- and 038h ;1c9b e6 38 . 8\r
- jp out_hex ;1c9d c3 18 02 . . .\r
-\r
-l1ca0h:\r
- call pstr_inl ;1ca3 cd 88 02 . . .\r
- DC '(SP),'\r
- jp p_arg_hlixiy ;1ca6 c3 7e 1e . ~ .\r
-\r
-l1caeh:\r
- call p_char_lparen ;1cb0 cd 5d 02 . ] .\r
- call p_arg_hlixiy ;1cb3 cd 7e 1e . ~ .\r
- jr out_rparen\r
-\r
-p_arg_ex_dehl:\r
- ld hl,l1773h ;1cbb 21 73 17 ! s .\r
- jp pstr ;1cbe c3 88 02 . . .\r
-\r
-l1cc1h:\r
- call pstr_inl\r
- DC 'SP,'\r
- jp p_arg_hlixiy\r
-\r
-p_arg_ex_afaf:\r
- ld hl,b_176d_start ;1ccd 21 6d 17 ! m .\r
- jp pstr ;1cd0 c3 88 02 . . .\r
-\r
-l1cd3h:\r
- call p_arg_hlixiy ;1cd3 cd 7e 1e . ~ .\r
- call p_char_comma ;1cd6 cd b4 1e . . .\r
- jp p_arg_ww ;1cd9 c3 8b 1e . . .\r
-l1cdch:\r
- call sub_1ce8h ;1cdc cd e8 1c . . .\r
- call p_char_comma ;1cdf cd b4 1e . . .\r
- jp p_char_A ;1ce2 c3 3d 1d . = .\r
-\r
-l1ce5h:\r
- call p_A_comma ;1ce5 cd b1 1e . . .\r
-sub_1ce8h:\r
- call p_char_lparen ;1cea cd 5d 02 . ] .\r
- call p_arg_ww ;1ced cd 8b 1e . . .\r
-out_rparen:\r
- jp p_char_rparen ;1cf2 c3 5d 02 . ] .\r
-\r
-l1cf5h:\r
- call p_A_comma ;1cf5 cd b1 1e . . .\r
- jr l1d09h ;1cf8 18 0f . .\r
-l1cfah:\r
- call p_arg_r ;1cfa cd 28 1e . ( .\r
- call p_char_comma ;1cfd cd b4 1e . . .\r
- ld a,(isprefix_ixiy) ;1d00 3a f8 1f : . .\r
- and a ;1d03 a7 .\r
- ld a,(iy+002h) ;1d04 fd 7e 02 . ~ .\r
- jr nz,l1d0ch ;1d07 20 03 .\r
-l1d09h:\r
- ld a,(iy+001h) ;1d09 fd 7e 01 . ~ .\r
-l1d0ch:\r
- jp out_hex ;1d0c c3 18 02 . . .\r
-\r
-l1d0fh:\r
- ld a,(iy+000h) ;1d0f fd 7e 00 . ~ .\r
- and 018h ;1d12 e6 18 . .\r
- call p_arg_cc0 ;1d14 cd a0 1e . . .\r
- call p_char_comma ;1d17 cd b4 1e . . .\r
-l1d1ah:\r
- ld c,(iy+001h) ;1d1a fd 4e 01 . N .\r
- ld a,c ;1d1d 79 y\r
- rla ;1d1e 17 .\r
- sbc a,a ;1d1f 9f .\r
- ld b,a ;1d20 47 G\r
- push iy ;1d21 fd e5 . .\r
- pop hl ;1d23 e1 .\r
- add hl,bc ;1d24 09 .\r
- inc hl ;1d25 23 #\r
- inc hl ;1d26 23 #\r
- jr l1d4eh ;1d27 18 25 . %\r
-l1d29h:\r
- call p_A_comma ;1d29 cd b1 1e . . .\r
-sub_1d2ch:\r
- call p_char_lparen ;1d2e cd 5d 02 . ] .\r
- ld a,(iy+001h) ;1d31 fd 7e 01 . ~ .\r
- jp l1e6bh ;1d34 c3 6b 1e . k .\r
-l1d37h:\r
- call sub_1d2ch ;1d37 cd 2c 1d . , .\r
- jr p_char_comma_A\r
-\r
-p_arg_cc_mn:\r
- call p_arg_cc ;1d42 cd 9d 1e . . .\r
- call p_char_comma ;1d45 cd b4 1e . . .\r
-p_arg_mn:\r
- ld l,(iy+001h) ;1d48 fd 6e 01 . n .\r
- ld h,(iy+002h) ;1d4b fd 66 02 . f .\r
-l1d4eh:\r
- ld a,002h ;1d4e 3e 02 > .\r
-sub_1d50h:\r
- ld (l1ffdh),a ;1d50 32 fd 1f 2 . .\r
- ld (l1ffbh),hl ;1d53 22 fb 1f " . .\r
- call out_hl ;1d56 cd 13 02 . . .\r
- ret ;1d59 c9 .\r
-p_arg_ww_mn:\r
- call p_arg_ww ;1d5a cd 8b 1e . . .\r
- call p_char_comma ;1d5d cd b4 1e . . .\r
- jr p_arg_mn ;1d60 18 e6 . .\r
-\r
-p_arg_addr_hl:\r
- call sub_1e13h ;1d62 cd 13 1e . . .\r
- call p_char_comma ;1d65 cd b4 1e . . .\r
- jp p_arg_hlixiy ;1d68 c3 7e 1e . ~ .\r
-p_arg_hl_addr:\r
- call p_arg_hlixiy ;1d6b cd 7e 1e . ~ .\r
- call p_char_comma ;1d6e cd b4 1e . . .\r
- jp sub_1e13h ;1d71 c3 13 1e . . .\r
-\r
-p_arg_addr_a:\r
- call sub_1e13h ;1d74 cd 13 1e . . .\r
-p_char_comma_A:\r
- call p_char_comma ;1d77 cd b4 1e . . .\r
-p_char_A:\r
- ld a,'A' ;1d7a 3e 41 > A\r
- jr outchar1 ;1d87 18 06 . .\r
-p_arg_a_addr:\r
- call p_A_comma ;1d7f cd b1 1e . . .\r
- jp sub_1e13h ;1d82 c3 13 1e . . .\r
-l1d85h:\r
- ld a,'0' ;1d85 3e 30 > 0\r
- jr outchar1 ;1d87 18 06 . .\r
-l1d89h:\r
- ld a,'1' ;1d89 3e 31 > 1\r
- jr outchar1 ;1d8b 18 02 . .\r
-l1d8dh:\r
- ld a,'2' ;1d8d 3e 32 > 2\r
- jr outchar1 ;1d8b 18 02 . .\r
-\r
-p_A_comma:\r
- call p_char_A ;1eb1 cd 3d 1d . = .\r
-p_char_comma:\r
- ld a,',' ;1eb4 3e 2c > ,\r
-outchar1:\r
- jp outchar ;1eb6 c3 5d 02 . ] .\r
-\r
-l1d92h:\r
- ld hl,b_1da7_start ;1d92 21 a7 1d ! . .\r
- jr l1da4h ;1d95 18 0d . .\r
-l1d97h:\r
- ld hl,l1daah ;1d97 21 aa 1d ! . .\r
- jr l1da4h ;1d9a 18 08 . .\r
-l1d9ch:\r
- ld hl,l1dadh ;1d9c 21 ad 1d ! . .\r
- jr l1da4h ;1d9f 18 03 . .\r
-l1da1h:\r
- ld hl,l1db0h ;1da1 21 b0 1d ! . .\r
-l1da4h:\r
- jp pstr ;1da4 c3 88 02 . . .\r
-\r
-b_1da7_start:\r
- DC 'I,A'\r
-l1daah:\r
- DC 'A,I'\r
-l1dadh:\r
- DC 'R,A'\r
-l1db0h:\r
- DC 'A,R'\r
+;-------------------------------------------------------------------------------\r
+;-------------------------------------------------------------------------------\r
\r
-p_arg_in_c:\r
- call p_arg_r ;1db3 cd 28 1e . ( .\r
- call p_char_comma ;1db6 cd b4 1e . . .\r
- ld hl,t__C_ ;1db9 21 f4 1f ! . .\r
- jp pstr ;1dbc c3 88 02 . . .\r
-\r
-p_arg_out_c:\r
- ld hl,t__C_ ;1dbf 21 f4 1f ! . .\r
- call pstr ;1dc2 cd 88 02 . . .\r
- call p_char_comma ;1dc5 cd b4 1e . . .\r
- jr p_arg_r ;1dc8 18 5e . ^\r
-\r
-l1dcah:\r
- call p_arg_hlixiy ;1dca cd 7e 1e . ~ .\r
- call p_char_comma ;1dcd cd b4 1e . . .\r
- jp p_arg_ww ;1dd0 c3 8b 1e . . .\r
-\r
-p_arg_addr_ww:\r
- call sub_1e13h ;1dd3 cd 13 1e . . .\r
- call p_char_comma ;1dd6 cd b4 1e . . .\r
- jp p_arg_ww ;1dd9 c3 8b 1e . . .\r
-\r
-p_arg_ww_addr:\r
- call p_arg_ww ;1ddc cd 8b 1e . . .\r
- call p_char_comma ;1ddf cd b4 1e . . .\r
- jr sub_1e13h ;1de2 18 2f . /\r
-\r
-p_arg_bitop:\r
- ld a,(isprefix_ixiy) ;1de4 3a f8 1f : . .\r
- and a ;1de7 a7 .\r
- jr nz,l1defh ;1de8 20 05 .\r
- ld a,(iy+001h) ;1dea fd 7e 01 . ~ .\r
- jr l1df2h ;1ded 18 03 . .\r
-l1defh:\r
- ld a,(iy+002h) ;1def fd 7e 02 . ~ .\r
-l1df2h:\r
- push af ;1df2 f5 .\r
- rra ;1df3 1f .\r
- rra ;1df4 1f .\r
- rra ;1df5 1f .\r
- and 007h ;1df6 e6 07 . .\r
- add a,'0' ;1df8 c6 30 . 0\r
- call outchar ;1dfa cd 5d 02 . ] .\r
- call p_char_comma ;1dfd cd b4 1e . . .\r
- pop af ;1e00 f1 .\r
- jr p_arg_r0 ;1e01 18 30 . 0\r
-\r
-l1e03h:\r
- ld a,(isprefix_ixiy) ;1e03 3a f8 1f : . .\r
- and a ;1e06 a7 .\r
- jr nz,l1e0eh ;1e07 20 05 .\r
- ld a,(iy+001h) ;1e09 fd 7e 01 . ~ .\r
- jr l1e11h ;1e0c 18 03 . .\r
-l1e0eh:\r
- ld a,(iy+002h) ;1e0e fd 7e 02 . ~ .\r
-l1e11h:\r
- jr p_arg_r0 ;1e11 18 20 .\r
-\r
-sub_1e13h:\r
- call p_char_lparen ;1e15 cd 5d 02 . ] .\r
- ld l,(iy+001h) ;1e18 fd 6e 01 . n .\r
- ld h,(iy+002h) ;1e1b fd 66 02 . f .\r
- ld a,001h ;1e1e 3e 01 > .\r
- call sub_1d50h ;1e20 cd 50 1d . P .\r
-\r
-p_char_rparen:\r
- ld a,')' ;1e23 3e 29 > )\r
- jp outchar ;1e25 c3 5d 02 . ] .\r
-\r
-p_arg_r:\r
- ld a,(iy+000h) ;1e28 fd 7e 00 . ~ .\r
- rra ;1e2b 1f .\r
- rra ;1e2c 1f .\r
- rra ;1e2d 1f .\r
- jr p_arg_r0 ;1e2e 18 03 . .\r
-p_arg_rs:\r
- ld a,(iy+000h) ;1e30 fd 7e 00 . ~ .\r
-p_arg_r0:\r
- and 007h ;1e33 e6 07 . .\r
- cp 006h ;1e35 fe 06 . .\r
- jr nz,p_arg_r1 ;1e37 20 3a :\r
- ld a,(isprefix_ixiy) ;1e39 3a f8 1f : . .\r
- and a ;1e3c a7 .\r
- ld a,006h ;1e3d 3e 06 > .\r
- jr z,p_arg_r1 ;1e3f 28 32 ( 2\r
- ld hl,b_1e78_start ;1e41 21 78 1e ! x .\r
- ld a,(isprefix_ixiy) ;1e44 3a f8 1f : . .\r
- dec a ;1e47 3d =\r
- jr z,l1e4dh ;1e48 28 03 ( .\r
- ld hl,l1e7bh ;1e4a 21 7b 1e ! { .\r
-l1e4dh:\r
- call pstr ;1e4d cd 88 02 . . .\r
- ld a,(iy+001h) ;1e50 fd 7e 01 . ~ .\r
- and a ;1e53 a7 .\r
- jp m,l1e61h ;1e54 fa 61 1e . a .\r
- ld a,'+' ;1e57 3e 2b > +\r
- call outchar ;1e59 cd 5d 02 . ] .\r
- ld a,(iy+001h) ;1e5c fd 7e 01 . ~ .\r
- jr l1e6bh ;1e5f 18 0a . .\r
-l1e61h:\r
- ld a,'-' ;1e61 3e 2d > -\r
- call outchar ;1e63 cd 5d 02 . ] .\r
- ld a,(iy+001h) ;1e66 fd 7e 01 . ~ .\r
- neg ;1e69 ed 44 . D\r
-l1e6bh:\r
- call out_hex ;1e6b cd 18 02 . . .\r
- jr p_char_rparen\r
-\r
-p_arg_r1:\r
- ld hl,t_BCDEHL_HL_A ;1e73 21 96 1f ! . .\r
- jr p_arg ;1e76 18 32 . 2\r
-\r
-b_1e78_start:\r
- DC '(IX'\r
-l1e7bh:\r
- DC '(IY'\r
\r
-p_arg_hlixiy:\r
- ld a,(isprefix_ixiy) ;1e7e 3a f8 1f : . .\r
- ld hl,t_HL.IX.IY ;1e81 21 c6 1f ! . .\r
- jr p_arg ;1e84 18 24 . $\r
-p_arg_zz:\r
- ld hl,t_BC.DE.HL.AF ;1e86 21 ab 1f ! . .\r
- jr l1e8eh ;1e89 18 03 . .\r
-p_arg_ww:\r
- ld hl,t_BC.DE.HL.SP ;1e8b 21 a2 1f ! . .\r
-l1e8eh:\r
- ld a,(iy+000h) ;1e8e fd 7e 00 . ~ .\r
- rra ;1e91 1f .\r
- rra ;1e92 1f .\r
- rra ;1e93 1f .\r
- rra ;1e94 1f .\r
- and 003h ;1e95 e6 03 . .\r
- cp 002h ;1e97 fe 02 . .\r
- jr z,p_arg_hlixiy ;1e99 28 e3 ( .\r
- jr p_arg ;1e9b 18 0d . .\r
-\r
-p_arg_cc:\r
- ld a,(iy+000h) ;1e9d fd 7e 00 . ~ .\r
-p_arg_cc0:\r
- rra ;1ea0 1f .\r
- rra ;1ea1 1f .\r
- rra ;1ea2 1f .\r
- and 007h ;1ea3 e6 07 . .\r
- ld hl,t_tstfl_ZCPS ;1ea5 21 dc 1f ! . .\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
+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
+ ld a,(iy+000h)\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
+; 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
+; 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
+; 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
+; 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
+; 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
+; 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
+\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 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
+\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
+ 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
+ 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
+p_ir:\r
+ rra\r
+ rra\r
+ rra\r
+ and 03\r
+ ld hl,t_arg_IR\r
+ jr p_arg\r
+\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_y:\r
+ call get_cb_opc\r
+ rra\r
+ rra\r
+ rra\r
+ and 007h\r
+ jp out_dgt\r
+\r
+p_rz_cb:\r
+ call get_cb_opc\r
+ jr p_rz\r
+\r
+p_ry:\r
+ rra\r
+ rra\r
+ rra\r
+p_rz:\r
+ and 007h\r
+ cp 006h\r
+ ld b,a\r
+ ld hl,t_arg_r\r
+ jr nz,p_arg0\r
+ ld a,(isprefix_ixiy)\r
+ and a\r
+ jr z,p_arg0\r
+ ld hl,t_lp_IXIY\r
+ dec a\r
+ call p_arg\r
+ ld a,(iy+001h)\r
+ push af\r
+ rlca\r
+ ld a,'+'\r
+ jr nc,l1e61h\r
+ pop af\r
+ neg\r
+ push af\r
+ ld a,'-'\r
+l1e61h:\r
+ call outchar\r
+ pop af\r
+ call out_hex\r
+ ld a,')'\r
+ jp outchar\r
+\r
+p_rp2:\r
+ ld hl,t_arg_rp2\r
+ db 0ddh ;swallow t_arg_rp in ix\r
+p_rp:\r
+ ld hl,t_arg_rp\r
+ rra\r
+ rra\r
+ rra\r
+ rra\r
+ and 003h\r
+ cp 002h\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_ccy2:\r
+ and 018h\r
+p_ccy:\r
+ rra\r
+ rra\r
+ rra\r
+ and 007h\r
+ ld hl,t_arg_cc\r
p_arg:\r
- ld b,a ;1eaa 47 G\r
- call sel_dc_string ;1eab cd 3d 03 . = .\r
- jp pstr ;1eae c3 88 02 . . .\r
-\r
-p_mnemonic:\r
- call pstr ;1eb9 cd 88 02 . . .\r
-l1ebch:\r
- call outbl ;1ebc cd 9f 02 . . .\r
- inc c ;1ebf 0c .\r
- ld a,c ;1ec0 79 y\r
- cp 5 ;1ec1 fe 05 . .\r
- jr c,l1ebch ;1ec3 20 f7 .\r
- ret ;1ec5 c9 .\r
+ ld b,a\r
+p_arg0:\r
+ ;fall thru\r
+\r
+pstr_sel:\r
+ call str_sel\r
+ ;fall thru\r
+pstr:\r
+ ld a,(hl)\r
+ inc hl\r
+ and a\r
+ ret z\r
+ call outchar\r
+ ret m\r
+ jr pstr\r
+\r
+pstr_inl:\r
+ ex (sp),hl\r
+ call pstr\r
+ ex (sp),hl\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+opc macro x\r
+\r
+i_&x equ opc_index\r
+;o_&x equ $-opc_tabstart\r
+ dc '&x'\r
+opc_index defl opc_index+1\r
+ endm\r
\r
t_MNEMONICS:\r
- DC 'ADC'\r
- DC 'ADD'\r
- DC 'AND'\r
- DC 'BIT'\r
- DC 'CALL'\r
- DC 'CCF'\r
- DC 'CP'\r
- DC 'CPD'\r
- DC 'CPDR'\r
- DC 'CPI'\r
- DC 'CPIR'\r
- DC 'CPL'\r
- DC 'DAA'\r
- DC 'DEC'\r
- DC 'DI'\r
- DC 'DJNZ'\r
- DC 'EI'\r
- DC 'EX'\r
- DC 'EXX'\r
- DC 'HALT'\r
- DC 'IM'\r
- DC 'IN'\r
- DC 'INC'\r
- DC 'IND'\r
- DC 'INDR'\r
- DC 'INI'\r
- DC 'INIR'\r
- DC 'JP'\r
- DC 'JR'\r
- DC 'LD'\r
- DC 'LDD'\r
- DC 'LDDR'\r
- DC 'LDI'\r
- DC 'LDIR'\r
- DC 'NEG'\r
- DC 'NOP'\r
- DC 'OR'\r
- DC 'OTDR'\r
- DC 'OTIR'\r
- DC 'OUT'\r
- DC 'OUTD'\r
- DC 'OUTI'\r
- DC 'POP'\r
- DC 'PUSH'\r
- DC 'RES'\r
- DC 'RET'\r
- DC 'RETI'\r
- DC 'RETN'\r
- DC 'RL'\r
- DC 'RLA'\r
- DC 'RLC'\r
- DC 'RLCA'\r
- DC 'RLD'\r
- DC 'RR'\r
- DC 'RRA'\r
- DC 'RRC'\r
- DC 'RRCA'\r
- DC 'RRD'\r
- DC 'RST'\r
- DC 'SBC'\r
- DC 'SCF'\r
- DC 'SET'\r
- DC 'SLA'\r
- DC 'SRA'\r
- DC 'SRL'\r
- DC 'SUB'\r
- DC 'XOR'\r
- DC 'IN0'\r
- DC 'MLT'\r
- DC 'OTDM'\r
- DC 'OTDMR'\r
- DC 'OTIM'\r
- DC 'OTIMR'\r
- DC 'OUT0'\r
- DC 'SLP'\r
- DC 'TST'\r
- DC 'TSTIO'\r
+;opc_tabstart defl $\r
+opc_index defl 0\r
+; 1-byte other\r
+ opc NOP\r
+ opc LD\r
+ opc INC\r
+ opc DEC\r
+ opc DJNZ\r
+ opc JR\r
+ opc HALT\r
+\r
+ opc RLCA\r
+ opc RRCA\r
+ opc RLA\r
+ opc RRA\r
+ opc DAA\r
+ opc CPL\r
+ opc SCF\r
+ opc CCF\r
+\r
+; 1-byte "alu"\r
+ opc ADD\r
+ opc ADC\r
+ opc SUB\r
+ opc SBC\r
+ opc AND\r
+ opc XOR\r
+ opc OR\r
+ opc CP\r
+\r
+ opc RET\r
+ opc POP\r
+ opc JP\r
+ opc CALL\r
+ opc PUSH\r
+ opc RST\r
+ opc OUT\r
+ opc EXX\r
+ opc IN\r
+ opc EX\r
+ opc DI\r
+ opc EI\r
+; CB\r
+ opc RLC\r
+ opc RRC\r
+ opc RL\r
+ opc RR\r
+ opc SLA\r
+ opc SRA\r
+ opc SLL\r
+ opc SRL\r
+ opc BIT\r
+ opc RES\r
+ opc SET\r
+\r
+; ED\r
+ opc NEG\r
+ opc RETN\r
+ opc RETI\r
+ opc IM\r
+ opc RRD\r
+ opc RLD\r
+\r
+; Block instructions\r
+ opc LDI\r
+ opc CPI\r
+ opc INI\r
+ opc OUTI\r
+ opc LDD\r
+ opc CPD\r
+ opc IND\r
+ opc OUTD\r
+ opc LDIR\r
+ opc CPIR\r
+ opc INIR\r
+ opc OTIR\r
+ opc LDDR\r
+ opc CPDR\r
+ opc INDR\r
+ opc OTDR\r
+\r
+; Z180\r
+ opc IN0\r
+ opc OUT0\r
+ opc TST\r
+ opc MLT\r
+ opc TSTIO\r
+ opc SLP\r
+ opc OTIM\r
+ opc OTDM\r
+ opc OTIMR\r
+ opc OTDMR\r
+\r
DB 0\r
\r
-t_BCDEHL_HL_A:\r
+t_arg_r:\r
DC 'B'\r
DC 'C'\r
DC 'D'\r
DC '(HL)'\r
DC 'A'\r
DB 0\r
-t_BC.DE.HL.SP:\r
+t_arg_rp:\r
DC 'BC'\r
DC 'DE'\r
DC 'HL'\r
DC 'SP'\r
DB 0\r
-t_BC.DE.HL.AF:\r
+t_arg_rp2:\r
DC 'BC'\r
DC 'DE'\r
-t_HL.AF:\r
DC 'HL'\r
DC 'AF'\r
DB 0\r
-t_BC.DE.IY.SP:\r
- DC 'BC'\r
- DC 'DE'\r
- DC 'IY'\r
- DC 'SP'\r
- DB 0\r
-t_BC.DE.IX.SP:\r
- DC 'BC'\r
- DC 'DE'\r
- DC 'IX'\r
- DC 'SP'\r
- DB 0\r
t_HL.IX.IY:\r
DC 'HL'\r
-t_IX.IY:\r
DC 'IX'\r
DC 'IY'\r
DB 0\r
-t_tstfl_ZC:\r
- DC 'NZ'\r
- DC 'Z'\r
- DC 'NC'\r
- DC 'C'\r
- DC 'NE'\r
- DC 'EQ'\r
- DC 'GE'\r
- DC 'LT'\r
- DB 0\r
-t_tstfl_ZCPS:\r
+t_arg_cc:\r
DC 'NZ'\r
DC 'Z'\r
DC 'NC'\r
DC 'PE'\r
DC 'P'\r
DC 'M'\r
- DC 'NE'\r
- DC 'EQ'\r
- DC 'GE'\r
- DC 'LT'\r
- DC 'NV'\r
- DC 'V'\r
- DB 0\r
-t__C_:\r
- DC '(C)'\r
DB 0\r
\r
-sub_1ffeh:\r
- ld hl,(REG.PC) ;1ffe 2a 60 00 * ` .\r
- ld a,h ;2001 7c |\r
- or l ;2002 b5 .\r
- jr z,l2037h ;2003 28 32 ( 2\r
- ld de,BDOS ;2005 11 05 00 . . .\r
- and a ;2008 a7 .\r
- sbc hl,de ;2009 ed 52 . R\r
- ld hl,l20edh ;200b 21 ed 20 ! .\r
- jr z,l2031h ;200e 28 21 ( !\r
- ld iy,(REG.PC) ;2010 fd 2a 60 00 . * ` .\r
- call disas_get_instrlen ;2014 cd 8c 19 . . .\r
- jp nc,ERROR ;2017 d2 07 01 . . .\r
- ld c,b ;201a 48 H\r
- ld b,000h ;201b 06 00 . .\r
- ld hl,(REG.PC) ;201d 2a 60 00 * ` .\r
- add hl,bc ;2020 09 .\r
- call sub_09cah ;2021 cd ca 09 . . .\r
- ld iy,(REG.PC) ;2024 fd 2a 60 00 . * ` .\r
- ld hl,b_2039_start ;2028 21 39 20 ! 9\r
- call lookup_opc ;202b cd 97 1a . . .\r
- ccf ;202e 3f ?\r
- ret c ;202f d8 .\r
- ex de,hl ;2030 eb .\r
+t_lp_IXIY:\r
+ DC '(IX'\r
+ DC '(IY'\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
+\r
+;-------------------------------------------------------------------------------\r
+\r
+tc_set_bp:\r
+ ld hl,(reg.pc)\r
+ ld a,h\r
+ or l\r
+ jr z,l2037h\r
+ ld de,BDOS\r
+ and a\r
+ sbc hl,de\r
+ ld hl,l20edh ;set break after BDOS call\r
+ jr z,l2031h\r
+ ld iy,(reg.pc)\r
+ call disas_get_instrlen\r
+ jp nc,ERROR\r
+ ld c,b\r
+ ld b,0\r
+ ld hl,(reg.pc)\r
+ add hl,bc\r
+ call bp_trace_enter\r
+ ld iy,(reg.pc)\r
+ ld hl,t_op_branch\r
+ call lookup_branch_op\r
+ ccf\r
+ ret c\r
+ ex de,hl\r
l2031h:\r
- call CALL_HL ;2031 cd 0f 01 . . .\r
- call c,sub_09cah ;2034 dc ca 09 . . .\r
+ call CALL_HL\r
+ call c,bp_trace_enter\r
l2037h:\r
- scf ;2037 37 7\r
- ret ;2038 c9 .\r
+ scf\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
\r
-b_2039_start:\r
- db 0ffh,0ddh,000h ;Prefix DD\r
+t_op_branch:\r
+ db 0ffh,0ddh ;Prefix DD\r
dw l20a7h\r
- db 0ffh,0fdh,000h ;Prefix FD\r
+ db 0ffh,0fdh ;Prefix FD\r
dw l20ach\r
- db 0ffh,0edh,000h ;Prefix ED\r
+ db 0ffh,0edh ;Prefix ED\r
dw l20b8h\r
\r
-b_2048_start:\r
- db 0ffh,0cdh,000h ;call mn\r
+ db 0ffh,0cdh ;call mn\r
dw l2080h\r
- db 0ffh,0c3h,000h ;jp mn\r
+ db 0ffh,0c3h ;jp mn\r
dw l208bh\r
- db 0ffh,0e9h,000h ;jp ()\r
+ db 0ffh,0e9h ;jp ()\r
dw l20a2h\r
- db 0ffh,0c9h,000h ;ret\r
+ db 0ffh,0c9h ;ret\r
dw l20dch\r
- db 0ffh,0cfh,000h ;rst 8\r
+ db 0ffh,0cfh ;rst 8\r
dw l2115h\r
- db 0c7h,0c7h,000h ;\r
+ db 0c7h,0c7h ;rst n\r
dw l20f9h\r
- db 0c7h,0c4h,000h ;\r
+ db 0c7h,0c4h ;call cc,mn\r
dw l2080h\r
- db 0f7h,010h,000h ;\r
+ db 0f7h,010h ;djnz d; jr d\r
dw l2093h\r
- db 0e7h,020h,000h ;\r
+ db 0e7h,020h ;jr cc,d\r
dw l2093h\r
- db 0c7h,0c2h,000h ;\r
+ db 0c7h,0c2h ;jp cc,mn\r
dw l208bh\r
- db 0c7h,0c0h,000h ;\r
+ db 0c7h,0c0h ;ret cc\r
dw l20c5h\r
db 0\r
\r
+;-------------------------------------------------------------------------------\r
+; call mn call cc,mn\r
l2080h:\r
- ld a,(b_21e2_start) ;2080 3a e2 21 : . !\r
- and a ;2083 a7 .\r
- jr nz,l208bh ;2084 20 05 .\r
- ld a,(trace_call_flag) ;2086 3a e3 21 : . !\r
- and a ;2089 a7 .\r
- ret nz ;208a c0 .\r
+\r
+; jp mn jp cc,mn\r
l208bh:\r
- ld l,(iy+001h) ;208b fd 6e 01 . n .\r
- ld h,(iy+002h) ;208e fd 66 02 . f .\r
- scf ;2091 37 7\r
- ret ;2092 c9 .\r
+ ld l,(iy+001h)\r
+ ld h,(iy+002h)\r
+ scf\r
+ ret\r
+\r
l2093h:\r
- ld c,(iy+001h) ;2093 fd 4e 01 . N .\r
- ld a,c ;2096 79 y\r
- rla ;2097 17 .\r
- sbc a,a ;2098 9f .\r
- ld b,a ;2099 47 G\r
- ld hl,(REG.PC) ;209a 2a 60 00 * ` .\r
- add hl,bc ;209d 09 .\r
- inc hl ;209e 23 #\r
- inc hl ;209f 23 #\r
- scf ;20a0 37 7\r
- ret ;20a1 c9 .\r
+ ld c,(iy+001h)\r
+ ld a,c\r
+ rla\r
+ sbc a,a\r
+ ld b,a\r
+ ld hl,(reg.pc)\r
+ add hl,bc\r
+ inc hl\r
+ inc hl\r
+ scf\r
+ ret\r
+\r
+; jp (hl)\r
l20a2h:\r
- ld hl,(reg.l) ;20a2 2a 5a 00 * Z .\r
- scf ;20a5 37 7\r
- ret ;20a6 c9 .\r
+ ld hl,(reg.l)\r
+ scf\r
+ ret\r
+\r
+; Prefix DD\r
l20a7h:\r
- ld hl,(reg.ix) ;20a7 2a 52 00 * R .\r
- jr l20afh ;20aa 18 03 . .\r
+ ld hl,(reg.ix)\r
+ jr l20afh\r
+; Prefix FD\r
l20ach:\r
- ld hl,(reg.iy) ;20ac 2a 50 00 * P .\r
+ ld hl,(reg.iy)\r
l20afh:\r
- ld a,(iy+001h) ;20af fd 7e 01 . ~ .\r
- cp 0e9h ;20b2 fe e9 . .\r
- scf ;20b4 37 7\r
- ret z ;20b5 c8 .\r
- and a ;20b6 a7 .\r
- ret ;20b7 c9 .\r
+ ld a,(iy+001h)\r
+ cp 0e9h ; jp (ix); jp (iy)\r
+ scf\r
+ ret z\r
+ and a\r
+ ret\r
+\r
+; Prefix ED\r
l20b8h:\r
- ld a,(iy+001h) ;20b8 fd 7e 01 . ~ .\r
- cp 04dh ;20bb fe 4d . M\r
- jr z,l20dch ;20bd 28 1d ( .\r
- cp 045h ;20bf fe 45 . E\r
- jr z,l20dch ;20c1 28 19 ( .\r
- and a ;20c3 a7 .\r
- ret ;20c4 c9 .\r
+ ld a,(iy+001h)\r
+ cp 04dh ; reti\r
+ jr z,l20dch\r
+ cp 045h ; retn\r
+ jr z,l20dch\r
+ and a\r
+ ret\r
l20c5h:\r
- ld a,(iy+000h) ;20c5 fd 7e 00 . ~ .\r
- ld (l20d7h),a ;20c8 32 d7 20 2 .\r
- ld hl,(reg.f) ;20cb 2a 54 00 * T .\r
- push hl ;20ce e5 .\r
- pop af ;20cf f1 .\r
- call l20d7h ;20d0 cd d7 20 . .\r
- scf ;20d3 37 7\r
- jr c,l20dch ;20d4 38 06 8 .\r
- ret ;20d6 c9 .\r
+ ld a,(iy+000h)\r
+ ld (l20d7h),a\r
+ ld hl,(reg.f)\r
+ push hl\r
+ pop af\r
+ call l20d7h\r
+ scf\r
+ jr c,l20dch\r
+ ret\r
l20d7h:\r
- nop ;20d7 00 .\r
- and a ;20d8 a7 .\r
- pop hl ;20d9 e1 .\r
- inc hl ;20da 23 #\r
- jp (hl) ;20db e9 .\r
+ nop\r
+ and a\r
+ pop hl\r
+ inc hl\r
+ jp (hl)\r
\r
l20dch:\r
- ld a,(b_21e2_start) ;20dc 3a e2 21 : . !\r
- and a ;20df a7 .\r
- jr nz,l20edh ;20e0 20 0b .\r
- ld a,(trace_call_flag) ;20e2 3a e3 21 : . !\r
- and a ;20e5 a7 .\r
- jr z,l20edh ;20e6 28 05 ( .\r
- call l20edh ;20e8 cd ed 20 . .\r
- pop hl ;20eb e1 .\r
- ret ;20ec c9 .\r
l20edh:\r
- ld hl,(reg_sp) ;20ed 2a 5c 00 * \ .\r
- ld e,(hl) ;20f0 5e ^\r
- inc hl ;20f1 23 #\r
- ld d,(hl) ;20f2 56 V\r
- ex de,hl ;20f3 eb .\r
- call sub_09cah ;20f4 cd ca 09 . . .\r
- and a ;20f7 a7 .\r
- ret ;20f8 c9 .\r
+ ld hl,(reg_sp) ;break on return address\r
+ ld e,(hl)\r
+ inc hl\r
+ ld d,(hl)\r
+ ex de,hl\r
+ call bp_trace_enter\r
+l2115h:\r
+ and a\r
+ ret\r
\r
l20f9h:\r
- ld a,(l0003h) ;20f9 3a 03 00 : . .\r
- cp (iy+000h) ;20fc fd be 00 . . .\r
- ret z ;20ff c8 .\r
- ld a,(iy+000h) ;2100 fd 7e 00 . ~ .\r
- and 038h ;2103 e6 38 . 8\r
- ld l,a ;2105 6f o\r
- ld h,000h ;2106 26 00 & .\r
- ld a,(b_21e2_start) ;2108 3a e2 21 : . !\r
- and a ;210b a7 .\r
- jr nz,l2113h ;210c 20 05 .\r
- ld a,(trace_call_flag) ;210e 3a e3 21 : . !\r
- and a ;2111 a7 .\r
- ret nz ;2112 c0 .\r
-l2113h:\r
- scf ;2113 37 7\r
- ret ;2114 c9 .\r
-l2115h:\r
- and a ;2115 a7 .\r
- ret ;2116 c9 .\r
-cmd_C:\r
- ld hl,cmd_C ;2117 21 17 21 ! . !\r
- ld a,001h ;211a 3e 01 > .\r
- jr l2122h ;211c 18 04 . .\r
+ ld a,(l0003h)\r
+ cp (iy+000h)\r
+ ret z\r
+ ld a,(iy+000h)\r
+ and 038h\r
+ ld l,a\r
+ ld h,000h\r
+ ld a,(b_21e2_start)\r
+ and a\r
+ ret z\r
+ scf\r
+ ret\r
+\r
+;-------------------------------------------------------------------------------\r
+; >>C[N][J] [steps]\r
+; >>C[N][J] W expression\r
+; >>C[N][J] U expression\r
+; trace over Calls [No list] [Jumps only] /.While./.Until.\r
+\r
+\r
+;-------------------------------------------------------------------------------\r
+; >>T[N][J] [steps]\r
+; >>T[N][J] W expression\r
+; >>T[N][J] U expression\r
+; Trace [no List] [Jumps only] / .While. / .Until.\r
+\r
cmd_T:\r
- xor a ;211e af .\r
- ld hl,cmd_T ;211f 21 1e 21 ! . !\r
-l2122h:\r
- ld (cmd_rpt),hl ;2122 22 68 00 " h .\r
- ld (trace_call_flag),a ;2125 32 e3 21 2 . !\r
- ld a,(de) ;2128 1a .\r
- sub 'N' ;2129 d6 4e . N\r
- jr nz,l212eh ;212b 20 01 .\r
- inc de ;212d 13 .\r
-l212eh:\r
- ld (trace_N_flag),a ;212e 32 e7 21 2 . !\r
- ld a,(de) ;2131 1a .\r
- sub 'J' ;2132 d6 4a . J\r
- jr nz,l2137h ;2134 20 01 .\r
- inc de ;2136 13 .\r
-l2137h:\r
- ld (trace_J_flag),a ;2137 32 e8 21 2 . !\r
- call sub_21a6h ;213a cd a6 21 . . !\r
- jr z,l2145h ;213d 28 06 ( .\r
- ld hl,1 ;213f 21 01 00 ! . .\r
- call get_lastarg_def ;2142 cd 69 03 . i .\r
-l2145h:\r
- ld (trace_count),hl ;2145 22 e5 21 " . !\r
- sub a ;2148 97 .\r
- ld (l0941h),a ;2149 32 41 09 2 A .\r
-l214ch:\r
- call sub_1ffeh ;214c cd fe 1f . . .\r
- jr l21a3h ;214f 18 52 . R\r
+ ld (cmd_rpt),hl\r
+ ld hl,1 ;default: 1 step\r
+ call get_lastarg_def\r
+ ld (trace_cnt_or_ptr),hl\r
+ sub a\r
+ ld (bp_p_cpu_flag),a\r
+ call tc_set_bp\r
+ jr user_go1\r
\r
l2151h:\r
- call bp_clr_temporary ;2151 cd 54 07 . T .\r
- ld a,(trace_J_flag) ;2154 3a e8 21 : . !\r
- and a ;2157 a7 .\r
- jr nz,l216bh ;2158 20 11 .\r
- ld iy,(REG.PC) ;215a fd 2a 60 00 . * ` .\r
- call sub_21c8h ;215e cd c8 21 . . !\r
- jr z,l216bh ;2161 28 08 ( .\r
- ld hl,b_2048_start ;2163 21 48 20 ! H\r
- call lookup_opc ;2166 cd 97 1a . . .\r
- jr nc,l214ch ;2169 30 e1 0 .\r
-l216bh:\r
- ld a,(trace_UW_flag) ;216b 3a e4 21 : . !\r
- and a ;216e a7 .\r
- jr z,l2188h ;216f 28 17 ( .\r
- ld de,(trace_count) ;2171 ed 5b e5 21 . [ . !\r
- call expr ;2175 cd be 03 . . .\r
- ld a,h ;2178 7c |\r
- or l ;2179 b5 .\r
- add a,0ffh ;217a c6 ff . .\r
- sbc a,a ;217c 9f .\r
- ld hl,trace_UW_flag ;217d 21 e4 21 ! . !\r
- xor (hl) ;2180 ae .\r
- bit 1,a ;2181 cb 4f . O\r
- jr z,l2193h ;2183 28 0e ( .\r
-l2185h:\r
- jp l0902h ;2185 c3 02 09 . . .\r
-l2188h:\r
- ld hl,(trace_count) ;2188 2a e5 21 * . !\r
- dec hl ;218b 2b +\r
- ld (trace_count),hl ;218c 22 e5 21 " . !\r
- ld a,h ;218f 7c |\r
- or l ;2190 b5 .\r
- jr z,l2185h ;2191 28 f2 ( .\r
-l2193h:\r
- call sub_1ffeh ;2193 cd fe 1f . . .\r
- jr nc,l2185h ;2196 30 ed 0 .\r
- ld a,(trace_N_flag) ;2198 3a e7 21 : . !\r
- ld b,a ;219b 47 G\r
- ld a,(l0941h) ;219c 3a 41 09 : A .\r
- or b ;219f b0 .\r
- ld (l0941h),a ;21a0 32 41 09 2 A .\r
-l21a3h:\r
- jp user_go ;21a3 c3 25 0a . % .\r
-\r
-sub_21a6h:\r
- call skipbl ;21a6 cd bf 02 . . .\r
- xor a ;21a9 af .\r
- ld (trace_UW_flag),a ;21aa 32 e4 21 2 . !\r
- ld a,(de) ;21ad 1a .\r
- cp 'U' ;21ae fe 55 . U\r
- jr z,l21b5h ;21b0 28 03 ( .\r
- cp 'W' ;21b2 fe 57 . W\r
- ret nz ;21b4 c0 .\r
-l21b5h:\r
- inc de ;21b5 13 .\r
- push af ;21b6 f5 .\r
- push de ;21b7 d5 .\r
- call expr ;21b8 cd be 03 . . .\r
- jp c,ERROR ;21bb da 07 01 . . .\r
- call assert_eol ;21be cd d6 02 . . .\r
- pop hl ;21c1 e1 .\r
- pop af ;21c2 f1 .\r
- ld (trace_UW_flag),a ;21c3 32 e4 21 2 . !\r
- sub a ;21c6 97 .\r
- ret ;21c7 c9 .\r
-\r
-sub_21c8h:\r
- ld a,(iy+000h) ;21c8 fd 7e 00 . ~ .\r
- cp 0edh ;21cb fe ed . .\r
- jr z,l21dah ;21cd 28 0b ( .\r
- and 0dfh ;21cf e6 df . .\r
- cp 0ddh ;21d1 fe dd . .\r
- ret nz ;21d3 c0 .\r
- ld a,(iy+001h) ;21d4 fd 7e 01 . ~ .\r
- cp 0e9h ;21d7 fe e9 . .\r
- ret ;21d9 c9 .\r
-l21dah:\r
- ld a,(iy+001h) ;21da fd 7e 01 . ~ .\r
- and 0f7h ;21dd e6 f7 . .\r
- cp 045h ;21df fe 45 . E\r
- ret ;21e1 c9 .\r
+ call bp_clr_temporary\r
+ ld hl,(trace_cnt_or_ptr)\r
+ dec hl\r
+ ld (trace_cnt_or_ptr),hl\r
+ ld a,h\r
+ or l\r
+ jp z,do_break\r
\r
-b_21e2_start:\r
- db 0\r
-trace_call_flag:\r
- db 0 ;1=call, 0=trace\r
-trace_UW_flag:\r
- db 0 ;0 or 'U' or 'W'\r
-trace_count:\r
- dw 0\r
-trace_N_flag:\r
- db 0 ;0 if 'N'\r
-trace_J_flag:\r
- db 0 ;0 if 'J'\r
+ call tc_set_bp\r
+ jp nc,do_break\r
+ sbc a,a\r
+ ld (bp_p_cpu_flag),a\r
+user_go1:\r
+ jp user_go\r
\r
;-------------------------------------------------------------------------------\r
\r
con_col:\r
db 0\r
\r
-l0941h:\r
+;-------------------------------------------------------------------------------\r
+\r
+b_21e2_start:\r
+ db 0\r
+trace_cnt_or_ptr:\r
+ dw 0\r
+\r
+bp_p_cpu_flag:\r
db 0\r
\r
bp_tab:\r
endm\r
endm\r
\r
-expr_p1:\r
- dw expr_buf\r
-expr_p2:\r
- dw expr_buf\r
-\r
-expr_buf:\r
-current_cseg defl $ - current_cseg\r
- .phase current_phase + current_cseg\r
-\r
-start:\r
- LD SP,ldr_end+(stack-ddtz_base)\r
- LD DE,signon ;ldr_end+(expr_buf-ddtz_base)\r
- LD C,BDOS_PSTR\r
- CALL BDOS\r
-\r
- xor a\r
- dec a\r
- jp po,reloc\r
- ld de,msgz80\r
- LD C,BDOS_PSTR\r
- CALL BDOS\r
- jp 0\r
-\r
-reloc:\r
- LD HL,ldr_end+ddtz_size ;start of reloc bitmap\r
- ld bc,0108h ;init bit counter\r
-\r
- EXX\r
- LD HL,(BDOS+1)\r
- LD (ldr_end+(ddtz_bdos+1-ddtz_base)),HL\r
- LD BC,ddtz_size-1\r
- LD D,B\r
- LD E,0FFH\r
- INC DE ;size rounded up to next page boundary\r
- INC BC ;ddtz_size\r
- OR A\r
- SBC HL,DE ;BDOS - size\r
- LD (BDOS+1),HL ;-> new BDOS entry\r
-\r
- push hl\r
- PUSH BC\r
- ld de,ldr_end\r
- sbc hl,de\r
- EX DE,HL ;-> DE\r
- LD HL,ldr_size\r
- add hl,bc\r
- ld b,h\r
- ld c,l\r
- LD HL,TPA\r
-reloc_lp:\r
- EXX\r
- djnz reloc_nl\r
- ld b,c ;reload bit counter\r
- LD e,(HL) ;get next 8 relocation bits\r
- INC HL\r
-reloc_nl:\r
- sla e\r
- EXX\r
- JR NC,reloc_next\r
- DEC HL\r
- LD A,(HL)\r
- ADD A,E\r
- LD (HL),A\r
- INC HL\r
- LD A,(HL)\r
- ADC A,D\r
- LD (HL),A\r
-reloc_next:\r
- cpi\r
- jp pe,reloc_lp\r
- dec hl\r
-\r
- POP BC\r
- pop de\r
- EX DE,HL\r
- ADD HL,BC\r
- EX DE,HL\r
- DEC DE\r
- LDDR\r
- LD HL,conbuf+2-ddtz_base\r
- ADD HL,DE\r
- JP (HL)\r
-\r
-current_phase defl $\r
- .dephase\r
-current_cseg defl $\r
-\r
- ds EXPR_BUF_SIZE - ($ - expr_buf)\r
-expr_bufe:\r
-\r
-msg_Y:\r
- dc 'Yn'\r
-reg_Y:\r
- rept YREG_CNT\r
- dw 0\r
- endm\r
+;-------------------------------------------------------------------------------\r
\r
last_S:\r
dw TPA\r
last_O_val:\r
db 0\r
\r
-cmd_Q_jopt:\r
- db -1\r
-\r
last_D:\r
dw TPA\r
\r
-cmdR_rindex:\r
- db 0\r
-\r
high_load:\r
dw TPA\r
max_load:\r
dw TPA\r
\r
-l1262h:\r
- dw 0\r
-last_A:\r
- dw TPA\r
-cmd_A_prev:\r
- dw TPA\r
-\r
-prefix_ixiy:\r
- db 0\r
-\r
isprefix_ixiy:\r
db 0\r
last_L:\r
dw TPA\r
-l1ffbh:\r
- dw 0\r
-l1ffdh:\r
- db 0\r
\r
-cur_fcb:\r
- dw 0\r
-fcbsym:\r
- ds 33\r
+pbl_loop_adr:\r
+ dw 0addeh\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+conbuf::\r
+ ds CONBUF_SIZE+1\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+ rept (STACK_SIZE+3)/4\r
+ db 0deh,0adh,0beh,0efh\r
+ endm\r
+stack::\r
+reg.l2: db 000h\r
+reg.h2: db 000h\r
+reg.e2: db 000h\r
+reg.d2: db 000h\r
+reg.c2: db 000h\r
+reg.b2: db 000h\r
+reg.f2: db 000h\r
+reg.a2: db 000h\r
+ db 000h\r
+reg.i: db 000h\r
+reg.iy: dw 0000h\r
+reg.ix: dw 0000h\r
+reg.f: db 000h\r
+reg.a: db 000h\r
+reg.c: db 000h\r
+reg.b: db 000h\r
+reg.e: db 000h\r
+reg.d: db 000h\r
+reg.l: db 000h\r
+reg.h: db 000h\r
+reg_sp: dw TPA\r
+reg.iff:\r
+ db 0f3h\r
+ db 0c3h\r
+reg.pc: dw TPA\r
+\r
+cmd_rpt:dw mainloop\r
+\r
+;-------------------------------------------------------------------------------\r
\r
ddtz_size equ $-ddtz_base\r
-ddtz_end:\r
+prog_size equ $-start\r
+ddtz_end::\r
\r
;-------------------------------------------------------------------------------\r
\r