]> cloudbase.mooo.com Git - ddt180.git/commitdiff
Add symfile read function.
authorLeo C <erbl259-lmu@yahoo.de>
Wed, 10 Aug 2016 14:47:42 +0000 (16:47 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Wed, 10 Aug 2016 14:47:42 +0000 (16:47 +0200)
ddt180.z80

index ec59e039c91d64026ea23cb2ce02926a6922d0b3..24e2dcc72cf9ddc79a1498b80531a803851cd0c7 100644 (file)
@@ -36,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
@@ -68,12 +68,14 @@ 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
@@ -124,42 +126,43 @@ cmd_rpt:dw        mainloop
 conbuf:\r
        db      CONBUF_SIZE\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
+       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
@@ -238,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
@@ -437,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
@@ -451,11 +454,11 @@ inchar:
        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
@@ -985,7 +988,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
@@ -1197,33 +1200,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
@@ -2523,24 +2526,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
@@ -2641,120 +2653,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
@@ -2779,9 +2703,9 @@ read_sector:
        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
@@ -2824,6 +2748,212 @@ 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
+       ld hl,msg_symbols\r
+       call pstr\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
 p_max_high:\r
@@ -2837,6 +2967,8 @@ p_max_high:
        call out_hl             ;1187   cd 13 02        . . .\r
        jp crlf                 ;118a   c3 a3 02        . . .\r
 \r
+msg_symbols:\r
+       db      'SYMBOLS',CR,LF+80h\r
 msg_high:\r
        DC      'High = '\r
 msg_max:\r
@@ -2854,16 +2986,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
@@ -2887,9 +3020,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
@@ -2898,9 +3031,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
@@ -5468,7 +5601,7 @@ reloc:
 \r
        EXX\r
        LD      HL,(BDOS+1)\r
-       LD      (ldr_end+1),HL\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
@@ -5580,6 +5713,11 @@ l1ffbh:
 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
 \r