]> cloudbase.mooo.com Git - ddt180.git/blobdiff - ddt180.z80
Add prstr_inl, print string inline
[ddt180.git] / ddt180.z80
index 56204fb84fda3b4c09d92e95a050d01067d9e7bf..75b9b4eedb55cb308b7f1b67a1d8700532c86383 100644 (file)
@@ -14,74 +14,15 @@ TPA equ     0100h
        cseg\r
        .phase  TPA\r
 \r
-       LD      SP,ldr_end+(stack-ddtz_base)\r
-       LD      DE,ldr_end+(expr_buf-ddtz_base)\r
-       LD      C,BDOS_PSTR\r
-       CALL    BDOS\r
-\r
-       LD      HL,ldr_end+ddtz_size    ;start of reloc bitmap\r
-       ld      bc,0108h                ;init bit counter\r
-\r
-       EXX\r
-       LD      HL,(BDOS+1)\r
-       LD      (ldr_end+1),HL\r
-       LD      BC,ddtz_size-1\r
-       LD      D,B\r
-       LD      E,0FFH\r
-       INC     DE                      ;size rounded up to next page boundary\r
-       INC     BC                      ;ddtz_size\r
-       OR      A\r
-       SBC     HL,DE                   ;BDOS - size\r
-       LD      (BDOS+1),HL             ;-> new BDOS entry\r
-\r
-       push    hl\r
-       PUSH    BC\r
-       ld      de,ldr_end\r
-       sbc     hl,de\r
-       EX      DE,HL                   ;-> DE\r
-       LD      HL,ldr_size\r
-       add     hl,bc\r
-       ld      b,h\r
-       ld      c,l\r
-       LD      HL,TPA\r
-reloc_lp:\r
-       EXX\r
-       djnz    reloc_nl\r
-       ld      b,c                     ;reload bit counter\r
-       LD      e,(HL)                  ;get next 8 relocation bits\r
-       INC     HL\r
-reloc_nl:\r
-       sla     e\r
-       EXX\r
-       JR      NC,reloc_next\r
-       DEC     HL\r
-       LD      A,(HL)\r
-       ADD     A,E\r
-       LD      (HL),A\r
-       INC     HL\r
-       LD      A,(HL)\r
-       ADC     A,D\r
-       LD      (HL),A\r
-reloc_next:\r
-       cpi\r
-       jp      pe,reloc_lp\r
-       dec     hl\r
-\r
-       POP     BC\r
-       pop     de\r
-       EX      DE,HL\r
-       ADD     HL,BC\r
-       EX      DE,HL\r
-       DEC     DE\r
-       LDDR\r
-       LD      HL,conbuf+2-ddtz_base\r
-       ADD     HL,DE\r
-       JP      (HL)\r
+       jp      start\r
 \r
 ldr_end:\r
 ldr_size       equ     $ - TPA\r
+current_phase  defl    $\r
 \r
        .dephase\r
+current_cseg   defl    $\r
+\r
 ;-------------------------------------------------------------------------------\r
 ; DDT/Z core\r
 ;\r
@@ -95,8 +36,8 @@ CR            equ     13
 ; CP/M memory layout\r
 \r
 BDOS           equ     5\r
-FCB            equ     05ch\r
-FCB2           equ     06ch\r
+dfcb1          equ     05ch\r
+dfcb2          equ     06ch\r
 DMA_BUF                equ     080h\r
 TPA            equ     0100h\r
 \r
@@ -127,86 +68,101 @@ YREG_CNT  equ     10      ;Number of Y registers (0..9)
 ;-------------------------------------------------------------------------------\r
 \r
 ddtz_base:\r
-       jp 0                    ;0000   c3 00 00        . . .\r
+       jp ddtz_bdos\r
 l0003h:\r
-       rst 30h                 ;0003   f7      .\r
+       rst 30h\r
 sub_0004h:\r
-       nop                     ;0004   00      .\r
-       ret                     ;0005   c9      .\r
+       nop\r
+       ret\r
+ddtz_bdos:\r
+       jp      0\r
+\r
+current_cseg   defl    $ - current_cseg\r
+       .phase  current_phase + current_cseg\r
+signon:\r
+       db      'DDT/180',TAB\r
+       db      '[8101] 002',CR,LF,'$'\r
+msgz80:\r
+       db      'Z80 or better required!',cr,lf,'$'\r
+\r
+current_phase  defl    $\r
+       .dephase\r
+current_cseg   defl    $\r
+       ds      STACK_SIZE - (current_phase - signon)\r
 \r
-       ds      STACK_SIZE\r
 \r
 stack:\r
-reg.l2:        db      000h            ;0046   00      .\r
-reg.h2:        db      000h            ;0047   00      .\r
-reg.e2:        db      000h            ;0048   00      .\r
-reg.d2:        db      000h            ;0049   00      .\r
-reg.c2:        db      000h            ;004a   00      .\r
-reg.b2:        db      000h            ;004b   00      .\r
-reg.f2:        db      000h            ;004c   00      .\r
-reg.a2:        db      000h            ;004d   00      .\r
-l004eh:        db      000h            ;004e   00      .\r
-reg.i: db      000h            ;004f   00      .\r
-reg.iy:        dw      0000h           ;0050   00      .\r
-reg.ix:        dw      0000h           ;0052   00      .\r
-reg.f: db      000h            ;0054   00      .\r
-reg.a: db      000h            ;0055   00      .\r
-reg.c: db      000h            ;0056   00      .\r
-reg.b: db      000h            ;0057   00      .\r
-reg.e: db      000h            ;0058   00      .\r
-reg.d: db      000h            ;0059   00      .\r
-reg.l: db      000h            ;005a   00      .\r
-reg.h: db      000h            ;005b   00      .\r
-reg_sp:        dw      TPA             ;005c   00 01   .\r
+reg.l2:        db      000h\r
+reg.h2:        db      000h\r
+reg.e2:        db      000h\r
+reg.d2:        db      000h\r
+reg.c2:        db      000h\r
+reg.b2:        db      000h\r
+reg.f2:        db      000h\r
+reg.a2:        db      000h\r
+l004eh:        db      000h\r
+reg.i: db      000h\r
+reg.iy:        dw      0000h\r
+reg.ix:        dw      0000h\r
+reg.f: db      000h\r
+reg.a: db      000h\r
+reg.c: db      000h\r
+reg.b: db      000h\r
+reg.e: db      000h\r
+reg.d: db      000h\r
+reg.l: db      000h\r
+reg.h: db      000h\r
+reg_sp:        dw      TPA\r
 reg.iff:\r
-       db      0f3h            ;005e   f3      .\r
-       db      0c3h            ;005f   c3      .\r
-REG.PC:        dw      TPA             ;0060   00 01   .\r
-l0062h:        dw      0000h           ;0062   00 00   .\r
-offs.@:        dw      0               ;0064   00 00   .\r
+       db      0f3h\r
+       db      0c3h\r
+REG.PC:        dw      TPA\r
+l0062h:        dw      0000h\r
+offs.@:        dw      0\r
 \r
-CMD_ERR:dw     l0146h          ;0066   46 01   F .\r
-cmd_rpt:dw     mainloop        ;0068   bd 00   . .\r
+CMD_ERR:dw     l0146h\r
+cmd_rpt:dw     mainloop\r
 \r
 conbuf:\r
-       db      CONBUF_SIZE     ;006a   50      P\r
-\r
-       ld sp,stack             ;006b   31 46 00        1 F .\r
-       exx                     ;006e   d9      .\r
-       ld de,ddtz_base         ;006f   11 00 00        . . .\r
-       or a                    ;0072   b7      .\r
-       sbc hl,de               ;0073   ed 52   . R\r
-       add hl,de                       ;0075   19      .\r
-       jr c,l0079h             ;0076   38 01   8 .\r
-       ex de,hl                ;0078   eb      .\r
+       db      CONBUF_SIZE\r
+\r
+       ld sp,stack\r
+       exx\r
+       ld de,ddtz_base\r
+       or a\r
+       sbc hl,de\r
+       add hl,de\r
+       jr c,l0079h\r
+       ex de,hl\r
 l0079h:\r
-       ld de,TPA               ;0079   11 00 01        . . .\r
+       ld de,TPA\r
 l007ch:\r
-       dec hl                  ;007c   2b      +\r
-       ld (hl),000h            ;007d   36 00   6 .\r
-       ld a,h                  ;007f   7c      |\r
-       sub d                   ;0080   92      .\r
-       ld b,a                  ;0081   47      G\r
-       ld a,l                  ;0082   7d      }\r
-       sub e                   ;0083   93      .\r
-       or b                    ;0084   b0      .\r
-       jr nz,l007ch            ;0085   20 f5     .\r
-       ld a,i                  ;0087   ed 57   . W\r
-       ld (reg.i),a            ;0089   32 4f 00        2 O .\r
-       ld a,0f3h               ;008c   3e f3   > .\r
-       jp po,l0093h            ;008e   e2 93 00        . . .\r
-       ld a,0fbh               ;0091   3e fb   > .\r
+       dec hl\r
+       ld (hl),000h\r
+       ld a,h\r
+       sub d\r
+       ld b,a\r
+       ld a,l\r
+       sub e\r
+       or b\r
+       jr nz,l007ch\r
+       ld a,i\r
+       ld (reg.i),a\r
+       ld a,0f3h\r
+       jp po,l0093h\r
+       ld a,0fbh\r
 l0093h:\r
-       ld (reg.iff),a          ;0093   32 5e 00        2 ^ .\r
-       call sub_0004h          ;0096   cd 04 00        . . .\r
-       ld hl,ddtz_base         ;0099   21 00 00        ! . .\r
-       ld l,000h               ;009c   2e 00   . .\r
-       ld (reg_sp),hl          ;009e   22 5c 00        " \ .\r
-       ld a,(FCB+1)            ;00a1   3a 5d 00        : ] .\r
-       cp ' '                  ;00a4   fe 20   .\r
-       ld hl,0                 ;00a6   21 00 00        ! . .\r
-       call nz,read_file       ;00a9   c4 68 10        . h .\r
-       jr mainloop             ;00ac   18 0f   . .\r
+       ld (reg.iff),a\r
+       call sub_0004h\r
+       ld hl,ddtz_base\r
+       ld l,000h\r
+       ld (reg_sp),hl\r
+       call cpy_fcb2\r
+       ld a,(dfcb1+1)\r
+       cp ' '\r
+       ld hl,0\r
+       call nz,read_file\r
+       jr mainloop\r
 \r
        ds      CONBUF_SIZE + 3 - ($ - conbuf)\r
 \r
@@ -249,33 +205,33 @@ exe_hl:
        jr mainloop             ;010d   18 ae   . .\r
 \r
 CMDTAB:\r
-       defw cmd_@              ;0110   92 0d   . .\r
-       defw cmd_A              ;0112   fe 11   . .\r
-       defw cmd_B              ;0114   6d 07   m .\r
-       defw cmd_C              ;0116   17 21   . !\r
-       defw cmd_D              ;0118   48 0f   H .\r
-       defw ERROR              ;011a   07 01   . .\r
-       defw cmd_F              ;011c   af 0f   . .\r
-       defw cmd_G              ;011e   31 07   1 .\r
-       defw cmd_H              ;0120   3d 0e   = .\r
-       defw cmd_I              ;0122   a3 0d   . .\r
-       defw ERROR              ;0124   07 01   . .\r
-       defw ERROR              ;0126   07 01   . .\r
-       defw cmd_L              ;0128   cd 18   . .\r
-       defw cmd_M              ;012a   19 0e   . .\r
-       defw ERROR              ;012c   07 01   . .\r
-       defw cmd_O              ;012e   c7 0d   . .\r
-       defw ERROR              ;0130   07 01   . .\r
-       defw cmd_Q              ;0132   84 0e   . .\r
-       defw cmd_R              ;0134   62 10   b .\r
-       defw cmd_S              ;0136   5a 0d   Z .\r
-       defw cmd_T              ;0138   1e 21   . !\r
-       defw ERROR              ;013a   07 01   . .\r
-       defw cmd_V              ;013c   ea 0d   . .\r
-       defw cmd_W              ;013e   a0 11   . .\r
-       defw cmd_X              ;0140   f1 0b   . .\r
-       defw cmd_Y              ;0142   b2 0b   . .\r
-       defw cmd_Z              ;0144   ba 0e   . .\r
+       dw      cmd_@           ;0110   92 0d   . .\r
+       dw      cmd_A           ;0112   fe 11   . .\r
+       dw      cmd_B           ;0114   6d 07   m .\r
+       dw      cmd_C           ;0116   17 21   . !\r
+       dw      cmd_D           ;0118   48 0f   H .\r
+       dw      ERROR           ;011a   07 01   . .\r
+       dw      cmd_F           ;011c   af 0f   . .\r
+       dw      cmd_G           ;011e   31 07   1 .\r
+       dw      cmd_H           ;0120   3d 0e   = .\r
+       dw      cmd_I           ;0122   a3 0d   . .\r
+       dw      ERROR           ;0124   07 01   . .\r
+       dw      ERROR           ;0126   07 01   . .\r
+       dw      cmd_L           ;0128   cd 18   . .\r
+       dw      cmd_M           ;012a   19 0e   . .\r
+       dw      ERROR           ;012c   07 01   . .\r
+       dw      cmd_O           ;012e   c7 0d   . .\r
+       dw      ERROR           ;0130   07 01   . .\r
+       dw      cmd_Q           ;0132   84 0e   . .\r
+       dw      cmd_R           ;0134   62 10   b .\r
+       dw      cmd_S           ;0136   5a 0d   Z .\r
+       dw      cmd_T           ;0138   1e 21   . !\r
+       dw      ERROR           ;013a   07 01   . .\r
+       dw      cmd_V           ;013c   ea 0d   . .\r
+       dw      cmd_W           ;013e   a0 11   . .\r
+       dw      cmd_X           ;0140   f1 0b   . .\r
+       dw      cmd_Y           ;0142   b2 0b   . .\r
+       dw      cmd_Z           ;0144   ba 0e   . .\r
 \r
 l0146h:\r
        ld a,'?'                ;0146   3e 3f   > ?\r
@@ -285,7 +241,7 @@ get_line:
        push hl                 ;014e   e5      .\r
        ld de,conbuf            ;014f   11 6a 00        . j .\r
        ld c,BDOS_CBUF          ;0152   0e 0a   . .\r
-       call ddtz_base          ;0154   cd 00 00        . . .\r
+       call ddtz_bdos          ;0154   cd 00 00        . . .\r
        call crlf               ;0157   cd a3 02        . . .\r
        ld de,conbuf+1          ;015a   11 6b 00        . k .\r
        ld a,(de)               ;015d   1a      .\r
@@ -484,7 +440,7 @@ outchar:
        and 07fh                ;0261   e6 7f   . \7f\r
        ld e,a                  ;0263   5f      _\r
        ld c,BDOS_COUT          ;0264   0e 02   . .\r
-       call ddtz_base          ;0266   cd 00 00        . . .\r
+       call ddtz_bdos          ;0266   cd 00 00        . . .\r
        ld hl,con_col           ;0269   21 72 02        ! r .\r
        inc (hl)                ;026c   34      4\r
        pop af                  ;026d   f1      .\r
@@ -492,18 +448,17 @@ outchar:
        pop de                  ;026f   d1      .\r
        pop hl                  ;0270   e1      .\r
        ret                     ;0271   c9      .\r
-con_col:\r
-       db      0               ;0272   00      .\r
+\r
 inchar:\r
        push hl                 ;0273   e5      .\r
        push de                 ;0274   d5      .\r
        push bc                 ;0275   c5      .\r
        ld c,BDOS_CSTAT         ;0276   0e 0b   . .\r
-       call ddtz_base          ;0278   cd 00 00        . . .\r
+       call ddtz_bdos          ;0278   cd 00 00        . . .\r
        and a                   ;027b   a7      .\r
        jr z,l0284h             ;027c   28 06   ( .\r
        ld c,BDOS_CIN           ;027e   0e 01   . .\r
-       call ddtz_base          ;0280   cd 00 00        . . .\r
+       call ddtz_bdos          ;0280   cd 00 00        . . .\r
        scf                     ;0283   37      7\r
 l0284h:\r
        pop bc                  ;0284   c1      .\r
@@ -514,15 +469,21 @@ pstr:
        ld c,0                  ;0288   0e 00   . .\r
 l028ah:\r
        ld a,(hl)               ;028a   7e      ~\r
+       inc hl                  ;0291   23      #\r
        and a                   ;028b   a7      .\r
        ret z                   ;028c   c8      .\r
        call outchar            ;028d   cd 5d 02        . ] .\r
        inc c                   ;0290   0c      .\r
-       inc hl                  ;0291   23      #\r
        and a                   ;0292   a7      .\r
        ret m                   ;0293   f8      .\r
        jr l028ah               ;0294   18 f4   . .\r
 \r
+pstr_inl:\r
+       ex      (sp),hl\r
+       call    pstr\r
+       ex      (sp),hl\r
+       ret\r
+\r
 outbl6:\r
        call outbl2             ;0296   cd 9c 02        . . .\r
 outbl4:\r
@@ -542,6 +503,7 @@ crlf:
        ld (con_col),a          ;02b2   32 72 02        2 r .\r
        jp c,mainloop           ;02b5   da bd 00        . . .\r
        ret                     ;02b8   c9      .\r
+\r
 add_hl_a:\r
        add a,l                 ;02b9   85      .\r
        ld l,a                  ;02ba   6f      o\r
@@ -853,12 +815,12 @@ tab_eq_le_ge:
        db      '=<>',0\r
 \r
 tab_func_eqlege:\r
-       defw do_op_eq           ;0423   da 03   . .\r
-       defw do_op_lt           ;0425   e4 03   . .\r
-       defw do_op_gt           ;0427   e8 03   . .\r
-       defw do_op_le           ;0429   e2 03   . .\r
-       defw do_op_ge           ;042b   ea 03   . .\r
-       defw do_op_ne           ;042d   de 03   . .\r
+       dw      do_op_eq        ;0423   da 03   . .\r
+       dw      do_op_lt        ;0425   e4 03   . .\r
+       dw      do_op_gt        ;0427   e8 03   . .\r
+       dw      do_op_le        ;0429   e2 03   . .\r
+       dw      do_op_ge        ;042b   ea 03   . .\r
+       dw      do_op_ne        ;042d   de 03   . .\r
 \r
 do_subexpr:\r
        call do_factor          ;042f   cd e4 04        . . .\r
@@ -1013,15 +975,15 @@ tab_op_a:
        DB      '+-*/%&!#',0\r
 \r
 tblf_opa:\r
-       defw doop_add           ;04cb   4c 04   L .\r
-       defw doop_sub           ;04cd   50 04   P .\r
-       defw doop_mlt           ;04cf   55 04   U .\r
-       defw doop_div           ;04d1   6a 04   j .\r
-       defw doop_mod           ;04d3   6f 04   o .\r
-       defw doop_and           ;04d5   96 04   . .\r
-       defw doop_or            ;04d7   9e 04   . .\r
-       defw doop_xor           ;04d9   a6 04   . .\r
-       defw 0                  ;04db   00 00   . .\r
+       dw      doop_add        ;04cb   4c 04   L .\r
+       dw      doop_sub        ;04cd   50 04   P .\r
+       dw      doop_mlt        ;04cf   55 04   U .\r
+       dw      doop_div        ;04d1   6a 04   j .\r
+       dw      doop_mod        ;04d3   6f 04   o .\r
+       dw      doop_and        ;04d5   96 04   . .\r
+       dw      doop_or         ;04d7   9e 04   . .\r
+       dw      doop_xor        ;04d9   a6 04   . .\r
+       dw      0               ;04db   00 00   . .\r
 \r
 fact_factor:\r
        call do_factor          ;04dd   cd e4 04        . . .\r
@@ -1033,7 +995,7 @@ do_factor:
        call get.number         ;04e7   cd aa 05        . . .\r
        ret nc                  ;04ea   d0      .\r
        inc de                  ;04eb   13      .\r
-       ld hl,ddtz_base-1       ;04ec   21 ff ff        ! . .\r
+       ld hl,(BDOS+1)          ;04ec   21 ff ff        ! . .\r
        cp 'T'                  ;04ef   fe 54   . T\r
        ret z                   ;04f1   c8      .\r
        ld hl,(high_load)       ;04f2   2a 9c 11        * . .\r
@@ -1245,33 +1207,33 @@ sub_060ch:
        jr l0614h               ;060f   18 03   . .\r
 \r
 get.hexdigit:\r
-       ld a,(de)               ;0611   1a      .\r
+       ld a,(de)\r
 hex_digit:\r
-       cp 'F'+1                ;0612   fe 47   . G\r
+       cp 'F'+1\r
 l0614h:\r
-       ccf                     ;0614   3f      ?\r
-       ret c                   ;0615   d8      .\r
-       cp 'A'                  ;0616   fe 41   . A\r
-       jr c,l061eh             ;0618   38 04   8 .\r
-       sub 'A'-10              ;061a   d6 37   . 7\r
-       ret                     ;061c   c9      .\r
+       ccf\r
+       ret c\r
+       cp 'A'\r
+       jr c,l061eh\r
+       sub 'A'-10\r
+       ret\r
 \r
 get.decdigit:\r
-       ld a,(de)               ;061d   1a      .\r
+       ld a,(de)\r
 l061eh:\r
-       cp '9'+1                ;061e   fe 3a   . :\r
-       jr l0625h               ;0620   18 03   . .\r
+       cp '9'+1\r
+       jr l0625h\r
 \r
 get.bindigit:\r
-       ld a,(de)               ;0622   1a      .\r
-       cp '1'+1                ;0623   fe 32   . 2\r
+       ld a,(de)\r
+       cp '1'+1\r
 l0625h:\r
-       ccf                     ;0625   3f      ?\r
-       ret c                   ;0626   d8      .\r
-       cp '0'                  ;0627   fe 30   . 0\r
-       ret c                   ;0629   d8      .\r
-       sub '0'                 ;062a   d6 30   . 0\r
-       ret                     ;062c   c9      .\r
+       ccf\r
+       ret c\r
+       cp '0'\r
+       ret c\r
+       sub '0'\r
+       ret\r
 \r
 p_cpustat0:\r
        call assert_eol         ;062d   cd d6 02        . . .\r
@@ -1388,43 +1350,43 @@ b_06e9_start:
        DC      'HL '\r
        DC      'SP'\r
        DC      'PC'\r
-       DC      'A'''\r
-       DC      'BC'''\r
-       DC      'DE'''\r
-       DC      'HL'''\r
+       DC      'a'''\r
+       DC      'bc'''\r
+       DC      'de'''\r
+       DC      'hl'''\r
        DC      'IX'\r
        DC      'IY'\r
        DC      'I'\r
        DB      0\r
 \r
 b_0709_start:\r
-       defw reg.a              ;0709   55 00   U .\r
-       defb 000h               ;070b   00      .\r
-       defw reg.c              ;070c   56 00   V .\r
-       defb 001h               ;070e   01      .\r
-       defw reg.e              ;070f   58 00   X .\r
-       defb 001h               ;0711   01      .\r
-       defw reg.l              ;0712   5a 00   Z .\r
-       defb 001h               ;0714   01      .\r
-       defw reg_sp             ;0715   5c 00   \ .\r
-       defb 001h               ;0717   01      .\r
-       defw REG.PC             ;0718   60 00   ` .\r
-       defb 002h               ;071a   02      .\r
-       defw reg.a2             ;071b   4d 00   M .\r
-       defb 000h               ;071d   00      .\r
-       defw reg.c2             ;071e   4a 00   J .\r
-       defb 001h               ;0720   01      .\r
-       defw reg.e2             ;0721   48 00   H .\r
-       defb 001h               ;0723   01      .\r
-       defw reg.l2             ;0724   46 00   F .\r
-       defb 001h               ;0726   01      .\r
-       defw reg.ix             ;0727   52 00   R .\r
-       defb 001h               ;0729   01      .\r
-       defw reg.iy             ;072a   50 00   P .\r
-       defb 001h               ;072c   01      .\r
-       defw reg.i              ;072d   4f 00   O .\r
-       defb 000h               ;072f   00      .\r
-       defb 000h               ;0730   00      .\r
+       dw      reg.a           ;0709   55 00   U .\r
+       db      000h            ;070b   00      .\r
+       dw      reg.c           ;070c   56 00   V .\r
+       db      001h            ;070e   01      .\r
+       dw      reg.e           ;070f   58 00   X .\r
+       db      001h            ;0711   01      .\r
+       dw      reg.l           ;0712   5a 00   Z .\r
+       db      001h            ;0714   01      .\r
+       dw      reg_sp          ;0715   5c 00   \ .\r
+       db      001h            ;0717   01      .\r
+       dw      REG.PC          ;0718   60 00   ` .\r
+       db      002h            ;071a   02      .\r
+       dw      reg.a2          ;071b   4d 00   M .\r
+       db      000h            ;071d   00      .\r
+       dw      reg.c2          ;071e   4a 00   J .\r
+       db      001h            ;0720   01      .\r
+       dw      reg.e2          ;0721   48 00   H .\r
+       db      001h            ;0723   01      .\r
+       dw      reg.l2          ;0724   46 00   F .\r
+       db      001h            ;0726   01      .\r
+       dw      reg.ix          ;0727   52 00   R .\r
+       db      001h            ;0729   01      .\r
+       dw      reg.iy          ;072a   50 00   P .\r
+       db      001h            ;072c   01      .\r
+       dw      reg.i           ;072d   4f 00   O .\r
+       db      000h            ;072f   00      .\r
+       db      000h            ;0730   00      .\r
 \r
 cmd_G:\r
        sub a                   ;0731   97      .\r
@@ -1711,9 +1673,6 @@ l0938h:
        ex af,af'               ;093f   08      .\r
        ret                     ;0940   c9      .\r
 \r
-l0941h:\r
-       db      0               ;0941   00      .\r
-\r
 sub_0942h:\r
        ex af,af'               ;0942   08      .\r
        res 7,a                 ;0943   cb bf   . .\r
@@ -1919,32 +1878,6 @@ l0ab0h:
        ld (iy+007h),d          ;0ab4   fd 72 07        . r .\r
        ret                     ;0ab7   c9      .\r
 \r
-bp_tab:\r
-       rept BP_CNT\r
-        rept BP_SIZE\r
-         db    0\r
-        endm\r
-       endm\r
-\r
-expr_p1:\r
-       defw expr_buf           ;0b18   1c 0b   . .\r
-expr_p2:\r
-       defw expr_buf           ;0b1a   1c 0b   . .\r
-\r
-expr_buf:\r
-       db      'DDT/180',TAB\r
-       db      '[8101] 001',CR,LF,'$'\r
-\r
-       ds      EXPR_BUF_SIZE - ($ - expr_buf)\r
-expr_bufe:\r
-\r
-msg_Y:\r
-       dc      'Yn'            ;0b9c   59 ee   Y n.\r
-reg_Y:\r
-       rept    YREG_CNT\r
-        dw     0\r
-       endm\r
-\r
 cmd_Y:\r
        call get.decdigit       ;0bb2   cd 1d 06        . . .\r
        jr c,l0bc3h             ;0bb5   38 0c   8 .\r
@@ -2024,6 +1957,7 @@ l0c30h:
        pop af                  ;0c30   f1      .\r
        pop hl                  ;0c31   e1      .\r
        ret                     ;0c32   c9      .\r
+\r
 l0c33h:\r
        ld b,c                  ;0c33   41      A\r
        call pstr               ;0c34   cd 88 02        . . .\r
@@ -2147,70 +2081,70 @@ b_0cc3_start:
        DB      0\r
 \r
 b_0cfa_start:\r
-       defb 003h               ;0cfa   03      .\r
-       defw reg.c2             ;0cfb   4a 00   J .\r
-       defb 003h               ;0cfd   03      .\r
-       defw reg.e2             ;0cfe   48 00   H .\r
-       defb 003h               ;0d00   03      .\r
-       defw reg.l2             ;0d01   46 00   F .\r
-       defb 003h               ;0d03   03      .\r
-       defw reg.c              ;0d04   56 00   V .\r
-       defb 003h               ;0d06   03      .\r
-       defw reg.e              ;0d07   58 00   X .\r
-       defb 003h               ;0d09   03      .\r
-       defw reg.l              ;0d0a   5a 00   Z .\r
-       defb 000h               ;0d0c   00      .\r
-       defw reg.a2             ;0d0d   4d 00   M .\r
-       defb 000h               ;0d0f   00      .\r
-       defw reg.b2             ;0d10   4b 00   K .\r
-       defb 000h               ;0d12   00      .\r
-       defw reg.c2             ;0d13   4a 00   J .\r
-       defb 000h               ;0d15   00      .\r
-       defw reg.d2             ;0d16   49 00   I .\r
-       defb 000h               ;0d18   00      .\r
-       defw reg.e2             ;0d19   48 00   H .\r
-       defb 000h               ;0d1b   00      .\r
-       defw reg.h2             ;0d1c   47 00   G .\r
-       defb 000h               ;0d1e   00      .\r
-       defw reg.l2             ;0d1f   46 00   F .\r
-       defb 000h               ;0d21   00      .\r
-       defw reg.a              ;0d22   55 00   U .\r
-       defb 000h               ;0d24   00      .\r
-       defw reg.b              ;0d25   57 00   W .\r
-       defb 000h               ;0d27   00      .\r
-       defw reg.c              ;0d28   56 00   V .\r
-       defb 000h               ;0d2a   00      .\r
-       defw reg.d              ;0d2b   59 00   Y .\r
-       defb 000h               ;0d2d   00      .\r
-       defw reg.e              ;0d2e   58 00   X .\r
-       defb 000h               ;0d30   00      .\r
-       defw reg.h              ;0d31   5b 00   [ .\r
-       defb 000h               ;0d33   00      .\r
-       defw reg.l              ;0d34   5a 00   Z .\r
-       defb 003h               ;0d36   03      .\r
-       defw reg.ix             ;0d37   52 00   R .\r
-       defb 003h               ;0d39   03      .\r
-       defw reg.iy             ;0d3a   50 00   P .\r
-       defb 003h               ;0d3c   03      .\r
-       defw reg_sp             ;0d3d   5c 00   \ .\r
-       defb 003h               ;0d3f   03      .\r
-       defw REG.PC             ;0d40   60 00   ` .\r
-       defb 003h               ;0d42   03      .\r
-       defw reg.ix             ;0d43   52 00   R .\r
-       defb 003h               ;0d45   03      .\r
-       defw reg.iy             ;0d46   50 00   P .\r
-       defb 003h               ;0d48   03      .\r
-       defw reg_sp             ;0d49   5c 00   \ .\r
-       defb 003h               ;0d4b   03      .\r
-       defw REG.PC             ;0d4c   60 00   ` .\r
-       defb 000h               ;0d4e   00      .\r
-       defw reg.i              ;0d4f   4f 00   O .\r
-       defb 003h               ;0d51   03      .\r
-       defw l004eh             ;0d52   4e 00   N .\r
-       defb 000h               ;0d54   00      .\r
-       defw reg.f2             ;0d55   4c 00   L .\r
-       defb 000h               ;0d57   00      .\r
-       defw reg.f              ;0d58   54 00   T .\r
+       db      003h            ;0cfa   03      .\r
+       dw      reg.c2          ;0cfb   4a 00   J .\r
+       db      003h            ;0cfd   03      .\r
+       dw      reg.e2          ;0cfe   48 00   H .\r
+       db      003h            ;0d00   03      .\r
+       dw      reg.l2          ;0d01   46 00   F .\r
+       db      003h            ;0d03   03      .\r
+       dw      reg.c           ;0d04   56 00   V .\r
+       db      003h            ;0d06   03      .\r
+       dw      reg.e           ;0d07   58 00   X .\r
+       db      003h            ;0d09   03      .\r
+       dw      reg.l           ;0d0a   5a 00   Z .\r
+       db      000h            ;0d0c   00      .\r
+       dw      reg.a2          ;0d0d   4d 00   M .\r
+       db      000h            ;0d0f   00      .\r
+       dw      reg.b2          ;0d10   4b 00   K .\r
+       db      000h            ;0d12   00      .\r
+       dw      reg.c2          ;0d13   4a 00   J .\r
+       db      000h            ;0d15   00      .\r
+       dw      reg.d2          ;0d16   49 00   I .\r
+       db      000h            ;0d18   00      .\r
+       dw      reg.e2          ;0d19   48 00   H .\r
+       db      000h            ;0d1b   00      .\r
+       dw      reg.h2          ;0d1c   47 00   G .\r
+       db      000h            ;0d1e   00      .\r
+       dw      reg.l2          ;0d1f   46 00   F .\r
+       db      000h            ;0d21   00      .\r
+       dw      reg.a           ;0d22   55 00   U .\r
+       db      000h            ;0d24   00      .\r
+       dw      reg.b           ;0d25   57 00   W .\r
+       db      000h            ;0d27   00      .\r
+       dw      reg.c           ;0d28   56 00   V .\r
+       db      000h            ;0d2a   00      .\r
+       dw      reg.d           ;0d2b   59 00   Y .\r
+       db      000h            ;0d2d   00      .\r
+       dw      reg.e           ;0d2e   58 00   X .\r
+       db      000h            ;0d30   00      .\r
+       dw      reg.h           ;0d31   5b 00   [ .\r
+       db      000h            ;0d33   00      .\r
+       dw      reg.l           ;0d34   5a 00   Z .\r
+       db      003h            ;0d36   03      .\r
+       dw      reg.ix          ;0d37   52 00   R .\r
+       db      003h            ;0d39   03      .\r
+       dw      reg.iy          ;0d3a   50 00   P .\r
+       db      003h            ;0d3c   03      .\r
+       dw      reg_sp          ;0d3d   5c 00   \ .\r
+       db      003h            ;0d3f   03      .\r
+       dw      REG.PC          ;0d40   60 00   ` .\r
+       db      003h            ;0d42   03      .\r
+       dw      reg.ix          ;0d43   52 00   R .\r
+       db      003h            ;0d45   03      .\r
+       dw      reg.iy          ;0d46   50 00   P .\r
+       db      003h            ;0d48   03      .\r
+       dw      reg_sp          ;0d49   5c 00   \ .\r
+       db      003h            ;0d4b   03      .\r
+       dw      REG.PC          ;0d4c   60 00   ` .\r
+       db      000h            ;0d4e   00      .\r
+       dw      reg.i           ;0d4f   4f 00   O .\r
+       db      003h            ;0d51   03      .\r
+       dw      l004eh          ;0d52   4e 00   N .\r
+       db      000h            ;0d54   00      .\r
+       dw      reg.f2          ;0d55   4c 00   L .\r
+       db      000h            ;0d57   00      .\r
+       dw      reg.f           ;0d58   54 00   T .\r
 \r
 cmd_S:\r
        ld hl,(last_S)          ;0d5a   2a 90 0d        * . .\r
@@ -2242,8 +2176,6 @@ l0d8ah:
        call sub_0ef8h          ;0d8b   cd f8 0e        . . .\r
        jr l0d60h               ;0d8e   18 d0   . .\r
 \r
-last_S:\r
-       defw TPA                ;0d90   00 01   . .\r
 cmd_@:\r
        call assert_eol         ;0d92   cd d6 02        . . .\r
        ld hl,msg_offset        ;0d95   21 a0 0d        ! . .\r
@@ -2254,8 +2186,6 @@ cmd_@:
 msg_offset:\r
        dc      '@'             ;0da0   c0      .\r
 \r
-last_I:\r
-       defw 0                  ;0da1   00 00   . .\r
 cmd_I:\r
        ld hl,cmd_I             ;0da3   21 a3 0d        ! . .\r
        ld (cmd_rpt),hl         ;0da6   22 68 00        " h .\r
@@ -2272,10 +2202,6 @@ cmd_I:
        call out.bin.b          ;0dbe   cd c7 01        . . .\r
        jp crlf                 ;0dc1   c3 a3 02        . . .\r
 \r
-last_O_addr:\r
-       dw      0               ;0dc4   00      .\r
-last_O_val:\r
-       db      0               ;0dc6   00      .\r
 cmd_O:\r
        ld hl,cmd_O             ;0dc7   21 c7 0d        ! . .\r
        ld (cmd_rpt),hl         ;0dca   22 68 00        " h .\r
@@ -2388,9 +2314,6 @@ l0e5eh:
        call out.ascii          ;0e7d   cd 34 02        . 4 .\r
        jp crlf                 ;0e80   c3 a3 02        . . .\r
 \r
-cmd_Q_jopt:\r
-       db      -1              ;0e83   ff      .\r
-\r
 cmd_Q:\r
        ld a,(de)               ;0e84   1a      .\r
        sub 'J'                 ;0e85   d6 4a   . J\r
@@ -2452,9 +2375,6 @@ l0ed3h:
        pop hl                  ;0ed3   e1      .\r
        ret                     ;0ed4   c9      .\r
 \r
-last_D:\r
-       dw      TPA\r
-\r
 sub_0ed7h:\r
        push    hl              ;0ed7   e5 d5   . .\r
        push    de\r
@@ -2614,24 +2534,33 @@ l0fach:
        ret                     ;0fae   c9      .\r
 \r
 cmd_F:\r
-       push de                 ;0faf   d5      .\r
-       ld hl,DMA_BUF+1         ;0fb0   21 81 00        ! . .\r
-       ld (hl),' '             ;0fb3   36 20   6\r
-       inc hl                  ;0fb5   23      #\r
+       push de\r
+       ld hl,DMA_BUF+1\r
+       ld (hl),' '\r
+       inc hl\r
 l0fb6h:\r
-       ld a,(de)               ;0fb6   1a      .\r
-       ld (hl),a               ;0fb7   77      w\r
-       inc hl                  ;0fb8   23      #\r
-       inc de                  ;0fb9   13      .\r
-       and a                   ;0fba   a7      .\r
-       jr nz,l0fb6h            ;0fbb   20 f9     .\r
-       ld a,l                  ;0fbd   7d      }\r
-       sub DMA_BUF+2           ;0fbe   d6 82   . .\r
-       ld (DMA_BUF),a          ;0fc0   32 80 00        2 . .\r
-       pop hl                  ;0fc3   e1      .\r
-       ld de,FCB               ;0fc4   11 5c 00        . \ .\r
-       call parse_filename     ;0fc7   cd cd 0f        . . .\r
-       ld de,FCB2              ;0fca   11 6c 00        . l .\r
+       ld a,(de)\r
+       ld (hl),a\r
+       inc hl\r
+       inc de\r
+       and a\r
+       jr nz,l0fb6h\r
+       ld a,l\r
+       sub DMA_BUF+2\r
+       ld (DMA_BUF),a\r
+       pop hl\r
+       ld de,dfcb1\r
+       call parse_filename\r
+       ld de,dfcb2\r
+       call parse_filename\r
+       ;fall thru\r
+\r
+cpy_fcb2:\r
+       ld hl,dfcb2\r
+       ld de,fcbsym\r
+       ld bc,16\r
+       ldir\r
+       ret\r
 \r
 parse_filename:\r
        call sub_102ch          ;0fcd   cd 2c 10        . , .\r
@@ -2732,120 +2661,32 @@ sub_1043h:
        cp ','                  ;1049   fe 2c   . ,\r
        ret                     ;104b   c9      .\r
 \r
-fcb_clear_rc:\r
-       xor a                   ;104c   af      .\r
-       ld hl,FCB+12            ;104d   21 68 00        ! h .\r
-       ld b,21                 ;1050   06 15   . .\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               ;1052   77      w\r
-       inc hl                  ;1053   23      #\r
-       djnz l1052h             ;1054   10 fc   . .\r
-       ld de,DMA_BUF           ;1056   11 80 00        . . .\r
-       ld c,BDOS_SETDMA        ;1059   0e 1a   . .\r
-       call ddtz_base          ;105b   cd 00 00        . . .\r
-       ld de,FCB               ;105e   11 5c 00        . \ .\r
-       ret                     ;1061   c9      .\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
-cmd_R:\r
-       ld hl,0                 ;1062   21 00 00        ! . .\r
-       call get_lastarg_def    ;1065   cd 69 03        . i .\r
-read_file:\r
-       push hl                 ;1068   e5      .\r
-       ld hl,0                 ;1069   21 00 00        ! . .\r
-       ld (high_load),hl       ;106c   22 9c 11        " . .\r
-       call fcb_clear_rc       ;106f   cd 4c 10        . L .\r
+file_open:\r
+       ld (cur_fcb),de\r
+       call setup_fcb          ;106f   cd 4c 10        . L .\r
        ld c,BDOS_OPEN          ;1072   0e 0f   . .\r
-       call ddtz_base          ;1074   cd 00 00        . . .\r
+       call ddtz_bdos          ;1074   cd 00 00        . . .\r
        inc a                   ;1077   3c      <\r
        jp z,ERROR              ;1078   ca 07 01        . . .\r
-       ld hl,FCB+9             ;107b   21 65 00        ! e .\r
-       ld de,str_hex           ;107e   11 a5 10        . . .\r
-       ld b,3                  ;1081   06 03   . .\r
-       call strncmp            ;1083   cd 67 11        . g .\r
-       pop hl                  ;1086   e1      .\r
-       jr z,read_hexfile       ;1087   28 1f   ( .\r
-       ld de,TPA               ;1089   11 00 01        . . .\r
-       add hl,de               ;108c   19      .\r
-       push hl                 ;108d   e5      .\r
-l108eh:\r
-       call read_sector        ;108e   cd 21 11        . ! .\r
-       pop hl                  ;1091   e1      .\r
-       jp z,p_max_high         ;1092   ca 72 11        . r .\r
-       ld de,DMA_BUF           ;1095   11 80 00        . . .\r
-       ld b,080h               ;1098   06 80   . .\r
-l109ah:\r
-       ld a,(de)               ;109a   1a      .\r
-       call cmdR_storebyte     ;109b   cd 36 11        . 6 .\r
-       inc de                  ;109e   13      .\r
-       inc hl                  ;109f   23      #\r
-       djnz l109ah             ;10a0   10 f8   . .\r
-       push hl                 ;10a2   e5      .\r
-       jr l108eh               ;10a3   18 e9   . .\r
-\r
-str_hex:\r
-       db      'HEX'           ;10a5   48      H E X\r
-\r
-read_hexfile:\r
-       push hl                 ;10a8   e5      .\r
        ld a,080h               ;10a9   3e 80   > .\r
        ld (cmdR_rindex),a      ;10ab   32 20 11        2   .\r
-l10aeh:\r
-       call read_byte          ;10ae   cd 05 11        . . .\r
-       jr z,rdhex_done         ;10b1   28 31   ( 1\r
-       cp ':'                  ;10b3   fe 3a   . :\r
-       jr nz,l10aeh            ;10b5   20 f7     .\r
-       ld c,0                  ;10b7   0e 00   . .\r
-       call read_hexchar       ;10b9   cd e8 10        . . .\r
-       ld b,a                  ;10bc   47      G\r
-       call read_hexchar       ;10bd   cd e8 10        . . .\r
-       ld h,a                  ;10c0   67      g\r
-       call read_hexchar       ;10c1   cd e8 10        . . .\r
-       ld l,a                  ;10c4   6f      o\r
-       ld a,b                  ;10c5   78      x\r
-       and a                   ;10c6   a7      .\r
-       jr z,rdhex_done         ;10c7   28 1b   ( .\r
-       call read_hexchar       ;10c9   cd e8 10        . . .\r
-l10cch:\r
-       call read_hexchar       ;10cc   cd e8 10        . . .\r
-       pop de                  ;10cf   d1      .\r
-       push de                 ;10d0   d5      .\r
-       push hl                 ;10d1   e5      .\r
-       add hl,de               ;10d2   19      .\r
-       call cmdR_storebyte     ;10d3   cd 36 11        . 6 .\r
-       pop hl                  ;10d6   e1      .\r
-       inc hl                  ;10d7   23      #\r
-       djnz l10cch             ;10d8   10 f2   . .\r
-       call read_hexchar               ;10da   cd e8 10        . . .\r
-       ld a,c                  ;10dd   79      y\r
-       and a                   ;10de   a7      .\r
-       jp nz,ERROR             ;10df   c2 07 01        . . .\r
-       jr l10aeh               ;10e2   18 ca   . .\r
-rdhex_done:\r
-       pop hl                  ;10e4   e1      .\r
-       jp p_max_high           ;10e5   c3 72 11        . r .\r
-\r
-read_hexchar:\r
-       call read_hexdigit      ;10e8   cd f9 10        . . .\r
-       rlca                    ;10eb   07      .\r
-       rlca                    ;10ec   07      .\r
-       rlca                    ;10ed   07      .\r
-       rlca                    ;10ee   07      .\r
-       ld d,a                  ;10ef   57      W\r
-       call read_hexdigit      ;10f0   cd f9 10        . . .\r
-       add a,d                 ;10f3   82      .\r
-       ld d,a                  ;10f4   57      W\r
-       add a,c                 ;10f5   81      .\r
-       ld c,a                  ;10f6   4f      O\r
-       ld a,d                  ;10f7   7a      z\r
-       ret                     ;10f8   c9      .\r
-\r
-read_hexdigit:\r
-       call read_byte          ;10f9   cd 05 11        . . .\r
-       jr z,l1102h             ;10fc   28 04   ( .\r
-       call hex_digit          ;10fe   cd 12 06        . . .\r
-       ret nc                  ;1101   d0      .\r
-l1102h:\r
-       jp ERROR                ;1102   c3 07 01        . . .\r
+       ret\r
 \r
 read_byte:\r
        ld a,(cmdR_rindex)      ;1105   3a 20 11        :   .\r
@@ -2866,16 +2707,13 @@ l1111h:
        cp 01ah                 ;111d   fe 1a   . .\r
        ret                     ;111f   c9      .\r
 \r
-cmdR_rindex:\r
-       db      0               ;1120   00      .\r
-\r
 read_sector:\r
        push hl                 ;1121   e5      .\r
        push de                 ;1122   d5      .\r
        push bc                 ;1123   c5      .\r
-       ld de,FCB               ;1124   11 5c 00        . \ .\r
+       ld de,(cur_fcb)         ;1124   11 5c 00        . \ .\r
        ld c,BDOS_READ          ;1127   0e 14   . .\r
-       call ddtz_base          ;1129   cd 00 00        . . .\r
+       call ddtz_bdos          ;1129   cd 00 00        . . .\r
        dec a                   ;112c   3d      =\r
        jr z,l1132h             ;112d   28 03   ( .\r
        jp p,ERROR              ;112f   f2 07 01        . . .\r
@@ -2918,28 +2756,224 @@ strncmp:
        djnz strncmp            ;116c   10 f9   . .\r
        ret                     ;116e   c9      .\r
 \r
+str_hex:\r
+       db      'HEX'\r
+\r
+read_hexchar:\r
+       call read_hexdigit\r
+       rlca\r
+       rlca\r
+       rlca\r
+       rlca\r
+       ld d,a\r
+       call read_hexdigit\r
+       add a,d\r
+       ld d,a\r
+       add a,c\r
+       ld c,a\r
+       ld a,d\r
+       ret\r
+\r
+read_hexdigit:\r
+       call read_byte\r
+       jr z,error8\r
+hex_digit_v:\r
+       call hex_digit\r
+       ret nc\r
+error8:\r
+       jp ERROR\r
+\r
+read_hexbyte:\r
+       call    read_byte\r
+read_hexbyte0:\r
+       push    bc\r
+       call    hex_digit_v\r
+       rlca\r
+       rlca\r
+       rlca\r
+       rlca\r
+       ld      c,a\r
+       call    read_byte\r
+       call    hex_digit_v\r
+       or      c\r
+       pop     bc\r
+       ret\r
+\r
+cmd_R:\r
+       ld hl,0                 ;1062   21 00 00        ! . .\r
+       call get_lastarg_def    ;1065   cd 69 03        . i .\r
+read_file:\r
+       ld de,dfcb1+1\r
+       ld a,(de)\r
+       cp '?'\r
+       jr z,read_symfile\r
+       dec de\r
+       push hl                 ;1068   e5      .\r
+       ld hl,0                 ;1069   21 00 00        ! . .\r
+       ld (high_load),hl       ;106c   22 9c 11        " . .\r
+       call file_open\r
+       ld hl,dfcb1+9           ;107b   21 65 00        ! e .\r
+       ld de,str_hex           ;107e   11 a5 10        . . .\r
+       ld b,3                  ;1081   06 03   . .\r
+       call strncmp            ;1083   cd 67 11        . g .\r
+       pop hl                  ;1086   e1      .\r
+       jr z,read_hexfile       ;1087   28 1f   ( .\r
+       ld de,TPA               ;1089   11 00 01        . . .\r
+       add hl,de               ;108c   19      .\r
+       push hl                 ;108d   e5      .\r
+l108eh:\r
+       call read_sector        ;108e   cd 21 11        . ! .\r
+       pop hl                  ;1091   e1      .\r
+       jr z,read_symfile       ;1092   ca 72 11        . r .\r
+       ld de,DMA_BUF           ;1095   11 80 00        . . .\r
+       ld b,080h               ;1098   06 80   . .\r
+l109ah:\r
+       ld a,(de)               ;109a   1a      .\r
+       call cmdR_storebyte     ;109b   cd 36 11        . 6 .\r
+       inc de                  ;109e   13      .\r
+       inc hl                  ;109f   23      #\r
+       djnz l109ah             ;10a0   10 f8   . .\r
+       push hl                 ;10a2   e5      .\r
+       jr l108eh               ;10a3   18 e9   . .\r
+\r
+read_hexfile:\r
+       push hl                 ;10a8   e5      .\r
+l10aeh:\r
+       call read_byte          ;10ae   cd 05 11        . . .\r
+       jr z,rdhex_done         ;10b1   28 31   ( 1\r
+       cp ':'                  ;10b3   fe 3a   . :\r
+       jr nz,l10aeh            ;10b5   20 f7     .\r
+       ld c,0                  ;10b7   0e 00   . .\r
+       call read_hexchar       ;10b9   cd e8 10        . . .\r
+       ld b,a                  ;10bc   47      G\r
+       call read_hexchar       ;10bd   cd e8 10        . . .\r
+       ld h,a                  ;10c0   67      g\r
+       call read_hexchar       ;10c1   cd e8 10        . . .\r
+       ld l,a                  ;10c4   6f      o\r
+       ld a,b                  ;10c5   78      x\r
+       and a                   ;10c6   a7      .\r
+       jr z,rdhex_done         ;10c7   28 1b   ( .\r
+       call read_hexchar       ;10c9   cd e8 10        . . .\r
+l10cch:\r
+       call read_hexchar       ;10cc   cd e8 10        . . .\r
+       pop de                  ;10cf   d1      .\r
+       push de                 ;10d0   d5      .\r
+       push hl                 ;10d1   e5      .\r
+       add hl,de               ;10d2   19      .\r
+       call cmdR_storebyte     ;10d3   cd 36 11        . 6 .\r
+       pop hl                  ;10d6   e1      .\r
+       inc hl                  ;10d7   23      #\r
+       djnz l10cch             ;10d8   10 f2   . .\r
+       call read_hexchar               ;10da   cd e8 10        . . .\r
+       ld a,c                  ;10dd   79      y\r
+       and a                   ;10de   a7      .\r
+       jr nz,error9            ;10df   c2 07 01        . . .\r
+       jr l10aeh               ;10e2   18 ca   . .\r
+rdhex_done:\r
+       pop hl                  ;10e4   e1      .\r
+       jr read_symfile         ;10e5   c3 72 11        . r .\r
+\r
+read_symfile:\r
+       ld de,fcbsym+1\r
+       ld a,(de)\r
+       cp ' '\r
+       jp z,p_max_high\r
+\r
+       call pstr_inl\r
+       db      'SYMBOLS',CR,LF+80h\r
+\r
+       dec de\r
+       call file_open\r
+;------------------------------------------------------------------------\r
+rs_1:\r
+       call    read_byte\r
+rs_2:\r
+       cp      1ah\r
+       jr      z,p_max_high\r
+       cp      '!'\r
+       jr      c,rs_1\r
+       call    read_hexbyte0\r
+       ld      d,a\r
+       call    read_hexbyte    ; symval\r
+       ld      e,a\r
+       push    de              ; symval\r
+       call    read_byte\r
+       cp      ' '\r
+       jr      z,rs_4\r
+       pop     hl              ; discard symval\r
+rs_3:  call    read_byte\r
+       cp      ' '\r
+       jr      c,rs_2\r
+       jr      rs_3\r
+;\r
+rs_4:  ld      hl,(BDOS+1)     ;\r
+       ld      e,0             ; setup symlen\r
+rs_5:  dec     hl              ;\r
+       call    read_byte       ;\r
+       cp      TAB             ;\r
+       jr      z,rs_6          ;\r
+       cp      CR              ;\r
+       jr      z,rs_6          ;\r
+       cp      '!'             ;\r
+       jr      c,error9                ;\r
+       ld      (hl),a          ;\r
+       inc     e               ; symlen++\r
+       ld      a,e             ;\r
+       cp      10h+1           ;\r
+       jr      c,rs_5          ;\r
+error9:\r
+       jp      ERROR           ;\r
+;\r
+rs_6:  push    de              ; symlen\r
+       push    hl              ;\r
+       ex      de,hl           ;\r
+       ld      hl,(BDOS+1)     ;\r
+       inc     hl              ;\r
+       ld      e,(hl)          ;\r
+       inc     hl              ;\r
+       ld      d,(hl)          ;\r
+       pop     hl              ;\r
+       ld      (hl),d          ;\r
+       dec     hl              ;\r
+       ld      (hl),e          ;\r
+       dec     hl              ;\r
+       ld      (hl),0c3h       ;\r
+\r
+       ld      de,(max_load)   ;\r
+       call    cp_hl_de        ;\r
+       jr      c,error9                ;\r
+\r
+       ld      de,(reg_sp)     ;\r
+       call    cp_hl_de        ;\r
+       jr      nc,rs_61        ;\r
+       ld      (reg_sp),hl     ;\r
+rs_61:\r
+\r
+       ld      de,(BDOS+1)     ;\r
+       ld      (BDOS+1),hl     ;\r
+       ex      de,hl           ;\r
+       pop     de              ;\r
+       ld      (hl),e          ; symlen\r
+       inc     hl              ;\r
+       pop     de              ; symval\r
+       ld      (hl),e          ;\r
+       inc     hl              ;\r
+       ld      (hl),d          ;\r
+       jp      rs_1            ;\r
+;------------------------------------------------------------------------\r
+\r
 p_max_high0:\r
-       call assert_eol         ;116f   cd d6 02        . . .\r
+       call assert_eol\r
 p_max_high:\r
-       ld hl,msg_high          ;1172   21 8d 11        ! . .\r
-       call pstr               ;1175   cd 88 02        . . .\r
-       ld hl,(high_load)       ;1178   2a 9c 11        * . .\r
-       call out_hl             ;117b   cd 13 02        . . .\r
-       ld hl,msg_max           ;117e   21 94 11        ! . .\r
-       call pstr               ;1181   cd 88 02        . . .\r
-       ld hl,(max_load)        ;1184   2a 9e 11        * . .\r
-       call out_hl             ;1187   cd 13 02        . . .\r
-       jp crlf                 ;118a   c3 a3 02        . . .\r
-\r
-msg_high:\r
+       call pstr_inl\r
        DC      'High = '\r
-msg_max:\r
+       ld hl,(high_load)\r
+       call out_hl\r
+       call pstr_inl\r
        DC      '  Max = '\r
-\r
-high_load:\r
-       defw TPA                ;119c   00 01   . .\r
-max_load:\r
-       defw TPA                ;119e   00 01   . .\r
+       ld hl,(max_load)\r
+       call out_hl\r
+       jp crlf\r
 \r
 cmd_W:\r
        call get_arg_range      ;11a0   cd 7d 03        . } .\r
@@ -2953,16 +2987,17 @@ l11adh:
        and 080h                ;11ad   e6 80   . .\r
        ld c,a                  ;11af   4f      O\r
        push bc                 ;11b0   c5      .\r
-       ld a,(FCB+1)            ;11b1   3a 5d 00        : ] .\r
+       ld a,(dfcb1+1)          ;11b1   3a 5d 00        : ] .\r
        cp ' '                  ;11b4   fe 20   .\r
        jr z,error5             ;11b6   28 3b   ( ;\r
-       call fcb_clear_rc       ;11b8   cd 4c 10        . L .\r
+       ld de,dfcb1\r
+       call setup_fcb          ;11b8   cd 4c 10        . L .\r
        push de                 ;11bb   d5      .\r
        ld c,BDOS_DELETE        ;11bc   0e 13   . .\r
-       call ddtz_base          ;11be   cd 00 00        . . .\r
+       call ddtz_bdos          ;11be   cd 00 00        . . .\r
        pop de                  ;11c1   d1      .\r
        ld c,BDOS_CREATE        ;11c2   0e 16   . .\r
-       call ddtz_base          ;11c4   cd 00 00        . . .\r
+       call ddtz_bdos          ;11c4   cd 00 00        . . .\r
        inc a                   ;11c7   3c      <\r
        jr z,error5             ;11c8   28 29   ( )\r
        pop bc                  ;11ca   c1      .\r
@@ -2986,9 +3021,9 @@ l11cch:
 \r
 write_sector:\r
        push hl                 ;11e4   e5      .\r
-       ld de,FCB               ;11e5   11 5c 00        . \ .\r
+       ld de,dfcb1             ;11e5   11 5c 00        . \ .\r
        ld c,BDOS_WRITE         ;11e8   0e 15   . .\r
-       call ddtz_base          ;11ea   cd 00 00        . . .\r
+       call ddtz_bdos          ;11ea   cd 00 00        . . .\r
        pop hl                  ;11ed   e1      .\r
        and a                   ;11ee   a7      .\r
        ret z                   ;11ef   c8      .\r
@@ -2997,9 +3032,9 @@ error5:
        jp ERROR                ;11f3   c3 07 01        . . .\r
 \r
 close_file:\r
-       ld de,FCB               ;11f6   11 5c 00        . \ .\r
+       ld de,dfcb1             ;11f6   11 5c 00        . \ .\r
        ld c,BDOS_CLOSE         ;11f9   0e 10   . .\r
-       jp ddtz_base            ;11fb   c3 00 00        . . .\r
+       jp ddtz_bdos            ;11fb   c3 00 00        . . .\r
 \r
 cmd_A:\r
        ld hl,(last_A)          ;11fe   2a 64 12        * d .\r
@@ -3051,13 +3086,6 @@ l1259h:
        ld sp,(l1262h)          ;125c   ed 7b 62 12     . { b .\r
        jr l1211h               ;1260   18 af   . .\r
 \r
-l1262h:\r
-       dw      0               ;1262   00 00   .\r
-last_A:\r
-       dw      TPA             ;1264   00 01   .\r
-cmd_A_prev:\r
-       dw      TPA             ;1266   00 01   . .\r
-\r
 sub_1268h:\r
        call skipbl             ;1268   cd bf 02        . . .\r
        ld hl,t_MNEMONICS       ;126b   21 c6 1e        ! . .\r
@@ -3082,161 +3110,161 @@ CALL_HL:
        jp (hl)                 ;1288   e9      .\r
 \r
 b_1289_start:\r
-       defw as.ADC_SBC         ;ADC    1289    51 15   Q .\r
-       defb 088h               ;       128b    88      .\r
-       defw as.ADD             ;ADD    128c    71 15   q .\r
-       defb 080h               ;       128e    80      .\r
-       defw as.AND_CP_OR_SUB_XOR ;AND  128f    a8 15   . .\r
-       defb 0a0h               ;       1291    a0      .\r
-       defw as.BITOP           ;BIT    1292    09 16   . .\r
-       defb 040h               ;       1294    40      @\r
-       defw as.CALL            ;CALL   1295    2d 16   - .\r
-       defb 0c4h               ;       1297    c4      .\r
-       defw as.opc.noarg       ;CCF    1298    3b 15   ; .\r
-       defb 03fh               ;       129a    3f      ?\r
-       defw as.AND_CP_OR_SUB_XOR ;CP   129b    a8 15   . .\r
-       defb 0b8h               ;       129d    b8      .\r
-       defw gen.opc.ED2        ;CPD    129e    44 15   D .\r
-       defb 0a9h               ;       12a0    a9      .\r
-       defw gen.opc.ED2        ;CPDR   12a1    44 15   D .\r
-       defb 0b9h               ;       12a3    b9      .\r
-       defw gen.opc.ED2        ;CPI    12a4    44 15   D .\r
-       defb 0a1h               ;       12a6    a1      .\r
-       defw gen.opc.ED2        ;CPIR   12a7    44 15   D .\r
-       defb 0b1h               ;       12a9    b1      .\r
-       defw as.opc.noarg       ;CPL    12aa    3b 15   ; .\r
-       defb 02fh               ;       12ac    2f      /\r
-       defw as.opc.noarg       ;DAA    12ad    3b 15   ; .\r
-       defb 027h               ;       12af    27      '\r
-       defw as.DEC_INC         ;DEC    12b0    98 17   . .\r
-       defb 005h               ;       12b2    05      .\r
-       defw as.opc.noarg       ;DI     12b3    3b 15   ; .\r
-       defb 0f3h               ;       12b5    f3      .\r
-       defw as.DJNZ            ;DJNZ   12b6    99 16   . .\r
-       defb 010h               ;       12b8    10      .\r
-       defw as.opc.noarg       ;EI     12b9    3b 15   ; .\r
-       defb 0fbh               ;       12bb    fb      .\r
-       defw as.EX              ;EX     12bc    49 17   I .\r
-       defb 0e3h               ;       12be    e3      .\r
-       defw as.opc.noarg       ;EXX    12bf    3b 15   ; .\r
-       defb 0d9h               ;       12c1    d9      .\r
-       defw as.opc.noarg       ;HALT   12c2    3b 15   ; .\r
-       defb 076h               ;       12c4    76      v\r
-       defw as.IM              ;IM     12c5    b4 16   . .\r
-       defb 046h               ;       12c7    46      F\r
-       defw as.IN              ;IN     12c8    ed 16   . .\r
-       defb 040h               ;       12ca    40      @\r
-       defw as.DEC_INC         ;INC    12cb    98 17   . .\r
-       defb 004h               ;       12cd    04      .\r
-       defw gen.opc.ED2        ;IND    12ce    44 15   D .\r
-       defb 0aah               ;       12d0    aa      .\r
-       defw gen.opc.ED2        ;INDR   12d1    44 15   D .\r
-       defb 0bah               ;       12d3    ba      .\r
-       defw gen.opc.ED2        ;INI    12d4    44 15   D .\r
-       defb 0a2h               ;       12d6    a2      .\r
-       defw gen.opc.ED2        ;INIR   12d7    44 15   D .\r
-       defb 0b2h               ;       12d9    b2      .\r
-       defw as.JP              ;JP     12da    53 16   S .\r
-       defb 0c2h               ;       12dc    c2      .\r
-       defw as.JR              ;JR     12dd    a0 16   . .\r
-       defb 020h               ;       12df    20\r
-       defw as.LD              ;LD     12e0    52 13   R .\r
-       defb 040h               ;       12e2    40      @\r
-       defw gen.opc.ED2        ;LDD    12e3    44 15   D .\r
-       defb 0a8h               ;       12e5    a8      .\r
-       defw gen.opc.ED2        ;LDDR   12e6    44 15   D .\r
-       defb 0b8h               ;       12e8    b8      .\r
-       defw gen.opc.ED2        ;LDI    12e9    44 15   D .\r
-       defb 0a0h               ;       12eb    a0      .\r
-       defw gen.opc.ED2        ;LDIR   12ec    44 15   D .\r
-       defb 0b0h               ;       12ee    b0      .\r
-       defw gen.opc.ED2        ;NEG    12ef    44 15   D .\r
-       defb 044h               ;       12f1    44      D\r
-       defw as.opc.noarg       ;NOP    12f2    3b 15   ; .\r
-       defb 000h               ;       12f4    00      .\r
-       defw as.AND_CP_OR_SUB_XOR ;OR   12f5    a8 15   . .\r
-       defb 0b0h               ;       12f7    b0      .\r
-       defw gen.opc.ED2        ;OTDR   12f8    44 15   D .\r
-       defb 0bbh               ;       12fa    bb      .\r
-       defw gen.opc.ED2        ;OTIR   12fb    44 15   D .\r
-       defb 0b3h               ;       12fd    b3      .\r
-       defw as.OUT             ;OUT    12fe    21 17   ! .\r
-       defb 041h               ;       1300    41      A\r
-       defw gen.opc.ED2        ;OUTD   1301    44 15   D .\r
-       defb 0abh               ;       1303    ab      .\r
-       defw gen.opc.ED2        ;OUTI   1304    44 15   D .\r
-       defb 0a3h               ;       1306    a3      .\r
-       defw as.POP_PUSH        ;POP    1307    d9 16   . .\r
-       defb 0c1h               ;       1309    c1      .\r
-       defw as.POP_PUSH        ;PUSH   130a    d9 16   . .\r
-       defb 0c5h               ;       130c    c5      .\r
-       defw as.BITOP           ;RES    130d    09 16   . .\r
-       defb 080h               ;       130f    80      .\r
-       defw as.RET             ;RET    1310    45 16   E .\r
-       defb 0c0h               ;       1312    c0      .\r
-       defw gen.opc.ED2        ;RETI   1313    44 15   D .\r
-       defb 04dh               ;       1315    4d      M\r
-       defw gen.opc.ED2        ;RETN   1316    44 15   D .\r
-       defb 045h               ;       1318    45      E\r
-       defw as.SHIFTOP ;RL     1319    d5 15   . .\r
-       defb 010h               ;       131b    10      .\r
-       defw as.opc.noarg       ;RLA    131c    3b 15   ; .\r
-       defb 017h               ;       131e    17      .\r
-       defw as.SHIFTOP         ;RLC    131f    d5 15   . .\r
-       defb 000h               ;       1321    00      .\r
-       defw as.opc.noarg       ;RLCA   1322    3b 15   ; .\r
-       defb 007h               ;       1324    07      .\r
-       defw gen.opc.ED2        ;RLD    1325    44 15   D .\r
-       defb 06fh               ;       1327    6f      o\r
-       defw as.SHIFTOP         ;RR     1328    d5 15   . .\r
-       defb 018h               ;       132a    18      .\r
-       defw as.opc.noarg       ;RRA    132b    3b 15   ; .\r
-       defb 01fh               ;       132d    1f      .\r
-       defw as.SHIFTOP         ;RRC    132e    d5 15   . .\r
-       defb 008h               ;       1330    08      .\r
-       defw as.opc.noarg       ;RRCA   1331    3b 15   ; .\r
-       defb 00fh               ;       1333    0f      .\r
-       defw gen.opc.ED2        ;RRD    1334    44 15   D .\r
-       defb 067h               ;       1336    67      g\r
-       defw as.RST             ;RST    1337    ca 16   . .\r
-       defb 0c7h               ;       1339    c7      .\r
-       defw as.ADC_SBC         ;SBC    133a    51 15   Q .\r
-       defb 098h               ;       133c    98      .\r
-       defw as.opc.noarg       ;SCF    133d    3b 15   ; .\r
-       defb 037h               ;       133f    37      7\r
-       defw as.BITOP           ;SET    1340    09 16   . .\r
-       defb 0c0h               ;       1342    c0      .\r
-       defw as.SHIFTOP         ;SLA    1343    d5 15   . .\r
-       defb 020h               ;       1345    20\r
-       defw as.SHIFTOP         ;SRA    1346    d5 15   . .\r
-       defb 028h               ;       1348    28      (\r
-       defw as.SHIFTOP         ;SRL    1349    d5 15   . .\r
-       defb 038h               ;       134b    38      8\r
-       defw as.AND_CP_OR_SUB_XOR ;SUB  134c    a8 15   . .\r
-       defb 090h               ;       134e    90      .\r
-       defw as.AND_CP_OR_SUB_XOR ;XOR  134f    a8 15   . .\r
-       defb 0a8h               ;       1351    a8      .\r
-\r
-       defw as.IN0             ;IN0\r
-       defb 000h               ;\r
-       defw as.MLT             ;MLT\r
-       defb 04ch               ;\r
-       defw gen.opc.ED2        ;OTDM\r
-       defb 08bh               ;\r
-       defw gen.opc.ED2        ;OTDMR\r
-       defb 09bh               ;\r
-       defw gen.opc.ED2        ;OTIM\r
-       defb 083h               ;\r
-       defw gen.opc.ED2        ;OTIMR\r
-       defb 093h               ;\r
-       defw as.OUTO            ;OUT0\r
-       defb 001h               ;\r
-       defw gen.opc.ED2        ;SLP\r
-       defb 076h               ;\r
-       defw as.TST             ;TST\r
-       defb 004h               ;\r
-       defw as.TSTIO           ;TSTIO\r
-       defb 074h               ;\r
+       dw      as.ADC_SBC              ;ADC    1289    51 15   Q .\r
+       db      088h                    ;       128b    88      .\r
+       dw      as.ADD                  ;ADD    128c    71 15   q .\r
+       db      080h                    ;       128e    80      .\r
+       dw      as.AND_CP_OR_SUB_XOR    ;AND    128f    a8 15   . .\r
+       db      0a0h                    ;       1291    a0      .\r
+       dw      as.BITOP                ;BIT    1292    09 16   . .\r
+       db      040h                    ;       1294    40      @\r
+       dw      as.CALL                 ;CALL   1295    2d 16   - .\r
+       db      0c4h                    ;       1297    c4      .\r
+       dw      as.opc.noarg            ;CCF    1298    3b 15   ; .\r
+       db      03fh                    ;       129a    3f      ?\r
+       dw      as.AND_CP_OR_SUB_XOR    ;CP     129b    a8 15   . .\r
+       db      0b8h                    ;       129d    b8      .\r
+       dw      gen.opc.ED2             ;CPD    129e    44 15   D .\r
+       db      0a9h                    ;       12a0    a9      .\r
+       dw      gen.opc.ED2             ;CPDR   12a1    44 15   D .\r
+       db      0b9h                    ;       12a3    b9      .\r
+       dw      gen.opc.ED2             ;CPI    12a4    44 15   D .\r
+       db      0a1h                    ;       12a6    a1      .\r
+       dw      gen.opc.ED2             ;CPIR   12a7    44 15   D .\r
+       db      0b1h                    ;       12a9    b1      .\r
+       dw      as.opc.noarg            ;CPL    12aa    3b 15   ; .\r
+       db      02fh                    ;       12ac    2f      /\r
+       dw      as.opc.noarg            ;DAA    12ad    3b 15   ; .\r
+       db      027h                    ;       12af    27      '\r
+       dw      as.DEC_INC              ;DEC    12b0    98 17   . .\r
+       db      005h                    ;       12b2    05      .\r
+       dw      as.opc.noarg            ;DI     12b3    3b 15   ; .\r
+       db      0f3h                    ;       12b5    f3      .\r
+       dw      as.DJNZ                 ;DJNZ   12b6    99 16   . .\r
+       db      010h                    ;       12b8    10      .\r
+       dw      as.opc.noarg            ;EI     12b9    3b 15   ; .\r
+       db      0fbh                    ;       12bb    fb      .\r
+       dw      as.EX                   ;EX     12bc    49 17   I .\r
+       db      0e3h                    ;       12be    e3      .\r
+       dw      as.opc.noarg            ;EXX    12bf    3b 15   ; .\r
+       db      0d9h                    ;       12c1    d9      .\r
+       dw      as.opc.noarg            ;HALT   12c2    3b 15   ; .\r
+       db      076h                    ;       12c4    76      v\r
+       dw      as.IM                   ;IM     12c5    b4 16   . .\r
+       db      046h                    ;       12c7    46      F\r
+       dw      as.IN                   ;IN     12c8    ed 16   . .\r
+       db      040h                    ;       12ca    40      @\r
+       dw      as.DEC_INC              ;INC    12cb    98 17   . .\r
+       db      004h                    ;       12cd    04      .\r
+       dw      gen.opc.ED2             ;IND    12ce    44 15   D .\r
+       db      0aah                    ;       12d0    aa      .\r
+       dw      gen.opc.ED2             ;INDR   12d1    44 15   D .\r
+       db      0bah                    ;       12d3    ba      .\r
+       dw      gen.opc.ED2             ;INI    12d4    44 15   D .\r
+       db      0a2h                    ;       12d6    a2      .\r
+       dw      gen.opc.ED2             ;INIR   12d7    44 15   D .\r
+       db      0b2h                    ;       12d9    b2      .\r
+       dw      as.JP                   ;JP     12da    53 16   S .\r
+       db      0c2h                    ;       12dc    c2      .\r
+       dw      as.JR                   ;JR     12dd    a0 16   . .\r
+       db      020h                    ;       12df    20\r
+       dw      as.LD                   ;LD     12e0    52 13   R .\r
+       db      040h                    ;       12e2    40      @\r
+       dw      gen.opc.ED2             ;LDD    12e3    44 15   D .\r
+       db      0a8h                    ;       12e5    a8      .\r
+       dw      gen.opc.ED2             ;LDDR   12e6    44 15   D .\r
+       db      0b8h                    ;       12e8    b8      .\r
+       dw      gen.opc.ED2             ;LDI    12e9    44 15   D .\r
+       db      0a0h                    ;       12eb    a0      .\r
+       dw      gen.opc.ED2             ;LDIR   12ec    44 15   D .\r
+       db      0b0h                    ;       12ee    b0      .\r
+       dw      gen.opc.ED2             ;NEG    12ef    44 15   D .\r
+       db      044h                    ;       12f1    44      D\r
+       dw      as.opc.noarg            ;NOP    12f2    3b 15   ; .\r
+       db      000h                    ;       12f4    00      .\r
+       dw      as.AND_CP_OR_SUB_XOR    ;OR     12f5    a8 15   . .\r
+       db      0b0h                    ;       12f7    b0      .\r
+       dw      gen.opc.ED2             ;OTDR   12f8    44 15   D .\r
+       db      0bbh                    ;       12fa    bb      .\r
+       dw      gen.opc.ED2             ;OTIR   12fb    44 15   D .\r
+       db      0b3h                    ;       12fd    b3      .\r
+       dw      as.OUT                  ;OUT    12fe    21 17   ! .\r
+       db      041h                    ;       1300    41      A\r
+       dw      gen.opc.ED2             ;OUTD   1301    44 15   D .\r
+       db      0abh                    ;       1303    ab      .\r
+       dw      gen.opc.ED2             ;OUTI   1304    44 15   D .\r
+       db      0a3h                    ;       1306    a3      .\r
+       dw      as.POP_PUSH             ;POP    1307    d9 16   . .\r
+       db      0c1h                    ;       1309    c1      .\r
+       dw      as.POP_PUSH             ;PUSH   130a    d9 16   . .\r
+       db      0c5h                    ;       130c    c5      .\r
+       dw      as.BITOP                ;RES    130d    09 16   . .\r
+       db      080h                    ;       130f    80      .\r
+       dw      as.RET                  ;RET    1310    45 16   E .\r
+       db      0c0h                    ;       1312    c0      .\r
+       dw      gen.opc.ED2             ;RETI   1313    44 15   D .\r
+       db      04dh                    ;       1315    4d      M\r
+       dw      gen.opc.ED2             ;RETN   1316    44 15   D .\r
+       db      045h                    ;       1318    45      E\r
+       dw      as.SHIFTOP              ;RL     1319    d5 15   . .\r
+       db      010h                    ;       131b    10      .\r
+       dw      as.opc.noarg            ;RLA    131c    3b 15   ; .\r
+       db      017h                    ;       131e    17      .\r
+       dw      as.SHIFTOP              ;RLC    131f    d5 15   . .\r
+       db      000h                    ;       1321    00      .\r
+       dw      as.opc.noarg            ;RLCA   1322    3b 15   ; .\r
+       db      007h                    ;       1324    07      .\r
+       dw      gen.opc.ED2             ;RLD    1325    44 15   D .\r
+       db      06fh                    ;       1327    6f      o\r
+       dw      as.SHIFTOP              ;RR     1328    d5 15   . .\r
+       db      018h                    ;       132a    18      .\r
+       dw      as.opc.noarg            ;RRA    132b    3b 15   ; .\r
+       db      01fh                    ;       132d    1f      .\r
+       dw      as.SHIFTOP              ;RRC    132e    d5 15   . .\r
+       db      008h                    ;       1330    08      .\r
+       dw      as.opc.noarg            ;RRCA   1331    3b 15   ; .\r
+       db      00fh                    ;       1333    0f      .\r
+       dw      gen.opc.ED2             ;RRD    1334    44 15   D .\r
+       db      067h                    ;       1336    67      g\r
+       dw      as.RST                  ;RST    1337    ca 16   . .\r
+       db      0c7h                    ;       1339    c7      .\r
+       dw      as.ADC_SBC              ;SBC    133a    51 15   Q .\r
+       db      098h                    ;       133c    98      .\r
+       dw      as.opc.noarg            ;SCF    133d    3b 15   ; .\r
+       db      037h                    ;       133f    37      7\r
+       dw      as.BITOP                ;SET    1340    09 16   . .\r
+       db      0c0h                    ;       1342    c0      .\r
+       dw      as.SHIFTOP              ;SLA    1343    d5 15   . .\r
+       db      020h                    ;       1345    20\r
+       dw      as.SHIFTOP              ;SRA    1346    d5 15   . .\r
+       db      028h                    ;       1348    28      (\r
+       dw      as.SHIFTOP              ;SRL    1349    d5 15   . .\r
+       db      038h                    ;       134b    38      8\r
+       dw      as.AND_CP_OR_SUB_XOR    ;SUB    134c    a8 15   . .\r
+       db      090h                    ;       134e    90      .\r
+       dw      as.AND_CP_OR_SUB_XOR    ;XOR    134f    a8 15   . .\r
+       db      0a8h                    ;       1351    a8      .\r
+\r
+       dw      as.IN0                  ;IN0\r
+       db      000h                    ;\r
+       dw      as.MLT                  ;MLT\r
+       db      04ch                    ;\r
+       dw      gen.opc.ED2             ;OTDM\r
+       db      08bh                    ;\r
+       dw      gen.opc.ED2             ;OTDMR\r
+       db      09bh                    ;\r
+       dw      gen.opc.ED2             ;OTIM\r
+       db      083h                    ;\r
+       dw      gen.opc.ED2             ;OTIMR\r
+       db      093h                    ;\r
+       dw      as.OUTO                 ;OUT0\r
+       db      001h                    ;\r
+       dw      gen.opc.ED2             ;SLP\r
+       db      076h                    ;\r
+       dw      as.TST                  ;TST\r
+       db      004h                    ;\r
+       dw      as.TSTIO                ;TSTIO\r
+       db      074h                    ;\r
 \r
 as.TST:\r
        call arg.r_HL_A         ;\r
@@ -3378,7 +3406,7 @@ l13d4h:
        jp z,ERROR              ;13e9   ca 07 01        . . .\r
 l13ech:\r
        ld b,a                  ;13ec   47      G\r
-       jp as.opc.noarg ;13ed   c3 3b 15        . ; .\r
+       jp as.opc.noarg         ;13ed   c3 3b 15        . ; .\r
 l13f0h:\r
        call arg.IDX_displcmnt  ;13f0   cd 55 18        . U .\r
        jr nc,l1413h            ;13f3   30 1e   0 .\r
@@ -4151,9 +4179,6 @@ test_paren_close:
        inc de                  ;18ca   13      .\r
        ret                     ;18cb   c9      .\r
 \r
-prefix_ixiy:\r
-       db      0               ;18cc   00      .\r
-\r
 cmd_L:\r
        ld hl,cmd_L             ;18cd   21 cd 18        ! . .\r
        ld (cmd_rpt),hl         ;18d0   22 68 00        " h .\r
@@ -4255,14 +4280,11 @@ p_disas_instr:
        ret                     ;197e   c9      .\r
 \r
 l197fh:\r
-       ld hl,msg_undef_opcode  ;197f   21 89 19        ! . .\r
-       call pstr               ;1982   cd 88 02        . . .\r
-       ld b,001h               ;1985   06 01   . .\r
-       sub a                   ;1987   97      .\r
-       ret                     ;1988   c9      .\r
-\r
-msg_undef_opcode:\r
+       call pstr_inl\r
        DC      '???'\r
+       ld b,001h\r
+       sub a\r
+       ret\r
 \r
 disas_get_instrlen:\r
        sub a                   ;198c   97      .\r
@@ -4324,50 +4346,50 @@ l19edh:
 \r
 ; DD/FD 3 byte (ix+d)/(iy+d)\r
 b_19ef_start:\r
-       defb 034h               ;19ef   34      4\r
-       defb 035h               ;19f0   35      5\r
-       defb 036h               ;19f1   36      6\r
-       defb 046h               ;19f2   46      F\r
-       defb 04eh               ;19f3   4e      N\r
-       defb 056h               ;19f4   56      V\r
-       defb 05eh               ;19f5   5e      ^\r
-       defb 066h               ;19f6   66      f\r
-       defb 06eh               ;19f7   6e      n\r
-       defb 070h               ;19f8   70      p\r
-       defb 071h               ;19f9   71      q\r
-       defb 072h               ;19fa   72      r\r
-       defb 073h               ;19fb   73      s\r
-       defb 074h               ;19fc   74      t\r
-       defb 075h               ;19fd   75      u\r
-       defb 077h               ;19ff   77      w\r
-       defb 07eh               ;1a00   7e      ~\r
-       defb 086h               ;1a01   86      .\r
-       defb 08eh               ;1a02   8e      .\r
-       defb 096h               ;1a03   96      .\r
-       defb 09eh               ;1a04   9e      .\r
-       defb 0a6h               ;1a05   a6      .\r
-       defb 0aeh               ;1a06   ae      .\r
-       defb 0b6h               ;1a07   b6      .\r
-       defb 0beh               ;1a08   be      .\r
-       defb 0                  ;1a09   00      .\r
+       db      034h            ;19ef   34      4\r
+       db      035h            ;19f0   35      5\r
+       db      036h            ;19f1   36      6\r
+       db      046h            ;19f2   46      F\r
+       db      04eh            ;19f3   4e      N\r
+       db      056h            ;19f4   56      V\r
+       db      05eh            ;19f5   5e      ^\r
+       db      066h            ;19f6   66      f\r
+       db      06eh            ;19f7   6e      n\r
+       db      070h            ;19f8   70      p\r
+       db      071h            ;19f9   71      q\r
+       db      072h            ;19fa   72      r\r
+       db      073h            ;19fb   73      s\r
+       db      074h            ;19fc   74      t\r
+       db      075h            ;19fd   75      u\r
+       db      077h            ;19ff   77      w\r
+       db      07eh            ;1a00   7e      ~\r
+       db      086h            ;1a01   86      .\r
+       db      08eh            ;1a02   8e      .\r
+       db      096h            ;1a03   96      .\r
+       db      09eh            ;1a04   9e      .\r
+       db      0a6h            ;1a05   a6      .\r
+       db      0aeh            ;1a06   ae      .\r
+       db      0b6h            ;1a07   b6      .\r
+       db      0beh            ;1a08   be      .\r
+       db      0                       ;1a09   00      .\r
 \r
 ; DD/FD 2 byte\r
 l1a0ah:\r
-       defb 009h               ;1a0a   09      .\r
-       defb 019h               ;1a0b   19      .\r
-       defb 021h               ;1a0c   21      !\r
-       defb 022h               ;1a0d   22      "\r
-       defb 023h               ;1a0e   23      #\r
-       defb 029h               ;1a0f   29      )\r
-       defb 02ah               ;1a10   2a      *\r
-       defb 02bh               ;1a11   2b      +\r
-       defb 039h               ;1a12   39      9\r
-       defb 0e1h               ;1a13   e1      .\r
-       defb 0e3h               ;1a14   e3      .\r
-       defb 0e5h               ;1a15   e5      .\r
-       defb 0e9h               ;1a16   e9      .\r
-       defb 0f9h               ;1a17   f9      .\r
-       defb 0                  ;1a18   00      .\r
+       db      009h            ;1a0a   09      .\r
+       db      019h            ;1a0b   19      .\r
+       db      021h            ;1a0c   21      !\r
+       db      022h            ;1a0d   22      "\r
+       db      023h            ;1a0e   23      #\r
+       db      029h            ;1a0f   29      )\r
+       db      02ah            ;1a10   2a      *\r
+       db      02bh            ;1a11   2b      +\r
+       db      039h            ;1a12   39      9\r
+       db      0e1h            ;1a13   e1      .\r
+       db      0e3h            ;1a14   e3      .\r
+       db      0e5h            ;1a15   e5      .\r
+       db      0e9h            ;1a16   e9      .\r
+       db      0f9h            ;1a17   f9      .\r
+       db      0                       ;1a18   00      .\r
 \r
 disas_pfx.ED:\r
        inc iy                  ;1a19   fd 23   . #\r
@@ -4759,12 +4781,9 @@ l1c98h:
        jp out_hex              ;1c9d   c3 18 02        . . .\r
 \r
 l1ca0h:\r
-       ld hl,b_1ca9_start      ;1ca0   21 a9 1c        ! . .\r
-       call pstr               ;1ca3   cd 88 02        . . .\r
-       jp p_arg_hlixiy         ;1ca6   c3 7e 1e        . ~ .\r
-\r
-b_1ca9_start:\r
+       call pstr_inl           ;1ca3   cd 88 02        . . .\r
        DC      '(SP),'\r
+       jp p_arg_hlixiy         ;1ca6   c3 7e 1e        . ~ .\r
 \r
 l1caeh:\r
        call p_char_lparen      ;1cb0   cd 5d 02        . ] .\r
@@ -4776,12 +4795,9 @@ p_arg_ex_dehl:
        jp pstr                 ;1cbe   c3 88 02        . . .\r
 \r
 l1cc1h:\r
-       ld hl,b_1cca_start      ;1cc1   21 ca 1c        ! . .\r
-       call pstr               ;1cc4   cd 88 02        . . .\r
-       jp p_arg_hlixiy         ;1cc7   c3 7e 1e        . ~ .\r
-\r
-b_1cca_start:\r
+       call pstr_inl\r
        DC      'SP,'\r
+       jp p_arg_hlixiy\r
 \r
 p_arg_ex_afaf:\r
        ld hl,b_176d_start      ;1ccd   21 6d 17        ! m .\r
@@ -5234,15 +5250,6 @@ t__C_:
        DC      '(C)'\r
        DB      0\r
 \r
-isprefix_ixiy:\r
-       db      0               ;1ff8   00      .\r
-last_L:\r
-       dw      TPA             ;1ff9   00 01   .\r
-l1ffbh:\r
-       dw      0               ;1ffb   00 00   .\r
-l1ffdh:\r
-       db      0               ;1ffd   00      .\r
-\r
 sub_1ffeh:\r
        ld hl,(REG.PC)          ;1ffe   2a 60 00        * ` .\r
        ld a,h                  ;2001   7c      |\r
@@ -5530,17 +5537,178 @@ l21dah:
        ret                     ;21e1   c9      .\r
 \r
 b_21e2_start:\r
-       db      0               ;21e2   00      .\r
+       db      0\r
 trace_call_flag:\r
-       db      0               ;1=call, 0=trace  21e3  00      .\r
+       db      0               ;1=call, 0=trace\r
 trace_UW_flag:\r
-       db      0               ;0 or 'U' or 'W' 21e4   00      .\r
+       db      0               ;0 or 'U' or 'W'\r
 trace_count:\r
-       dw      0               ;21e5   00 00   .\r
+       dw      0\r
 trace_N_flag:\r
-       db      0               ;0 if 'N'  21e7 00      .\r
+       db      0               ;0 if 'N'\r
 trace_J_flag:\r
-       db      0               ;0 if 'J'  21e8 00      .\r
+       db      0               ;0 if 'J'\r
+\r
+;-------------------------------------------------------------------------------\r
+\r
+con_col:\r
+       db      0\r
+\r
+l0941h:\r
+       db      0\r
+\r
+bp_tab:\r
+       rept BP_CNT\r
+        rept BP_SIZE\r
+         db    0\r
+        endm\r
+       endm\r
+\r
+expr_p1:\r
+       dw      expr_buf\r
+expr_p2:\r
+       dw      expr_buf\r
+\r
+expr_buf:\r
+current_cseg   defl    $ - current_cseg\r
+       .phase  current_phase + current_cseg\r
+\r
+start:\r
+       LD      SP,ldr_end+(stack-ddtz_base)\r
+       LD      DE,signon               ;ldr_end+(expr_buf-ddtz_base)\r
+       LD      C,BDOS_PSTR\r
+       CALL    BDOS\r
+\r
+       xor     a\r
+       dec     a\r
+       jp      po,reloc\r
+       ld      de,msgz80\r
+       LD      C,BDOS_PSTR\r
+       CALL    BDOS\r
+       jp      0\r
+\r
+reloc:\r
+       LD      HL,ldr_end+ddtz_size    ;start of reloc bitmap\r
+       ld      bc,0108h                ;init bit counter\r
+\r
+       EXX\r
+       LD      HL,(BDOS+1)\r
+       LD      (ldr_end+(ddtz_bdos+1-ddtz_base)),HL\r
+       LD      BC,ddtz_size-1\r
+       LD      D,B\r
+       LD      E,0FFH\r
+       INC     DE                      ;size rounded up to next page boundary\r
+       INC     BC                      ;ddtz_size\r
+       OR      A\r
+       SBC     HL,DE                   ;BDOS - size\r
+       LD      (BDOS+1),HL             ;-> new BDOS entry\r
+\r
+       push    hl\r
+       PUSH    BC\r
+       ld      de,ldr_end\r
+       sbc     hl,de\r
+       EX      DE,HL                   ;-> DE\r
+       LD      HL,ldr_size\r
+       add     hl,bc\r
+       ld      b,h\r
+       ld      c,l\r
+       LD      HL,TPA\r
+reloc_lp:\r
+       EXX\r
+       djnz    reloc_nl\r
+       ld      b,c                     ;reload bit counter\r
+       LD      e,(HL)                  ;get next 8 relocation bits\r
+       INC     HL\r
+reloc_nl:\r
+       sla     e\r
+       EXX\r
+       JR      NC,reloc_next\r
+       DEC     HL\r
+       LD      A,(HL)\r
+       ADD     A,E\r
+       LD      (HL),A\r
+       INC     HL\r
+       LD      A,(HL)\r
+       ADC     A,D\r
+       LD      (HL),A\r
+reloc_next:\r
+       cpi\r
+       jp      pe,reloc_lp\r
+       dec     hl\r
+\r
+       POP     BC\r
+       pop     de\r
+       EX      DE,HL\r
+       ADD     HL,BC\r
+       EX      DE,HL\r
+       DEC     DE\r
+       LDDR\r
+       LD      HL,conbuf+2-ddtz_base\r
+       ADD     HL,DE\r
+       JP      (HL)\r
+\r
+current_phase  defl    $\r
+       .dephase\r
+current_cseg   defl    $\r
+\r
+       ds      EXPR_BUF_SIZE - ($ - expr_buf)\r
+expr_bufe:\r
+\r
+msg_Y:\r
+       dc      'Yn'\r
+reg_Y:\r
+       rept    YREG_CNT\r
+        dw     0\r
+       endm\r
+\r
+last_S:\r
+       dw      TPA\r
+\r
+last_I:\r
+       dw      0\r
+\r
+last_O_addr:\r
+       dw      0\r
+last_O_val:\r
+       db      0\r
+\r
+cmd_Q_jopt:\r
+       db      -1\r
+\r
+last_D:\r
+       dw      TPA\r
+\r
+cmdR_rindex:\r
+       db      0\r
+\r
+high_load:\r
+       dw      TPA\r
+max_load:\r
+       dw      TPA\r
+\r
+l1262h:\r
+       dw      0\r
+last_A:\r
+       dw      TPA\r
+cmd_A_prev:\r
+       dw      TPA\r
+\r
+prefix_ixiy:\r
+       db      0\r
+\r
+isprefix_ixiy:\r
+       db      0\r
+last_L:\r
+       dw      TPA\r
+l1ffbh:\r
+       dw      0\r
+l1ffdh:\r
+       db      0\r
+\r
+cur_fcb:\r
+       dw      0\r
+fcbsym:\r
+       ds      33\r
 \r
 ddtz_size      equ     $-ddtz_base\r
 ddtz_end:\r