;LAST UPDATE: 07.08.2017 savelij
 
 
 
                include ../../macros.a80
 
                include ../../bas_trd_vars.a80
 
                include ../../basic_tokens.a80
 
 
 
                ORG 0
 
                di
 
                ld      de,0FFFFh
 
                ld      a,7
 
                jr      loc_9
 
 
 
RST_8           nop
 
loc_9           out     (0FEh), a
 
                ld      a,3Fh
 
                jr      loc_13
 
 
 
                nop
 
RST_10          jp      PRINT_A_
 
 
 
loc_13          ld      i,a
 
                jp      loc_1B
 
 
 
RST_18          jp      PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
 
 
 
loc_1B          nop
 
                nop
 
                nop
 
                jr      loc_24
 
 
 
RST_20          jp      CALL2BASIC
 
 
 
                ret
 
 
 
loc_24          ld      h,d
 
                ld      l,e
 
                jr      loc_2B
 
 
 
RST_28          jp      ADR_OPEN_CHAN
 
 
 
loc_2B          ld      (hl),2
 
                dec     hl
 
                cp      h
 
                jr      nz,loc_2B
 
                jr      loc_3A
 
 
 
                DUPL 0X0038-$,0FFh
 
RST_38          ei
 
                ret
 
 
 
loc_3A          or      a
 
                sbc     hl,de
 
                add     hl,de
 
                inc     hl
 
                jr      nc,loc_47
 
                dec     (hl)
 
                jr      z,loc_47
 
                dec     (hl)
 
                jr      z,loc_3A
 
loc_47          dec     hl
 
loc_48          ld      (P_RAMT),hl
 
                ld      de,3EAFh        ; АДРЕС UDG В ПЗУ 48К
 
                ld      bc,0A8h
 
                ld      a,e
 
                ex      de,hl
 
                ld      sp,6000h
 
                ld      (TRD_5F00),hl
 
                ld      hl,loc_79
 
                push    hl
 
                ld      hl,loc_3D2F
 
                push    hl
 
                ld      hl,0B8EDh       ; LDDR
 
                jr      EXECUTECOM2HL
 
 
 
                jp      MAGIC
 
 
 
EXECUTECOM2HL   ld      (TRD_5F10),hl
 
                push    af
 
                ld      a,0C9h
 
                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
 
;===============PATCH
 
;               ld      bc,1E40h
 
                ld      bc,0x40                         ;НАДОЕЛ ЭТОТ ПИСК ПО СБРОСУ
 
;===============PATCH
 
                ld      (RASP), bc
 
                ld      (RAMTOP),hl
 
                ld      hl,3C00h        ; АДРЕС ОСНОВНОГО ФОНТА В 48К
 
                ld      (CHARS),hl
 
                ld      hl,(RAMTOP)
 
                ld      (hl),3Eh
 
                dec     hl
 
                ld      sp,hl
 
                dec     hl
 
                dec     hl
 
                ld      (ERR_SP),hl
 
                ld      de,1303h
 
                push    de
 
                im      1
 
                ld      iy,ERR_NR
 
                ld      hl,TRD_5CB6     ; ДЛЯ ПРОВЕРКИ НАЛИЧИЯ INTERFACE1
 
                ld      (CHANS),hl
 
                ld      de,15AFh
 
                ld      bc,15h
 
                ex      de,hl
 
                call    COPY_BAS2VARS
 
                ex      de,hl
 
                dec     hl
 
                ld      (DATADD),hl
 
                inc     hl
 
                ld      (PROG),hl
 
loc_BE          ld      (VARS),hl
 
                ld      (hl),80h
 
                inc     hl
 
                ld      (E_LINE),hl     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
 
                ld      (hl),0Dh
 
                inc     hl
 
                ld      (hl),80h
 
                inc     hl
 
                ld      (WORKSP),hl
 
                ld      (STKBOT),hl
 
                ld      (STKEND),hl
 
                ld      a,38h
 
                ld      (ATTR_P),a
 
                ld      (ATTR_T),a
 
                ld      (BORDCR),a
 
                ld      hl,523h
 
                ld      (REPDEL),hl
 
                dec     (iy-3Ah)
 
                dec     (iy-36h)
 
                ld      hl,15C6h
 
                ld      de,STRMS
 
                ld      bc,0Eh
 
                call    COPY_BAS2VARS
 
                set     1,(iy+1)
 
                ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                ld      (hl),0C9h
 
                rst     20h
 
                dw 0EDFh                ; очистка буфера принтера
 
                ld      hl,DF_SZ
 
                ld      (hl),2
 
                ld      hl,128Bh
 
                push    hl
 
                ld      a,0AAh
 
;===============PATCH
 
;               ld      (SWAP),a
 
                ld      (NOT_USED),a
 
;===============PATCH
 
                ei
 
                jp      IN_DOS_15616
 
 
 
COPY_BAS2VARS   ld      (TRD_5F00),hl
 
                ld      hl,loc_3D2F
 
                push    hl
 
                ld      hl,0B0EDh       ; 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
 
                xor     a
 
                ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
 
loc_140         push    hl
 
                call    RESTORE_SP      ; ВОССТАНОВЛЕНИЕ ПЕРЕХВАТЧИКА ОШИБОК
 
                pop     hl
 
                ld      (NEWPPC),hl
 
                xor     a
 
                ld      (NSPPS),a
 
                rst     20h
 
                dw 16B0h                ; установка области редактирования до минимума
 
                ld      hl,(PROG)
 
                dec     hl
 
                ld      (DATADD),hl
 
                ld      sp,(ERR_SP)
 
                ld      a,(TRD_5D10)    ; СТАРШИЙ БАЙТ ОШИБКИ
 
                or      a
 
                ld      hl,1B76h
 
                jr      z,loc_166
 
                rst     20h
 
                dw 1BB0h                ; сообщение "Ok"
 
loc_166         push    hl
 
                ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                push    hl
 
                ret
 
 
 
loc_16C
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                call    CREATE_BUF      ; СОЗДАНИЕ БУФЕРА
 
                ld      a,0FFh
 
                ld      (TRD_5D15),a    ; ЕСЛИ 0,ПЕЧАТАТЬ ШАПКУ TR-DOS.ИНАЧЕ НЕ ПЕЧАТАТЬ
 
                xor     a
 
                ld      (TRD_5CF7),a
 
                ld      a,0AAh
 
                ld      (TRD_5D17),a    ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
 
                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,257
 
                sbc     hl,de
 
loc_1A5         ld      (CH_ADD),hl
 
loc_1A8         call    CP_0D_OR_80
 
loc_1AB         jp      z,END_COMAND
 
                cp      0EAh            ; 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      0Dh
 
                ret     z
 
                cp      80h
 
                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     ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
 
                ld      (hl),0AAh
 
                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)
 
 
 
CP_ERROR        call    RESTORE_SP      ; ПРОВЕРКА НА ОШИБКУ
 
                bit     7,(iy+0)
 
                ret     nz
 
                ld      de,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                ld      sp,(ERR_SP)
 
                push    de
 
                ret
 
 
 
; ПОИСК КОНЦА СТРОКИ
 
FIND_ENDSTR     call    GET_SYMSTR
 
                cp      0Dh
 
                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_235         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         ; УСТАНОВКА СТЕКА ДЛЯ ПЕРЕХВАТА ОШИБОК
 
;===============PATCH
 
;2 ВЫЗОВА ПЕРЕНЕСЕНЫ ДЛЯ УСТРАНЕНИЯ ПРОПАДАНИЯ КУРСОРА
 
;ПРИ ПОВТОРНОМ ВХОДЕ В TR-DOS ИЗ МЕНЮ BASIC 128
 
                call    CLEAR_SCREEN                    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
 
                call    OPEN_CHAN_2                     ; ОТКРЫТИЕ КАНАЛА 2
 
;===============PATCH
 
                ld      hl,TRD_5D17     ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
 
                ld      a,(hl)
 
                cp      0AAh
 
                ld      a,0
 
                ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
 
                jp      z,COMMAND_CPU
 
                ld      (hl),0AAh
 
;===============PATCH
 
;               call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
 
;               call    OPEN_CHAN_2     ; ОТКРЫТИЕ КАНАЛА 2
 
;===============PATCH
 
                ld      hl,ZASTAVKA     ; FIX
 
                                        ; ТЕКСТ ЗАСТАВКИ ДОСА
 
                rst     18h
 
                call    OUT_COLOR_LINE  ; РИСОВАНИЕ ЦВЕТНЫХ ЛИНИЙ ЗАСТАВКИ ДОСА
 
;===============PATCH
 
;               ld      a,(TRD_5CB6)    ; ДЛЯ ПРОВЕРКИ НАЛИЧИЯ INTERFACE1
 
;               cp      0F4h
 
;               jr      z,loc_271       ; ПРОВЕРКА НА #AA
 
;               ld      hl,TXT_INTERFACE1 ; ТЕКСТ НАЛИЧИЯ INTERFACE1
 
;               rst     18h
 
;loc_271                ld      a,(SWAP)        ; ПРОВЕРКА НА #AA
 
                DUPL 0X271-$,0
 
                LD A,(NOT_USED)
 
;===============PATCH
 
                cp      0AAh
 
                jr      nz,COMMAND_CPU  ; ЕСЛИ НЕ #AA,ТО ВХОД В КОМАНДНЫЙ ПРОЦЕССОР
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ИНАЧЕ АВТОЗАПУСК BOOT С ДИСКА
 
                DUPL 3,0
 
;===============PATCH
 
loc_27B         ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
 
                ld      a,0FEh
 
                ld      (TRD_5D0E),a    ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
 
                ld      (hl),0F7h
 
                inc     hl
 
                ld      (hl),'"'
 
                inc     hl
 
                ld      (hl),'b'
 
                inc     hl
 
                ld      (hl),'o'
 
                inc     hl
 
                ld      (hl),'o'
 
                inc     hl
 
                ld      (hl),'t'
 
                inc     hl
 
                ld      (hl),'"'
 
                inc     hl
 
                ld      (K_CUR),hl
 
                ld      (hl),0Dh
 
                inc     hl
 
                ld      (hl),80h
 
                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
 
 
 
; FIX
 
; ОСТАНОВКА МОТОРА ДИСКОВОДА
 
STOP_MOTOR      ld      b,20h
 
loc_2BB         push    bc
 
                xor     8
 
                out     (0FFh),a
 
                push    af
 
                ld      a,5
 
                call    PAUSE_C_A
 
                pop     af
 
                pop     bc
 
                djnz    loc_2BB
 
                ret
 
 
 
COMMAND_CPU     ld      hl,(TRD_5D1C)   ; СОХРАНЕНИЕ РЕГИСТРА SP
 
                dec     hl
 
                dec     hl
 
                ld      sp,hl
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
;===============PATCH
 
                call    OPEN_CHAN_0     ; ОТКРЫТИЕ КАНАЛА 0
 
                ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                or      3
 
                call    STOP_MOTOR      ; FIX
 
                                        ; ОСТАНОВКА МОТОРА ДИСКОВОДА
 
                ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                call    STOP_MOTOR      ; FIX
 
                                        ; ОСТАНОВКА МОТОРА ДИСКОВОДА
 
                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
 
;===============PATCH
 
                LD (TRD_5CEF),A
 
;===============PATCH
 
                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     80h
 
                ld      a,b
 
                jr      z,loc_31A
 
                cp      0FEh            ; RETURN
 
                jr      z,loc_31A
 
                push    af
 
                call    ACTIV_DEF_DISK  ; ВЫБОР ДИСКОВОДА ПО УМОЛЧАНИЮ
 
                pop     af
 
loc_31A         ld      hl,CODE_BYTE_COM ; ТАБЛИЦА БЕЙСИК КОМАНД ДЛЯ TR-DOS
 
                                        ; CAT
 
                dec     hl
 
                ld      c,0
 
loc_320         inc     c
 
                ld      d,a
 
                ld      a,15h
 
                cp      c
 
;===============PATCH
 
                jp      c,END_COMAND
 
;               JP C,ENDCOMAND
 
;===============PATCH
 
                ld      a,d
 
                inc     hl
 
                cp      (hl)
 
                jr      nz,loc_320
 
                cp      0FEh            ; RETURN
 
                call    nz,CREATE_BUF   ; СОЗДАНИЕ БУФЕРА
 
                ld      a,9
 
                ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
 
                xor     a
 
                ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
 
                ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                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)
 
 
 
; FIX
 
; ТЕКСТ ЗАСТАВКИ ДОСА
 
ZASTAVKA        db 16h,1,5,"* TR-DOS Ver 5.03 *",0Dh,0Dh,7Fh
 
                db " 1986 Technology Research Ltd.",16h,5,0Bh
 
                db "(U.K.)",16h,7,5
 
                db "BETA 128",0
 
 
 
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_    ; " Free"
 
                rst     18h
 
GOTO_END        jp      END_COMAND
 
 
 
; ПЕЧАТЬ СООБЩЕНИЯ ОБ ОШИБКЕ
 
PRINT_ERROR     push    af
 
                ld      a,(TRD_5D0E)    ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
 
                cp      0FEh
 
                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      10h
 
                jr      z,CP_TYPE_DISK
 
                ld      hl,TXT_DISCERROR_
 
                rst     18h
 
                jr      GOTO_END
 
 
 
CP_TYPE_DISK    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      0Dh
 
                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      0Dh
 
                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_DISK
 
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      11h
 
                jp      nc,SINTAX_ERROR
 
                call    OPENSTREAM
 
                ld      a,0FFh
 
                ld      (TRD_5CF8),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
 
                ld      hl,TXT_TITLE_   ; "Title:"
 
                rst     18h
 
                ld      hl,TRD_5E1A
 
                rst     18h
 
                call    PRINT_0D
 
                ld      a,(TRD_5E09)
 
                ld      hl,TRD_5E19
 
                sub     (hl)
 
                push    hl
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_FILES_   ; " File(s)"
 
                rst     18h
 
                pop     hl
 
                ld      c,(hl)
 
                call    CONV2_2BYTES
 
                ld      hl,TXT_DELFILE_ ; " Del. File"
 
                rst     18h
 
                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     10h
 
                ld      b,2
 
loc_4C4         call    CP_END_DIR      ; ПРОВЕРКА ОКОНЧАНИЯ ДИРЕКТОРИИ
 
                push    bc
 
                ld      a,":"
 
                rst     10h
 
                push    hl
 
                call    PRINT_FILENAME  ; ПЕЧАТЬ ИМЕНИ ФАЙЛА
 
                ld      bc,0Dh
 
                pop     hl
 
                push    hl
 
                add     hl,bc
 
                ld      c,(hl)
 
                push    bc
 
                ld      a,c
 
                ld      b,2
 
                cp      10
 
                jr      c,loc_4DF
 
                dec     b
 
loc_4DF         cp      100
 
                jr      nc,loc_4E8
 
loc_4E3         ld      a," "
 
                rst     10h
 
                djnz    loc_4E3
 
loc_4E8         pop     bc
 
                call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
 
                pop     hl
 
                pop     bc
 
                ld      de,10h
 
                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,10h
 
                add     hl,de
 
                ret
 
 
 
; ПРОВЕРКА НА КОНЕЦ БУФЕРА
 
CP_END_BUF      push    hl
 
                push    bc
 
                ld      bc,0A1DBh
 
                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     0DFh
 
                sbc     a,"A"
 
                jp      c,SINTAX_ERROR
 
                cp      4
 
                jp      nc,SINTAX_ERROR
 
                ret
 
 
 
CP_ON_STKBOT    call    GET_STKBOT_
 
                ld      a,c
 
;===============PATCH
 
;               cp      b               ; ДОЛЖНО БЫТЬ OR B
 
                OR B
 
;===============PATCH
 
                jp      z,SINTAX_ERROR
 
                ret
 
 
 
NEW             call    INP_STR2STKBOT
 
                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,0Ah
 
                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_DISK
 
                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,0FFh
 
                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    COPYFILE_ON2DSK ; КОПИРОВАНИЕ ФАЙЛОВ НА 2 ДИСКОВОДАХ
 
                call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
 
                jr      loc_5F4
 
 
 
; КОПИРОВАНИЕ ФАЙЛОВ НА 2 ДИСКОВОДАХ
 
COPYFILE_ON2DSK call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
 
                ld      a,(TRD_5E09)
 
                cp      80h
 
;===============PATCH
 
;               jp      z,loc_1C45      ; ДОЛЖЕН БЫТЬ ПЕРЕХОД НА 0X2723
 
                JP Z,ERR_DIRFULL
 
;===============PATCH
 
                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     0DFh
 
                cp      "S"
 
                jp      z,COPY_S
 
                cp      "B"
 
                jp      z,COPY_B
 
                call    INP_STR2STKBOT
 
                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    COPYFILE_ON2DSK ; КОПИРОВАНИЕ ФАЙЛОВ НА 2 ДИСКОВОДАХ
 
                call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
 
                ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
 
                cp      "#"
 
                jp      nz,ERR_OK
 
                ld      a,10
 
                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
 
                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 СЕКТОРА
 
 
 
;===============PATCH
 
;               DUPL 0X1000-$,0FFh
 
; ТЕКСТ НАЛИЧИЯ INTERFACE1
 
;TXT_INTERFACE1 db 16h,9,5,"Interface one fitted",0
 
                DUPL 0X1018-$,0XFF
 
;===============PATCH
 
 
 
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)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                or      a
 
                jr      nz,loc_104D
 
                call    GET_SYMSTR
 
                cp      0AFh            ; CODE
 
                ld      b,"C"
 
                jr      z,loc_104D
 
                cp      0E4h            ; 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     20h
 
                dw 28Eh                 ; сканирование клавиатуры
 
                ld      c,0
 
                jr      nz,loc_1056
 
                rst     20h
 
                dw 31Eh                 ; проверка значения нажатой клавиши
 
                jr      nc,loc_1056
 
                dec     d
 
                ld      e,a
 
                rst     20h
 
                dw 333h                 ; декодирование клавиатуры
 
                pop     de
 
                pop     bc
 
                pop     hl
 
                and     0DFh
 
                ei
 
                ret
 
 
 
; РИСОВАНИЕ ЦВЕТНЫХ ЛИНИЙ ЗАСТАВКИ ДОСА
 
OUT_COLOR_LINE  ld      hl,58E5h
 
                ld      b,0Ah
 
loc_1073        ld      (hl),7
 
                inc     hl
 
                djnz    loc_1073
 
                ld      (hl),2
 
                inc     hl
 
                ld      (hl),16h
 
                inc     hl
 
                ld      (hl),34h
 
                inc     hl
 
                ld      (hl),25h
 
                inc     hl
 
                ld      (hl),28h
 
                inc     hl
 
                ld      (hl),7
 
                ld      hl,40EEh
 
                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,100h
 
                add     hl,de
 
                djnz    loc_108F
 
                ret
 
 
 
                ret
 
 
 
TXT_DELFILES    DB " Del."
 
TXT_FILE_S_     DB " File(s)",0
 
TXT_TITLE       DC "Title: "
 
TXT_DISKDRIVE   db 17h,11h," Disk Drive: ",0
 
TXT_1SPACE      db 17h,10h,20h,0
 
TXT_40TRK_SS    db 17h,10h," 40 Track S. Side",0
 
TXT_80TRK_SS    db 17h,10h," 80 Track S. Side",0
 
TXT_40TRK_DS    db 17h,10h," 40 Track D. Side",0
 
TXT_80TRK_DS    db 17h,10h," 80 Track D. Side",0
 
TXT_FREESECS    db 17h,10h," Free Sector ",0
 
TXT_FILENAME    db 0Dh,0Dh,"  File Name    Start Length Line",0
 
 
 
; СОЗДАНИЕ БУФЕРА НА 0X222 БАЙТА
 
CREATE_222BYTES ld      hl,(WORKSP)
 
                ld      (TRD_5CCF),hl   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
 
                ld      bc,222h ; РАЗМЕР СОЗДАВАЕМОГО БУФЕРА
 
                jp      CREATE_FREERAM
 
 
 
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      0Dh
 
                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_DISK
 
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      11h
 
                jp      nc,SINTAX_ERROR
 
                call    OPENSTREAM
 
                ld      a,0FFh
 
                ld      (TRD_5CF8),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
 
                call    CREATE_222BYTES ; СОЗДАНИЕ БУФЕРА НА 0X222 БАЙТА
 
                ld      hl,TRD_5E06
 
                ld      de,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
 
                ld      bc,20h
 
                ldir
 
                call    RD_0SEC2BUF     ; ЧТЕНИЕ СЕКТОРА 0 КАТАЛОГА
 
                ld      hl,TRD_5D25
 
                push    hl
 
loc_123E        ld      hl,TXT_TITLE    ; "Title:"
 
                push    bc
 
                rst     18h
 
                ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
 
                ld      bc,14h
 
                add     hl,bc
 
                rst     18h
 
                ld      hl,TXT_DISKDRIVE
 
                rst     18h
 
                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,13h
 
                add     hl,bc
 
                sub     (hl)
 
                push    hl
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_FILE_S_  ; " File(s)"
 
                rst     18h
 
                ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
 
                ld      bc,2
 
                add     hl,bc
 
                ld      a,(hl)
 
                ld      hl,TXT_40TRK_SS
 
                cp      19h
 
                jr      z,loc_1292
 
                ld      hl,TXT_80TRK_SS
 
                cp      18h
 
                jr      z,loc_1292
 
                ld      hl,TXT_40TRK_DS
 
                cp      17h
 
                jr      z,loc_1292
 
                ld      hl,TXT_80TRK_DS
 
loc_1292        rst     18h
 
                pop     hl
 
                ld      c,(hl)
 
                call    CONV2_2BYTES
 
                ld      hl,TXT_DELFILES ; " Del."
 
                rst     18h
 
                ld      hl,TXT_FREESECS
 
                rst     18h
 
                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     18h
 
                pop     bc
 
                pop     hl
 
                ld      b,10h
 
loc_12B5        call    FIND_END_BUFDIR
 
                call    PRINT_0D
 
                push    bc
 
                push    hl
 
                call    PRINT_FILENAME  ; ПЕЧАТЬ ИМЕНИ ФАЙЛА
 
                ld      bc,0Dh
 
                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     10h
 
                djnz    loc_12D4
 
loc_12D9        pop     bc
 
                call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
 
                ld      hl,TXT_1SPACE
 
                rst     18h
 
                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,10h
 
                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,10h
 
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,21h
 
                add     hl,bc
 
                ld      b,2
 
                push    hl
 
                call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
 
                ld      a,80h
 
                pop     hl
 
                ld      bc,200h
 
                cpir
 
                ld      a,(hl)
 
                cp      0AAh
 
                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      ; УСТАНОВКА 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_ON1DISK
 
                ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
 
                cp      "#"
 
                jp      nz,ERR_OK
 
loc_1393        ld      a,10
 
                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_ON1DISK
 
                jr      loc_1393
 
 
 
COPY_ON1DISK    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,0FFh
 
                ld      (TRD_5D21),a
 
                call    COPY_ON1DISK_
 
                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      80h
 
                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_ON1DISK_   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    ; #00-ЧТЕНИЕ СЕКТОРА,#FF-ЗАПИСЬ СЕКТОРА
 
                ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
 
                push    hl
 
                ld      de,(TRD_5CF2)
 
                call    SET_DISK_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_DISK_DEST
 
                call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
 
                ld      hl,(TRD_5CF4)
 
                ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
 
                jp      COPY_ON1DISK_
 
 
 
loc_14CB        ld      (TRD_5CF1),a
 
                push    hl
 
                ld      hl,TRD_5D23
 
                ld      b,(hl)
 
                pop     hl
 
                xor     a
 
                jp      loc_1484
 
 
 
SET_DISK_SOURCE push    hl
 
                push    de
 
                call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
 
                ld      a,(TRD_5CD9)    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                ld      (hl),a
 
                pop     de
 
                pop     hl
 
                ret
 
 
 
SETUP_DISK_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_5CE6+1),a  ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
 
                ld      hl,640
 
                cp      19h             ; 40 ДОРОЖЕК 1 СТОРОНА
 
                jr      z,SAVE_SECS_DEST
 
                ld      hl,1280
 
                cp      18h             ; 80 ДОРОЖЕК 1 СТОРОНА
 
                jr      z,SAVE_SECS_DEST
 
                cp      17h             ; 40 ДОРОЖЕК 2 СТОРОНЫ
 
                jr      z,SAVE_SECS_DEST
 
                ld      hl,2560
 
                cp      16h             ; 80 ДОРОЖЕК 2 СТОРОНЫ
 
                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,0FFh
 
                ld      (TRD_5D21),a
 
                call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
 
                call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
 
                ld      (TRD_5CD9),a    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                ld      a,(TRD_5E08)
 
                cp      19h             ; 40 ДОРОЖЕК 1 СТОРОНА
 
                ld      hl,640
 
                jr      z,loc_1575
 
                ld      hl,1280
 
                cp      18h             ; 80 ДОРОЖЕК 1 СТОРОНА
 
                jr      z,loc_1575
 
                cp      17h             ; 40 ДОРОЖЕК 2 СТОРОНЫ
 
                jr      z,loc_1575
 
                ld      hl,2560
 
                cp      16h             ; 80 ДОРОЖЕК 2 СТОРОНЫ
 
                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_5CE6+1)  ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
 
                ld      (TRD_5E08),a
 
                ld      hl,(TRD_5CDD)   ; ИМЯ ФАЙЛА
 
                ld      bc,(TRD_5CDF)
 
                sbc     hl,bc
 
                ld      (TRD_5E0A),hl
 
                call    SETUP_DISK_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_DISK_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_DISK_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
 
 
 
COM_08          ld      c,a             ; СЧИТЫВАНИЕ ОПИСАТЕЛЯ ФАЙЛА В БУФЕР #5CDD
 
; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
 
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,0FFh
 
                jr      loc_165E
 
 
 
RESERVED_RAM    ld      a,0FFh
 
                ld      (TRD_5D0E),a    ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
 
                call    CP_FREE_SECS
 
                ld      hl,(WORKSP)
 
                ld      (TRD_5CCF),hl   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
 
                jp      CREATE_FREERAM
 
 
 
CP_FREE_SECS    rst     20h
 
                dw 1F1Ah                ; проверка размера свободной памяти
 
                ld      hl,0FFFFh
 
                sbc     hl,bc
 
                ld      a,h
 
                cp      10h
 
                jr      nc,loc_168F
 
                ld      a,11h
 
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,0FFh
 
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-$,0FFh
 
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,1000h
 
                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     10h
 
                jr      c,loc_17F7
 
                inc     (hl)
 
                jr      loc_17F0
 
 
 
loc_17F7        add     a,10h
 
                ld      c,a
 
                push    bc
 
                call    READ_NUM_SEC    ; ЧТЕНИЕ СЕКТОРА КАТАЛОГА ПО НОМЕРУ
 
                pop     bc
 
                pop     af
 
                call    FIND_HEAD_BUF
 
                ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                or      a
 
                jr      z,loc_180D      ; FIX
 
                ex      de,hl
 
loc_180D        ldir                    ; FIX
 
                ret
 
 
 
VERIFY          ld      a,0FFh
 
                ld      (TRD_5CF9),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
 
LOAD            call    ZERO2HIGH_ERR
 
loc_1818        call    LOAD_FILE
 
                call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
 
                ld      a,0FFh
 
                ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
 
                ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
 
                cp      0FFh
 
                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      0Dh             ; СЛЕДУЮЩИЙ СИМВОЛ В СТРОКЕ "ENTER"?
 
                ret     z               ; ЕСЛИ ДА,ТО ВЫХОД-ПАРАМЕТР НЕ  ЗАДАН
 
                ld      a,1
 
                ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                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    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                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      0AFh            ; CODE
 
                call    z,GET_LOAD_CODE ; ПОЛУЧЕНИЕ АДРЕСА ЗАГРУЗКИ КОДА,ЕСЛИ   УКАЗАН
 
                cp      0E4h            ; 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)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                or      a
 
                ld      hl,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
 
                jr      z,loc_18B7
 
                ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
loc_18B7
 
;===============PATCH
 
;               ld      de,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
 
                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)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                cp      3
 
                ld      a,b
 
                jr      z,loc_18F6
 
                xor     a
 
                ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                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    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                ret
 
 
 
RD_FILE         call    CP_HIGH_ERR
 
                jr      z,loc_192D
 
                push    af
 
                call    NUM_SEC_FILE
 
                pop     af
 
                cp      0FFh
 
loc_192D        push    af
 
                call    z,RD_SECTORS
 
                pop     af
 
                jr      z,loc_1937
 
                jp      COM_06          ; ЗАПИСЬ СЕКТОРОВ
 
 
 
loc_1937        ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                cp      3
 
                call    z,RD_OR_VERIFY
 
                ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
 
                dec     hl
 
                ld      (hl),80h
 
                ret
 
 
 
RD_OR_VERIFY    ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
 
                cp      0FFh
 
                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      0FFh
 
                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,0Dh
 
                jp      PRINT_TXTERR
 
 
 
PEEK            ld      a,0FFh
 
                jr      loc_19AB
 
 
 
POKE            ld      a,0EEh
 
loc_19AB        ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
 
                jp      loc_1818
 
 
 
MERGE           ld      a,0FFh
 
                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     20h
 
                dw 30h                  ; создание свободного места
 
                ld      (hl),80h
 
                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     20h
 
                dw 8D2h                 ; работа со строками программы на Бейсике
 
                jp      ERR_OK
 
 
 
CP_FREE4PROG    ex      de,hl
 
                scf
 
                sbc     hl,de
 
                ret     c
 
                ld      de,0Ah
 
                add     hl,de
 
                ld      b,h
 
                ld      c,l
 
CP_FREE_RAM     rst     20h
 
                dw 1F05h                ; проверка свободной памяти
 
                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      0FFh
 
                jr      z,loc_1A20
 
                ld      hl,5
 
loc_1A20        add     hl,de
 
                ld      (TRD_5CDB),hl
 
                pop     hl
 
                ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
 
                cp      0FFh
 
                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     20h
 
                dw 19E5h                ; восстановление
 
                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      0FFh
 
                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,10h
 
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_DISK call    READ_9SEC       ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
 
                ld      a,(TRD_5E09)
 
                cp      80h
 
                jp      z,ERR_DIRFULL
 
                ret
 
 
 
SAVE            call    ZERO2HIGH_ERR
 
                ld      hl,0
 
                ld      (TRD_5CD1),hl
 
                call    SET_AND_PUT
 
                call    GET_SYMSTR
 
                cp      0AFh            ; CODE
 
                jr      z,loc_1B39
 
                cp      0CAh            ; LINE
 
                jr      nz,loc_1AF8     ; SCREEN$
 
                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      0AAh            ; SCREEN$
 
                jr      nz,loc_1B0D
 
                ld      hl,4000h
 
                ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                ld      hl,1B00h
 
                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      0E4h            ; DATA
 
                jr      z,loc_1B2C
 
                cp      0Dh
 
                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),0AAh       ; SCREEN$
 
                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      0FFh
 
                ret     nz
 
                jp      loc_1C13
 
 
 
CP_MASSIV       call    FIND_MASSIV
 
                ret     nc
 
loc_1C13        ld      a,0Eh
 
                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
 
 
 
; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
 
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_DISK
 
                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_DISK      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    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
 
; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
 
FIND_FILENAME   call    RD_0SEC2BUF     ; ЧТЕНИЕ СЕКТОРА 0 КАТАЛОГА
 
                ld      b,80h
 
                ld      c,0
 
loc_1CBA        push    bc
 
                call    FIND_HEAD_BUF
 
                call    CP_END_BUF      ; ПРОВЕРКА НА КОНЕЦ БУФЕРА
 
                pop     bc
 
                push    bc
 
                ld      a,c
 
                cp      10h
 
                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      0FFh
 
                ret
 
 
 
loc_1CE7        ld      a,80h
 
                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),0FFh
 
                ret
 
 
 
RETURN          call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
 
;===============PATCH
 
;               call    DELETE_BUF
 
                CALL DELETE_BUFFER
 
;===============PATCH
 
                res     3,(iy+1)
 
                call    RESTORE_SP      ; ВОССТАНОВЛЕНИЕ ПЕРЕХВАТЧИКА ОШИБОК
 
                ld      sp,(TRD_5D1C)   ; СОХРАНЕНИЕ РЕГИСТРА SP
 
                exx
 
                ld      hl,2758h
 
                exx
 
                dec     hl
 
                ld      a,12h
 
                cp      (hl)
 
                ret     nz
 
                dec     hl
 
                jp      loc_235
 
 
 
SINTAX_ERROR    bit     7,(iy+0)
 
                jr      z,loc_1D25
 
                ld      a,0Bh
 
                ld      (ERR_NR),a
 
loc_1D25        inc     a
 
                ld      hl,TXT_ERROR_
 
PRT_TEXT_ERROR  call    PRINT_ERROR     ; ПЕЧАТЬ СООБЩЕНИЯ ОБ ОШИБКЕ
 
                jp      END_COMAND
 
 
 
loc_1D2F        ld      a,(ERR_NR)
 
                ld      hl,TXT_BREAK    ; "*BREAK*"
 
                cp      14h
 
                jr      z,PRT_TEXT_ERROR
 
                cp      0Ch
 
                jr      z,PRT_TEXT_ERROR
 
                ld      hl,TXT_OUTRAM   ; "Out of RAM"
 
                cp      3
 
                jr      z,PRT_TEXT_ERROR
 
                ld      hl,TXT_ARRAYNOT ; "Array not found"
 
                cp      1
 
                jr      z,PRT_TEXT_ERROR
 
                jr      SINTAX_ERROR
 
 
 
RUN             call    ZERO2HIGH_ERR
 
                call    LOAD_FILE
 
                call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
 
                ld      hl,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
 
                ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
 
                cp      "B"
 
;===============PATCH
 
;               jp      z,WORK4AUTORUN  ; ОБРАБОТКА НОМЕРА СТРОКИ АВТОСТАРТА ПРОГРАММЫ НА БЕЙСИКЕ
 
                JP RUN_FILE
 
;===============PATCH
 
                push    hl
 
                ret
 
 
 
CLEAR_WORKSPACE ld      hl,TRD_5D0E     ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
 
                ld      a,(hl)
 
loc_1D67        cp      0FFh
 
                ld      (hl),0
 
                ret     nz
 
                rst     20h
 
                dw 16BFh                ; очистка рабочей области и стека калькулятора
 
                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     20h
 
                dw 1601h                ; открытие канала
 
                ret
 
 
 
; ОТКРЫТИЕ КАНАЛА 2
 
OPEN_CHAN_2     ld      a,2
 
                jr      OPENSTREAM
 
 
 
GET_SYMSTR      rst     20h
 
                dw 18h                  ; выборка символа из (CH_ADD)
 
                ret
 
 
 
CALL2BASEDIT    call    OPEN_CHAN_0     ; ОТКРЫТИЕ КАНАЛА 0
 
                rst     20h
 
                dw 0F2Ch                ; редактор командной строки
 
                ret
 
 
 
; ОЧИСТКА ОСНОВНОГО ЭКРАНА
 
CLEAR_SCREEN    rst     20h
 
                dw 0D6Bh                ; очистка экрана
 
                ret
 
 
 
LOOK_VARS       rst     20h
 
                dw 28B2h                ; Look-Vars. фиг знает че делает
 
                ret
 
 
 
; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
 
CLEAR_DOWN_SCR  rst     20h
 
                dw 0D6Eh                ; очистка нижней части экрана
 
                ret
 
 
 
PRINT_CHISLO_A_ ld      c,a
 
CONV2_2BYTES    ld      b,0
 
                jp      PRINT_CHISLO
 
 
 
PRINT_CHISLO    push    bc              ; ПЕЧАТЬ ЧИСЛА
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                pop     bc
 
                rst     20h
 
                dw 1A1Bh                ; печать сообщений и номеров строк
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                ret
 
 
 
GET_STKBOT_     rst     20h
 
                dw 2BF1h                ; чтение дна стека калькулятора
 
                ret
 
 
 
FIND_LAST       rst     20h
 
                dw 1E99h                ; поиск последнего целого числа
 
                ret
 
 
 
PUT_NUMDSK_STK  rst     20h
 
                dw 1C8Ch
 
                ret
 
 
 
BC2STKBOT       rst     20h
 
                dw 1C82h
 
                ret
 
 
 
; УСТАНОВКА CH_ADD
 
SET_CH_ADD      ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
 
                inc     hl
 
                ld      (CH_ADD),hl
 
                ret
 
 
 
INP_STR2STKBOT  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      ; УСТАНОВКА CH_ADD
 
                jp      PUT_NUMDSK_STK
 
 
 
GET_START_SIZE  call    GET_SYMSTR
 
                cp      0AFh            ; 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      0Dh
 
                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    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                ret
 
 
 
DEL_5BYTES      ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
 
                rst     20h
 
                dw 11A7h                ; удаление из командной стpоки пятибайтных чисел
 
                ret
 
 
 
CREATE_FREERAM  ld      hl,(WORKSP)
 
                rst     20h
 
                dw 30h                  ; создание свободного места
 
                ret
 
 
 
GET_NEXT_SYM    rst     20h
 
                dw 20h                  ; ПОЛУЧЕНИЕ СЛЕДУЮЩЕГО СИМВОЛА ВВЕДЕННОЙ СТРОКИ
 
                ret
 
 
 
DEL_WORKRAM     rst     20h
 
                dw 19E8h                ; Удаление области памяти
 
                ret
 
 
 
RESERV_RAM      rst     20h
 
                dw 1655h
 
                ret
 
 
 
WR_NUM_TRACK    call    GET_NUM_TRACK
 
                ld      a,h
 
                out     (3Fh),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          push    hl              ; ЗАПИСЬ СЕКТОРОВ
 
                push    de
 
                call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
 
                bit     7,(hl)
 
                jr      z,loc_1E60
 
                bit     0,(hl)
 
                jr      nz,loc_1E60
 
                ld      hl,READ_ONLY
 
                jp      PRT_TEXT_ERROR
 
 
 
loc_1E60        pop     de
 
                pop     hl
 
SAVE_SECTORS    ld      a,0FFh
 
loc_1E64        ld      (TRD_5CCE),a    ; #00-ЧТЕНИЕ СЕКТОРА,#FF-ЗАПИСЬ СЕКТОРА
 
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)    ; #00-ЧТЕНИЕ СЕКТОРА,#FF-ЗАПИСЬ СЕКТОРА
 
                or      a
 
                push    af
 
                call    z,LOAD_SECTOR
 
                pop     af
 
                call    nz,SAVE_SECTOR
 
                pop     hl
 
                ld      de,100h
 
                add     hl,de
 
                push    hl
 
                ld      a,10h
 
                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    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                scf
 
                ret
 
 
 
FORMAT          ld      hl,0FFFFh
 
                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    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
 
                call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
 
                and     80h
 
                ld      a,40            ; 40 ДОРОЖЕК
 
                jr      z,loc_1EE8
 
                ld      a,80            ; 80 ДОРОЖЕК
 
loc_1EE8        ld      (TRD_5CD7),a    ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                call    COM_00          ; ВОССТАНОВЛЕНИЕ ВГ93
 
                call    COM_17          ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
 
                call    PAUSE_3_C_A
 
                ld      e,1
 
                call    FORMAT_TREK     ; ФОРМАТИРОВАНИЕ ДОРОЖКИ
 
                call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
 
                ld      e,0
 
                call    FORMAT_TREK     ; ФОРМАТИРОВАНИЕ ДОРОЖКИ
 
                ld      a,(TRD_5CDD)    ; ИМЯ ФАЙЛА
 
                cp      "$"
 
                jr      z,loc_1F1B
 
                call    COM_17          ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
 
                call    PAUSE_3_C_A
 
                call    loc_3EB5
 
                ld      a,h
 
                cp      1
 
                jr      nz,loc_1F1B
 
                ld      a,80h
 
                ld      (TRD_5CDA),a
 
loc_1F1B        call    FORMAT_DISK
 
                ld      hl,TRD_5D25
 
                ld      (hl),0
 
                ld      de,TRD_5D26
 
                ld      bc,0FFh
 
                ldir
 
                ld      bc,TRD_5CD7     ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                ld      de,TRD_5CDA
 
                ld      a,(bc)
 
                cp      50h
 
                jr      z,loc_1F49
 
                ld      a,(de)
 
                cp      80h
 
                jr      z,loc_1F42      ; 80 ДОРОЖЕК 1 СТОРОНА
 
                ld      a,19h           ; 40 ДОРОЖЕК 1 СТОРОНА
 
                ld      hl,624          ; СЕКТОРОВ
 
                jr      loc_1F55
 
 
 
loc_1F42        ld      a,17h           ; 80 ДОРОЖЕК 1 СТОРОНА
 
loc_1F44        ld      hl,1264 ; СЕКТОРОВ
 
                jr      loc_1F55
 
 
 
loc_1F49        ld      a,(de)
 
                cp      80h
 
                ld      a,18h           ; 40 ДОРОЖЕК 2 СТОРОНЫ
 
                jr      nz,loc_1F44     ; СЕКТОРОВ
 
                ld      a,16h           ; 80 ДОРОЖЕК 2 СТОРОНЫ
 
                ld      hl,2544 ; СЕКТОРОВ
 
loc_1F55        ld      (TRD_5E08),a
 
                ld      (TRD_5E0A),hl
 
                ld      a,1
 
                ld      (TRD_5E07),a
 
                ld      a,10h
 
                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          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
 
                ld      b,1
 
                ld      de,8
 
                ld      hl,TRD_5D25
 
                call    SAVE_SECTORS
 
                ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                push    af
 
                xor     a
 
                ld      (TRD_5CE5),a    ; РАСШИРЕНИЕ ФАЙЛА
 
                ld      hl,(TRD_5E0A)
 
                ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                rst     18h
 
                ld      a,0Dh
 
                rst     10h
 
                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     10h
 
                pop     bc
 
                call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
 
                jp      END_COMAND
 
 
 
TABL_SECTORS    db 1,9,2,0Ah,3,0Bh,4,0Ch,5,0Dh,6,0Eh,7,0Fh,8,10h,1
 
 
 
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)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                or      3Ch
 
SET_REG_FF      ld      (TRD_5D16),a    ; УСТАНОВКА РЕГИСТРА #FF
 
                out     (0FFh),a
 
                ret
 
 
 
; УСТАНОВКА 1 СТОРОНЫ ДИСКА
 
COM_17          ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                and     6Fh
 
                jr      SET_REG_FF      ; УСТАНОВКА РЕГИСТРА #FF
 
 
 
; ФОРМАТИРОВАНИЕ ДОРОЖКИ
 
FORMAT_TREK     di
 
                ld      a,0F4h
 
                out     (1Fh),a
 
                ld      hl,TABL_SECTORS
 
                ld      c,7Fh
 
loc_2007        ld      b,0Ah
 
                ld      d,4Eh
 
                call    WRITE_C_D_B
 
                ld      b,0Ch
 
                ld      d,0
 
                call    WRITE_C_D_B
 
                ld      b,3
 
                ld      d,0F5h
 
                call    WRITE_C_D_B
 
                ld      d,0FEh
 
                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,0F7h
 
                call    WRITE_C_D_1
 
                ld      b,16h
 
                ld      d,4Eh
 
                call    WRITE_C_D_B
 
                ld      b,0Ch
 
                ld      d,0
 
                call    WRITE_C_D_B
 
                ld      b,3
 
                ld      d,0F5h
 
                call    WRITE_C_D_B
 
                ld      d,0FBh
 
                call    WRITE_C_D_1
 
                ld      b,0
 
                ld      d,0
 
                call    WRITE_C_D_B
 
                ld      d,0F7h
 
                call    WRITE_C_D_1
 
                ld      b,3Ch
 
                ld      d,4Eh
 
                call    WRITE_C_D_B
 
                ld      a,(hl)
 
                inc     hl
 
                cp      10h
 
                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,(1Fh)
 
                and     40h
 
                jp      nz,loc_3F39     ; Read Only
 
CP_NUM_TRACK    ld      a,(TRD_5CD7+1)  ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                or      a
 
                ret     nz
 
                ld      c,7Fh
 
                ld      a,e
 
                out     (3Fh),a
 
                ld      hl, TABL_SECTORS+1
 
loc_208A        ld      b,3
 
                ld      a,(hl)
 
                out     (5Fh),a
 
                push    hl
 
loc_2090        di
 
                ld      a,80h
 
                out     (1Fh),a
 
                push    bc
 
                call    RD_DATAPORT
 
                in      a,(1Fh)
 
                and     7Fh
 
                pop     bc
 
                jr      z,loc_20A6
 
                djnz    loc_2090
 
                ld      hl,TRD_5CD6     ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                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,(0FFh)
 
                and     0C0h
 
                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,0FFh
 
loc_20C6        push    bc
 
                inc     e
 
                ld      a,e
 
;===============PATCH
 
;               ld      b,1Bh
 
                LD B,0X18
 
;===============PATCH
 
                call    HEAD_POSITION
 
                call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
 
;===============PATCH
 
;               call    FORMAT_TREK     ; ФОРМАТИРОВАНИЕ ДОРОЖКИ
 
                CALL FORMAT_TREK_A0
 
;===============PATCH
 
                ld      a,(TRD_5CDA)
 
                cp      80h
 
                jr      nz,loc_20E1
 
                call    COM_17          ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
 
;===============PATCH
 
;               call    FORMAT_TREK     ; ФОРМАТИРОВАНИЕ ДОРОЖКИ
 
                CALL FORMAT_TREK_A1
 
;===============PATCH
 
loc_20E1        pop     bc
 
                djnz    loc_20C6
 
                ret
 
 
 
DELETE_BUF      push    af
 
                ld      a,(TRD_5CF8)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
 
                cp      0FFh
 
                jr      z,loc_211C
 
                pop     af
 
;===============PATCH
 
;               call    DEL_BUF         ; УДАЛЕНИЕ БУФЕРА,ЕСЛИ  ОН ЕСТЬ
 
                JP DEL_BUF
 
;===============PATCH
 
; ПРОВЕРКА НАЛИЧИЯ 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
 
;===============PATCH
 
;               ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
 
                CALL CLRBUF_EDITOR2
 
;===============PATCH
 
                ld      (hl),0Dh
 
                ld      (K_CUR),hl
 
                inc     hl
 
                ld      (hl),80h
 
                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
 
                pop     af
 
                call    z,CLRBUF_EDITOR
 
                ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
 
                call    PRINT_0D
 
                ld      a,(TRD_5D19)    ; ДИСКОВОД ПО УМОЛЧАНИЮ
 
                add     a,"A"
 
                rst     10h
 
                ld      a,">"
 
                rst     10h
 
                ld      hl,ERR_NR
 
                ld      (hl),0FFh
 
                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      0A5h
 
                push    af
 
                call    z,sub_2158
 
                pop     af
 
                jr      z,loc_21AE
 
                and     0DFh
 
                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,124h
 
                add     hl,bc
 
                ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
 
                jp      END_COMAND
 
 
 
FIND_ENDFILE    ld      a,0Ah
 
                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     20h
 
                dw 1727h
 
                ld      a,b
 
                or      c
 
                jp      nz,loc_221B
 
                ret
 
 
 
loc_221B        ld      a,19h
 
                ld      (ERR_NR),a
 
                ld      hl,TXT_STREAMOPEN ; "Stream opened"
 
                ld      a,0Ah
 
loc_2225        jp      PRINT_TXTERR
 
 
 
loc_2228        ld      a,0Bh
 
                ld      hl,TXT_NODISKFILE ; "Not disk file"
 
                jr      loc_2225
 
 
 
INITFREEACCESS  push    hl
 
                ld      c,20h
 
                rst     28h
 
                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,7Fh
 
                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      0A5h
 
                call    z,INITFREEACCESS
 
                jr      z,loc_226B
 
                ld      a,(TRD_5D09)
 
                cp      "R"
 
                ld      a,0FFh
 
                jr      nz,loc_226B
 
                xor     a
 
loc_226B        ld      (hl),a
 
                pop     af
 
                jp      loc_2270
 
loc_2270        push    af
 
                ld      bc,14h
 
                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,2000h
 
                ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                call    CREATE_BLOCK
 
                pop     hl
 
                ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                ret
 
 
 
CREATE_BLOCK    ld      hl,1000h
 
                ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                call    CP_FREE_ON_DISK ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
 
                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,124h
 
                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_5CE8+1)  ; ДЛИНА ПРОГРАММЫ
 
                ld      (hl),a
 
loc_2304        inc     hl
 
                ex      de,hl
 
                pop     hl
 
                push    de
 
                ld      de,10h
 
                add     hl,de
 
                ex      de,hl
 
                ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                ldir
 
                pop     hl
 
                ret
 
 
 
GET_ADRTEKSYM   ld      c,0Dh
 
                rst     28h
 
                ld      c,(hl)
 
                rst     28h
 
                ld      bc,24h
 
                add     hl,bc
 
                ret
 
 
 
GET_ADRTEKFRG   ld      c,24h
 
ADR_OPEN_CHAN   ld      b,0
 
                ld      hl,(CURCHL)
 
                add     hl,bc
 
                ret
 
 
 
CP_ENDOFSECTOR  ld      c,0Dh
 
                rst     28h
 
                inc     (hl)
 
                ret     nz
 
                push    hl
 
                call    SET_DISK
 
                call    SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
 
                pop     hl
 
                inc     hl
 
                inc     (hl)
 
                push    hl
 
                call    LOAD_1_SECTOR
 
                pop     hl
 
                ld      a,10h
 
                cp      (hl)
 
                ret     nz
 
                push    hl
 
                ld      c,0Fh
 
                rst     28h
 
                ld      a,(hl)
 
                cp      7Fh
 
                pop     hl
 
                jr      z,loc_2358
 
                ld      hl,(CURCHL)
 
                call    SAVE_HEAD_BLK
 
                ld      c,0Eh
 
                rst     28h
 
                jp      loc_2379
 
 
 
loc_2358        call    FIND_NEXT_BLK
 
                push    af
 
                call    z,LOAD_1_SECTOR
 
                ld      c,0Eh
 
                rst     28h
 
                pop     af
 
                call    nz,CREATE_NEWBLOCK
 
                ret
 
 
 
sub_2367        ld      (hl),0
 
                ld      c,19h
 
                rst     28h
 
                ld      d,20h
 
                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,10h
 
                rst     28h
 
                ex      de,hl
 
                ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                ldir
 
                ld      c,0Ch
 
                rst     28h
 
                ld      a,(TRD_5D1E)
 
                ld      (hl),a
 
                ret
 
 
 
FIND_END_SEC    ld      c,0Dh
 
                rst     28h
 
                inc     (hl)
 
                ret     nz
 
                inc     hl
 
                inc     (hl)
 
                push    hl
 
                call    SET_DISK
 
                ld      c,23h
 
                rst     28h
 
                ld      a,(hl)
 
                or      a
 
                jr      z,loc_23B6
 
                pop     hl
 
                push    hl
 
                dec     (hl)
 
                call    SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
 
                pop     hl
 
                push    hl
 
                inc     (hl)
 
loc_23B6        call    LOAD_1_SECTOR
 
                pop     hl
 
                ld      a,10h
 
                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      LOAD_1_SECTOR
 
 
 
FIND_NEXT_BLK   ld      (hl),0
 
                ld      c,19h
 
                rst     28h
 
                inc     (hl)
 
                ld      c,10h
 
                rst     28h
 
                ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                ldir
 
                call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
 
                ret     nz
 
OPEN_BLK        call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
 
                ld      c,10h
 
                rst     28h
 
                ex      de,hl
 
                ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                ldir
 
                ld      c,0Ch
 
                rst     28h
 
                ld      a,(TRD_5D1E)
 
                ld      (hl),a
 
                xor     a
 
                ret
 
 
 
; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
 
SAVE_1_SECTOR   call    GET_TEKSECFILE
 
                call    GET_ADRTEKFRG
 
                ld      b,1
 
                call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
 
                ld      c,0Fh
 
                rst     28h
 
                ld      a,(hl)
 
                cp      7Fh
 
                ret     z
 
                call    GET_ADRTEKFRG
 
                xor     a
 
                ld      b,a
 
loc_2413        ld      (hl),a
 
                inc     hl
 
                djnz    loc_2413
 
                ret
 
 
 
LOAD_1_SECTOR   call    GET_TEKSECFILE
 
                call    GET_ADRTEKFRG
 
                ld      b,1
 
                jp      COM_05          ; ЧТЕНИЕ СЕКТОРОВ
 
 
 
GET_TEKSECFILE  ld      hl,(CURCHL)
 
                ld      bc,1Eh
 
                add     hl,bc
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ld      c,0Eh
 
                rst     28h
 
                ld      b,(hl)
 
                dec     b
 
                inc     b
 
                push    af
 
                ld      a,10h
 
                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,0Bh
 
                rst     28h
 
                ld      a,(hl)
 
                jp      COM_01          ; НАСТРОЙКА НА ДИСКОВОД
 
 
 
OUT_SYM2FILE    ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                push    hl
 
;===============PATCH
 
;               ld      hl,CP_INTERFACE1 ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
;               push    hl
 
                DUPL 4,0
 
;===============PATCH
 
                push    af
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                ld      a,0Ah
 
                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,0Dh
 
                rst     28h
 
                ld      a,(hl)
 
                ld      bc,0Eh
 
                add     hl,bc
 
                cp      (hl)
 
                ret     nz
 
                ld      c,0Eh
 
                rst     28h
 
                ld      a,(hl)
 
                ld      bc,0Eh
 
                add     hl,bc
 
                cp      (hl)
 
                ret     nz
 
                ld      hl,TRD_5CB6     ; ДЛЯ ПРОВЕРКИ НАЛИЧИЯ INTERFACE1
 
                ld      a,(hl)
 
                cp      0F4h
 
                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     20h
 
                dw 58h
 
                ret
 
 
 
ERR_INVALID_IO  ld      a,17h
 
                jr      loc_2494
 
 
 
WORK4FREEACCESS ld      d,a
 
                ld      c,0Fh
 
                rst     28h
 
                ld      a,(hl)
 
                cp      7Fh
 
                ld      a,d
 
                ret     nz
 
                ld      bc,13h
 
                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,21h
 
                rst     28h
 
                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,23h
 
                rst     28h
 
                ld      (hl),0FFh
 
                pop     af
 
                pop     hl
 
                jr      c,loc_24EE
 
                ld      a,d
 
                cp      0Dh
 
                jr      z,loc_24F2
 
                pop     bc
 
                ret
 
 
 
loc_24EE        ld      a,d
 
                cp      0Dh
 
                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,10h
 
                jp      CREATE_FREERAM
 
 
 
WORK_NUMSAVE    ld      (hl),0Dh
 
                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,20h
 
                rst     28h
 
                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     0Fh
 
                ld      (TRD_5CDB),a
 
                ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                ld      (CH_ADD),hl
 
                call    OPEN_SAVED
 
                ld      c,21h
 
                rst     28h
 
                ld      a,0FFh
 
                ld      (hl),a
 
                inc     hl
 
                ld      (hl),a
 
                ret
 
 
 
OPEN_SAVED      ld      c,19h
 
                rst     28h
 
                ld      a,(TRD_5CDA)
 
                cp      (hl)
 
                jp      nz,loc_2584
 
                ld      c,0Eh
 
                rst     28h
 
                ld      a,(TRD_5CDB)
 
                cp      (hl)
 
                jp      nz,loc_25A7
 
loc_257C        ld      c,0Dh
 
                rst     28h
 
                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,19h
 
                rst     28h
 
                ld      (hl),a
 
                ld      c,10h
 
                rst     28h
 
                ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                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,0Eh
 
                rst     28h
 
                ld      (hl),a
 
                push    hl
 
                call    SET_DISK
 
                call    LOAD_1_SECTOR
 
                pop     hl
 
                dec     hl
 
                ld      a,(TRD_5CD9)    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                ld      (hl),a
 
                jr      loc_257C
 
 
 
SAVE_TEK_SEC    call    SET_DISK
 
                call    SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
 
                ret
 
 
 
CPANDZERO23     ld      c,23h
 
                rst     28h
 
                ld      a,(hl)
 
                or      a
 
                ld      (hl),0
 
                ret
 
 
 
loc_25D2        ld      hl,(TRD_5CDA)
 
                ld      h,20h
 
                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
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                ld      hl,TV_FLAG
 
                res     3,(hl)
 
                ld      hl,(ERR_SP)
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                or      a
 
                ld      hl,107Fh
 
                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     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                push    hl
 
                ld      hl,DELETE_BUF
 
                push    hl
 
                ret
 
 
 
loc_261D        cp      0Dh
 
                jr      z,loc_2614
 
                rst     20h
 
                dw 0F85h
 
                jr      loc_260F
 
 
 
loc_2626        call    INPUT_SYM_FILE
 
                jr      loc_2614
 
 
 
INPUT_SYM_FILE  ld      a,0Ah
 
                ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
 
                call    CP_FILE_OPENED
 
                jr      z,loc_2642
 
                cp      7Fh
 
                jp      nz,ERR_INVALID_IO
 
                ld      bc,13h
 
                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,0Fh
 
                rst     28h
 
                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     20h
 
                dw 1727h
 
                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,124h
 
                call    DEL_WORKRAM
 
                ld      hl,STRMS
 
                ld      b,10h
 
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,124h
 
                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,124h
 
                sbc     hl,bc
 
                ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
 
                jp      END_COMAND
 
 
 
sub_26CE        ld      bc,0Fh
 
                add     hl,bc
 
                ld      a,(hl)
 
                or      a
 
                ret     z
 
                ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                ld      (CURCHL),hl
 
                call    SAVE_HEAD_BLK
 
                jp      SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
 
 
 
SAVE_HEAD_BLK   ld      bc,0Dh
 
                add     hl,bc
 
                ld      e,(hl)
 
                inc     hl
 
                ld      d,(hl)
 
                ld      bc,0Dh
 
                add     hl,bc
 
                ld      (hl),e
 
                inc     hl
 
                ld      (hl),d
 
                ld      c,10h
 
                rst     28h
 
                ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                ldir
 
                call    SET_DISK
 
                ld      c,0Ch
 
                rst     28h
 
                ld      c,(hl)
 
                call    SETHEADFILENAME
 
                jp      REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
 
 
 
; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
 
PRINT_MSG       ld      a,(hl)
 
                or      a
 
                ret     z
 
                and     7Fh
 
                rst     10h
 
                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,1Ah
 
                jr      SET_NUM_ERR
 
 
 
                ld      a,12h
 
SET_NUM_ERR     ld      (ERR_NR),a
 
                ret
 
 
 
                ld      a,3
 
                jr      SET_NUM_ERR
 
 
 
COM_15          xor     a               ; ПРОВЕРКА ДОРОЖКИ
 
                ld      (TRD_5CD7+1),a  ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
 
                                        ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
 
                ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                in      a,(1Fh)
 
                ld      (TRD_5CCD),a    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
 
                ld      e,d
 
                push    de
 
                ld      a,e
 
                out     (7Fh),a
 
;===============PATCH
 
;               ld      a,1Bh
 
                LD A,0X18
 
;===============PATCH
 
                call    COM2VG_WAIT
 
                ld      a,(TRD_5CCD)    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
 
                and     80h
 
                call    nz,PAUSE_3_C_A
 
                pop     de
 
                call    CP_NUM_TRACK
 
                ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                or      a
 
                ret     z
 
                ld      a,7
 
                ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
 
                ret
 
 
 
TXT_OK_         DB "O.K.",0
 
TXT_VERIFYERR   DB "Verify Error.",8Dh
 
TXT_BACKUPDISK  DB "BACKUP DISK",8Dh
 
TXT_INS_DEST    DB "Insert Destination disk",0Dh,"then press Y",0
 
TXT_INS_SRC     DB "Insert Source disk then press Y",0
 
TXT_BREAK       DB "*BREAK*",8Dh
 
TXT_OUTRAM      DB "Out of RAM",8Dh
 
TXT_ARRAYNOT    DB "Array not found",8Dh
 
TXT_DIRFULL     DB "Directory full",8Dh
 
TXT_NODISK_     DB "No disk",8Dh
 
TXT_STREAMOPEN  DB "Stream opened",8Dh
 
TXT_NODISKFILE  DB "Not disk file",8Dh
 
TXT_FILEEXIST   DB "File exists",0Dh
 
                DC "Over write?(Y/N)"
 
 
 
CALL_3D13       push    af
 
                push    bc
 
                ld      (TRD_5D04),de
 
                ld      (TRD_5D02),hl
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                ld      a,0FFh
 
                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
 
loc_2869        ld      a,(hl)
 
                cp      c
 
                jr      nz,loc_287F
 
                pop     af
 
                inc     hl
 
                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
 
 
 
loc_287F        cp      0FFh
 
                jr      nz,loc_2887
 
                pop     af
 
                jp      END_COMAND
 
 
 
loc_2887        inc     hl
 
                inc     hl
 
                inc     hl
 
                jr      loc_2869
 
 
 
COMAND_TBL      db 0
 
                dw COM_00               ; ВОССТАНОВЛЕНИЕ ВГ93
 
                db 1
 
                dw COM_01               ; НАСТРОЙКА НА ДИСКОВОД
 
                db 2
 
                dw COM_02               ; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
 
                db 3
 
                dw COM_03               ; УСТАНОВКА НОМЕРА СЕКТОРА
 
                db 4
 
                dw COM_04               ; УСТАНОВКА АДРЕСА БУФЕРА
 
                db 5
 
                dw COM_05               ; ЧТЕНИЕ СЕКТОРОВ
 
                db 6
 
                dw COM_06               ; ЗАПИСЬ СЕКТОРОВ
 
                db 7
 
                dw COM_07               ; ВЫВОД КАТАЛОГА В КАНАЛ
 
                db 8
 
                DW COM_08               ;СЧИТЫВАНИЕ ОПИСАТЕЛЯ В БУФЕР 0X5CDD
 
                db 9
 
                dw COM_09               ; ЗАПИСЬ ОПИСАТЕЛЯ ФАЙЛА НА ДИСК
 
                db 0Ah
 
                dw COM_0A               ; ПОИСК ФАЙЛА ПО ИМЕНИ И РАСШИРЕНИЮ
 
                db 0Bh
 
                DW COM_0B               ;ЗАПИСЬ БЛОКА КОДОВ НА ДИСК
 
                db 0Ch
 
                dw COM_0C               ; ЗАПИСЬ БЕЙСИК ПРОГРАММЫ НА ДИСК
 
                db 0Dh
 
                dw END_COMAND
 
                db 0Eh
 
                dw COM_0E               ; ЗАГРУЗКА ИЛИ ПРОВЕРКА ФАЙЛА
 
                db 0Fh
 
                dw END_COMAND
 
                db 10h
 
                dw END_COMAND
 
                db 11h
 
                dw END_COMAND
 
                db 12h
 
                dw COM_12               ; УДАЛЕНИЕ ФАЙЛА
 
                db 13h
 
                DW COM_13               ;ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА В БУФЕР 0X5CDD
 
                db 14h
 
                DW COM_14               ;ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА ИЗ БУФЕРА 0X5CDD
 
                db 15h
 
                dw COM_15               ; ПРОВЕРКА ДОРОЖКИ
 
                db 16h
 
                DW COM_16               ;УСТАНОВКА СТОРОНЫ 0 ДИСКА
 
                db 17h
 
                DW COM_17               ;УСТАНОВКА СТОРОНЫ 1 ДИСКА
 
                db 18h
 
                dw COM_18               ; НАСТРОЙКА НА ДИСКЕТУ
 
                db 0FFh
 
 
 
COM_07          push    af              ; ВЫВОД КАТАЛОГА В КАНАЛ
 
                call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
 
                pop     af
 
                jp      loc_479
 
 
 
COM_13          xor     a               ; ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА В БУФЕР #5CDD
 
                jr      loc_28E5
 
 
 
COM_14          ld      a,0FFh          ; ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА ИЗ БУФЕРА #5CDD
 
loc_28E5        ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
 
                ld      bc,10h
 
                or      a
 
                jr      z,loc_28EF      ; FIX
 
                ex      de,hl
 
loc_28EF        ldir                    ; FIX
 
                ret
 
 
 
COM_0C          call    COM_18          ; ЗАПИСЬ БЕЙСИК ПРОГРАММЫ НА ДИСК
 
                call    CP_FREE_ON_DISK ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
 
                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_DISK ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
 
                jp      loc_1B53
 
 
 
COM_0E          or      a               ; ЗАГРУЗКА ИЛИ ПРОВЕРКА ФАЙЛА
 
                ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                ld      (TRD_5CDB),de
 
                call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
 
                call    FIND_RD_HEAD
 
                call    CP_PARAMS       ; НАСТРОЙКА ПАРАМЕТРОВ ЗАГРУЗКИ ФАЙЛА
 
                jp      RD_FILE
 
 
 
COM_12          call    COM_18          ; УДАЛЕНИЕ ФАЙЛА
 
                call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
 
                jp      ERASE_FILES     ; УДАЛЕНИЕ ФАЙЛА НА ДИСКЕ
 
 
 
; ПОИСК ФАЙЛА ПО ИМЕНИ
 
FIND_FILE       call    SET_FILENAME    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
 
                call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
 
                jp      FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
 
 
 
; ПЕЧАТЬ ИМЕНИ ФАЙЛА
 
PRINT_FILENAME  push    bc
 
                ld      b,8
 
loc_293B        ld      a,(hl)
 
                rst     10h
 
                inc     hl
 
                djnz    loc_293B
 
                ld      a,"<"
 
                rst     10h
 
                ld      a,(hl)
 
                rst     10h
 
                ld      a,">"
 
                rst     10h
 
                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,257          ; РАЗМЕР БУФЕРА СЕКТОРА
 
                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,257          ; РАЗМЕР БУФЕРА СЕКТОРА
 
                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),0FFh
 
                ld      hl,TRD_5D25
 
                ld      bc,257          ; РАЗМЕР БУФЕРА СЕКТОРА
 
                call    DEL_WORKRAM
 
                or      a
 
                ld      bc,257          ; РАЗМЕР БУФЕРА СЕКТОРА
 
                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_      db 0Dh,"*ERROR*",8Dh
 
TXT_NOSPACE_    db 0Dh,"No space",8Dh
 
TXT_FILEEXISTS_ db 0Dh,"File exists",8Dh
 
TXT_FREE_       DB " Free",8Dh
 
READ_ONLY       db 0Dh
 
                DC "Read Only"
 
TXT_DISCERROR_  db 0Dh
 
                DC "Disc Error"
 
TXT_R_O         db 0Dh
 
                DC "Rec.  O/F"
 
TXT_TITLE_      DC "Title: "
 
TXT_RIA_        db 0Dh,"Retry,Abort,Ignore?",0
 
TXT_TRK_        db 0Dh
 
                DC "Trk "
 
TXT_SEC_        DC " sec "
 
TXT_DELFILE_    DB " Del. File",8Dh
 
TXT_NOFILES_    db 0Dh
 
TXT_NOFILES     DB "No"
 
TXT_FILES_      DB " File(s)",8Dh,0
 
 
 
sub_2A35        ld      hl,loc_2A41
 
                ld      de,4080h
 
                ld      bc,20h
 
                ldir                    ; FIX
 
                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,(1Fh)
 
                and     7Fh
 
                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    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
 
                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,30h
 
                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,20h
 
                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)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                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      3Ch
 
loc_2F0C        out     (0FFh),a
 
                ret
 
 
 
sub_2F0F        ld      a,c
 
                or      a
 
                rra
 
                ld      c,a
 
                ret     nc
 
                ld      a,(4011h)
 
                and     6Fh
 
                jr      loc_2F0C
 
 
 
sub_2F1B        ld      a,e
 
                inc     a
 
                out     (5Fh),a
 
                push    hl
 
                ld      d,14h
 
                push    de
 
loc_2F23        di
 
                ld      c,7Fh
 
                ld      a,80h
 
                out     (1Fh),a
 
                call    RD_DATAPORT
 
                pop     de
 
                pop     hl
 
                in      a,(1Fh)
 
                and     7Fh
 
                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     (0FFh),a
 
loc_2F4F        ld      a,c
 
loc_2F50        out     (7Fh),a
 
;===============PATCH
 
;               call    PAUSE725779T
 
;               ld      a,1Bh
 
                CALL loc_3D2F
 
                LD A,0X18
 
;===============PATCH
 
loc_2F57        out     (1Fh),a
 
loc_2F59        in      a,(0FFh)
 
                and     80h
 
                jr      z,loc_2F59
 
                push    bc
 
                call    PAUSE725779T
 
                pop     bc
 
                ret
 
 
 
sub_2F65
 
;===============PATCH
 
;               ld      a,0Bh
 
                LD A,8
 
;===============PATCH
 
                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     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                push    hl
 
                ld      hl,(TRD_5D02)
 
                ld      de,(TRD_5D04)
 
                ret
 
 
 
SET_VARS        ld      hl,0FFFFh
 
                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    ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
 
                ld      (TRD_5D19),a    ; ДИСКОВОД ПО УМОЛЧАНИЮ
 
                ld      (TRD_5D18),a
 
                ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
 
                ld      (TRD_5D1F),a
 
                ld      a,0FFh
 
                out     (0FFh),a
 
                ld      (ERR_NR),a
 
                ld      (TRD_5D16),a    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                ld      (TRD_5D0C),a
 
                ld      a,0C9h
 
                ld      (TRD_5CC2),a    ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                ld      a,0D0h
 
                out     (1Fh),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                    ; FIX
 
                ret
 
 
 
; ТАБЛИЦА БЕЙСИК КОМАНД ДЛЯ TR-DOS
 
CODE_BYTE_COM   db 0CFh                 ; CAT
 
                db "*"
 
                db 0D0h                 ; FORMAT
 
                db 0D1h                 ; MOVE
 
                db 0E6h                 ; NEW
 
                db 0D2h                 ; ERASE
 
                db 0EFh                 ; LOAD
 
                db 0F8h                 ; SAVE
 
                db 0FEh                 ; RETURN
 
                db 0BEh                 ; PEEK
 
                db 0F4h                 ; POKE
 
                db 0D5h                 ; MERGE
 
                db 0F7h                 ; RUN
 
                db 0D3h                 ; OPEN
 
                db 0D4h                 ; CLOSE
 
                db 0FFh                 ; COPY
 
                db "4"                  ; 40
 
                db 0ECh                 ; GOTO
 
                db "8"                  ; 80
 
                db 0F0h                 ; LIST
 
                db 0D6h                 ; VERIFY
 
 
 
; ТАБЛИЦА АДРЕСОВ ИСПОЛНЕНИЯ КОМАНД
 
SPIS_ADR_COM    dw CAT
 
                dw COM_STAR
 
                dw FORMAT
 
                dw MOVE
 
                dw NEW
 
                dw 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,0FFh
 
                ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                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    FIND_KEYWORD
 
                jr      nz,loc_3087
 
                ex      de,hl
 
                inc     de
 
                ld      b,0
 
                ld      hl,BYTES_COM    ; SAVE
 
                add     hl,bc
 
                ld      a,(hl)
 
                ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                ld      (hl),a
 
                inc     hl
 
                ex      de,hl
 
                rst     20h
 
                dw 19DDh
 
                push    bc
 
                rst     20h
 
                dw 19E8h
 
                pop     bc
 
                ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                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      0Dh
 
                ret     z
 
                inc     hl
 
                ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                ld      a,(hl)
 
                cp      0Dh
 
                ret     z
 
                cp      22h
 
                jr      nz,loc_3057
 
loc_309A        inc     hl
 
                ld      a,(hl)
 
                cp      0Dh
 
                ret     z
 
                cp      22h
 
                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     0DFh
 
                ld      b,a
 
                or      a
 
                jr      nz,loc_30BB
 
                inc     hl
 
                jr      loc_30B1
 
 
 
loc_30BB        ld      a,(de)
 
                and     80h
 
                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     7Fh
 
                cp      b
 
                ret     z
 
loc_30CD        inc     c
 
                ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
 
                inc     de
 
                ld      a,(de)
 
                cp      0FFh
 
                jr      nz,loc_30B1
 
                or      a
 
                ret
 
 
 
loc_30D9        inc     de
 
                ld      a,(de)
 
                and     80h
 
                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    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                dec     hl
 
                dec     hl
 
                rst     20h
 
                dw 196Eh
 
                ret
 
 
 
loc_30F4        ld      a,0FFh
 
                ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
 
                ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
 
                ret
 
 
 
TBL_KEYWORD     DB "SAVE",80h
 
                DC "SAVE"
 
                DB "LOAD",80h
 
                DC "LOAD"
 
                DB "RUN",80h
 
                DC "RUN"
 
                DB "CAT",80h
 
                DC "CAT"
 
                DB "ERASE",80h
 
                DC "ERASE"
 
                DB "NEW",80h
 
                DC "NEW"
 
                DB "MOVE",80h
 
                DC "MOVE"
 
                DB "MERGE",80h
 
                DC "MERGE"
 
                DB "PEEK",80h
 
                DC "PEEK"
 
                DB "POKE",80h
 
                DC "POKE"
 
                DB "OPEN",83h
 
                DB "CLOSE",83h
 
                DB "CODE",80h
 
                DC "CODE"
 
                DB "RND",80h
 
                DC "RND"
 
                DB "DATA",80h
 
                DC "DATA"
 
                DB "SCREEN",4,84h
 
                DB "SCREEN",84h
 
                DB "COPY",80h
 
                DC "COPY"
 
                DB "FORMAT",80h
 
                DC "FORMAT"
 
                DB "GOTO",80h
 
                DC "GOTO"
 
                DB "LIST",80h
 
                DC "LIST"
 
                DB "LINE",80h
 
                DC "LINE"
 
                DB "VERIFY",80h
 
                DC "VERIFY"
 
                db 0FFh,0FFh
 
 
 
BYTES_COM       dw 0F8F8h               ; SAVE
 
                dw 0EFEFh               ; LOAD
 
                dw 0F7F7h               ; RUN
 
                dw 0CFCFh               ; CAT
 
                dw 0D2D2h               ; ERASE
 
                dw 0E6E6h               ; NEW
 
                dw 0D1D1h               ; MOVE
 
                dw 0D5D5h               ; MERGE
 
                dw 0BEBEh               ; PEEK
 
                dw 0F4F4h               ; POKE
 
                dw 0D4D3h               ; OPEN CLOSE
 
                dw 0AFAFh               ; CODE
 
                dw 0A5A5h               ; RND
 
                dw 0E4E4h               ; DATA
 
                dw 0AAAAh               ; SCREEN
 
                dw 0FFFFh               ; COPY
 
                dw 0D0D0h               ; FORMAT
 
                dw 0ECECh               ; GOTO
 
                dw 0F0F0h               ; LIST
 
                dw 0CACAh               ; LINE
 
                dw 0D6D6h               ; VERIFY
 
                db 0
 
 
 
; ПРОВЕРКА НАЛИЧИЯ TR-DOS ПЕРЕМЕННЫХ
 
CP_VARSTRDOS    ld      hl,(CHANS)
 
                or      a
 
                ld      bc,TRD_5D25
 
                sbc     hl,bc
 
                ret
 
 
 
                include patch.a80
 
 
 
                DUPL 0X3C01-$,0FFh
 
                jr      loc_3C06
 
 
 
                db 0FFh
 
                jr      loc_3C09
 
 
 
loc_3C06        jp      loc_3D00
 
 
 
loc_3C09        jp      loc_3D03
 
 
 
;===============PATCH
 
                DUPL 0X3C30-$,0XFF
 
                IN A,(0X1F)
 
                RET
 
;===============PATCH
 
 
 
                DUPL 0X3CFA-$,0FFh
 
FOR_INTERFACE1
 
;===============PATCH
 
;               jp      CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                NOP
 
                JR loc_3D2F
 
;===============PATCH
 
 
 
loc_3CFD        jp      CALL_3D13
 
 
 
loc_3D00        nop
 
                jr      IN_DOS_15616
 
 
 
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      FOR_INTERFACE1
 
 
 
                nop
 
                jr      loc_3CFD
 
 
 
loc_3D16        nop
 
                jp      WORK4ERROR
 
 
 
IN_DOS_15619    call    CREATE_VARS_TRD
 
                push    hl
 
                jp      loc_16C
 
 
 
CREATE_VARS_TRD call    CP_VARSTRDOS    ; ПРОВЕРКА НАЛИЧИЯ TR-DOS ПЕРЕМЕННЫХ
 
                nop
 
                nop
 
                call    c,JMP_CREATE_VARS
 
                ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
 
                ret
 
 
 
                nop
 
                nop
 
loc_3D2F        nop
 
                ret
 
 
 
IN_DOS_15616    call    CREATE_VARS_TRD
 
                push    hl
 
                jp      IN_COMMAND_CPU  ; ВХОЖДЕНИЕ В КОМАНДНЫЙ ПРОЦЕССОР ДОСА
 
 
 
INI_INTERFACE1  xor     a
 
;===============PATCH
 
;               out     (0F7h),a
 
                DUPL 2,0
 
;===============PATCH
 
                in      a,(0F7h)
 
                cp      1Eh
 
                jr      z,loc_3D44
 
                cp      1Fh
 
                ret     nz
 
loc_3D44        rst     8
 
                db 31h
 
                ld      a,1
 
                ld      (TRD_5CEF),a    ; СОДЕРЖИТ 1 ЕСЛИ ЕСТЬ INTERFACE1
 
                ret
 
 
 
JMP_CREATE_VARS xor     a
 
                out     (0FFh),a
 
                in      a,(0F6h)
 
                ld      hl,INI_INTERFACE1
 
                ld      de,MEMBOT
 
                ld      bc,14h
 
                ldir
 
                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,1655h
 
                push    hl
 
                ld      hl,TSTACK_END
 
                push    hl
 
                ld      (hl),0C9h
 
                ld      hl, P_RAMT+1
 
                ld      bc,70h
 
                ret
 
 
 
PRINT_0D        ld      a,0Dh
 
PRINT_A_        push    hl
 
                push    bc
 
                push    de
 
                push    af
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                pop     af
 
                call    PRINT_SYM
 
;===============PATCH
 
;               call    CP_INTERFACE1   ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
 
                DUPL 3,0
 
;===============PATCH
 
                pop     de
 
                pop     bc
 
                pop     hl
 
                ret
 
 
 
PRINT_SYM       rst     20h
 
                dw 10h
 
                ret
 
 
 
; ВОССТАНОВЛЕНИЕ ВГ93
 
COM_00
 
;===============PATCH
 
;               ld      a,0Bh
 
                LD A,8
 
;===============PATCH
 
COM2VG_WAIT     out     (1Fh),a
 
COM2VGWAIT1     push    hl
 
                rst     20h
 
                dw 1F54h                ; ПРОВЕРКА BREAK
 
                jr      c,COM2VGWAIT2
 
                rst     20h
 
                dw 1B7Bh                ; ВЫВОД СООБЩЕНИЯ ОБ ОШИБКЕ,ЕСЛИ НАЖАТ  BREAK
 
COM2VGWAIT2     pop     hl
 
                in      a,(0FFh)
 
                and     80h
 
                jr      z,COM2VGWAIT1
 
                ret
 
 
 
; ПРОВЕРКА НАЛИЧИЯ ДИСКА
 
CP_PRESENT_DISK
 
;===============PATCH
 
;               ld      a,0Bh
 
                LD A,8
 
;===============PATCH
 
                call    COM2VG_WAIT
 
                ld      de,0
 
                in      a,(1Fh)
 
                and     2
 
                ld      b,a
 
CPPRESENTDSK1   in      a,(1Fh)
 
                and     2
 
                cp      b
 
                ret     nz
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,CPPRESENTDSK1
 
                jp      DISK_NOT_FOUND
 
 
 
; ВЫБОР ДИСКОВОДА ПО УМОЛЧАНИЮ
 
ACTIV_DEF_DISK  ld      a,(TRD_5D19)    ; ДИСКОВОД ПО УМОЛЧАНИЮ
 
COM_01          ld      (TRD_5CF6),a    ; НАСТРОЙКА НА ДИСКОВОД
 
                ld      hl,TRD_5D16     ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
 
                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,50h
 
PAUSE_C_A       ld      c,0FFh
 
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     (7Fh),a
 
                ld      a,b
 
                or      18h
 
                jp      COM2VG_WAIT
 
 
 
POSITIONIREN    out     (7Fh),a
 
                push    bc
 
                ld      b,a
 
                in      a,(3Fh)
 
                cp      b
 
                pop     bc
 
                push    af
 
                ld      a,b
 
                or      18h
 
                call    COM2VG_WAIT
 
                pop     af
 
                ret     z
 
                push    bc
 
                call    PAUSE725779T
 
                pop     bc
 
                ret
 
 
 
; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
 
COM_02          ld      c,a
 
                call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
 
                call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
 
                and     2
 
                call    nz,SET_SIDE_DISK
 
                push    bc
 
                bit     7,(hl)
 
                jr      z,loc_3E83
 
                bit     0,(hl)
 
                jr      nz,loc_3E83
 
                in      a,(3Fh)
 
                cp      c
 
                jr      z,loc_3E82
 
                rlca
 
                out     (3Fh),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     (3Fh),a
 
                ld      a,(TRD_5CCD)    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
 
                or      a
 
                ret     z
 
                xor     a
 
                ld      (TRD_5CCD),a    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
 
PAUSE_3_C_A     ld      b,3
 
loc_3EA2        ld      a,0FFh
 
                call    PAUSE_C_A
 
                djnz    loc_3EA2
 
                ret
 
 
 
SET_SIDE_DISK   ld      a,c
 
                or      a
 
                rra
 
                ld      c,a
 
                ret     nc
 
                jp      COM_17          ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
 
 
 
GET_NUM_TRACK   call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
 
loc_3EB5        in      a,(1Fh)
 
                and     80h
 
                ld      (TRD_5CCD),a    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
 
                in      a,(3Fh)
 
                ld      h,a
 
;===============PATCH
 
;               call    HEAD_POSITION
 
                CALL BUGFIX_3EBF
 
;===============PATCH
 
                ld      c,7Fh
 
                ld      d,1
 
                di
 
                ld      a,0C0h
 
                out     (1Fh),a
 
                push    bc
 
                ld      b,3
 
loc_3ECE        in      a,(0FFh)
 
                and     0C0h
 
                jr      nz,loc_3EF2
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,loc_3ECE
 
                djnz    loc_3ECE
 
                pop     bc
 
                ei
 
                ld      a,0D0h
 
                out     (1Fh),a
 
;===============PATCH
 
;               ld      a,(TRD_5CD1)
 
                LD A,(TRD_5D17)
 
;===============PATCH
 
                cp      0FFh
 
                ret     z
 
DISK_NOT_FOUND  call    SET_TAPELDERR
 
                ld      a,0FFh
 
                ld      (TRD_5D17),a    ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
 
                jp      loc_271B
 
 
 
loc_3EF2        pop     bc
 
                in      h,(c)
 
loc_3EF5        in      a,(0FFh)
 
                and     0C0h
 
                jr      z,loc_3EF5
 
                ei
 
                ret     m
 
                di
 
                in      a,(7Fh)
 
                jr      loc_3EF5
 
 
 
; УСТАНОВКА НОМЕРА СЕКТОРА
 
COM_03          ld      (TRD_5CFF),a
 
                ret
 
 
 
; УСТАНОВКА АДРЕСА БУФЕРА
 
COM_04          ld      (TRD_5D00),hl
 
                ret
 
 
 
SAVE_SECTOR     ld      a,0A0h
 
                jr      loc_3F10
 
 
 
LOAD_SECTOR     ld      a,80h
 
loc_3F10        ld      (TRD_5CFE),a
 
RD_OR_WR_SEC    ld      d,0Ah
 
loc_3F15        push    de
 
                di
 
                ld      a,(TRD_5CFF)
 
                inc     a
 
                out     (5Fh),a
 
                ld      hl,(TRD_5D00)
 
                ld      c,7Fh
 
                ld      a,(TRD_5CFE)
 
                out     (1Fh),a
 
                cp      0A0h
 
                push    af
 
                call    z,WRITE_SEC     ; ОЖИДАНИЕ ГОТОВНОСТИ И ЗАПИСЬ СЕКТОРА
 
                pop     af
 
                call    nz,READ_SEC
 
                pop     de
 
                ei
 
                in      a,(1Fh)
 
                ld      b,a
 
                and     7Fh
 
                ret     z
 
loc_3F39        ld      hl,READ_ONLY    ; Read Only
 
                and     40h
 
                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_
 
loc_3F4B        ld      a,0D0h
 
                out     (1Fh),a
 
                ld      a,b
 
                and     1
 
                jp      nz,DISK_NOT_FOUND
 
                in      a,(3Fh)
 
                or      a
 
                jr      nz,loc_3F5F
 
                in      a,(5Fh)
 
                cp      0Ah
 
                ret     z
 
loc_3F5F        push    hl
 
                call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
 
                pop     hl
 
                rst     18h
 
                ld      hl,TXT_TRK_
 
                rst     18h
 
                in      a,(3Fh)
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_SEC_     ; " sec"
 
                rst     18h
 
                in      a,(5Fh)
 
                call    PRINT_CHISLO_A_
 
                ld      hl,TXT_RIA_
 
                rst     18h
 
loc_3F7B        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
 
                cp      "I"             ; Ignore-RET в адрес #1E8E
 
                ret     z
 
                cp      "R"             ; Retry
 
                jr      z,PRESSED_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
 
 
 
PRESSED_RETRY   ld      a,(TRD_5CF5)
 
                call    COM_02          ; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
 
                call    PAUSE_3_C_A
 
                jp      RD_OR_WR_SEC
 
 
 
loc_3FA0        dec     d
 
                jp      z,loc_3F48
 
                push    de
 
                call    GET_TIME_HEAD   ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
 
                and     2
 
                jr      nz,loc_3FAD
 
                inc     (hl)
 
loc_3FAD        call    COM_00          ; ВОССТАНОВЛЕНИЕ ВГ93
 
                ld      a,(TRD_5CF5)
 
                call    COM_02          ; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
 
                pop     de
 
                jp      loc_3F15
 
 
 
; ОЖИДАНИЕ ГОТОВНОСТИ И ЗАПИСЬ СЕКТОРА
 
WRITE_SEC       ld      b,4
 
WAIT4WRITE      in      a,(0FFh)
 
                and     0C0h
 
                jr      nz,WR_DATAPORT1
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,WAIT4WRITE
 
                djnz    WAIT4WRITE
 
                ret
 
 
 
WR_DATAPORT     in      a,(0FFh)
 
                and     0C0h
 
                jr      z,WR_DATAPORT
 
                ret     m
 
WR_DATAPORT1    outi
 
                jr      WR_DATAPORT
 
 
 
READ_SEC        ld      b,4
 
WAIT4READ       in      a,(0FFh)
 
                and     0C0h
 
                jr      nz,RD_DATAPORT1
 
                inc     de
 
                ld      a,e
 
                or      d
 
                jr      nz,WAIT4READ
 
                djnz    WAIT4READ
 
                ret
 
 
 
RD_DATAPORT     in      a,(0FFh)
 
                and     0C0h
 
                jr      z,RD_DATAPORT
 
                ret     m
 
RD_DATAPORT1    ini
 
                jr      RD_DATAPORT
 
 
 
                DUPL 0X3FF0-$,0FFh
 
                OUT (C),A
 
                RET
 
 
 
                IN A,(C)
 
                RET
 
 
 
                DUPL 0X3FF8-$,0XFF
 
                DB "TRD503"
 
                DW DATA_VERS