]> cloudbase.mooo.com Git - ddt180.git/blobdiff - ddt180.z80
Remove W option from cmds S,Q,Z; J otion from Q
[ddt180.git] / ddt180.z80
index 27633290173f65f08c6e8b42cbc5b431dcb9389e..3a445c3b6f080106444fce47e1dd760521263965 100644 (file)
@@ -29,32 +29,21 @@ current_cseg        defl    $
 \r
 ; Some greneral definitions\r
 \r
-TAB            equ     9\r
-LF             equ     10\r
-CR             equ     13\r
+BS             equ     08h\r
+TAB            equ     09h\r
+CR             equ     0dh\r
+LF             equ     0ah\r
+DEL            equ     7fh\r
+CNTRX          equ     'X'-'@'\r
 \r
 ; CP/M memory layout\r
 \r
 BDOS           equ     5\r
-dfcb1          equ     05ch\r
-dfcb2          equ     06ch\r
-DMA_BUF                equ     080h\r
 TPA            equ     0100h\r
 \r
 ; BDOS function calls\r
 \r
-BDOS_CIN       equ     1       ;Console Input\r
-BDOS_COUT      equ     2       ;Console Output\r
 BDOS_PSTR      equ     9       ;Print String\r
-BDOS_CBUF      equ     10      ;Read Console Buffer\r
-BDOS_CSTAT     equ     11      ;Get Console Status\r
-BDOS_OPEN      equ     15      ;Open File\r
-BDOS_CLOSE     equ     16      ;Close File\r
-BDOS_DELETE    equ     19      ;Delete File\r
-BDOS_READ      equ     20      ;Read Sequential\r
-BDOS_WRITE     equ     21      ;Write Sequential\r
-BDOS_CREATE    equ     22      ;Make File\r
-BDOS_SETDMA    equ     26      ;Set DMA Address\r
 \r
 ; ddtz specific definitions\r
 \r
@@ -62,7 +51,7 @@ STACK_SIZE    equ     80      ;ddtz internal stack
 CONBUF_SIZE    equ     80      ;Size of console input buffer\r
 EXPR_BUF_SIZE  equ     128     ;expressen buffer for conditional breakpoints\r
 BP_CNT         equ     12      ;Number of breakpoints\r
-BP_SIZE                equ     6       ;Size of a breakpoint record\r
+BP_SIZE                equ     4       ;Size of a breakpoint record\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
@@ -157,16 +146,36 @@ l0093h:
        ld hl,ddtz_base\r
        ld l,000h\r
        ld (reg_sp),hl\r
-       ld a,(dfcb1+1)\r
-       cp ' '\r
-       ld hl,0\r
-       call nz,read_file\r
+\r
+       ld hl,(1)               ;wboot addr\r
+       ld de,?const\r
+       ld b,6\r
+vini_l:\r
+       inc     hl\r
+       inc     hl\r
+       inc     hl\r
+       ex      de,hl\r
+       inc     hl\r
+       ld      (hl),e\r
+       inc     hl\r
+       ld      (hl),d\r
+       inc     hl\r
+       ex      de,hl\r
+       djnz    vini_l\r
+\r
        jr mainloop\r
 \r
        ds      CONBUF_SIZE + 3 - ($ - conbuf)\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
+?const:        jp      0               ; return console input status\r
+?conin:        jp      0               ; return console input character\r
+?cono: jp      0               ; send console output character\r
+?list: jp      0               ; send list output character\r
+?auxo: jp      0               ; send auxiliary output character\r
+?auxi: jp      0               ; return auxiliary input character\r
+\r
 CMDTAB:\r
        dw      ERROR ;cmd_@    ;examine/substitute the displacement register @\r
        dw      ERROR ;cmd_A    ;Assemble\r
@@ -174,7 +183,7 @@ CMDTAB:
        dw      ERROR ;cmd_C    ;trace over Calls\r
        dw      cmd_D           ;Display memory in hex and ascii\r
        dw      ERROR           ;\r
-       dw      cmd_F           ;specify Filename and command line\r
+       dw      ERROR ;cmd_F    ;specify Filename and command line\r
        dw      cmd_G           ;Go\r
        dw      cmd_H           ;compute Hex and other expressions\r
        dw      cmd_I           ;Input a byte from port\r
@@ -191,7 +200,7 @@ CMDTAB:
        dw      cmd_T           ;Trace\r
        dw      ERROR           ;\r
        dw      cmd_V           ;Verify (compare) two memory areas\r
-       dw      cmd_W           ;Write a file to disk\r
+       dw      ERROR ;cmd_W    ;Write a file to disk\r
        dw      cmd_X           ;eXamine [and substitute] registers\r
        dw      ERROR ;cmd_Y    ;examine [and substitute] Y variables\r
        dw      cmd_Z           ;Zap (fill) memory with a byte string\r
@@ -240,9 +249,9 @@ exe_hl:
 crlf:\r
        call    pstr_inl\r
        dc      CR,LF\r
-       call inchar\r
-       ld a,0\r
+       xor a\r
        ld (con_col),a\r
+       call inchar\r
        jr c,mainloop\r
        ret\r
 \r
@@ -371,9 +380,8 @@ outchar:
        push bc\r
        push af\r
        and 07fh\r
-       ld e,a\r
-       ld c,BDOS_COUT\r
-       call ddtz_bdos\r
+       ld      c,a\r
+       call    ?cono\r
        ld hl,con_col\r
        inc (hl)\r
        pop af\r
@@ -390,7 +398,6 @@ pstr:
        and a\r
        ret z\r
        call outchar\r
-       and a\r
        ret m\r
        jr pstr\r
 \r
@@ -410,41 +417,114 @@ p_goto_col:
 \r
 ;-------------------------------------------------------------------------------\r
 \r
+incharw:\r
+       call inchar\r
+       jr nc,incharw\r
+       ret\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
 inchar:\r
        push ix\r
        push hl\r
        push de\r
        push bc\r
-       ld c,BDOS_CSTAT\r
-       call ddtz_bdos\r
+       call    ?const\r
        and a\r
-       jr z,l0284h\r
-       ld c,BDOS_CIN\r
-       call ddtz_bdos\r
+       jr      z,inch1\r
+       call    ?conin\r
        scf\r
-l0284h:\r
+inch1:\r
        pop bc\r
        pop de\r
        pop hl\r
        pop ix\r
        ret\r
 \r
+;-------------------------------------------------------------------------------\r
+\r
+DELC:\r
+       ld      a,b\r
+       or      a\r
+       ret     z\r
+       call    DELC1\r
+       dec     hl\r
+       dec     b\r
+       inc     c\r
+       ld      a,(hl)\r
+       cp      ' '\r
+       ret     nc\r
+DELC1:\r
+       call    pstr_inl\r
+       dc      BS,' ',BS\r
+       ret\r
+\r
+DELL:\r
+       ld a,b                  ;\r
+       or a                    ;\r
+       ret z                   ;\r
+       call DELC               ;\r
+       jr DELL                 ;\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
 get_line:\r
-       push hl\r
-       ld de,conbuf\r
-       ld c,BDOS_CBUF\r
-       call ddtz_bdos\r
-       call crlf\r
-       ld hl,conbuf+1\r
-       ld      e,(hl)\r
-       xor     a\r
-       ld      d,a\r
+       push hl                 ;\r
+       ld hl,conbuf            ;\r
+       ld c,(hl)               ;\r
+       inc hl                  ;\r
+       ld b,000h               ;\r
+       inc hl                  ;\r
+inlnxtch:\r
+       ld a,c                  ;\r
+       or a                    ;\r
+       jr z,inl_e              ;\r
+       call incharw            ;\r
+       cp CR                   ;\r
+       jr z,inl_e              ;Accept line\r
+       cp LF                   ;\r
+       jr z,inl_e              ;Accept line\r
+\r
+       cp BS                   ;\r
+       jr z,gl_1               ;\r
+       cp DEL                  ;\r
+       jr nz,gl_2              ;\r
+gl_1:\r
+       call DELC               ;Delete Char\r
+       jr inlnxtch             ;\r
+gl_2:\r
+       cp CNTRX                ;\r
+       jr nz,gl_3              ;\r
+       call DELL               ;Delete Line\r
+       jr inlnxtch             ;\r
+gl_3:\r
+       cp TAB                  ;\r
+       jr nz,gl_4              ;\r
+       ld a,' '                ;\r
+gl_4:\r
+       ld (hl),a               ;\r
+       cp ' '                  ;\r
+       jr nc,gl_5              ;\r
+       ld a,'^'                ;Controll characters\r
+       call outchar            ;\r
+       ld a,(hl)               ;\r
+       add a,'@'               ;\r
+gl_5:\r
+       call outchar            ;\r
+       inc hl                  ;\r
+       inc b                   ;\r
+       dec c                   ;\r
+       jr inlnxtch             ;\r
+\r
+inl_e:\r
+       ld (hl),0\r
+       ld hl,conbuf+1          ;\r
+       ld (hl),b               ;\r
+       call CRLF               ;\r
        inc     hl\r
        ex      de,hl\r
-       add     hl,de\r
-       ld      (hl),a\r
-       pop hl\r
-       ret\r
+       pop hl                  ;\r
+       ret                     ;\r
 \r
 ;-------------------------------------------------------------------------------\r
 \r
@@ -465,17 +545,20 @@ skipbl0:
        inc de\r
 skipbl:\r
        call get_char_upper\r
-       call test_whitespace\r
+       cp ' '\r
+       jr z,skipbl0\r
+       cp TAB\r
        jr z,skipbl0\r
        or a\r
        ret\r
 \r
+;-------------------------------------------------------------------------------\r
+\r
 next_arg:\r
        call skipbl\r
        cp ','\r
        ret nz\r
-       inc de\r
-       call skipbl\r
+       call skipbl0\r
        cp a\r
        ret\r
 \r
@@ -1379,11 +1462,10 @@ bp_clr_temporary:
 ;      set breakpoints\r
 ; > BX\r
 ;      clear all breakpoints\r
-; > BX address [address..]\r
+; > BX breakp [breakp..]\r
 ;      clear breakpoints\r
 ;\r
-; where breakp is:\r
-;      expression\r
+; breakp can be any valid expression\r
 \r
 cmd_B:\r
        call skipbl\r
@@ -1467,9 +1549,6 @@ bp_enter:
        pop de\r
        ld (ix+002h),l\r
        ld (ix+003h),h\r
-       call bp_get_count\r
-       ld (ix+004h),l\r
-       ld (ix+005h),h\r
        call next_arg\r
        pop af\r
        ld (ix+000h),a\r
@@ -1487,15 +1566,6 @@ bp_get_freeslot:
 error12\r
        jp ERROR\r
 \r
-bp_get_count:\r
-       call skipbl\r
-       ld hl,1\r
-       cp ':'\r
-       ret nz\r
-       inc de\r
-       call expr\r
-       jr c,error12\r
-       ret\r
 \r
 ;-------------------------------------------------------------------------------\r
 ; Breakpoint handling routine.\r
@@ -1563,32 +1633,14 @@ sub_0913h:
        ld d,(ix+003h)\r
        ld hl,(reg.pc)\r
        call cp_hl_de\r
-       push bc\r
-       call z,sub_0942h\r
-       pop bc\r
-l0938h:\r
-\r
-       call    bpl_next\r
-       ex af,af'\r
-       ret\r
-\r
-sub_0942h:\r
+       jr nz,l0938h\r
        ex af,af'\r
        res 7,a\r
-       ex af,af'\r
-       ld e,(ix+004h)\r
-       ld d,(ix+005h)\r
-       dec de\r
-       ld a,d\r
-       or e\r
-       jr z,l0974h\r
-       ld (ix+004h),e\r
-       ld (ix+005h),d\r
-       ret\r
-l0974h:\r
-       ex af,af'\r
        or (ix+000h)\r
        ex af,af'\r
+l0938h:\r
+       call    bpl_next\r
+       ex af,af'\r
        ret\r
 \r
 bp_restore_mem:\r
@@ -1629,8 +1681,6 @@ bp_tst_e:
 \r
 bp_trace_enter:\r
        call bp_get_freeslot\r
-       ld (ix+004h),001h\r
-       ld (ix+005h),000h\r
        ld (ix+002h),l\r
        ld (ix+003h),h\r
        ld a,(b_21e2_start)\r
@@ -2056,29 +2106,17 @@ l0dedh:
        call crlf\r
 l0e10h:\r
        pop bc\r
-       inc hl\r
        inc de\r
-       dec bc\r
-       ld a,b\r
-       or c\r
-       jr nz,l0dedh\r
+       cpi\r
+       jp pe,l0dedh\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
-; > M[V] startaddr endaddr destaddr\r
-;      Move memory [and verify]\r
+; > M startaddr endaddr destaddr\r
+;      Move memory\r
 \r
 cmd_M:\r
-       call get_char_upper\r
-       cp 'V'\r
-       jr nz,l0e1fh\r
-       inc de\r
-l0e1fh:\r
-       push af\r
        call sub_034eh\r
-       push hl\r
-       push de\r
-       push bc\r
        call cp_hl_de\r
        jr nc,cmdm_up\r
        add hl,bc\r
@@ -2091,11 +2129,6 @@ l0e1fh:
        db 01h          ;swallow ldir instruction (ld bc,...)\r
 cmdm_up:\r
        ldir\r
-       pop bc\r
-       pop de\r
-       pop hl\r
-       pop af\r
-       jr z,l0dedh\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -2128,32 +2161,31 @@ cmd_H:
 ;      Query memory for a byte string [Justified]\r
 \r
 cmd_Q:\r
-       call get_char_upper\r
-       sub 'J'\r
-       ld (cmd_Q_jopt),a\r
-       jr nz,l0e8dh\r
-       inc de\r
-l0e8dh:\r
        call get_arg_range\r
        push bc\r
        push hl\r
        call sub_0ee6h\r
        pop hl\r
 l0e96h:\r
-       call sub_0ed7h\r
+       push    hl\r
+       push    de\r
+       push bc\r
+l0edah:\r
+       ld a,(de)\r
+       cp (hl)\r
+       jr nz,l0ee2h\r
+       inc de\r
+       inc hl\r
+       djnz l0edah\r
+l0ee2h:\r
+       pop bc\r
+       pop de\r
+       pop hl\r
        jr nz,l0eb0h\r
        push bc\r
-       push hl\r
-       ld a,(cmd_Q_jopt)\r
-       or a\r
-       jr nz,l0ea7h\r
-       ld bc,-8\r
-       add hl,bc\r
-l0ea7h:\r
        ld bc,16\r
-       and a\r
+       and a                   ;clear carry\r
        call sub_0f58h\r
-       pop hl\r
        pop bc\r
 l0eb0h:\r
        inc hl\r
@@ -2192,23 +2224,6 @@ l0ed3h:
        pop hl\r
        ret\r
 \r
-sub_0ed7h:\r
-       push    hl\r
-       push    de\r
-       push bc\r
-l0edah:\r
-       ld a,(de)\r
-       cp (hl)\r
-       jr nz,l0ee2h\r
-       inc de\r
-       inc hl\r
-       djnz l0edah\r
-l0ee2h:\r
-       pop bc\r
-       pop de\r
-       pop hl\r
-       ret\r
-\r
 sub_0ee6h:\r
        ld hl,conbuf+1\r
        call sub_0ef7h\r
@@ -2219,26 +2234,13 @@ sub_0ee6h:
        ret nz\r
        jp ERROR\r
 \r
-sub_0ef7h:\r
-       db      0e6h            ; and 037h (clear carry)\r
-sub_0ef8h:\r
+sub_0ef7h:                     ;from cmd_Q, cmd_Z\r
+       db      0e6h            ;and 037h (clear carry)\r
+sub_0ef8h:                     ;from cmd_S\r
        scf\r
 l0ef9h:\r
        push af\r
        call next_arg\r
-       cp 'W'\r
-       jr nz,l0f0eh\r
-       inc de\r
-       push hl\r
-       call sub_035dh\r
-       ex de,hl\r
-       ex (sp),hl\r
-       ld (hl),e\r
-       inc hl\r
-       ld a,d\r
-       pop de\r
-       jr l0f1ah\r
-l0f0eh:\r
        cp ''''\r
        jr z,l0f1eh\r
        push hl\r
@@ -2300,8 +2302,7 @@ sub_0f58h:
        push af\r
 l0f5ch:\r
        call out_hl\r
-       call z,outbl2\r
-       call outbl\r
+       call outbl2\r
        ld de,0\r
 l0f68h:\r
        ld a,(hl)\r
@@ -2358,238 +2359,62 @@ l0fach:
 ; > Fcommandline\r
 ;      specifiy filenames and command line\r
 \r
-cmd_F:\r
-       push de\r
-       ld hl,DMA_BUF+1\r
-       ld (hl),' '\r
-       inc hl\r
-l0fb6h:\r
-       call get_char_upper\r
-       ld (hl),a\r
-       inc hl\r
-       inc de\r
-       and a\r
-       jr nz,l0fb6h\r
-       ld a,l\r
-       sub DMA_BUF+2\r
-       ld (DMA_BUF),a\r
-       pop hl\r
-       ld de,dfcb1\r
-       call parse_filename\r
-       ld de,dfcb2\r
-       ;fall thru\r
-\r
-parse_filename:\r
-       call sub_102ch\r
-       push de\r
-       push bc\r
-       ld b,(hl)\r
-       inc hl\r
-       ld a,(hl)\r
-       cp ':'\r
-       jr nz,l0fe1h\r
-       inc hl\r
-       ld a,b\r
-       sub 040h\r
-       and 01fh\r
-       jr l0fe3h\r
-l0fe1h:\r
-       dec hl\r
-       xor a\r
-l0fe3h:\r
-       ld (de),a\r
-       inc de\r
-       ld b,8\r
-       call sub_0ff2h\r
-       ld b,3\r
-       call sub_0ff2h\r
-       pop bc\r
-       pop de\r
-       ret\r
-\r
-sub_0ff2h:\r
-       call sub_1012h\r
-       jr z,l0ffeh\r
-       inc hl\r
-       ld (de),a\r
-       inc de\r
-       djnz sub_0ff2h\r
-       jr l1003h\r
-l0ffeh:\r
-       ld a,c\r
-l0fffh:\r
-       ld (de),a\r
-       inc de\r
-       djnz l0fffh\r
-l1003h:\r
-       call sub_1012h\r
-       inc hl\r
-       jr nz,l1003h\r
-       cp '*'\r
-       jr z,l1003h\r
-       cp '.'\r
-       ret z\r
-       dec hl\r
-       ret\r
-\r
-sub_1012h:\r
-       ld a,(hl)\r
-       ld c,' '\r
-       and 01fh\r
-       ret z\r
-       ld a,(hl)\r
-       cp ' '\r
-       ret z\r
-       call sub_1043h\r
-       ret z\r
-       cp '/'\r
-       ret z\r
-       cp '.'\r
-       ret z\r
-       ld c,'?'\r
-       call toupper\r
-       cp '*'\r
-       ret\r
-\r
-l102bh:\r
-       inc hl\r
-sub_102ch:\r
-       ld a,(hl)\r
-       cp '/'\r
-       jr z,l103bh\r
-       call sub_1043h\r
-       jr z,l102bh\r
-l1036h:\r
-       cp ' '\r
-       jr z,l102bh\r
-       ret\r
-\r
-l103bh:\r
-       ld a,(hl)\r
-       cp ' '+1\r
-       jr c,l1036h\r
-       inc hl\r
-       jr l103bh\r
-\r
-sub_1043h:\r
-       cp '='\r
-       ret z\r
-       cp '_'\r
-       ret z\r
-       cp ','\r
-       ret\r
+;cmd_F:\r
 \r
 ;-------------------------------------------------------------------------------\r
+; > R [displacement]\r
+;      Read Intel Hex File from console [add displacement]\r
 \r
-setup_fcb:\r
-       push de\r
-       ld hl,12\r
-       add hl,de\r
-       xor a\r
-       ld b,21\r
-l1052h:\r
-       ld (hl),a\r
-       inc hl\r
-       djnz l1052h\r
-       ld de,DMA_BUF\r
-       ld c,BDOS_SETDMA\r
-       call ddtz_bdos\r
-       pop de\r
-       ret\r
-\r
-;-------------------------------------------------------------------------------\r
-\r
-file_open:\r
-       ld (cur_fcb),de\r
-       call setup_fcb\r
-       ld c,BDOS_OPEN\r
-       call ddtz_bdos\r
-       inc a\r
-       jp z,ERROR\r
-       ld a,080h\r
-       ld (cmdR_rindex),a\r
-       ret\r
-\r
-read_byte:\r
-       ld a,(cmdR_rindex)\r
-       cp 080h\r
-       jr nz,l1111h\r
-       call read_sector\r
-       ld a,01ah\r
-       ret z\r
-       sub a\r
-l1111h:\r
-       inc a\r
-       ld (cmdR_rindex),a\r
+cmd_R:\r
+       ld hl,0\r
+       call get_lastarg_def    ;get offset from command line\r
        push hl\r
-       add a,07fh\r
+       ld hl,0\r
+       ld (high_load),hl\r
+w_recstart:\r
+       call i.getchar\r
+       jr z,rdhex_done\r
+       cp ':'\r
+       jr nz,w_recstart\r
+       ld c,0                  ;init checksum\r
+       call i.gethexbyte       ;record len\r
+       ld b,a\r
+       call i.gethexbyte       ;address high\r
+       ld h,a\r
+       call i.gethexbyte       ;address low\r
        ld l,a\r
-       ld h,000h\r
-       ld a,(hl)\r
-       pop hl\r
-       cp 01ah\r
-       ret\r
-\r
-read_sector:\r
-       push hl\r
+       call i.gethexbyte       ;record type (ignored)\r
+       ld a,b\r
+       and a                   ;record len == 0?\r
+       jr z,rdhex_done\r
+l16c6h:\r
+       call i.gethexbyte\r
+       pop de                  ;offset\r
        push de\r
-       push bc\r
-       ld de,(cur_fcb)\r
-       ld c,BDOS_READ\r
-       call ddtz_bdos\r
-       sub a,1\r
-       jr z,l1132h\r
-       jr nc,error2\r
-l1132h:\r
-       pop bc\r
-       pop de\r
+       push hl\r
+       add hl,de\r
+       call i.storebyte\r
        pop hl\r
-       ret\r
-\r
-cmdR_storebyte:\r
-       push af\r
-       push de\r
-       ld de,TPA\r
-       call cp_hl_de\r
-       jr c,error2\r
-       ld de,(BDOS+1)\r
-       call cp_hl_de\r
-       jr nc,error2\r
-       ld de,(high_load)\r
-       call cp_hl_de\r
-       jr c,l1157h\r
-       ld (high_load),hl\r
-l1157h:\r
-       ld de,(max_load)\r
-       call cp_hl_de\r
-       jr c,l1163h\r
-       ld (max_load),hl\r
-l1163h:\r
-       pop de\r
-       pop af\r
-       ld (hl),a\r
-       ret\r
-\r
-strncmp:\r
-       ld a,(de)\r
-       cp (hl)\r
-       inc de\r
        inc hl\r
-       ret nz\r
-       djnz strncmp\r
-       ret\r
-\r
-str_hex:\r
-       db      'HEX'\r
+       djnz l16c6h             ;repeat for record len\r
+       call i.gethexbyte       ;checksum\r
+       ld a,c\r
+       and a\r
+       jp nz,ERROR             ;exit if checksum error\r
+       jr w_recstart           ;next record\r
+rdhex_done:\r
+       pop hl\r
+       call i.gethexbyte\r
+       jp p_max_high\r
 \r
-read_hexchar:\r
-       call read_hexdigit\r
+i.gethexbyte:\r
+       call sub_16f6h\r
        rlca\r
        rlca\r
        rlca\r
        rlca\r
        ld d,a\r
-       call read_hexdigit\r
+       call sub_16f6h\r
        add a,d\r
        ld d,a\r
        add a,c\r
@@ -2597,95 +2422,41 @@ read_hexchar:
        ld a,d\r
        ret\r
 \r
-read_hexdigit:\r
-       call read_byte\r
+sub_16f6h:\r
+       call i.getchar\r
        jr z,error2\r
-hex_digit_v:\r
        call hex_digit\r
        ret nc\r
 error2:\r
        jp ERROR\r
 \r
-;-------------------------------------------------------------------------------\r
-; > R [displacement]\r
-;      Read a binary or hex file  [add displacement]\r
+i.getchar:\r
+       call incharw\r
+       cp 01ah\r
+       ret\r
 \r
-cmd_R:\r
-       ld hl,0\r
-       call get_lastarg_def\r
-read_file:\r
-       ld de,dfcb1\r
-       push hl\r
-       ld hl,0\r
+i.storebyte:\r
+       push af\r
+       push de\r
+       ld de,TPA               ;lowest allowed load address\r
+       call cp_hl_de\r
+       jr c,error2\r
+       ld de,(BDOS+1)          ;highest allowed load address\r
+       call cp_hl_de\r
+       jr nc,error2\r
+       ld de,(high_load)\r
+       call cp_hl_de\r
+       jr c,l1157h\r
        ld (high_load),hl\r
-       call file_open\r
-       ld hl,dfcb1+9\r
-       ld de,str_hex\r
-       ld b,3\r
-       call strncmp\r
-       pop hl\r
-       jr z,read_hexfile\r
-       ld de,TPA\r
-       push hl\r
-       add hl,de\r
-l108eh:\r
-       call read_sector\r
-       jr nz,read_file_nxt\r
-       pop hl\r
-       jp p_max_high\r
-\r
-read_file_nxt:\r
-       ld de,DMA_BUF\r
-       ld b,080h\r
-l109ah:\r
-       ld a,(de)\r
-       call cmdR_storebyte\r
-       inc de\r
-       inc hl\r
-       djnz l109ah\r
-       jr l108eh\r
-\r
-read_hexfile:\r
-       push hl\r
-l10aeh:\r
-       call read_byte          ; RECORD MARK\r
-       jr z,rdhex_done\r
-       cp ':'\r
-       jr nz,l10aeh\r
-       ld c,0\r
-       call read_hexchar       ; RECLEN\r
-       ld b,a\r
-       call read_hexchar       ; LOAD ADDR H\r
-       ld h,a\r
-       call read_hexchar       ; LOAD ADDR L\r
-       ld l,a\r
-       ld a,b\r
-       and a\r
-       jr z,rdhex_done\r
-       call read_hexchar       ; RECTYP\r
-l10cch:\r
-       call read_hexchar       ; DATA\r
+l1157h:\r
+       ld de,(max_load)\r
+       call cp_hl_de\r
+       jr c,l1163h\r
+       ld (max_load),hl\r
+l1163h:\r
        pop de\r
-       push de\r
-       push hl\r
-       add hl,de\r
-       call cmdR_storebyte\r
-       pop hl\r
-       inc hl\r
-       djnz l10cch\r
-       call read_hexchar       ; CHKSUM\r
-       ld a,c\r
-       and a\r
-       jp nz,ERROR\r
-       jr l10aeh\r
-rdhex_done:\r
-       pop hl\r
-       jp p_max_high\r
-\r
-test_whitespace:\r
-       cp      ' '\r
-       ret     z\r
-       cp      TAB\r
+       pop af\r
+       ld (hl),a               ;store byte\r
        ret\r
 \r
 ;-------------------------------------------------------------------------------\r
@@ -2711,66 +2482,7 @@ p_max_high:
 ; > Wstartaddr endaddr\r
 ;      Write a file to disk\r
 \r
-cmd_W:\r
-       call get_arg_range\r
-       call assert_eol\r
-       push hl\r
-       ld a,c\r
-       add a,07fh\r
-       jr nc,l11adh\r
-       inc b\r
-l11adh:\r
-       and 080h\r
-       ld c,a\r
-       push bc\r
-       ld a,(dfcb1+1)\r
-       cp ' '\r
-       jr z,error4\r
-       ld de,dfcb1\r
-       call setup_fcb\r
-       push de\r
-       ld c,BDOS_DELETE\r
-       call ddtz_bdos\r
-       pop de\r
-       ld c,BDOS_CREATE\r
-       call ddtz_bdos\r
-       inc a\r
-       jr z,error4\r
-       pop bc\r
-       pop hl\r
-l11cch:\r
-       ld a,b\r
-       or c\r
-       jr z,close_file\r
-       push bc\r
-       ld de,080h              ; DMA_BUF\r
-       ld b,d\r
-       ld c,e\r
-       ldir\r
-       call write_sector\r
-       ex (sp),hl\r
-       ld bc,0ff80h\r
-       add hl,bc\r
-       ex (sp),hl\r
-       pop bc\r
-       jr l11cch\r
-\r
-write_sector:\r
-       push hl\r
-       ld de,dfcb1\r
-       ld c,BDOS_WRITE\r
-       call ddtz_bdos\r
-       pop hl\r
-       and a\r
-       ret z\r
-       call close_file\r
-error4:\r
-       jp ERROR\r
-\r
-close_file:\r
-       ld de,dfcb1\r
-       ld c,BDOS_CLOSE\r
-       jp ddtz_bdos\r
+;cmd_W:\r
 \r
 ;-------------------------------------------------------------------------------\r
 ; > A [startaddr]\r
@@ -3852,7 +3564,7 @@ tc_set_bp:
        ld de,BDOS\r
        and a\r
        sbc hl,de\r
-       ld hl,l20edh\r
+       ld hl,l20edh            ;set break after BDOS call\r
        jr z,l2031h\r
        ld iy,(reg.pc)\r
        call disas_get_instrlen\r
@@ -3983,7 +3695,7 @@ l20d7h:
 \r
 l20dch:\r
 l20edh:\r
-       ld hl,(reg_sp)\r
+       ld hl,(reg_sp)          ;break on return address\r
        ld e,(hl)\r
        inc hl\r
        ld d,(hl)\r
@@ -4167,15 +3879,9 @@ last_O_addr:
 last_O_val:\r
        db      0\r
 \r
-cmd_Q_jopt:\r
-       db      -1\r
-\r
 last_D:\r
        dw      TPA\r
 \r
-cmdR_rindex:\r
-       db      0\r
-\r
 high_load:\r
        dw      TPA\r
 max_load:\r
@@ -4193,9 +3899,6 @@ disas_argtype:
 pbl_loop_adr:\r
        dw      0\r
 \r
-cur_fcb:\r
-       dw      0\r
-\r
 ddtz_size      equ     $-ddtz_base\r
 ddtz_end:\r
 \r