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