; LAST UPDATE: 15.01.2022 savelij
 
 
 
PAGE
 
                TITLE "evo-dos.a80"
 
 
 
                include ../../macros.a80
 
                include ../../define.a80
 
                include ../../global_vars.a80
 
                include ../../bas_trd_vars.a80
 
                include ../../basic_tokens.a80
 
                include ../../evodos_vars.a80
 
                include ../../version.a80
 
                include macros.a80
 
 
 
ZASTV_X         EQU 7                                   ; координата X печати надписи BETA128
 
ZASTV_Y         EQU 7                                   ; координата Y печати надписи BETA128
 
ZASTV_PIX       EQU ZASTV_Y*0X20+0X4000+ZASTV_X+9       ; адрес вывода скошенных уголков
 
ZASTV_ATR       EQU ZASTV_Y*0X20+0X5800+ZASTV_X         ; адрес вывода цвета для скошенных уголков
 
 
 
                ORG 0
 
                di
 
                ld      de,0xffff
 
                JP HC_REZIDENT
 
 
 
                DB 1
 
                nop
 
loc_9           out     (0xfe),a
 
                ld      a,0x3f
 
                jr      loc_24
 
 
 
        DUPL 0X0010-$,0
 
                jp      PRINT_A_                        ; RST 10 печать символа
 
 
 
        DUPL ADR_SEL_ROM-$,0XFF
 
LOC_14          OUT (C),A
 
                NOP
 
                RET
 
 
 
        DUPL 0X0018-$,0XFF
 
                jp      PRINT_MSG                       ; RST 18 печать текстового сообщения
 
 
 
        DUPL 0X0020-$,0XFF
 
                jp      CALL2BASIC                      ; RST 20 вызов подпрограмм из басика 48
 
 
 
loc_24          LD HL,0XFFFF
 
                jr      loc_2B
 
 
 
                jp      ADR_OPEN_CHAN                   ; RST 28
 
 
 
loc_2B          LD I,A
 
                XOR A
 
                JR LOC_33
 
 
 
        DUPL 0X33-$,0XFF
 
LOC_33          LD SP,HL
 
                LD B,A
 
                LD C,A
 
                JR loc_3A
 
 
 
                ei                                      ; RST 38
 
                ret
 
 
 
loc_3A
 
        REPT 8
 
                PUSH BC
 
        ENDM
 
                LD HL,0XA500
 
                ADD HL,SP
 
                JR C,loc_3A
 
                ld      (P_RAMT),hl
 
                ld      de,0x3eaf
 
                ld      bc,0xa8
 
                ld      a,e
 
                ex      de,hl
 
                ld      sp,0x6000
 
                ld      (TRD_5F00),hl
 
                ld      hl,loc_79
 
                push    hl
 
                ld      hl,loc_3D2F
 
                push    hl
 
                ld      hl,0xb8ed                       ; команда LDDR
 
                jr      EXECUTECOM2HL
 
 
 
                jp      MAGIC
 
 
 
EXECUTECOM2HL   ld      (TRD_5F10),hl
 
                push    af
 
                ld      a,0xc9
 
                ld      (TRD_5F12),a
 
                pop     af
 
                ld      hl,(TRD_5F00)
 
                jp      TRD_5F10
 
 
 
loc_79          ex      de,hl
 
                inc     hl
 
                ld      (UDG),hl
 
                dec     hl
 
                ld      bc,0x40                         ; надоел этот писк по сбросу
 
                ld      (RASP),bc
 
                ld      (RAMTOP),hl
 
                ld      hl,0x3C00
 
                ld      (CHARS),hl
 
                ld      hl,(RAMTOP)
 
                ld      (hl),0x3e
 
                dec     hl
 
                ld      sp,hl
 
                dec     hl
 
                dec     hl
 
                ld      (ERR_SP),hl
 
                ld      de,0x1303
 
                push    de
 
                im      1
 
                ld      iy,ERR_NR
 
                ld      hl,TRD_5CB6                     ; для проверки наличия INTERFACE1
 
                ld      (CHANS),hl
 
                ld      de,0x15af
 
                ld      bc,0x15
 
                ex      de,hl
 
                call    COPY_BAS2VARS
 
                ex      de,hl
 
                dec     hl
 
                ld      (DATADD),hl
 
                inc     hl
 
                ld      (PROG),hl
 
                ld      (VARS),hl
 
                ld      (hl),0x80
 
                inc     hl
 
                ld      (E_LINE),hl                     ; адрес начала редактируемой строки
 
                ld      (hl),0x0d
 
                inc     hl
 
                ld      (hl),0x80
 
                inc     hl
 
                ld      (WORKSP),hl
 
                ld      (STKBOT),hl
 
                ld      (STKEND),hl
 
                ld      a,0x38
 
                ld      (ATTR_P),a
 
                ld      (ATTR_T),a
 
                ld      (BORDCR),a
 
                ld      hl,0x0523
 
                ld      (REPDEL),hl
 
                dec     (iy-0x3a)
 
                dec     (iy-0x36)
 
                ld      hl,0x15c6
 
                ld      de,STRMS
 
                ld      bc,0x0e
 
                call    COPY_BAS2VARS
 
                set     1,(iy+1)
 
                ld      hl,TRD_5CC2                     ; содержит 0xC9 для перехода из TR-DOS в BASIC
 
                ld      (hl),0xc9
 
                rst     0x20
 
                dw      0x0edf                          ; очистка буфера принтера
 
                ld      hl,DF_SZ                        ; количество строк в служебном экране
 
                ld      (hl),2
 
                ld      hl,0x128b
 
                push    hl
 
                ld      a,0xaa
 
                ld      (NOT_USED),a
 
                ei
 
                jp      IN_DOS_15616
 
 
 
COPY_BAS2VARS   ld      (TRD_5F00),hl
 
                ld      hl,loc_3D2F
 
                push    hl
 
                ld      hl,0xb0ed                       ; команда LDIR
 
                ld      (TRD_5F10),hl
 
                ld      hl,(TRD_5F00)
 
                jp      TRD_5F10
 
 
 
; обработка номера строки автостарта программы на бейсике
 
WORK4AUTORUN    call    DELETE_BUF                      ; удаление буфера, если канал не открыт
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                ld      hl,(E_LINE)                     ; адрес откуда взять номер строки автостарта
 
                inc     hl
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)                          ; получили номер строки автостарта
 
                ld      a,d
 
                or      e
 
                ex      de,hl
 
                jr      z,loc_140                       ; если номер строки =0, то без автозапуска
 
                xor     a
 
                ld      (TRD_5D10),a                    ; старший байт ошибки
 
loc_140         push    hl
 
                call    RESTORE_SP                      ; восстановление перехватчика ошибок
 
                pop     hl
 
                ld      (NEWPPC),hl
 
                xor     a
 
                ld      (NSPPS),a
 
                rst     0x20
 
                dw      0x16b0                          ; установка области редактирования до минимума
 
                ld      hl,(PROG)
 
                dec     hl
 
                ld      (DATADD),hl
 
                ld      sp,(ERR_SP)
 
                ld      a,(TRD_5D10)                    ; старший байт ошибки
 
                or      a
 
                ld      hl,0x1b76
 
                jr      z,loc_166
 
                rst     0x20
 
                dw      0x1bb0                          ; сообщение "OK"
 
loc_166         push    hl
 
                ld      hl,TRD_5CC2
 
                push    hl
 
                ret
 
 
 
CONTINUE_15619
 
        DUPL 3,0
 
                call    CREATE_BUF                      ; создание буфера
 
                ld      a,0xff
 
                ld      (TRD_5D15),a                    ; если 0, печатать шапку TR-DOS, иначе не печатать
 
                xor     a
 
                ld      (TRD_5CF7),a
 
                ld      a,0xaa
 
                ld      (TRD_5D17),a                    ; рисование заставки, если 0xAA
 
                ld      hl,CP_ERROR
 
                ld      (TRD_5D1A),hl                   ; внутренний адрес завершения интерпретатора команд
 
                ld      hl,0
 
                add     hl,sp
 
                ld      (TRD_5D1C),hl                   ; сохранение регистра SP
 
                dec     hl
 
                dec     hl
 
                ld      sp,hl
 
                call    MARK_SP                         ; установка стека для перехвата ошибок
 
                ld      hl,(RAMTOP)
 
                ld      de,(CH_ADD)
 
                sbc     hl,de
 
                ex      de,hl
 
                jr      nc,loc_1A5
 
                or      a
 
                ld      de,0x101
 
                sbc     hl,de
 
loc_1A5         ld      (CH_ADD),hl
 
loc_1A8         call    CP_0D_OR_80
 
loc_1AB         jp      z,END_COMAND
 
                cp      __REM
 
                inc     hl
 
                jr      nz,loc_1A8
 
                call    CP_0D_OR_80
 
                jr      z,loc_1AB
 
                cp      ":"
 
                jp      nz,END_COMAND
 
                inc     hl
 
                call    SAE2_HL_
 
                ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                jp      loc_30A
 
 
 
CP_0D_OR_80     ld      a,(hl)
 
                cp      0x0d
 
                ret     z
 
                cp      0x80
 
                ret     z
 
                or      a
 
                ret
 
 
 
                call    REWRITE_9SEC
 
; подпрограмма завершение командного процессора
 
END_COMAND      ld      hl,0
 
                ld      (TRD_5CF8),hl                   ; дисковод при операции с 2 файлами
 
                call    DELETE_BUF
 
                call    CLEAR_WORKSPACE
 
                ld      hl,TRD_5D17                     ; рисование заставки, если 0xAA
 
                ld      (hl),0xaa
 
                ld      hl,TRD_5D1F
 
                ld      a,(hl)
 
                or      a
 
                ld      (hl),0
 
                jr      nz,loc_1F3
 
                call    DEL_5BYTES
 
                call    FIND_ENDSTR                     ; поиск конца строки
 
loc_1F3         ld      sp,(TRD_5D1C)                   ; сохранение регистра SP
 
                ld      hl,(TRD_5D1A)                   ; внутренний адрес завершения интерпретатора команд
 
                ld      bc,(TRD_5D0F)                   ; номер ошибки TR-DOS
 
                ld      b,0
 
                jp      (hl)
 
 
 
; DCU (вызывает с адреса 0x0207)
 
CP_ERROR        call    RESTORE_SP                      ; проверка на ошибку
 
                bit     7,(iy+0)
 
                ret     nz
 
                ld      de,TRD_5CC2
 
                ld      sp,(ERR_SP)
 
                push    de
 
                ret
 
 
 
; поиск конца строки
 
FIND_ENDSTR     call    GET_SYMSTR
 
                cp      0x0d
 
                ret     z
 
                call    GET_NEXT_SYM
 
                jr      FIND_ENDSTR                     ; поиск конца строки
 
 
 
; установка стека для перехвата ошибок
 
MARK_SP         ld      hl,(ERR_SP)
 
                ld      (TRD_5D13),hl                   ; копия ERR_SP
 
                ld      hl,(TRD_5D1C)                   ; сохранение регистра SP
 
                dec     hl
 
                dec     hl
 
                ld      (ERR_SP),hl
 
                ld      de,loc_3D16
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                ret
 
 
 
; восстановление перехватчика ошибок
 
RESTORE_SP      ld      hl,(TRD_5D13)                   ; копия ERR_SP
 
loc_0235        ld      (ERR_SP),hl
 
                ret
 
 
 
IN_COMMAND_CPU  ld      hl,0                            ; вхождение в командный процессор доса
 
                ld      (TRD_5CF7),hl
 
                add     hl,sp
 
                ld      (TRD_5D1C),hl                   ; сохранение регистра SP
 
                dec     hl
 
                dec     hl
 
                ld      sp,hl
 
                call    MARK_SP                         ; установка стека для перехвата ошибок
 
; 2 вызова перенесены для устранения пропадания курсора
 
; при повторном входе в TR-DOS из меню BASIC 128
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                call    OPEN_CHAN_2                     ; открытие канала 2
 
                ld      hl,TRD_5D17                     ; рисование заставки, если 0xAA
 
                ld      a,(hl)
 
                cp      0xaa
 
                ld      a,0
 
                ld      (TRD_5D0F),a                    ; номер ошибки TR-DOS
 
                jp      z,COMMAND_CPU
 
                ld      (hl),0xaa
 
                ld      hl,ZASTAVKA                     ; текст заставки доса
 
                rst     0x18
 
                call    OUT_COLOR_LINE                  ; рисование цветных линий заставки доса
 
                CALL ADD_TXT_VERS
 
 
 
        DUPL 0X0271-$,0
 
loc_271         ld      a,(NOT_USED)                    ; проверка на 0xAA
 
                cp      0xaa
 
                jr      nz,COMMAND_CPU                  ; если не 0xAA,то вход в командный процессор
 
 
 
        DUPL 0X027B-$,0
 
loc_27B         ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                ld      a,0xfe
 
                ld      (TRD_5D0E),a                    ; 0xFE - работает BASIC, иначе TR-DOS
 
                ld      (hl),0xf7
 
                inc     hl
 
                ld      (hl),0x22
 
                inc     hl
 
                ld      (hl),"b"
 
                inc     hl
 
                ld      (hl),"o"
 
                inc     hl
 
                ld      (hl),"o"
 
                inc     hl
 
                ld      (hl),"t"
 
                inc     hl
 
                ld      (hl),0x22
 
                inc     hl
 
                ld      (K_CUR),hl
 
                ld      (hl),0x0d
 
                inc     hl
 
                ld      (hl),0x80
 
                inc     hl
 
                ld      (WORKSP),hl
 
                ld      (STKBOT),hl
 
                ld      (STKEND),hl
 
                set     3,(iy+1)
 
                jr      GO2RUNBOOT
 
 
 
; перенос 3 байт
 
LDI3_HL2DE      ld      b,3
 
loc_2B2         ld      a,(hl)
 
                ld      (de),a
 
                inc     hl
 
                inc     de
 
                djnz    loc_2B2
 
                ret
 
 
 
; остановка мотора дисковода
 
STOP_MOTOR      ld      b,0x20
 
loc_2BB         push    bc
 
                xor     8
 
                out     (0xff),a
 
                push    af
 
                ld      a,5
 
                call    PAUSE_C_A
 
                pop     af
 
                pop     bc
 
                djnz    loc_2BB
 
                ret
 
 
 
; командный процессор DOS
 
COMMAND_CPU     ld      hl,(TRD_5D1C)                   ; сохранение регистра SP
 
                dec     hl
 
                dec     hl
 
                ld      sp,hl
 
                call    OPEN_CHAN_0                     ; открытие канала 0
 
                ld      a,(0X5D16)
 
                or      3
 
                call    STOP_MOTOR
 
                ld      a,(TRD_5D16)
 
                call    STOP_MOTOR
 
                xor     a
 
                ld      (TRD_5D15),a                    ; если 0, печатать шапку TR-DOS, иначе не печатать
 
                call    GET_COMMAND                     ; принятие и обработка команд
 
                call    SAE2E_LINE
 
GO2RUNBOOT      call    CLEAR_DOWN_SCR                  ; очистка нижней части экрана
 
                ld      hl,COMMAND_CPU
 
                ld      (TRD_5D1A),hl                   ; внутренний адрес завершения интерпретатора команд
 
                xor     a
 
                ld      (TRD_5D0F),a                    ; номер ошибки TR-DOS
 
                ld      (TRD_5CEF),a
 
                ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                push    hl
 
                ld      de,TRD_5D20                     ; для сохранения 3 символов введеной строки
 
                call    LDI3_HL2DE                      ; перенос 3 байт
 
                pop     hl
 
                ld      (TRD_5D11),hl                   ; адрес строки команды TR-DOS
 
loc_30A         ld      a,(hl)
 
                ld      b,a
 
                and     0x80
 
                ld      a,b
 
                jr      z,loc_31A
 
                cp      __RETURN
 
                jr      z,loc_31A
 
                push    af
 
                call    ACTIV_DEF_DSK                   ; выбор дисковода по умолчанию
 
                pop     af
 
loc_31A         ld      hl,CODE_BYTE_COM                ; таблица бейсик команд для TR-DOS
 
                dec     hl
 
                ld      c,0
 
loc_320         inc     c
 
                ld      d,a
 
                ld      a,LOW (ECODE_BYTE_COM-CODE_BYTE_COM)
 
                cp      c
 
                JP C,ENDCOMAND
 
                ld      a,d
 
                inc     hl
 
                cp      (hl)
 
                jr      nz,loc_320
 
LOC_32D         cp      __RETURN
 
                call    nz,CREATE_BUF                   ; создание буфера
 
                ld      a,9
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                xor     a
 
                ld      (TRD_5D0F),a                    ; номер ошибки TR-DOS
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ld      (TRD_5D10),a                    ; старший байт ошибки
 
                ld      hl,FLAGS
 
                res     7,(hl)
 
                ld      b,0
 
                ld      hl,SPIS_ADR_COM                 ; таблица адресов исполнения команд
 
                dec     c
 
                sla     c
 
                add     hl,bc
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ex      de,hl
 
LOC_353         push    hl
 
                ld      de,END_COM
 
                push    de
 
                jp      (hl)
 
 
 
END_COM         ld      hl,FLAGS
 
                set     7,(hl)
 
                pop     hl
 
                jp      (hl)
 
 
 
; текст заставки доса
 
ZASTAVKA        DB "\x16\x01\x06 NEO-DOS "
 
ZASTAVKA_VER    DB "Ver ",VERS_DOS,"  \r\r\x7F"
 
                DB " 2010 Created for PentEvo 4MB "
 
                DB "\x16\x05\x0CNedoPC\x16",ZASTV_Y,ZASTV_X
 
ROM_VER         DC "Nedo Emul"
 
 
 
END_OUT_DIR     call    READ_9SEC                       ; чтение 9 сектора
 
                call    PRINT_0D
 
                call    PRINT_0D
 
loc_3B5         ld      bc,(TRD_5E0A)
 
                call    PRINT_CHISLO                    ; печать числа
 
                ld      hl,TXT_FREE_
 
                rst     0x18
 
GOTO_END        jp      END_COMAND
 
 
 
; печать сообщения об ошибке
 
PRINT_ERROR     push    af
 
                ld      a,(TRD_5D0E)                    ; 0xFE - работает BASIC, иначе TR-DOS
 
                cp      __RETURN
 
                jr      nz,CP4PRINT_HEAD
 
                pop     af
 
                ret
 
 
 
CP4PRINT_HEAD   pop     af
 
                ld      (TRD_5D0F),a                    ; номер ошибки TR-DOS
 
                ld      a,(TRD_5D15)                    ; если 0, печатать шапку TR-DOS, иначе не печатать
 
                or      a
 
                call    z,PRINT_MSG                     ; печать текстового сообщения
 
                ret
 
 
 
ERR_NOFILES     ld      hl,TXT_NOFILES_
 
                ld      a,1
 
                jp      PRINT_TXTERR
 
 
 
ERR_OK          ld      hl,TXT_OK_                      ; "O.K."
 
                xor     a
 
                jp      PRINT_TXTERR
 
 
 
; чтение сектора 0 каталога
 
RD_0SEC2BUF     xor     a
 
                ld      (TRD_5CCC),a                    ; текущий номер сектора при чтении каталога
 
; чтение сектора каталога по номеру
 
READ_NUM_SEC    ld      de,(TRD_5CCC)                   ; текущий номер сектора при чтении каталога
 
                ld      d,0
 
READ_SEC4NEM    call    CREATE_BUF                      ; создание буфера
 
                ld      hl,TRD_5D25
 
                ld      b,1
 
                jp      COM_05                          ; чтение секторов
 
 
 
; чтение 9 сектора
 
READ_9SEC       call    CREATE_BUF                      ; создание буфера
 
                ld      de,8
 
                jr      READ_SEC4NEM
 
 
 
; настройка на дискету
 
COM_18          call    READ_9SEC                       ; чтение 9 сектора
 
                ld      a,(TRD_5E0C)
 
                cp      0x10
 
                jr      z,CP_TYPE_DSK
 
                ld      hl,TXT_DISCERROR_
 
                rst     0x18
 
                jr      GOTO_END
 
 
 
CP_TYPE_DSK     call    GET_TYPE_DISK
 
                res     0,(hl)
 
                res     1,(hl)
 
                ld      a,(TRD_5E08)
 
                bit     0,a
 
                jr      nz,loc_425
 
                set     0,(hl)
 
loc_425         bit     3,a
 
                ret     nz
 
                set     1,(hl)
 
                ret
 
 
 
CP_SECOND_SYM   ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                inc     hl
 
                ld      a,(hl)
 
                cp      0x0d
 
                ret
 
 
 
CAT             call    CP_SECOND_SYM                   ; выполнение команды CAT
 
                ld      bc,2
 
                ld      (TRD_5CDB),bc
 
                jr      z,loc_46A
 
                cp      "#"
 
                jr      nz,CODES
 
                ld      (CH_ADD),hl
 
                call    SET_NUM_CHAN
 
                call    GET_SYMSTR
 
                cp      0x0d
 
                jr      z,loc_46A
 
                cp      ","
 
                jp      nz,SINTAX_ERROR
 
                call    GET_NEXT_SYM
 
                call    PUT_NUMDSK_STK
 
                jr      loc_460
 
 
 
CODES           call    SET_AND_PUT
 
loc_460         call    EXIT_IF_SINTAX
 
                call    GET_STKBOT_
 
                ex      de,hl
 
                call    SETUP_DSK
 
loc_46A         call    EXIT_IF_SINTAX
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                ld      (TRD_5CF9),a                    ; дисковод при операции с 2 файлами
 
                call    COM_18                          ; настройка на дискету
 
                ld      a,(TRD_5CDB)
 
loc_479         cp      2
 
                push    af
 
                call    z,CLEAR_SCREEN                  ; очистка основного экрана
 
                pop     af
 
                cp      0x11
 
                jp      nc,SINTAX_ERROR
 
                call    OPENSTREAM
 
                ld      a,0xff
 
                ld      (TRD_5CF8),a                    ; дисковод при операции с 2 файлами
 
                ld      hl,TXT_TITLE_                   ; "TITLE:"
 
                rst     0x18
 
                ld      hl,TRD_5E1A
 
                rst     0x18
 
                call    PRINT_0D
 
                ld      a,(TRD_5E09)
 
                ld      hl,TRD_5E19
 
                sub     (hl)
 
                push    hl
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_NOFILES+2
 
                rst     0x18
 
                pop     hl
 
                ld      c,(hl)
 
                call    CONV2_2BYTES
 
                ld      hl,TXT_DELFILE_                 ; " DEL. FILE"
 
                rst     0x18
 
                call    RD_0SEC2BUF                     ; чтение сектора 0 каталога
 
                ld      hl,TRD_5D25
 
loc_4B6         call    CP_END_DIR                      ; проверка окончания директории
 
                call    PRINT_0D
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                add     a,"A"
 
                rst     0x10
 
                ld      b,2
 
loc_4C4         call    CP_END_DIR                      ; проверка окончания директории
 
                push    bc
 
                ld      a,":"
 
                rst     0x10
 
                push    hl
 
                call    PRINT_FILENAME                  ; печать имени файла
 
                ld      bc,0x0d
 
                pop     hl
 
                push    hl
 
                add     hl,bc
 
                ld      c,(hl)
 
                push    bc
 
                ld      a,c
 
                ld      b,2
 
                cp      0x0a
 
                jr      c,loc_4DF
 
                dec     b
 
loc_4DF         cp      0x64
 
                jr      nc,loc_4E8
 
loc_4E3         ld      a," "
 
                rst     0x10
 
                djnz    loc_4E3
 
loc_4E8         pop     bc
 
                call    PRINT_CHISLO                    ; печать числа
 
                pop     hl
 
                pop     bc
 
                ld      de,0x10
 
                add     hl,de
 
                djnz    loc_4C4
 
                jr      loc_4B6
 
 
 
; проверка окончания директории
 
CP_END_DIR      push    hl
 
                push    bc
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                ld      hl,TRD_5CF6                     ; дисковод для временной операции
 
                cp      (hl)
 
                call    nz,COM_01                       ; настройка на дисковод
 
                pop     bc
 
                pop     hl
 
                jp      CP_END_CAT
 
 
 
ADD_10          ld      de,0x10
 
                add     hl,de
 
                ret
 
 
 
CP_END_BUF      push    hl
 
                push    bc
 
                ld      bc,0xa1db
 
                add     hl,bc
 
                jr      c,READ_SEC2BUF
 
                pop     bc
 
                pop     hl
 
                ret
 
 
 
READ_SEC2BUF    ld      hl,TRD_5CCC                     ; текущий номер сектора при чтении каталога
 
                inc     (hl)
 
                call    READ_NUM_SEC                    ; чтение сектора каталога по номеру
 
                pop     bc
 
                pop     hl
 
                ld      hl,TRD_5D25
 
                ret
 
 
 
NUMDSK2BYTE     and     0xdf
 
                sbc     a,"A"
 
                jp      c,SINTAX_ERROR
 
                cp      4
 
                jp      nc,SINTAX_ERROR
 
                ret
 
 
 
CP_ON_STKBOT    call    GET_STKBOT_
 
                ld      a,c
 
                or      b
 
                jp      z,SINTAX_ERROR
 
                ret
 
 
 
NEW             call    INP_2STR2STKBOT                 ; выполнение команды NEW
 
                call    EXIT_IF_SINTAX
 
                call    INP_EXTFILENAME                 ; прием расширения файла
 
                call    SET_CP_FILENAME
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                ld      (TRD_5CF8),a                    ; дисковод при операции с 2 файлами
 
                jp      nz,ERR_NOFILES
 
                push    bc
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                call    SET_CP_FILENAME
 
                push    af
 
                ld      a,(TRD_5CF8)                    ; дисковод при операции с 2 файлами
 
                ld      hl,TRD_5CF6                     ; дисковод для временной операции
 
                cp      (hl)
 
                jp      nz,SINTAX_ERROR
 
                call    COM_18                          ; настройка на дискету
 
                pop     af
 
                jp      z,FILE_EXISTS
 
                pop     bc
 
loc_569         call    SETHEADFILENAME
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                jp      ERR_OK
 
 
 
CP_HIGH_ERR     ld      a,(TRD_5D10)                    ; старший байт ошибки
 
                or      a
 
                ret
 
 
 
CP_ERASED_FILES ld      a,(TRD_5D07)                    ; счетчик удаленных файлов
 
                or      a
 
                jp      z,ERR_NOFILES
 
                jp      ERR_OK
 
 
 
; запрос на удаление файла
 
GET_OVERWRITE_  push    bc
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                add     a,"A"
 
                call    PRINT_A_
 
                ld      a,":"
 
                call    PRINT_A_
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                call    PRINT_FILENAME                  ; печать имени файла
 
                ld      hl,TXT_FILEEXIST                ; "FILE EXISTS"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
                call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                push    af
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                pop     af
 
                pop     bc
 
                ret     nz
 
                push    bc
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                pop     bc
 
                call    ERASE_FILE                      ; удаление файла
 
                xor     a
 
                ret
 
 
 
CP_EXT_SHARP    ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "#"
 
                jr      z,FINDFILENAME_0A
 
                xor     a
 
                ret
 
 
 
FINDFILENAME_0A ld      a,0x0a
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                ld      a,9
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                ret
 
 
 
COPY_STAR_STAR  ld      a,(TRD_5CDD)                    ; выполнение команды COPY *,*
 
                cp      "*"
 
                jp      nz,ERR_NOFILES
 
                call    GET_STKBOT_
 
                ex      de,hl
 
                call    SETUP_DSK
 
                ld      a,(hl)
 
                cp      "*"
 
                jp      nz,SINTAX_ERROR
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                ld      (TRD_5CF9),a                    ; дисковод при операции с 2 файлами
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                call    COM_18                          ; настройка на дискету
 
                ld      a,0xff
 
                ld      (TRD_5D0D),a
 
loc_5F4         ld      a,(TRD_5CF8)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                call    COM_18                          ; настройка на дискету
 
                ld      a,(TRD_5D0D)
 
                inc     a
 
                ld      (TRD_5D0D),a
 
                ld      c,a
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                ld      a,(TRD_5CDD)                    ; имя файла
 
                cp      0
 
                jp      z,ERR_OK
 
                cp      1
 
                jr      z,loc_5F4
 
                ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      de,TRD_5CED                     ; номер первого трека файла
 
                ld      bc,7
 
                ldir 
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jr      nz,loc_634
 
                call    CP_EXT_SHARP
 
                jr      nz,loc_634
 
                call    GET_OVERWRITE_                  ; запрос на удаление файла
 
                jr      nz,loc_5F4
 
loc_634         call    COPY_FILE2DSK                   ; копирование файлов на 2 дисководах
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                jr      loc_5F4
 
 
 
; копирование файлов на 2 дисководах
 
COPY_FILE2DSK   call    READ_9SEC                       ; чтение 9 сектора
 
                ld      a,(TRD_5E09)
 
                cp      0x80
 
                jp      z,ERR_DIRFULL                   ; в директории места нету 
 
                ld      hl,TRD_5CED                     ; номер первого трека файла
 
                ld      de,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      bc,7
 
                ldir 
 
                ld      de,(TRD_5CEA)                   ; длина файла в секторах
 
                ld      d,0
 
                or      a
 
                ld      hl,(TRD_5E0A)
 
                sbc     hl,de
 
                jp      c,loc_1C45
 
                ld      (TRD_5E0A),hl
 
                ld      hl,(TRD_5E06)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                push    hl
 
                call    COPY_FILE                       ; копирование файла на 2 дисководах
 
                pop     hl
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5E06),hl
 
                ld      hl,TRD_5E09
 
                inc     (hl)
 
                ld      c,(hl)
 
                dec     c
 
                ld      b,0
 
                push    bc
 
                ld      de,9
 
                ld      (TRD_5CF4),de
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                pop     bc
 
                call    SETHEADFILENAME
 
                ret
 
 
 
COPY            ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                inc     hl
 
                ld      a,(hl)
 
                and     0xdf
 
                cp      "S"
 
                jp      z,COPY_S
 
                cp      "B"
 
                jp      z,COPY_B
 
                call    INP_2STR2STKBOT
 
                call    EXIT_IF_SINTAX
 
                call    RESERVED_RAM
 
                call    INP_EXTFILENAME                 ; прием расширения файла
 
                call    SET_CP_FILENAME
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                ld      (TRD_5CF8),a                    ; дисковод при операции с 2 файлами
 
                jp      nz,COPY_STAR_STAR               ; выполнение команды COPY *,*
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      de,TRD_5CED                     ; номер первого трека файла
 
                ld      bc,7
 
                ldir 
 
                call    SET_CP_FILENAME
 
                push    af
 
                push    bc
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                ld      (TRD_5CF9),a                    ; дисковод при операции с 2 файлами
 
                ld      a,(TRD_5CF8)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                call    COM_18                          ; настройка на дискету
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                call    COM_18                          ; настройка на дискету
 
                pop     bc
 
                pop     af
 
                jr      nz,loc_6F3
 
                call    CP_EXT_SHARP
 
                jr      nz,loc_6F3
 
                call    GET_OVERWRITE_                  ; запрос на удаление файла
 
                jp      nz,ERR_OK
 
loc_6F3         call    COPY_FILE2DSK                   ; копирование файлов на 2 дисководах
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "#"
 
                jp      nz,ERR_OK
 
                ld      a,0x0a
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                inc     (hl)
 
                ld      a,(TRD_5CF8)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                call    CP_EXT_SHARP
 
                jp      nz,ERR_OK
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      de,TRD_5CED                     ; НОМЕР ПЕРВОГО ТРЕКА ФАЙЛА
 
                ld      bc,7
 
                ldir
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                call    COM_18                          ; настройка на дискету
 
                jr      loc_6F3
 
 
 
; копирование файла на 2 дисководах
 
COPY_FILE       ld      a,(TRD_5CF1)
 
                or      a
 
                ret     z
 
                push    hl
 
                ld      hl,TRD_5D23
 
                sub     (hl)
 
                pop     hl
 
                jr      nc,loc_775
 
                ld      a,(TRD_5CF1)
 
                ld      b,a
 
                xor     a
 
                ld      (TRD_5CF1),a
 
loc_744         push    bc
 
                ld      a,(TRD_5CF8)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                pop     bc
 
                push    bc
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                push    hl
 
                ld      de,(TRD_5CF2)
 
                call    COM_05                          ; чтение секторов
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CF2),hl
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                call    COM_01                          ; настройка на дисковод
 
                pop     hl
 
                pop     bc
 
                ld      de,(TRD_5CEB)                   ; номер первого сектора файла
 
                call    COM_06                          ; запись секторов
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                jr      COPY_FILE                       ; копирование файла на 2 дисководах
 
 
 
loc_775         ld      (TRD_5CF1),a
 
                push    hl
 
                ld      hl,TRD_5D23
 
                ld      b,(hl)
 
                pop     hl
 
                xor     a
 
                jr      loc_744
 
 
 
; удаление файла
 
ERASE_FILE      xor     a
 
                ld      (TRD_5D07),a                    ; счетчик удаленных файлов
 
                jr      ERASE_FILES
 
 
 
ERASE           call    SET_AND_PUT                     ; выполнение команды ERASE
 
                call    EXIT_IF_SINTAX
 
                call    INP_EXTFILENAME                 ; прием расширения файла
 
                xor     a
 
                ld      (TRD_5D07),a                    ; счетчик удаленных файлов
 
                call    FIND_FILE                       ; поиск файла по имени
 
                call    ERASE_FILES
 
                jp      nz,CP_ERASED_FILES
 
                jp      ERR_OK
 
 
 
ERASE_FILES     ld      a,(TRD_5CDD)                    ; имя файла
 
                ld      (TRD_5D08),a                    ; первый символ имени файла
 
                ret     nz
 
                ld      hl,TRD_5D07                     ; счетчик удаленных файлов
 
                inc     (hl)
 
                push    bc
 
                call    READ_9SEC                       ; чтение 9 сектора
 
                ld      a,(TRD_5E09)
 
                pop     bc
 
                inc     c
 
                cp      c
 
                jr      nz,loc_7BC
 
                dec     a
 
                ld      (TRD_5E09),a
 
                xor     a
 
loc_7BC         push    af
 
                jr      z,loc_7C3
 
                ld      hl,TRD_5E19
 
                inc     (hl)
 
loc_7C3         push    bc
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                pop     bc
 
                dec     c
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                pop     af
 
                jp      z,loc_7D2
 
                ld      a,1
 
loc_7D2         ld      (TRD_5CDD),a                    ; имя файла
 
                push    af
 
                call    WRHEAD_FILENAME                 ; сохранение описателя файла
 
                ld      a,(TRD_5D08)                    ; первый символ имени файла
 
                ld      (TRD_5CDD),a                    ; имя файла
 
                pop     af
 
                jr      z,WR_NEW_FREE_SEC
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jr      ERASE_FILES
 
 
 
WR_NEW_FREE_SEC call    READ_9SEC                       ; чтение 9 сектора
 
                ld      hl,(TRD_5CEB)                   ; номер первого сектора файла
 
                ld      (TRD_5E06),hl
 
                ld      de,(TRD_5CEA)                   ; длина файла в секторах
 
                ld      hl,(TRD_5E0A)
 
                ld      d,0
 
                add     hl,de
 
                ld      (TRD_5E0A),hl
 
                jp      REWRITE_9SEC                    ; перезапись 9 сектора
 
 
 
;===============FREE SPACE 1============
 
                include virtual.a80
 
                include extend.a80
 
                include raznoe.a80
 
                include patch.a80
 
                include hc_resident.a80                 ; для резидента HONEY COMANDER
 
;=======END OF FREE SPACE 1=============
 
 
 
                TITLE "evo-dos.a80"
 
 
 
        DUPL 0X1018-$,0XFF
 
COM_STAR        call    SET_AND_PUT
 
                call    EXIT_IF_SINTAX
 
                call    CP_ON_STKBOT
 
                ld      a,(de)
 
                call    NUMDSK2BYTE
 
                ld      (TRD_5D19),a                    ; дисковод по умолчанию
 
                call    COM_01                          ; настройка на дисковод
 
                jp      ERR_OK
 
 
 
; прием расширения файла
 
INP_EXTFILENAME ld      b,"C"
 
                ld      a,(TRD_5CD6)                    ; 0xFF - команда принята синтаксическим анализатором
 
                or      a
 
                jr      nz,loc_104D
 
                call    GET_SYMSTR
 
                cp      __CODE
 
                ld      b,"C"
 
                jr      z,loc_104D
 
                cp      __DATA
 
                ld      b,"D"
 
                jr      z,loc_104D
 
                cp      "#"
 
                ld      b,"#"
 
                jr      z,loc_104D
 
                ld      b,"B"
 
loc_104D        ld      hl,TRD_5CE5                     ; расширение файла
 
                ld      (hl),b
 
                ret
 
 
 
; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
 
GET_KEYS        di
 
                push    hl
 
                push    bc
 
                push    de
 
loc_1056        rst     0x20
 
                dw      0x028e                          ; сканирование клавиатуры
 
                ld      c,0
 
                jr      nz,loc_1056
 
                rst     0x20 
 
                dw      0x031e                          ; проверка значения нажатой клавиши
 
                jr      nc,loc_1056
 
                dec     d
 
                ld      e,a
 
                rst     0x20
 
                dw      0x0333                          ; декодирование клавиатуры
 
                pop     de
 
                pop     bc
 
                pop     hl
 
                and     0xdf
 
                ei
 
                ret
 
 
 
; рисование цветных линий заставки доса
 
OUT_COLOR_LINE  ld      hl,ZASTV_ATR
 
                ld      b,0x0a
 
loc_1073        ld      (hl),7
 
                inc     hl
 
                djnz    loc_1073
 
                ld      (hl),2
 
                inc     hl
 
                ld      (hl),0x16
 
                inc     hl
 
                ld      (hl),0x34
 
                inc     hl
 
                ld      (hl),0x25
 
                inc     hl
 
                ld      (hl),0x28
 
                inc     hl
 
                ld      (hl),7
 
                ld      hl,ZASTV_PIX
 
                ld      b,8
 
                xor     a
 
loc_108F        push    bc
 
                scf
 
                rla
 
                push    hl
 
                push    af
 
                ld      b,5
 
loc_1096        inc     hl
 
                ld      (hl),a
 
                djnz    loc_1096
 
                pop     af
 
                pop     hl
 
                pop     bc
 
                ld      de,0x100
 
                add     hl,de
 
                djnz    loc_108F
 
                ret
 
 
 
                ret
 
 
 
TXT_DELFILES    db " Del."
 
TXT_FILE_S_     DZ " File(s)"
 
TXT_TITLE       DC "Title: "
 
TXT_DISKDRIVE   DZ "\x17\x11 Disk Drive: "
 
TXT_1SPACE      DZ "\x17\x10 "
 
TXT_40TRK_SS    DZ "\x17\x10 40 Track S. Side"
 
TXT_80TRK_SS    DZ "\x17\x10 80 Track S. Side"
 
TXT_40TRK_DS    DZ "\x17\x10 40 Track D. Side"
 
TXT_80TRK_DS    DZ "\x17\x10 80 Track D. Side"
 
TXT_FREESECS    DZ "\x17\x10 Free Sector "
 
TXT_FILENAME    DZ "\r\r  File Name    Start Length Line"
 
 
 
CREATE_222BYTES ld      hl,(WORKSP)
 
                ld      (TRD_5CCF),hl                   ; временное сохранение WORK_SP
 
                ld      bc,0x222
 
                jp      CREATE_FREERAM
 
 
 
; печать числа из регистра HL в десятичном виде
 
PRINT_HL_CHISLO xor     a
 
                ld      de,10000
 
loc_1161        sbc     hl,de
 
                jr      c,loc_1168
 
                inc     a
 
                jr      loc_1161
 
 
 
loc_1168        add     a,"0"
 
                call    PRINT_A_CHISLO
 
                add     hl,de
 
                xor     a
 
                ld      de,1000
 
loc_1172        sbc     hl,de
 
                jr      c,loc_1179
 
                inc     a
 
                jr      loc_1172
 
 
 
loc_1179        add     a,"0"
 
                call    PRINT_A_CHISLO
 
                add     hl,de
 
                xor     a
 
                ld      de,100
 
loc_1183        sbc     hl,de
 
                jr      c,loc_118A
 
                inc     a
 
                jr      loc_1183
 
 
 
loc_118A        add     a,"0"
 
                call    PRINT_A_CHISLO
 
                add     hl,de
 
                xor     a
 
                ld      de,10
 
loc_1194        sbc     hl,de
 
                jr      c,loc_119B
 
                inc     a
 
                jr      loc_1194
 
 
 
loc_119B        add     a,"0"
 
                call    PRINT_A_CHISLO
 
                add     hl,de
 
                ld      a,l
 
                add     a,"0"
 
                call    PRINT_A_CHISLO
 
                ret
 
 
 
PRINT_A_CHISLO  push    hl
 
                push    de
 
                call    PRINT_A_
 
                pop     de
 
                pop     hl
 
                ret
 
 
 
FIND_END_BUFDIR push    hl
 
                push    bc
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                ld      hl,TRD_5CF6                     ; дисковод для временной операции
 
                cp      (hl)
 
                call    nz,COM_01                       ; настройка на дисковод
 
                pop     bc
 
                pop     hl
 
                call    CP_END_BUF
 
                ld      a,(hl)
 
                or      a
 
                jp      z,END_COMAND
 
                cp      1
 
                call    z,ADD_10
 
                ret     nz
 
                jr      FIND_END_BUFDIR
 
 
 
LIST            call    CP_SECOND_SYM
 
                ld      bc,2
 
                ld      (TRD_5CDB),bc
 
                jr      z,loc_1205
 
                cp      "#"
 
                jr      nz,LIST4CODES
 
                ld      (CH_ADD),hl
 
                call    SET_NUM_CHAN
 
                call    GET_SYMSTR
 
                cp      0x0d
 
                jr      z,loc_1205
 
                cp      ","
 
                jp      nz,SINTAX_ERROR
 
                call    GET_NEXT_SYM
 
                call    PUT_NUMDSK_STK
 
                jr      loc_11FB
 
 
 
LIST4CODES      call    SET_AND_PUT
 
loc_11FB        call    EXIT_IF_SINTAX
 
                call    GET_STKBOT_
 
                ex      de,hl
 
                call    SETUP_DSK
 
loc_1205        call    EXIT_IF_SINTAX
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                ld      (TRD_5CF9),a                    ; дисковод при операции с 2 файлами
 
                call    COM_18                          ; настройка на дискету
 
                ld      a,(TRD_5CDB)
 
                cp      2
 
                push    af
 
                call    z,CLEAR_SCREEN                  ; очистка основного экрана
 
                pop     af
 
                cp      0x11
 
                jp      nc,SINTAX_ERROR
 
                call    OPENSTREAM
 
                ld      a,0xff
 
                ld      (TRD_5CF8),a                    ; дисковод при операции с 2 файлами
 
                call    CREATE_222BYTES
 
                ld      hl,TRD_5E06
 
                ld      de,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,0X20
 
                ldir
 
                call    RD_0SEC2BUF                     ; чтение сектора 0 каталога
 
                ld      hl,TRD_5D25
 
                push    hl
 
loc_123E        ld      hl,TXT_TITLE                    ; "TITLE:"
 
                push    bc
 
                rst     0x18
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,0x14
 
                add     hl,bc
 
                rst     0x18
 
                ld      hl,TXT_DISKDRIVE
 
                rst     0x18
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                add     a,"A"
 
                call    PRINT_A_
 
                call    PRINT_0D
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,3
 
                add     hl,bc
 
                ld      a,(hl)
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,0x13
 
                add     hl,bc
 
                sub     (hl)
 
                push    hl
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_DELFILES+5
 
                rst     0x18
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,2
 
                add     hl,bc
 
                ld      a,(hl)
 
                ld      hl,TXT_40TRK_SS
 
                cp      0x19
 
                jr      z,loc_1292
 
                ld      hl,TXT_80TRK_SS
 
                cp      0x18
 
                jr      z,loc_1292
 
                ld      hl,TXT_40TRK_DS
 
                cp      0x17
 
                jr      z,loc_1292
 
                ld      hl,TXT_80TRK_DS
 
loc_1292        rst     0x18
 
                pop     hl
 
                ld      c,(hl)
 
                call    CONV2_2BYTES
 
                ld      hl,TXT_DELFILES                 ; " DEL. FILE(S)"
 
                rst     0x18
 
                ld      hl,TXT_FREESECS
 
                rst     0x18
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,4
 
                add     hl,bc
 
                ld      c,(hl)
 
                inc     hl
 
                ld      b,(hl)
 
                call    PRINT_CHISLO                    ; печать числа
 
                ld      hl,TXT_FILENAME
 
                rst     0x18
 
                pop     bc
 
                pop     hl
 
                ld      b,0x10                          ; сколько имен файлов за проход вывести на экран
 
loc_12B5        call    FIND_END_BUFDIR                 ; проверка на окончание директории
 
                call    PRINT_0D                        ; перевод строки
 
                push    bc
 
                push    hl
 
                call    PRINT_FILENAME                  ; печать имени файла
 
                ld      bc,0x0d
 
                pop     hl
 
                push    hl
 
                add     hl,bc
 
                ld      c,(hl)
 
                push    bc
 
                ld      a,c
 
                ld      b,2
 
                cp      10
 
                jr      c,loc_12D0
 
                dec     b
 
loc_12D0        cp      100
 
                jr      nc,loc_12D9
 
loc_12D4        ld      a," "
 
                rst     0x10
 
                djnz    loc_12D4
 
loc_12D9        pop     bc
 
                call    PRINT_CHISLO                    ; печать числа
 
                ld      hl,TXT_1SPACE
 
                rst     0x18
 
                pop     hl
 
                push    hl
 
                ld      bc,9
 
                add     hl,bc
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                push    hl
 
                ex      de,hl
 
                call    PRINT_HL_CHISLO
 
                ld      a," "
 
                call    PRINT_A_
 
                pop     hl
 
                inc     hl
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ex      de,hl
 
                call    PRINT_HL_CHISLO
 
                pop     hl
 
                push    hl
 
                ld      bc,8
 
                add     hl,bc
 
                ld      a,(hl)
 
                cp      "B"
 
                call    z,PRN_ADR_ASTART
 
                pop     hl
 
                pop     bc
 
                ld      de,0x10
 
                add     hl,de
 
                djnz    loc_12B5
 
                push    hl
 
                call    PRINT_0D
 
                call    PRINT_0D
 
                jp      loc_123E
 
 
 
PRN_ADR_ASTART  ld      bc,5
 
                add     hl,bc
 
                ld      b,(hl)
 
                inc     hl
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                dec     b
 
                jr      z,loc_1335
 
                dec     b
 
                jr      z,loc_1335
 
                ld      a,0x10
 
loc_132C        inc     e
 
                cp      e
 
                jr      nz,loc_1333
 
                ld      e,0
 
                inc     d
 
loc_1333        djnz    loc_132C
 
loc_1335        ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,0x21
 
                add     hl,bc
 
                ld      b,2
 
                push    hl
 
                call    COM_05                          ; чтение секторов
 
                ld      a,0x80
 
                pop     hl
 
                ld      bc,0x200
 
                cpir
 
                ld      a,(hl)
 
                cp      0xaa
 
                ret     nz
 
                inc     hl
 
                ld      c,(hl)
 
                inc     hl
 
                ld      b,(hl)
 
                ld      a,b
 
                or      c
 
                ret     z
 
                push    bc
 
                ld      a," "
 
                call    PRINT_A_
 
                pop     bc
 
                call    PRINT_CHISLO                    ; печать числа
 
                ret
 
 
 
COPY_S          call    SET_CH_ADD
 
                call    GET_NEXT_SYM
 
                call    PUT_NUMDSK_STK
 
                call    EXIT_IF_SINTAX
 
                call    RESERVED_RAM
 
                ld      hl,TXT_INS_SRC                  ; "INSERT SOURCE DISK THEN PRESS Y"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
loc_1375        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                jr      nz,loc_1375
 
                call    CLEAR_DOWN_SCR                  ; очистка нижней части экрана
 
                call    INP_EXTFILENAME                 ; прием расширения файла
 
                call    SET_CP_FILENAME
 
                jp      nz,ERR_NOFILES
 
                call    COPY_ON1DSK
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "#"
 
                jp      nz,ERR_OK
 
loc_1393        ld      a,0x0a
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                inc     (hl)
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                ld      hl,TXT_INS_SRC                  ; "INSERT SOURCE DISK THEN PRESS Y"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
loc_13A5        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                jr      nz,loc_13A5
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jp      nz,ERR_OK
 
                call    COPY_ON1DSK
 
                jr      loc_1393
 
 
 
COPY_ON1DSK     call    RDHEAD_FILENAME                 ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
 
                ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      de,TRD_5CED                     ; номер первого трека файла
 
                ld      bc,7
 
                ldir
 
                ld      a,(TRD_5CF1)
 
                ld      (TRD_5D10),a                    ; старший байт ошибки
 
                call    COM_18                          ; настройка на дискету
 
                call    GET_TYPE_DISK
 
                ld      (TRD_5CD9),a                    ; промежуточная длина для <B> и <C>
 
                ld      a,0xff
 
                ld      (TRD_5D21),a
 
                call    COPY_ON1DSK_
 
                ld      hl,(TRD_5D1F)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5E06),hl
 
                ld      hl,TRD_5E09
 
                inc     (hl)
 
                ld      c,(hl)
 
                dec     c
 
                ld      b,0
 
                push    bc
 
                ld      de,9
 
                ld      (TRD_5CF4),de
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                pop     bc
 
                call    SETHEADFILENAME
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                ret
 
 
 
CP_FREESEC      xor     a
 
                ld      (TRD_5D21),a
 
                call    COM_18                          ; настройка на дискету
 
                call    GET_TYPE_DISK
 
                ld      (TRD_5CDA),a
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jp      z,FILE_EXISTS
 
                call    READ_9SEC                       ; чтение 9 сектора
 
                ld      a,(TRD_5E09)
 
                cp      0x80
 
                jp      z,ERR_DIRFULL
 
                ld      hl,TRD_5CED                     ; номер первого трека файла
 
                ld      de,TRD_5CE6                     ; ДЛЯ <C> - стартовый адрес, для <B> - длина программы
 
                ld      bc,7
 
                ldir
 
                call    READ_9SEC                       ; чтение 9 сектора
 
                ld      a,(TRD_5D10)                    ; старший байт ошибки
 
                ld      (TRD_5CEA),a                    ; длина файла в секторах
 
                ld      de,(TRD_5CEA)                   ; длина файла в секторах
 
                ld      d,0
 
                or      a
 
                ld      hl,(TRD_5E0A)
 
                sbc     hl,de
 
                jp      c,loc_1C45
 
                ld      (TRD_5E0A),hl
 
                ld      hl,(TRD_5E06)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                ld      (TRD_5D1F),hl
 
                ret
 
 
 
COPY_ON1DSK_    ld      a,(TRD_5CF1)
 
                or      a
 
                ret     z
 
                ld      a,(TRD_5D21)
 
                or      a
 
                jr      nz,loc_146F
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                ld      hl,TXT_INS_SRC                  ; "INSERT SOURCE DISK THEN PRESS Y"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
loc_1465        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                jr      nz,loc_1465
 
                call    CLEAR_DOWN_SCR                  ; очистка нижней части экрана
 
loc_146F        ld      a,(TRD_5CF1)
 
                or      a
 
                ret     z
 
                push    hl
 
                ld      hl,TRD_5D23
 
                sub     (hl)
 
                pop     hl
 
                jr      nc,loc_14CB
 
                ld      a,(TRD_5CF1)
 
                ld      b,a
 
                xor     a
 
                ld      (TRD_5CF1),a
 
loc_1484        push    bc
 
                ld      (TRD_5CCE),a                    ; 0x00 - тение сектора, 0xFF - запись сектора
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                push    hl
 
                ld      de,(TRD_5CF2)
 
                call    SET_DSK_SOURCE
 
                call    COM_05                          ; ЧТЕНИЕ СЕКТОРОВ
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CF2),hl
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                ld      hl,TXT_INS_DEST                 ; "INSERT DESTINATION DISK"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
loc_14A5        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                jr      nz,loc_14A5
 
                call    CLEAR_DOWN_SCR                  ; очистка нижней части экрана
 
                ld      a,(TRD_5D21)
 
                or      a
 
                call    nz,CP_FREESEC
 
                pop     hl
 
                pop     bc
 
                ld      de,(TRD_5CEB)                   ; номер первого сектора файла
 
                call    SETUP_DSK_DEST
 
                call    COM_06
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                jp      COPY_ON1DSK_
 
 
 
loc_14CB        ld      (TRD_5CF1),a
 
                push    hl
 
                ld      hl,TRD_5D23
 
                ld      b,(hl)
 
                pop     hl
 
                xor     a
 
                jp      loc_1484
 
 
 
SET_DSK_SOURCE  push    hl
 
                push    de
 
                call    GET_TYPE_DISK
 
                ld      a,(TRD_5CD9)                    ; промежуточная длина для <B> и <C>
 
                ld      (hl),a
 
                pop     de
 
                pop     hl
 
                ret
 
 
 
SETUP_DSK_DEST  push    hl
 
                push    de
 
                call    GET_TYPE_DISK
 
                ld      a,(TRD_5CDA)
 
                ld      (hl),a
 
                pop     de
 
                pop     hl
 
                ret
 
 
 
CP_FREE_DEST    xor     a
 
                ld      (TRD_5D21),a
 
                call    COM_18                          ; настройка на дискету
 
                call    GET_TYPE_DISK
 
                ld      (TRD_5CDA),a
 
                ld      a,(TRD_5E08)
 
                ld      (TRD_5CE7),a                    ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      hl,640
 
                cp      0x19
 
                jr      z,SAVE_SECS_DEST
 
                ld      hl,1280
 
                cp      0x18
 
                jr      z,SAVE_SECS_DEST
 
                cp      0x17
 
                jr      z,SAVE_SECS_DEST
 
                ld      hl,2560
 
                cp      0x16
 
                jr      z,SAVE_SECS_DEST
 
                jp      SINTAX_ERROR
 
 
 
SAVE_SECS_DEST  ld      (TRD_5CDD),hl                   ; имя файла
 
                ld      bc,(TRD_5CDF)
 
                sbc     hl,bc
 
                jp      c,loc_1C45
 
                ret
 
 
 
COPY_B          call    EXIT_IF_SINTAX
 
                call    RESERVED_RAM
 
                ld      hl,TXT_BACKUPDISK               ; "BACKUP DISK"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
                ld      hl,TXT_INS_SRC                  ; "INSERT SOURCE DISK THEN PRESS Y"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
loc_153E        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                jr      nz,loc_153E
 
                call    CLEAR_DOWN_SCR                  ; очистка нижней части экрана
 
                ld      a,0xff
 
                ld      (TRD_5D21),a
 
                call    COM_18                          ; настройка на дискету
 
                call    GET_TYPE_DISK
 
                ld      (TRD_5CD9),a                    ; промежуточная длина для <B> и <C>
 
                ld      a,(TRD_5E08)
 
                cp      0x19
 
                ld      hl,640
 
                jr      z,loc_1575
 
                ld      hl,1280
 
                cp      0x18
 
                jr      z,loc_1575
 
                cp      0x17
 
                jr      z,loc_1575
 
                ld      hl,2560
 
                cp      0x16
 
                jr      z,loc_1575
 
                jp      SINTAX_ERROR
 
 
 
loc_1575        ld      bc,(TRD_5E0A)
 
                sbc     hl,bc
 
                ld      (TRD_5CE5),hl                   ; расширение файла
 
                ld      (TRD_5CDF),hl
 
                ld      hl,0
 
                ld      (TRD_5CE1),hl
 
                ld      (TRD_5CE3),hl
 
                call    COPY_SECTORS
 
                call    COM_18                          ; НАСТРОЙКА НА ДИСКЕТУ
 
                ld      a,(TRD_5CE7)                    ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      (TRD_5E08),a
 
                ld      hl,(TRD_5CDD)                   ; имя файла
 
                ld      bc,(TRD_5CDF)
 
                sbc     hl,bc
 
                ld      (TRD_5E0A),hl
 
                call    SETUP_DSK_DEST
 
                ld      de,9
 
                ld      (TRD_5CF4),de
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                JP      ERR_OK
 
 
 
CP_COPY_SECS    ld      hl,(TRD_5CE5)                   ; расширение файла
 
                ld      a,h
 
                or      l
 
                ret
 
 
 
COPY_SECTORS    call    CP_COPY_SECS
 
                ret     z
 
                ld      a,(TRD_5D21)
 
                or      a
 
                jr      nz,loc_15DB
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                ld      hl,TXT_BACKUPDISK               ; "BACKUP DISK"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
                ld      hl,TXT_INS_SRC                  ; "INSERT SOURCE DISK THEN PRESS Y"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
loc_15D1        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                jr      nz,loc_15D1
 
                call    CLEAR_DOWN_SCR                  ; очистка нижней части экрана
 
loc_15DB        call    CP_COPY_SECS
 
                ret     z
 
                push    bc
 
                push    hl
 
                ld      hl,TRD_5D23
 
                ld      c,(hl)
 
                ld      b,0
 
                pop     hl
 
                sbc     hl,bc
 
                pop     bc
 
                jp      nc,loc_1644
 
                ld      bc,(TRD_5CE5)                   ; расширение файла
 
                ld      hl,0
 
                ld      (TRD_5CE5),hl                   ; расширение файла
 
loc_15F8        push    bc
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                push    hl
 
                call    SET_DSK_SOURCE
 
                ld      de,(TRD_5CE1)
 
                ld      b,c
 
                call    COM_05                          ; чтение секторов
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CE1),hl
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                ld      hl,TXT_BACKUPDISK               ; "BACKUP DISK"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
                ld      hl,TXT_INS_DEST                 ; "INSERT DESTINATION DISK"
 
                call    PRINT_MSG                       ; печать текстового сообщения
 
loc_161D        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "Y"
 
                jr      nz,loc_161D
 
                call    CLEAR_DOWN_SCR                  ; очистка нижней части экрана
 
                ld      a,(TRD_5D21)
 
                or      a
 
                call    nz,CP_FREE_DEST
 
                pop     hl
 
                pop     bc
 
                ld      de,(TRD_5CE3)
 
                ld      b,c
 
                call    SETUP_DSK_DEST
 
                call    COM_06
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CE3),hl
 
                jp      COPY_SECTORS
 
 
 
loc_1644        ld      (TRD_5CE5),hl                   ; расширение файла
 
                push    hl
 
                ld      hl,TRD_5D23
 
                ld      c,(hl)
 
                ld      b,0
 
                pop     hl
 
                xor     a
 
                jp      loc_15F8
 
 
 
CP_ERASED_FILE  call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                ld      a,(TRD_5CDD)                    ; имя файла
 
                cp      1
 
                ret
 
 
 
; считывание описателя в буфер 0x5CDD
 
COM_08          ld      c,a
 
; чтение описателя файла
 
RDHEAD_FILENAME xor     a
 
loc_165E        push    bc
 
                call    RD_HEAD_COPY
 
                pop     bc
 
                ret
 
 
 
; запись описателя файла на диск
 
COM_09          ld      c,a
 
                call    SETHEADFILENAME
 
                jp      REWRITE_9SEC                    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
 
 
 
SETHEADFILENAME ld      a,0xff
 
                jr      loc_165E
 
 
 
RESERVED_RAM    ld      a,0xff
 
                ld      (TRD_5D0E),a                    ; 0xFE - работает BASIC, иначе TR-DOS
 
                call    CP_FREE_SECS
 
                ld      hl,(WORKSP)
 
                ld      (TRD_5CCF),hl                   ; временное сохранение WORK_SP
 
                jp      CREATE_FREERAM
 
 
 
CP_FREE_SECS    rst     0x20
 
                dw      0x1f1a                          ; проверка размера свободной памяти
 
                ld      hl,0xffff
 
                sbc     hl,bc
 
                ld      a,h
 
                cp      0x10
 
                jr      nc,loc_168F
 
                ld      a,0x11
 
loc_168F        dec     a
 
                ld      (TRD_5D23),a
 
                ld      b,a
 
                ld      c,0
 
                ret
 
 
 
ADD_FILESIZE    ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                LD      (TRD_5CDB),hl
 
                ld      de,(TRD_5CEA)                   ; длина файла в секторах
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      d,0
 
                add     hl,de
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ret
 
 
 
MOVE            call    EXIT_IF_SINTAX
 
                call    RESERVED_RAM
 
                call    COM_18                          ; настройка на дискету
 
                ld      a,(TRD_5E19)
 
                or      a
 
                jp      z,ERR_OK
 
                ld      hl,0
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ld      c,0xff
 
loc_16C3        inc     c
 
                call    CP_ERASED_FILE
 
                jr      nz,loc_16C3
 
                ld      a,c
 
                ld      (TRD_5CD4),a
 
                ld      hl,(TRD_5CEB)                   ; номер первого сектора файла
 
                ld      (TRD_5CD5),hl
 
                call    ADD_FILESIZE
 
loc_16D6        inc     c
 
                call    CP_ERASED_FILE
 
                jr      z,loc_16D6
 
                cp      0
 
                jp      nz,loc_1710
 
                ld      a,(TRD_5CD4)
 
                ld      c,a
 
loc_16E5        inc     c
 
                call    CP_ERASED_FILE
 
                cp      0
 
                jr      z,REINIT_9SEC
 
                xor     a
 
                ld      (TRD_5CDD),a                    ; имя файла
 
                call    WRHEAD_FILENAME                 ; сохранение описателя файла
 
                call    ADD_FILESIZE
 
                jr      loc_16E5
 
 
 
        DUPL 0X1710-$,0XFF
 
loc_1710        ld      a,(TRD_5CEA)                    ; длина файла в секторах
 
                ld      (TRD_5CD3),a
 
                ld      (TRD_5CD1),a
 
                ld      hl,(TRD_5CEB)                   ; номер первого сектора файла
 
                ld      (TRD_5CD5),hl
 
                push    bc
 
                call    MOVE_FILE
 
                pop     bc
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CD5),hl
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                xor     a
 
                ld      (TRD_5CEA),a                    ; длина файла в секторах
 
                ld      a,(TRD_5CDD)                    ; имя файла
 
                push    af
 
                ld      a,1
 
                ld      (TRD_5CDD),a                    ; имя файла
 
                call    WRHEAD_FILENAME                 ; сохранение описателя файла
 
                pop     af
 
                ld      (TRD_5CDD),a                    ; имя файла
 
                ld      a,(TRD_5CD4)
 
                ld      c,a
 
                ld      hl,(TRD_5CDB)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                ld      a,(TRD_5CD1)
 
                ld      (TRD_5CEA),a                    ; длина файла в секторах
 
                call    WRHEAD_FILENAME                 ; сохранение описателя файла
 
                ld      a,(TRD_5CD4)
 
                inc     a
 
                ld      c,a
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                ld      hl,(TRD_5CD5)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                call    WRHEAD_FILENAME                 ; сохранение описателя файла
 
                ld      a,(TRD_5CD4)
 
                ld      c,a
 
                jp      loc_16C3
 
 
 
REINIT_9SEC     ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      bc,0x1000
 
                call    DEL_WORKRAM
 
                call    READ_9SEC                       ; чтение 9 сектора
 
                ld      hl,(TRD_5E0A)
 
                ld      de,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                add     hl,de
 
                ld      (TRD_5E0A),hl
 
                ld      a,(TRD_5E09)
 
                ld      hl,TRD_5E19
 
                sub     (hl)
 
                ld      (TRD_5E09),a
 
                ld      (hl),0
 
                ld      hl,(TRD_5CD5)
 
                ld      (TRD_5E06),hl
 
                push    af
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                pop     af
 
                ld      c,a
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                xor     a
 
                ld      (TRD_5CDD),a                    ; имя файла
 
                jp      loc_569
 
 
 
MOVE_FILE       ld      a,(TRD_5CD3)
 
                or      a
 
                ret     z
 
                push    hl
 
                ld      hl,TRD_5D23
 
                sub     (hl)
 
                pop     hl
 
                jr      nc,loc_17DD
 
                ld      a,(TRD_5CD3)
 
                ld      b,a
 
                xor     a
 
                ld      (TRD_5CD3),a
 
loc_17BA        push    bc
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                push    hl
 
                ld      de,(TRD_5CD5)
 
                call    COM_05                          ; чтение секторов
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CD5),hl
 
                pop     hl
 
                pop     bc
 
                ld      de,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                call    COM_06
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                jr      MOVE_FILE
 
 
 
loc_17DD        ld      (TRD_5CD3),a
 
                push    hl
 
                ld      hl,TRD_5D23
 
                ld      b,(hl)
 
                pop     hl
 
                xor     a
 
                jr      loc_17BA
 
 
 
RD_HEAD_COPY    push    af
 
                ld      hl,TRD_5CCC                     ; текущий номер сектора при чтении каталога
 
                ld      (hl),0
 
                ld      a,c
 
loc_17F0        sub     0x10
 
                jr      c,loc_17F7
 
                inc     (hl)
 
                jr      loc_17F0
 
 
 
loc_17F7        add     a,0x10
 
                ld      c,a
 
                push    bc
 
                call    READ_NUM_SEC                    ; чтение сектора каталога по номеру
 
                pop     bc
 
                pop     af
 
                call    FIND_HEAD_BUF
 
                ld      de,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                or      a
 
                jr      z,loc_180D
 
                ex      de,hl
 
loc_180D        ldir
 
                ret
 
 
 
VERIFY          ld      a,0xff
 
                ld      (TRD_5CF9),a                    ; дисковод при операции с 2 файлами
 
LOAD            call    ZERO2HIGH_ERR
 
loc_1818        call    LOAD_FILE
 
                call    EXIT_IF_SINTAX
 
                ld      a,0xff
 
                ld      (TRD_5D10),a                    ; старший байт ошибки
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                jp      z,ERR_OK
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "B"
 
                jp      z,WORK4AUTORUN                  ; обработка строки автозапуска бейсика
 
                jp      ERR_OK
 
 
 
LOAD_FILE       call    GET_PARAMS
 
                call    EXIT_IF_SINTAX
 
                call    CP_PARAMS
 
                jp      RD_FILE
 
 
 
GET_LOAD_CODE   ld      hl,(CH_ADD)
 
                inc     hl
 
                ld      a,(hl)
 
                cp      0x0d
 
                ret     z
 
                ld      a,1
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                call    INPUT_PARAMS
 
ZERO2HIGH_ERR   xor     a
 
                ld      (TRD_5D10),a                    ; старший байт ошибки
 
                ret
 
 
 
sub_1857        call    INP_EXTFILENAME                 ; прием расширения файла
 
                ld      a,"B"
 
                cp      b
 
                jr      nz,loc_1866
 
                ld      hl,(CH_ADD)
 
                dec     hl
 
                ld      (CH_ADD),hl
 
loc_1866        call    INPUT_PARAMS
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,(TRD_5CDB)
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                xor     a
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ret
 
 
 
GET_PARAMS      call    CP_SECOND_SYM
 
                jp      z,loc_27B
 
                call    SET_AND_PUT
 
                call    CP_HIGH_ERR
 
                call    nz,sub_1857
 
                call    GET_SYMSTR
 
                cp      __CODE
 
                call    z,GET_LOAD_CODE
 
                cp      __DATA
 
                push    af
 
                call    CP_HIGH_ERR
 
                call    z,INP_EXTFILENAME               ; прием расширения файла
 
                pop     af
 
                call    z,READ_MASSIV
 
                call    EXIT_IF_SINTAX
 
                call    FIND_FILE                       ; поиск файла по имени
 
FIND_RD_HEAD    jp      nz,ERR_NOFILES
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                ret
 
 
 
CP_PARAMS       ld      a,(TRD_5CD6)
 
                or      a
 
                ld      hl,(TRD_5CE6)                   ; адрес загрузки из описателя файла
 
                jr      z,loc_18B7
 
                ld      hl,(TRD_5CD9)                   ; адрес загрузки из командной строки
 
loc_18B7        CALL ADR_START_COM
 
                NOP
 
                cp      3
 
                ld      a,(TRD_5CEA)                    ; длина файла в секторах
 
                push    de
 
                ld      de,(TRD_5CE8)                   ; длина программы из описателя
 
                jr      nz,loc_18CB
 
                ld      de,(TRD_5CDB)                   ; длина файла для загрузки изкомандной строки
 
loc_18CB        ld      b,a
 
                ld      (TRD_5CDB),de
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "C"
 
                ld      a,b
 
                jr      nz,loc_18FD
 
                ld      a,b
 
                cp      d
 
                jr      z,loc_18F6
 
                dec     a
 
                cp      d
 
                ld      a,b
 
                jr      z,loc_18F6
 
                ld      a,(TRD_5CD6)                    ; 0xFF - команда принята синтаксическим анализатором
 
                cp      3
 
                ld      a,b
 
                jr      z,loc_18F6
 
                xor     a
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ld      d,b
 
                ld      e,0
 
                ld      (TRD_5CDB),de
 
                jr      loc_18F9
 
 
 
loc_18F6        call    LOAD_FULLFILE
 
loc_18F9        ld      a,b
 
                call    KOLWO_SECS
 
loc_18FD        ld      b,a
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "C"
 
                pop     de
 
                ret     z
 
                push    de
 
                cp      "B"
 
                push    af
 
                call    z,LOAD4BASIC
 
                pop     af
 
                cp      "D"
 
                call    z,LOAD4DATA
 
                call    LOAD_FULLFILE
 
                ld      a,(TRD_5CDC)
 
                ld b,a
 
                pop de
 
                ret
 
 
 
LOAD_FULLFILE   ld      a,3
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ret
 
 
 
RD_FILE         call    CP_HIGH_ERR
 
                jr      z,loc_192D
 
                push    af
 
                call    NUM_SEC_FILE
 
                pop     af
 
                cp      0xff
 
loc_192D        push    af
 
                call    z,RD_SECTORS
 
                pop     af
 
                jr      z,loc_1937
 
                jp      COM_06
 
 
 
loc_1937        ld      a,(TRD_5CD6)                    ; 0xFF - команда принята синтаксическим анализатором
 
                cp      3
 
                call    z,RD_OR_VERIFY
 
                ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                dec     hl
 
                ld      (hl),0x80
 
                ret
 
 
 
RD_OR_VERIFY    ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                jp      nz,LOAD_END_FILE
 
                ld      a,(TRD_5CDB)
 
                or      a
 
                ret     z
 
                ld      c,a
 
                ld      b,1
 
                ld      de,(TRD_5CF4)
 
                jr      loc_196A
 
 
 
RD_SECTORS      ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                jp      nz,COM_05                       ; чтение секторов
 
                ld      (TRD_5CF4),de
 
                ld      c,0
 
loc_196A        ld      a,b
 
                or      a
 
                ret     z
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (TRD_5CD9),de                   ; промежуточная длина для <B> и <C>
 
loc_1974        push    bc
 
                ld      b,1
 
                ld      de,(TRD_5CD9)                   ; промежуточная длина ДЛЯ <B> и <C>
 
                ld      hl,TRD_5D25
 
                call    COM_05                          ; чтение секторов
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                pop     bc
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      de,TRD_5D25
 
loc_198E        ld      a,(de)
 
                cp      (hl)
 
                jr      nz,loc_199D
 
                inc     hl
 
                inc     de
 
                dec     c
 
                jr      nz,loc_198E
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                djnz    loc_1974
 
                ret
 
 
 
loc_199D        ld      hl,TXT_VERIFYERR                ; "VERIFY ERROR."
 
                ld      a,0x0d
 
                jp      PRINT_TXTERR
 
 
 
PEEK            ld      a,0xff
 
                jr      loc_19AB
 
 
 
POKE            ld      a,0xee
 
loc_19AB        ld      (TRD_5D10),a                    ; старший байт ошибки
 
                jp      loc_1818
 
 
 
MERGE           ld      a,0xff
 
                ld      (TRD_5D1F),a
 
                call    GET_PARAMS
 
                call    EXIT_IF_SINTAX
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "B"
 
                jp      nz,SINTAX_ERROR
 
                ld      bc,(TRD_5CE6)                   ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      (TRD_5CDB),bc
 
                push    bc
 
                inc     bc
 
                rst     0x20
 
                dw      0x30                            ; создание свободного места
 
                ld      (hl),0x80
 
                ex      de,hl
 
                pop     de
 
                push    hl
 
                ld      de,(TRD_5CEB)                   ; номер первого сектора файла
 
                call    LOAD_FULLFILE
 
                ld      a,(TRD_5CDC)
 
                ld      b,a
 
                call    ZERO2HIGH_ERR
 
                call    RD_FILE
 
                pop     hl
 
                ld      de,(PROG)
 
                rst     0x20
 
                dw      0x08d2                          ; работа со строками программы на бейсике
 
                jp      ERR_OK
 
 
 
CP_FREE4PROG    ex      de,hl
 
                scf
 
                sbc     hl,de
 
                ret     c
 
                ld      de,0x0a
 
                add     hl,de
 
                ld      b,h
 
                ld      c,l
 
CP_FREE_RAM     rst     0x20 
 
                dw      0x1f05                          ; проверка свободной памяти
 
                ret
 
 
 
LOAD4BASIC      ld      de,(PROG)
 
                ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                dec     hl
 
                push    hl
 
                push    de
 
                sbc     hl,de
 
                ld      de,(TRD_5CE6)                   ; для <C> - стартовый адрес, для <B> - длина программы
 
                push    de
 
                push    hl
 
                ld      hl,0
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                jr      z,loc_1A20
 
                ld      hl,5
 
loc_1A20        add     hl,de
 
                ld      (TRD_5CDB),hl
 
                pop     hl
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                jr      nz,loc_1A31
 
                pop     de
 
                pop     de
 
                pop     hl
 
                jr      loc_1A48
 
 
 
loc_1A31        call    CP_FREE4PROG
 
                pop     bc
 
                pop     de
 
                pop     hl
 
                push    bc
 
                rst     0x20
 
                dw      0x19e5                          ; восстановление
 
                pop     bc
 
                call    RESERV_RAM
 
                inc     hl
 
                ld      bc,(TRD_5CE8)                   ; длина программы
 
                add     hl,bc
 
                ld      (VARS),hl
 
loc_1A48        ld      hl,(PROG)
 
                ret
 
 
 
LOAD4DATA       ld      de,(TRD_5CE8)                   ; длина программы
 
                ld      (TRD_5CDB),de
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                ret     z
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                push    hl
 
                call    CP_FREE4PROG
 
                pop     hl
 
                ld      a,h
 
                or      l
 
                jr      z,loc_1A79
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                dec     hl
 
                dec     hl
 
                dec     hl
 
                ld      bc,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                inc     bc
 
                inc     bc
 
                inc     bc
 
                call    DEL_WORKRAM
 
loc_1A79        ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                dec     hl
 
                ld      bc,(TRD_5CE8)                   ; длина программы
 
                push    bc
 
                inc     bc
 
                inc     bc
 
                inc     bc
 
                call    RESERV_RAM
 
                inc     hl
 
                ld      a,(TRD_5CD2)
 
                ld      (hl),a
 
                inc     hl
 
                pop     de
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                inc     hl
 
                ret
 
 
 
NUM_SEC_FILE    ld      a,(TRD_5CD9)                    ; промежуточная длина для <B> и <C>
 
                ld      c,b
 
                ld      b,a
 
                ld      a,c
 
                cp      b
 
                jr      c,loc_1AB6
 
                ld      a,b
 
                or      a
 
                jp      z,SINTAX_ERROR
 
                dec     b
 
                jr      z,loc_1AB0
 
                ld      a,0x10
 
loc_1AA7        inc     e
 
                cp      e
 
                jr      nz,loc_1AAE
 
                ld      e,0
 
                inc     d
 
loc_1AAE        djnz    loc_1AA7
 
loc_1AB0        ld      b,1
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ret
 
 
 
loc_1AB6        ld      hl,TXT_R_O
 
                ld      a,5
 
                jp      PRINT_TXTERR
 
 
 
CP_FILE_FREE    call    FIND_FILE                       ; поиск файла по имени
 
                jp      z,FILE_EXISTS
 
CP_FREE_ON_DSK  call    READ_9SEC                       ; чтение 9 сектора
 
                ld      a,(TRD_5E09)
 
                cp      0x80
 
                jp      z,ERR_DIRFULL
 
                ret
 
 
 
SAVE            call    ZERO2HIGH_ERR
 
                ld      hl,0
 
                ld      (TRD_5CD1),hl
 
                call    SET_AND_PUT
 
                call    GET_SYMSTR
 
                cp      __CODE
 
                jr      z,loc_1B39
 
                cp      __LINE
 
                jr      nz,loc_1AF8
 
                call    SET_NUM_CHAN
 
                call    EXIT_IF_SINTAX
 
                ld      hl,(TRD_5CDB)
 
                ld      (TRD_5CD1),hl
 
                ld      hl,TRD_5CE5                     ; расширение файла
 
                jr      loc_1B1F
 
 
 
loc_1AF8        cp      __SCREENS
 
                jr      nz,loc_1B0D
 
                ld      hl,0x4000
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,0x1b00
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CDB),hl
 
                jr      loc_1B48
 
 
 
loc_1B0D        call    EXIT_IF_SINTAX
 
                call    GET_SYMSTR
 
                ld      hl,TRD_5CE5                     ; расширение файла
 
                cp      __DATA
 
                jr      z,loc_1B2C
 
                cp      0x0d
 
                jp      nz,SINTAX_ERROR
 
loc_1B1F        ld      (hl),"B"
 
                call    CP_FILE_FREE
 
                call    DEL_5BYTES
 
loc_1B27        call    SET_START_SIZE
 
                jr      loc_1B53
 
 
 
loc_1B2C        ld      (hl),"D"
 
                call    CP_FILE_FREE
 
                call    CP_MASSIV
 
                jr      nc,loc_1B53
 
                jp      c,SINTAX_ERROR
 
loc_1B39        call    GET_START_SIZE
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,(TRD_5CDB)
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
loc_1B48        call    EXIT_IF_SINTAX
 
                ld      a,"C"
 
                ld      (TRD_5CE5),a                    ; расширение файла
 
                call    CP_FILE_FREE
 
loc_1B53        call    SAVE_FILE
 
                jp      loc_569
 
 
 
SAVE_FILE       ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (TRD_5CE6),hl                   ; для <C> - стартовый адрес, для <B> - длина программы
 
                ex      de,hl
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      a,l
 
                or      h
 
                jp      z,SINTAX_ERROR
 
                ld      a,l
 
                or      a
 
                jr      z,loc_1B6D
 
                inc     h
 
loc_1B6D        ld      a,h
 
                ld      (TRD_5CEA),a                    ; длина файла в секторах
 
                ld      e,a
 
                ld      d,0
 
                ld      hl,(TRD_5E0A)
 
                sbc     hl,de
 
                jp      c,loc_1C45
 
                push    hl
 
                ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                ld      (hl),__SCREENS
 
                inc     hl 
 
                ld      de,(TRD_5CD1)
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                ld      hl,(TRD_5CDB)
 
                ld      (TRD_5CE8),hl                   ; длина программы
 
                ld      hl,(TRD_5E06)
 
                ld      (TRD_5CEB),hl                   ; номер первого сектора файла
 
                ex      de,hl
 
                ld      hl,(TRD_5CE6)                   ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      a,(TRD_5CEA)                    ; длина файла в секторах
 
                ld      b,a
 
                call    COM_06
 
                ld      hl,(TRD_5CF4)
 
                push    hl
 
                call    READ_9SEC                       ; чтение 9 сектора
 
                pop     hl
 
                ld      (TRD_5E06),hl
 
                pop     hl
 
                ld      (TRD_5E0A),hl
 
                ld      hl,TRD_5E09
 
                ld      a,(hl)
 
                ld      (TRD_5D1E),a
 
                inc     (hl)
 
                push    hl
 
                call    REWRITE_9SEC                    ; перезапись 9 сектора
 
                pop     hl
 
                ld      c,(hl)
 
                dec     c
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "B"
 
                call    z,SET_HEAD_STSZ
 
                ret
 
 
 
SET_HEAD_STSZ   ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                ld      de,(PROG)
 
                scf
 
                sbc     hl,de
 
                ld      (TRD_5CE6),hl                   ; для <C> - стартовый адрес, для <B> - длина программы
 
                ld      hl,(VARS)
 
                sbc     hl,de
 
                ld      (TRD_5CE8),hl                   ; длина программы
 
                ret
 
 
 
SET_START_SIZE  ld      hl,(VARS)
 
                ld      de,(PROG)
 
                sbc     hl,de
 
                ld      (TRD_5CDB),hl
 
                ld      hl,(PROG)
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                inc     hl
 
                inc     hl
 
                inc     hl
 
                sbc     hl,de
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ret
 
 
 
READ_MASSIV     call    FIND_MASSIV
 
                ret     nc
 
                ld      hl,0
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ld      a,(TRD_5CF9)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                ret     nz
 
                jp      loc_1C13
 
 
 
CP_MASSIV       call    FIND_MASSIV
 
                ret     nc
 
loc_1C13        ld      a,0x0e
 
                ld      hl,TXT_ARRAYNOT                 ; "ARRAY NOT FOUND"
 
                jp      PRINT_TXTERR
 
 
 
FIND_MASSIV     call    GET_NEXT_SYM
 
                call    LOOK_VARS
 
                set     7,c
 
                ld      a,c
 
                ld      (TRD_5CD2),a
 
                jr      nc,loc_1C2B
 
loc_1C29        scf
 
                ret
 
 
 
loc_1C2B        jr      nz,loc_1C29
 
                inc     hl
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                inc     hl
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (TRD_5CDB),de
 
                ld      (TRD_5CD9),de                   ; промежуточная длина для <B> и <C>
 
                call    GET_NEXT_SYM
 
                cp      ")"
 
                jr      nz,loc_1C2B
 
                ret
 
 
 
loc_1C45        ld      hl,TXT_NOSPACE_
 
                ld      a,3
 
PRINT_TXTERR    call    PRINT_ERROR                     ; печать сообщения об ошибке
 
                jp      END_COMAND
 
 
 
FILE_EXISTS     ld      hl,TXT_FILEEXISTS_
 
                ld      a,2
 
                jr      PRINT_TXTERR
 
 
 
SET_FILENAME    ld      hl,TRD_5CDD                     ; имя файла
 
                ld      b,8
 
loc_1C5C        ld      (hl)," "
 
                inc     hl
 
                djnz    loc_1C5C
 
                call    CP_ON_STKBOT
 
                ex      de,hl
 
                call    SETUP_DSK
 
                ld      a,c
 
                or      a
 
                jp      z,SINTAX_ERROR
 
                cp      9
 
                jr      c,loc_1C73
 
                ld      c,8
 
loc_1C73        ld      a,(hl)
 
                cp      " "
 
                jp      c,SINTAX_ERROR
 
                ld      de,TRD_5CDD                     ; имя файла
 
                push    bc
 
                ldir
 
                pop     bc
 
                ret
 
 
 
; выбор диска для форматирования
 
SETUP_DSK       inc     hl
 
                ld      a,(hl)                          ; второй символ в кавычках
 
                cp      ":"                             ; если не ":", то
 
                jr      nz,loc_1C98                     ; переход на выбор текущего дисковода
 
                dec     hl
 
                ld      a,(hl)                          ; иначе забираем из строки букву дисковода
 
                call    NUMDSK2BYTE                     ; установка дисковода на котором будет форматирование
 
                push    bc
 
                push    hl
 
                call    COM_01                          ; настройка на дисковод
 
                pop     hl
 
                pop     bc
 
                dec     bc
 
                dec     bc                              ; пропускаем имя дисковода в имени диска
 
                inc     hl
 
                inc     hl                              ; сдвинули указатель в введенной строке на начало имени диска
 
                ret
 
 
 
loc_1C98        dec     hl
 
                ld      a,(TRD_5D19)                    ; дисковод по умолчанию
 
                push    bc
 
                push    hl
 
                call    COM_01                          ; настройка на дисковод
 
                pop     hl
 
                pop     bc
 
                ret
 
 
 
FIND_HEAD_BUF   ld      l,c
 
                ld      h,0
 
                add     hl,hl
 
                add     hl,hl
 
                add     hl,hl
 
                add     hl,hl
 
                ld      bc,TRD_5D25
 
                add     hl,bc
 
                ret
 
 
 
SET_CP_FILENAME call    SET_FILENAME
 
; поиск файла по имени файла
 
FIND_FILENAME   call    RD_0SEC2BUF                     ; чтение сектора 0 каталога
 
                ld      b,0x80
 
                ld      c,0
 
loc_1CBA        push    bc
 
                call    FIND_HEAD_BUF
 
                call    CP_END_BUF
 
                pop     bc
 
                push    bc
 
                ld      a,c
 
                cp      0x10
 
                jr      nz,loc_1CCD
 
                pop     bc
 
                ld      c,0
 
                jr      loc_1CBA
 
 
 
loc_1CCD        ld      de,TRD_5CDD                     ; имя файла
 
                ld      a,(TRD_5D06)                    ; количество символов имени файла при поиске
 
                ld      b,a
 
                xor     a 
 
                cp      (hl)
 
                jr      nz,loc_1CDB
 
                pop     bc
 
                jr      loc_1CE4
 
 
 
loc_1CDB        call    COMPARE_B_SYM
 
                pop     bc
 
                jr      z,loc_1CE7
 
                inc     c
 
                djnz    loc_1CBA
 
loc_1CE4        or      0xff
 
                ret
 
 
 
loc_1CE7        ld      a,0x80
 
                sub     b
 
                ld      c,a
 
                ld      (TRD_5D1E),a
 
                xor     a
 
                ret     z
 
 
 
; поиск файла по имени и расширению
 
COM_0A          call    FIND_FILENAME                   ; поиск файла по имени файла
 
                ld      hl,TRD_5D0F                     ; номер ошибки TR-DOS
 
                ld      (hl),c
 
                ret     z
 
                ld      (hl),0xff
 
                ret
 
 
 
RETURN          call    EXIT_IF_SINTAX
 
                CALL    DELETE_BUFFER
 
                res     3,(iy+1)
 
                call    RESTORE_SP                      ; восстановление перехватчика ошибок
 
                ld      sp,(TRD_5D1C)                   ; сохранение регистра SP
 
                exx                     ;LD HL,(ERR_SP)
 
                ld      hl,0x2758       ;DEC HL
 
                exx                     ;LD A,0X12
 
                dec     hl              ;CP (HL)
 
                ld      a,0x12          ;JR NZ,LOCRET_1D19
 
                cp      (hl)            ;DEC HL
 
                ret     nz              ;LD (ERR_SP),HL
 
                dec     hl              ;LOCRET_1D19    RET
 
                jp      loc_0235
 
 
 
SINTAX_ERROR    bit     7,(iy+0)
 
                jr      z,loc_1D25
 
                ld      a,0x0b
 
                ld      (ERR_NR),a
 
loc_1D25        inc     a
 
                ld      hl,TXT_ERROR_
 
loc_1D29        call    PRINT_ERROR                     ; печать сообщения об ошибке
 
                jp      END_COMAND
 
 
 
loc_1D2F        ld      a,(ERR_NR)
 
                ld      hl,TXT_BREAK                    ; "*BREAK*"
 
                cp      0x14
 
                jr      z,loc_1D29
 
                cp      0x0c
 
                jr      z,loc_1D29
 
                ld      hl,TXT_OUTRAM                   ; "OUT OF RAM"
 
                cp      3
 
                jr      z,loc_1D29
 
                ld      hl,TXT_ARRAYNOT                 ; "ARRAY NOT FOUND"
 
                cp      1
 
                jr      z,loc_1D29
 
                jr      SINTAX_ERROR
 
 
 
RUN             call    ZERO2HIGH_ERR
 
                call    LOAD_FILE
 
                call    EXIT_IF_SINTAX
 
                ld      hl,(TRD_5CE6)
 
                ld      a,(TRD_5CE5)                    ; расширение файла
 
                cp      "B"
 
                JP      RUN_FILE
 
 
 
                push    hl
 
                ret
 
 
 
CLEAR_WORKSPACE ld      hl,TRD_5D0E                     ; 0xFF - работает BASIC, иначе TR-DOS
 
                ld      a,(hl)
 
loc_1D67        cp      0xff
 
                ld      (hl),0
 
                ret     nz
 
                rst     0x20
 
                dw      0x16bf                          ; очистка рабочей области и стека калькулятора
 
                ret
 
 
 
CP_SINTAX       bit     7,(iy+1)
 
                ret
 
 
 
EXIT_IF_SINTAX  call    CP_SINTAX
 
                ret     nz
 
                pop     hl
 
                ret
 
 
 
; ЗАНЕСЕНИЕ ЧИСЛА НА СТЕК КАЛЬКУЛЯТОРА
 
CHISLO2STKBOT   call    GET_NEXT_SYM
 
                call    BC2STKBOT
 
                jr      CP_SINTAX
 
 
 
; открытие канала 0
 
OPEN_CHAN_0     xor     a
 
OPENSTREAM      rst     0x20
 
                dw      0x1601                          ; открытие канала
 
                ret
 
 
 
; открытие канала 2
 
OPEN_CHAN_2     ld      a,2
 
                jr      OPENSTREAM
 
 
 
GET_SYMSTR      rst     0x20
 
                dw      0x18                            ; выборка символа из (CH_ADD)
 
                ret
 
 
 
CALL2BASEDIT    call    OPEN_CHAN_0                     ; открытие канала 0
 
                rst     0x20
 
                dw      0x0f2c                          ; редактор командной строки
 
                ret
 
 
 
; очистка основного экрана
 
CLEAR_SCREEN    rst     0x20
 
                dw      0x0d6b                          ; очистка экрана
 
                ret
 
 
 
LOOK_VARS       rst     0x20
 
                dw      0x28b2                          ; LOOK-VARS. фиг знает че делает
 
                ret
 
 
 
; очистка нижней части экрана
 
CLEAR_DOWN_SCR  rst     0x20
 
                dw      0x0d6e                          ; очистка нижней части экрана
 
                ret
 
 
 
PRINT_CHISLO_A_ ld      c,a
 
CONV2_2BYTES    ld      b,0
 
                jp      PRINT_CHISLO
 
 
 
PRINT_CHISLO    push    bc
 
        DUPL 3,0
 
                pop     bc
 
                rst     0x20
 
                dw      0x1a1b                          ; печать сообщений и номеров строк
 
        DUPL 3,0
 
                ret
 
 
 
GET_STKBOT_     rst     0x20
 
                dw      0x2bf1                          ; чтение дна стека калькулятора
 
                ret
 
 
 
FIND_LAST       rst     0x20
 
                dw      0x1e99                          ; поиск последнего целого числа
 
                ret
 
 
 
PUT_NUMDSK_STK  rst     0x20
 
                dw      0x1c8c
 
                ret
 
 
 
BC2STKBOT       rst     0x20
 
                dw      0x1c82
 
                ret
 
 
 
SET_CH_ADD      ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                inc     hl
 
                ld      (CH_ADD),hl
 
                ret
 
 
 
INP_2STR2STKBOT call    SET_AND_PUT
 
loc_1DD0        call    GET_SYMSTR
 
                cp      ","
 
                jp      nz,SINTAX_ERROR
 
                call    GET_NEXT_SYM
 
                call    PUT_NUMDSK_STK
 
                ret
 
 
 
SET_AND_PUT     call    SET_CH_ADD
 
                jp      PUT_NUMDSK_STK
 
 
 
GET_START_SIZE  call    GET_SYMSTR
 
                cp      __CODE
 
                ret     nz
 
INPUT_PARAMS    call    CHISLO2STKBOT                   ; занесение числа на стек калькулятора
 
                jr      z,loc_1DFB
 
                call    FIND_LAST
 
                ld      (TRD_5CD9),bc                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CDB),bc
 
loc_1DFB        call    GET_SYMSTR
 
                cp      ","
 
                jr      z,SET_NUM_CHAN
 
                cp      0x0d
 
                jp      nz,SINTAX_ERROR
 
                call    EXIT_IF_SINTAX
 
                ret
 
 
 
SET_NUM_CHAN    call    CHISLO2STKBOT                   ; занесение числа на стек калькулятора
 
                ret     z
 
                call    FIND_LAST
 
                ld      (TRD_5CDB),bc
 
                ld      a,3
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ret
 
 
 
DEL_5BYTES      ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                rst     0x20
 
                dw      0x11a7                          ; удаление из командной стpоки пятибайтных чисел
 
                ret
 
 
 
CREATE_FREERAM  ld      hl,(WORKSP)
 
                rst     0x20
 
                dw      0x30                            ; создание свободного места
 
                ret
 
 
 
GET_NEXT_SYM    rst     0x20
 
                dw      0x20                            ; печать следующего символа
 
                ret
 
 
 
DEL_WORKRAM     rst     0x20
 
                dw      0x19e8                          ; удаление области памяти
 
                ret
 
 
 
RESERV_RAM      rst     0x20
 
                dw      0x1655
 
                ret
 
 
 
WR_NUM_TRACK    call    GET_NUM_TRACK                   ; FIX
 
                ld      a,h
 
                out     (0x3f),a
 
                ret
 
 
 
; чтение секторов
 
COM_05          xor     a
 
                jr      loc_1E64
 
 
 
WRHEAD_FILENAME call    SETHEADFILENAME                 ; сохранение описателя файла
 
REWRITE_9SEC    ld      de,(TRD_5CF4)                   ; перезапись 9 сектора
 
                dec     de
 
                ld      b,1
 
                ld      hl,TRD_5D25
 
; запись секторов
 
COM_06          JR SAVE_SECTORS
 
 
 
        DUPL 0X1E62-$,0
 
SAVE_SECTORS    ld      a,0xff
 
loc_1E64        ld      (TRD_5CCE),a                    ; 0x00 - чтение сектора, 0xFF - запись сектора
 
loc_1E67        ld      (TRD_5CF4),de
 
                push    bc
 
                push    hl
 
                call    WR_NUM_TRACK
 
                pop     hl
 
                pop     bc
 
                xor     a
 
                or      b
 
                ret     z
 
loc_1E75        push    bc
 
                push    hl
 
                call    COM_04
 
                ld      a,(TRD_5CF4)
 
                call    COM_03
 
                ld      a,(TRD_5CF5)
 
                call    COM_02
 
                ld      a,(TRD_5CCE)                    ; 0x00 - чтение сектора, 0xFF - запись сектора
 
                or      a
 
                push    af
 
                call    z,LOAD_SECTOR
 
                pop     af
 
                call    nz,SAVE_SECTOR
 
                pop     hl
 
                ld      de,0x100
 
                add     hl,de
 
                push    hl
 
                ld      a,0x10
 
                ld      hl,TRD_5CF4
 
                inc     (hl)
 
                cp      (hl)
 
                jr      nz,loc_1EA7
 
                ld      (hl),0
 
                ld      hl,TRD_5CF5
 
                inc     (hl)
 
loc_1EA7        pop     hl
 
                pop     bc
 
                djnz    loc_1E75
 
                ret
 
 
 
KOLWO_SECS      push    hl
 
                ld      h,a
 
                ld      l,0
 
                push    hl
 
                sbc     hl,de
 
                call    c,LOAD_FILLFILE
 
                pop     hl
 
                ld      a,h
 
                pop     hl
 
                ret     c
 
                ld      a,d
 
                ret
 
 
 
LOAD_FILLFILE   xor     a
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                scf
 
                ret
 
 
 
FORMAT          ld      hl,0xffff
 
                LD      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CD1),hl
 
                call    CP_SECOND_SYM
 
                jp      z,SINTAX_ERROR
 
                call    SET_AND_PUT
 
                call    EXIT_IF_SINTAX
 
                call    SET_FILENAME
 
 
 
        DUPL 0X1EE1-$
 
                CALL FORMAT_RAM
 
                JR Z,END_FORMAT
 
                ld      a,80
 
loc_1EE8        ld      (TRD_5CD7),a                    ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                call    COM_00
 
                call    COM_17
 
                call    PAUSE_3_C_A
 
                ld      e,1
 
                call    FORMAT_TREK
 
                call    COM_16
 
                ld      e,0
 
                call    FORMAT_TREK
 
 
 
        DUPL 0X1F08-$
 
                call    COM_17
 
                call    PAUSE_3_C_A
 
                call    loc_3EB5
 
                ld      a,0X80
 
                ld      (TRD_5CDA),a
 
loc_1F1B        call    FORMAT_DISK
 
 
 
END_FORMAT      CALL CP_TYPEDRIVE
 
                CALL Z,CREATE_TRDTABL
 
                CALL CLEAR_DOWN_SCR
 
                LD HL,TRD_5D25
 
                LD DE,TRD_5D26
 
                LD BC,0XFF
 
                LD (HL),B
 
                LDIR
 
                JR loc_1F50
 
 
 
        DUPL 0X1F50-$,0
 
loc_1F50        ld      a,0x16
 
                ld      hl,2544
 
loc_1F55        ld      (TRD_5E08),a
 
                ld      (TRD_5E0A),hl
 
                ld      a,1
 
                ld      (TRD_5E07),a
 
                ld      a,0X10
 
                ld      (TRD_5E0C),a
 
                ld      hl,TRD_5E0F
 
                ld      de,TRD_5E10
 
                ld      bc,8
 
                ld      (hl)," "
 
                ldir
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                ld      de,TRD_5E1A
 
                ld      bc,8
 
                ldir                                    ; перенос имени диска
 
                call    COM_16
 
                ld      b,1
 
                ld      de,8
 
                ld      hl,TRD_5D25
 
                call    SAVE_SECTORS
 
                ld      a,(TRD_5CD6)                    ; 0xFF - команда принята синтаксическим анализатором
 
                push    af
 
                xor     a
 
                ld      (TRD_5CE5),a                    ; расширение файла
 
                ld      hl,(TRD_5E0A)
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                rst     0x18
 
                ld      a,0x0d
 
                rst     0x10
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                pop     af
 
                push    hl
 
                ld      d,0
 
                ld      e,a
 
                sbc     hl,de
 
                ld      b,h
 
                ld      c,l
 
                call    PRINT_CHISLO                    ; печать числа
 
                ld      a,"/"
 
                rst     0x10
 
                pop     bc
 
                call    PRINT_CHISLO                    ; печать числа
 
                jp      END_COMAND
 
 
 
; таблица номеров секторов для форматирования
 
;TABL_SECTORS   DB 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x01
 
TABL_SECTORS    DB 0x01,0x09,0x02,0x0A,0x03,0x0B,0x04,0x0C,0x05,0x0D,0x06,0x0E,0x07,0x0F,0x08,0x10,0x01
 
 
 
CP_DISK_TRACK   call    GET_TIME_HEAD                   ; получение времени перемещения головки
 
                or      11h
 
                ld      b,a
 
                ld      a,32h
 
                call    HEAD_POSITION
 
                ld      a,2
 
                call    HEAD_POSITION
 
                call    PAUSE725779T
 
                in      a,(1Fh)
 
                and     4
 
                ld      a,80                            ; 80 дорожек
 
                jr      z,loc_1FE7
 
                ld      a,40                            ; 40 дорожек
 
loc_1FE7        ld      (TRD_5CD7),a                    ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ret
 
 
 
; установка стороны 0 диска
 
COM_16          ld      a,(TRD_5D16)                    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ 0xFF)
 
                or      0x3c
 
loc_1FF0        ld      (TRD_5D16),a                    ; копия системного регистра (порт 0xFF)
 
                out     (0xff),a
 
                ret
 
 
 
; установка стороны 1 диска
 
COM_17          ld      a,(TRD_5D16)                    ; копия системного регистра (порт 0xFF)
 
                and     0x6f
 
                jr      loc_1FF0
 
 
 
FORMAT_TREK     di
 
                ld      a,0xf4
 
                out     (0x1f),a
 
                ld      hl,TABL_SECTORS
 
                ld      c,0x7f
 
loc_2007        ld      b,0x0a
 
                ld      d,0x4e
 
                call    WRITE_C_D_B
 
                ld      b,0x0c
 
                ld      d,0
 
                call    WRITE_C_D_B
 
                ld      b,3
 
                ld      d,0xf5
 
                call    WRITE_C_D_B
 
                ld      d,0xfe
 
                call    WRITE_C_D_1
 
                ld      d,e
 
                call    WRITE_C_D_1
 
                ld      d,0
 
                call    WRITE_C_D_1
 
                ld      d,(hl)
 
                call    WRITE_C_D_1
 
                ld      d,1
 
                call    WRITE_C_D_1
 
                ld      d,0xf7
 
                call    WRITE_C_D_1
 
                ld      b,0x16
 
                ld      d,0x4e
 
                call    WRITE_C_D_B
 
                ld      b,0x0c
 
                ld      d,0
 
                call    WRITE_C_D_B
 
                ld      b,3
 
                ld      d,0xf5
 
                call    WRITE_C_D_B
 
                ld      d,0xfb
 
                call    WRITE_C_D_1
 
                ld      b,0
 
                ld      d,0
 
                call    WRITE_C_D_B
 
                ld      d,0xf7
 
                call    WRITE_C_D_1
 
                ld      b,0x3c
 
                ld      d,0x4e
 
                call    WRITE_C_D_B
 
                ld      a,(hl)
 
                inc     hl
 
                cp      0x10
 
                jr      nz,loc_2007
 
                ld      b,0
 
                call    WRITE_C_D_B
 
                jp      m,loc_2076
 
                call    WRITE_C_D_B
 
loc_2076        in      a,(0x1f)
 
                and     0x40
 
                jp      nz,loc_3F39                     ; READ ONLY
 
CP_NUM_TRACK    ld      a,(TRD_5CD8)                    ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                or      a
 
                ret     nz
 
                ld      c,0x7f
 
                ld      a,e
 
                out     (0x3f),a
 
                ld      hl,TABL_SECTORS+1
 
loc_208A        ld      b,3
 
                ld      a,(hl)
 
                out     (0x5f),a
 
                push    hl
 
loc_2090        di
 
                ld      a,0x80
 
                out     (0x1f),a
 
                push    bc
 
                call    RD_DATAPORT
 
                in      a,(0x1f)
 
                and     0x7f
 
                pop     bc
 
                jr      z,loc_20A6
 
                djnz    loc_2090
 
                ld      hl,TRD_5CD6                     ; 0xFF - команда принята синтаксическим анализатором
 
                inc     (hl)
 
loc_20A6        pop     hl
 
                ld      a,(hl)
 
                inc     hl
 
                cp      1
 
                jr      nz,loc_208A
 
                ei
 
                ret
 
 
 
WRITE_C_D_1     ld      b,1
 
WRITE_C_D_B     in      a,(0xff)
 
                and     0xc0
 
                jr      z,WRITE_C_D_B
 
                ret     m
 
                out     (c),d
 
                djnz    WRITE_C_D_B
 
                ret
 
 
 
FORMAT_DISK     ld      hl,TRD_5CD7                     ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      b,(hl)
 
                xor     a
 
                inc     hl
 
                ld      (hl),a
 
                ld      e,0xff
 
loc_20C6        push    bc
 
                inc     e
 
                ld      a,e
 
                ld      b,0x18
 
                call    HEAD_POSITION
 
                call    COM_16
 
                CALL loc_20D1
 
 
 
        DUPL 0X20DE-$,0
 
                call    FORMAT_TREK
 
loc_20E1        pop     bc
 
                djnz    loc_20C6
 
                ret
 
 
 
DELETE_BUF      push    af
 
                ld      a,(TRD_5CF8)                    ; дисковод при операции с 2 файлами
 
                cp      0xff
 
                jr      z,loc_211C
 
                pop     af
 
                jp      DEL_BUF
 
 
 
; проверка наличия INTERFACE1
 
CP_INTERFACE1   push    af
 
                ld      a,(TRD_5CB6)                    ; для проверки наличия INTERFACE1
 
                cp      0F4h
 
                jr      z,loc_211C
 
                xor     a
 
                ld      hl,TRD_5D18
 
                or      (hl)
 
                ld      (hl),0FFh
 
                jr      z,loc_211C
 
                ld      a,(TRD_5D0C)
 
                or      a
 
                ld      hl,TRD_5CC3
 
                ld      de,TRD_5D33
 
                jr      nz,loc_2111
 
                ld      de,TRD_5E34
 
loc_2111        ld      b,2Dh
 
loc_2113        ld      c,(hl)
 
                ld      a,(de)
 
                ld      (hl),a
 
                ld      a,c
 
                ld      (de),a
 
                inc     hl
 
                inc     de
 
                djnz    loc_2113
 
loc_211C        pop     af
 
                ret
 
 
 
; удаление введенной строки после выполнения команды
 
CLRBUF_EDITOR   CALL CLRBUF_EDITOR2
 
                ld      (hl),0x0d
 
                ld      (K_CUR),hl
 
                inc     hl
 
                ld      (hl),0x80
 
                ret
 
 
 
; восстановление введеной строки в буфере редактора
 
RESTORE_COMSTR  ld      de,(E_LINE)                     ; адрес начала редактируемой строки
 
                ld      hl,TRD_5D20                     ; для сохранения 3 символов введеной строки
 
                call    LDI3_HL2DE                      ; перенос 3 байт
 
                ret
 
 
 
; принятие и обработка команд
 
GET_COMMAND     ld      a,(TRD_5D0F)                    ; номер ошибки TR-DOS
 
                or      a
 
                push    af
 
                call    nz,RESTORE_COMSTR               ; если была ошибка, то возвращаем 3 сохранненых байта
 
                pop     af
 
                call    z,CLRBUF_EDITOR                 ; если ошибки не было, то очистка буфера строки редактирования
 
                ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                call    PRINT_0D
 
                ld      a,(TRD_5D19)                    ; дисковод по умолчанию
 
                add     a,"A"
 
                rst     0x10
 
                ld      a,">"
 
                rst     0x10
 
                ld      hl,ERR_NR
 
                ld      (hl),0xff
 
                jp      CALL2BASEDIT
 
 
 
sub_2158        call    GET_NEXT_SYM
 
                call    GET_SYMSTR
 
                cp      ","
 
                jp      nz,SINTAX_ERROR
 
                ld      hl,(TRD_5CDB)
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                call    SET_NUM_CHAN
 
                call    EXIT_IF_SINTAX
 
                ld      hl,(TRD_5CDB)
 
                ld      a,h
 
                or      a
 
                jp      nz,SINTAX_ERROR
 
                inc     hl
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CDB),hl
 
                ret
 
 
 
OPEN            ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                ld      (CH_ADD),hl
 
                call    SET_NUM_CHAN
 
                call    loc_1DD0
 
loc_218E        call    GET_SYMSTR
 
                cp      "A"
 
                jr      nc,loc_219A
 
                call    GET_NEXT_SYM
 
                jr      loc_218E
 
 
 
loc_219A        cp      0xa5
 
                push    af
 
                call    z,sub_2158
 
                pop     af
 
                jr      z,loc_21AE
 
                and     0xdf
 
                cp      "R"
 
                jr      z,loc_21AE
 
                cp      "W"
 
                jp      nz,SINTAX_ERROR
 
loc_21AE        ld      (TRD_5D09),a
 
                call    EXIT_IF_SINTAX
 
                ld      a,"#"
 
                ld      (TRD_5CE5),a                    ; расширение файла
 
                ld      a,0
 
                ld      (TRD_5CE6),a                    ; для <C> - стартовый адрес, для <B> - длина программы
 
                call    FIND_ENDFILE
 
                push    af
 
                call    CP_STREAMS
 
                pop     af
 
                push    af
 
                call    nz,CREATE_BLOCK0
 
                pop     af
 
                call    OPEN_STREAM
 
                ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                ld      bc,0x124
 
                add     hl,bc
 
                ld      (TRD_5D11),hl                   ; адрес строки команды TR-DOS
 
                jp      END_COMAND
 
 
 
FIND_ENDFILE    ld      a,0x0a
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                call    SET_CP_FILENAME
 
                push    af
 
                call    COM_18                          ; настройка на дискету
 
                pop     af
 
                jr      nz,loc_2206
 
                ld      a,(TRD_5D09)
 
                cp      "R"
 
                jr      z,loc_2201
 
loc_21F1        ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                inc     (hl)
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jr      z,loc_21F1
 
                ld      hl,TRD_5CE6                     ; для <C> - стартовый адрес, для <B> - длина программы
 
                dec     (hl)
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
loc_2201        call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                xor     a
 
                ret
 
 
 
loc_2206        ld      a,(TRD_5D09)
 
                cp      "R"
 
                ret     nz
 
                jp      ERR_NOFILES
 
 
 
CP_STREAMS      ld      a,(TRD_5CDB)
 
                rst     0x20
 
                dw      0x1727
 
                ld      a,b
 
                or      c
 
                jp      nz,loc_221B
 
                ret
 
 
 
loc_221B        ld      a,0x19
 
                ld      (ERR_NR),A
 
                ld      hl,TXT_STREAMOPEN               ; "STREAM OPENED"
 
                ld      a,0x0a
 
loc_2225        jp      PRINT_TXTERR
 
 
 
loc_2228        ld      a,0x0b
 
                ld      hl,TXT_NODISKFILE               ; "NOT DISK FILE"
 
                jr      loc_2225
 
 
 
INITFREEACCESS  push    hl
 
                ld      c,0x20
 
                rst     0x28
 
                ld      a,(TRD_5CD7)                    ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (hl),a
 
                inc     hl
 
                xor     a
 
                ld      (hl),a
 
                inc     hl
 
                ld      (hl),a
 
                inc     hl
 
                ld      (hl),a
 
                ld      a,0x7f
 
                pop     hl
 
                ret
 
 
 
OPEN_STREAM     push    af
 
                call    CP_STREAMS
 
                ex      de,hl
 
                ld      hl,(PROG)
 
                ld      bc,(CHANS)
 
                sbc     hl,bc
 
                ex      de,hl
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                call    CREATE_HEADCHAN
 
                ld      a,(TRD_5D09)
 
                cp      0xa5
 
                call    z,INITFREEACCESS
 
                jr      z,loc_226B
 
                ld      a,(TRD_5D09)
 
                cp      "R"
 
                ld      a,0xff
 
                jr      nz,loc_226B
 
                xor     a
 
loc_226B        ld      (hl),a
 
                pop     af
 
                jp      loc_2270
 
 
 
loc_2270        push    af
 
                ld      bc,0x14
 
                add     hl,bc
 
                push    hl
 
                call    GET_TEKSECFILE
 
                pop     hl
 
                inc     hl
 
                ld      b,1
 
                pop     af
 
                or      a
 
                push    af
 
                call    nz,COM_06
 
                pop     af
 
                call    z,COM_05                        ; чтение секторов
 
                ret
 
 
 
CREATE_BLOCK0   ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                push    hl
 
                ld      hl,0x2000
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                call    CREATE_BLOCK
 
                pop     hl
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ret
 
 
 
CREATE_BLOCK    ld      hl,0x1000
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                call    CP_FREE_ON_DSK
 
                call    SAVE_FILE
 
                ld      hl,0
 
                ld      (TRD_5CE8),hl                   ; длина программы
 
                call    SETHEADFILENAME
 
                jp      REWRITE_9SEC                    ; перезапись 9 сектора
 
 
 
CREATE_HEADCHAN ld      hl,(PROG)
 
                dec     hl
 
                ld      (CURCHL),hl
 
                push    hl
 
                ld      bc,0x124
 
                call    RESERV_RAM
 
                ld      a,0
 
                ld      b,0
 
loc_22C4        ld      (de),a
 
                dec     de
 
                djnz    loc_22C4
 
                pop     hl
 
                push    hl
 
                ld      de,loc_3D0E
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                inc     hl
 
                ld      de,loc_3D06
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                inc     hl
 
                ld      (hl),"D"
 
                inc     hl
 
                inc     hl
 
                inc     hl
 
                inc     hl
 
                inc     hl
 
                ld      (hl),"$"
 
                inc     hl
 
                ld      (hl),1
 
                inc     hl
 
                ld      a,(TRD_5CF6)                    ; дисковод для временной операции
 
                ld      (hl),a
 
                inc     hl
 
                ld      a,(TRD_5D1E)
 
                ld      (hl),a
 
                inc     hl
 
                ld      a,(TRD_5D09)
 
                cp      "R"
 
                ld      (hl),0
 
                jr      z,loc_22FC
 
                ld      a,(TRD_5CE8)                    ; длина программы
 
                ld      (hl),a
 
loc_22FC        inc     hl
 
                ld      (hl),b
 
                jr      z,loc_2304
 
                ld      a,(TRD_5CE9)                    ; длина программы
 
                ld      (hl),a
 
loc_2304        inc     hl
 
                ex      de,hl
 
                pop     hl
 
                push    de
 
                ld      de,0x10
 
                add     hl,de
 
                ex      de,hl
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                ldir
 
                pop     hl
 
                ret
 
 
 
GET_ADRTEKSYM   ld      c,0x0d
 
                rst     0x28
 
                ld      c,(hl)
 
                rst     0x28
 
                ld      bc,0x24
 
                add     hl,bc
 
                ret
 
 
 
GET_ADRTEKFRG   ld      c,0x24
 
ADR_OPEN_CHAN   ld      b,0
 
                ld      hl,(CURCHL)
 
                add     hl,bc
 
                ret
 
 
 
CP_ENDOFSECTOR  ld      c,0x0d
 
                rst     0x28
 
                inc     (hl)
 
                ret     nz
 
                push    hl
 
                call    SET_DISK
 
                call    SAVE_TEKSECTOR                  ; запись текущего сектора
 
                pop     hl
 
                inc     hl
 
                inc     (hl)
 
                push    hl
 
                call    LOADINGSECTOR
 
                pop     hl
 
                ld      a,0x10
 
                cp      (hl)
 
                ret     nz
 
                push    hl
 
                ld      c,0x0f
 
                rst     0x28
 
                ld      a,(hl)
 
                cp      0x7f
 
                pop     hl
 
                jr      z,loc_2358
 
                ld      hl,(CURCHL)
 
                call    SAVE_HEAD_BLK
 
                ld      c,0x0e
 
                rst     0x28
 
                jp      loc_2379
 
 
 
loc_2358        call    FIND_NEXT_BLK
 
                push    af
 
                call    z,LOADINGSECTOR
 
                ld      c,0x0e
 
                rst     0x28
 
                pop     af
 
                call    nz,CREATE_NEWBLOCK
 
                ret
 
 
 
sub_2367        ld      (hl),0
 
                ld      c,0x19
 
                rst     0x28
 
                ld      d,0x20
 
                ld      e,(hl)
 
                ret
 
 
 
CREATE_NEWBLOCK call    sub_2367
 
                ld      (TRD_5CD7),de                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                jr      CREATE_BLK
 
 
 
loc_2379        call    sub_2367
 
                inc     e
 
                ld      (TRD_5CD7),de                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
CREATE_BLK      call    CREATE_BLOCK
 
                call    DEL_BUF
 
                ld      c,0x10
 
                rst     0x28
 
                ex      de,hl
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                ldir
 
                ld      c,0x0c
 
                rst     0x28
 
                ld      a,(TRD_5D1E)
 
                ld      (hl),a
 
                ret
 
 
 
FIND_END_SEC    ld      c,0x0d
 
                rst     0x28
 
                inc     (hl)
 
                ret     nz
 
                inc     hl
 
                inc     (hl)
 
                push    hl
 
                call    SET_DISK
 
                ld      c,0x23
 
                rst     0x28
 
                ld      a,(hl)
 
                or      a
 
                jr      z,loc_23B6
 
                pop     hl
 
                push    hl
 
                dec     (hl)
 
                call    SAVE_TEKSECTOR                  ; запись текущего сектора
 
                pop     hl
 
                push    hl
 
                inc     (hl)
 
loc_23B6        call    LOADINGSECTOR
 
                pop     hl
 
                ld      a,0x10
 
                cp      (hl)
 
                call    z,OPEN_NEXT_BLK
 
                ret
 
 
 
OPEN_NEXT_BLK   call    FIND_NEXT_BLK
 
                push    af
 
                call    DEL_BUF
 
                pop     af
 
                jp      nz,ERR_ENDOFFILE
 
                jp      LOADINGSECTOR
 
 
 
FIND_NEXT_BLK   ld      (hl),0
 
                ld      c,0x19
 
                rst     0x28
 
                inc     (hl)
 
                ld      c,0x10
 
                rst     0x28
 
                ld      de,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                ldir
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                ret     nz
 
OPEN_BLK        call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                ld      c,0x10
 
                rst     0x28
 
                ex      de,hl
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                ldir
 
                ld      c,0x0c
 
                rst     0x28
 
                ld      a,(TRD_5D1E)
 
                ld      (hl),a
 
                xor     a
 
                ret
 
 
 
; запись текущего сектора
 
SAVE_TEKSECTOR  call    GET_TEKSECFILE
 
                call    GET_ADRTEKFRG
 
                ld      b,1
 
                call    COM_06
 
                ld      c,0x0f
 
                rst     0x28
 
                ld      a,(hl)
 
                cp      0x7f
 
                ret     z
 
                call    GET_ADRTEKFRG
 
                xor     a
 
                ld      b,a
 
loc_2413        ld      (hl),a
 
                inc     hl
 
                djnz    loc_2413
 
                ret
 
 
 
LOADINGSECTOR   call    GET_TEKSECFILE
 
                call    GET_ADRTEKFRG
 
                ld      b,1
 
                jp      COM_05                          ; чтение секторов
 
 
 
GET_TEKSECFILE  ld      hl,(CURCHL)
 
                ld      bc,0x1e
 
                add     hl,bc
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ld      c,0x0e
 
                rst     0x28
 
                ld      b,(hl)
 
                dec     b
 
                inc     b
 
                push    af
 
                ld      a,0x10
 
                jr      z,loc_2441
 
loc_2438        inc     e
 
                cp      e
 
                jr      nz,loc_243F
 
                ld      e,0
 
                inc     d
 
loc_243F        djnz    loc_2438
 
loc_2441        pop     af
 
                ret
 
 
 
SET_DISK        ld      c,0x0b
 
                rst     0x28
 
                ld      a,(hl)
 
                jp      COM_01                          ; настройка на дисковод
 
 
 
OUT_SYM2FILE    ld      hl,TRD_5CC2                     ; содержит 0xC9. для перехода из TR-DOS в BASIC
 
                push    hl
 
        DUPL 4,0
 
                push    af
 
        DUPL 3,0
 
                ld      a,0x0a
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                pop     af
 
                call    WORK4FREEACCESS
 
                push    af
 
                call    CP_FILE_OPENED
 
                jp      z,ERR_INVALID_IO
 
                pop     af
 
                call    GET_ADRTEKSYM
 
                ld      (hl),a
 
                jp      CP_ENDOFSECTOR
 
 
 
CP_END_BLK      ld      c,0x0d
 
                rst     0x28
 
                ld      a,(hl)
 
                ld      bc,0x0e
 
                add     hl,bc
 
                cp      (hl)
 
                ret     nz
 
                ld      c,0x0e
 
                rst     0x28
 
                ld      a,(hl)
 
                ld      bc,0x0e
 
                add     hl,bc
 
                cp      (hl)
 
                ret     nz
 
                ld      hl,TRD_5CB6                     ; для проверки наличия INTERFACE1
 
                ld      a,(hl)
 
                cp      0xf4
 
                jr      z,ERR_ENDOFFILE
 
                bit     4,(hl)
 
                jr      z,ERR_ENDOFFILE
 
                or      1
 
                pop     hl
 
                ret
 
 
 
ERR_ENDOFFILE   ld      a,7
 
loc_2494        ld      (ERR_NR),a
 
                call    DELETE_BUF
 
                rst     0x20
 
                dw      0x0058
 
                ret
 
 
 
ERR_INVALID_IO  ld      a,0x17
 
                jr      loc_2494
 
 
 
WORK4FREEACCESS ld      d,a
 
                ld      c,0x0f
 
                rst     0x28
 
                ld      a,(hl)
 
                cp      0x7f
 
                ld      a,d
 
                ret     nz
 
                ld      bc,0x13
 
                add     hl,bc
 
                ld      a,(hl)
 
                or      a
 
                ld      a,d
 
                jr      nz,loc_24D5
 
                dec     hl
 
                ld      a,(hl)
 
                or      a
 
                jr      nz,loc_24C2
 
                push    bc
 
                push    hl
 
                push    de
 
                call    W16B2WORKSP
 
                pop     de
 
                pop     hl
 
                pop     bc
 
loc_24C2        ld      c,(hl)
 
                ld      a,d
 
                ex      de,hl
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                add     hl,bc
 
                cp      6
 
                ld      (hl),a
 
                call    z,WORK_NUMSAVE
 
                ld      c,0x21
 
                rst     0x28
 
                inc     (hl)
 
                pop     hl
 
                ret
 
 
 
loc_24D5        dec     hl
 
                ld      a,(hl)
 
                dec     hl
 
                inc     a
 
                cp      (hl)
 
                inc     hl
 
                inc     (hl)
 
                push    hl
 
                push    af
 
                ld      c,0x23
 
                rst     0x28
 
                ld      (hl),0xff
 
                pop     af
 
                pop     hl
 
                jr      c,loc_24EE
 
                ld      a,d
 
                cp      0x0d
 
                jr      z,loc_24F2
 
                pop     bc
 
                ret
 
 
 
loc_24EE        ld      a,d
 
                cp      0x0d
 
                ret     nz
 
loc_24F2        xor     a
 
                ld      (hl),a
 
                inc     hl
 
                ld      (hl),a
 
                ld      a,d
 
                ret
 
 
 
W16B2WORKSP     ld      hl,(WORKSP)
 
                ld      (TRD_5CCF),hl                   ; временное сохранение WORK_SP
 
                ld      bc,0x10
 
                jp      CREATE_FREERAM
 
 
 
WORK_NUMSAVE    ld      (hl),0x0d
 
                ld      hl,(CH_ADD)
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      (CH_ADD),hl
 
                ld      hl,FLAGS
 
                res     7,(hl)
 
                call    BC2STKBOT
 
                ld      hl,FLAGS
 
                set     7,(hl)
 
                ld      hl,(TRD_5CCF)                   ; временное сохранение WORK_SP
 
                ld      (CH_ADD),hl
 
                call    BC2STKBOT
 
                call    FIND_LAST
 
                push    bc
 
                pop     de
 
                ld      c,0x20
 
                rst     0x28
 
                ld      b,(hl)
 
                xor     a
 
                ld      hl,0
 
                ld      (TRD_5CDB),hl
 
loc_2538        add     hl,de
 
                jr      nc,loc_2544
 
                push    hl
 
                ld      hl,(TRD_5CDB)
 
                inc     hl
 
                ld      (TRD_5CDB),HL
 
                pop     hl
 
loc_2544        djnz    loc_2538
 
                ld      (TRD_5CD9),HL                   ; промежуточная длина для <B> и <C>
 
                ld      a,(TRD_5CDB)
 
                ld      hl,TRD_5CDA
 
                rrd
 
                and     0x0f
 
                ld      (TRD_5CDB),a
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (CH_ADD),hl
 
                call    OPEN_SAVED
 
                ld      c,0x21
 
                rst     0x28
 
                ld      a,0xff
 
                ld      (hl),a
 
                inc     hl
 
                ld      (hl),a
 
                ret
 
 
 
OPEN_SAVED      ld      c,0x19
 
                rst     0x28
 
                ld      a,(TRD_5CDA)
 
                cp      (hl)
 
                jp      nz,loc_2584
 
                ld      c,0x0e
 
                rst     0x28
 
                ld      a,(TRD_5CDB)
 
                cp      (hl)
 
                jp      nz,loc_25A7
 
loc_257C        ld      c,0x0d
 
                rst     0x28
 
                ld      a,(TRD_5CD9)                    ; промежуточная длина для <B> и <C>
 
                ld      (hl),a
 
                ret
 
 
 
loc_2584        call    CPANDZERO23
 
                call    nz,SAVE_TEK_SEC
 
                ld      a,(TRD_5CDA)
 
                ld      c,0x19
 
                rst     0x28
 
                ld      (hl),a
 
                ld      c,0x10
 
                rst     0x28
 
                ld      de,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                ldir
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jp      nz,loc_25D2
 
                call    OPEN_BLK
 
                jr      loc_25AD
 
 
 
loc_25A7        call    CPANDZERO23
 
                call    nz,SAVE_TEK_SEC
 
loc_25AD        ld      a,(TRD_5CDB)
 
                ld      c,0x0e
 
                rst     0x28
 
                ld      (hl),a
 
                push    hl
 
                call    SET_DISK
 
                call    LOADINGSECTOR
 
                pop     hl
 
                dec     hl
 
                ld      a,(TRD_5CD9)                    ; промежуточная длина для <B> и <C>
 
                ld      (hl),a
 
                jr      loc_257C
 
 
 
SAVE_TEK_SEC    call    SET_DISK
 
                call    SAVE_TEKSECTOR                  ; запись текущего сектора
 
                ret
 
 
 
CPANDZERO23     ld      c,0x23
 
                rst     0x28
 
                ld      a,(hl)
 
                or      a
 
                ld      (hl),0
 
                ret
 
 
 
loc_25D2        ld      hl,(TRD_5CDA)
 
                ld      h,0x20
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                push    hl
 
                ld      hl,(TRD_5CDB)
 
                push    hl
 
                call    CREATE_BLK
 
                pop     hl
 
                ld      (TRD_5CDB),hl
 
                pop     hl
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                jr      loc_25AD
 
 
 
INPUTDATAFILE
 
        DUPL 3,0
 
                ld      hl,TV_FLAG
 
                res     3,(hl)
 
                ld      hl,(ERR_SP)
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                or      a
 
                ld      hl,0x107F
 
                sbc     hl,de
 
                jr      nz,loc_2626
 
                ld      sp,(ERR_SP)
 
                pop     de
 
                pop     de
 
                ld      (ERR_SP),de
 
loc_260F        call    INPUT_SYM_FILE
 
                jr      c,loc_261D
 
loc_2614        ld      hl,TRD_5CC2                     ; содержит 0xC9. для перехода из TR-DOS в BASIC
 
                push    hl
 
                ld      hl,DELETE_BUF
 
                push    hl
 
                ret
 
 
 
loc_261D        cp      0x0d
 
                jr      z,loc_2614
 
                rst     0x20
 
                dw      0x0f85
 
                jr      loc_260F
 
 
 
loc_2626        call    INPUT_SYM_FILE
 
                jr      loc_2614
 
 
 
INPUT_SYM_FILE  ld      a,0x0a
 
                ld      (TRD_5D06),a                    ; количество символов имени файла при поиске
 
                call    CP_FILE_OPENED
 
                jr      z,loc_2642
 
                cp      0x7f
 
                jp      nz,ERR_INVALID_IO
 
                ld      bc,0x13
 
                add     hl,bc
 
                ld      (hl),0
 
                jr      loc_2645
 
 
 
loc_2642        call    CP_END_BLK
 
loc_2645        call    GET_ADRTEKSYM
 
                ld      a,(hl)
 
                push    af
 
                call    FIND_END_SEC
 
                pop     af
 
                scf
 
                ret
 
 
 
CP_FILE_OPENED  ld      c,0x0f
 
                rst     0x28
 
                ld      a,(hl)
 
                or      a
 
                ret
 
 
 
CLOSE           ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                ld      (CH_ADD),hl
 
                call    SET_NUM_CHAN
 
                call    EXIT_IF_SINTAX
 
                ld      a,(TRD_5CDB)
 
                rst     0x20
 
                dw      0x1727
 
                ld      a,b
 
                or      c
 
                jp      z,END_COMAND
 
                push    hl
 
                ld      hl,(CHANS)
 
                add     hl,bc
 
                ld      a,(hl)
 
                ld      hl,loc_3D0E
 
                cp      h
 
                pop     hl
 
                jp      nz,loc_2228
 
                ld      (hl),0
 
                inc     hl
 
                ld      (hl),0
 
                ld      (TRD_5CD9),bc                   ; промежуточная длина для <B> и <C>
 
                ld      hl,(CHANS)
 
                add     hl,bc
 
                dec     hl
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                call    sub_26CE
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      bc,0x124
 
                call    DEL_WORKRAM
 
                ld      hl,STRMS
 
                ld      b,0x10
 
loc_269D        push    bc
 
                ld      bc,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ex      de,hl
 
                sbc     hl,bc
 
                ex      de,hl
 
                jr      c,loc_26BC
 
                ld      d,(hl)
 
                dec     hl
 
                ld      e,(hl)
 
                inc     hl
 
                push    hl
 
                ex      de,hl
 
                ld      bc,0x124
 
                sbc     hl,bc
 
                ex      de,hl
 
                pop     hl
 
                ld      (hl),d
 
                dec     hl
 
                ld      (hl),e
 
                inc     hl
 
loc_26BC        inc     hl
 
                pop     bc
 
                djnz    loc_269D
 
                ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                ld      bc,0x124
 
                sbc     hl,bc
 
                ld      (TRD_5D11),hl                   ; адрес строки команды TR-DOS
 
                jp      END_COMAND
 
 
 
sub_26CE        ld      bc,0x0f
 
                add     hl,bc
 
                ld      a,(hl)
 
                or      a
 
                ret     z
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (CURCHL),hl
 
                call    SAVE_HEAD_BLK
 
                jp      SAVE_TEKSECTOR                  ; запись текущего сектора
 
 
 
SAVE_HEAD_BLK   ld      bc,0x0d
 
                add     hl,bc
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ld      bc,0x0d
 
                add     hl,bc
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                ld      c,0x10
 
                rst     0x28
 
                ld      de,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                ldir
 
                call    SET_DISK
 
                ld      c,0x0c
 
                rst     0x28
 
                ld      c,(hl)
 
                call    SETHEADFILENAME
 
                jp      REWRITE_9SEC                    ; перезапись 9 сектора
 
 
 
PRINT_MSG       ld      a,(hl)
 
                or      a
 
                ret     z
 
                and     0x7f
 
                rst     0x10
 
                bit     7,(hl)
 
                ret     nz
 
                inc     hl
 
                jr      PRINT_MSG                       ; печать текстового сообщения
 
 
 
COMPARE_B_SYM   ld      a,(de)
 
                cp      (hl)
 
                ret     nz
 
                inc     de
 
                inc     hl
 
                djnz    COMPARE_B_SYM
 
                ret
 
 
 
loc_271B        ld      hl,TXT_NODISK_                  ; "NO DISK"
 
                ld      a,6
 
                jp      PRINT_TXTERR
 
 
 
ERR_DIRFULL     ld      hl,TXT_DIRFULL                  ; "DIRECTORY FULL"
 
                ld      a,4
 
                jp      PRINT_TXTERR
 
 
 
SET_TAPELDERR   ld      a,0x1a
 
                jr      SET_NUM_ERR
 
 
 
                ld      a,0x12
 
SET_NUM_ERR     ld      (ERR_NR),a
 
                ret
 
 
 
                ld      a,3
 
                jr      SET_NUM_ERR
 
 
 
; проверка дорожки
 
COM_15          xor     a
 
                ld      (TRD_5CD8),a                    ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                in      a,(0x1f)
 
                ld      (TRD_5CCD),a                    ; 0x80 - готовность дисковода
 
                ld      e,d
 
                push    de
 
                ld      a,e
 
                out     (0x7f),a
 
                ld      a,0x18
 
                call    COM2VG_WAIT
 
                ld      a,(TRD_5CCD)                    ; 0x80 - готовность дисковода
 
                and     0x80
 
                call    nz,PAUSE_3_C_A
 
                pop     de
 
                call    CP_NUM_TRACK
 
                ld      a,(TRD_5CD6)                    ; 0xFF - команда принята синтаксическим анализатором
 
                or      a
 
                ret     z
 
                ld      a,7
 
                ld      (TRD_5D0F),a                    ; номер ошибки TR-DOS
 
                ret
 
 
 
TXT_OK_         DZ "O.K."
 
TXT_VERIFYERR   DC "Verify Error.\r"
 
TXT_BACKUPDISK  DC "BACKUP DISK\r"
 
TXT_INS_DEST    DZ "Insert Destination disk\rthen press Y"
 
TXT_INS_SRC     DZ "Insert Source disk then press Y"
 
TXT_BREAK       DC "*BREAK*\r"
 
TXT_OUTRAM      DC "Out of RAM\r"
 
TXT_ARRAYNOT    DC "Array not found\r"
 
TXT_DIRFULL     DC "Directory full\r"
 
TXT_NODISK_     DC "No disk\r"
 
TXT_STREAMOPEN  DC "Stream opened\r"
 
TXT_NODISKFILE  DC "Not disk file\r"
 
TXT_FILEEXIST   DC "File exists\rOver write?(Y/N)"
 
 
 
CALL_3D13       push    af
 
                push    bc
 
                ld      (TRD_5D04),de
 
                ld      (TRD_5D02),hl
 
        DUPL 3
 
                LD A,0XFF
 
                LD (TRD_5D15),A                         ; если 0,печатать шапку TR-DOS, иначе не печатать
 
                LD (TRD_5D1F),A
 
                pop     bc
 
                pop     af
 
                ld      hl,CP_ERROR                     ; адрес завершения интерпретатора
 
                ld      (TRD_5D1A),hl                   ; внутренний адрес завершения интерпретатора команд
 
                ld      hl,0
 
                add     hl,sp
 
                ld      (TRD_5D1C),hl                   ; сохранение текущего стека
 
                dec     hl
 
                dec     hl
 
                ld      sp,hl
 
                push    af
 
                call    MARK_SP                         ; установка стека для перехвата ошибок
 
                ld      hl,COMAND_TBL
 
                LD A,C
 
                CP LOW ((ECOMAND_TBL-COMAND_TBL)/2)+1
 
                JP NC,END_COMAND
 
                ADD A,A
 
                LD E,A
 
                POP AF
 
                LD D,0
 
                ADD HL,DE
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)
 
                LD HL,END_COMAND
 
                PUSH HL
 
                PUSH DE
 
                LD HL,(TRD_5D02)
 
                LD DE,(TRD_5D04)
 
                RET
 
 
 
COMAND_TBL      DW COM_00                               ; восстановление ВГ93
 
                DW COM_01                               ; настройка на дисковод
 
                DW COM_02                               ; установка головки на дорожку
 
                DW COM_03                               ; установка номера сектора
 
                DW COM_04                               ; установка адреса буфера
 
                DW COM_05                               ; чтение секторов
 
                DW COM_06                               ; запись секторов
 
                DW COM_07                               ; вывод каталога в канал
 
                DW COM_08                               ; считывание описателя в буфер 0x5CDD
 
                DW COM_09                               ; запись описателя файла на диск
 
                DW COM_0A                               ; поиск файла по имени и расширению
 
                DW COM_0B                               ; запись блока кодов на диск
 
                DW COM_0C                               ; запись бейсик программы на диск
 
                DW END_COMAND
 
                DW COM_0E                               ; загрузка или проверка файла
 
                DW END_COMAND
 
                DW END_COMAND
 
                DW END_COMAND
 
                DW COM_12                               ; удаление файла
 
                DW COM_13                               ; перенос описателя файла в буфер 0x5CDD
 
                DW COM_14                               ; перенос описателя файла из буфера 0x5CDD
 
                DW COM_15                               ; проверка дорожки
 
                DW COM_16                               ; установка стороны 0 диска
 
                DW COM_17                               ; установка стороны 1 диска
 
                DW COM_18                               ; настройка на дискету
 
ECOMAND_TBL
 
 
 
        DUPL 0X28D8-$,0XFF
 
; вывод каталога в канал
 
COM_07          push    af
 
                call    COM_18                          ; настройка на дискету
 
                pop     af
 
                jp      loc_479
 
 
 
; перенос описателя файла в буфер 0x5CDD
 
COM_13          xor     a
 
                jr      loc_28E5
 
 
 
; перенос описателя файла из буфера 0x5CDD
 
COM_14          ld      a,0xff
 
loc_28E5        ld      de,TRD_5CDD                     ; имя файла
 
                ld      bc,0x10
 
                or      a
 
                jr      z,loc_28EF
 
                ex      de,hl
 
loc_28EF        ldir
 
                ret
 
 
 
; запись бейсик программы на диск
 
COM_0C          call    COM_18                          ; настройка на дискету
 
                call    CP_FREE_ON_DSK
 
                jp      loc_1B27
 
 
 
; запись блока кодов на диск
 
COM_0B          ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (TRD_5CD9),de                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CDB),de
 
                call    COM_18                          ; настройка на дискету
 
                call    CP_FREE_ON_DSK
 
                jp      loc_1B53
 
 
 
; загрузка или проверка файла
 
COM_0E          or      a
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ld      (TRD_5CDB),de
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                call    FIND_RD_HEAD
 
                call    CP_PARAMS                       ; WDC
 
                jp      RD_FILE
 
 
 
; удаление файла
 
COM_12          call    COM_18                          ; настройка на дискету
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jp      ERASE_FILES
 
 
 
; поиск файла по имени
 
FIND_FILE       call    SET_FILENAME
 
                call    COM_18                          ; настройка на дискету
 
                jp      FIND_FILENAME                   ; поиск файла по имени файла
 
 
 
; печать имени файла
 
PRINT_FILENAME  push    bc
 
                ld      b,8
 
loc_293B        ld      a,(hl)
 
                rst     0x10
 
                inc     hl
 
                djnz    loc_293B
 
                ld      a,"<"
 
                rst     0x10
 
                ld      a,(hl)
 
                rst     0x10
 
                ld      a,">"
 
                rst     0x10
 
                pop     bc
 
                ret
 
 
 
; создание буфера
 
CREATE_BUF      push    hl
 
                push    de
 
                push    bc
 
                push    af
 
                ld      hl,TRD_5D0C
 
                ld      a,(hl)
 
                or      a
 
                jr      z,loc_2992
 
                push    hl
 
                ld      bc,0x101
 
                push    bc
 
                call    CP_FREE_RAM
 
                pop     bc
 
                pop     hl
 
                ld      (hl),0
 
                ld      hl,TRD_5D25
 
                call    RESERV_RAM
 
                ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                ld      bc,0x101
 
                add     hl,bc
 
                jr      loc_298F
 
 
 
; удаление буфера, если он есть
 
DEL_BUF         push    hl
 
                push    de
 
                push    bc
 
                push    af
 
                ld      hl,TRD_5D0C
 
                ld      a,(hl)
 
                or      a
 
                jr      nz,loc_2992
 
                ld      (hl),0xff
 
                ld      hl,TRD_5D25
 
                ld      bc,0x101
 
                call    DEL_WORKRAM
 
                or      a
 
                ld      bc,0x101
 
                ld      hl,(TRD_5D11)                   ; адрес строки команды TR-DOS
 
                sbc     hl,bc
 
loc_298F        ld      (TRD_5D11),hl                   ; адрес строки команды TR-DOS
 
loc_2992        pop     af
 
                pop     bc
 
                pop     de
 
                pop     hl
 
                ret
 
 
 
COM_40          xor     a
 
loc_2998        ld      (TRD_5CD7),a                    ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                call    EXIT_IF_SINTAX                  ; возврат в предыдущий вызов,если проверка синтаксиса
 
                call    CP_SECOND_SYM                   ; проверка следующего символа
 
                jp      z,SINTAX_ERROR
 
                call    GET_TYPE_DISK                   ; получение кода режима работы дисковода
 
                ld      a,(TRD_5CD7)                    ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      (hl),a
 
                jp      ERR_OK
 
 
 
COM_80          ld      a,80h
 
                jr      loc_2998
 
 
 
TXT_ERROR_      DC "\r*ERROR*\r"
 
TXT_NOSPACE_    DC "\rNo space\r"
 
TXT_FILEEXISTS_ DC "\rFile exists\r"
 
TXT_FREE_       DC " Free\r"
 
READ_ONLY       DC "\rRead Only"
 
TXT_DISCERROR_  DC "\rDisc Error"
 
TXT_R_O         DC "\rRec.  O/F"
 
TXT_TITLE_      DC "Title: "
 
TXT_RIA_        DZ "\rRetry,Abort,Ignore?"
 
TXT_TRK_        DC "\rTrk "
 
TXT_SEC_        DC " sec "
 
TXT_DELFILE_    DC " Del. File\r"
 
TXT_NOFILES_    DB "\r"
 
TXT_NOFILES     DC "No File(s)\r"
 
                DB 0
 
 
 
sub_2A35        ld      hl,loc_2A41
 
                ld      de,4080h
 
                ld      bc,20h
 
                ldir
 
                ret
 
 
 
loc_2A41        ld      a,(loc_3B5)
 
                cp      0F3h
 
                ld      a,10h
 
                jr      z,loc_2A4B
 
                xor     a
 
loc_2A4B        ld      (KSTATE1),a
 
                ld      bc,7FFDh
 
                ld      a,10h
 
                out     (c),a
 
                ret
 
 
 
MAGIC           push    af
 
                push    bc
 
                push    de
 
                push    hl
 
                push    ix
 
                push    iy
 
                exx
 
                push    bc
 
                push    de
 
                push    hl
 
                ex      af,af'
 
                push    af
 
                ld      a,i
 
                push    af
 
                ld      a,r
 
                push    af
 
                ld      hl,0
 
                add     hl,sp
 
                push    hl
 
                ld      a,3Ch
 
                out     (0FFh),a
 
                ld      a,3Fh
 
                ld      i,a
 
                in      a,(1Fh)
 
                and     80h
 
                rrca
 
                rrca
 
                rrca
 
                ld      (KSTATE1),a
 
                call    sub_2F65
 
                call    PAUSE_3_C_A
 
                call    PAUSE_3_C_A
 
                ld      de,0Ah
 
                ld      hl,4000h
 
                push    hl
 
                call    sub_2D73
 
                ld      hl,4100h
 
                ld      de,0Bh
 
                call    sub_2D73
 
                pop     hl
 
                push    hl
 
                ld      de,8
 
                call    sub_2F1B
 
                ld      hl,40E3h
 
                ld      a,(hl)
 
                ld      (KSTATE0),a
 
                inc     hl
 
                ld      a,(hl)
 
                inc     (hl)
 
                inc     hl
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                or      a
 
                ex      de,hl
 
                ld      de,0C0h
 
                sbc     hl,de
 
                ld      (40E5h),hl
 
                ld      hl,4000h
 
                ld      de,8
 
                call    sub_2D73
 
                pop     hl
 
                ld      de,(40E1h)
 
                push    de
 
                ld      de,0Ah
 
                call    sub_2F1B
 
                pop     de
 
                call    sub_2D4C
 
                push    de
 
                ld      a,3Ch
 
                out     (0FFh),a
 
                call    sub_2F65
 
                ld      hl,4000h
 
                ld      de,8
 
                ld      b,1
 
                call    sub_2F1B
 
                pop     de
 
                ld      hl,(40E1h)
 
                ld      (40E1h),de
 
                push    hl
 
                ld      hl,4000h
 
                ld      de,8
 
                ld      b,1
 
                call    sub_2D73
 
                ld      a,(40E4h)
 
                dec     a
 
                call    sub_2CE5
 
                ld      (hl),"@"
 
                inc     hl
 
                ld      b,7
 
loc_2B09        ld      (hl)," "
 
                inc     hl
 
                djnz    loc_2B09
 
                ld      (hl),"C"
 
                pop     de
 
                pop     bc
 
                inc     hl
 
                ld      (hl),c
 
                inc     hl
 
                ld      (hl),b
 
                inc     hl
 
                inc     hl
 
                inc     hl
 
                ld      (hl),0C0h
 
                inc     hl
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                ld      hl,4000h
 
                ld      de,0
 
                in      a,(5Fh)
 
                dec     a
 
                ld      e,a
 
                ld      b,1
 
                call    sub_2D73
 
                ld      hl,0
 
                add     hl,sp
 
                ld      (4140h),hl
 
                ld      sp,41FFh
 
                call    sub_2A35
 
                ld      hl,0C000h
 
                xor     a
 
loc_2B3F        add     a,(hl)
 
                inc     hl
 
                ld      b,a
 
                ld      a,h
 
                or      a
 
                ld      a,b
 
                jr      nz,loc_2B3F
 
                ld      hl,4100h
 
                ld      (hl),a
 
                push    hl
 
                ld      hl,loc_2B58
 
                push    hl
 
                ld      hl,loc_3D2F
 
                push    hl
 
                di
 
                jp      4080h
 
 
 
loc_2B58        pop     hl
 
                ld      bc,7FFDh
 
                ld      a,0AAh
 
                ld      (4130h),a
 
                ld      d,5
 
                ld      a,(KSTATE1)
 
                or      d
 
                ld      d,a
 
                out     (c),d
 
                ld      a,(0C130h)
 
                cp      0AAh
 
                jp      nz,loc_2C1B
 
                ld      a,d
 
                and     0F8h
 
                ld      d,a
 
                inc     hl
 
                ld      b,8
 
loc_2B79        ld      (hl),d
 
                out     (c),d
 
                xor     a
 
                ld      hl,0C000h
 
loc_2B80        add     a,(hl)
 
                inc     hl
 
                ld      e,a
 
                ld      a,h
 
                or      a
 
                ld      a,e
 
                jr      nz,loc_2B80
 
                ld      hl,4100h
 
                cp      (hl)
 
                inc     hl
 
                jr      z,loc_2B93
 
                inc     d
 
                djnz    loc_2B79
 
                dec     d
 
loc_2B93        ld      b,8
 
loc_2B95        push    bc
 
                call    sub_2C37
 
                pop     bc
 
                djnz    loc_2B95
 
                ld      c,0
 
                call    sub_2F3A
 
                call    sub_2D2A
 
                ld      a,(40E4h)
 
                ld      (4102h),a
 
                inc     a
 
                ld      (40E4h),a
 
                ld      hl,(40E5h)
 
                ld      de,1
 
                sbc     hl,de
 
                ld      (40E5h),hl
 
                ret     c
 
                ld      hl,(40E1h)
 
                ld      (411Eh),hl
 
                call    sub_2D1E
 
                ld      a,38h
 
                ld      (4111h),a
 
                ld      a,1
 
                ld      (411Dh),a
 
                ld      hl,4100h
 
                ld      (4119h),hl
 
                ld      hl,100h
 
                ld      (411Bh),hl
 
                ld      de,(40E1h)
 
                call    sub_2F65
 
                ld      c,d
 
                call    sub_2F3A
 
                ld      hl,4100h
 
                ld      b,1
 
                call    loc_2D58
 
                ld      (40E1h),de
 
                ld      c,0
 
                call    sub_2F3A
 
                call    sub_2D34
 
                ld      a,(4102h)
 
                call    sub_2CE5
 
                ld      de,4110h
 
                ld      bc,10h
 
                ex      de,hl
 
                ldir
 
                in      a,(5Fh)
 
                dec     a
 
                ld      e,a
 
                ld      d,0
 
                ld      hl,4000h
 
                call    sub_2D73
 
                ld      bc,7FFDh
 
                ld      a,(4101h)
 
                out     (c),a
 
loc_2C1B        ld      hl,(4140h)
 
                ld      sp,hl
 
                ld      hl,4000h
 
                ld      de,0Ah
 
                call    sub_2F1B
 
                ld      hl,4100h
 
                ld      de,0Bh
 
                call    sub_2F1B
 
                ld      a,3Ch
 
                push    af
 
                jp      loc_2EBC
 
 
 
sub_2C37        ld      a,b
 
                dec     a
 
                ld      (4103h),a
 
                ld      b,a
 
                ld      a,(4101h)
 
                and     7
 
                cp      b
 
                ret     z
 
                ld      a,2
 
                cp      b
 
                ret     z
 
                ld      a,(4101h)
 
                and     8
 
                jr      z,loc_2C55
 
                ld      a,b
 
                cp      7
 
                ret     z
 
                jr      loc_2C59
 
 
 
loc_2C55        ld      a,b
 
                cp      5
 
                ret     z
 
loc_2C59        call    sub_2C5D
 
                ret
 
 
 
sub_2C5D        ld      hl,4101h
 
                ld      a,(hl)
 
                and     0F8h
 
                ld      c,a
 
                ld      a,b
 
                or      c
 
                push    bc
 
                ld      bc,7FFDh
 
                out     (c),a
 
                pop     bc
 
                ld      hl,0C000h
 
loc_2C70        ld      a,(hl)
 
                or      a
 
                jr      nz,loc_2C7A
 
                inc     hl
 
                ld      a,h
 
                or      a
 
                jr      nz,loc_2C70
 
                ret
 
 
 
loc_2C7A        call    sub_2C7E
 
                ret
 
 
 
sub_2C7E        ld      c,0
 
                call    sub_2F3A
 
                call    sub_2D2A
 
                ld      a,(40E4h)
 
                ld      (4102h),a
 
                inc     a
 
                ld      (40E4h),a
 
                ld      hl,(40E5h)
 
                ld      de,40h
 
                sbc     hl,de
 
                ld      (40E5h),hl
 
                ret     c
 
                ld      hl,(40E1h)
 
                ld      (411Eh),hl
 
                call    sub_2D1E
 
                ld      a,40h
 
                ld      (411Dh),a
 
                ld      hl,0C000h
 
                ld      (4119h),hl
 
                ld      hl,4000h
 
                ld      (411Bh),hl
 
                ld      de,(40E1h)
 
                call    sub_2D3E
 
                ld      (40E1h),de
 
                ld      c,0
 
                call    sub_2F3A
 
                call    sub_2D34
 
                ld      a,(4102h)
 
                call    sub_2CE5
 
                ld      de,4110h
 
                ld      bc,10h
 
                ex      de,hl
 
                ldir
 
                in      a,(5Fh)
 
                dec     a
 
                ld      e,a
 
                ld      d,0
 
                ld      hl,4000h
 
                call    sub_2D73
 
                ret
 
 
 
sub_2CE5        ld      c,a
 
                and     0F0h
 
                rrca
 
                rrca
 
                rrca
 
                rrca
 
                ld      b,a
 
                push    bc
 
                ld      e,b
 
                ld      d,0
 
                ld      hl,4000h
 
                push    de
 
                call    sub_2F1B
 
                pop     de
 
                pop     bc
 
                ld      b,0
 
                ld      a,c
 
                and     0Fh
 
                rlca
 
                rlca
 
                rlca
 
                rlca
 
                ld      hl,4000h
 
                add     a,l
 
                ld      l,a
 
                ret
 
 
 
sub_2D09        ld      hl,4110h
 
                ld      b,9
 
loc_2D0E        ld      (hl)," "
 
                inc     hl
 
                djnz    loc_2D0E
 
                ld      a,"@"
 
                ld      (4110h),a
 
                ld      a,"C"
 
                ld      (4118h),a
 
                ret
 
 
 
sub_2D1E        call    sub_2D09
 
                ld      a,(4103h)
 
                add     a,"0"
 
                ld      (4111h),a
 
                ret
 
 
 
sub_2D2A        ld      hl,4000h
 
                ld      de,8
 
                call    sub_2F1B
 
                ret
 
 
 
sub_2D34        ld      hl,4000h
 
                ld      de,8
 
                call    sub_2D73
 
                ret
 
 
 
sub_2D3E        call    sub_2F65
 
                ld      c,d
 
                call    sub_2F3A
 
                ld      hl,0C000h
 
                ld      b,40h
 
                jr      loc_2D58
 
 
 
sub_2D4C        call    sub_2F65
 
                ld      c,d
 
                call    sub_2F3A
 
                ld      hl,4000h
 
                ld      b,0C0h
 
loc_2D58        push    bc
 
                push    de
 
                call    sub_2D73
 
                ld      de,100h
 
                add     hl,de
 
                pop     de
 
                inc     e
 
                ld      a,e
 
                cp      10h
 
                jr      nz,loc_2D6F
 
                ld      e,0
 
                inc     d
 
                ld      c,d
 
                call    sub_2F3A
 
loc_2D6F        pop     bc
 
                djnz    loc_2D58
 
                ret
 
 
 
sub_2D73        ld      a,e
 
                inc     a
 
                out     (5Fh),a
 
                push    hl
 
                ld      d,14h
 
                push    de
 
loc_2D7B        di
 
                ld      c,7Fh
 
                ld      a,0A0h
 
                out     (1Fh),a
 
                call    WR_DATAPORT
 
                pop     de
 
                pop     hl
 
                in      a,(0x1f)
 
                and     0x7f
 
                ret     z
 
                dec     d
 
                push    hl
 
                push    de
 
                jr      nz,loc_2D7B
 
                halt
 
loc_2D92        ld      hl,(TRD_5CE6)                   ; для <C> - стартовый адрес, для <B>-длина программы
 
                ld      de,(TRD_5CEB)                   ; номер первого сектора файла
 
                ld      a,(TRD_5CEA)                    ; длина файла в секторах
 
                ld      b,a
 
                call    COM_05                          ; чтение секторов
 
                ret
 
 
 
GOTO            call    SET_AND_PUT
 
                call    EXIT_IF_SINTAX                  ; возврат в предыдущий вызов,если проверка синтаксиса
 
                call    INP_EXTFILENAME                 ; прием расширения файла
 
                call    SET_FILENAME                    ; перенос заданного имени файла в буфер 0x5CDD
 
                ld      (4020h),bc
 
                ld      a,c
 
                cp      8
 
                jr      nc,loc_2DD2
 
                call    COM_18                          ; настройка на дискету
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jp      nz,ERR_NOFILES
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                ld      bc,(4020h)
 
                add     hl,bc
 
                ld      (hl),"8"
 
                push    hl
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                pop     hl
 
                jr      z,loc_2DD8
 
                ld      (hl)," "
 
loc_2DD2        call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jp      loc_2E33
 
 
 
loc_2DD8        call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                call    loc_2D92
 
                ld      sp,40FFh
 
                ld      b,8
 
loc_2DE3        push    bc
 
                ld      a,b
 
                ld      bc,7FFDh
 
                dec     a
 
                push    af
 
                or      10h
 
                out     (c),a
 
                pop     af
 
                add     a,"0"
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                ld      bc,(4020h)
 
                add     hl,bc
 
                ld      (hl),a
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                jr      nz,loc_2E05
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                call    loc_2D92
 
loc_2E05        pop     bc
 
                djnz    loc_2DE3
 
                ld      a," "
 
                ld      hl,TRD_5CDD                     ; имя файла
 
                ld      bc,(4020h)
 
                add     hl,bc
 
                ld      (hl),a
 
                call    FIND_FILENAME                   ; поиск файла по имени файла
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
                push    bc
 
                push    af
 
                ld      bc,7FFDh
 
                ld      a,(4101h)
 
                out     (c),a
 
                pop     af
 
                pop     bc
 
                jr      loc_2E39
 
 
 
                call    SET_AND_PUT
 
                call    EXIT_IF_SINTAX                  ; возврат в предыдущий вызов, если проверка синтаксиса
 
                call    INP_EXTFILENAME                 ; прием расширения файла
 
                call    FIND_FILE                       ; поиск файла по имени
 
loc_2E33        jp      nz,ERR_NOFILES
 
                call    RDHEAD_FILENAME                 ; чтение описателя файла
 
loc_2E39        ld      a,(TRD_5CDD)                    ; имя файла
 
                cp      "$"
 
                di
 
                jr      nz,loc_2E43
 
                im      2
 
loc_2E43        ld      sp,40F0h
 
                call    GET_TYPE_DISK                   ; получение кода режима работы дисковода
 
                ld      (4010h),a
 
                ld      a,(TRD_5D16)                    ; копия системного регистра (порт 0xFF)
 
                ld      (4011h),a
 
                ld      hl,(TRD_5CE6)                   ; для <C> - стартовый адрес, для <B> - длина программы
 
                push    hl
 
                ld      de,(TRD_5CEB)                   ; номер первого сектора файла
 
                push    de
 
                inc     e
 
                ld      a,e
 
                cp      10h
 
                jr      nz,loc_2E64
 
                ld      e,0
 
                inc     d
 
loc_2E64        ld      c,d
 
                call    sub_2F07
 
                ld      a,(4010h)
 
                and     2
 
                call    nz,sub_2F0F
 
                ld      a,c
 
                call    loc_2F50
 
                ld      hl,4100h
 
                ld      b,0BFh
 
loc_2E79        push    bc
 
                push    de
 
                call    sub_2F1B
 
                ld      de,100h
 
                add     hl,de
 
                pop     de
 
                inc     e
 
                ld      a,e
 
                cp      10h
 
                jr      nz,loc_2E9C
 
                ld      e,0
 
                inc     d
 
                ld      c,d
 
                call    sub_2F07
 
                ld      a,(4010h)
 
                and     2
 
                call    nz,sub_2F0F
 
                ld      a,c
 
                call    loc_2F50
 
loc_2E9C        pop     bc
 
                djnz    loc_2E79
 
                pop     de
 
                pop     hl
 
                ld      sp,hl
 
                ld      a,(4011h)
 
                push    af
 
                ld      c,d
 
                call    sub_2F07
 
                ld      a,(4010h)
 
                and     2
 
                call    nz,sub_2F0F
 
                ld      a,c
 
                call    loc_2F50
 
                ld      hl,4000h
 
                call    sub_2F1B
 
loc_2EBC        pop     af
 
                ex      af,af'
 
                pop     af
 
                ld      r,a
 
                pop     af
 
                ld      i,a
 
                di
 
                ld      a,0FFh
 
                jp      po,loc_2ECC
 
                ld      a,0
 
loc_2ECC        ld      (KSTATE0),a
 
                pop     af
 
                pop     hl
 
                pop     de
 
                pop     bc
 
                exx
 
                ex      af,af'
 
                pop     iy
 
                pop     ix
 
                pop     hl
 
                pop     de
 
                pop     bc
 
                ld      a,(BORDCR)
 
                and     38h
 
                rrca
 
                rrca
 
                rrca
 
                out     (0FEh),a
 
                ld      a,(SWAP_8)
 
                cp      0EEh
 
                jr      nz,loc_2EF7
 
                push    bc
 
                ld      bc,7FFDh
 
                ld      a,(BANKM)
 
                out     (c),a
 
                pop     bc
 
loc_2EF7        ld      a,(KSTATE0)
 
                or      a
 
                ld      a,0C9h
 
                ld      (KSTATE0),a
 
                jr      nz,loc_2F03
 
                ei
 
loc_2F03        pop     af
 
                jp      KSTATE0
 
 
 
sub_2F07        ld      a,(4011h)
 
                or      0x3c
 
loc_2F0C        out     (0xff),a
 
                ret
 
 
 
sub_2F0F        ld      a,c
 
                or      a
 
                rra
 
                ld      c,a
 
                ret     nc
 
                ld      a,(4011h)
 
                and     0x6f                            ; LORD OF CHAOS
 
                jr      loc_2F0C
 
 
 
sub_2F1B        ld      a,e                             ; EXOLON
 
                inc     a
 
                out     (0x5f),a
 
                push    hl
 
                ld      d,0x14
 
                push    de
 
loc_2F23        di
 
                ld      c,0x7f
 
                ld      a,0x80
 
                out     (0x1f),a
 
                call    RD_DATAPORT
 
                pop     de
 
                pop     hl
 
                in      a,(0x1f)
 
                and     0x7f
 
                ret     z
 
                dec     d
 
                push    hl
 
                push    de
 
                jr      nz,loc_2F23
 
                halt
 
sub_2F3A        ld      a,3Ch
 
                out     (0FFh),a
 
                ld      a,(KSTATE0)
 
                and     8
 
                jr      nz,loc_2F4F
 
                ld      a,c
 
                or      a
 
                rra
 
                ld      c,a
 
                jr      nc,loc_2F4F
 
                ld      a,2Ch
 
                out     (0xff),a
 
loc_2F4F        ld      a,c
 
loc_2F50        out     (0x7f),a
 
                call    PAUSE725779T
 
                ld      a,0x18
 
loc_2F57        out     (0x1f),a
 
loc_2F59        in      a,(0xff)
 
                and     0x80
 
                jr      z,loc_2F59
 
                push    bc
 
                call    PAUSE725779T
 
                pop     bc
 
                ret
 
 
 
sub_2F65        ld      a,0x08                          ; SOLDIER OF THE FUTURE
 
                jr      loc_2F57
 
 
 
WORK4ERROR      ld      hl,(TRD_5D1C)                   ; сохранение регистра SP
 
                dec     hl
 
                dec     hl
 
                ld      sp,hl
 
                jp      loc_1D2F
 
 
 
CALL2BASIC      ld      (TRD_5D02),hl
 
                ld      (TRD_5D04),de
 
                pop     hl
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                inc     hl
 
                push    hl
 
                ld      hl,loc_3D2F
 
                push    hl
 
                push    de
 
                ld      hl,TRD_5CC2
 
                push    hl
 
                ld      hl,(TRD_5D02)
 
                ld      de,(TRD_5D04)
 
                ret
 
 
 
SET_VARS        LD HL,0xFFFF
 
                ld      (TRD_5CFA),hl                   ; время перемещения дисковода A
 
                ld      (TRD_5CFC),hl                   ; время перемещения дисковода C
 
                ld      (TRD_5CC8),hl                   ; режим работа дисковода A
 
                ld      (TRD_5CCA),hl                   ; режим работа дисковода C
 
                xor     a
 
                ld      (TRD_5D17),a                    ; рисование заставки, если 0xAA
 
                ld      (TRD_5D19),a                    ; дисковод по умолчанию
 
                ld      (TRD_5D18),a
 
                ld      (TRD_5D0F),a                    ; номер ошибки TR-DOS
 
                ld      (TRD_5D1F),a
 
                ld      a,0xff
 
                out     (0xff),a
 
                ld      (ERR_NR),a
 
                ld      (TRD_5D16),a                    ; копия системного регистра (порт 0xFF)
 
                ld      (TRD_5D0C),a
 
                ld      a,0xc9
 
                ld      (TRD_5CC2),a
 
                ld      a,0xd0
 
                out     (0x1f),a
 
                ret
 
 
 
CP_END_CAT      call    CP_END_BUF
 
                ld      a,(hl)
 
                or      a
 
                jp      z,END_OUT_DIR
 
                cp      1
 
                call    z,ADD_10
 
                ret     nz
 
                jr      CP_END_CAT
 
 
 
LOAD_SEC2BUF    ld      b,1
 
                ld      hl,TRD_5D25
 
                jp      loc_1E67
 
 
 
LOAD_END_FILE   push    hl
 
                ld      de,(TRD_5CF4)
 
                call    LOAD_SEC2BUF
 
                ld      a,(TRD_5CDB)
 
                pop     de
 
                or      a
 
                ret     z
 
                ld      c,a
 
                ld      hl,TRD_5D25
 
                ldir
 
                ret
 
 
 
; ТАБЛИЦА БЕЙСИК КОМАНД ДЛЯ TR-DOS
 
CODE_BYTE_COM   db __CAT
 
                db "*"
 
                db __FORMAT
 
                db __MOVE
 
                db __NEW
 
                db __ERASE
 
                db __LOAD
 
                db __SAVE
 
                db __RETURN
 
                db __PEEK
 
                db __POKE
 
                db __MERGE
 
                db __RUN
 
                db __OPEN
 
                db __CLOSE
 
                db __COPY
 
                db "4"
 
                db __GOTO
 
                db "8"
 
                db __LIST
 
                db __VERIFY
 
ECODE_BYTE_COM
 
 
 
; таблица адресов исполнения команд
 
SPIS_ADR_COM    dw CAT
 
                dw COM_STAR
 
                dw FORMAT
 
                dw MOVE
 
                dw NEW                                  ; выполнение команды NEW
 
                dw ERASE                                ; выполнение команды ERASE
 
                dw LOAD
 
                dw SAVE
 
                dw RETURN
 
                dw PEEK
 
                dw POKE
 
                dw MERGE
 
                dw RUN
 
                dw OPEN
 
                dw CLOSE
 
                dw COPY
 
                dw COM_40
 
                dw GOTO
 
                dw COM_80
 
                dw LIST
 
                dw VERIFY
 
 
 
SAE2E_LINE      ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                ld      (TRD_5D11),hl                   ; адрес строки команды TR-DOS
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ld      a,0xff
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ld      hl,TRD_5CDB
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                jr      loc_3057
 
 
 
SAE2_HL_        ld      (TRD_5D11),hl                   ; АДРЕС СТРОКИ КОМАНДЫ TR-DOS
 
                ld      (TRD_5CD9),hl                   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> и <C>
 
                call    CP_ADR_STR
 
                ret     nz
 
                inc     hl
 
                inc     hl
 
                ld      (TRD_5CD7),hl                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
loc_3057        call    CMP_SPECSYM
 
                jr      nz,loc_3087
 
                ex      de,hl
 
                inc     de
 
                ld      b,0
 
                ld      hl,BYTES_COM
 
                add     hl,bc
 
                ld      a,(hl)
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      (hl),a
 
                inc     hl
 
                ex      de,hl
 
                rst     0x20
 
                dw      0x19dd
 
                push    bc
 
                rst     20h
 
                dw      19E8h
 
                pop     bc
 
                ld      a,(TRD_5CD6)                    ; 0FF - команда принята синтаксическим анализатором
 
                or      a
 
                jr      nz,loc_3087
 
                ld      hl,(TRD_5CD7)                   ; промежуточный старт файла или кол-во треков
 
                                                        ; после проверки типа дисковода
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ex      de,hl
 
                or      a
 
                sbc     hl,bc
 
                ex      de,hl
 
                ld      (hl),d
 
                dec     hl
 
                ld      (hl),e
 
loc_3087        ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      a,(hl)
 
                cp      0x0d
 
                ret     z
 
                inc     hl
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                ld      a,(hl)
 
                cp      0x0d
 
                ret     z
 
                cp      0x22
 
                jr      nz,loc_3057
 
loc_309A        inc     hl
 
                ld      a,(hl)
 
                cp      0x0d
 
                ret     z
 
                cp      0x22
 
                jr      nz,loc_309A
 
                inc     hl
 
                ld      (TRD_5CD9),hl                   ; промежуточная длина для <B> и <C>
 
                jr      loc_3057
 
 
 
FIND_KEYWORD    ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                ld      de,TBL_KEYWORD                  ; "SAVE"
 
                ld      c,0
 
loc_30B1        ld      a,(hl)
 
                and     0xdf
 
                ld      b,a
 
                or      a
 
                jr      nz,loc_30BB
 
                inc     hl
 
                jr      loc_30B1
 
 
 
loc_30BB        ld      a,(de)
 
                and     0x80
 
                jr      nz,loc_30C8
 
                ld      a,(de)
 
                cp      b
 
                jr      nz,loc_30D9
 
                inc     hl
 
                inc     de
 
                jr      loc_30B1
 
 
 
loc_30C8        ld      a,(de)
 
                and     0x7f
 
                cp      b
 
                ret     z
 
loc_30CD        inc     c
 
                ld      hl,(TRD_5CD9)                   ; промежуточная длина для <B> и <C>
 
                inc     de
 
                ld      a,(de)
 
                cp      0xff
 
                jr      nz,loc_30B1
 
                or      a
 
                ret
 
 
 
loc_30D9        inc     de
 
                ld      a,(de)
 
                and     0x80
 
                jr      z,loc_30D9
 
                jr      loc_30CD
 
 
 
CP_ADR_STR      ld      hl,(PPC)
 
                inc     hl
 
                inc     hl
 
                ld      a,h
 
                or      l
 
                jr      z,loc_30F4
 
                xor     a
 
                ld      (TRD_5CD6),A                    ; 0xFF - команда принята синтаксическим анализатором
 
                dec     hl
 
                dec     hl
 
                rst     0x20
 
                dw      0x196e
 
                ret
 
 
 
loc_30F4        ld      a,0xff
 
                ld      (TRD_5CD6),a                    ; 0xFF - команда принята синтаксическим анализатором
 
                ld      hl,(E_LINE)                     ; адрес начала редактируемой строки
 
                ret
 
 
 
;ТАБЛИЦА КЛЮЧЕВЫХ СЛОВ
 
TBL_KEYWORD     DB "SAVE",0x80
 
                DC "SAVE"
 
                DB "LOAD",0x80
 
                DC "LOAD"
 
                DB "RUN",0x80
 
                DC "RUN"
 
                DB "CAT",0x80
 
                DC "CAT"
 
                DB "ERASE",0x80
 
                DC "ERASE"
 
                DB "NEW",0x80
 
                DC "NEW"
 
                DB "MOVE",0x80
 
                DC "MOVE"
 
                DB "MERGE",0x80
 
                DC "MERGE"
 
                DB "PEEK",0x80
 
                DC "PEEK"
 
                DB "POKE",0x80
 
                DC "POKE"
 
                DB "OPEN",0x83
 
                DB "CLOSE",0x83
 
                DB "CODE",0x80
 
                DC "CODE"
 
                DB "RND",0x80
 
                DC "RND"
 
                DB "DATA",0x80
 
                DC "DATA"
 
                DB "SCREEN",4,0x84
 
                DB "SCREEN",0x84
 
                DB "COPY",0x80
 
                DC "COPY"
 
                DB "FORMAT",0x80
 
                DC "FORMAT"
 
                DB "GOTO",0x80
 
                DC "GOTO"
 
                DB "LIST",0x80
 
                DC "LIST"
 
                DB "LINE",0x80
 
                DC "LINE"
 
                DB "VERIFY",0x80
 
                DC "VERIFY"
 
                DB 0xff,0xff
 
 
 
; байтовые коды ключевых слов
 
BYTES_COM       dw __SAVE << 8 + __SAVE
 
                dw __LOAD << 8 + __LOAD
 
                dw __RUN << 8 + __RUN
 
                dw __CAT << 8 + __CAT
 
                dw __ERASE << 8 + __ERASE
 
                dw __NEW << 8 + __NEW
 
                dw __MOVE << 8 + __MOVE
 
                dw __MERGE << 8 + __MERGE
 
                dw __PEEK << 8 + __PEEK
 
                dw __POKE << 8 + __POKE
 
                dw __CLOSE << 8 + __OPEN
 
                dw __CODE << 8 + __CODE
 
                dw __RND << 8 + __RND
 
                dw __DATA << 8 + __DATA
 
                dw __SCREENS << 8 + __SCREENS
 
                dw __COPY << 8 + __COPY
 
                dw __FORMAT << 8 + __FORMAT
 
                dw __GOTO << 8 + __GOTO
 
                dw __LIST << 8 + __LIST
 
                dw __LINE << 8 + __LINE
 
                dw __VERIFY << 8 + __VERIFY
 
                db 0
 
 
 
CP_VARSTRDOS    LD HL,(CHANS)
 
                or      a
 
                ld      bc,TRD_5D25
 
                sbc     hl,bc
 
                ret
 
 
 
; ===============FREE SPACE 2============
 
; ===============FREE SPACE 2============
 
 
 
                TITLE "evo-dos.a80"
 
 
 
                DUPL 0X3C01-$,0XFF
 
                jr      loc_3C06
 
 
 
                db      0xff
 
                jr      loc_3C09
 
 
 
loc_3C06        jp      loc_3D00
 
 
 
loc_3C09        jp      loc_3D03
 
 
 
; ===============FREE SPACE 3============
 
        DUPL 0X3C30-$,0XFF
 
                IN A,(0X1F)
 
                RET
 
 
 
        DUPL 0X3C50-$,0XFF
 
                JP HC_REZIDENT
 
 
 
        DUPL ADR_RST8END-$,0XFF
 
                JP EDOS2RST8
 
; ===============FREE SPACE 3============
 
 
 
        DUPL 0X3CFA-$,0XFF
 
loc_3CFA        nop
 
                jr      loc_3D2F
 
 
 
loc_3CFD        jp      CALL_3D13
 
 
 
; вход в DOS (15616)
 
loc_3D00        nop
 
                jr      IN_DOS_15616
 
 
 
; обращение из бейсика (15619)
 
loc_3D03        nop
 
                jr      IN_DOS_15619
 
 
 
loc_3D06        nop
 
                jp      INPUTDATAFILE
 
 
 
loc_3D0A        jp      OUT_SYM2FILE
 
 
 
                nop
 
loc_3D0E        jr      loc_3D0A
 
 
 
                nop
 
                jr      loc_3CFA
 
 
 
                nop
 
                jr      loc_3CFD
 
 
 
loc_3D16        nop
 
                jp      WORK4ERROR
 
 
 
IN_DOS_15619    call    CREATE_VARS_TRD
 
                push    hl
 
                jp      CONTINUE_15619
 
 
 
CREATE_VARS_TRD call    CP_VARSTRDOS
 
                nop
 
                nop
 
                call    c,JMP_CREATE_VARS
 
                ld      hl,TRD_5CC2
 
                ret
 
 
 
                nop
 
                nop
 
loc_3D2F        nop
 
                ret
 
 
 
IN_DOS_15616    call    CREATE_VARS_TRD
 
                push    hl
 
                jp      IN_COMMAND_CPU                  ; вхождение в командный процессор доса
 
 
 
INI_INTERFACE1  xor     a
 
                DUPL 2,0
 
                in      a,(0xf7)
 
                cp      0x1e
 
                jr      z,loc_3D44
 
                cp      0x1f
 
                ret     nz
 
loc_3D44        rst     8
 
                db      0x31
 
                ld      a,1
 
                ld      (TRD_5CEF),a
 
                ret
 
 
 
JMP_CREATE_VARS xor     a
 
                out     (0xff),a
 
                in      a,(0xf6)
 
                ld      hl,INI_INTERFACE1
 
                ld      de,MEMBOT
 
                ld      bc,0x14
 
                ldir                                    ; ADS
 
                ld      hl,CREATE_VARS
 
                push    hl
 
                LD      hl,loc_3D2F
 
                push    hl
 
                jp      MEMBOT
 
 
 
CREATE_VARS     ld      hl,SET_VARS
 
                push    hl
 
                ld      hl,loc_3D2F
 
                push    hl
 
                ld      hl,0x1655
 
                push    hl
 
                ld      hl,TSTACK_END
 
                push    hl
 
                ld      (hl),0xc9
 
                ld      hl,P_RAMT+1
 
                ld      bc,0x70
 
                ret
 
 
 
PRINT_0D        ld      a,0x0d
 
PRINT_A_        push    hl
 
                push    bc
 
                push    de
 
                JR PRINT_A_RET
 
 
 
        DUPL 3
 
 
 
WR_BYTE_RET     OUT (C),A
 
                RET
 
 
 
PRINT_A_RET     call    PRINT_SYM
 
                pop     de
 
                pop     bc
 
                pop     hl
 
                ret
 
 
 
PRINT_SYM       rst     0x20
 
                dw      0x10
 
                ret
 
 
 
; восстановление ВГ93
 
COM_00          ld      a,0x08
 
COM2VG_WAIT     out     (0x1f),a
 
loc_3D9C        push    hl
 
                rst     0x20
 
                dw      0x1f54
 
                jr      c,loc_3DA5
 
                rst     0x20
 
                dw      0x1b7b
 
loc_3DA5        pop     hl
 
                in      a,(0xff)
 
                and     0x80
 
                jr      z,loc_3D9C
 
                ret
 
 
 
CP_PRESENT_DISK ld      a,0x08
 
                call    COM2VG_WAIT
 
                ld      de,0
 
                in      a,(0x1f)
 
                and     2
 
                ld      b,a
 
loc_3DBA        in      a,(0x1f)
 
                and     2
 
                cp      b
 
                ret     nz
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,loc_3DBA
 
                jp      loc_3EE7
 
 
 
; выбор дисковода по умолчанию
 
ACTIV_DEF_DSK   ld      a,(TRD_5D19)                    ; дисковод по умолчанию
 
; настройка на дисковод
 
COM_01          ld      (TRD_5CF6),a                    ; настройка на дисковод
 
                ld      hl,TRD_5D16                     ; копия системного регистра (порт 0xFF)
 
                ld      c,a
 
                ld      a,3Ch
 
                or      c
 
                out     (0FFh),a
 
                ld      (hl),a
 
                call    GET_TIME_HEAD   ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
 
                and     80h
 
                jr      z,loc_3DFA
 
                call    CP_PRESENT_DISK ; ПРОВЕРКА НАЛИЧИЯ ДИСКА
 
                call    CP_TIME_GOHEAD  ; ОПРЕДЕЛЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
 
                call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
 
                cp      0FFh
 
                jr      nz,loc_3DFA
 
                push    hl
 
                call    CP_DISK_TRACK
 
                pop     hl
 
                cp      80              ; ПРОВЕРКА НА 80 ДОРОЖЕК
 
                ld      a,0
 
                jr      nz,loc_3DF9
 
                ld      a,80h
 
loc_3DF9        ld      (hl),a
 
loc_3DFA        call    WR_NUM_TRACK
 
PAUSE725779T    ld      a,0x50
 
PAUSE_C_A       ld      c,0xff
 
loc_3E01        dec     c
 
                jr      nz,loc_3E01
 
                dec     a
 
                jr      nz,PAUSE_C_A
 
                ret
 
 
 
; получение времени перемещения головки
 
GET_TIME_HEAD   ld      de,TRD_5CFA                     ; время перемещения дисковода A
 
loc_3E0B        ld      hl,(TRD_5CF6)                   ; дисковод для временной операции
 
                add     hl,de
 
                ld      a,(hl)
 
                ret
 
 
 
GET_TYPE_DISK   ld      de,TRD_5CC8                     ; режим работа дисковода A
 
                jr      loc_3E0B
 
 
 
; определение времени перемещения головки
 
CP_TIME_GOHEAD  call    GET_TIME_HEAD                   ; получение времени перемещения головки
 
                ld      b,8
 
                ld      c,4
 
loc_3E1D        ld      (hl),b
 
                ld      a,0Bh
 
                call    COM2VG_WAIT
 
                ld      a,20h
 
                ld      b,0Bh
 
                call    HEAD_POSITION
 
                ld      b,(hl)
 
                ld      a,1
 
                call    HEAD_POSITION
 
                in      a,(1Fh)
 
                and     4
 
                jr      nz,loc_3E3F
 
                xor     a
 
                call    HEAD_POSITION
 
                in      a,(1Fh)
 
                and     4
 
                ret     nz
 
loc_3E3F        inc     b
 
                dec     c
 
                ret     z
 
                jr      loc_3E1D
 
 
 
HEAD_POSITION   out     (0x7f),a
 
                ld      a,b
 
                or      0x18
 
                jp      COM2VG_WAIT
 
 
 
POSITIONIREN    out     (0x7f),a
 
                push    bc
 
                ld      b,a
 
                in      a,(0x3f)
 
                cp      b
 
                pop     bc
 
                push    af
 
                ld      a,b
 
                or      0x18
 
                call    COM2VG_WAIT
 
                pop     af
 
                ret     z
 
                push    bc
 
                call    PAUSE725779T
 
                pop     bc
 
                ret
 
 
 
; установка головки на дорожку
 
COM_02          ld      c,a
 
                call    COM_16
 
                call    GET_TYPE_DISK
 
                and     2
 
                call    nz,SET_SIDE_DSK
 
                push    bc
 
                bit     7,(hl)
 
                jr      z,loc_3E83
 
                bit     0,(hl)
 
                jr      nz,loc_3E83
 
                in      a,(0x3f)
 
                cp      c
 
                jr      z,loc_3E82
 
                rlca
 
                out     (0x3f),a
 
                ld      a,c
 
                rlca
 
loc_3E82        ld      c,a
 
loc_3E83        call    GET_TIME_HEAD                   ; получение времени перемещения головки
 
                ld      b,a
 
                in      a,(3Fh)
 
                cp      c
 
                push    bc
 
                call    nz,PAUSE725779T
 
                pop     bc
 
                ld      a,c
 
                call    POSITIONIREN
 
                pop     bc
 
                ld      a,c
 
                out     (0x3f),a
 
                ld      a,(TRD_5CCD)                    ; 0x80 - готовность дисковода
 
                or      a
 
                ret     z
 
                xor     a
 
                ld      (TRD_5CCD),a                    ; 0x80 - готовность дисковода
 
PAUSE_3_C_A     ld      b,3
 
loc_3EA2        ld      a,0xff
 
                call    PAUSE_C_A
 
                djnz    loc_3EA2
 
                ret
 
 
 
SET_SIDE_DSK    ld      a,c
 
                or      a
 
                rra
 
                ld      c,a
 
                ret     nc
 
                jp      COM_17
 
 
 
GET_NUM_TRACK   call    COM_16
 
loc_3EB5        in      a,(0x1f)
 
                and     0x80
 
                ld      (TRD_5CCD),a                    ; 0x80 - готовность дисковода
 
                in      a,(0x3f)
 
                ld      h,a
 
                call    BUGFIX_3EBF                     ; PATCH ERROR
 
                ld      c,0x7f
 
                ld      d,1
 
                di
 
                ld      a,0xc0
 
                out     (0x1f),a
 
                push    bc
 
                ld      b,3
 
loc_3ECE        in      a,(0xff)
 
                and     0xc0
 
                jr      nz,loc_3EF2
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,loc_3ECE
 
                djnz    loc_3ECE
 
                pop     bc
 
                ei
 
                ld      a,0xd0
 
                out     (0x1f),a
 
                ld      a,(TRD_5D17)
 
                cp      0xff
 
                ret     z
 
loc_3EE7        call    SET_TAPELDERR
 
                ld      a,0xff
 
                ld      (TRD_5D17),a                    ; рисование заставки, если 0xAA
 
                jp      loc_271B
 
 
 
loc_3EF2        pop     bc
 
                in      h,(c)
 
loc_3EF5        in      a,(0xff)
 
                and     0xc0
 
                jr      z,loc_3EF5
 
                ei
 
                ret     m
 
                di
 
                in      a,(0x7f)
 
                jr      loc_3EF5
 
 
 
; установка номера сектора
 
COM_03          ld      (TRD_5CFF),a
 
                ret
 
 
 
; установка адреса буфера
 
COM_04          ld      (TRD_5D00),hl
 
                ret
 
 
 
SAVE_SECTOR     ld      a,0xa0
 
                jr      loc_3F10
 
 
 
LOAD_SECTOR     ld      a,0x80
 
loc_3F10        ld      (TRD_5CFE),a
 
loc_3F13        ld      d,0x0a
 
loc_3F15        push    de
 
                di
 
                ld      a,(TRD_5CFF)
 
                inc     a
 
                out     (0x5f),a
 
                ld      hl,(TRD_5D00)
 
                ld      c,0x7f
 
                ld      a,(TRD_5CFE)
 
                out     (0x1f),a
 
                cp      0xa0
 
                push    af
 
                call    z,WRITE_SEC
 
                pop     af
 
                call    nz,READ_SEC
 
                pop     de
 
                ei
 
                in      a,(0x1f)
 
                ld      b,a
 
                and     0x7f
 
                ret     z
 
loc_3F39        ld      hl,READ_ONLY                    ; READ ONLY
 
                and     0x40
 
                jr      nz,loc_3F4B
 
                ld      a,b
 
                and     4
 
                jr      z,loc_3FA0
 
                dec     d
 
                jr      nz,loc_3F15
 
loc_3F48        ld      hl,TXT_DISCERROR_               ; DISC ERROR
 
loc_3F4B        ld      a,0xd0
 
                out     (0x1f),a
 
                ld      a,b
 
                and     1
 
                jp      nz,loc_3EE7
 
                in      a,(0x3f)
 
                or      a
 
                jr      nz,loc_3F5F
 
                in      a,(0x5f)
 
                cp      0x0a
 
                ret     z
 
loc_3F5F        push    hl
 
                call    CLEAR_SCREEN                    ; очистка основного экрана
 
                pop     hl
 
                rst     0x18
 
                ld      hl,TXT_TRK_                     ; TRACK
 
                rst     0x18
 
                in      a,(0x3f)
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_SEC_                     ; SECTOR
 
                rst     0x18
 
                in      a,(0x5f)
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_RIA_
 
                rst     0x18
 
loc_3F7B        call    GET_KEYS                        ; ожидание нажатия клавиши
 
                cp      "I"                             ; IGNORE - возврат в адрес 0x1E8E
 
                ret     z
 
                cp      "R"                             ; RETRY
 
                jr      z,PRESS_RETRY
 
                cp      "A"                             ; ABORT
 
                jr      nz,loc_3F7B
 
                call    SET_TAPELDERR                   ; PRESS ABORT
 
                ld      a,7
 
                ld      (TRD_5D0F),a                    ; номер ошибки TR-DOS
 
                jp      END_COMAND
 
 
 
PRESS_RETRY     ld      a,(TRD_5CF5)
 
                call    COM_02
 
                call    PAUSE_3_C_A
 
                jp      loc_3F13
 
 
 
loc_3FA0        dec     d
 
                jp      z,loc_3F48                      ; DISC ERROR
 
                push    de
 
                call    GET_TIME_HEAD                   ; получение времени перемещения головки
 
                and     2
 
                jr      nz,loc_3FAD
 
                inc     (hl)
 
loc_3FAD        call    COM_00
 
                ld      a,(TRD_5CF5)
 
                call    COM_02
 
                pop     de
 
                jp      loc_3F15
 
 
 
WRITE_SEC       ld      b,4
 
loc_3FBC        in      a,(0xff)
 
                and     0xc0
 
                jr      nz,loc_3FD1
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,loc_3FBC
 
                djnz    loc_3FBC
 
                ret
 
 
 
WR_DATAPORT     in      a,(0xff)
 
                and     0xc0
 
                jr      z,WR_DATAPORT
 
                ret     m
 
loc_3FD1        outi
 
                jr      WR_DATAPORT
 
 
 
READ_SEC        ld      b,4
 
loc_3FD7        in      a,(0xff)
 
                and     0xc0
 
                jr      nz,loc_3FEC
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,loc_3FD7
 
                djnz    loc_3FD7
 
                ret
 
 
 
RD_DATAPORT     in      a,(0xff)
 
                and     0xc0
 
                jr      z,RD_DATAPORT
 
                ret     m
 
loc_3FEC        ini
 
                jr      RD_DATAPORT
 
 
 
                OUT (C),A
 
FOR_RET         RET
 
 
 
                IN A,(C)
 
                RET
 
 
 
        DUPL 0X3FF8-$,0XFF
 
                DB "NEODOS"
 
                DW DATA_VERS