Subversion Repositories pentevo

Rev

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

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