Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

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