Subversion Repositories pentevo

Rev

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

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