Subversion Repositories pentevo

Rev

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

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