Subversion Repositories pentevo

Rev

Rev 1026 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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