Subversion Repositories pentevo

Rev

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

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