Subversion Repositories pentevo

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ;LAST UPDATE: 17.11.2013 savelij
  3.  
  4.                 include ../../macros.a80
  5.                 include bas_trd_vars.a80
  6.                 include ../../global_vars.a80
  7.  
  8.                 ORG 0
  9.                 di
  10.                 ld      a,7
  11.                 OUT (0XFE),A
  12.                 jr      loc_9
  13.  
  14.                 DB 1
  15. RST_8           JP $
  16.  
  17. loc_9           ld      a,3Fh
  18.                 jr      loc_1B
  19.  
  20.                 nop
  21. RST_10          jp      PRINT_A_
  22.  
  23.                 DUPL 0X0018-$,0XFF
  24. RST_18          jp      PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  25.  
  26. loc_1B          LD I,A
  27.                 XOR A
  28.                 JR      loc_24
  29.  
  30.                 DUPL 0X0020-$,0XFF
  31. RST_20          jp      CALL2BASIC
  32.  
  33.                 ret
  34.  
  35. loc_24          LD B,A
  36.                 LD C,A
  37.                 jr      loc_2B
  38.  
  39.                 DUPL 0X0028-$,0XFF
  40. RST_28          jp      ADR_OPEN_CHAN
  41.  
  42. loc_2B          LD SP,0XFFFF
  43.                 jr      loc_3A
  44.  
  45. RST_30          JP $
  46.  
  47.                 DUPL 0X0038-$,0FFh
  48. RST_38          ei
  49.                 ret
  50.  
  51. loc_3A          REPT 8
  52.                 PUSH BC
  53.                 ENDM
  54.                 LD HL,0XA500
  55.                 ADD HL,SP
  56.                 JR C,loc_3A
  57.                 ld      (P_RAMT),hl
  58.                 ld      de,3EAFh        ; АДРЕС UDG В ПЗУ 48К
  59.                 ld      bc,0A8h
  60.                 ld      a,e
  61.                 ex      de,hl
  62.                 ld      sp,6000h
  63.                 ld      (TRD_5F00),hl
  64.                 ld      hl,loc_79
  65.                 push    hl
  66.                 ld      hl,loc_3D2F
  67.                 push    hl
  68.                 ld      hl,0B8EDh       ; LDDR
  69.                 jr      EXECUTECOM2HL
  70.  
  71.                 jp      MAGIC
  72.  
  73. EXECUTECOM2HL   ld      (TRD_5F10),hl
  74.                 push    af
  75.                 ld      a,0C9h
  76.                 ld      (TRD_5F12),a
  77.                 pop     af
  78.                 ld      hl,(TRD_5F00)
  79.                 jp      TRD_5F10
  80.  
  81. loc_79          ex      de,hl
  82.                 inc     hl
  83.                 ld      (UDG),hl
  84.                 dec     hl
  85.                 ld      bc,40h
  86.                 ld      (RASP),bc
  87.                 ld      (RAMTOP),hl
  88.                 ld      hl,3C00h        ; АДРЕС ОСНОВНОГО ФОНТА В 48К
  89.                 ld      (CHARS),hl
  90.                 ld      hl,(RAMTOP)
  91.                 ld      (hl),3Eh
  92.                 dec     hl
  93.                 ld      sp,hl
  94.                 dec     hl
  95.                 dec     hl
  96.                 ld      (ERR_SP),hl
  97.                 ld      de,1303h
  98.                 push    de
  99.                 im      1
  100.                 ld      iy,ERR_NR
  101.                 ld      hl,TRD_5CB6     ; ДЛЯ ПРОВЕРКИ НАЛИЧИЯ INTERFACE1
  102.                 ld      (CHANS),hl
  103.                 ld      de,15AFh
  104.                 ld      bc,15h
  105.                 ex      de,hl
  106.                 call    COPY_BAS2VARS
  107.                 ex      de,hl
  108.                 dec     hl
  109.                 ld      (DATADD),hl
  110.                 inc     hl
  111.                 ld      (PROG),hl
  112. loc_BE          ld      (VARS),hl
  113.                 ld      (hl),80h
  114.                 inc     hl
  115.                 ld      (E_LINE),hl     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  116.                 ld      (hl),0Dh
  117.                 inc     hl
  118.                 ld      (hl),80h
  119.                 inc     hl
  120.                 ld      (WORKSP),hl
  121.                 ld      (STKBOT),hl
  122.                 ld      (STKEND),hl
  123.                 ld      a,38h
  124.                 ld      (ATTR_P),a
  125.                 ld      (ATTR_T),a
  126.                 ld      (BORDCR),a
  127.                 ld      hl,223h
  128.                 ld      (REPDEL),hl
  129.                 dec     (iy-3Ah)
  130.                 dec     (iy-36h)
  131.                 ld      hl,15C6h
  132.                 ld      de,STRMS
  133.                 ld      bc,0Eh
  134.                 call    COPY_BAS2VARS
  135.                 set     1,(iy+1)
  136.                 ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  137.                 ld      (hl),0C9h
  138.                 rst     20h
  139.                 dw 0EDFh                ; очистка буфера принтера
  140.                 ld      hl,DF_SZ
  141.                 ld      (hl),2
  142.                 ld      hl,128Bh
  143.                 push    hl
  144.                 ld      a,0AAh
  145.                 LD (NOT_USED),A
  146.                 ei
  147.                 jp      IN_DOS_15616
  148.  
  149. COPY_BAS2VARS   ld      (TRD_5F00),hl
  150.                 ld      hl,loc_3D2F
  151.                 push    hl
  152.                 ld      hl,0B0EDh       ; LDIR
  153.                 ld      (TRD_5F10),hl
  154.                 ld      hl,(TRD_5F00)
  155.                 jp      TRD_5F10
  156.  
  157. WORK4AUTORUN    call    DELETE_BUF      ; ОБРАБОТКА НОМЕРА СТРОКИ АВТОСТАРТА ПРОГРАММЫ НА БЕЙСИКЕ
  158.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  159.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  160.                 inc     hl
  161.                 ld      e,(hl)
  162.                 inc     hl
  163.                 ld      d,(hl)
  164.                 ld      a,d
  165.                 or      e
  166.                 ex      de,hl
  167.                 jr      z,loc_140
  168.                 xor     a
  169.                 ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
  170. loc_140         push    hl
  171.                 call    RESTORE_SP      ; ВОССТАНОВЛЕНИЕ ПЕРЕХВАТЧИКА ОШИБОК
  172.                 pop     hl
  173.                 ld      (NEWPPC),hl
  174.                 xor     a
  175.                 ld      (NSPPS),a
  176.                 rst     20h
  177.                 dw 16B0h                ; установка области редактирования до минимума
  178.                 ld      hl,(PROG)
  179.                 dec     hl
  180.                 ld      (DATADD),hl
  181.                 ld      sp,(ERR_SP)
  182.                 ld      a,(TRD_5D10)    ; СТАРШИЙ БАЙТ ОШИБКИ
  183.                 or      a
  184.                 ld      hl,1B76h
  185.                 jr      z,loc_166
  186.                 rst     20h
  187.                 dw 1BB0h                ; сообщение "Ok"
  188. loc_166         push    hl
  189.                 ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  190.                 push    hl
  191.                 ret
  192.  
  193. loc_16C         DUPL 3,0
  194.                 call    CREATE_BUF      ; СОЗДАНИЕ БУФЕРА
  195.                 ld      a,0FFh
  196.                 ld      (TRD_5D15),a    ; ЕСЛИ 0,ПЕЧАТАТЬ ШАПКУ TR-DOS.ИНАЧЕ НЕ ПЕЧАТАТЬ
  197.                 xor     a
  198.                 ld      (TRD_5CF7),a
  199.                 ld      a,0AAh
  200.                 ld      (TRD_5D17),a    ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
  201.                 ld      hl,CP_ERROR     ; ПРОВЕРКА НА ОШИБКУ
  202.                 ld      (TRD_5D1A),hl   ; ВНУТРЕННИЙ АДРЕС ЗАВЕРШЕНИЯ ИНТЕРПРЕТАТОРА КОМАНД
  203.                 ld      hl,0
  204.                 add     hl,sp
  205.                 ld      (TRD_5D1C),hl   ; СОХРАНЕНИЕ РЕГИСТРА SP
  206.                 dec     hl
  207.                 dec     hl
  208.                 ld      sp,hl
  209.                 call    MARK_SP         ; УСТАНОВКА СТЕКА ДЛЯ ПЕРЕХВАТА ОШИБОК
  210.                 ld      hl,(RAMTOP)
  211.                 ld      de,(CH_ADD)
  212.                 sbc     hl,de
  213.                 ex      de,hl
  214.                 jr      nc,loc_1A5
  215.                 or      a
  216.                 ld      de,257
  217.                 sbc     hl,de
  218. loc_1A5         ld      (CH_ADD),hl
  219. loc_1A8         call    CP_0D_OR_80
  220. loc_1AB         jp      z,END_COMAND
  221.                 cp      0EAh            ; REM
  222.                 inc     hl
  223.                 jr      nz,loc_1A8
  224.                 call    CP_0D_OR_80
  225.                 jr      z,loc_1AB
  226.                 cp      ":"
  227.                 jp      nz,END_COMAND
  228.                 inc     hl
  229.                 call    SAE2_HL_
  230.                 ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  231.                 jp      loc_30A
  232.  
  233. CP_0D_OR_80     ld      a,(hl)
  234.                 cp      0Dh
  235.                 ret     z
  236.                 cp      80h
  237.                 ret     z
  238.                 or      a
  239.                 ret
  240.  
  241.                 call    REWRITE_9SEC
  242. ; ПОДПРОГРАММА ЗАВЕРШЕНИЯ КОМАНДНОГО ПРОЦЕССОРА
  243. END_COMAND      ld      hl,0
  244.                 ld      (TRD_5CF8),hl   ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  245.                 call    DELETE_BUF
  246.                 call    CLEAR_WORKSPACE
  247.                 ld      hl,TRD_5D17     ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
  248.                 ld      (hl),0AAh
  249.                 ld      hl,TRD_5D1F
  250.                 ld      a,(hl)
  251.                 or      a
  252.                 ld      (hl),0
  253.                 jr      nz,loc_1F3
  254.                 call    DEL_5BYTES
  255.                 call    FIND_ENDSTR     ; ПОИСК КОНЦА СТРОКИ
  256. loc_1F3         ld      sp,(TRD_5D1C)   ; СОХРАНЕНИЕ РЕГИСТРА SP
  257.                 ld      hl,(TRD_5D1A)   ; ВНУТРЕННИЙ АДРЕС ЗАВЕРШЕНИЯ ИНТЕРПРЕТАТОРА КОМАНД
  258.                 ld      bc,(TRD_5D0F)   ; НОМЕР ОШИБКИ TR-DOS
  259.                 ld      b,0
  260.                 jp      (hl)
  261.  
  262. CP_ERROR        call    RESTORE_SP      ; ПРОВЕРКА НА ОШИБКУ
  263.                 bit     7,(iy+0)
  264.                 ret     nz
  265.                 ld      de,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  266.                 ld      sp,(ERR_SP)
  267.                 push    de
  268.                 ret
  269.  
  270. ; ПОИСК КОНЦА СТРОКИ
  271. FIND_ENDSTR     call    GET_SYMSTR
  272.                 cp      0Dh
  273.                 ret     z
  274.                 call    GET_NEXT_SYM
  275.                 jr      FIND_ENDSTR     ; ПОИСК КОНЦА СТРОКИ
  276.  
  277. ; УСТАНОВКА СТЕКА ДЛЯ ПЕРЕХВАТА ОШИБОК
  278. MARK_SP         ld      hl,(ERR_SP)
  279.                 ld      (TRD_5D13),hl   ; КОПИЯ ERR_SP
  280.                 ld      hl,(TRD_5D1C)   ; СОХРАНЕНИЕ РЕГИСТРА SP
  281.                 dec     hl
  282.                 dec     hl
  283.                 ld      (ERR_SP),hl
  284.                 ld      de,loc_3D16
  285.                 ld      (hl),e
  286.                 inc     hl
  287.                 ld      (hl),d
  288.                 ret
  289.  
  290. ; ВОССТАНОВЛЕНИЕ ПЕРЕХВАТЧИКА ОШИБОК
  291. RESTORE_SP      ld      hl,(TRD_5D13)   ; КОПИЯ ERR_SP
  292. LOC_235         ld      (ERR_SP),hl
  293.                 ret
  294.  
  295. IN_COMMAND_CPU  ld      hl,0            ; ВХОЖДЕНИЕ В КОМАНДНЫЙ ПРОЦЕССОР ДОСА
  296.                 ld      (TRD_5CF7),hl
  297.                 add     hl,sp
  298.                 ld      (TRD_5D1C),hl   ; СОХРАНЕНИЕ РЕГИСТРА SP
  299.                 dec     hl
  300.                 dec     hl
  301.                 ld      sp,hl
  302.                 call    MARK_SP         ; УСТАНОВКА СТЕКА ДЛЯ ПЕРЕХВАТА ОШИБОК
  303. ;2 ВЫЗОВА ПЕРЕНЕСЕНЫ ДЛЯ УСТРАНЕНИЯ ПРОПАДАНИЯ КУРСОРА
  304. ;ПРИ ПОВТОРНОМ ВХОДЕ В TR-DOS ИЗ МЕНЮ BASIC 128
  305.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  306.                 call    OPEN_CHAN_2     ; ОТКРЫТИЕ КАНАЛА 2
  307.                 ld      hl,TRD_5D17     ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
  308.                 ld      a,(hl)
  309.                 cp      0AAh
  310.                 ld      a,0
  311.                 ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
  312.                 jp      z,COMMAND_CPU
  313.                 ld      (hl),0AAh
  314.                 ld      hl,ZASTAVKA     ; FIX
  315.                                         ; ТЕКСТ ЗАСТАВКИ ДОСА
  316.                 rst     18h
  317.                 call    OUT_COLOR_LINE  ; РИСОВАНИЕ ЦВЕТНЫХ ЛИНИЙ ЗАСТАВКИ ДОСА
  318.                 DUPL 0X026D-$,0
  319. loc_271         LD A,(NOT_USED)         ; ПРОВЕРКА НА #AA
  320.                 cp      0AAh
  321.                 jr      nz,COMMAND_CPU  ; ЕСЛИ НЕ #AA,ТО ВХОД В КОМАНДНЫЙ ПРОЦЕССОР
  322.                 DUPL 0X027B-$,0
  323. loc_27B         ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  324.                 ld      a,0
  325.                 ld      (TRD_5D0E),a    ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
  326.                 ld      (hl),0F7h
  327.                 inc     hl
  328.                 ld      (hl),22h
  329.                 inc     hl
  330.                 ld      (hl),"b"
  331.                 inc     hl
  332.                 ld      (hl),"o"
  333.                 inc     hl
  334.                 ld      (hl),"o"
  335.                 inc     hl
  336.                 ld      (hl),"t"
  337.                 inc     hl
  338.                 ld      (hl),22h
  339.                 inc     hl
  340.                 ld      (K_CUR),hl
  341.                 ld      (hl),0Dh
  342.                 inc     hl
  343.                 ld      (hl),80h
  344.                 inc     hl
  345.                 ld      (WORKSP),hl
  346.                 ld      (STKBOT),hl
  347.                 ld      (STKEND),hl
  348.                 set     3,(iy+1)
  349.                 jr      GO2RUNBOOT
  350.  
  351. ; ПЕРЕНОС 3 БАЙТ
  352. LDI3_HL2DE      ld      b,3
  353. loc_2B2         ld      a,(hl)
  354.                 ld      (de),a
  355.                 inc     hl
  356.                 inc     de
  357.                 djnz    loc_2B2
  358.                 ret
  359.  
  360. ; FIX
  361. ; ОСТАНОВКА МОТОРА ДИСКОВОДА
  362. STOP_MOTOR      ld      b,20h
  363. loc_2BB         push    bc
  364.                 xor     8
  365.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  366.                 push    af
  367.                 ld      a,5
  368.                 call    PAUSE_C_A
  369.                 pop     af
  370.                 pop     bc
  371.                 djnz    loc_2BB
  372.                 ret
  373.  
  374. COMMAND_CPU     ld      hl,(TRD_5D1C)   ; СОХРАНЕНИЕ РЕГИСТРА SP
  375.                 dec     hl
  376.                 dec     hl
  377.                 ld      sp,hl
  378.                 call    OPEN_CHAN_0     ; ОТКРЫТИЕ КАНАЛА 0
  379.                 ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  380.                 or      3
  381.                 call    STOP_MOTOR      ; FIX
  382.                                         ; ОСТАНОВКА МОТОРА ДИСКОВОДА
  383.                 ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  384.                 call    STOP_MOTOR      ; FIX
  385.                                         ; ОСТАНОВКА МОТОРА ДИСКОВОДА
  386.                 xor     a
  387.                 ld      (TRD_5D15),a    ; ЕСЛИ 0,ПЕЧАТАТЬ ШАПКУ TR-DOS.ИНАЧЕ НЕ ПЕЧАТАТЬ
  388.                 call    GET_COMMAND     ; ПРИНЯТИЕ И ОБРАБОТКА КОМАНД
  389.                 call    SAE2E_LINE
  390. GO2RUNBOOT      call    CLEAR_DOWN_SCR  ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  391.                 ld      hl,COMMAND_CPU
  392.                 ld      (TRD_5D1A),hl   ; ВНУТРЕННИЙ АДРЕС ЗАВЕРШЕНИЯ ИНТЕРПРЕТАТОРА КОМАНД
  393.                 xor     a
  394.                 ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
  395.                 LD (TRD_5CEF),A
  396.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  397.                 push    hl
  398.                 ld      de,TRD_5D20     ; ДЛЯ СОХРАНЕНИЯ 3 СИМВОЛОВ ВВЕДЕНОЙ СТРОКИ
  399.                 call    LDI3_HL2DE      ; ПЕРЕНОС 3 БАЙТ
  400.                 pop     hl
  401.                 ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  402. loc_30A         ld      a,(hl)
  403.                 ld      b,a
  404.                 and     80h
  405.                 ld      a,b
  406.                 jr      z,loc_31A
  407.                 cp      0FEh            ; RETURN
  408.                 jr      z,loc_31A
  409.                 push    af
  410.                 call    ACTIV_DEF_DISK  ; ВЫБОР ДИСКОВОДА ПО УМОЛЧАНИЮ
  411.                 pop     af
  412. loc_31A         ld      hl,CODE_BYTE_COM ; ТАБЛИЦА БЕЙСИК КОМАНД ДЛЯ TR-DOS
  413.                                         ; CAT
  414.                 dec     hl
  415.                 ld      c,0
  416. loc_320         inc     c
  417.                 ld      d,a
  418.                 ld      a,15h
  419.                 cp      c
  420.                 jp      c,END_COMAND
  421.                 ld      a,d
  422.                 inc     hl
  423.                 cp      (hl)
  424.                 jr      nz,loc_320
  425.                 cp      0FEh            ; RETURN
  426.                 call    nz,CREATE_BUF   ; СОЗДАНИЕ БУФЕРА
  427.                 ld      a,9
  428.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  429.                 xor     a
  430.                 ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
  431.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  432.                 ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
  433.                 ld      hl,FLAGS
  434.                 res     7,(hl)
  435.                 ld      b,0
  436.                 ld      hl,SPIS_ADR_COM ; ТАБЛИЦА АДРЕСОВ ИСПОЛНЕНИЯ КОМАНД
  437.                 dec     c
  438.                 sla     c
  439.                 add     hl,bc
  440.                 ld      e,(hl)
  441.                 inc     hl
  442.                 ld      d,(hl)
  443.                 ex      de,hl
  444.                 push    hl
  445.                 ld      de,END_COM
  446.                 push    de
  447.                 jp      (hl)
  448.  
  449. END_COM         ld      hl,FLAGS
  450.                 set     7,(hl)
  451.                 pop     hl
  452.                 jp      (hl)
  453.  
  454. ; FIX
  455. ; ТЕКСТ ЗАСТАВКИ ДОСА
  456. ZASTAVKA        db 16h,1,5,"* TR-DOS Ver 5.03 *",0Dh,0Dh,7Fh
  457.                 db " 1986 Technology Research Ltd.",16h,5,0Bh
  458.                 db "(U.K.)",16h,7,5
  459.                 db "BETA 128",0
  460.  
  461. END_OUT_DIR     call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  462.                 call    PRINT_0D
  463.                 call    PRINT_0D
  464. loc_3B5         ld      bc,(TRD_5E0A)
  465.                 call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
  466.                 ld      hl,TXT_FREE_    ; " Free"
  467.                 rst     18h
  468. GOTO_END        jp      END_COMAND
  469.  
  470. ; ПЕЧАТЬ СООБЩЕНИЯ ОБ ОШИБКЕ
  471. PRINT_ERROR     push    af
  472.                 ld      a,(TRD_5D0E)    ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
  473.                 cp      0FEh
  474.                 jr      nz,CP4PRINT_HEAD
  475.                 pop     af
  476.                 ret
  477.  
  478. CP4PRINT_HEAD   pop     af
  479.                 ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
  480.                 ld      a,(TRD_5D15)    ; ЕСЛИ 0,ПЕЧАТАТЬ ШАПКУ TR-DOS.ИНАЧЕ НЕ ПЕЧАТАТЬ
  481.                 or      a
  482.                 call    z,PRINT_MSG     ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  483.                 ret
  484.  
  485. ERR_NOFILES     ld      hl,TXT_NOFILES_
  486.                 ld      a,1
  487.                 jp      PRINT_TXTERR
  488.  
  489. ERR_OK          ld      hl,TXT_OK_      ; "O.K."
  490.                 xor     a
  491.                 jp      PRINT_TXTERR
  492.  
  493. ; ЧТЕНИЕ СЕКТОРА 0 КАТАЛОГА
  494. RD_0SEC2BUF     xor     a
  495.                 ld      (TRD_5CCC),a    ; ТЕКУЩИЙ НОМЕР СЕКТОРА ПРИ ЧТЕНИИ КАТАЛОГА
  496. ; ЧТЕНИЕ СЕКТОРА КАТАЛОГА ПО НОМЕРУ
  497. READ_NUM_SEC    ld      de,(TRD_5CCC)   ; ТЕКУЩИЙ НОМЕР СЕКТОРА ПРИ ЧТЕНИИ КАТАЛОГА
  498.                 ld      d,0
  499. READ_SEC4NEM    call    CREATE_BUF      ; СОЗДАНИЕ БУФЕРА
  500.                 ld      hl,TRD_5D25
  501.                 ld      b,1
  502.                 jp      COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  503.  
  504. ; ЧТЕНИЕ 9 СЕКТОРА
  505. READ_9SEC       call    CREATE_BUF      ; СОЗДАНИЕ БУФЕРА
  506.                 ld      de,8
  507.                 jr      READ_SEC4NEM
  508.  
  509. ; НАСТРОЙКА НА ДИСКЕТУ
  510. COM_18          call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  511.                 ld      a,(TRD_5E0C)
  512.                 cp      10h
  513.                 jr      z,CP_TYPE_DISK
  514. DISCERROR_      ld      hl,TXT_DISCERROR_
  515.                 JP DISCERROR_7
  516.  
  517. CP_TYPE_DISK    call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  518.                 res     0,(hl)
  519.                 res     1,(hl)
  520.                 ld      a,(TRD_5E08)
  521.                 bit     0,a
  522.                 jr      nz,loc_425
  523.                 set     0,(hl)
  524. loc_425         bit     3,a
  525.                 ret     nz
  526.                 set     1,(hl)
  527.                 ret
  528.  
  529. ; ПРОВЕРКА СЛЕДУЮЩЕГО СИМВОЛА
  530. CP_SECOND_SYM   ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  531.                 inc     hl
  532.                 ld      a,(hl)
  533.                 cp      0Dh
  534.                 ret
  535.  
  536. CAT             call    CP_SECOND_SYM   ; ВЫПОЛНЕНИЕ КОМАНДЫ CAT
  537.                 ld      bc,2
  538.                 ld      (TRD_5CDB),bc
  539.                 jr      z,loc_46A
  540.                 cp      "#"
  541.                 jr      nz,CODES
  542.                 ld      (CH_ADD),hl
  543.                 call    SET_NUM_CHAN
  544.                 call    GET_SYMSTR
  545.                 cp      0Dh
  546.                 jr      z,loc_46A
  547.                 cp      ","
  548.                 jp      nz,SINTAX_ERROR
  549.                 call    GET_NEXT_SYM
  550.                 call    PUT_NUMDSK_STK
  551.                 jr      loc_460
  552.  
  553. CODES           call    SET_AND_PUT
  554. loc_460         call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  555.                 call    GET_STKBOT_
  556.                 ex      de,hl
  557.                 call    SETUP_DISK
  558. loc_46A         call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  559.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  560.                 ld      (TRD_5CF9),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  561.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  562.                 ld      a,(TRD_5CDB)
  563. loc_479         cp      2
  564.                 push    af
  565.                 call    z,CLEAR_SCREEN  ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  566.                 pop     af
  567.                 cp      11h
  568.                 jp      nc,SINTAX_ERROR
  569.                 call    OPENSTREAM
  570.                 ld      a,0FFh
  571.                 ld      (TRD_5CF8),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  572.                 ld      hl,TXT_TITLE_   ; "Title:"
  573.                 rst     18h
  574.                 ld      hl,TRD_5E1A
  575.                 rst     18h
  576.                 call    PRINT_0D
  577.                 ld      a,(TRD_5E09)
  578.                 ld      hl,TRD_5E19
  579.                 sub     (hl)
  580.                 push    hl
  581.                 call    PRINT_CHISLO_A_
  582.                 ld      hl,TXT_FILES_   ; " File(s)"
  583.                 rst     18h
  584.                 pop     hl
  585.                 ld      c,(hl)
  586.                 call    CONV2_2BYTES
  587.                 ld      hl,TXT_DELFILE_ ; " Del. File"
  588.                 rst     18h
  589.                 call    RD_0SEC2BUF     ; ЧТЕНИЕ СЕКТОРА 0 КАТАЛОГА
  590.                 ld      hl,TRD_5D25
  591. loc_4B6         call    CP_END_DIR      ; ПРОВЕРКА ОКОНЧАНИЯ ДИРЕКТОРИИ
  592.                 call    PRINT_0D
  593.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  594.                 add     a,"A"
  595.                 rst     10h
  596.                 ld      b,2
  597. loc_4C4         call    CP_END_DIR      ; ПРОВЕРКА ОКОНЧАНИЯ ДИРЕКТОРИИ
  598.                 push    bc
  599.                 ld      a,":"
  600.                 rst     10h
  601.                 push    hl
  602.                 call    PRINT_FILENAME  ; ПЕЧАТЬ ИМЕНИ ФАЙЛА
  603.                 ld      bc,0Dh
  604.                 pop     hl
  605.                 push    hl
  606.                 add     hl,bc
  607.                 ld      c,(hl)
  608.                 push    bc
  609.                 ld      a,c
  610.                 ld      b,2
  611.                 cp      10
  612.                 jr      c,loc_4DF
  613.                 dec     b
  614. loc_4DF         cp      100
  615.                 jr      nc,loc_4E8
  616. loc_4E3         ld      a," "
  617.                 rst     10h
  618.                 djnz    loc_4E3
  619. loc_4E8         pop     bc
  620.                 call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
  621.                 pop     hl
  622.                 pop     bc
  623.                 ld      de,10h
  624.                 add     hl,de
  625.                 djnz    loc_4C4
  626.                 jr      loc_4B6
  627.  
  628. ; ПРОВЕРКА ОКОНЧАНИЯ ДИРЕКТОРИИ
  629. CP_END_DIR      push    hl
  630.                 push    bc
  631.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  632.                 ld      hl,TRD_5CF6     ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  633.                 cp      (hl)
  634.                 call    nz,COM_01       ; НАСТРОЙКА НА ДИСКОВОД
  635.                 pop     bc
  636.                 pop     hl
  637.                 jp      CP_END_CAT
  638.  
  639. ADD_10          ld      de,10h
  640.                 add     hl,de
  641.                 ret
  642.  
  643. ; ПРОВЕРКА НА КОНЕЦ БУФЕРА
  644. CP_END_BUF      push    hl
  645.                 push    bc
  646.                 ld      bc,0A1DBh
  647.                 add     hl,bc
  648.                 jr      c,READ_SEC2BUF
  649.                 pop     bc
  650.                 pop     hl
  651.                 ret
  652.  
  653. READ_SEC2BUF    ld      hl,TRD_5CCC     ; ТЕКУЩИЙ НОМЕР СЕКТОРА ПРИ ЧТЕНИИ КАТАЛОГА
  654.                 inc     (hl)
  655.                 call    READ_NUM_SEC    ; ЧТЕНИЕ СЕКТОРА КАТАЛОГА ПО НОМЕРУ
  656.                 pop     bc
  657.                 pop     hl
  658.                 ld      hl,TRD_5D25
  659.                 ret
  660.  
  661. NUMDSK2BYTE     and     0DFh
  662.                 sbc     a,"A"
  663.                 jp      c,SINTAX_ERROR
  664.                 cp      4
  665.                 jp      nc,SINTAX_ERROR
  666.                 ret
  667.  
  668. CP_ON_STKBOT    call    GET_STKBOT_
  669.                 ld      a,c
  670.                 OR B
  671.                 jp      z,SINTAX_ERROR
  672.                 ret
  673.  
  674. NEW             call    INP_STR2STKBOT
  675.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  676.                 call    INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  677.                 call    SET_CP_FILENAME
  678.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  679.                 ld      (TRD_5CF8),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  680.                 jp      nz,ERR_NOFILES
  681.                 push    bc
  682.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  683.                 call    SET_CP_FILENAME
  684.                 push    af
  685.                 ld      a,(TRD_5CF8)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  686.                 ld      hl,TRD_5CF6     ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  687.                 cp      (hl)
  688.                 jp      nz,SINTAX_ERROR
  689.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  690.                 pop     af
  691.                 jp      z,FILE_EXISTS
  692.                 pop     bc
  693. loc_569         call    SETHEADFILENAME
  694.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  695.                 jp      ERR_OK
  696.  
  697. CP_HIGH_ERR     ld      a,(TRD_5D10)    ; СТАРШИЙ БАЙТ ОШИБКИ
  698.                 or      a
  699.                 ret
  700.  
  701. CP_ERASED_FILES ld      a,(TRD_5D07)    ; СЧЕТЧИК УДАЛЕННЫХ ФАЙЛОВ
  702.                 or      a
  703.                 jp      z,ERR_NOFILES
  704.                 jp      ERR_OK
  705.  
  706. ; ЗАПРОС НА УДАЛЕНИЕ ФАЙЛА
  707. GET_OVERWRITE_  push    bc
  708.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  709.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  710.                 add     a,"A"
  711.                 call    PRINT_A_
  712.                 ld      a,":"
  713.                 call    PRINT_A_
  714.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  715.                 call    PRINT_FILENAME  ; ПЕЧАТЬ ИМЕНИ ФАЙЛА
  716.                 ld      hl,TXT_FILEEXIST ; "File exists"
  717.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  718.                 call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  719.                 cp      "Y"
  720.                 push    af
  721.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  722.                 pop     af
  723.                 pop     bc
  724.                 ret     nz
  725.                 push    bc
  726.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  727.                 pop     bc
  728.                 call    ERASE_FILE      ; УДАЛЕНИЕ ФАЙЛА
  729.                 xor     a
  730.                 ret
  731.  
  732. CP_EXT_SHARP    ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  733.                 cp      "#"
  734.                 jr      z,FINDFILENAME_0A
  735.                 xor     a
  736.                 ret
  737.  
  738. FINDFILENAME_0A ld      a,0Ah
  739.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  740.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  741.                 ld      a,9
  742.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  743.                 ret
  744.  
  745. COPY_STAR_STAR  ld      a,(TRD_5CDD)    ; ВЫПОЛНЕНИЕ КОМАНДЫ COPY *,*
  746.                 cp      "*"
  747.                 jp      nz,ERR_NOFILES
  748.                 call    GET_STKBOT_
  749.                 ex      de,hl
  750.                 call    SETUP_DISK
  751.                 ld      a,(hl)
  752.                 cp      "*"
  753.                 jp      nz,SINTAX_ERROR
  754.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  755.                 ld      (TRD_5CF9),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  756.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  757.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  758.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  759.                 ld      a,0FFh
  760.                 ld      (TRD_5D0D),a
  761. loc_5F4         ld      a,(TRD_5CF8)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  762.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  763.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  764.                 ld      a,(TRD_5D0D)
  765.                 inc     a
  766.                 ld      (TRD_5D0D),a
  767.                 ld      c,a
  768.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  769.                 ld      a,(TRD_5CDD)    ; ИМЯ ФАЙЛА
  770.                 cp      0
  771.                 jp      z,ERR_OK
  772.                 cp      1
  773.                 jr      z,loc_5F4
  774.                 ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  775.                 ld      de,TRD_5CED     ; НОМЕР ПЕРВОГО ТРЕКА ФАЙЛА
  776.                 ld      bc,7
  777.                 ldir
  778.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  779.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  780.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  781.                 jr      nz,loc_634
  782.                 call    CP_EXT_SHARP
  783.                 jr      nz,loc_634
  784.                 call    GET_OVERWRITE_  ; ЗАПРОС НА УДАЛЕНИЕ ФАЙЛА
  785.                 jr      nz,loc_5F4
  786. loc_634         call    COPYFILE_ON2DSK ; КОПИРОВАНИЕ ФАЙЛОВ НА 2 ДИСКОВОДАХ
  787.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  788.                 jr      loc_5F4
  789.  
  790. ; КОПИРОВАНИЕ ФАЙЛОВ НА 2 ДИСКОВОДАХ
  791. COPYFILE_ON2DSK call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  792.                 ld      a,(TRD_5E09)
  793.                 cp      80h
  794.                 JP Z,ERR_DIRFULL        ; ДОЛЖЕН БЫТЬ ПЕРЕХОД НА 0X2723
  795.                 ld      hl,TRD_5CED     ; НОМЕР ПЕРВОГО ТРЕКА ФАЙЛА
  796.                 ld      de,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  797.                 ld      bc,7
  798.                 ldir
  799.                 ld      de,(TRD_5CEA)   ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  800.                 ld      d,0
  801.                 or      a
  802.                 ld      hl,(TRD_5E0A)
  803.                 sbc     hl,de
  804.                 jp      c,loc_1C45
  805.                 ld      (TRD_5E0A),hl
  806.                 ld      hl,(TRD_5E06)
  807.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  808.                 push    hl
  809.                 call    COPY_FILE       ; КОПИРОВАНИЕ ФАЙЛА НА 2 ДИСКОВОДАХ
  810.                 pop     hl
  811.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  812.                 ld      hl,(TRD_5CF4)
  813.                 ld      (TRD_5E06),hl
  814.                 ld      hl,TRD_5E09
  815.                 inc     (hl)
  816.                 ld      c,(hl)
  817.                 dec     c
  818.                 ld      b,0
  819.                 push    bc
  820.                 ld      de,9
  821.                 ld      (TRD_5CF4),de
  822.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  823.                 pop     bc
  824.                 call    SETHEADFILENAME
  825.                 ret
  826.  
  827. COPY            ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  828.                 inc     hl
  829.                 ld      a,(hl)
  830.                 and     0DFh
  831.                 cp      "S"
  832.                 jp      z,COPY_S
  833.                 cp      "B"
  834.                 jp      z,COPY_B
  835.                 call    INP_STR2STKBOT
  836.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  837.                 call    RESERVED_RAM
  838.                 call    INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  839.                 call    SET_CP_FILENAME
  840.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  841.                 ld      (TRD_5CF8),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  842.                 jp      nz,COPY_STAR_STAR ; ВЫПОЛНЕНИЕ  КОМАНДЫ COPY *,*
  843.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  844.                 ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  845.                 ld      de,TRD_5CED     ; НОМЕР ПЕРВОГО ТРЕКА ФАЙЛА
  846.                 ld      bc,7
  847.                 ldir
  848.                 call    SET_CP_FILENAME
  849.                 push    af
  850.                 push    bc
  851.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  852.                 ld      (TRD_5CF9),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  853.                 ld      a,(TRD_5CF8)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  854.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  855.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  856.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  857.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  858.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  859.                 pop     bc
  860.                 pop     af
  861.                 jr      nz,loc_6F3
  862.                 call    CP_EXT_SHARP
  863.                 jr      nz,loc_6F3
  864.                 call    GET_OVERWRITE_  ; ЗАПРОС НА УДАЛЕНИЕ ФАЙЛА
  865.                 jp      nz,ERR_OK
  866. loc_6F3         call    COPYFILE_ON2DSK ; КОПИРОВАНИЕ ФАЙЛОВ НА 2 ДИСКОВОДАХ
  867.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  868.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  869.                 cp      "#"
  870.                 jp      nz,ERR_OK
  871.                 ld      a,10
  872.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  873.                 ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  874.                 inc     (hl)
  875.                 ld      a,(TRD_5CF8)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  876.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  877.                 call    CP_EXT_SHARP
  878.                 jp      nz,ERR_OK
  879.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  880.                 ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  881.                 ld      de,TRD_5CED     ; НОМЕР ПЕРВОГО ТРЕКА ФАЙЛА
  882.                 ld      bc,7
  883.                 ldir
  884.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  885.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  886.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  887.                 jr      loc_6F3
  888.  
  889. ; КОПИРОВАНИЕ ФАЙЛА НА 2 ДИСКОВОДАХ
  890. COPY_FILE       ld      a,(TRD_5CF1)
  891.                 or      a
  892.                 ret     z
  893.                 push    hl
  894.                 ld      hl,TRD_5D23
  895.                 sub     (hl)
  896.                 pop     hl
  897.                 jr      nc,loc_775
  898.                 ld      a,(TRD_5CF1)
  899.                 ld      b,a
  900.                 xor     a
  901.                 ld      (TRD_5CF1),a
  902. loc_744         push    bc
  903.                 ld      a,(TRD_5CF8)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  904.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  905.                 pop     bc
  906.                 push    bc
  907.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  908.                 push    hl
  909.                 ld      de,(TRD_5CF2)
  910.                 call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  911.                 ld      hl,(TRD_5CF4)
  912.                 ld      (TRD_5CF2),hl
  913.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  914.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  915.                 pop     hl
  916.                 pop     bc
  917.                 ld      de,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  918.                 call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
  919.                 ld      hl,(TRD_5CF4)
  920.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  921.                 jr      COPY_FILE       ; КОПИРОВАНИЕ ФАЙЛА НА 2 ДИСКОВОДАХ
  922.  
  923. loc_775         ld      (TRD_5CF1),a
  924.                 push    hl
  925.                 ld      hl,TRD_5D23
  926.                 ld      b,(hl)
  927.                 pop     hl
  928.                 xor     a
  929.                 jr      loc_744
  930.  
  931. ; УДАЛЕНИЕ ФАЙЛА
  932. ERASE_FILE      xor     a
  933.                 ld      (TRD_5D07),a    ; СЧЕТЧИК УДАЛЕННЫХ ФАЙЛОВ
  934.                 jr      ERASE_FILES     ; УДАЛЕНИЕ ФАЙЛА НА ДИСКЕ
  935.  
  936. ERASE           call    SET_AND_PUT
  937.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  938.                 call    INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  939.                 xor     a
  940.                 ld      (TRD_5D07),a    ; СЧЕТЧИК УДАЛЕННЫХ ФАЙЛОВ
  941.                 call    FIND_FILE       ; ПОИСК ФАЙЛА ПО ИМЕНИ
  942.                 call    ERASE_FILES     ; УДАЛЕНИЕ ФАЙЛА НА ДИСКЕ
  943.                 jp      nz,CP_ERASED_FILES
  944.                 jp      ERR_OK
  945.  
  946. ERASE_FILES     ld      a,(TRD_5CDD)    ; УДАЛЕНИЕ ФАЙЛА НА ДИСКЕ
  947.                 ld      (TRD_5D08),a    ; ПЕРВЫЙ СИМВОЛ ИМЕНИ ФАЙЛА
  948.                 ret     nz
  949.                 ld      hl,TRD_5D07     ; СЧЕТЧИК УДАЛЕННЫХ ФАЙЛОВ
  950.                 inc     (hl)
  951.                 push    bc
  952.                 call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  953.                 ld      a,(TRD_5E09)
  954.                 pop     bc
  955.                 inc     c
  956.                 cp      c
  957.                 jr      nz,loc_7BC
  958.                 dec     a
  959.                 ld      (TRD_5E09),a
  960.                 xor     a
  961. loc_7BC         push    af
  962.                 jr      z,loc_7C3
  963.                 ld      hl,TRD_5E19
  964.                 inc     (hl)
  965. loc_7C3         push    bc
  966.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  967.                 pop     bc
  968.                 dec     c
  969.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  970.                 pop     af
  971.                 jp      z,loc_7D2
  972.                 ld      a,1
  973. loc_7D2         ld      (TRD_5CDD),a    ; ИМЯ ФАЙЛА
  974.                 push    af
  975.                 call    WRHEAD_FILENAME ; СОХРАНЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  976.                 ld      a,(TRD_5D08)    ; ПЕРВЫЙ СИМВОЛ ИМЕНИ ФАЙЛА
  977.                 ld      (TRD_5CDD),a    ; ИМЯ ФАЙЛА
  978.                 pop     af
  979.                 jr      z,WR_NEW_FREE_SEC
  980.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  981.                 jr      ERASE_FILES     ; УДАЛЕНИЕ ФАЙЛА НА ДИСКЕ
  982.  
  983. WR_NEW_FREE_SEC call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  984.                 ld      hl,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  985.                 ld      (TRD_5E06),hl
  986.                 ld      de,(TRD_5CEA)   ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  987.                 ld      hl,(TRD_5E0A)
  988.                 ld      d,0
  989.                 add     hl,de
  990.                 ld      (TRD_5E0A),hl
  991.                 jp      REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  992.  
  993.                 DUPL 0X1018-$,0XFF
  994. COM_STAR        call    SET_AND_PUT
  995.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  996.                 call    CP_ON_STKBOT
  997.                 ld      a,(de)
  998.                 call    NUMDSK2BYTE
  999.                 ld      (TRD_5D19),a    ; ДИСКОВОД ПО УМОЛЧАНИЮ
  1000.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  1001.                 jp      ERR_OK
  1002.  
  1003. ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  1004. INP_EXTFILENAME ld      b,"C"
  1005.                 ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  1006.                 or      a
  1007.                 jr      nz,loc_104D
  1008.                 call    GET_SYMSTR
  1009.                 cp      0AFh            ; CODE
  1010.                 ld      b,"C"
  1011.                 jr      z,loc_104D
  1012.                 cp      0E4h            ; DATA
  1013.                 ld      b,"D"
  1014.                 jr      z,loc_104D
  1015.                 cp      "#"
  1016.                 ld      b,"#"
  1017.                 jr      z,loc_104D
  1018.                 ld      b,"B"
  1019. loc_104D        ld      hl,TRD_5CE5     ; РАСШИРЕНИЕ ФАЙЛА
  1020.                 ld      (hl),b
  1021.                 ret
  1022.  
  1023. ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1024. GET_KEYS        di
  1025.                 push    hl
  1026.                 push    bc
  1027.                 push    de
  1028. loc_1056        rst     20h
  1029.                 dw 28Eh                 ; сканирование клавиатуры
  1030.                 ld      c,0
  1031.                 jr      nz,loc_1056
  1032.                 rst     20h
  1033.                 dw 31Eh                 ; проверка значения нажатой клавиши
  1034.                 jr      nc,loc_1056
  1035.                 dec     d
  1036.                 ld      e,a
  1037.                 rst     20h
  1038.                 dw 333h                 ; декодирование клавиатуры
  1039.                 pop     de
  1040.                 pop     bc
  1041.                 pop     hl
  1042.                 and     0DFh
  1043.                 ei
  1044.                 ret
  1045.  
  1046. ; РИСОВАНИЕ ЦВЕТНЫХ ЛИНИЙ ЗАСТАВКИ ДОСА
  1047. OUT_COLOR_LINE  ld      hl,58E5h
  1048.                 ld      b,0Ah
  1049. loc_1073        ld      (hl),7
  1050.                 inc     hl
  1051.                 djnz    loc_1073
  1052.                 ld      (hl),2
  1053.                 inc     hl
  1054.                 ld      (hl),16h
  1055.                 inc     hl
  1056.                 ld      (hl),34h
  1057.                 inc     hl
  1058.                 ld      (hl),25h
  1059.                 inc     hl
  1060.                 ld      (hl),28h
  1061.                 inc     hl
  1062.                 ld      (hl),7
  1063.                 ld      hl,40EEh
  1064.                 ld      b,8
  1065.                 xor     a
  1066. loc_108F        push    bc
  1067.                 scf
  1068.                 rla
  1069.                 push    hl
  1070.                 push    af
  1071.                 ld      b,5
  1072. loc_1096        inc     hl
  1073.                 ld      (hl),a
  1074.                 djnz    loc_1096
  1075.                 pop     af
  1076.                 pop     hl
  1077.                 pop     bc
  1078.                 ld      de,100h
  1079.                 add     hl,de
  1080.                 djnz    loc_108F
  1081.                 ret
  1082.  
  1083.                 ret
  1084.  
  1085. TXT_DELFILES    db " Del."
  1086. TXT_FILE_S_     db " File(s)",0
  1087. TXT_TITLE       db "Title:",0A0h
  1088. TXT_DISKDRIVE   db 17h,11h," Disk Drive: ",0
  1089. TXT_1SPACE      db 17h,10h,20h,0
  1090. TXT_40TRK_SS    db 17h,10h," 40 Track S. Side",0
  1091. TXT_80TRK_SS    db 17h,10h," 80 Track S. Side",0
  1092. TXT_40TRK_DS    db 17h,10h," 40 Track D. Side",0
  1093. TXT_80TRK_DS    db 17h,10h," 80 Track D. Side",0
  1094. TXT_FREESECS    db 17h,10h," Free Sector ",0
  1095. TXT_FILENAME    db 0Dh,0Dh,"  File Name    Start Length Line",0
  1096.  
  1097. ; СОЗДАНИЕ БУФЕРА НА 0X222 БАЙТА
  1098. CREATE_222BYTES ld      hl,(WORKSP)
  1099.                 ld      (TRD_5CCF),hl   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1100.                 ld      bc,222h ; РАЗМЕР СОЗДАВАЕМОГО БУФЕРА
  1101.                 jp      CREATE_FREERAM
  1102.  
  1103. PRINT_HL_CHISLO xor     a
  1104.                 ld      de,10000
  1105. loc_1161        sbc     hl,de
  1106.                 jr      c,loc_1168
  1107.                 inc     a
  1108.                 jr      loc_1161
  1109.  
  1110. loc_1168        add     a,"0"
  1111.                 call    PRINT_A_CHISLO
  1112.                 add     hl,de
  1113.                 xor     a
  1114.                 ld      de,1000
  1115. loc_1172        sbc     hl,de
  1116.                 jr      c,loc_1179
  1117.                 inc     a
  1118.                 jr      loc_1172
  1119.  
  1120. loc_1179        add     a,"0"
  1121.                 call    PRINT_A_CHISLO
  1122.                 add     hl,de
  1123.                 xor     a
  1124.                 ld      de,100
  1125. loc_1183        sbc     hl,de
  1126.                 jr      c,loc_118A
  1127.                 inc     a
  1128.                 jr      loc_1183
  1129.  
  1130. loc_118A        add     a,"0"
  1131.                 call    PRINT_A_CHISLO
  1132.                 add     hl,de
  1133.                 xor     a
  1134.                 ld      de,10
  1135. loc_1194        sbc     hl,de
  1136.                 jr      c,loc_119B
  1137.                 inc     a
  1138.                 jr      loc_1194
  1139.  
  1140. loc_119B        add     a,"0"
  1141.                 call    PRINT_A_CHISLO
  1142.                 add     hl,de
  1143.                 ld      a,l
  1144.                 add     a,"0"
  1145.                 call    PRINT_A_CHISLO
  1146.                 ret
  1147.  
  1148. PRINT_A_CHISLO  push    hl
  1149.                 push    de
  1150.                 call    PRINT_A_
  1151.                 pop     de
  1152.                 pop     hl
  1153.                 ret
  1154.  
  1155. FIND_END_BUFDIR push    hl
  1156.                 push    bc
  1157.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  1158.                 ld      hl,TRD_5CF6     ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  1159.                 cp      (hl)
  1160.                 call    nz,COM_01       ; НАСТРОЙКА НА ДИСКОВОД
  1161.                 pop     bc
  1162.                 pop     hl
  1163.                 call    CP_END_BUF      ; ПРОВЕРКА НА КОНЕЦ БУФЕРА
  1164.                 ld      a,(hl)
  1165.                 or      a
  1166.                 jp      z,END_COMAND
  1167.                 cp      1
  1168.                 call    z,ADD_10
  1169.                 ret     nz
  1170.                 jr      FIND_END_BUFDIR
  1171.  
  1172. LIST            call    CP_SECOND_SYM   ; ПРОВЕРКА СЛЕДУЮЩЕГО СИМВОЛА
  1173.                 ld      bc,2
  1174.                 ld      (TRD_5CDB),bc
  1175.                 jr      z,loc_1205
  1176.                 cp      "#"
  1177.                 jr      nz,LIST4CODES
  1178.                 ld      (CH_ADD),hl
  1179.                 call    SET_NUM_CHAN
  1180.                 call    GET_SYMSTR
  1181.                 cp      0Dh
  1182.                 jr      z,loc_1205
  1183.                 cp      ","
  1184.                 jp      nz,SINTAX_ERROR
  1185.                 call    GET_NEXT_SYM
  1186.                 call    PUT_NUMDSK_STK
  1187.                 jr      loc_11FB
  1188.  
  1189. LIST4CODES      call    SET_AND_PUT
  1190. loc_11FB        call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1191.                 call    GET_STKBOT_
  1192.                 ex      de,hl
  1193.                 call    SETUP_DISK
  1194. loc_1205        call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1195.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  1196.                 ld      (TRD_5CF9),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  1197.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  1198.                 ld      a,(TRD_5CDB)
  1199.                 cp      2
  1200.                 push    af
  1201.                 call    z,CLEAR_SCREEN  ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  1202.                 pop     af
  1203.                 cp      11h
  1204.                 jp      nc,SINTAX_ERROR
  1205.                 call    OPENSTREAM
  1206.                 ld      a,0FFh
  1207.                 ld      (TRD_5CF8),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  1208.                 call    CREATE_222BYTES ; СОЗДАНИЕ БУФЕРА НА 0X222 БАЙТА
  1209.                 ld      hl,TRD_5E06
  1210.                 ld      de,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1211.                 ld      bc,20h
  1212.                 ldir
  1213.                 call    RD_0SEC2BUF     ; ЧТЕНИЕ СЕКТОРА 0 КАТАЛОГА
  1214.                 ld      hl,TRD_5D25
  1215.                 push    hl
  1216. loc_123E        ld      hl,TXT_TITLE    ; "Title:"
  1217.                 push    bc
  1218.                 rst     18h
  1219.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1220.                 ld      bc,14h
  1221.                 add     hl,bc
  1222.                 rst     18h
  1223.                 ld      hl,TXT_DISKDRIVE
  1224.                 rst     18h
  1225.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  1226.                 add     a,"A"
  1227.                 call    PRINT_A_
  1228.                 call    PRINT_0D
  1229.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1230.                 ld      bc,3
  1231.                 add     hl,bc
  1232.                 ld      a,(hl)
  1233.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1234.                 ld      bc,13h
  1235.                 add     hl,bc
  1236.                 sub     (hl)
  1237.                 push    hl
  1238.                 call    PRINT_CHISLO_A_
  1239.                 ld      hl,TXT_FILE_S_  ; " File(s)"
  1240.                 rst     18h
  1241.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1242.                 ld      bc,2
  1243.                 add     hl,bc
  1244.                 ld      a,(hl)
  1245.                 ld      hl,TXT_40TRK_SS
  1246.                 cp      19h
  1247.                 jr      z,loc_1292
  1248.                 ld      hl,TXT_80TRK_SS
  1249.                 cp      18h
  1250.                 jr      z,loc_1292
  1251.                 ld      hl,TXT_40TRK_DS
  1252.                 cp      17h
  1253.                 jr      z,loc_1292
  1254.                 ld      hl,TXT_80TRK_DS
  1255. loc_1292        rst     18h
  1256.                 pop     hl
  1257.                 ld      c,(hl)
  1258.                 call    CONV2_2BYTES
  1259.                 ld      hl,TXT_DELFILES ; " Del."
  1260.                 rst     18h
  1261.                 ld      hl,TXT_FREESECS
  1262.                 rst     18h
  1263.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1264.                 ld      bc,4
  1265.                 add     hl,bc
  1266.                 ld      c,(hl)
  1267.                 inc     hl
  1268.                 ld      b,(hl)
  1269.                 call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
  1270.                 ld      hl,TXT_FILENAME
  1271.                 rst     18h
  1272.                 pop     bc
  1273.                 pop     hl
  1274.                 ld      b,10h
  1275. loc_12B5        call    FIND_END_BUFDIR
  1276.                 call    PRINT_0D
  1277.                 push    bc
  1278.                 push    hl
  1279.                 call    PRINT_FILENAME  ; ПЕЧАТЬ ИМЕНИ ФАЙЛА
  1280.                 ld      bc,0Dh
  1281.                 pop     hl
  1282.                 push    hl
  1283.                 add     hl,bc
  1284.                 ld      c,(hl)
  1285.                 push    bc
  1286.                 ld      a,c
  1287.                 ld      b,2
  1288.                 cp      10
  1289.                 jr      c,loc_12D0
  1290.                 dec     b
  1291. loc_12D0        cp      100
  1292.                 jr      nc,loc_12D9
  1293. loc_12D4        ld      a," "
  1294.                 rst     10h
  1295.                 djnz    loc_12D4
  1296. loc_12D9        pop     bc
  1297.                 call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
  1298.                 ld      hl,TXT_1SPACE
  1299.                 rst     18h
  1300.                 pop     hl
  1301.                 push    hl
  1302.                 ld      bc,9
  1303.                 add     hl,bc
  1304.                 ld      e,(hl)
  1305.                 inc     hl
  1306.                 ld      d,(hl)
  1307.                 push    hl
  1308.                 ex      de,hl
  1309.                 call    PRINT_HL_CHISLO
  1310.                 ld      a," "
  1311.                 call    PRINT_A_
  1312.                 pop     hl
  1313.                 inc     hl
  1314.                 ld      e,(hl)
  1315.                 inc     hl
  1316.                 ld      d,(hl)
  1317.                 ex      de,hl
  1318.                 call    PRINT_HL_CHISLO
  1319.                 pop     hl
  1320.                 push    hl
  1321.                 ld      bc,8
  1322.                 add     hl,bc
  1323.                 ld      a,(hl)
  1324.                 cp      "B"
  1325.                 call    z,PRN_ADR_ASTART
  1326.                 pop     hl
  1327.                 pop     bc
  1328.                 ld      de,10h
  1329.                 add     hl,de
  1330.                 djnz    loc_12B5
  1331.                 push    hl
  1332.                 call    PRINT_0D
  1333.                 call    PRINT_0D
  1334.                 jp      loc_123E
  1335.  
  1336. PRN_ADR_ASTART  ld      bc,5
  1337.                 add     hl,bc
  1338.                 ld      b,(hl)
  1339.                 inc     hl
  1340.                 ld      e,(hl)
  1341.                 inc     hl
  1342.                 ld      d,(hl)
  1343.                 dec     b
  1344.                 jr      z,loc_1335
  1345.                 dec     b
  1346.                 jr      z,loc_1335
  1347.                 ld      a,10h
  1348. loc_132C        inc     e
  1349.                 cp      e
  1350.                 jr      nz,loc_1333
  1351.                 ld      e,0
  1352.                 inc     d
  1353. loc_1333        djnz    loc_132C
  1354. loc_1335        ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1355.                 ld      bc,21h
  1356.                 add     hl,bc
  1357.                 ld      b,2
  1358.                 push    hl
  1359.                 call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  1360.                 ld      a,80h
  1361.                 pop     hl
  1362.                 ld      bc,200h
  1363.                 cpir
  1364.                 ld      a,(hl)
  1365.                 cp      0AAh
  1366.                 ret     nz
  1367.                 inc     hl
  1368.                 ld      c,(hl)
  1369.                 inc     hl
  1370.                 ld      b,(hl)
  1371.                 ld      a,b
  1372.                 or      c
  1373.                 ret     z
  1374.                 push    bc
  1375.                 ld      a," "
  1376.                 call    PRINT_A_
  1377.                 pop     bc
  1378.                 call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
  1379.                 ret
  1380.  
  1381. COPY_S          call    SET_CH_ADD      ; УСТАНОВКА CH_ADD
  1382.                 call    GET_NEXT_SYM
  1383.                 call    PUT_NUMDSK_STK
  1384.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1385.                 call    RESERVED_RAM
  1386.                 ld      hl,TXT_INS_SRC  ; "Insert Source disk then press Y"
  1387.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1388. loc_1375        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1389.                 cp      "Y"
  1390.                 jr      nz,loc_1375
  1391.                 call    CLEAR_DOWN_SCR  ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  1392.                 call    INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  1393.                 call    SET_CP_FILENAME
  1394.                 jp      nz,ERR_NOFILES
  1395.                 call    COPY_ON1DISK
  1396.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  1397.                 cp      "#"
  1398.                 jp      nz,ERR_OK
  1399. loc_1393        ld      a,10
  1400.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  1401.                 ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  1402.                 inc     (hl)
  1403.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  1404.                 ld      hl,TXT_INS_SRC  ; "Insert Source disk then press Y"
  1405.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1406. loc_13A5        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1407.                 cp      "Y"
  1408.                 jr      nz,loc_13A5
  1409.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  1410.                 jp      nz,ERR_OK
  1411.                 call    COPY_ON1DISK
  1412.                 jr      loc_1393
  1413.  
  1414. COPY_ON1DISK    call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1415.                 ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  1416.                 ld      de,TRD_5CED     ; НОМЕР ПЕРВОГО ТРЕКА ФАЙЛА
  1417.                 ld      bc,7
  1418.                 ldir
  1419.                 ld      a,(TRD_5CF1)
  1420.                 ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
  1421.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  1422.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  1423.                 ld      (TRD_5CD9),a    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1424.                 ld      a,0FFh
  1425.                 ld      (TRD_5D21),a
  1426.                 call    COPY_ON1DISK_
  1427.                 ld      hl,(TRD_5D1F)
  1428.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1429.                 ld      hl,(TRD_5CF4)
  1430.                 ld      (TRD_5E06),hl
  1431.                 ld      hl,TRD_5E09
  1432.                 inc     (hl)
  1433.                 ld      c,(hl)
  1434.                 dec     c
  1435.                 ld      b,0
  1436.                 push    bc
  1437.                 ld      de,9
  1438.                 ld      (TRD_5CF4),de
  1439.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  1440.                 pop     bc
  1441.                 call    SETHEADFILENAME
  1442.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  1443.                 ret
  1444.  
  1445. CP_FREESEC      xor     a
  1446.                 ld      (TRD_5D21),a
  1447.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  1448.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  1449.                 ld      (TRD_5CDA),a
  1450.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  1451.                 jp      z,FILE_EXISTS
  1452.                 call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  1453.                 ld      a,(TRD_5E09)
  1454.                 cp      80h
  1455.                 jp      z,ERR_DIRFULL
  1456.                 ld      hl,TRD_5CED     ; НОМЕР ПЕРВОГО ТРЕКА ФАЙЛА
  1457.                 ld      de,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  1458.                 ld      bc,7
  1459.                 ldir
  1460.                 call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  1461.                 ld      a,(TRD_5D10)    ; СТАРШИЙ БАЙТ ОШИБКИ
  1462.                 ld      (TRD_5CEA),a    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  1463.                 ld      de,(TRD_5CEA)   ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  1464.                 ld      d,0
  1465.                 or      a
  1466.                 ld      hl,(TRD_5E0A)
  1467.                 sbc     hl,de
  1468.                 jp      c,loc_1C45
  1469.                 ld      (TRD_5E0A),hl
  1470.                 ld      hl,(TRD_5E06)
  1471.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1472.                 ld      (TRD_5D1F),hl
  1473.                 ret
  1474.  
  1475. COPY_ON1DISK_   ld      a,(TRD_5CF1)
  1476.                 or      a
  1477.                 ret     z
  1478.                 ld      a,(TRD_5D21)
  1479.                 or      a
  1480.                 jr      nz,loc_146F
  1481.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  1482.                 ld      hl,TXT_INS_SRC  ; "Insert Source disk then press Y"
  1483.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1484. loc_1465        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1485.                 cp      "Y"
  1486.                 jr      nz,loc_1465
  1487.                 call    CLEAR_DOWN_SCR  ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  1488. loc_146F        ld      a,(TRD_5CF1)
  1489.                 or      a
  1490.                 ret     z
  1491.                 push    hl
  1492.                 ld      hl,TRD_5D23
  1493.                 sub     (hl)
  1494.                 pop     hl
  1495.                 jr      nc,loc_14CB
  1496.                 ld      a,(TRD_5CF1)
  1497.                 ld      b,a
  1498.                 xor     a
  1499.                 ld      (TRD_5CF1),a
  1500. loc_1484        push    bc
  1501.                 ld      (TRD_5CCE),a    ; #00-ЧТЕНИЕ СЕКТОРА,#FF-ЗАПИСЬ СЕКТОРА
  1502.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1503.                 push    hl
  1504.                 ld      de,(TRD_5CF2)
  1505.                 call    SET_DISK_SOURCE
  1506.                 call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  1507.                 ld      hl,(TRD_5CF4)
  1508.                 ld      (TRD_5CF2),hl
  1509.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  1510.                 ld      hl,TXT_INS_DEST ; "Insert Destination disk"
  1511.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1512. loc_14A5        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1513.                 cp      "Y"
  1514.                 jr      nz,loc_14A5
  1515.                 call    CLEAR_DOWN_SCR  ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  1516.                 ld      a,(TRD_5D21)
  1517.                 or      a
  1518.                 call    nz,CP_FREESEC
  1519.                 pop     hl
  1520.                 pop     bc
  1521.                 ld      de,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1522.                 call    SETUP_DISK_DEST
  1523.                 call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
  1524.                 ld      hl,(TRD_5CF4)
  1525.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1526.                 jp      COPY_ON1DISK_
  1527.  
  1528. loc_14CB        ld      (TRD_5CF1),a
  1529.                 push    hl
  1530.                 ld      hl,TRD_5D23
  1531.                 ld      b,(hl)
  1532.                 pop     hl
  1533.                 xor     a
  1534.                 jp      loc_1484
  1535.  
  1536. SET_DISK_SOURCE push    hl
  1537.                 push    de
  1538.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  1539.                 ld      a,(TRD_5CD9)    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1540.                 ld      (hl),a
  1541.                 pop     de
  1542.                 pop     hl
  1543.                 ret
  1544.  
  1545. SETUP_DISK_DEST push    hl
  1546.                 push    de
  1547.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  1548.                 ld      a,(TRD_5CDA)
  1549.                 ld      (hl),a
  1550.                 pop     de
  1551.                 pop     hl
  1552.                 ret
  1553.  
  1554. CP_FREE_DEST    xor     a
  1555.                 ld      (TRD_5D21),a
  1556.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  1557.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  1558.                 ld      (TRD_5CDA),a
  1559.                 ld      a,(TRD_5E08)
  1560.                 ld      (TRD_5CE6+1),a  ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  1561.                 ld      hl,640
  1562.                 cp      19h             ; 40 ДОРОЖЕК 1 СТОРОНА
  1563.                 jr      z,SAVE_SECS_DEST
  1564.                 ld      hl,1280
  1565.                 cp      18h             ; 80 ДОРОЖЕК 1 СТОРОНА
  1566.                 jr      z,SAVE_SECS_DEST
  1567.                 cp      17h             ; 40 ДОРОЖЕК 2 СТОРОНЫ
  1568.                 jr      z,SAVE_SECS_DEST
  1569.                 ld      hl,2560
  1570.                 cp      16h             ; 80 ДОРОЖЕК 2 СТОРОНЫ
  1571.                 jr      z,SAVE_SECS_DEST
  1572.                 jp      SINTAX_ERROR
  1573.  
  1574. SAVE_SECS_DEST  ld      (TRD_5CDD),hl   ; ИМЯ ФАЙЛА
  1575.                 ld      bc,(TRD_5CDF)
  1576.                 sbc     hl,bc
  1577.                 jp      c,loc_1C45
  1578.                 ret
  1579.  
  1580. COPY_B          call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1581.                 call    RESERVED_RAM
  1582.                 ld      hl,TXT_BACKUPDISK ; "BACKUP DISK"
  1583.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1584.                 ld      hl,TXT_INS_SRC  ; "Insert Source disk then press Y"
  1585.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1586. loc_153E        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1587.                 cp      "Y"
  1588.                 jr      nz,loc_153E
  1589.                 call    CLEAR_DOWN_SCR  ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  1590.                 ld      a,0FFh
  1591.                 ld      (TRD_5D21),a
  1592.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  1593.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  1594.                 ld      (TRD_5CD9),a    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1595.                 ld      a,(TRD_5E08)
  1596.                 cp      19h             ; 40 ДОРОЖЕК 1 СТОРОНА
  1597.                 ld      hl,640
  1598.                 jr      z,loc_1575
  1599.                 ld      hl,1280
  1600.                 cp      18h             ; 80 ДОРОЖЕК 1 СТОРОНА
  1601.                 jr      z,loc_1575
  1602.                 cp      17h             ; 40 ДОРОЖЕК 2 СТОРОНЫ
  1603.                 jr      z,loc_1575
  1604.                 ld      hl,2560
  1605.                 cp      16h             ; 80 ДОРОЖЕК 2 СТОРОНЫ
  1606.                 jr      z,loc_1575
  1607.                 JP DISCERROR_
  1608.  
  1609. loc_1575        ld      bc,(TRD_5E0A)
  1610.                 sbc     hl,bc
  1611.                 ld      (TRD_5CE5),hl   ; РАСШИРЕНИЕ ФАЙЛА
  1612.                 ld      (TRD_5CDF),hl
  1613.                 ld      hl,0
  1614.                 ld      (TRD_5CE1),hl
  1615.                 ld      (TRD_5CE3),hl
  1616.                 call    COPY_SECTORS
  1617.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  1618.                 ld      a,(TRD_5CE6+1)  ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  1619.                 ld      (TRD_5E08),a
  1620.                 ld      hl,(TRD_5CDD)   ; ИМЯ ФАЙЛА
  1621.                 ld      bc,(TRD_5CDF)
  1622.                 sbc     hl,bc
  1623.                 ld      (TRD_5E0A),hl
  1624.                 call    SETUP_DISK_DEST
  1625.                 ld      de,9
  1626.                 ld      (TRD_5CF4),de
  1627.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  1628.                 jp      ERR_OK
  1629.  
  1630. CP_COPY_SECS    ld      hl,(TRD_5CE5)   ; РАСШИРЕНИЕ ФАЙЛА
  1631.                 ld      a,h
  1632.                 or      l
  1633.                 ret
  1634.  
  1635. COPY_SECTORS    call    CP_COPY_SECS
  1636.                 ret     z
  1637.                 ld      a,(TRD_5D21)
  1638.                 or      a
  1639.                 jr      nz,loc_15DB
  1640.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  1641.                 ld      hl,TXT_BACKUPDISK ; "BACKUP DISK"
  1642.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1643.                 ld      hl,TXT_INS_SRC  ; "Insert Source disk then press Y"
  1644.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1645. loc_15D1        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1646.                 cp      "Y"
  1647.                 jr      nz,loc_15D1
  1648.                 call    CLEAR_DOWN_SCR  ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  1649. loc_15DB        call    CP_COPY_SECS
  1650.                 ret     z
  1651.                 push    bc
  1652.                 push    hl
  1653.                 ld      hl,TRD_5D23
  1654.                 ld      c,(hl)
  1655.                 ld      b,0
  1656.                 pop     hl
  1657.                 sbc     hl,bc
  1658.                 pop     bc
  1659.                 jp      nc,loc_1644
  1660.                 ld      bc,(TRD_5CE5)   ; РАСШИРЕНИЕ ФАЙЛА
  1661.                 ld      hl,0
  1662.                 ld      (TRD_5CE5),hl   ; РАСШИРЕНИЕ ФАЙЛА
  1663. loc_15F8        push    bc
  1664.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1665.                 push    hl
  1666.                 call    SET_DISK_SOURCE
  1667.                 ld      de,(TRD_5CE1)
  1668.                 ld      b,c
  1669.                 call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  1670.                 ld      hl,(TRD_5CF4)
  1671.                 ld      (TRD_5CE1),hl
  1672.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  1673.                 ld      hl,TXT_BACKUPDISK ; "BACKUP DISK"
  1674.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1675.                 ld      hl,TXT_INS_DEST ; "Insert Destination disk"
  1676.                 call    PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  1677. loc_161D        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  1678.                 cp      "Y"
  1679.                 jr      nz,loc_161D
  1680.                 call    CLEAR_DOWN_SCR  ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  1681.                 ld      a,(TRD_5D21)
  1682.                 or      a
  1683.                 call    nz,CP_FREE_DEST
  1684.                 pop     hl
  1685.                 pop     bc
  1686.                 ld      de,(TRD_5CE3)
  1687.                 ld      b,c
  1688.                 call    SETUP_DISK_DEST
  1689.                 call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
  1690.                 ld      hl,(TRD_5CF4)
  1691.                 ld      (TRD_5CE3),hl
  1692.                 jp      COPY_SECTORS
  1693.  
  1694. loc_1644        ld      (TRD_5CE5),hl   ; РАСШИРЕНИЕ ФАЙЛА
  1695.                 push    hl
  1696.                 ld      hl,TRD_5D23
  1697.                 ld      c,(hl)
  1698.                 ld      b,0
  1699.                 pop     hl
  1700.                 xor     a
  1701.                 jp      loc_15F8
  1702.  
  1703. CP_ERASED_FILE  call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1704.                 ld      a,(TRD_5CDD)    ; ИМЯ ФАЙЛА
  1705.                 cp      1
  1706.                 ret
  1707.  
  1708. COM_08          ld      c,a             ; СЧИТЫВАНИЕ ОПИСАТЕЛЯ ФАЙЛА В БУФЕР #5CDD
  1709. ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1710. RDHEAD_FILENAME xor     a
  1711. loc_165E        push    bc
  1712.                 call    RD_HEAD_COPY
  1713.                 pop     bc
  1714.                 ret
  1715.  
  1716. COM_09          ld      c,a             ; ЗАПИСЬ ОПИСАТЕЛЯ ФАЙЛА НА ДИСК
  1717.                 call    SETHEADFILENAME
  1718.                 jp      REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  1719.  
  1720. SETHEADFILENAME ld      a,0FFh
  1721.                 jr      loc_165E
  1722.  
  1723. RESERVED_RAM    ld      a,0FFh
  1724.                 ld      (TRD_5D0E),a    ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
  1725.                 call    CP_FREE_SECS
  1726.                 ld      hl,(WORKSP)
  1727.                 ld      (TRD_5CCF),hl   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1728.                 jp      CREATE_FREERAM
  1729.  
  1730. CP_FREE_SECS    rst     20h
  1731.                 dw 1F1Ah                ; проверка размера свободной памяти
  1732.                 ld      hl,0FFFFh
  1733.                 sbc     hl,bc
  1734.                 ld      a,h
  1735.                 cp      10h
  1736.                 jr      nc,loc_168F
  1737.                 ld      a,11h
  1738. loc_168F        dec     a
  1739.                 ld      (TRD_5D23),a
  1740.                 ld      b,a
  1741.                 ld      c,0
  1742.                 ret
  1743.  
  1744. ADD_FILESIZE    ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  1745.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  1746.                 ld      (TRD_5CDB),hl
  1747.                 ld      de,(TRD_5CEA)   ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  1748.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1749.                 ld      d,0
  1750.                 add     hl,de
  1751.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1752.                 ret
  1753.  
  1754. MOVE            call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1755.                 call    RESERVED_RAM
  1756.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  1757.                 ld      a,(TRD_5E19)
  1758.                 or      a
  1759.                 jp      z,ERR_OK
  1760.                 ld      hl,0
  1761.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1762.                 ld      c,0FFh
  1763. loc_16C3        inc     c
  1764.                 call    CP_ERASED_FILE
  1765.                 jr      nz,loc_16C3
  1766.                 ld      a,c
  1767.                 ld      (TRD_5CD4),a
  1768.                 ld      hl,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1769.                 ld      (TRD_5CD5),hl
  1770.                 call    ADD_FILESIZE
  1771. loc_16D6        inc     c
  1772.                 call    CP_ERASED_FILE
  1773.                 jr      z,loc_16D6
  1774.                 cp      0
  1775.                 jp      nz,loc_1710
  1776.                 ld      a,(TRD_5CD4)
  1777.                 ld      c,a
  1778. loc_16E5        inc     c
  1779.                 call    CP_ERASED_FILE
  1780.                 cp      0
  1781.                 jr      z,REINIT_9SEC
  1782.                 xor     a
  1783.                 ld      (TRD_5CDD),a    ; ИМЯ ФАЙЛА
  1784.                 call    WRHEAD_FILENAME ; СОХРАНЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1785.                 call    ADD_FILESIZE
  1786.                 jr      loc_16E5
  1787.  
  1788.                 DUPL 0X1710-$,0FFh
  1789. loc_1710        ld      a,(TRD_5CEA)    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  1790.                 ld      (TRD_5CD3),a
  1791.                 ld      (TRD_5CD1),a
  1792.                 ld      hl,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1793.                 ld      (TRD_5CD5),hl
  1794.                 push    bc
  1795.                 call    MOVE_FILE
  1796.                 pop     bc
  1797.                 ld      hl,(TRD_5CF4)
  1798.                 ld      (TRD_5CD5),hl
  1799.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1800.                 xor     a
  1801.                 ld      (TRD_5CEA),a    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  1802.                 ld      a,(TRD_5CDD)    ; ИМЯ ФАЙЛА
  1803.                 push    af
  1804.                 ld      a,1
  1805.                 ld      (TRD_5CDD),a    ; ИМЯ ФАЙЛА
  1806.                 call    WRHEAD_FILENAME ; СОХРАНЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1807.                 pop     af
  1808.                 ld      (TRD_5CDD),a    ; ИМЯ ФАЙЛА
  1809.                 ld      a,(TRD_5CD4)
  1810.                 ld      c,a
  1811.                 ld      hl,(TRD_5CDB)
  1812.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1813.                 ld      a,(TRD_5CD1)
  1814.                 ld      (TRD_5CEA),a    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  1815.                 call    WRHEAD_FILENAME ; СОХРАНЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1816.                 ld      a,(TRD_5CD4)
  1817.                 inc     a
  1818.                 ld      c,a
  1819.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1820.                 ld      hl,(TRD_5CD5)
  1821.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  1822.                 call    WRHEAD_FILENAME ; СОХРАНЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1823.                 ld      a,(TRD_5CD4)
  1824.                 ld      c,a
  1825.                 jp      loc_16C3
  1826.  
  1827. REINIT_9SEC     ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1828.                 ld      bc,1000h
  1829.                 call    DEL_WORKRAM
  1830.                 call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  1831.                 ld      hl,(TRD_5E0A)
  1832.                 ld      de,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1833.                 add     hl,de
  1834.                 ld      (TRD_5E0A),hl
  1835.                 ld      a,(TRD_5E09)
  1836.                 ld      hl,TRD_5E19
  1837.                 sub     (hl)
  1838.                 ld      (TRD_5E09),a
  1839.                 ld      (hl),0
  1840.                 ld      hl,(TRD_5CD5)
  1841.                 ld      (TRD_5E06),hl
  1842.                 push    af
  1843.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  1844.                 pop     af
  1845.                 ld      c,a
  1846.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1847.                 xor     a
  1848.                 ld      (TRD_5CDD),a    ; ИМЯ ФАЙЛА
  1849.                 jp      loc_569
  1850.  
  1851. MOVE_FILE       ld      a,(TRD_5CD3)
  1852.                 or      a
  1853.                 ret     z
  1854.                 push    hl
  1855.                 ld      hl,TRD_5D23
  1856.                 sub     (hl)
  1857.                 pop     hl
  1858.                 jr      nc,loc_17DD
  1859.                 ld      a,(TRD_5CD3)
  1860.                 ld      b,a
  1861.                 xor     a
  1862.                 ld      (TRD_5CD3),a
  1863. loc_17BA        push    bc
  1864.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  1865.                 push    hl
  1866.                 ld      de,(TRD_5CD5)
  1867.                 call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  1868.                 ld      hl,(TRD_5CF4)
  1869.                 ld      (TRD_5CD5),hl
  1870.                 pop     hl
  1871.                 pop     bc
  1872.                 ld      de,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  1873.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  1874.                 call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
  1875.                 ld      hl,(TRD_5CF4)
  1876.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  1877.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  1878.                 jr      MOVE_FILE
  1879.  
  1880. loc_17DD        ld      (TRD_5CD3),a
  1881.                 push    hl
  1882.                 ld      hl,TRD_5D23
  1883.                 ld      b,(hl)
  1884.                 pop     hl
  1885.                 xor     a
  1886.                 jr      loc_17BA
  1887.  
  1888. RD_HEAD_COPY    push    af
  1889.                 ld      hl,TRD_5CCC     ; ТЕКУЩИЙ НОМЕР СЕКТОРА ПРИ ЧТЕНИИ КАТАЛОГА
  1890.                 ld      (hl),0
  1891.                 ld      a,c
  1892. loc_17F0        sub     10h
  1893.                 jr      c,loc_17F7
  1894.                 inc     (hl)
  1895.                 jr      loc_17F0
  1896.  
  1897. loc_17F7        add     a,10h
  1898.                 ld      c,a
  1899.                 push    bc
  1900.                 call    READ_NUM_SEC    ; ЧТЕНИЕ СЕКТОРА КАТАЛОГА ПО НОМЕРУ
  1901.                 pop     bc
  1902.                 pop     af
  1903.                 call    FIND_HEAD_BUF
  1904.                 ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
  1905.                 ld      bc,10h
  1906.                 or      a
  1907.                 jr      z,loc_180D      ; FIX
  1908.                 ex      de,hl
  1909. loc_180D        ldir                    ; FIX
  1910.                 ret
  1911.  
  1912. VERIFY          ld      a,0FFh
  1913.                 ld      (TRD_5CF9),a    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  1914. LOAD            call    ZERO2HIGH_ERR
  1915. loc_1818        call    LOAD_FILE
  1916.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1917.                 ld      a,0FFh
  1918.                 ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
  1919.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  1920.                 cp      0FFh
  1921.                 jp      z,ERR_OK
  1922.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  1923.                 cp      "B"
  1924.                 jp      z,WORK4AUTORUN  ; ОБРАБОТКА НОМЕРА СТРОКИ АВТОСТАРТА ПРОГРАММЫ НА БЕЙСИКЕ
  1925.                 jp      ERR_OK
  1926.  
  1927. LOAD_FILE       call    GET_PARAMS
  1928.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1929.                 call    CP_PARAMS       ; НАСТРОЙКА ПАРАМЕТРОВ ЗАГРУЗКИ ФАЙЛА
  1930.                 jp      RD_FILE
  1931.  
  1932. ; ПОЛУЧЕНИЕ АДРЕСА ЗАГРУЗКИ КОДА,ЕСЛИ УКАЗАН
  1933. GET_LOAD_CODE   ld      hl,(CH_ADD)
  1934.                 inc     hl
  1935.                 ld      a,(hl)
  1936.                 cp      0Dh             ; СЛЕДУЮЩИЙ СИМВОЛ В СТРОКЕ "ENTER"?
  1937.                 ret     z               ; ЕСЛИ ДА,ТО ВЫХОД-ПАРАМЕТР НЕ  ЗАДАН
  1938.                 ld      a,1
  1939.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  1940.                 call    INPUT_PARAMS    ; ПОЛУЧЕНИЕ АДРЕСА КУДА ГРУЗИТЬ
  1941. ZERO2HIGH_ERR   xor     a
  1942.                 ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
  1943.                 ret
  1944.  
  1945. sub_1857        call    INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  1946.                 ld      a,"B"
  1947.                 cp      b
  1948.                 jr      nz,loc_1866
  1949.                 ld      hl,(CH_ADD)
  1950.                 dec     hl
  1951.                 ld      (CH_ADD),hl
  1952. loc_1866        call    INPUT_PARAMS
  1953.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1954.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  1955.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  1956.                 ld      hl,(TRD_5CDB)
  1957.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1958.                 xor     a
  1959.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  1960.                 ret
  1961.  
  1962. GET_PARAMS      call    CP_SECOND_SYM   ; ПРОВЕРКА СЛЕДУЮЩЕГО СИМВОЛА
  1963.                 jp      z,loc_27B
  1964.                 call    SET_AND_PUT
  1965.                 call    CP_HIGH_ERR
  1966.                 call    nz,sub_1857
  1967.                 call    GET_SYMSTR
  1968.                 cp      0AFh            ; CODE
  1969.                 call    z,GET_LOAD_CODE ; ПОЛУЧЕНИЕ АДРЕСА ЗАГРУЗКИ КОДА,ЕСЛИ   УКАЗАН
  1970.                 cp      0E4h            ; DATA
  1971.                 push    af
  1972.                 call    CP_HIGH_ERR
  1973.                 call    z,INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  1974.                 pop     af
  1975.                 call    z,READ_MASSIV
  1976.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  1977.                 call    FIND_FILE       ; ПОИСК ФАЙЛА ПО ИМЕНИ
  1978. FIND_RD_HEAD    jp      nz,ERR_NOFILES
  1979.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  1980.                 ret
  1981.  
  1982. ; НАСТРОЙКА ПАРАМЕТРОВ ЗАГРУЗКИ ФАЙЛА
  1983. CP_PARAMS       ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  1984.                 or      a
  1985.                 ld      hl,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  1986.                 jr      z,loc_18B7
  1987.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  1988. loc_18B7        CALL ADR_START_COM
  1989.                 NOP
  1990.                 cp      3
  1991.                 ld      a,(TRD_5CEA)    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  1992.                 push    de
  1993.                 ld      de,(TRD_5CE8)   ; ДЛИНА ПРОГРАММЫ
  1994.                 jr      nz,loc_18CB
  1995.                 ld      de,(TRD_5CDB)
  1996. loc_18CB        ld      b,a
  1997.                 ld      (TRD_5CDB),de
  1998.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  1999.                 cp      "C"
  2000.                 ld      a,b
  2001.                 jr      nz,loc_18FD
  2002.                 ld      a,b
  2003.                 cp      d
  2004.                 jr      z,loc_18F6
  2005.                 dec     a
  2006.                 cp      d
  2007.                 ld      a,b
  2008.                 jr      z,loc_18F6
  2009.                 ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  2010.                 cp      3
  2011.                 ld      a,b
  2012.                 jr      z,loc_18F6
  2013.                 xor     a
  2014.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  2015.                 ld      d,b
  2016.                 ld      e,0
  2017.                 ld      (TRD_5CDB),de
  2018.                 jr      loc_18F9
  2019.  
  2020. loc_18F6        call    LOAD_FULLFILE
  2021. loc_18F9        ld      a,b
  2022.                 call    KOLWO_SECS
  2023. loc_18FD        ld      b,a
  2024.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  2025.                 cp      "C"
  2026.                 pop     de
  2027.                 ret     z
  2028.                 push    de
  2029.                 cp      "B"
  2030.                 push    af
  2031.                 call    z,LOAD4BASIC
  2032.                 pop     af
  2033.                 cp      "D"
  2034.                 call    z,LOAD4DATA
  2035.                 call    LOAD_FULLFILE
  2036.                 ld      a,(TRD_5CDC)
  2037.                 ld      b,a
  2038.                 pop     de
  2039.                 ret
  2040.  
  2041. LOAD_FULLFILE   ld      a,3
  2042.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  2043.                 ret
  2044.  
  2045. RD_FILE         call    CP_HIGH_ERR
  2046.                 jr      z,loc_192D
  2047.                 push    af
  2048.                 call    NUM_SEC_FILE
  2049.                 pop     af
  2050.                 cp      0FFh
  2051. loc_192D        push    af
  2052.                 call    z,RD_SECTORS
  2053.                 pop     af
  2054.                 jr      z,loc_1937
  2055.                 jp      COM_06          ; ЗАПИСЬ СЕКТОРОВ
  2056.  
  2057. loc_1937        ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  2058.                 cp      3
  2059.                 call    z,RD_OR_VERIFY
  2060.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  2061.                 dec     hl
  2062.                 ld      (hl),80h
  2063.                 ret
  2064.  
  2065. RD_OR_VERIFY    ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  2066.                 cp      0FFh
  2067.                 jp      nz,LOAD_END_FILE
  2068.                 ld      a,(TRD_5CDB)
  2069.                 or      a
  2070.                 ret     z
  2071.                 ld      c,a
  2072.                 ld      b,1
  2073.                 ld      de,(TRD_5CF4)
  2074.                 jr      loc_196A
  2075.  
  2076. RD_SECTORS      ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  2077.                 cp      0FFh
  2078.                 jp      nz,COM_05       ; ЧТЕНИЕ СЕКТОРОВ
  2079.                 ld      (TRD_5CF4),de
  2080.                 ld      c,0
  2081. loc_196A        ld      a,b
  2082.                 or      a
  2083.                 ret     z
  2084.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2085.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2086.                 ld      (TRD_5CD9),de   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2087. loc_1974        push    bc
  2088.                 ld      b,1
  2089.                 ld      de,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2090.                 ld      hl,TRD_5D25
  2091.                 call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  2092.                 ld      hl,(TRD_5CF4)
  2093.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2094.                 pop     bc
  2095.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2096.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2097.                 ld      de,TRD_5D25
  2098. loc_198E        ld      a,(de)
  2099.                 cp      (hl)
  2100.                 jr      nz,loc_199D
  2101.                 inc     hl
  2102.                 inc     de
  2103.                 dec     c
  2104.                 jr      nz,loc_198E
  2105.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2106.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2107.                 djnz    loc_1974
  2108.                 ret
  2109.  
  2110. loc_199D        ld      hl,TXT_VERIFYERR ; "Verify Error."
  2111.                 ld      a,0Dh
  2112.                 jp      PRINT_TXTERR
  2113.  
  2114. PEEK            ld      a,0FFh
  2115.                 jr      loc_19AB
  2116.  
  2117. POKE            ld      a,0EEh
  2118. loc_19AB        ld      (TRD_5D10),a    ; СТАРШИЙ БАЙТ ОШИБКИ
  2119.                 jp      loc_1818
  2120.  
  2121. MERGE           ld      a,0FFh
  2122.                 ld      (TRD_5D1F),a
  2123.                 call    GET_PARAMS
  2124.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2125.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  2126.                 cp      "B"
  2127.                 jp      nz,SINTAX_ERROR
  2128.                 ld      bc,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  2129.                 ld      (TRD_5CDB),bc
  2130.                 push    bc
  2131.                 inc     bc
  2132.                 rst     20h
  2133.                 dw 30h                  ; создание свободного места
  2134.                 ld      (hl),80h
  2135.                 ex      de,hl
  2136.                 pop     de
  2137.                 push    hl
  2138.                 ld      de,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  2139.                 call    LOAD_FULLFILE
  2140.                 ld      a,(TRD_5CDC)
  2141.                 ld      b,a
  2142.                 call    ZERO2HIGH_ERR
  2143.                 call    RD_FILE
  2144.                 pop     hl
  2145.                 ld      de,(PROG)
  2146.                 rst     20h
  2147.                 dw 8D2h                 ; работа со строками программы на Бейсике
  2148.                 jp      ERR_OK
  2149.  
  2150. CP_FREE4PROG    ex      de,hl
  2151.                 scf
  2152.                 sbc     hl,de
  2153.                 ret     c
  2154.                 ld      de,0Ah
  2155.                 add     hl,de
  2156.                 ld      b,h
  2157.                 ld      c,l
  2158.  
  2159. CP_FREE_RAM     rst     20h
  2160.                 dw 1F05h                ; проверка свободной памяти
  2161.                 ret
  2162.  
  2163. LOAD4BASIC      ld      de,(PROG)
  2164.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  2165.                 dec     hl
  2166.                 push    hl
  2167.                 push    de
  2168.                 sbc     hl,de
  2169.                 ld      de,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  2170.                 push    de
  2171.                 push    hl
  2172.                 ld      hl,0
  2173.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  2174.                 cp      0FFh
  2175.                 jr      z,loc_1A20
  2176.                 ld      hl,5
  2177. loc_1A20        add     hl,de
  2178.                 ld      (TRD_5CDB),hl
  2179.                 pop     hl
  2180.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  2181.                 cp      0FFh
  2182.                 jr      nz,loc_1A31
  2183.                 pop     de
  2184.                 pop     de
  2185.                 pop     hl
  2186.                 jr      loc_1A48
  2187.  
  2188. loc_1A31        call    CP_FREE4PROG
  2189.                 pop     bc
  2190.                 pop     de
  2191.                 pop     hl
  2192.                 push    bc
  2193.                 rst     20h
  2194.                 dw 19E5h                ; восстановление
  2195.                 pop     bc
  2196.                 call    RESERV_RAM
  2197.                 inc     hl
  2198.                 ld      bc,(TRD_5CE8)   ; ДЛИНА ПРОГРАММЫ
  2199.                 add     hl,bc
  2200.                 ld      (VARS),hl
  2201. loc_1A48        ld      hl,(PROG)
  2202.                 ret
  2203.  
  2204. LOAD4DATA       ld      de,(TRD_5CE8)   ; ДЛИНА ПРОГРАММЫ
  2205.                 ld      (TRD_5CDB),de
  2206.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2207.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2208.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  2209.                 cp      0FFh
  2210.                 ret     z
  2211.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2212.                 push    hl
  2213.                 call    CP_FREE4PROG
  2214.                 pop     hl
  2215.                 ld      a,h
  2216.                 or      l
  2217.                 jr      z,loc_1A79
  2218.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2219.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2220.                 dec     hl
  2221.                 dec     hl
  2222.                 dec     hl
  2223.                 ld      bc,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2224.                 inc     bc
  2225.                 inc     bc
  2226.                 inc     bc
  2227.                 call    DEL_WORKRAM
  2228. loc_1A79        ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  2229.                 dec     hl
  2230.                 ld      bc,(TRD_5CE8)   ; ДЛИНА ПРОГРАММЫ
  2231.                 push    bc
  2232.                 inc     bc
  2233.                 inc     bc
  2234.                 inc     bc
  2235.                 call    RESERV_RAM
  2236.                 inc     hl
  2237.                 ld      a,(TRD_5CD2)
  2238.                 ld      (hl),a
  2239.                 inc     hl
  2240.                 pop     de
  2241.                 ld      (hl),e
  2242.                 inc     hl
  2243.                 ld      (hl),d
  2244.                 inc     hl
  2245.                 ret
  2246.  
  2247. NUM_SEC_FILE    ld      a,(TRD_5CD9)    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2248.                 ld      c,b
  2249.                 ld      b,a
  2250.                 ld      a,c
  2251.                 cp      b
  2252.                 jr      c,loc_1AB6
  2253.                 ld      a,b
  2254.                 or      a
  2255.                 jp      z,SINTAX_ERROR
  2256.                 dec     b
  2257.                 jr      z,loc_1AB0
  2258.                 ld      a,10h
  2259. loc_1AA7        inc     e
  2260.                 cp      e
  2261.                 jr      nz,loc_1AAE
  2262.                 ld      e,0
  2263.                 inc     d
  2264. loc_1AAE        djnz    loc_1AA7
  2265. loc_1AB0        ld      b,1
  2266.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2267.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2268.                 ret
  2269.  
  2270. loc_1AB6        ld      hl,TXT_R_O
  2271.                 ld      a,5
  2272.                 jp      PRINT_TXTERR
  2273.  
  2274. CP_FILE_FREE    call    FIND_FILE       ; ПОИСК ФАЙЛА ПО ИМЕНИ
  2275.                 jp      z,FILE_EXISTS
  2276. CP_FREE_ON_DSK  call    READ_9SEC       ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
  2277.                 ld      a,(TRD_5E09)
  2278.                 cp      80h
  2279.                 jp      z,ERR_DIRFULL
  2280.                 ret
  2281.  
  2282. SAVE            call    ZERO2HIGH_ERR
  2283.                 ld      hl,0
  2284.                 ld      (TRD_5CD1),hl
  2285.                 call    SET_AND_PUT
  2286.                 call    GET_SYMSTR
  2287.                 cp      0AFh            ; CODE
  2288.                 jr      z,loc_1B39
  2289.                 cp      0CAh            ; LINE
  2290.                 jr      nz,loc_1AF8     ; SCREEN$
  2291.                 call    SET_NUM_CHAN
  2292.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2293.                 ld      hl,(TRD_5CDB)
  2294.                 ld      (TRD_5CD1),hl
  2295.                 ld      hl,TRD_5CE5     ; РАСШИРЕНИЕ ФАЙЛА
  2296.                 jr      loc_1B1F
  2297.  
  2298. loc_1AF8        cp      0AAh            ; SCREEN$
  2299.                 jr      nz,loc_1B0D
  2300.                 ld      hl,4000h
  2301.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2302.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2303.                 ld      hl,1B00h
  2304.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2305.                 ld      (TRD_5CDB),hl
  2306.                 jr      loc_1B48
  2307.  
  2308. loc_1B0D        call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2309.                 call    GET_SYMSTR
  2310.                 ld      hl,TRD_5CE5     ; РАСШИРЕНИЕ ФАЙЛА
  2311.                 cp      0E4h            ; DATA
  2312.                 jr      z,loc_1B2C
  2313.                 cp      0Dh
  2314.                 jp      nz,SINTAX_ERROR
  2315. loc_1B1F        ld      (hl),"B"
  2316.                 call    CP_FILE_FREE
  2317.                 call    DEL_5BYTES
  2318. loc_1B27        call    SET_START_SIZE
  2319.                 jr      loc_1B53
  2320.  
  2321. loc_1B2C        ld      (hl),"D"
  2322.                 call    CP_FILE_FREE
  2323.                 call    CP_MASSIV
  2324.                 jr      nc,loc_1B53
  2325.                 jp      c,SINTAX_ERROR
  2326. loc_1B39        call    GET_START_SIZE
  2327.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2328.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2329.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2330.                 ld      hl,(TRD_5CDB)
  2331.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2332. loc_1B48        call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2333.                 ld      a,"C"
  2334.                 ld      (TRD_5CE5),a    ; РАСШИРЕНИЕ ФАЙЛА
  2335.                 call    CP_FILE_FREE
  2336. loc_1B53        call    SAVE_FILE
  2337.                 jp      loc_569
  2338.  
  2339. SAVE_FILE       ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2340.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2341.                 ld      (TRD_5CE6),hl   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  2342.                 ex      de,hl
  2343.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2344.                 ld      a,l
  2345.                 or      h
  2346.                 jp      z,SINTAX_ERROR
  2347.                 ld      a,l
  2348.                 or      a
  2349.                 jr      z,loc_1B6D
  2350.                 inc     h
  2351. loc_1B6D        ld      a,h
  2352.                 ld      (TRD_5CEA),a    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  2353.                 ld      e,a
  2354.                 ld      d,0
  2355.                 ld      hl,(TRD_5E0A)
  2356.                 sbc     hl,de
  2357.                 jp      c,loc_1C45
  2358.                 push    hl
  2359.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  2360.                 ld      (hl),0AAh       ; SCREEN$
  2361.                 inc     hl
  2362.                 ld      de,(TRD_5CD1)
  2363.                 ld      (hl),e
  2364.                 inc     hl
  2365.                 ld      (hl),d
  2366.                 ld      hl,(TRD_5CDB)
  2367.                 ld      (TRD_5CE8),hl   ; ДЛИНА ПРОГРАММЫ
  2368.                 ld      hl,(TRD_5E06)
  2369.                 ld      (TRD_5CEB),hl   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  2370.                 ex      de,hl
  2371.                 ld      hl,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  2372.                 ld      a,(TRD_5CEA)    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  2373.                 ld      b,a
  2374.                 call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
  2375.                 ld      hl,(TRD_5CF4)
  2376.                 push    hl
  2377.                 call    READ_9SEC       ; ЧТЕНИЕ 9 СЕКТОРА
  2378.                 pop     hl
  2379.                 ld      (TRD_5E06),hl
  2380.                 pop     hl
  2381.                 ld      (TRD_5E0A),hl
  2382.                 ld      hl,TRD_5E09
  2383.                 ld      a,(hl)
  2384.                 ld      (TRD_5D1E),a
  2385.                 inc     (hl)
  2386.                 push    hl
  2387.                 call    REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  2388.                 pop     hl
  2389.                 ld      c,(hl)
  2390.                 dec     c
  2391.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  2392.                 cp      "B"
  2393.                 call    z,SET_HEAD_STSZ
  2394.                 ret
  2395.  
  2396. SET_HEAD_STSZ   ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  2397.                 ld      de,(PROG)
  2398.                 scf
  2399.                 sbc     hl,de
  2400.                 ld      (TRD_5CE6),hl   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  2401.                 ld      hl,(VARS)
  2402.                 sbc     hl,de
  2403.                 ld      (TRD_5CE8),hl   ; ДЛИНА ПРОГРАММЫ
  2404.                 ret
  2405.  
  2406. SET_START_SIZE  ld      hl,(VARS)
  2407.                 ld      de,(PROG)
  2408.                 sbc     hl,de
  2409.                 ld      (TRD_5CDB),hl
  2410.                 ld      hl,(PROG)
  2411.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2412.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2413.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  2414.                 inc     hl
  2415.                 inc     hl
  2416.                 inc     hl
  2417.                 sbc     hl,de
  2418.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2419.                 ret
  2420.  
  2421. READ_MASSIV     call    FIND_MASSIV
  2422.                 ret     nc
  2423.                 ld      hl,0
  2424.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2425.                 ld      a,(TRD_5CF9)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  2426.                 cp      0FFh
  2427.                 ret     nz
  2428.                 jp      loc_1C13
  2429.  
  2430. CP_MASSIV       call    FIND_MASSIV
  2431.                 ret     nc
  2432. loc_1C13        ld      a,0Eh
  2433.                 ld      hl,TXT_ARRAYNOT ; "Array not found"
  2434.                 jp      PRINT_TXTERR
  2435.  
  2436. FIND_MASSIV     call    GET_NEXT_SYM
  2437.                 call    LOOK_VARS
  2438.                 set     7,c
  2439.                 ld      a,c
  2440.                 ld      (TRD_5CD2),a
  2441.                 jr      nc,loc_1C2B
  2442. loc_1C29        scf
  2443.                 ret
  2444.  
  2445. loc_1C2B        jr      nz,loc_1C29
  2446.                 inc     hl
  2447.                 ld      e,(hl)
  2448.                 inc     hl
  2449.                 ld      d,(hl)
  2450.                 inc     hl
  2451.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2452.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2453.                 ld      (TRD_5CDB),de
  2454.                 ld      (TRD_5CD9),de   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2455.                 call    GET_NEXT_SYM
  2456.                 cp      ")"
  2457.                 jr      nz,loc_1C2B
  2458.                 ret
  2459.  
  2460. loc_1C45        ld      hl,TXT_NOSPACE_
  2461.                 ld      a,3
  2462. PRINT_TXTERR    call    PRINT_ERROR     ; ПЕЧАТЬ СООБЩЕНИЯ ОБ ОШИБКЕ
  2463.                 jp      END_COMAND
  2464.  
  2465. FILE_EXISTS     ld      hl,TXT_FILEEXISTS_
  2466.                 ld      a,2
  2467.                 jr      PRINT_TXTERR
  2468.  
  2469. ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
  2470. SET_FILENAME    ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  2471.                 ld      b,8
  2472. loc_1C5C        ld      (hl)," "
  2473.                 inc     hl
  2474.                 djnz    loc_1C5C
  2475.                 call    CP_ON_STKBOT
  2476.                 ex      de,hl
  2477.                 call    SETUP_DISK
  2478.                 ld      a,c
  2479.                 or      a
  2480.                 jp      z,SINTAX_ERROR
  2481.                 cp      9
  2482.                 jr      c,loc_1C73
  2483.                 ld      c,8
  2484. loc_1C73        ld      a,(hl)
  2485.                 cp      " "
  2486.                 jp      c,SINTAX_ERROR
  2487.                 ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
  2488.                 push    bc
  2489.                 ldir
  2490.                 pop     bc
  2491.                 ret
  2492.  
  2493. SETUP_DISK      inc     hl
  2494.                 ld      a,(hl)
  2495.                 cp      ":"
  2496.                 jr      nz,loc_1C98
  2497.                 dec     hl
  2498.                 ld      a,(hl)
  2499.                 call    NUMDSK2BYTE
  2500.                 push    bc
  2501.                 push    hl
  2502.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  2503.                 pop     hl
  2504.                 pop     bc
  2505.                 dec     bc
  2506.                 dec     bc
  2507.                 inc     hl
  2508.                 inc     hl
  2509.                 ret
  2510.  
  2511. loc_1C98        dec     hl
  2512.                 ld      a,(TRD_5D19)    ; ДИСКОВОД ПО УМОЛЧАНИЮ
  2513.                 push    bc
  2514.                 push    hl
  2515.                 call    COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  2516.                 pop     hl
  2517.                 pop     bc
  2518.                 ret
  2519.  
  2520. FIND_HEAD_BUF   ld      l,c
  2521.                 ld      h,0
  2522.                 add     hl,hl
  2523.                 add     hl,hl
  2524.                 add     hl,hl
  2525.                 add     hl,hl
  2526.                 ld      bc,TRD_5D25
  2527.                 add     hl,bc
  2528.                 ret
  2529.  
  2530. SET_CP_FILENAME call    SET_FILENAME    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
  2531. ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  2532. FIND_FILENAME   call    RD_0SEC2BUF     ; ЧТЕНИЕ СЕКТОРА 0 КАТАЛОГА
  2533.                 ld      b,80h
  2534.                 ld      c,0
  2535. loc_1CBA        push    bc
  2536.                 call    FIND_HEAD_BUF
  2537.                 call    CP_END_BUF      ; ПРОВЕРКА НА КОНЕЦ БУФЕРА
  2538.                 pop     bc
  2539.                 push    bc
  2540.                 ld      a,c
  2541.                 cp      10h
  2542.                 jr      nz,loc_1CCD
  2543.                 pop     bc
  2544.                 ld      c,0
  2545.                 jr      loc_1CBA
  2546.  
  2547. loc_1CCD        ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
  2548.                 ld      a,(TRD_5D06)    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  2549.                 ld      b,a
  2550.                 xor     a
  2551.                 cp      (hl)
  2552.                 jr      nz,loc_1CDB
  2553.                 pop     bc
  2554.                 jr      loc_1CE4
  2555.  
  2556. loc_1CDB        call    COMPARE_B_SYM
  2557.                 pop     bc
  2558.                 jr      z,loc_1CE7
  2559.                 inc     c
  2560.                 djnz    loc_1CBA
  2561. loc_1CE4        or      0FFh
  2562.                 ret
  2563.  
  2564. loc_1CE7        ld      a,80h
  2565.                 sub     b
  2566.                 ld      c,a
  2567.                 ld      (TRD_5D1E),a
  2568.                 xor     a
  2569.                 ret     z
  2570.  
  2571. COM_0A          call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ И РАСШИРЕНИЮ
  2572.                 ld      hl,TRD_5D0F     ; НОМЕР ОШИБКИ TR-DOS
  2573.                 ld      (hl),c
  2574.                 ret     z
  2575.                 ld      (hl),0FFh
  2576.                 ret
  2577.  
  2578. RETURN          call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2579.                 call    DELETE_BUF_
  2580.                 res     3,(iy+1)
  2581.                 call    RESTORE_SP      ; ВОССТАНОВЛЕНИЕ ПЕРЕХВАТЧИКА ОШИБОК
  2582.                 ld      sp,(TRD_5D1C)   ; СОХРАНЕНИЕ РЕГИСТРА SP
  2583. ;ИСПРАЛЕНИЕ ПРОБЛЕМЫ СБРОСА ПРИ ВЫХОДЕ ИЗ TR-DOS ПО КОМАНДЕ RETURN
  2584.                 EXX                     ;LD     HL,(ERR_SP)
  2585.                 LD HL,0X2758            ;DEC    HL
  2586.                 EXX                     ;LD     A,12H
  2587.                 DEC HL                  ;CP     (HL)
  2588.                 LD A,0X12               ;JR     NZ,LOCRET_1D19
  2589.                 CP (HL)                 ;DEC    HL
  2590.                 RET NZ                  ;LD     (ERR_SP),HL
  2591.                 DEC HL                  ;LOCRET_1D19    RET
  2592.                 JP LOC_235
  2593.  
  2594. SINTAX_ERROR    bit     7,(iy+0)
  2595.                 jr      z,loc_1D25
  2596.                 ld      a,0Bh
  2597.                 ld      (ERR_NR),a
  2598. loc_1D25        inc     a
  2599.                 ld      hl,TXT_ERROR_
  2600. PRT_TEXT_ERROR  call    PRINT_ERROR     ; ПЕЧАТЬ СООБЩЕНИЯ ОБ ОШИБКЕ
  2601.                 jp      END_COMAND
  2602.  
  2603. loc_1D2F        ld      a,(ERR_NR)
  2604.                 ld      hl,TXT_BREAK    ; "*BREAK*"
  2605.                 cp      14h
  2606.                 jr      z,PRT_TEXT_ERROR
  2607.                 cp      0Ch
  2608.                 jr      z,PRT_TEXT_ERROR
  2609.                 ld      hl,TXT_OUTRAM   ; "Out of RAM"
  2610.                 cp      3
  2611.                 jr      z,PRT_TEXT_ERROR
  2612.                 ld      hl,TXT_ARRAYNOT ; "Array not found"
  2613.                 cp      1
  2614.                 jr      z,PRT_TEXT_ERROR
  2615.                 jr      SINTAX_ERROR
  2616.  
  2617. RUN             call    ZERO2HIGH_ERR
  2618.                 call    LOAD_FILE
  2619.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2620.                 JP RUN_FILE             ;LD HL,(TRD_5CE6)
  2621.                 ld      a,(TRD_5CE5)    ; РАСШИРЕНИЕ ФАЙЛА
  2622.                 cp      "B"
  2623.                 jp      z,WORK4AUTORUN  ; ОБРАБОТКА НОМЕРА СТРОКИ АВТОСТАРТА ПРОГРАММЫ НА БЕЙСИКЕ
  2624.                 push    hl
  2625.                 ret
  2626.  
  2627. CLEAR_WORKSPACE ld      hl,TRD_5D0E     ; #FE-РАБОТАЕТ BASIC,ИНАЧЕ TR-DOS
  2628.                 ld      a,(hl)
  2629. loc_1D67        cp      0FFh
  2630.                 ld      (hl),0
  2631.                 ret     nz
  2632.                 rst     20h
  2633.                 dw 16BFh                ; очистка рабочей области и стека калькулятора
  2634.                 ret
  2635.  
  2636. CP_SINTAX       bit     7,(iy+1)
  2637.                 ret
  2638.  
  2639. ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2640. EXIT_IF_SINTAX  call    CP_SINTAX
  2641.                 ret     nz
  2642.                 pop     hl
  2643.                 ret
  2644.  
  2645. ; ЗАНЕСЕНИЕ ЧИСЛА НА СТЕК КАЛЬКУЛЯТОРА
  2646. CHISLO2STKBOT   call    GET_NEXT_SYM
  2647.                 call    BC2STKBOT
  2648.                 jr      CP_SINTAX
  2649.  
  2650. ; ОТКРЫТИЕ КАНАЛА 0
  2651. OPEN_CHAN_0     xor     a
  2652. OPENSTREAM      rst     20h
  2653.                 dw 1601h                ; открытие канала
  2654.                 ret
  2655.  
  2656. ; ОТКРЫТИЕ КАНАЛА 2
  2657. OPEN_CHAN_2     ld      a,2
  2658.                 jr      OPENSTREAM
  2659.  
  2660. GET_SYMSTR      rst     20h
  2661.                 dw 18h                  ; выборка символа из (CH_ADD)
  2662.                 ret
  2663.  
  2664. CALL2BASEDIT    call    OPEN_CHAN_0     ; ОТКРЫТИЕ КАНАЛА 0
  2665.                 rst     20h
  2666.                 dw 0F2Ch                ; редактор командной строки
  2667.                 ret
  2668.  
  2669. ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  2670. CLEAR_SCREEN    rst     20h
  2671.                 dw 0D6Bh                ; очистка экрана
  2672.                 ret
  2673.  
  2674. LOOK_VARS       rst     20h
  2675.                 dw 28B2h                ; Look-Vars. фиг знает че делает
  2676.                 ret
  2677.  
  2678. ; ОЧИСТКА НИЖНЕЙ ЧАСТИ ЭКРАНА
  2679. CLEAR_DOWN_SCR  rst     20h
  2680.                 dw 0D6Eh                ; очистка нижней части экрана
  2681.                 ret
  2682.  
  2683. PRINT_CHISLO_A_ ld      c,a
  2684. CONV2_2BYTES    ld      b,0
  2685.                 jp      PRINT_CHISLO
  2686.  
  2687. PRINT_CHISLO    push    bc              ; ПЕЧАТЬ ЧИСЛА
  2688.                 DUPL 3,0
  2689.                 pop     bc
  2690.                 rst     20h
  2691.                 dw 1A1Bh                ; печать сообщений и номеров строк
  2692.                 DUPL 3,0
  2693.                 ret
  2694.  
  2695. GET_STKBOT_     rst     20h
  2696.                 dw 2BF1h                ; чтение дна стека калькулятора
  2697.                 ret
  2698.  
  2699. FIND_LAST       rst     20h
  2700.                 dw 1E99h                ; поиск последнего целого числа
  2701.                 ret
  2702.  
  2703. PUT_NUMDSK_STK  rst     20h
  2704.                 dw 1C8Ch
  2705.                 ret
  2706.  
  2707. BC2STKBOT       rst     20h
  2708.                 dw 1C82h
  2709.                 ret
  2710.  
  2711. ; УСТАНОВКА CH_ADD
  2712. SET_CH_ADD      ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  2713.                 inc     hl
  2714.                 ld      (CH_ADD),hl
  2715.                 ret
  2716.  
  2717. INP_STR2STKBOT  call    SET_AND_PUT
  2718. loc_1DD0        call    GET_SYMSTR
  2719.                 cp      ","
  2720.                 jp      nz,SINTAX_ERROR
  2721.                 call    GET_NEXT_SYM
  2722.                 call    PUT_NUMDSK_STK
  2723.                 ret
  2724.  
  2725. SET_AND_PUT     call    SET_CH_ADD      ; УСТАНОВКА CH_ADD
  2726.                 jp      PUT_NUMDSK_STK
  2727.  
  2728. GET_START_SIZE  call    GET_SYMSTR
  2729.                 cp      0AFh            ; CODE
  2730.                 ret     nz
  2731. INPUT_PARAMS    call    CHISLO2STKBOT   ; ЗАНЕСЕНИЕ ЧИСЛА НА СТЕК КАЛЬКУЛЯТОРА
  2732.                 jr      z,loc_1DFB
  2733.                 call    FIND_LAST
  2734.                 ld      (TRD_5CD9),bc   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2735.                 ld      (TRD_5CDB),bc
  2736. loc_1DFB        call    GET_SYMSTR
  2737.                 cp      ","
  2738.                 jr      z,SET_NUM_CHAN
  2739.                 cp      0Dh
  2740.                 jp      nz,SINTAX_ERROR
  2741.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2742.                 ret
  2743.  
  2744. SET_NUM_CHAN    call    CHISLO2STKBOT   ; ЗАНЕСЕНИЕ ЧИСЛА НА СТЕК КАЛЬКУЛЯТОРА
  2745.                 ret     z
  2746.                 call    FIND_LAST
  2747.                 ld      (TRD_5CDB),bc
  2748.                 ld      a,3
  2749.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  2750.                 ret
  2751.  
  2752. DEL_5BYTES      ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  2753.                 rst     20h
  2754.                 dw 11A7h                ; удаление из командной стpоки пятибайтных чисел
  2755.                 ret
  2756.  
  2757. CREATE_FREERAM  ld      hl,(WORKSP)
  2758.                 rst     20h
  2759.                 dw 30h                  ; создание свободного места
  2760.                 ret
  2761.  
  2762. GET_NEXT_SYM    rst     20h
  2763.                 dw 20h                  ; ПОЛУЧЕНИЕ СЛЕДУЮЩЕГО СИМВОЛА ВВЕДЕННОЙ СТРОКИ
  2764.                 ret
  2765.  
  2766. DEL_WORKRAM     rst     20h
  2767.                 dw 19E8h                ; Удаление области памяти
  2768.                 ret
  2769.  
  2770. RESERV_RAM      rst     20h
  2771.                 dw 1655h
  2772.                 ret
  2773.  
  2774. WR_NUM_TRACK    call    GET_NUM_TRACK
  2775.                 ld      a,h
  2776.                 OUT (VG_RW_3F),A        ;IO out (3Fh),a
  2777.                 ret
  2778.  
  2779. ; ЧТЕНИЕ СЕКТОРОВ
  2780. COM_05          xor     a
  2781.                 jr      loc_1E64
  2782.  
  2783. WRHEAD_FILENAME call    SETHEADFILENAME ; СОХРАНЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  2784. REWRITE_9SEC    ld      de,(TRD_5CF4)   ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  2785.                 dec     de
  2786.                 ld      b,1
  2787.                 ld      hl,TRD_5D25
  2788. COM_06          push    hl              ; ЗАПИСЬ СЕКТОРОВ
  2789.                 push    de
  2790.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  2791.                 bit     7,(hl)
  2792.                 jr      z,loc_1E60
  2793.                 bit     0,(hl)
  2794.                 jr      nz,loc_1E60
  2795.                 ld      hl,READ_ONLY
  2796.                 jp      PRT_TEXT_ERROR
  2797.  
  2798. loc_1E60        pop     de
  2799.                 pop     hl
  2800. SAVE_SECTORS    ld      a,0FFh
  2801. loc_1E64        ld      (TRD_5CCE),a    ; #00-ЧТЕНИЕ СЕКТОРА,#FF-ЗАПИСЬ СЕКТОРА
  2802. loc_1E67        ld      (TRD_5CF4),de
  2803.                 push    bc
  2804.                 push    hl
  2805.                 call    WR_NUM_TRACK
  2806.                 pop     hl
  2807.                 pop     bc
  2808.                 xor     a
  2809.                 or      b
  2810.                 ret     z
  2811. loc_1E75        push    bc
  2812.                 push    hl
  2813.                 call    COM_04          ; УСТАНОВКА АДРЕСА БУФЕРА
  2814.                 ld      a,(TRD_5CF4)
  2815.                 call    COM_03          ; УСТАНОВКА НОМЕРА СЕКТОРА
  2816.                 ld      a,(TRD_5CF5)
  2817.                 call    COM_02          ; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
  2818.                 ld      a,(TRD_5CCE)    ; #00-ЧТЕНИЕ СЕКТОРА,#FF-ЗАПИСЬ СЕКТОРА
  2819.                 or      a
  2820.                 push    af
  2821.                 call    z,LOAD_SECTOR
  2822.                 pop     af
  2823.                 call    nz,SAVE_SECTOR
  2824.                 pop     hl
  2825.                 ld      de,100h
  2826.                 add     hl,de
  2827.                 push    hl
  2828.                 ld      a,10h
  2829.                 ld      hl,TRD_5CF4
  2830.                 inc     (hl)
  2831.                 cp      (hl)
  2832.                 jr      nz,loc_1EA7
  2833.                 ld      (hl),0
  2834.                 ld      hl,TRD_5CF5
  2835.                 inc     (hl)
  2836. loc_1EA7        pop     hl
  2837.                 pop     bc
  2838.                 djnz    loc_1E75
  2839.                 ret
  2840.  
  2841. KOLWO_SECS      push    hl
  2842.                 ld      h,a
  2843.                 ld      l,0
  2844.                 push    hl
  2845.                 sbc     hl,de
  2846.                 call    c,LOAD_FILLFILE
  2847.                 pop     hl
  2848.                 ld      a,h
  2849.                 pop     hl
  2850.                 ret     c
  2851.                 ld      a,d
  2852.                 ret
  2853.  
  2854. LOAD_FILLFILE   xor     a
  2855.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  2856.                 scf
  2857.                 ret
  2858.  
  2859. FORMAT          ld      hl,0FFFFh
  2860.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2861.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2862.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  2863.                 ld      (TRD_5CD1),hl
  2864.                 call    CP_SECOND_SYM   ; ПРОВЕРКА СЛЕДУЮЩЕГО СИМВОЛА
  2865.                 jp      z,SINTAX_ERROR
  2866.                 call    SET_AND_PUT
  2867.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  2868.                 call    SET_FILENAME    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
  2869.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  2870.                 and     80h
  2871.                 ld      a,40            ; 40 ДОРОЖЕК
  2872.                 jr      z,loc_1EE8
  2873.                 ld      a,80            ; 80 ДОРОЖЕК
  2874. loc_1EE8        ld      (TRD_5CD7),a    ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2875.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2876.                 call    COM_00          ; ВОССТАНОВЛЕНИЕ ВГ93
  2877.                 call    COM_17          ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
  2878.                 call    PAUSE_3_C_A
  2879.                 ld      e,1
  2880.                 call    FORMAT_TREK     ; ФОРМАТИРОВАНИЕ ДОРОЖКИ
  2881.                 call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
  2882.                 ld      e,0
  2883.                 call    FORMAT_TREK     ; ФОРМАТИРОВАНИЕ ДОРОЖКИ
  2884.                 ld      a,(TRD_5CDD)    ; ИМЯ ФАЙЛА
  2885.                 cp      "$"
  2886.                 jr      z,loc_1F1B
  2887.                 call    COM_17          ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
  2888.                 call    PAUSE_3_C_A
  2889.                 call    loc_3EB5
  2890.                 ld      a,h
  2891.                 cp      1
  2892.                 jr      nz,loc_1F1B
  2893.                 ld      a,80h
  2894.                 ld      (TRD_5CDA),a
  2895. loc_1F1B        call    FORMAT_DISK
  2896.                 ld      hl,TRD_5D25
  2897.                 ld      (hl),0
  2898.                 ld      de,TRD_5D26
  2899.                 ld      bc,0FFh
  2900.                 ldir
  2901.                 ld      bc,TRD_5CD7     ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2902.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2903.                 ld      de,TRD_5CDA
  2904.                 ld      a,(bc)
  2905.                 cp      50h
  2906.                 jr      z,loc_1F49
  2907.                 ld      a,(de)
  2908.                 cp      80h
  2909.                 jr      z,loc_1F42      ; 80 ДОРОЖЕК 1 СТОРОНА
  2910.                 ld      a,19h           ; 40 ДОРОЖЕК 1 СТОРОНА
  2911.                 ld      hl,624          ; СЕКТОРОВ
  2912.                 jr      loc_1F55
  2913.  
  2914. loc_1F42        ld      a,17h           ; 80 ДОРОЖЕК 1 СТОРОНА
  2915. loc_1F44        ld      hl,1264         ; СЕКТОРОВ
  2916.                 jr      loc_1F55
  2917.  
  2918. loc_1F49        ld      a,(de)
  2919.                 cp      80h
  2920.                 ld      a,18h           ; 40 ДОРОЖЕК 2 СТОРОНЫ
  2921.                 jr      nz,loc_1F44     ; СЕКТОРОВ
  2922.                 ld      a,16h           ; 80 ДОРОЖЕК 2 СТОРОНЫ
  2923.                 ld      hl,2544         ; СЕКТОРОВ
  2924. loc_1F55        ld      (TRD_5E08),a
  2925.                 ld      (TRD_5E0A),hl
  2926.                 ld      a,1
  2927.                 ld      (TRD_5E07),a
  2928.                 ld      a,10h
  2929.                 ld      (TRD_5E0C),a
  2930.                 ld      hl,TRD_5E0F
  2931.                 ld      de,TRD_5E10
  2932.                 ld      bc,8
  2933.                 ld      (hl)," "
  2934.                 ldir
  2935.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  2936.                 ld      de,TRD_5E1A
  2937.                 ld      bc,8
  2938.                 ldir
  2939.                 call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
  2940.                 ld      b,1
  2941.                 ld      de,8
  2942.                 ld      hl,TRD_5D25
  2943.                 call    SAVE_SECTORS
  2944.                 ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  2945.                 push    af
  2946.                 xor     a
  2947.                 ld      (TRD_5CE5),a    ; РАСШИРЕНИЕ ФАЙЛА
  2948.                 ld      hl,(TRD_5E0A)
  2949.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2950.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2951.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  2952.                 rst     18h
  2953.                 ld      a,0Dh
  2954.                 rst     10h
  2955.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2956.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2957.                 pop     af
  2958.                 push    hl
  2959.                 ld      d,0
  2960.                 ld      e,a
  2961.                 sbc     hl,de
  2962.                 ld      b,h
  2963.                 ld      c,l
  2964.                 call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
  2965.                 ld      a,"/"
  2966.                 rst     10h
  2967.                 pop     bc
  2968.                 call    PRINT_CHISLO    ; ПЕЧАТЬ ЧИСЛА
  2969.                 jp      END_COMAND
  2970.  
  2971. TABL_SECTORS    db 1,9,2,0Ah,3,0Bh,4,0Ch,5,0Dh,6,0Eh,7,0Fh,8,10h,1
  2972.  
  2973. CP_DSK_TRACK    call    GET_TIME_HEAD   ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  2974.                 or      11h
  2975.                 ld      b,a
  2976.                 ld      a,32h
  2977.                 call    HEAD_POSITION
  2978.                 ld      a,2
  2979.                 call    HEAD_POSITION
  2980.                 call    PAUSE725779T
  2981.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  2982.                 and     4
  2983.                 ld      a,80            ; 80 ДОРОЖЕК
  2984.                 jr      z,loc_1FE7
  2985.                 ld      a,40            ; 40 ДОРОЖЕК
  2986. loc_1FE7        ld      (TRD_5CD7),a    ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  2987.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  2988.                 ret
  2989.  
  2990. ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
  2991. COM_16          ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  2992.                 or      3Ch
  2993. SET_REG_FF      ld      (TRD_5D16),a    ; УСТАНОВКА РЕГИСТРА #FF
  2994.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  2995.                 ret
  2996.  
  2997. ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
  2998. COM_17          ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  2999.                 and     6Fh
  3000.                 jr      SET_REG_FF      ; УСТАНОВКА РЕГИСТРА #FF
  3001.  
  3002. ; ФОРМАТИРОВАНИЕ ДОРОЖКИ
  3003. FORMAT_TREK     di
  3004.                 ld      a,0F4h
  3005.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  3006.                 ld      hl,TABL_SECTORS
  3007.                 ld      c,7Fh
  3008. loc_2007        ld      b,0Ah
  3009.                 ld      d,4Eh
  3010.                 call    WRITE_C_D_B
  3011.                 ld      b,0Ch
  3012.                 ld      d,0
  3013.                 call    WRITE_C_D_B
  3014.                 ld      b,3
  3015.                 ld      d,0F5h
  3016.                 call    WRITE_C_D_B
  3017.                 ld      d,0FEh
  3018.                 call    WRITE_C_D_1
  3019.                 ld      d,e
  3020.                 call    WRITE_C_D_1
  3021.                 ld      d,0
  3022.                 call    WRITE_C_D_1
  3023.                 ld      d,(hl)
  3024.                 call    WRITE_C_D_1
  3025.                 ld      d,1
  3026.                 call    WRITE_C_D_1
  3027.                 ld      d,0F7h
  3028.                 call    WRITE_C_D_1
  3029.                 ld      b,16h
  3030.                 ld      d,4Eh
  3031.                 call    WRITE_C_D_B
  3032.                 ld      b,0Ch
  3033.                 ld      d,0
  3034.                 call    WRITE_C_D_B
  3035.                 ld      b,3
  3036.                 ld      d,0F5h
  3037.                 call    WRITE_C_D_B
  3038.                 ld      d,0FBh
  3039.                 call    WRITE_C_D_1
  3040.                 ld      b,0
  3041.                 ld      d,0
  3042.                 call    WRITE_C_D_B
  3043.                 ld      d,0F7h
  3044.                 call    WRITE_C_D_1
  3045.                 ld      b,3Ch
  3046.                 ld      d,4Eh
  3047.                 call    WRITE_C_D_B
  3048.                 ld      a,(hl)
  3049.                 inc     hl
  3050.                 cp      10h
  3051.                 jr      nz,loc_2007
  3052.                 ld      b,0
  3053.                 call    WRITE_C_D_B
  3054.                 jp      m,loc_2076
  3055.                 call    WRITE_C_D_B
  3056. loc_2076        IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  3057.                 and     40h
  3058.                 jp      nz,loc_3F39     ; Read Only
  3059. CP_NUM_TRACK    ld      a,(TRD_5CD7+1)  ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3060.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3061.                 or      a
  3062.                 ret     nz
  3063.                 ld      c,7Fh
  3064.                 ld      a,e
  3065.                 OUT (VG_RW_3F),A        ;IO out (3Fh),a
  3066.                 ld      hl, TABL_SECTORS+1
  3067. loc_208A        ld      b,3
  3068.                 ld      a,(hl)
  3069.                 OUT (VG_RW_5F),A        ;IO out (5Fh),a
  3070.                 push    hl
  3071. loc_2090        di
  3072.                 ld      a,80h
  3073.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  3074.                 push    bc
  3075.                 call    RD_DATAPORT
  3076.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  3077.                 and     7Fh
  3078.                 pop     bc
  3079.                 jr      z,loc_20A6
  3080.                 djnz    loc_2090
  3081.                 ld      hl,TRD_5CD6     ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  3082.                 inc     (hl)
  3083. loc_20A6        pop     hl
  3084.                 ld      a,(hl)
  3085.                 inc     hl
  3086.                 cp      1
  3087.                 jr      nz,loc_208A
  3088.                 ei
  3089.                 ret
  3090.  
  3091. WRITE_C_D_1     ld      b,1
  3092. WRITE_C_D_B     IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  3093.                 and     0C0h
  3094.                 jr      z,WRITE_C_D_B
  3095.                 ret     m
  3096.                 out     (c),d           ;IO
  3097.                 djnz    WRITE_C_D_B
  3098.                 ret
  3099.  
  3100. FORMAT_DISK     ld      hl,TRD_5CD7     ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3101.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3102.                 ld      b,(hl)
  3103.                 xor     a
  3104.                 inc     hl
  3105.                 ld      (hl),a
  3106.                 ld      e,0FFh
  3107. loc_20C6        push    bc
  3108.                 inc     e
  3109.                 ld      a,e
  3110.                 LD B,0X18
  3111.                 call    HEAD_POSITION
  3112.                 call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
  3113.                 AND A
  3114.                 CALL FORMAT_TREK_
  3115.                 NOP
  3116.                 CP 0X80
  3117.                 JR NZ,loc_20E1
  3118.                 CALL COM_17
  3119.                 SCF
  3120.                 CALL FORMAT_TREK_
  3121. loc_20E1        pop     bc
  3122.                 djnz    loc_20C6
  3123.                 ret
  3124.  
  3125. DELETE_BUF      push    af
  3126.                 ld      a,(TRD_5CF8)    ; ДИСКОВОД ПРИ ОПЕРАЦИИ С 2 ФАЙЛАМИ
  3127.                 cp      0FFh
  3128.                 jr      z,loc_211C
  3129.                 pop     af
  3130.                 JP DEL_BUF              ; УДАЛЕНИЕ БУФЕРА,ЕСЛИ  ОН ЕСТЬ
  3131. ; ПРОВЕРКА НАЛИЧИЯ INTERFACE1
  3132. CP_INTERFACE1   push    af
  3133.                 ld      a,(TRD_5CB6)    ; ДЛЯ ПРОВЕРКИ НАЛИЧИЯ INTERFACE1
  3134.                 cp      0F4h
  3135.                 jr      loc_211C
  3136.                 xor     a
  3137.                 ld      hl,TRD_5D18
  3138.                 or      (hl)
  3139.                 ld      (hl),0FFh
  3140.                 jr      z,loc_211C
  3141.                 ld      a,(TRD_5D0C)
  3142.                 or      a
  3143.                 ld      hl,TRD_5CC3
  3144.                 ld      de,TRD_5D33
  3145.                 jr      nz,loc_2111
  3146.                 ld      de,TRD_5E34
  3147. loc_2111        ld      b,2Dh
  3148. loc_2113        ld      c,(hl)
  3149.                 ld      a,(de)
  3150.                 ld      (hl),a
  3151.                 ld      a,c
  3152.                 ld      (de),a
  3153.                 inc     hl
  3154.                 inc     de
  3155.                 djnz    loc_2113
  3156. loc_211C        pop     af
  3157.                 ret
  3158.  
  3159. CLRBUF_EDITOR   CALL CLRBUF_EDITOR_
  3160.                 ld      (hl),0Dh
  3161.                 ld      (K_CUR),hl
  3162.                 inc     hl
  3163.                 ld      (hl),80h
  3164.                 ret
  3165.  
  3166. RESTORE_COMSTR  ld      de,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  3167.                 ld      hl,TRD_5D20     ; ДЛЯ СОХРАНЕНИЯ 3 СИМВОЛОВ ВВЕДЕНОЙ СТРОКИ
  3168.                 call    LDI3_HL2DE      ; ПЕРЕНОС 3 БАЙТ
  3169.                 ret
  3170.  
  3171. ; ПРИНЯТИЕ И ОБРАБОТКА КОМАНД
  3172. GET_COMMAND     ld      a,(TRD_5D0F)    ; НОМЕР ОШИБКИ TR-DOS
  3173.                 or      a
  3174.                 push    af
  3175.                 call    nz,RESTORE_COMSTR
  3176.                 pop     af
  3177.                 call    z,CLRBUF_EDITOR
  3178.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  3179.                 call    PRINT_0D
  3180.                 ld      a,(TRD_5D19)    ; ДИСКОВОД ПО УМОЛЧАНИЮ
  3181.                 add     a,"A"
  3182.                 rst     10h
  3183.                 ld      a,">"
  3184.                 rst     10h
  3185.                 ld      hl,ERR_NR
  3186.                 ld      (hl),0FFh
  3187.                 jp      CALL2BASEDIT
  3188.  
  3189. sub_2158        call    GET_NEXT_SYM
  3190.                 call    GET_SYMSTR
  3191.                 cp      ","
  3192.                 jp      nz,SINTAX_ERROR
  3193.                 ld      hl,(TRD_5CDB)
  3194.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3195.                 call    SET_NUM_CHAN
  3196.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  3197.                 ld      hl,(TRD_5CDB)
  3198.                 ld      a,h
  3199.                 or      a
  3200.                 jp      nz,SINTAX_ERROR
  3201.                 inc     hl
  3202.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3203.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3204.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3205.                 ld      (TRD_5CDB),hl
  3206.                 ret
  3207.  
  3208. OPEN            ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  3209.                 ld      (CH_ADD),hl
  3210.                 call    SET_NUM_CHAN
  3211.                 call    loc_1DD0
  3212. loc_218E        call    GET_SYMSTR
  3213.                 cp      "A"
  3214.                 jr      nc,loc_219A
  3215.                 call    GET_NEXT_SYM
  3216.                 jr      loc_218E
  3217.  
  3218. loc_219A        cp      0A5h
  3219.                 push    af
  3220.                 call    z,sub_2158
  3221.                 pop     af
  3222.                 jr      z,loc_21AE
  3223.                 and     0DFh
  3224.                 cp      "R"
  3225.                 jr      z,loc_21AE
  3226.                 cp      "W"
  3227.                 jp      nz,SINTAX_ERROR
  3228. loc_21AE        ld      (TRD_5D09),a
  3229.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  3230.                 ld      a,"#"
  3231.                 ld      (TRD_5CE5),a    ; РАСШИРЕНИЕ ФАЙЛА
  3232.                 ld      a,0
  3233.                 ld      (TRD_5CE6),a    ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  3234.                 call    FIND_ENDFILE
  3235.                 push    af
  3236.                 call    CP_STREAMS
  3237.                 pop     af
  3238.                 push    af
  3239.                 call    nz,CREATE_BLOCK0
  3240.                 pop     af
  3241.                 call    OPEN_STREAM
  3242.                 ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  3243.                 ld      bc,124h
  3244.                 add     hl,bc
  3245.                 ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  3246.                 jp      END_COMAND
  3247.  
  3248. FIND_ENDFILE    ld      a,0Ah
  3249.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  3250.                 call    SET_CP_FILENAME
  3251.                 push    af
  3252.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  3253.                 pop     af
  3254.                 jr      nz,loc_2206
  3255.                 ld      a,(TRD_5D09)
  3256.                 cp      "R"
  3257.                 jr      z,loc_2201
  3258. loc_21F1        ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  3259.                 inc     (hl)
  3260.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  3261.                 jr      z,loc_21F1
  3262.                 ld      hl,TRD_5CE6     ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  3263.                 dec     (hl)
  3264.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  3265. loc_2201        call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  3266.                 xor     a
  3267.                 ret
  3268.  
  3269. loc_2206        ld      a,(TRD_5D09)
  3270.                 cp      "R"
  3271.                 ret     nz
  3272.                 jp      ERR_NOFILES
  3273.  
  3274. CP_STREAMS      ld      a,(TRD_5CDB)
  3275.                 rst     20h
  3276.                 dw 1727h
  3277.                 ld      a,b
  3278.                 or      c
  3279.                 jp      nz,loc_221B
  3280.                 ret
  3281.  
  3282. loc_221B        ld      a,19h
  3283.                 ld      (ERR_NR),a
  3284.                 ld      hl,TXT_STREAMOPEN ; "Stream opened"
  3285.                 ld      a,0Ah
  3286. loc_2225        jp      PRINT_TXTERR
  3287.  
  3288. loc_2228        ld      a,0Bh
  3289.                 ld      hl,TXT_NODISKFILE ; "Not disk file"
  3290.                 jr      loc_2225
  3291.  
  3292. INITFREEACCESS  push    hl
  3293.                 ld      c,20h
  3294.                 rst     28h
  3295.                 ld      a,(TRD_5CD7)    ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3296.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3297.                 ld      (hl),a
  3298.                 inc     hl
  3299.                 xor     a
  3300.                 ld      (hl),a
  3301.                 inc     hl
  3302.                 ld      (hl),a
  3303.                 inc     hl
  3304.                 ld      (hl),a
  3305.                 ld      a,7Fh
  3306.                 pop     hl
  3307.                 ret
  3308.  
  3309. OPEN_STREAM     push    af
  3310.                 call    CP_STREAMS
  3311.                 ex      de,hl
  3312.                 ld      hl,(PROG)
  3313.                 ld      bc,(CHANS)
  3314.                 sbc     hl,bc
  3315.                 ex      de,hl
  3316.                 ld      (hl),e
  3317.                 inc     hl
  3318.                 ld      (hl),d
  3319.                 call    CREATE_HEADCHAN
  3320.                 ld      a,(TRD_5D09)
  3321.                 cp      0A5h
  3322.                 call    z,INITFREEACCESS
  3323.                 jr      z,loc_226B
  3324.                 ld      a,(TRD_5D09)
  3325.                 cp      "R"
  3326.                 ld      a,0FFh
  3327.                 jr      nz,loc_226B
  3328.                 xor     a
  3329. loc_226B        ld      (hl),a
  3330.                 pop     af
  3331.                 jp      loc_2270
  3332. loc_2270        push    af
  3333.                 ld      bc,14h
  3334.                 add     hl,bc
  3335.                 push    hl
  3336.                 call    GET_TEKSECFILE
  3337.                 pop     hl
  3338.                 inc     hl
  3339.                 ld      b,1
  3340.                 pop     af
  3341.                 or      a
  3342.                 push    af
  3343.                 call    nz,COM_06       ; ЗАПИСЬ СЕКТОРОВ
  3344.                 pop     af
  3345.                 call    z,COM_05        ; ЧТЕНИЕ СЕКТОРОВ
  3346.                 ret
  3347.  
  3348. CREATE_BLOCK0   ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3349.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3350.                 push    hl
  3351.                 ld      hl,2000h
  3352.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3353.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3354.                 call    CREATE_BLOCK
  3355.                 pop     hl
  3356.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3357.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3358.                 ret
  3359.  
  3360. CREATE_BLOCK    ld      hl,1000h
  3361.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3362.                 call    CP_FREE_ON_DSK  ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
  3363.                 call    SAVE_FILE
  3364.                 ld      hl,0
  3365.                 ld      (TRD_5CE8),hl   ; ДЛИНА ПРОГРАММЫ
  3366.                 call    SETHEADFILENAME
  3367.                 jp      REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  3368.  
  3369. CREATE_HEADCHAN ld      hl,(PROG)
  3370.                 dec     hl
  3371.                 ld      (CURCHL),hl
  3372.                 push    hl
  3373.                 ld      bc,124h
  3374.                 call    RESERV_RAM
  3375.                 ld      a,0
  3376.                 ld      b,0
  3377. loc_22C4        ld      (de),a
  3378.                 dec     de
  3379.                 djnz    loc_22C4
  3380.                 pop     hl
  3381.                 push    hl
  3382.                 ld      de,loc_3D0E
  3383.                 ld      (hl),e
  3384.                 inc     hl
  3385.                 ld      (hl),d
  3386.                 inc     hl
  3387.                 ld      de,loc_3D06
  3388.                 ld      (hl),e
  3389.                 inc     hl
  3390.                 ld      (hl),d
  3391.                 inc     hl
  3392.                 ld      (hl),"D"
  3393.                 inc     hl
  3394.                 inc     hl
  3395.                 inc     hl
  3396.                 inc     hl
  3397.                 inc     hl
  3398.                 ld      (hl),"$"
  3399.                 inc     hl
  3400.                 ld      (hl),1
  3401.                 inc     hl
  3402.                 ld      a,(TRD_5CF6)    ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  3403.                 ld      (hl),a
  3404.                 inc     hl
  3405.                 ld      a,(TRD_5D1E)
  3406.                 ld      (hl),a
  3407.                 inc     hl
  3408.                 ld      a,(TRD_5D09)
  3409.                 cp      "R"
  3410.                 ld      (hl),0
  3411.                 jr      z,loc_22FC
  3412.                 ld      a,(TRD_5CE8)    ; ДЛИНА ПРОГРАММЫ
  3413.                 ld      (hl),a
  3414. loc_22FC        inc     hl
  3415.                 ld      (hl),b
  3416.                 jr      z,loc_2304
  3417.                 ld      a,(TRD_5CE8+1)  ; ДЛИНА ПРОГРАММЫ
  3418.                 ld      (hl),a
  3419. loc_2304        inc     hl
  3420.                 ex      de,hl
  3421.                 pop     hl
  3422.                 push    de
  3423.                 ld      de,10h
  3424.                 add     hl,de
  3425.                 ex      de,hl
  3426.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  3427.                 ld      bc,10h
  3428.                 ldir
  3429.                 pop     hl
  3430.                 ret
  3431.  
  3432. GET_ADRTEKSYM   ld      c,0Dh
  3433.                 rst     28h
  3434.                 ld      c,(hl)
  3435.                 rst     28h
  3436.                 ld      bc,24h
  3437.                 add     hl,bc
  3438.                 ret
  3439.  
  3440. GET_ADRTEKFRG   ld      c,24h
  3441. ADR_OPEN_CHAN   ld      b,0
  3442.                 ld      hl,(CURCHL)
  3443.                 add     hl,bc
  3444.                 ret
  3445.  
  3446. CP_ENDOFSECTOR  ld      c,0Dh
  3447.                 rst     28h
  3448.                 inc     (hl)
  3449.                 ret     nz
  3450.                 push    hl
  3451.                 call    SET_DISK
  3452.                 call    SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
  3453.                 pop     hl
  3454.                 inc     hl
  3455.                 inc     (hl)
  3456.                 push    hl
  3457.                 call    LOAD_1_SECTOR
  3458.                 pop     hl
  3459.                 ld      a,10h
  3460.                 cp      (hl)
  3461.                 ret     nz
  3462.                 push    hl
  3463.                 ld      c,0Fh
  3464.                 rst     28h
  3465.                 ld      a,(hl)
  3466.                 cp      7Fh
  3467.                 pop     hl
  3468.                 jr      z,loc_2358
  3469.                 ld      hl,(CURCHL)
  3470.                 call    SAVE_HEAD_BLK
  3471.                 ld      c,0Eh
  3472.                 rst     28h
  3473.                 jp      loc_2379
  3474.  
  3475. loc_2358        call    FIND_NEXT_BLK
  3476.                 push    af
  3477.                 call    z,LOAD_1_SECTOR
  3478.                 ld      c,0Eh
  3479.                 rst     28h
  3480.                 pop     af
  3481.                 call    nz,CREATE_NEWBLOCK
  3482.                 ret
  3483.  
  3484. sub_2367        ld      (hl),0
  3485.                 ld      c,19h
  3486.                 rst     28h
  3487.                 ld      d,20h
  3488.                 ld      e,(hl)
  3489.                 ret
  3490.  
  3491. CREATE_NEWBLOCK call    sub_2367
  3492.                 ld      (TRD_5CD7),de   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3493.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3494.                 jr      CREATE_BLK
  3495.  
  3496. loc_2379        call    sub_2367
  3497.                 inc     e
  3498.                 ld      (TRD_5CD7),de   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3499.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3500. CREATE_BLK      call    CREATE_BLOCK
  3501.                 call    DEL_BUF         ; УДАЛЕНИЕ БУФЕРА,ЕСЛИ  ОН ЕСТЬ
  3502.                 ld      c,10h
  3503.                 rst     28h
  3504.                 ex      de,hl
  3505.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  3506.                 ld      bc,10h
  3507.                 ldir
  3508.                 ld      c,0Ch
  3509.                 rst     28h
  3510.                 ld      a,(TRD_5D1E)
  3511.                 ld      (hl),a
  3512.                 ret
  3513.  
  3514. FIND_END_SEC    ld      c,0Dh
  3515.                 rst     28h
  3516.                 inc     (hl)
  3517.                 ret     nz
  3518.                 inc     hl
  3519.                 inc     (hl)
  3520.                 push    hl
  3521.                 call    SET_DISK
  3522.                 ld      c,23h
  3523.                 rst     28h
  3524.                 ld      a,(hl)
  3525.                 or      a
  3526.                 jr      z,loc_23B6
  3527.                 pop     hl
  3528.                 push    hl
  3529.                 dec     (hl)
  3530.                 call    SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
  3531.                 pop     hl
  3532.                 push    hl
  3533.                 inc     (hl)
  3534. loc_23B6        call    LOAD_1_SECTOR
  3535.                 pop     hl
  3536.                 ld      a,10h
  3537.                 cp      (hl)
  3538.                 call    z,OPEN_NEXT_BLK
  3539.                 ret
  3540.  
  3541. OPEN_NEXT_BLK   call    FIND_NEXT_BLK
  3542.                 push    af
  3543.                 call    DEL_BUF         ; УДАЛЕНИЕ БУФЕРА,ЕСЛИ  ОН ЕСТЬ
  3544.                 pop     af
  3545.                 jp      nz,ERR_ENDOFFILE
  3546.                 jp      LOAD_1_SECTOR
  3547.  
  3548. FIND_NEXT_BLK   ld      (hl),0
  3549.                 ld      c,19h
  3550.                 rst     28h
  3551.                 inc     (hl)
  3552.                 ld      c,10h
  3553.                 rst     28h
  3554.                 ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
  3555.                 ld      bc,10h
  3556.                 ldir
  3557.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  3558.                 ret     nz
  3559. OPEN_BLK        call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  3560.                 ld      c,10h
  3561.                 rst     28h
  3562.                 ex      de,hl
  3563.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  3564.                 ld      bc,10h
  3565.                 ldir
  3566.                 ld      c,0Ch
  3567.                 rst     28h
  3568.                 ld      a,(TRD_5D1E)
  3569.                 ld      (hl),a
  3570.                 xor     a
  3571.                 ret
  3572.  
  3573. ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
  3574. SAVE_1_SECTOR   call    GET_TEKSECFILE
  3575.                 call    GET_ADRTEKFRG
  3576.                 ld      b,1
  3577.                 call    COM_06          ; ЗАПИСЬ СЕКТОРОВ
  3578.                 ld      c,0Fh
  3579.                 rst     28h
  3580.                 ld      a,(hl)
  3581.                 cp      7Fh
  3582.                 ret     z
  3583.                 call    GET_ADRTEKFRG
  3584.                 xor     a
  3585.                 ld      b,a
  3586. loc_2413        ld      (hl),a
  3587.                 inc     hl
  3588.                 djnz    loc_2413
  3589.                 ret
  3590.  
  3591. LOAD_1_SECTOR   call    GET_TEKSECFILE
  3592.                 call    GET_ADRTEKFRG
  3593.                 ld      b,1
  3594.                 jp      COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  3595.  
  3596. GET_TEKSECFILE  ld      hl,(CURCHL)
  3597.                 ld      bc,1Eh
  3598.                 add     hl,bc
  3599.                 ld      e,(hl)
  3600.                 inc     hl
  3601.                 ld      d,(hl)
  3602.                 ld      c,0Eh
  3603.                 rst     28h
  3604.                 ld      b,(hl)
  3605.                 dec     b
  3606.                 inc     b
  3607.                 push    af
  3608.                 ld      a,10h
  3609.                 jr      z,loc_2441
  3610. loc_2438        inc     e
  3611.                 cp      e
  3612.                 jr      nz,loc_243F
  3613.                 ld      e,0
  3614.                 inc     d
  3615. loc_243F        djnz    loc_2438
  3616. loc_2441        pop     af
  3617.                 ret
  3618.  
  3619. SET_DISK        ld      c,0Bh
  3620.                 rst     28h
  3621.                 ld      a,(hl)
  3622.                 jp      COM_01          ; НАСТРОЙКА НА ДИСКОВОД
  3623.  
  3624. OUT_SYM2FILE    ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  3625.                 push    hl
  3626.                 DUPL 4,0
  3627.                 push    af
  3628.                 DUPL 3,0
  3629.                 ld      a,0Ah
  3630.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  3631.                 pop     af
  3632.                 call    WORK4FREEACCESS
  3633.                 push    af
  3634.                 call    CP_FILE_OPENED
  3635.                 jp      z,ERR_INVALID_IO
  3636.                 pop     af
  3637.                 call    GET_ADRTEKSYM
  3638.                 ld      (hl),a
  3639.                 jp      CP_ENDOFSECTOR
  3640.  
  3641. CP_END_BLK      ld      c,0Dh
  3642.                 rst     28h
  3643.                 ld      a,(hl)
  3644.                 ld      bc,0Eh
  3645.                 add     hl,bc
  3646.                 cp      (hl)
  3647.                 ret     nz
  3648.                 ld      c,0Eh
  3649.                 rst     28h
  3650.                 ld      a,(hl)
  3651.                 ld      bc,0Eh
  3652.                 add     hl,bc
  3653.                 cp      (hl)
  3654.                 ret     nz
  3655.                 ld      hl,TRD_5CB6     ; ДЛЯ ПРОВЕРКИ НАЛИЧИЯ INTERFACE1
  3656.                 ld      a,(hl)
  3657.                 cp      0F4h
  3658.                 jr      z,ERR_ENDOFFILE
  3659.                 bit     4,(hl)
  3660.                 jr      z,ERR_ENDOFFILE
  3661.                 or      1
  3662.                 pop     hl
  3663.                 ret
  3664.  
  3665. ERR_ENDOFFILE   ld      a,7
  3666. loc_2494        ld      (ERR_NR),a
  3667.                 call    DELETE_BUF
  3668.                 rst     20h
  3669.                 dw 58h
  3670.                 ret
  3671.  
  3672. ERR_INVALID_IO  ld      a,17h
  3673.                 jr      loc_2494
  3674.  
  3675. WORK4FREEACCESS ld      d,a
  3676.                 ld      c,0Fh
  3677.                 rst     28h
  3678.                 ld      a,(hl)
  3679.                 cp      7Fh
  3680.                 ld      a,d
  3681.                 ret     nz
  3682.                 ld      bc,13h
  3683.                 add     hl,bc
  3684.                 ld      a,(hl)
  3685.                 or      a
  3686.                 ld      a,d
  3687.                 jr      nz,loc_24D5
  3688.                 dec     hl
  3689.                 ld      a,(hl)
  3690.                 or      a
  3691.                 jr      nz,loc_24C2
  3692.                 push    bc
  3693.                 push    hl
  3694.                 push    de
  3695.                 call    W16B2WORKSP
  3696.                 pop     de
  3697.                 pop     hl
  3698.                 pop     bc
  3699. loc_24C2        ld      c,(hl)
  3700.                 ld      a,d
  3701.                 ex      de,hl
  3702.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  3703.                 add     hl,bc
  3704.                 cp      6
  3705.                 ld      (hl),a
  3706.                 call    z,WORK_NUMSAVE
  3707.                 ld      c,21h
  3708.                 rst     28h
  3709.                 inc     (hl)
  3710.                 pop     hl
  3711.                 ret
  3712.  
  3713. loc_24D5        dec     hl
  3714.                 ld      a,(hl)
  3715.                 dec     hl
  3716.                 inc     a
  3717.                 cp      (hl)
  3718.                 inc     hl
  3719.                 inc     (hl)
  3720.                 push    hl
  3721.                 push    af
  3722.                 ld      c,23h
  3723.                 rst     28h
  3724.                 ld      (hl),0FFh
  3725.                 pop     af
  3726.                 pop     hl
  3727.                 jr      c,loc_24EE
  3728.                 ld      a,d
  3729.                 cp      0Dh
  3730.                 jr      z,loc_24F2
  3731.                 pop     bc
  3732.                 ret
  3733.  
  3734. loc_24EE        ld      a,d
  3735.                 cp      0Dh
  3736.                 ret     nz
  3737. loc_24F2        xor     a
  3738.                 ld      (hl),a
  3739.                 inc     hl
  3740.                 ld      (hl),a
  3741.                 ld      a,d
  3742.                 ret
  3743.  
  3744. W16B2WORKSP     ld      hl,(WORKSP)
  3745.                 ld      (TRD_5CCF),hl   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  3746.                 ld      bc,10h
  3747.                 jp      CREATE_FREERAM
  3748.  
  3749. WORK_NUMSAVE    ld      (hl),0Dh
  3750.                 ld      hl,(CH_ADD)
  3751.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3752.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3753.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  3754.                 ld      (CH_ADD),hl
  3755.                 ld      hl,FLAGS
  3756.                 res     7,(hl)
  3757.                 call    BC2STKBOT
  3758.                 ld      hl,FLAGS
  3759.                 set     7,(hl)
  3760.                 ld      hl,(TRD_5CCF)   ; ВРЕМЕННОЕ СОХРАНЕНИЕ WORK_SP
  3761.                 ld      (CH_ADD),hl
  3762.                 call    BC2STKBOT
  3763.                 call    FIND_LAST
  3764.                 push    bc
  3765.                 pop     de
  3766.                 ld      c,20h
  3767.                 rst     28h
  3768.                 ld      b,(hl)
  3769.                 xor     a
  3770.                 ld      hl,0
  3771.                 ld      (TRD_5CDB),hl
  3772. loc_2538        add     hl,de
  3773.                 jr      nc,loc_2544
  3774.                 push    hl
  3775.                 ld      hl,(TRD_5CDB)
  3776.                 inc     hl
  3777.                 ld      (TRD_5CDB),hl
  3778.                 pop     hl
  3779. loc_2544        djnz    loc_2538
  3780.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3781.                 ld      a,(TRD_5CDB)
  3782.                 ld      hl,TRD_5CDA
  3783.                 rrd
  3784.                 and     0Fh
  3785.                 ld      (TRD_5CDB),a
  3786.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3787.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3788.                 ld      (CH_ADD),hl
  3789.                 call    OPEN_SAVED
  3790.                 ld      c,21h
  3791.                 rst     28h
  3792.                 ld      a,0FFh
  3793.                 ld      (hl),a
  3794.                 inc     hl
  3795.                 ld      (hl),a
  3796.                 ret
  3797.  
  3798. OPEN_SAVED      ld      c,19h
  3799.                 rst     28h
  3800.                 ld      a,(TRD_5CDA)
  3801.                 cp      (hl)
  3802.                 jp      nz,loc_2584
  3803.                 ld      c,0Eh
  3804.                 rst     28h
  3805.                 ld      a,(TRD_5CDB)
  3806.                 cp      (hl)
  3807.                 jp      nz,loc_25A7
  3808. loc_257C        ld      c,0Dh
  3809.                 rst     28h
  3810.                 ld      a,(TRD_5CD9)    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3811.                 ld      (hl),a
  3812.                 ret
  3813.  
  3814. loc_2584        call    CPANDZERO23
  3815.                 call    nz,SAVE_TEK_SEC
  3816.                 ld      a,(TRD_5CDA)
  3817.                 ld      c,19h
  3818.                 rst     28h
  3819.                 ld      (hl),a
  3820.                 ld      c,10h
  3821.                 rst     28h
  3822.                 ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
  3823.                 ld      bc,10h
  3824.                 ldir
  3825.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  3826.                 jp      nz,loc_25D2
  3827.                 call    OPEN_BLK
  3828.                 jr      loc_25AD
  3829.  
  3830. loc_25A7        call    CPANDZERO23
  3831.                 call    nz,SAVE_TEK_SEC
  3832. loc_25AD        ld      a,(TRD_5CDB)
  3833.                 ld      c,0Eh
  3834.                 rst     28h
  3835.                 ld      (hl),a
  3836.                 push    hl
  3837.                 call    SET_DISK
  3838.                 call    LOAD_1_SECTOR
  3839.                 pop     hl
  3840.                 dec     hl
  3841.                 ld      a,(TRD_5CD9)    ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3842.                 ld      (hl),a
  3843.                 jr      loc_257C
  3844.  
  3845. SAVE_TEK_SEC    call    SET_DISK
  3846.                 call    SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
  3847.                 ret
  3848.  
  3849. CPANDZERO23     ld      c,23h
  3850.                 rst     28h
  3851.                 ld      a,(hl)
  3852.                 or      a
  3853.                 ld      (hl),0
  3854.                 ret
  3855.  
  3856. loc_25D2        ld      hl,(TRD_5CDA)
  3857.                 ld      h,20h
  3858.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3859.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3860.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3861.                 push    hl
  3862.                 ld      hl,(TRD_5CDB)
  3863.                 push    hl
  3864.                 call    CREATE_BLK
  3865.                 pop     hl
  3866.                 ld      (TRD_5CDB),hl
  3867.                 pop     hl
  3868.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3869.                 jr      loc_25AD
  3870.  
  3871. INPUTDATAFILE   DUPL 3,0
  3872.                 ld      hl,TV_FLAG
  3873.                 res     3,(hl)
  3874.                 ld      hl,(ERR_SP)
  3875.                 ld      e,(hl)
  3876.                 inc     hl
  3877.                 ld      d,(hl)
  3878.                 or      a
  3879.                 ld      hl,107Fh
  3880.                 sbc     hl,de
  3881.                 jr      nz,loc_2626
  3882.                 ld      sp,(ERR_SP)
  3883.                 pop     de
  3884.                 pop     de
  3885.                 ld      (ERR_SP),de
  3886. loc_260F        call    INPUT_SYM_FILE
  3887.                 jr      c,loc_261D
  3888. loc_2614        ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  3889.                 push    hl
  3890.                 ld      hl,DELETE_BUF
  3891.                 push    hl
  3892.                 ret
  3893.  
  3894. loc_261D        cp      0Dh
  3895.                 jr      z,loc_2614
  3896.                 rst     20h
  3897.                 dw 0F85h
  3898.                 jr      loc_260F
  3899.  
  3900. loc_2626        call    INPUT_SYM_FILE
  3901.                 jr      loc_2614
  3902.  
  3903. INPUT_SYM_FILE  ld      a,0Ah
  3904.                 ld      (TRD_5D06),a    ; КОЛИЧЕСТВО СИМВОЛОВ ИМЕНИ ФАЙЛА ПРИ ПОИСКЕ
  3905.                 call    CP_FILE_OPENED
  3906.                 jr      z,loc_2642
  3907.                 cp      7Fh
  3908.                 jp      nz,ERR_INVALID_IO
  3909.                 ld      bc,13h
  3910.                 add     hl,bc
  3911.                 ld      (hl),0
  3912.                 jr      loc_2645
  3913.  
  3914. loc_2642        call    CP_END_BLK
  3915. loc_2645        call    GET_ADRTEKSYM
  3916.                 ld      a,(hl)
  3917.                 push    af
  3918.                 call    FIND_END_SEC
  3919.                 pop     af
  3920.                 scf
  3921.                 ret
  3922.  
  3923. CP_FILE_OPENED  ld      c,0Fh
  3924.                 rst     28h
  3925.                 ld      a,(hl)
  3926.                 or      a
  3927.                 ret
  3928.  
  3929. CLOSE           ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  3930.                 ld      (CH_ADD),hl
  3931.                 call    SET_NUM_CHAN
  3932.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  3933.                 ld      a,(TRD_5CDB)
  3934.                 rst     20h
  3935.                 dw 1727h
  3936.                 ld      a,b
  3937.                 or      c
  3938.                 jp      z,END_COMAND
  3939.                 push    hl
  3940.                 ld      hl,(CHANS)
  3941.                 add     hl,bc
  3942.                 ld      a,(hl)
  3943.                 ld      hl,loc_3D0E
  3944.                 cp      h
  3945.                 pop     hl
  3946.                 jp      nz,loc_2228
  3947.                 ld      (hl),0
  3948.                 inc     hl
  3949.                 ld      (hl),0
  3950.                 ld      (TRD_5CD9),bc   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3951.                 ld      hl,(CHANS)
  3952.                 add     hl,bc
  3953.                 dec     hl
  3954.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3955.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3956.                 call    sub_26CE
  3957.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  3958.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  3959.                 ld      bc,124h
  3960.                 call    DEL_WORKRAM
  3961.                 ld      hl,STRMS
  3962.                 ld      b,10h
  3963. loc_269D        push    bc
  3964.                 ld      bc,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  3965.                 ld      e,(hl)
  3966.                 inc     hl
  3967.                 ld      d,(hl)
  3968.                 ex      de,hl
  3969.                 sbc     hl,bc
  3970.                 ex      de,hl
  3971.                 jr      c,loc_26BC
  3972.                 ld      d,(hl)
  3973.                 dec     hl
  3974.                 ld      e,(hl)
  3975.                 inc     hl
  3976.                 push    hl
  3977.                 ex      de,hl
  3978.                 ld      bc,124h
  3979.                 sbc     hl,bc
  3980.                 ex      de,hl
  3981.                 pop     hl
  3982.                 ld      (hl),d
  3983.                 dec     hl
  3984.                 ld      (hl),e
  3985.                 inc     hl
  3986. loc_26BC        inc     hl
  3987.                 pop     bc
  3988.                 djnz    loc_269D
  3989.                 ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  3990.                 ld      bc,124h
  3991.                 sbc     hl,bc
  3992.                 ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  3993.                 jp      END_COMAND
  3994.  
  3995. sub_26CE        ld      bc,0Fh
  3996.                 add     hl,bc
  3997.                 ld      a,(hl)
  3998.                 or      a
  3999.                 ret     z
  4000.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  4001.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  4002.                 ld      (CURCHL),hl
  4003.                 call    SAVE_HEAD_BLK
  4004.                 jp      SAVE_1_SECTOR   ; ЗАПИСЬ ТЕКУЩЕГО СЕКТОРА
  4005.  
  4006. SAVE_HEAD_BLK   ld      bc,0Dh
  4007.                 add     hl,bc
  4008.                 ld      e,(hl)
  4009.                 inc     hl
  4010.                 ld      d,(hl)
  4011.                 ld      bc,0Dh
  4012.                 add     hl,bc
  4013.                 ld      (hl),e
  4014.                 inc     hl
  4015.                 ld      (hl),d
  4016.                 ld      c,10h
  4017.                 rst     28h
  4018.                 ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
  4019.                 ld      bc,10h
  4020.                 ldir
  4021.                 call    SET_DISK
  4022.                 ld      c,0Ch
  4023.                 rst     28h
  4024.                 ld      c,(hl)
  4025.                 call    SETHEADFILENAME
  4026.                 jp      REWRITE_9SEC    ; ПЕРЕЗАПИСЬ 9 СЕКТОРА
  4027.  
  4028. ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  4029. PRINT_MSG       ld      a,(hl)
  4030.                 or      a
  4031.                 ret     z
  4032.                 and     7Fh
  4033.                 rst     10h
  4034.                 bit     7,(hl)
  4035.                 ret     nz
  4036.                 inc     hl
  4037.                 jr      PRINT_MSG       ; ПЕЧАТЬ ТЕКСТОВОГО СООБЩЕНИЯ
  4038.  
  4039. COMPARE_B_SYM   ld      a,(de)
  4040.                 cp      (hl)
  4041.                 ret     nz
  4042.                 inc     de
  4043.                 inc     hl
  4044.                 djnz    COMPARE_B_SYM
  4045.                 ret
  4046.  
  4047. loc_271B        ld      hl,TXT_NODISK_  ; "No disk"
  4048.                 ld      a,6
  4049.                 jp      PRINT_TXTERR
  4050.  
  4051. ERR_DIRFULL     ld      hl,TXT_DIRFULL  ; "Directory full"
  4052.                 ld      a,4
  4053.                 jp      PRINT_TXTERR
  4054.  
  4055. SET_TAPELDERR   ld      a,1Ah
  4056.                 jr      SET_NUM_ERR
  4057.  
  4058.                 ld      a,12h
  4059. SET_NUM_ERR     ld      (ERR_NR),a
  4060.                 ret
  4061.  
  4062.                 ld      a,3
  4063.                 jr      SET_NUM_ERR
  4064.  
  4065. COM_15          xor     a               ; ПРОВЕРКА ДОРОЖКИ
  4066.                 ld      (TRD_5CD7+1),a  ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  4067.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  4068.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  4069.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  4070.                 ld      (TRD_5CCD),a    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
  4071.                 ld      e,d
  4072.                 push    de
  4073.                 ld      a,e
  4074.                 OUT (VG_RW_7F),A        ;IO out (7Fh),a
  4075.                 LD A,0X18
  4076.                 call    COM2VG_WAIT
  4077.                 ld      a,(TRD_5CCD)    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
  4078.                 and     80h
  4079.                 call    nz,PAUSE_3_C_A
  4080.                 pop     de
  4081.                 call    CP_NUM_TRACK
  4082.                 ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  4083.                 or      a
  4084.                 ret     z
  4085.                 ld      a,7
  4086.                 ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
  4087.                 ret
  4088.  
  4089. TXT_OK_         db "O.K.",0
  4090. TXT_VERIFYERR   db "Verify Error.",8Dh
  4091. TXT_BACKUPDISK  db "BACKUP DISK",8Dh
  4092. TXT_INS_DEST    db "Insert Destination disk",0Dh,"then press Y",0
  4093. TXT_INS_SRC     db "Insert Source disk then press Y",0
  4094. TXT_BREAK       db "*BREAK*",8Dh
  4095. TXT_OUTRAM      db "Out of RAM",8Dh
  4096. TXT_ARRAYNOT    db "Array not found",8Dh
  4097. TXT_DIRFULL     db "Directory full",8Dh
  4098. TXT_NODISK_     db "No disk",8Dh
  4099. TXT_STREAMOPEN  db "Stream opened",8Dh
  4100. TXT_NODISKFILE  db "Not disk file",8Dh
  4101. TXT_FILEEXIST   db "File exists",0Dh,"Over write?(Y/N",0A9h
  4102.  
  4103. CALL_3D13       push    af
  4104.                 push    bc
  4105.                 ld      (TRD_5D04),de
  4106.                 ld      (TRD_5D02),hl
  4107.                 DUPL 3,0
  4108.                 ld      a,0FFh
  4109.                 ld      (TRD_5D15),a    ; ЕСЛИ 0,ПЕЧАТАТЬ ШАПКУ TR-DOS.ИНАЧЕ НЕ ПЕЧАТАТЬ
  4110.                 ld      (TRD_5D1F),a
  4111.                 pop     bc
  4112.                 pop     af
  4113.                 ld      hl,CP_ERROR     ; адрес завершения интерпретатора
  4114.                 ld      (TRD_5D1A),hl   ; ВНУТРЕННИЙ АДРЕС ЗАВЕРШЕНИЯ ИНТЕРПРЕТАТОРА КОМАНД
  4115.                 ld      hl,0
  4116.                 add     hl,sp
  4117.                 ld      (TRD_5D1C),hl   ; сохранение текущего стека
  4118.                 dec     hl
  4119.                 dec     hl
  4120.                 ld      sp,hl
  4121.                 push    af
  4122.                 call    MARK_SP         ; УСТАНОВКА СТЕКА ДЛЯ ПЕРЕХВАТА ОШИБОК
  4123.                 ld      hl,COMAND_TBL
  4124.                 LD A,C
  4125.                 CP LOW ((ECOMAND_TBL-COMAND_TBL)/2)+1
  4126.                 JP NC,END_COMAND
  4127.                 ADD A,A
  4128.                 LD E,A
  4129.                 POP AF
  4130.                 LD D,0
  4131.                 ADD HL,DE
  4132.                 LD E,(HL)
  4133.                 INC HL
  4134.                 LD D,(HL)
  4135.                 LD HL,END_COMAND
  4136.                 PUSH HL
  4137.                 PUSH DE
  4138.                 LD HL,(TRD_5D02)
  4139.                 LD DE,(TRD_5D04)
  4140.                 RET
  4141.  
  4142. COMAND_TBL      DW COM_00               ;ВОССТАНОВЛЕНИЕ ВГ93
  4143.                 DW COM_01               ;НАСТРОЙКА НА ДИСКОВОД
  4144.                 DW COM_02               ;УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
  4145.                 DW COM_03               ;УСТАНОВКА НОМЕРА СЕКТОРА
  4146.                 DW COM_04               ;УСТАНОВКА АДРЕСА БУФЕРА
  4147.                 DW COM_05               ;ЧТЕНИЕ СЕКТОРОВ
  4148.                 DW COM_06               ;ЗАПИСЬ СЕКТОРОВ
  4149.                 DW COM_07               ;ВЫВОД КАТАЛОГА В КАНАЛ
  4150.                 DW COM_08               ;СЧИТЫВАНИЕ ОПИСАТЕЛЯ В БУФЕР 0X5CDD
  4151.                 DW COM_09               ;ЗАПИСЬ ОПИСАТЕЛЯ ФАЙЛА НА ДИСК
  4152.                 DW COM_0A               ;ПОИСК ФАЙЛА ПО ИМЕНИ И РАСШИРЕНИЮ
  4153.                 DW COM_0B               ;ЗАПИСЬ БЛОКА КОДОВ НА ДИСК
  4154.                 DW COM_0C               ;ЗАПИСЬ БЕЙСИК ПРОГРАММЫ НА ДИСК
  4155.                 DW END_COMAND
  4156.                 DW COM_0E               ;ЗАГРУЗКА ИЛИ ПРОВЕРКА ФАЙЛА
  4157.                 DW END_COMAND
  4158.                 DW END_COMAND
  4159.                 DW END_COMAND
  4160.                 DW COM_12               ;УДАЛЕНИЕ ФАЙЛА
  4161.                 DW COM_13               ;ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА В БУФЕР 0X5CDD
  4162.                 DW COM_14               ;ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА ИЗ БУФЕРА 0X5CDD
  4163.                 DW COM_15               ;ПРОВЕРКА ДОРОЖКИ
  4164.                 DW COM_16               ;УСТАНОВКА СТОРОНЫ 0 ДИСКА
  4165.                 DW COM_17               ;УСТАНОВКА СТОРОНЫ 1 ДИСКА
  4166.                 DW COM_18               ;НАСТРОЙКА НА ДИСКЕТУ
  4167. ECOMAND_TBL
  4168.  
  4169.                 DUPL 0X28D8-$,0XFF
  4170. COM_07          push    af              ; ВЫВОД КАТАЛОГА В КАНАЛ
  4171.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  4172.                 pop     af
  4173.                 jp      loc_479
  4174.  
  4175. COM_13          xor     a               ; ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА В БУФЕР #5CDD
  4176.                 jr      loc_28E5
  4177.  
  4178. COM_14          ld      a,0FFh          ; ПЕРЕНОС ОПИСАТЕЛЯ ФАЙЛА ИЗ БУФЕРА #5CDD
  4179. loc_28E5        ld      de,TRD_5CDD     ; ИМЯ ФАЙЛА
  4180.                 ld      bc,10h
  4181.                 or      a
  4182.                 jr      z,loc_28EF      ; FIX
  4183.                 ex      de,hl
  4184. loc_28EF        ldir                    ; FIX
  4185.                 ret
  4186.  
  4187. COM_0C          call    COM_18          ; ЗАПИСЬ БЕЙСИК ПРОГРАММЫ НА ДИСК
  4188.                 call    CP_FREE_ON_DSK  ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
  4189.                 jp      loc_1B27
  4190.  
  4191. COM_0B          ld      (TRD_5CD7),hl   ; ЗАПИСЬ КОДОВОГО ФАЙЛА НА ДИСК
  4192.                 ld      (TRD_5CD9),de   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  4193.                 ld      (TRD_5CDB),de
  4194.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  4195.                 call    CP_FREE_ON_DSK  ; ПРОВЕРКА СВОБОДНОГО МЕСТА НА ДИСКЕ
  4196.                 jp      loc_1B53
  4197.  
  4198. COM_0E          or      a               ; ЗАГРУЗКА ИЛИ ПРОВЕРКА ФАЙЛА
  4199.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  4200.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  4201.                 ld      (TRD_5CDB),de
  4202.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4203.                 call    FIND_RD_HEAD
  4204.                 call    CP_PARAMS       ; НАСТРОЙКА ПАРАМЕТРОВ ЗАГРУЗКИ ФАЙЛА
  4205.                 jp      RD_FILE
  4206.  
  4207. COM_12          call    COM_18          ; УДАЛЕНИЕ ФАЙЛА
  4208.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4209.                 jp      ERASE_FILES     ; УДАЛЕНИЕ ФАЙЛА НА ДИСКЕ
  4210.  
  4211. ; ПОИСК ФАЙЛА ПО ИМЕНИ
  4212. FIND_FILE       call    SET_FILENAME    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
  4213.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  4214.                 jp      FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4215.  
  4216. ; ПЕЧАТЬ ИМЕНИ ФАЙЛА
  4217. PRINT_FILENAME  push    bc
  4218.                 ld      b,8
  4219. loc_293B        ld      a,(hl)
  4220.                 rst     10h
  4221.                 inc     hl
  4222.                 djnz    loc_293B
  4223.                 ld      a,"<"
  4224.                 rst     10h
  4225.                 ld      a,(hl)
  4226.                 rst     10h
  4227.                 ld      a,">"
  4228.                 rst     10h
  4229.                 pop     bc
  4230.                 ret
  4231.  
  4232. ; СОЗДАНИЕ БУФЕРА
  4233. CREATE_BUF      push    hl
  4234.                 push    de
  4235.                 push    bc
  4236.                 push    af
  4237.                 ld      hl,TRD_5D0C
  4238.                 ld      a,(hl)
  4239.                 or      a
  4240.                 jr      z,loc_2992
  4241.                 push    hl
  4242.                 ld      bc,257          ; РАЗМЕР БУФЕРА СЕКТОРА
  4243.                 push    bc
  4244.                 call    CP_FREE_RAM
  4245.                 pop     bc
  4246.                 pop     hl
  4247.                 ld      (hl),0
  4248.                 ld      hl,TRD_5D25
  4249.                 call    RESERV_RAM
  4250.                 ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  4251.                 ld      bc,257          ; РАЗМЕР БУФЕРА СЕКТОРА
  4252.                 add     hl,bc
  4253.                 jr      loc_298F
  4254.  
  4255. ; УДАЛЕНИЕ БУФЕРА,ЕСЛИ  ОН ЕСТЬ
  4256. DEL_BUF         push    hl
  4257.                 push    de
  4258.                 push    bc
  4259.                 push    af
  4260.                 ld      hl,TRD_5D0C
  4261.                 ld      a,(hl)
  4262.                 or      a
  4263.                 jr      nz,loc_2992
  4264.                 ld      (hl),0FFh
  4265.                 ld      hl,TRD_5D25
  4266.                 ld      bc,257          ; РАЗМЕР БУФЕРА СЕКТОРА
  4267.                 call    DEL_WORKRAM
  4268.                 or      a
  4269.                 ld      bc,257          ; РАЗМЕР БУФЕРА СЕКТОРА
  4270.                 ld      hl,(TRD_5D11)   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  4271.                 sbc     hl,bc
  4272. loc_298F        ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  4273. loc_2992        pop     af
  4274.                 pop     bc
  4275.                 pop     de
  4276.                 pop     hl
  4277.                 ret
  4278.  
  4279. COM_40          xor     a
  4280. loc_2998        ld      (TRD_5CD7),a    ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  4281.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  4282.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  4283.                 call    CP_SECOND_SYM   ; ПРОВЕРКА СЛЕДУЮЩЕГО СИМВОЛА
  4284.                 jp      z,SINTAX_ERROR
  4285.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  4286.                 ld      a,(TRD_5CD7)    ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  4287.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  4288.                 ld      (hl),a
  4289.                 jp      ERR_OK
  4290.  
  4291. COM_80          ld      a,80h
  4292.                 jr      loc_2998
  4293.  
  4294. TXT_ERROR_      db 0Dh,"*ERROR*",8Dh
  4295. TXT_NOSPACE_    db 0Dh,"No space",8Dh
  4296. TXT_FILEEXISTS_ db 0Dh,"File exists",8Dh
  4297. TXT_FREE_       db " Free",8Dh
  4298. READ_ONLY       db 0Dh,"Read Onl",0F9h
  4299. TXT_DISCERROR_  db 0Dh,"Disc Erro",0F2h
  4300. TXT_R_O         db 0Dh,"Rec.  O/",0C6h
  4301. TXT_TITLE_      db "Title:",0A0h
  4302. TXT_RIA_        db 0Dh,"Retry,Abort,Ignore?",0
  4303. TXT_TRK_        db 0Dh,"Trk",0A0h
  4304. TXT_SEC_        db " sec",0A0h
  4305. TXT_DELFILE_    db " Del. File",8Dh
  4306. TXT_NOFILES_    db 0Dh
  4307. TXT_NOFILES     db "No"
  4308. TXT_FILES_      db " File(s)",8Dh,0
  4309.  
  4310. sub_2A35        ld      hl,loc_2A41
  4311.                 ld      de,4080h
  4312.                 ld      bc,20h
  4313.                 ldir                    ; FIX
  4314.                 ret
  4315.  
  4316. loc_2A41        ld      a,(loc_3B5)
  4317.                 cp      0F3h
  4318.                 ld      a,10h
  4319.                 jr      z,loc_2A4B
  4320.                 xor     a
  4321. loc_2A4B        ld      (KSTATE1),a
  4322.                 ld      bc,7FFDh
  4323.                 ld      a,10h
  4324.                 out     (c),a           ;IO
  4325.                 ret
  4326.  
  4327. MAGIC           push    af
  4328.                 push    bc
  4329.                 push    de
  4330.                 push    hl
  4331.                 push    ix
  4332.                 push    iy
  4333.                 exx
  4334.                 push    bc
  4335.                 push    de
  4336.                 push    hl
  4337.                 ex      af,af'
  4338.                 push    af
  4339.                 ld      a,i
  4340.                 push    af
  4341.                 ld      a,r
  4342.                 push    af
  4343.                 ld      hl,0
  4344.                 add     hl,sp
  4345.                 push    hl
  4346.                 ld      a,3Ch
  4347.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  4348.                 ld      a,3Fh
  4349.                 ld      i,a
  4350.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  4351.                 and     80h
  4352.                 rrca
  4353.                 rrca
  4354.                 rrca
  4355.                 ld      (KSTATE1),a
  4356.                 call    sub_2F65
  4357.                 call    PAUSE_3_C_A
  4358.                 call    PAUSE_3_C_A
  4359.                 ld      de,0Ah
  4360.                 ld      hl,4000h
  4361.                 push    hl
  4362.                 call    sub_2D73
  4363.                 ld      hl,4100h
  4364.                 ld      de,0Bh
  4365.                 call    sub_2D73
  4366.                 pop     hl
  4367.                 push    hl
  4368.                 ld      de,8
  4369.                 call    sub_2F1B
  4370.                 ld      hl,40E3h
  4371.                 ld      a,(hl)
  4372.                 ld      (KSTATE0),a
  4373.                 inc     hl
  4374.                 ld      a,(hl)
  4375.                 inc     (hl)
  4376.                 inc     hl
  4377.                 ld      e,(hl)
  4378.                 inc     hl
  4379.                 ld      d,(hl)
  4380.                 or      a
  4381.                 ex      de,hl
  4382.                 ld      de,0C0h
  4383.                 sbc     hl,de
  4384.                 ld      (40E5h),hl
  4385.                 ld      hl,4000h
  4386.                 ld      de,8
  4387.                 call    sub_2D73
  4388.                 pop     hl
  4389.                 ld      de,(40E1h)
  4390.                 push    de
  4391.                 ld      de,0Ah
  4392.                 call    sub_2F1B
  4393.                 pop     de
  4394.                 call    sub_2D4C
  4395.                 push    de
  4396.                 ld      a,3Ch
  4397.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  4398.                 call    sub_2F65
  4399.                 ld      hl,4000h
  4400.                 ld      de,8
  4401.                 ld      b,1
  4402.                 call    sub_2F1B
  4403.                 pop     de
  4404.                 ld      hl,(40E1h)
  4405.                 ld      (40E1h),de
  4406.                 push    hl
  4407.                 ld      hl,4000h
  4408.                 ld      de,8
  4409.                 ld      b,1
  4410.                 call    sub_2D73
  4411.                 ld      a,(40E4h)
  4412.                 dec     a
  4413.                 call    sub_2CE5
  4414.                 ld      (hl),"@"
  4415.                 inc     hl
  4416.                 ld      b,7
  4417. loc_2B09        ld      (hl)," "
  4418.                 inc     hl
  4419.                 djnz    loc_2B09
  4420.                 ld      (hl),"C"
  4421.                 pop     de
  4422.                 pop     bc
  4423.                 inc     hl
  4424.                 ld      (hl),c
  4425.                 inc     hl
  4426.                 ld      (hl),b
  4427.                 inc     hl
  4428.                 inc     hl
  4429.                 inc     hl
  4430.                 ld      (hl),0C0h
  4431.                 inc     hl
  4432.                 ld      (hl),e
  4433.                 inc     hl
  4434.                 ld      (hl),d
  4435.                 ld      hl,4000h
  4436.                 ld      de,0
  4437.                 IN A,(VG_RW_5F)         ;IO in a,(5Fh)
  4438.                 dec     a
  4439.                 ld      e,a
  4440.                 ld      b,1
  4441.                 call    sub_2D73
  4442.                 ld      hl,0
  4443.                 add     hl,sp
  4444.                 ld      (4140h),hl
  4445.                 ld      sp,41FFh
  4446.                 call    sub_2A35
  4447.                 ld      hl,0C000h
  4448.                 xor     a
  4449. loc_2B3F        add     a,(hl)
  4450.                 inc     hl
  4451.                 ld      b,a
  4452.                 ld      a,h
  4453.                 or      a
  4454.                 ld      a,b
  4455.                 jr      nz,loc_2B3F
  4456.                 ld      hl,4100h
  4457.                 ld      (hl),a
  4458.                 push    hl
  4459.                 ld      hl,loc_2B58
  4460.                 push    hl
  4461.                 ld      hl,loc_3D2F
  4462.                 push    hl
  4463.                 di
  4464.                 jp      4080h
  4465.  
  4466. loc_2B58        pop     hl
  4467.                 ld      bc,7FFDh
  4468.                 ld      a,0AAh
  4469.                 ld      (4130h),a
  4470.                 ld      d,5
  4471.                 ld      a,(KSTATE1)
  4472.                 or      d
  4473.                 ld      d,a
  4474.                 out     (c),d           ;IO
  4475.                 ld      a,(0C130h)
  4476.                 cp      0AAh
  4477.                 jp      nz,loc_2C1B
  4478.                 ld      a,d
  4479.                 and     0F8h
  4480.                 ld      d,a
  4481.                 inc     hl
  4482.                 ld      b,8
  4483. loc_2B79        ld      (hl),d
  4484.                 out     (c),d           ;IO
  4485.                 xor     a
  4486.                 ld      hl,0C000h
  4487. loc_2B80        add     a,(hl)
  4488.                 inc     hl
  4489.                 ld      e,a
  4490.                 ld      a,h
  4491.                 or      a
  4492.                 ld      a,e
  4493.                 jr      nz,loc_2B80
  4494.                 ld      hl,4100h
  4495.                 cp      (hl)
  4496.                 inc     hl
  4497.                 jr      z,loc_2B93
  4498.                 inc     d
  4499.                 djnz    loc_2B79
  4500.                 dec     d
  4501. loc_2B93        ld      b,8
  4502. loc_2B95        push    bc
  4503.                 call    sub_2C37
  4504.                 pop     bc
  4505.                 djnz    loc_2B95
  4506.                 ld      c,0
  4507.                 call    sub_2F3A
  4508.                 call    sub_2D2A
  4509.                 ld      a,(40E4h)
  4510.                 ld      (4102h),a
  4511.                 inc     a
  4512.                 ld      (40E4h),a
  4513.                 ld      hl,(40E5h)
  4514.                 ld      de,1
  4515.                 sbc     hl,de
  4516.                 ld      (40E5h),hl
  4517.                 ret     c
  4518.                 ld      hl,(40E1h)
  4519.                 ld      (411Eh),hl
  4520.                 call    sub_2D1E
  4521.                 ld      a,38h
  4522.                 ld      (4111h),a
  4523.                 ld      a,1
  4524.                 ld      (411Dh),a
  4525.                 ld      hl,4100h
  4526.                 ld      (4119h),hl
  4527.                 ld      hl,100h
  4528.                 ld      (411Bh),hl
  4529.                 ld      de,(40E1h)
  4530.                 call    sub_2F65
  4531.                 ld      c,d
  4532.                 call    sub_2F3A
  4533.                 ld      hl,4100h
  4534.                 ld      b,1
  4535.                 call    loc_2D58
  4536.                 ld      (40E1h),de
  4537.                 ld      c,0
  4538.                 call    sub_2F3A
  4539.                 call    sub_2D34
  4540.                 ld      a,(4102h)
  4541.                 call    sub_2CE5
  4542.                 ld      de,4110h
  4543.                 ld      bc,10h
  4544.                 ex      de,hl
  4545.                 ldir
  4546.                 IN A,(VG_RW_5F)         ;IO in a,(5Fh)
  4547.                 dec     a
  4548.                 ld      e,a
  4549.                 ld      d,0
  4550.                 ld      hl,4000h
  4551.                 call    sub_2D73
  4552.                 ld      bc,7FFDh
  4553.                 ld      a,(4101h)
  4554.                 out     (c),a           ;IO
  4555. loc_2C1B        ld      hl,(4140h)
  4556.                 ld      sp,hl
  4557.                 ld      hl,4000h
  4558.                 ld      de,0Ah
  4559.                 call    sub_2F1B
  4560.                 ld      hl,4100h
  4561.                 ld      de,0Bh
  4562.                 call    sub_2F1B
  4563.                 ld      a,3Ch
  4564.                 push    af
  4565.                 jp      loc_2EBC
  4566.  
  4567. sub_2C37        ld      a,b
  4568.                 dec     a
  4569.                 ld      (4103h),a
  4570.                 ld      b,a
  4571.                 ld      a,(4101h)
  4572.                 and     7
  4573.                 cp      b
  4574.                 ret     z
  4575.                 ld      a,2
  4576.                 cp      b
  4577.                 ret     z
  4578.                 ld      a,(4101h)
  4579.                 and     8
  4580.                 jr      z,loc_2C55
  4581.                 ld      a,b
  4582.                 cp      7
  4583.                 ret     z
  4584.                 jr      loc_2C59
  4585.  
  4586. loc_2C55        ld      a,b
  4587.                 cp      5
  4588.                 ret     z
  4589. loc_2C59        call    sub_2C5D
  4590.                 ret
  4591.  
  4592. sub_2C5D        ld      hl,4101h
  4593.                 ld      a,(hl)
  4594.                 and     0F8h
  4595.                 ld      c,a
  4596.                 ld      a,b
  4597.                 or      c
  4598.                 push    bc
  4599.                 ld      bc,7FFDh
  4600.                 out     (c),a           ;IO
  4601.                 pop     bc
  4602.                 ld      hl,0C000h
  4603. loc_2C70        ld      a,(hl)
  4604.                 or      a
  4605.                 jr      nz,loc_2C7A
  4606.                 inc     hl
  4607.                 ld      a,h
  4608.                 or      a
  4609.                 jr      nz,loc_2C70
  4610.                 ret
  4611.  
  4612. loc_2C7A        call    sub_2C7E
  4613.                 ret
  4614.  
  4615. sub_2C7E        ld      c,0
  4616.                 call    sub_2F3A
  4617.                 call    sub_2D2A
  4618.                 ld      a,(40E4h)
  4619.                 ld      (4102h),a
  4620.                 inc     a
  4621.                 ld      (40E4h),a
  4622.                 ld      hl,(40E5h)
  4623.                 ld      de,40h
  4624.                 sbc     hl,de
  4625.                 ld      (40E5h),hl
  4626.                 ret     c
  4627.                 ld      hl,(40E1h)
  4628.                 ld      (411Eh),hl
  4629.                 call    sub_2D1E
  4630.                 ld      a,40h
  4631.                 ld      (411Dh),a
  4632.                 ld      hl,0C000h
  4633.                 ld      (4119h),hl
  4634.                 ld      hl,4000h
  4635.                 ld      (411Bh),hl
  4636.                 ld      de,(40E1h)
  4637.                 call    sub_2D3E
  4638.                 ld      (40E1h),de
  4639.                 ld      c,0
  4640.                 call    sub_2F3A
  4641.                 call    sub_2D34
  4642.                 ld      a,(4102h)
  4643.                 call    sub_2CE5
  4644.                 ld      de,4110h
  4645.                 ld      bc,10h
  4646.                 ex      de,hl
  4647.                 ldir
  4648.                 IN A,(VG_RW_5F)         ;IO in a,(5Fh)
  4649.                 dec     a
  4650.                 ld      e,a
  4651.                 ld      d,0
  4652.                 ld      hl,4000h
  4653.                 call    sub_2D73
  4654.                 ret
  4655.  
  4656. sub_2CE5        ld      c,a
  4657.                 and     0F0h
  4658.                 rrca
  4659.                 rrca
  4660.                 rrca
  4661.                 rrca
  4662.                 ld      b,a
  4663.                 push    bc
  4664.                 ld      e,b
  4665.                 ld      d,0
  4666.                 ld      hl,4000h
  4667.                 push    de
  4668.                 call    sub_2F1B
  4669.                 pop     de
  4670.                 pop     bc
  4671.                 ld      b,0
  4672.                 ld      a,c
  4673.                 and     0Fh
  4674.                 rlca
  4675.                 rlca
  4676.                 rlca
  4677.                 rlca
  4678.                 ld      hl,4000h
  4679.                 add     a,l
  4680.                 ld      l,a
  4681.                 ret
  4682.  
  4683. sub_2D09        ld      hl,4110h
  4684.                 ld      b,9
  4685. loc_2D0E        ld      (hl)," "
  4686.                 inc     hl
  4687.                 djnz    loc_2D0E
  4688.                 ld      a,"@"
  4689.                 ld      (4110h),a
  4690.                 ld      a,"C"
  4691.                 ld      (4118h),a
  4692.                 ret
  4693.  
  4694. sub_2D1E        call    sub_2D09
  4695.                 ld      a,(4103h)
  4696.                 add     a,"0"
  4697.                 ld      (4111h),a
  4698.                 ret
  4699.  
  4700. sub_2D2A        ld      hl,4000h
  4701.                 ld      de,8
  4702.                 call    sub_2F1B
  4703.                 ret
  4704.  
  4705. sub_2D34        ld      hl,4000h
  4706.                 ld      de,8
  4707.                 call    sub_2D73
  4708.                 ret
  4709.  
  4710. sub_2D3E        call    sub_2F65
  4711.                 ld      c,d
  4712.                 call    sub_2F3A
  4713.                 ld      hl,0C000h
  4714.                 ld      b,40h
  4715.                 jr      loc_2D58
  4716.  
  4717. sub_2D4C        call    sub_2F65
  4718.                 ld      c,d
  4719.                 call    sub_2F3A
  4720.                 ld      hl,4000h
  4721.                 ld      b,0C0h
  4722. loc_2D58        push    bc
  4723.                 push    de
  4724.                 call    sub_2D73
  4725.                 ld      de,100h
  4726.                 add     hl,de
  4727.                 pop     de
  4728.                 inc     e
  4729.                 ld      a,e
  4730.                 cp      10h
  4731.                 jr      nz,loc_2D6F
  4732.                 ld      e,0
  4733.                 inc     d
  4734.                 ld      c,d
  4735.                 call    sub_2F3A
  4736. loc_2D6F        pop     bc
  4737.                 djnz    loc_2D58
  4738.                 ret
  4739.  
  4740. sub_2D73        ld      a,e
  4741.                 inc     a
  4742.                 OUT (VG_RW_5F),A        ;IO out (5Fh),a
  4743.                 push    hl
  4744.                 ld      d,14h
  4745.                 push    de
  4746. loc_2D7B        di
  4747.                 ld      c,7Fh
  4748.                 ld      a,0A0h
  4749.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  4750.                 call    WR_DATAPORT
  4751.                 pop     de
  4752.                 pop     hl
  4753.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  4754.                 and     7Fh
  4755.                 ret     z
  4756.                 dec     d
  4757.                 push    hl
  4758.                 push    de
  4759.                 jr      nz,loc_2D7B
  4760.                 halt
  4761.  
  4762. loc_2D92        ld      hl,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  4763.                 ld      de,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  4764.                 ld      a,(TRD_5CEA)    ; ДЛИНА ФАЙЛА В СЕКТОРАХ
  4765.                 ld      b,a
  4766.                 call    COM_05          ; ЧТЕНИЕ СЕКТОРОВ
  4767.                 ret
  4768.  
  4769. GOTO            call    SET_AND_PUT
  4770.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  4771.                 call    INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  4772.                 call    SET_FILENAME    ; ПЕРЕНОС ЗАДАННОГО ИМЕНИ ФАЙЛА В БУФЕР #5CDD
  4773.                 ld      (4020h),bc
  4774.                 ld      a,c
  4775.                 cp      8
  4776.                 jr      nc,loc_2DD2
  4777.                 call    COM_18          ; НАСТРОЙКА НА ДИСКЕТУ
  4778.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4779.                 jp      nz,ERR_NOFILES
  4780.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  4781.                 ld      bc,(4020h)
  4782.                 add     hl,bc
  4783.                 ld      (hl),"8"
  4784.                 push    hl
  4785.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4786.                 pop     hl
  4787.                 jr      z,loc_2DD8
  4788.                 ld      (hl)," "
  4789. loc_2DD2        call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4790.                 jp      loc_2E33
  4791.  
  4792. loc_2DD8        call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  4793.                 call    loc_2D92
  4794.                 ld      sp,40FFh
  4795.                 ld      b,8
  4796. loc_2DE3        push    bc
  4797.                 ld      a,b
  4798.                 ld      bc,7FFDh
  4799.                 dec     a
  4800.                 push    af
  4801.                 or      10h
  4802.                 out     (c),a           ;IO
  4803.                 pop     af
  4804.                 add     a,30h
  4805.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  4806.                 ld      bc,(4020h)
  4807.                 add     hl,bc
  4808.                 ld      (hl),a
  4809.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4810.                 jr      nz,loc_2E05
  4811.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  4812.                 call    loc_2D92
  4813. loc_2E05        pop     bc
  4814.                 djnz    loc_2DE3
  4815.                 ld      a,20h
  4816.                 ld      hl,TRD_5CDD     ; ИМЯ ФАЙЛА
  4817.                 ld      bc,(4020h)
  4818.                 add     hl,bc
  4819.                 ld      (hl),a
  4820.                 call    FIND_FILENAME   ; ПОИСК ФАЙЛА ПО ИМЕНИ ФАЙЛА
  4821.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  4822.                 push    bc
  4823.                 push    af
  4824.                 ld      bc,7FFDh
  4825.                 ld      a,(4101h)
  4826.                 out     (c),a           ;IO
  4827.                 pop     af
  4828.                 pop     bc
  4829.                 jr      loc_2E39
  4830.  
  4831.                 call    SET_AND_PUT
  4832.                 call    EXIT_IF_SINTAX  ; ВОЗВРАТ В ПРЕДЫДУЩИЙ ВЫЗОВ,ЕСЛИ ПРОВЕРКА СИНТАКСИСА
  4833.                 call    INP_EXTFILENAME ; ПРИЕМ РАСШИРЕНИЯ ФАЙЛА
  4834.                 call    FIND_FILE       ; ПОИСК ФАЙЛА ПО ИМЕНИ
  4835. loc_2E33        jp      nz,ERR_NOFILES
  4836.                 call    RDHEAD_FILENAME ; ЧТЕНИЕ ОПИСАТЕЛЯ ФАЙЛА
  4837. loc_2E39        ld      a,(TRD_5CDD)    ; ИМЯ ФАЙЛА
  4838.                 cp      "$"
  4839.                 di
  4840.                 jr      nz,loc_2E43
  4841.                 im      2
  4842. loc_2E43        ld      sp,40F0h
  4843.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  4844.                 ld      (4010h),a
  4845.                 ld      a,(TRD_5D16)    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  4846.                 ld      (4011h),a
  4847.                 ld      hl,(TRD_5CE6)   ; ДЛЯ <C>-СТАРТОВЫЙ АДРЕС,ДЛЯ <B>-ДЛИНА ПРОГРАММЫ
  4848.                 push    hl
  4849.                 ld      de,(TRD_5CEB)   ; НОМЕР ПЕРВОГО СЕКТОРА ФАЙЛА
  4850.                 push    de
  4851.                 inc     e
  4852.                 ld      a,e
  4853.                 cp      10h
  4854.                 jr      nz,loc_2E64
  4855.                 ld      e,0
  4856.                 inc     d
  4857. loc_2E64        ld      c,d
  4858.                 call    sub_2F07
  4859.                 ld      a,(4010h)
  4860.                 and     2
  4861.                 call    nz,sub_2F0F
  4862.                 ld      a,c
  4863.                 call    loc_2F50
  4864.                 ld      hl,4100h
  4865.                 ld      b,0BFh
  4866. loc_2E79        push    bc
  4867.                 push    de
  4868.                 call    sub_2F1B
  4869.                 ld      de,100h
  4870.                 add     hl,de
  4871.                 pop     de
  4872.                 inc     e
  4873.                 ld      a,e
  4874.                 cp      10h
  4875.                 jr      nz,loc_2E9C
  4876.                 ld      e,0
  4877.                 inc     d
  4878.                 ld      c,d
  4879.                 call    sub_2F07
  4880.                 ld      a,(4010h)
  4881.                 and     2
  4882.                 call    nz,sub_2F0F
  4883.                 ld      a,c
  4884.                 call    loc_2F50
  4885. loc_2E9C        pop     bc
  4886.                 djnz    loc_2E79
  4887.                 pop     de
  4888.                 pop     hl
  4889.                 ld      sp,hl
  4890.                 ld      a,(4011h)
  4891.                 push    af
  4892.                 ld      c,d
  4893.                 call    sub_2F07
  4894.                 ld      a,(4010h)
  4895.                 and     2
  4896.                 call    nz,sub_2F0F
  4897.                 ld      a,c
  4898.                 call    loc_2F50
  4899.                 ld      hl,4000h
  4900.                 call    sub_2F1B
  4901. loc_2EBC        pop     af
  4902.                 ex      af,af'
  4903.                 pop     af
  4904.                 ld      r,a
  4905.                 pop     af
  4906.                 ld      i,a
  4907.                 di
  4908.                 ld      a,0FFh
  4909.                 jp      po,loc_2ECC
  4910.                 ld      a,0
  4911. loc_2ECC        ld      (KSTATE0),a
  4912.                 pop     af
  4913.                 pop     hl
  4914.                 pop     de
  4915.                 pop     bc
  4916.                 exx
  4917.                 ex      af,af'
  4918.                 pop     iy
  4919.                 pop     ix
  4920.                 pop     hl
  4921.                 pop     de
  4922.                 pop     bc
  4923.                 ld      a,(BORDCR)
  4924.                 and     38h
  4925.                 rrca
  4926.                 rrca
  4927.                 rrca
  4928.                 out     (0FEh),a
  4929.                 ld      a,(SWAP_8)
  4930.                 cp      0EEh
  4931.                 jr      nz,loc_2EF7
  4932.                 push    bc
  4933.                 ld      bc,7FFDh
  4934.                 ld      a,(BANKM)
  4935.                 out     (c),a           ;IO
  4936.                 pop     bc
  4937. loc_2EF7        ld      a,(KSTATE0)
  4938.                 or      a
  4939.                 ld      a,0C9h
  4940.                 ld      (KSTATE0),a
  4941.                 jr      nz,loc_2F03
  4942.                 ei
  4943. loc_2F03        pop     af
  4944.                 jp      KSTATE0
  4945.  
  4946. sub_2F07        ld      a,(4011h)
  4947.                 or      3Ch
  4948. loc_2F0C        OUT (VG_RW_FF),A        ;IO out (0FFh),a
  4949.                 ret
  4950.  
  4951. sub_2F0F        ld      a,c
  4952.                 or      a
  4953.                 rra
  4954.                 ld      c,a
  4955.                 ret     nc
  4956.                 ld      a,(4011h)
  4957.                 and     6Fh
  4958.                 jr      loc_2F0C
  4959.  
  4960. sub_2F1B        ld      a,e
  4961.                 inc     a
  4962.                 OUT (VG_RW_5F),A        ;IO out (5Fh),a
  4963.                 push    hl
  4964.                 ld      d,14h
  4965.                 push    de
  4966. loc_2F23        di
  4967.                 ld      c,7Fh
  4968.                 ld      a,80h
  4969.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  4970.                 call    RD_DATAPORT
  4971.                 pop     de
  4972.                 pop     hl
  4973.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  4974.                 and     7Fh
  4975.                 ret     z
  4976.                 dec     d
  4977.                 push    hl
  4978.                 push    de
  4979.                 jr      nz,loc_2F23
  4980.                 halt
  4981.  
  4982. sub_2F3A        ld      a,3Ch
  4983.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  4984.                 ld      a,(KSTATE0)
  4985.                 and     8
  4986.                 jr      nz,loc_2F4F
  4987.                 ld      a,c
  4988.                 or      a
  4989.                 rra
  4990.                 ld      c,a
  4991.                 jr      nc,loc_2F4F
  4992.                 ld      a,2Ch
  4993.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  4994. loc_2F4F        ld      a,c
  4995. loc_2F50        OUT (VG_RW_7F),A        ;IO out (7Fh),a
  4996.                 call    PAUSE725779T
  4997.                 LD A,0X18
  4998. loc_2F57        OUT (VG_RW_1F),A        ;IO out (1Fh),a
  4999. loc_2F59        IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5000.                 and     80h
  5001.                 jr      z,loc_2F59
  5002.                 push    bc
  5003.                 call    PAUSE725779T
  5004.                 pop     bc
  5005.                 ret
  5006.  
  5007. sub_2F65        LD A,8
  5008.                 jr      loc_2F57
  5009.  
  5010. WORK4ERROR      ld      hl,(TRD_5D1C)   ; СОХРАНЕНИЕ РЕГИСТРА SP
  5011.                 dec     hl
  5012.                 dec     hl
  5013.                 ld      sp,hl
  5014.                 jp      loc_1D2F
  5015.  
  5016. CALL2BASIC      ld      (TRD_5D02),hl
  5017.                 ld      (TRD_5D04),de
  5018.                 pop     hl
  5019.                 ld      e,(hl)
  5020.                 inc     hl
  5021.                 ld      d,(hl)
  5022.                 inc     hl
  5023.                 push    hl
  5024.                 ld      hl,loc_3D2F
  5025.                 push    hl
  5026.                 push    de
  5027.                 ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  5028.                 push    hl
  5029.                 ld      hl,(TRD_5D02)
  5030.                 ld      de,(TRD_5D04)
  5031.                 ret
  5032.  
  5033. SET_VARS        ld      hl,0FFFFh
  5034.                 ld      (TRD_5CFA),hl   ; ВРЕМЯ ПЕРЕМЕЩЕНИЯ ДИСКОВОДА A
  5035.                 ld      (TRD_5CFC),hl   ; ВРЕМЯ ПЕРЕМЕЩЕНИЯ ДИСКОВОДА C
  5036.                 ld      (TRD_5CC8),hl   ; РЕЖИМ РАБОТА ДИСКОВОДА A
  5037.                 ld      (TRD_5CCA),hl   ; РЕЖИМ РАБОТА ДИСКОВОДА C
  5038.                 xor     a
  5039.                 ld      (TRD_5D17),a    ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
  5040.                 ld      (TRD_5D19),a    ; ДИСКОВОД ПО УМОЛЧАНИЮ
  5041.                 ld      (TRD_5D18),a
  5042.                 ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
  5043.                 ld      (TRD_5D1F),a
  5044.                 ld      a,0FFh
  5045.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  5046.                 ld      (ERR_NR),a
  5047.                 ld      (TRD_5D16),a    ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  5048.                 ld      (TRD_5D0C),a
  5049.                 ld      a,0C9h
  5050.                 ld      (TRD_5CC2),a    ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  5051.                 ld      a,0D0h
  5052.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  5053.                 ret
  5054.  
  5055. CP_END_CAT      call    CP_END_BUF      ; ПРОВЕРКА НА КОНЕЦ БУФЕРА
  5056.                 ld      a,(hl)
  5057.                 or      a
  5058.                 jp      z,END_OUT_DIR
  5059.                 cp      1
  5060.                 call    z,ADD_10
  5061.                 ret     nz
  5062.                 jr      CP_END_CAT
  5063.  
  5064. LOAD_SEC2BUF    ld      b,1
  5065.                 ld      hl,TRD_5D25
  5066.                 jp      loc_1E67
  5067.  
  5068. LOAD_END_FILE   push    hl
  5069.                 ld      de,(TRD_5CF4)
  5070.                 call    LOAD_SEC2BUF
  5071.                 ld      a,(TRD_5CDB)
  5072.                 pop     de
  5073.                 or      a
  5074.                 ret     z
  5075.                 ld      c,a
  5076.                 ld      hl,TRD_5D25
  5077.                 ldir                    ; FIX
  5078.                 ret
  5079.  
  5080. ; ТАБЛИЦА БЕЙСИК КОМАНД ДЛЯ TR-DOS
  5081. CODE_BYTE_COM   db 0CFh                 ; CAT
  5082.                 db "*"
  5083.                 db 0D0h                 ; FORMAT
  5084.                 db 0D1h                 ; MOVE
  5085.                 db 0E6h                 ; NEW
  5086.                 db 0D2h                 ; ERASE
  5087.                 db 0EFh                 ; LOAD
  5088.                 db 0F8h                 ; SAVE
  5089.                 db 0FEh                 ; RETURN
  5090.                 db 0BEh                 ; PEEK
  5091.                 db 0F4h                 ; POKE
  5092.                 db 0D5h                 ; MERGE
  5093.                 db 0F7h                 ; RUN
  5094.                 db 0D3h                 ; OPEN
  5095.                 db 0D4h                 ; CLOSE
  5096.                 db 0FFh                 ; COPY
  5097.                 db "4"                  ; 40
  5098.                 db 0ECh                 ; GOTO
  5099.                 db "8"                  ; 80
  5100.                 db 0F0h                 ; LIST
  5101.                 db 0D6h                 ; VERIFY
  5102.  
  5103. ; ТАБЛИЦА АДРЕСОВ ИСПОЛНЕНИЯ КОМАНД
  5104. SPIS_ADR_COM    dw CAT
  5105.                 dw COM_STAR
  5106.                 dw FORMAT
  5107.                 dw MOVE
  5108.                 dw NEW
  5109.                 dw ERASE
  5110.                 dw LOAD
  5111.                 dw SAVE
  5112.                 dw RETURN
  5113.                 dw PEEK
  5114.                 dw POKE
  5115.                 dw MERGE
  5116.                 dw RUN
  5117.                 dw OPEN
  5118.                 dw CLOSE
  5119.                 dw COPY
  5120.                 dw COM_40
  5121.                 dw GOTO
  5122.                 dw COM_80
  5123.                 dw LIST
  5124.                 dw VERIFY
  5125.  
  5126. SAE2E_LINE      ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  5127.                 ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  5128.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5129.                 ld      a,0FFh
  5130.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  5131.                 ld      hl,TRD_5CDB
  5132.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  5133.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  5134.                 jr      loc_3057
  5135.  
  5136. SAE2_HL_        ld      (TRD_5D11),hl   ; АДРЕС СТРОКИ КОМАНДЫ TR_DOS
  5137.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5138.                 call    CP_ADR_STR
  5139.                 ret     nz
  5140.                 inc     hl
  5141.                 inc     hl
  5142.                 ld      (TRD_5CD7),hl   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  5143.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  5144. loc_3057        CALL CMP_SPECSYM        ;CALL FIND_KEYWORD
  5145.                 jr      nz,loc_3087
  5146.                 ex      de,hl
  5147.                 inc     de
  5148.                 ld      b,0
  5149.                 ld      hl,BYTES_COM    ; SAVE
  5150.                 add     hl,bc
  5151.                 ld      a,(hl)
  5152.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5153.                 ld      (hl),a
  5154.                 inc     hl
  5155.                 ex      de,hl
  5156.                 rst     20h
  5157.                 dw 19DDh
  5158.                 push    bc
  5159.                 CALL FOR_LOC_306F
  5160.                 pop     bc
  5161.                 ld      a,(TRD_5CD6)    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  5162.                 or      a
  5163.                 jr      nz,loc_3087
  5164.                 ld      hl,(TRD_5CD7)   ; ПРОМЕЖУТОЧНЫЙ СТАРТ ФАЙЛА ИЛИ КОЛ-ВО ТРЕКОВ
  5165.                                         ; ПОСЛЕ ПРОВЕРКИ ТИПА ДИСКОВОДА
  5166.                 ld      e,(hl)
  5167.                 inc     hl
  5168.                 ld      d,(hl)
  5169.                 ex      de,hl
  5170.                 or      a
  5171.                 sbc     hl,bc
  5172.                 ex      de,hl
  5173.                 ld      (hl),d
  5174.                 dec     hl
  5175.                 ld      (hl),e
  5176. loc_3087        ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5177.                 ld      a,(hl)
  5178.                 cp      0Dh
  5179.                 ret     z
  5180.                 inc     hl
  5181.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5182.                 ld      a,(hl)
  5183.                 cp      0Dh
  5184.                 ret     z
  5185.                 cp      22h
  5186.                 jr      nz,loc_3057
  5187. loc_309A        inc     hl
  5188.                 ld      a,(hl)
  5189.                 cp      0Dh
  5190.                 ret     z
  5191.                 cp      22h
  5192.                 jr      nz,loc_309A
  5193.                 inc     hl
  5194.                 ld      (TRD_5CD9),hl   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5195.                 jr      loc_3057
  5196.  
  5197. FIND_KEYWORD    ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5198.                 ld      de,TBL_KEYWORD  ; "SAVE"
  5199.                 ld      c,0
  5200. loc_30B1        ld      a,(hl)
  5201.                 and     0DFh
  5202.                 ld      b,a
  5203.                 or      a
  5204.                 jr      nz,loc_30BB
  5205.                 inc     hl
  5206.                 jr      loc_30B1
  5207.  
  5208. loc_30BB        ld      a,(de)
  5209.                 and     80h
  5210.                 jr      nz,loc_30C8
  5211.                 ld      a,(de)
  5212.                 cp      b
  5213.                 jr      nz,loc_30D9
  5214.                 inc     hl
  5215.                 inc     de
  5216.                 jr      loc_30B1
  5217.  
  5218. loc_30C8        ld      a,(de)
  5219.                 and     7Fh
  5220.                 cp      b
  5221.                 ret     z
  5222. loc_30CD        inc     c
  5223.                 ld      hl,(TRD_5CD9)   ; ПРОМЕЖУТОЧНАЯ ДЛИНА ДЛЯ <B> И <C>
  5224.                 inc     de
  5225.                 ld      a,(de)
  5226.                 cp      0FFh
  5227.                 jr      nz,loc_30B1
  5228.                 or      a
  5229.                 ret
  5230.  
  5231. loc_30D9        inc     de
  5232.                 ld      a,(de)
  5233.                 and     80h
  5234.                 jr      z,loc_30D9
  5235.                 jr      loc_30CD
  5236.  
  5237. CP_ADR_STR      ld      hl,(PPC)
  5238.                 inc     hl
  5239.                 inc     hl
  5240.                 ld      a,h
  5241.                 or      l
  5242.                 jr      z,loc_30F4
  5243.                 xor     a
  5244.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  5245.                 dec     hl
  5246.                 dec     hl
  5247.                 rst     20h
  5248.                 dw 196Eh
  5249.                 ret
  5250.  
  5251. loc_30F4        ld      a,0FFh
  5252.                 ld      (TRD_5CD6),a    ; #FF-КОМАНДА ПРИНЯТА СИНТАКСИЧЕСКИМ АНАЛИЗАТОРОМ
  5253.                 ld      hl,(E_LINE)     ; АДРЕС НАЧАЛА РЕДАКТИРУЕМОЙ СТРОКИ
  5254.                 ret
  5255.  
  5256. TBL_KEYWORD     db "SAVE",80h
  5257.                 db "SAV",0C5h
  5258.                 db "LOAD",80h
  5259.                 db "LOA",0C4h
  5260.                 db "RUN",80h
  5261.                 db "RU",0CEh
  5262.                 db "CAT",80h
  5263.                 db "CA",0D4h
  5264.                 db "ERASE",80h
  5265.                 db "ERAS",0C5h
  5266.                 db "NEW",80h
  5267.                 db "NE",0D7h
  5268.                 db "MOVE",80h
  5269.                 db "MOV",0C5h
  5270.                 db "MERGE",80h
  5271.                 db "MERG",0C5h
  5272.                 db "PEEK",80h
  5273.                 db "PEE",0CBh
  5274.                 db "POKE",80h
  5275.                 db "POK",0C5h
  5276.                 db "OPEN",83h
  5277.                 db "CLOSE",83h
  5278.                 db "CODE",80h
  5279.                 db "COD",0C5h
  5280.                 db "RND",80h
  5281.                 db "RN",0C4h
  5282.                 db "DATA",80h
  5283.                 db "DAT",0C1h
  5284.                 db "SCREEN",4,84h
  5285.                 db "SCREEN",84h
  5286.                 db "COPY",80h
  5287.                 db "COP",0D9h
  5288.                 db "FORMAT",80h
  5289.                 db "FORMA",0D4h
  5290.                 db "GOTO",80h
  5291.                 db "GOT",0CFh
  5292.                 db "LIST",80h
  5293.                 db "LIS",0D4h
  5294.                 db "LINE",80h
  5295.                 db "LIN",0C5h
  5296.                 db "VERIFY",80h
  5297.                 db "VERIF",0D9h
  5298.                 db 0FFh,0FFh
  5299.  
  5300. BYTES_COM       dw 0F8F8h               ; SAVE
  5301.                 dw 0EFEFh               ; LOAD
  5302.                 dw 0F7F7h               ; RUN
  5303.                 dw 0CFCFh               ; CAT
  5304.                 dw 0D2D2h               ; ERASE
  5305.                 dw 0E6E6h               ; NEW
  5306.                 dw 0D1D1h               ; MOVE
  5307.                 dw 0D5D5h               ; MERGE
  5308.                 dw 0BEBEh               ; PEEK
  5309.                 dw 0F4F4h               ; POKE
  5310.                 dw 0D4D3h               ; OPEN CLOSE
  5311.                 dw 0AFAFh               ; CODE
  5312.                 dw 0A5A5h               ; RND
  5313.                 dw 0E4E4h               ; DATA
  5314.                 dw 0AAAAh               ; SCREEN
  5315.                 dw 0FFFFh               ; COPY
  5316.                 dw 0D0D0h               ; FORMAT
  5317.                 dw 0ECECh               ; GOTO
  5318.                 dw 0F0F0h               ; LIST
  5319.                 dw 0CACAh               ; LINE
  5320.                 dw 0D6D6h               ; VERIFY
  5321.                 db 0
  5322.  
  5323. ; ПРОВЕРКА НАЛИЧИЯ TR-DOS ПЕРЕМЕННЫХ
  5324. CP_VARSTRDOS    ld      hl,(CHANS)
  5325.                 or      a
  5326.                 ld      bc,TRD_5D25
  5327.                 sbc     hl,bc
  5328.                 ret
  5329.  
  5330.                 include patch.a80
  5331.  
  5332.                 DUPL 0X3C01-$,0FFh
  5333.                 jr      loc_3C06
  5334.  
  5335.                 db 0FFh
  5336.                 jr      loc_3C09
  5337.  
  5338. loc_3C06        jp      loc_3D00
  5339.  
  5340. loc_3C09        jp      loc_3D03
  5341.  
  5342.                 DUPL 0X3C30-$,0XFF
  5343.                 IN A,(VG_RW_1F)
  5344.                 RET
  5345.  
  5346.                 DUPL 0X3CFA-$,0FFh
  5347. FOR_INTERFACE1  NOP
  5348.                 JR loc_3D2F
  5349.  
  5350. loc_3CFD        jp      CALL_3D13
  5351.  
  5352. loc_3D00        nop
  5353.                 jr      IN_DOS_15616
  5354.  
  5355. loc_3D03        nop
  5356.                 jr      IN_DOS_15619
  5357.  
  5358. loc_3D06        nop
  5359.                 jp      INPUTDATAFILE
  5360.  
  5361. loc_3D0A        jp      OUT_SYM2FILE
  5362.  
  5363.                 nop
  5364. loc_3D0E        jr      loc_3D0A
  5365.  
  5366.                 nop
  5367.                 jr      FOR_INTERFACE1
  5368.  
  5369.                 nop
  5370.                 jr      loc_3CFD
  5371.  
  5372. loc_3D16        nop
  5373.                 jp      WORK4ERROR
  5374.  
  5375. IN_DOS_15619    call    CREATE_VARS_TRD
  5376.                 push    hl
  5377.                 jp      loc_16C
  5378.  
  5379. CREATE_VARS_TRD call    CP_VARSTRDOS    ; ПРОВЕРКА НАЛИЧИЯ TR-DOS ПЕРЕМЕННЫХ
  5380.                 nop
  5381.                 nop
  5382.                 call    c,CREATE_VARS
  5383.                 ld      hl,TRD_5CC2     ; СОДЕРЖИТ #C9.ДЛЯ ПЕРЕХОДА ИЗ TR-DOS В BASIC
  5384.                 ret
  5385.  
  5386.                 nop
  5387.                 nop
  5388. loc_3D2F        nop
  5389.                 ret
  5390.  
  5391. IN_DOS_15616    call    CREATE_VARS_TRD
  5392.                 push    hl
  5393.                 jp      IN_COMMAND_CPU  ; ВХОЖДЕНИЕ В КОМАНДНЫЙ ПРОЦЕССОР ДОСА
  5394.  
  5395. INI_INTERFACE1  DUPL 3,0                ;xor    a
  5396.                                         ;IO out (0F7h),a
  5397.                 in      a,(0F7h)
  5398.                 cp      1Eh
  5399.                 jr      z,loc_3D44
  5400.                 cp      1Fh
  5401.                 ret     nz
  5402. loc_3D44        rst     8
  5403.                 db 31h
  5404.                 ld      a,1
  5405.                 ld      (TRD_5CEF),a    ; СОДЕРЖИТ 1 ЕСЛИ ЕСТЬ INTERFACE1
  5406.                 ret
  5407.  
  5408. LOC_3D38        xor     a
  5409.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  5410.                 in      a,(0F6h)
  5411.                 ld      hl,INI_INTERFACE1
  5412.                 ld      de,MEMBOT
  5413.                 ld      bc,14h
  5414.                 ldir
  5415.                 LD HL,CREATE_VARS
  5416.                 push    hl
  5417.                 ld      hl,loc_3D2F
  5418.                 push    hl
  5419.                 jp      MEMBOT
  5420.  
  5421. CREATE_VARS     ld      hl,SET_VARS
  5422.                 push    hl
  5423.                 ld      hl,loc_3D2F
  5424.                 push    hl
  5425.                 ld      hl,1655h
  5426.                 push    hl
  5427.                 LD HL,TRD_5CC2
  5428.                 push    hl
  5429.                 ld      (hl),0C9h
  5430.                 ld      hl, P_RAMT+1
  5431.                 ld      bc,70h
  5432.                 ret
  5433.  
  5434. PRINT_0D        ld      a,0Dh
  5435. PRINT_A_        push    hl
  5436.                 push    bc
  5437.                 push    de
  5438.                 push    af
  5439.                 DUPL 3,0
  5440.                 pop     af
  5441.                 call    PRINT_SYM
  5442.                 DUPL 3,0
  5443.                 pop     de
  5444.                 pop     bc
  5445.                 pop     hl
  5446.                 ret
  5447.  
  5448. PRINT_SYM       rst     20h
  5449.                 dw 10h
  5450.                 ret
  5451.  
  5452. ; ВОССТАНОВЛЕНИЕ ВГ93
  5453. COM_00          LD A,8
  5454. COM2VG_WAIT     OUT (VG_RW_1F),A        ;IO out (1Fh),a
  5455. COM2VGWAIT1     push    hl
  5456.                 rst     20h
  5457.                 dw 1F54h                ; ПРОВЕРКА BREAK
  5458.                 jr      c,COM2VGWAIT2
  5459.                 rst     20h
  5460.                 dw 1B7Bh                ; ВЫВОД СООБЩЕНИЯ ОБ ОШИБКЕ,ЕСЛИ НАЖАТ  BREAK
  5461. COM2VGWAIT2     pop     hl
  5462.                 IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5463.                 and     80h
  5464.                 jr      z,COM2VGWAIT1
  5465.                 ret
  5466.  
  5467. ; ПРОВЕРКА НАЛИЧИЯ ДИСКА
  5468. CP_PRESENT_DISK LD A,8
  5469.                 call    COM2VG_WAIT
  5470.                 ld      de,0
  5471.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  5472.                 and     2
  5473.                 ld      b,a
  5474. CPPRESENTDSK1   IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  5475.                 and     2
  5476.                 cp      b
  5477.                 ret     nz
  5478.                 inc     de
  5479.                 ld      a,e
  5480.                 or      d
  5481.                 jr      nz,CPPRESENTDSK1
  5482.                 jp      DISK_NOT_FOUND
  5483.  
  5484. ; ВЫБОР ДИСКОВОДА ПО УМОЛЧАНИЮ
  5485. ACTIV_DEF_DISK  ld      a,(TRD_5D19)    ; ДИСКОВОД ПО УМОЛЧАНИЮ
  5486. COM_01          ld      (TRD_5CF6),a    ; НАСТРОЙКА НА ДИСКОВОД
  5487.                 ld      hl,TRD_5D16     ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  5488.                 ld      c,a
  5489.                 ld      a,3Ch
  5490.                 or      c
  5491.                 OUT (VG_RW_FF),A        ;IO out (0FFh),a
  5492.                 ld      (hl),a
  5493.                 call    GET_TIME_HEAD   ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  5494.                 and     80h
  5495.                 jr      z,loc_3DFA
  5496.                 call    CP_PRESENT_DISK ; ПРОВЕРКА НАЛИЧИЯ ДИСКА
  5497.                 call    CP_TIME_GOHEAD  ; ОПРЕДЕЛЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  5498.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  5499.                 cp      0FFh
  5500.                 jr      nz,loc_3DFA
  5501.                 push    hl
  5502.                 call    CP_DSK_TRACK
  5503.                 pop     hl
  5504.                 cp      80              ; ПРОВЕРКА НА 80 ДОРОЖЕК
  5505.                 ld      a,0
  5506.                 jr      nz,loc_3DF9
  5507.                 ld      a,80h
  5508. loc_3DF9        ld      (hl),a
  5509. loc_3DFA        call    WR_NUM_TRACK
  5510. PAUSE725779T    ld      a,50h
  5511. PAUSE_C_A       ld      c,0FFh
  5512. loc_3E01        dec     c
  5513.                 jr      nz,loc_3E01
  5514.                 dec     a
  5515.                 jr      nz,PAUSE_C_A
  5516.                 ret
  5517.  
  5518. ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  5519. GET_TIME_HEAD   ld      de,TRD_5CFA     ; ВРЕМЯ ПЕРЕМЕЩЕНИЯ ДИСКОВОДА A
  5520. loc_3E0B        ld      hl,(TRD_5CF6)   ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  5521.                 add     hl,de
  5522.                 ld      a,(hl)
  5523.                 ret
  5524.  
  5525. ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  5526. GET_TYPE_DISK   ld      de,TRD_5CC8     ; РЕЖИМ РАБОТА ДИСКОВОДА A
  5527.                 jr      loc_3E0B
  5528.  
  5529. ; ОПРЕДЕЛЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  5530. CP_TIME_GOHEAD  call    GET_TIME_HEAD   ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  5531.                 ld      b,8
  5532.                 ld      c,4
  5533. loc_3E1D        ld      (hl),b
  5534.                 ld      a,0Bh
  5535.                 call    COM2VG_WAIT
  5536.                 ld      a,20h
  5537.                 ld      b,0Bh
  5538.                 call    HEAD_POSITION
  5539.                 ld      b,(hl)
  5540.                 ld      a,1
  5541.                 call    HEAD_POSITION
  5542.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  5543.                 and     4
  5544.                 jr      nz,loc_3E3F
  5545.                 xor     a
  5546.                 call    HEAD_POSITION
  5547.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  5548.                 and     4
  5549.                 ret     nz
  5550. loc_3E3F        inc     b
  5551.                 dec     c
  5552.                 ret     z
  5553.                 jr      loc_3E1D
  5554.  
  5555. HEAD_POSITION   OUT (VG_RW_7F),A        ;IO out (7Fh),a
  5556.                 ld      a,b
  5557.                 or      18h
  5558.                 jp      COM2VG_WAIT
  5559.  
  5560. POSITIONIREN    OUT (VG_RW_7F),A        ;IO out (7Fh),a
  5561.                 push    bc
  5562.                 ld      b,a
  5563.                 IN A,(VG_RW_3F)         ;IO in a,(3Fh)
  5564.                 cp      b
  5565.                 pop     bc
  5566.                 push    af
  5567.                 ld      a,b
  5568.                 or      18h
  5569.                 call    COM2VG_WAIT
  5570.                 pop     af
  5571.                 ret     z
  5572.                 push    bc
  5573.                 call    PAUSE725779T
  5574.                 pop     bc
  5575.                 ret
  5576.  
  5577. ; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
  5578. COM_02          ld      c,a
  5579.                 call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
  5580.                 call    GET_TYPE_DISK   ; ПОЛУЧЕНИЕ КОДА РЕЖИМА РАБОТЫ ДИСКОВОДА
  5581.                 and     2
  5582.                 call    nz,SET_SIDE_DISK
  5583.                 push    bc
  5584.                 bit     7,(hl)
  5585.                 jr      z,loc_3E83
  5586.                 bit     0,(hl)
  5587.                 jr      nz,loc_3E83
  5588.                 IN A,(VG_RW_3F)         ;IO in a,(3Fh)
  5589.                 cp      c
  5590.                 jr      z,loc_3E82
  5591.                 rlca
  5592.                 OUT (VG_RW_3F),A        ;IO out (3Fh),a
  5593.                 ld      a,c
  5594.                 rlca
  5595. loc_3E82        ld      c,a
  5596. loc_3E83        call    GET_TIME_HEAD   ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  5597.                 ld      b,a
  5598.                 IN A,(VG_RW_3F)         ;IO in a,(3Fh)
  5599.                 cp      c
  5600.                 push    bc
  5601.                 call    nz,PAUSE725779T
  5602.                 pop     bc
  5603.                 ld      a,c
  5604.                 call    POSITIONIREN
  5605.                 pop     bc
  5606.                 ld      a,c
  5607.                 OUT (VG_RW_3F),A        ;IO out (3Fh),a
  5608.                 ld      a,(TRD_5CCD)    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
  5609.                 or      a
  5610.                 ret     z
  5611.                 xor     a
  5612.                 ld      (TRD_5CCD),a    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
  5613. PAUSE_3_C_A     ld      b,3
  5614. loc_3EA2        ld      a,0FFh
  5615.                 call    PAUSE_C_A
  5616.                 djnz    loc_3EA2
  5617.                 ret
  5618.  
  5619. SET_SIDE_DISK   ld      a,c
  5620.                 or      a
  5621.                 rra
  5622.                 ld      c,a
  5623.                 ret     nc
  5624.                 jp      COM_17          ; УСТАНОВКА 1 СТОРОНЫ ДИСКА
  5625.  
  5626. GET_NUM_TRACK   call    COM_16          ; УСТАНОВКА 0 СТОРОНЫ ДИСКА
  5627. loc_3EB5        IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  5628.                 and     80h
  5629.                 ld      (TRD_5CCD),a    ; #80-ГОТОВНОСТЬ ДИСКОВОДА
  5630.                 IN A,(VG_RW_3F)         ;IO in a,(3Fh)
  5631.                 ld      h,a
  5632.                 CALL BUGFIX_3EBF
  5633.                 ld      c,7Fh
  5634.                 ld      d,1
  5635.                 di
  5636.                 ld      a,0C0h
  5637.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  5638.                 push    bc
  5639.                 ld      b,3
  5640. loc_3ECE        IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5641.                 and     0C0h
  5642.                 jr      nz,loc_3EF2
  5643.                 inc     de
  5644.                 ld      a,e
  5645.                 or      d
  5646.                 jr      nz,loc_3ECE
  5647.                 djnz    loc_3ECE
  5648.                 pop     bc
  5649.                 ei
  5650.                 ld      a,0D0h
  5651.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  5652.                 LD A,(TRD_5D17)
  5653.                 cp      0FFh
  5654.                 ret     z
  5655. DISK_NOT_FOUND  call    SET_TAPELDERR
  5656.                 ld      a,0FFh
  5657.                 ld      (TRD_5D17),a    ; РИСОВАНИЕ ЗАСТАВКИ,ЕСЛИ #AA
  5658.                 jp      loc_271B
  5659.  
  5660. loc_3EF2        pop     bc
  5661.                 in      h,(c)
  5662. loc_3EF5        IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5663.                 and     0C0h
  5664.                 jr      z,loc_3EF5
  5665.                 ei
  5666.                 ret     m
  5667.                 di
  5668.                 IN A,(VG_RW_7F)         ;IO in a,(7Fh)
  5669.                 jr      loc_3EF5
  5670.  
  5671. ; УСТАНОВКА НОМЕРА СЕКТОРА
  5672. COM_03          ld      (TRD_5CFF),a
  5673.                 ret
  5674.  
  5675. ; УСТАНОВКА АДРЕСА БУФЕРА
  5676. COM_04          ld      (TRD_5D00),hl
  5677.                 ret
  5678.  
  5679. SAVE_SECTOR     ld      a,0A0h
  5680.                 jr      loc_3F10
  5681.  
  5682. LOAD_SECTOR     ld      a,80h
  5683. loc_3F10        ld      (TRD_5CFE),a
  5684. RD_OR_WR_SEC    ld      d,0Ah
  5685. loc_3F15        push    de
  5686.                 di
  5687.                 ld      a,(TRD_5CFF)
  5688.                 inc     a
  5689.                 OUT (VG_RW_5F),A        ;IO out (5Fh),a
  5690.                 ld      hl,(TRD_5D00)
  5691.                 ld      c,7Fh
  5692.                 ld      a,(TRD_5CFE)
  5693.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  5694.                 cp      0A0h
  5695.                 push    af
  5696.                 call    z,WRITE_SEC     ; ОЖИДАНИЕ ГОТОВНОСТИ И ЗАПИСЬ СЕКТОРА
  5697.                 pop     af
  5698.                 call    nz,READ_SEC
  5699.                 pop     de
  5700.                 ei
  5701.                 IN A,(VG_RW_1F)         ;IO in a,(1Fh)
  5702.                 ld      b,a
  5703.                 and     7Fh
  5704.                 ret     z
  5705. loc_3F39        ld      hl,READ_ONLY    ; Read Only
  5706.                 and     40h
  5707.                 jr      nz,loc_3F4B
  5708.                 ld      a,b
  5709.                 and     4
  5710.                 jr      z,loc_3FA0
  5711.                 dec     d
  5712.                 jr      nz,loc_3F15
  5713. loc_3F48        ld      hl,TXT_DISCERROR_
  5714. loc_3F4B        ld      a,0D0h
  5715.                 OUT (VG_RW_1F),A        ;IO out (1Fh),a
  5716.                 ld      a,b
  5717.                 and     1
  5718.                 jp      nz,DISK_NOT_FOUND
  5719.                 IN A,(VG_RW_3F)         ;IO in a,(3Fh)
  5720.                 or      a
  5721.                 jr      nz,loc_3F5F
  5722.                 IN A,(VG_RW_5F)         ;IO in a,(5Fh)
  5723.                 cp      0Ah
  5724.                 ret     z
  5725. loc_3F5F        push    hl
  5726.                 call    CLEAR_SCREEN    ; ОЧИСТКА ОСНОВНОГО ЭКРАНА
  5727.                 pop     hl
  5728.                 rst     18h
  5729.                 ld      hl,TXT_TRK_
  5730.                 rst     18h
  5731.                 IN A,(VG_RW_3F)         ;IO in a,(3Fh)
  5732.                 call    PRINT_CHISLO_A_
  5733.                 ld      hl,TXT_SEC_     ; " sec"
  5734.                 rst     18h
  5735.                 IN A,(VG_RW_5F)         ;IO in a,(5Fh)
  5736.                 call    PRINT_CHISLO_A_
  5737.                 ld      hl,TXT_RIA_
  5738.                 rst     18h
  5739. loc_3F7B        call    GET_KEYS        ; ОЖИДАНИЕ НАЖАТИЯ КЛАВИШИ
  5740.                 cp      "I"             ; Ignore-RET в адрес #1E8E
  5741.                 ret     z
  5742.                 cp      "R"             ; Retry
  5743.                 jr      z,PRESSED_RETRY
  5744.                 cp      "A"             ; Abort
  5745.                 jr      nz,loc_3F7B
  5746.                 call    SET_TAPELDERR   ; Press Abort
  5747.                 ld      a,7
  5748.                 ld      (TRD_5D0F),a    ; НОМЕР ОШИБКИ TR-DOS
  5749.                 jp      END_COMAND
  5750.  
  5751. PRESSED_RETRY   ld      a,(TRD_5CF5)
  5752.                 call    COM_02          ; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
  5753.                 call    PAUSE_3_C_A
  5754.                 jp      RD_OR_WR_SEC
  5755.  
  5756. loc_3FA0        dec     d
  5757.                 jp      z,loc_3F48
  5758.                 push    de
  5759.                 call    GET_TIME_HEAD   ; ПОЛУЧЕНИЕ ВРЕМЕНИ ПЕРЕМЕЩЕНИЯ ГОЛОВКИ
  5760.                 and     2
  5761.                 jr      nz,loc_3FAD
  5762.                 inc     (hl)
  5763. loc_3FAD        call    COM_00          ; ВОССТАНОВЛЕНИЕ ВГ93
  5764.                 ld      a,(TRD_5CF5)
  5765.                 call    COM_02          ; УСТАНОВКА ГОЛОВКИ НА ДОРОЖКУ
  5766.                 pop     de
  5767.                 jp      loc_3F15
  5768.  
  5769. ; ОЖИДАНИЕ ГОТОВНОСТИ И ЗАПИСЬ СЕКТОРА
  5770. WRITE_SEC       ld      b,4
  5771. WAIT4WRITE      IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5772.                 and     0C0h
  5773.                 jr      nz,WR_DATAPORT1
  5774.                 inc     de
  5775.                 ld      a,e
  5776.                 or      d
  5777.                 jr      nz,WAIT4WRITE
  5778.                 djnz    WAIT4WRITE
  5779.                 ret
  5780.  
  5781. WR_DATAPORT     IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5782.                 and     0C0h
  5783.                 jr      z,WR_DATAPORT
  5784.                 ret     m
  5785. WR_DATAPORT1    outi                    ;IO
  5786.                 jr      WR_DATAPORT
  5787.  
  5788. READ_SEC        ld      b,4
  5789. WAIT4READ       IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5790.                 and     0C0h
  5791.                 jr      nz,RD_DATAPORT1
  5792.                 inc     de
  5793.                 ld      a,e
  5794.                 or      d
  5795.                 jr      nz,WAIT4READ
  5796.                 djnz    WAIT4READ
  5797.                 ret
  5798.  
  5799. RD_DATAPORT     IN A,(VG_RW_FF)         ;IO in a,(0FFh)
  5800.                 and     0C0h
  5801.                 jr      z,RD_DATAPORT
  5802.                 ret     m
  5803. RD_DATAPORT1    ini
  5804.                 jr      RD_DATAPORT
  5805.  
  5806.                 OUT (C),A
  5807.                 RET
  5808.  
  5809.                 IN A,(C)
  5810.                 RET
  5811.  
  5812.                 DUPL 0X4000-$,0FFh
  5813.