Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 17.11.2014 savelij
  3.  
  4. ;32 БАЙТА ОПИСАТЕЛЬ ПРИМОНТИРОВАННОГО ФАЙЛА
  5. ;00...  | ОПИСАТЕЛЬ
  6. ;...1F  | ПРИМОНТИРОВАННОГО ФАЙЛА
  7. ;+20    1 ФЛАГОВЫЙ
  8. ;        7-
  9. ;        6-
  10. ;        5-
  11. ;        4-
  12. ;        3-
  13. ;        2-
  14. ;        1-
  15. ;        0-
  16. ;+21    1 ТИП ОБРАЗА ПО РАСШИРЕНИЮ
  17. ;+22    1 ШАГ КЛАСТЕРОВ
  18. ;+23    1 ТИП РАЗДЕЛА
  19. ;+24    1 НОМЕР ВЫБРАННОГО РАЗДЕЛА
  20. ;+25    2 АДРЕС ВЫЗЫВАЕМОГО ДРАЙВЕРА ДЛЯ РАБОТЫ С ПРИМОНТИРОВАННЫМ ОБРАЗОМ
  21. ;+27    2 АДРЕС ВЫЗЫВАЕМОГО ДРАЙВЕРА ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  22. ;+28    1 НОМЕР МОНТИРУЕМОГО ДИСКОВОДА
  23.  
  24. MOUNTER         CALL P5_READ_BYTE
  25.                 LD A,(NEXTBYTERST8)
  26.                 ADD A,A
  27.                 LD E,A
  28.                 LD D,0
  29.                 LD HL,TAB_MOUNTER
  30.                 ADD HL,DE
  31.                 LD A,(HL)
  32.                 INC HL
  33.                 LD H,(HL)
  34.                 LD L,A
  35.                 JP (HL)
  36.                
  37. TAB_MOUNTER     DW OPEN_MOUNT                   ;00 МОНТИРОВАНИЕ ОБРАЗА
  38.                 DW RDWR_MOUNT                   ;01 ЧТЕНИЕ/ЗАПИСЬ ПРИМОНТИРОВАННЫХ ОБРАЗОВ
  39.                 DW FIND_MOUNTED                 ;02 ПОИСК МОНТИРУЕМЫХ ОБРАЗОВ ПРОПИСАННЫХ В IMAGE.FNT
  40.                 DW GET_MOUNTED                  ;03 ПОЛУЧЕНИЕ БУФЕРА ОПИСАТЕЛЕЙ ПРИМОНТИРОВАННЫХ ОБРАЗОВ
  41.                 DW CLOSEMOUNT                   ;04 ДЕМОНТИРОВАНИЕ ОБРАЗА
  42.                 DW LOADIMAGE                    ;05 ЗАГРУЗКА ОБРАЗА В РАМДИСК
  43.                 DW STOR_NAMELOAD                ;06 СОХРАНЕНИЕ ОПИСАТЕЛЯ ФАЙЛА ЗАГРУЖЕННОГО В РАМДИСК
  44.                 DW REST_NAMELOAD                ;07 ПОЛУЧЕНИЕ ОПИСАТЕЛЯ ФАЙЛА ЗАГРУЖЕННОГО В РАМДИСК
  45.                 DW CMP_DRIVE                    ;08 ПРОВЕРКА ПРИМОНТИРОВАННОГО ОБРАЗА НА УКАЗАННОЙ БУКВЕ
  46.  
  47. ;ЗАГРУЗКА ОБРАЗА В РАМДИСК
  48. LOADIMAGE       LD IYL,INTERNAL
  49.                 CALL OPEN_FILE
  50.                 PUSH HL
  51.                 LD DE,SUPPORT_EXT
  52.                 CALL CP_EXT
  53.                 LD (EXT_TYPE),A
  54.                 LD HL,FILE_SRC
  55.                 LD DE,NAME_RAMDISK
  56.                 LD BC,0X20
  57.                 LDIR
  58.                 POP HL
  59.                 CP _TAP
  60.                 JR Z,LOAD_TAPE
  61.                 CP _FDI
  62.                 JP Z,LOAD_FDI
  63.                 CP _SCL
  64.                 JP Z,LOAD_SCL
  65.                 LD A,PAGE_DATARAMD
  66. ILD_IMG1        PUSH AF
  67.                 LD BC,WIN_P5
  68.                 OUT (C),A
  69.                 LD A,0X20
  70.                 LD HL,CPU5
  71.                 CALL READ_FILE
  72.                 JR C,ILD_IMG2
  73.                 POP AF
  74.                 INC A
  75.                 JR ILD_IMG1
  76.  
  77. LOAD_TAPE       LD A,PAGE4TAP
  78.                 JR ILD_IMG1
  79.  
  80. ILD_IMG2        POP AF
  81.                 EVOPORT WIN_P5,PAGE_DATARAMD    ;НУЖНА СТРАНИЦА ОТКУДА НАЧИНАЕТСЯ ЗАГРУЖЕННЫЙ ОБРАЗ
  82. ILD_IMG3        LD HL,(CPU5+0X8E1)              ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК СЕКТОР
  83.                 LD A,L
  84.                 LD L,H
  85.                 LD H,0
  86.                 ADD HL,HL
  87.                 ADD HL,HL
  88.                 ADD HL,HL
  89.                 ADD HL,HL
  90.                 OR L
  91.                 LD L,A                          ;КОЛИЧЕСТВО ЗАНЯТЫХ СЕКТОРОВ С ДИРЕКТОРИЕЙ
  92.                 LD DE,(CPU5+0X8E5)              ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  93.                 ADD HL,DE
  94.                 ADD HL,HL
  95.                 ADD HL,HL
  96.                 ADD HL,HL
  97.                 ADD HL,HL                       ;H=КОЛИЧЕСТВО ДОРОЖЕК
  98.                 LD A,H
  99.                 CP 0XA0
  100.                 JR NC,ELT3
  101. ELT4            LD A,0XA0
  102. ELT3            EX AF,AF'
  103.                 EVOPORT WIN_P5,PAGE_RAMDISK     ;НУЖНА СТРАНИЦА НАЧАЛА РАМДИСКА, ГДЕ БУДЕТ ТАБЛИЦА ОПИСАТЕЛЕЙ
  104.                 LD HL,CPU5
  105.                 PUSH HL
  106.                 LD DE,CPU5+1
  107.                 LD BC,0X3FFF
  108.                 LD (HL),L
  109.                 LDIR                            ;ОЧИСТИЛИ СТРАНИЦУ
  110.                 POP DE                          ;АДРЕС НАЧАЛА
  111.                 LD HL,0                         ;СМЕЩЕНИЕ В БЛОКАХ И СТРАНИЦАХ
  112.                 EX AF,AF'
  113. ELT2            EX AF,AF'
  114.                 LD BC,0X1000                    ;СЧЕТЧИК НОМЕРОВ СЕКТОРОВ И ИХ НОМЕРА
  115.                 LD A,L
  116.                 RRCA
  117.                 RRCA
  118.                 LD (DE),A                       ;СМЕЩЕНИЕ В БЛОКАХ ДОРОЖКИ В СТРАНИЦЕ
  119.                 INC D
  120.                 LD A,H
  121.                 LD (DE),A                       ;СМЕЩЕНИЕ В СТРАНИЦАХ ДО ДОРОЖКИ
  122.                 INC D
  123. ELT1            INC C
  124.                 LD A,C
  125.                 LD (DE),A                       ;НОМЕР СЕКТОРА
  126.                 INC D
  127.                 LD A,2
  128.                 LD (DE),A                       ;РАЗМЕР СЕКТОРА
  129.                 INC D
  130.                 DJNZ ELT1                       ;ВНОСИМ В ТАБЛИЦУ ВСЕ НОМЕРА СЕКТОРОВ С РАЗМЕРАМИ
  131.                 LD D,HIGH (CPU5)                ;ВЕРНУЛИ УКАЗАТЕЛЬ В НАЧАЛО
  132.                 INC E                           ;ДЛЯ СЛЕДУЮЩЕЙ ДОРОЖКИ
  133.                 LD BC,0X40
  134.                 ADD HL,BC                       ;ПЕРЕХОД К СЛЕДУЮЩЕЙ ДОРОЖКЕ
  135.                 EX AF,AF'
  136.                 DEC A
  137.                 JR NZ,ELT2                      ;ПОВТОРЯЕМ ДЛЯ ВСЕХ ДОРОЖЕК
  138. ;ОБЩИЙ ВЫХОД ИЗ ЗАГРУЗКИ С ВОЗВРАТОМ СТАНДАРТНОЙ СТРАНИЦЫ В ОКНЕ ПРОЕЦИРОВАНИЯ 1
  139. ELOAD_IMAGE     LD HL,CPU5+0X3FFF
  140.                 LD (HL),"R"
  141.                 DEC H
  142.                 LD (HL),"D"
  143.                 XOR A
  144.                 RET
  145.  
  146. ELT5            POP AF
  147.                 EVOPORT WIN_P5,PAGE_RAMDISK
  148.                 JR ELOAD_IMAGE
  149.  
  150. ;ИНФА ДЛЯ СОЗДАНИЯ 9 СЕКТОРА НОВОГО ДИСКА
  151. DSKINFO         DB 0                    ;+0XE1-НОМЕР ПЕРВОГО СВОБОДНОГО СЕКТОРА
  152.                 DB 1                    ;+0XE2-НОМЕР ПЕРВОГО СВОБОДНОГО ТРЕКА
  153.                 DB 0X16                 ;+0XE3-ТИП ДИСКЕТЫ
  154.                 DB 0                    ;+0XE4-КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕТЕ
  155. SECFREE         DW 2544                 ;+0XE5-КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  156.                 DB 0X10                 ;+0XE7-ИДЕНТИФИКАЦИОННЫЙ КОД TRDOS
  157.                 DW 0                    ;+0XE8-2 БАЙТА 0
  158.                 DUPL 9,0X20             ;+0XEA-9 БАЙТ 0X20
  159.                 DB 0                    ;+0XF3-1 БАЙТ 0
  160.                 DB 0                    ;+0XF4-КОЛИЧЕСТВО УДАЛЕННЫХ ФАЙЛОВ
  161.                 DB "RAMDISKO"           ;+0XF5-ИМЯ ДИСКЕТЫ
  162. DSK_END
  163.  
  164. LOAD_SCL        EVOPORT WIN_P5,PAGE_DATARAMD
  165.                 EVOPORT WIN_P3,PAGE_MOUNTER
  166.                 LD A,PAGE_DATARAMD
  167. LOAD_IMAGE4     PUSH AF
  168.                 LD BC,WIN_P5
  169.                 OUT (C),A
  170.                 LD HL,CPU5+0X1000
  171.                 LD A,0X18
  172.                 CALL READ_FILE
  173.                 PUSH AF                         ;СОХРАНИЛИ ФЛАГ ОКОНЧАНИЯ ЗАГРУЗКИ НА СЛУЧАЙ ОКОНЧАНИЯ ОБРАЗА
  174.                 LD HL,CPU5
  175.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА КАТАЛОГА
  176.                 LD (HL),L
  177.                 LD D,H
  178.                 LD E,L
  179.                 INC DE
  180.                 LD BC,0XFFF
  181.                 LDIR                            ;ЗАЧИСТКА ОБЛАСТИ ПЕРВОЙ ДОРОЖКИ ДЛЯ ФОРМИРОВАНИЯ КАТАЛОГА ДИСКА
  182.                 LD HL,CPU5+0X1008               ;АДРЕС КОЛИЧЕСТВА ФАЙЛОВ В SCL ОБРАЗЕ
  183.                 LD A,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО ФАЙЛОВ КАК СЧЕТЧИК
  184.                 INC HL                          ;ПЕРЕШЛИ НА ПЕРВЫЙ ОПИСАТЕЛЬ ФАЙЛА
  185.                 EXX
  186.                 LD HL,0                         ;НОМЕР АБСОЛЮТНОГО СЕКТОРА
  187.                 LD D,L                          ;ПРИРАЩЕНИЕ СЕКТОРОВ НЕ МОЖЕТ БЫТЬ БОЛЕЕ 255 СЕКТОРОВ
  188.                 LD B,A                          ;СОХРАНЕНИЕ КОЛИЧЕСТВА ФАЙЛОВ
  189.                 EXX
  190.                 POP DE                          ;ВЕРНУЛИ АДРЕС НАЧАЛА КАТАЛОГА ДИСКА
  191. LOAD_IMAGE3     EX AF,AF'
  192.                 LD BC,0X0D
  193.                 LDIR                            ;ПЕРЕНЕСЛИ 13 БАЙТ ТЕЛА ОПИСАТЕЛЯ
  194.                 LD A,(HL)                       ;ЗАБРАЛИ РАЗМЕР ФАЙЛА В СЕКТОРАХ
  195.                 LDI                             ;ПЕРЕНЕСЛИ ЕЩЕ БАЙТ
  196.                 EXX
  197.                 LD E,A
  198.                 PUSH HL                         ;СОХРАНИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НОМЕРА СЕКТОРА
  199.                 ADD HL,DE                       ;УВЕЛИЧИЛИ ТЕКЩЕЕ ЗНАЧЕНИЕ НА РАЗМЕР ФАЙЛА В СЕКТОРАХ
  200.                 EXX
  201.                 EX (SP),HL
  202.                 LD A,L
  203.                 ADD HL,HL
  204.                 ADD HL,HL
  205.                 ADD HL,HL
  206.                 ADD HL,HL
  207.                 INC H
  208.                 AND 0X0F
  209.                 LD L,A
  210.                 EX (SP),HL
  211.                 POP BC                          ;ВОССТАНОВИЛИ ТЕКЩИЙ НОМЕР СЕКТОРА
  212.                 EX DE,HL
  213.                 LD (HL),C
  214.                 INC HL
  215.                 LD (HL),B                       ;УЛОЖИЛИ ПОСЛЕ ТЕКУЩЕГО ОПИСАТЕЛЯ
  216.                 INC HL
  217.                 EX DE,HL
  218.                 EX AF,AF'
  219.                 DEC A
  220.                 JR NZ,LOAD_IMAGE3               ;ЕСЛИ ФАЙЛЫ НЕ КОНЧИЛИСЬ ПРОДОЛЖАЕМ
  221.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НАЧАЛА ДАННЫХ
  222.                 LD HL,DSKINFO
  223.                 LD DE,CPU5+0X8E1
  224.                 LD BC,DSK_END-DSKINFO
  225.                 LDIR
  226.                 EXX
  227.                 LD DE,2544                      ;СТАНДАРТНЫЙ РАЗМЕР ДИСКЕТЫ
  228.                 EX DE,HL
  229.                 AND A
  230.                 SBC HL,DE
  231.                 LD (CPU5+0X8E5),HL              ;КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  232.                 EX DE,HL
  233.                 LD A,L
  234.                 ADD HL,HL
  235.                 ADD HL,HL
  236.                 ADD HL,HL
  237.                 ADD HL,HL
  238.                 INC H
  239.                 AND 0X0F
  240.                 LD L,A
  241.                 LD (CPU5+0X8E1),HL              ;ПЕРВЫЙ СВОБОДНЫЙ ТРЕК И СЕКТОР
  242.                 LD A,B
  243.                 LD (CPU5+0X8E4),A               ;КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕ
  244.                 EXX
  245.                 POP DE                          ;ВОССТАНОВЛЕНИЕ АДРЕСА НАЧАЛА ДАННЫХ
  246.                 LD HL,CPU6                      ;КОНЕЦ ОКНА ПРОЕЦИРОВАНИЯ
  247.                 AND A
  248.                 SBC HL,DE                       ;ПОЛУЧИЛИ КОЛИЧЕСТВО БАЙТ ДЛЯ СДВИГА
  249.                 LD B,H
  250.                 LD C,L
  251.                 LD HL,CPU5+0X1000               ;НАЧАЛО ДАННЫХ НА РАМДИСКЕ
  252.                 EX DE,HL
  253.                 LDIR                            ;СДВИНУЛИ, ПОСЛЕ ПЕРЕНОСА DE=АДРЕС КУДА ДАЛЕЕ ГРУЗИТЬ
  254.                 LD A,D
  255.                 CP HIGH (CPU6)-2
  256.                 JR NC,LOAD_IMAGE7
  257.                 EX DE,HL
  258.                 LD A,HIGH (CPU6)-1
  259.                 SUB H
  260.                 SRL A
  261.                 LD IXL,A
  262.                 CALL READ_FILE
  263.                 LD DE,0X8000
  264.                 EX DE,HL
  265. LOAD_IMAGE7     AND A
  266.                 SBC HL,DE                       ;ПОЛУЧИЛИ СКОЛЬКО БАЙТ ОСТАЛОСЬ ДО КОНЦА ОКНА
  267.                 LD (OST_HWOST),HL
  268.                 LD (KUDA_HWOST),DE
  269.                 LD DE,0
  270.                 EX DE,HL
  271.                 SBC HL,DE
  272.                 LD A,1
  273.                 AND H
  274.                 LD H,A
  275.                 LD (NEXT4PAGE),HL
  276.                 POP AF                          ;ВОССТАНОВИЛИ ФЛАГ ПОСЛЕДНЕЙ ЗАГРУЗКИ
  277.                 JP C,ILD_IMG2                   ;ЕСЛИ ФАЙЛ УЖЕ КОНЧИЛСЯ, ТО ВЫХОД
  278.                 JR LOAD_IMAGE5
  279.  
  280. LOAD_IMAGE6     LD DE,CPU5
  281.                 LD BC,(NEXT4PAGE)
  282.                 LDIR
  283.                 EX AF,AF'
  284.                 JP C,ILD_IMG2
  285.                 EX DE,HL
  286.                 LD A,0X1F
  287.                 CALL READ_FILE
  288.                 JP C,ILD_IMG2
  289. LOAD_IMAGE5     LD HL,CPU3+BUF_TEMPSEC
  290.                 PUSH HL
  291.                 LD A,1
  292.                 CALL READ_FILE
  293.                 EX AF,AF'                       ;СПРЯТАЛИ ФЛАГ ЗАГРУЗКИ СЕКТОРА
  294.                 POP HL                          ;ВОССТАНОВИЛИ АДРЕС КУДА СЕКТОР В БУФЕР ЗАГРУЗИЛИ
  295.                 LD DE,(KUDA_HWOST)              ;КУДА ЛОЖИТ ОСТАТОК В ОКНЕ
  296.                 LD BC,(OST_HWOST)               ;СКОЛЬКО ПЕРЕНОСИТЬ В КОНЕЦ СТРАНИЦЫ
  297.                 LDIR
  298.                 POP AF
  299.                 INC A
  300.                 PUSH AF
  301.                 LD BC,WIN_P5
  302.                 OUT (C),A
  303.                 JR LOAD_IMAGE6
  304.  
  305. LOAD_FDI        LD A,PAGE_RAMDISK               ;СТРАНИЦА НАЧАЛА РАМДИСКА
  306.                 PUSH AF                         ;СОХРАНИЛИ НА СТЕКЕ
  307.                 EVOPORT WIN_P5,PAGE_RAMDISK
  308.                 EVOPORT WIN_P3,PAGE_MOUNTER
  309.                 LD HL,FDI_TABLE_CYL
  310.                 LD DE,FDI_TABLE_CYL+1
  311.                 LD BC,0X3FFF
  312.                 LD (HL),0
  313.                 LDIR                            ;ОЧИСТКА СТРАНИЦЫ С ОПИСАТЕЛЯМИ ДОРОЖЕК
  314.                 LD IXH,0XFF
  315.                 CALL LOAD1SECFDI                ;ПРИНУДИТЕЛЬНАЯ ЗАГРУЗКА ПЕРВОГО СЕКТОРА
  316.                 LD A,(CPU3+6)                   ;ВЗЯЛИ КОЛИЧЕСТВО СТОРОН
  317.                 DEC A
  318.                 LD A,(CPU3+4)                   ;ВЗЯЛИ КОЛИЧЕСТВО ДОРОЖЕК
  319.                 JR Z,LOADFDI1
  320.                 ADD A,A                         ;ЕСЛИ СТОРОН 2, ТО УМНОЖИЛИ КОЛИЧЕСТВО ДОРОЖЕК НА 2
  321. LOADFDI1        LD C,A                          ;КОЛИЧЕСТВО ДОРОЖЕК
  322.                 LD HL,(CPU3+0X0A)
  323.                 LD (START_DATA),HL
  324.                 LD DE,CPU5                      ;АДРЕС БУФЕРА НАЧАЛА ОПИСАТЕЛЕЙ ДОРОЖЕК
  325.                 LD HL,CPU3+0X0F                 ;АДРЕС НАЧАЛА ВЫБОРКИ ОПИСАТЕЛЕЙ ДОРОЖЕК В FDI ЗАГОЛОВКЕ
  326. LOADFDI3        BIT 1,H
  327.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  328.                 LD A,(HL)                       ;БИТЫ 8-15 СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
  329.                 AND 0X3F                        ;ВЗЯЛИ ДЛЯ 8-13 БИТЫ-СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
  330.                 LD (DE),A                       ;УЛОЖИЛИ СМЕЩЕНИЕ В БЛОКАХ В СТРАНИЦЕ
  331.                 LD A,(HL)                       ;ВЗЯЛИ БИТЫ 14-15
  332.                 INC HL                          ;СЛЕДУЮЩИЙ БАЙТ FDI ЗАГОЛОВКА
  333.                 INC D                           ;ЗДЕСЬ ПОЛОЖИМ СМЕЩЕНИЕ В СТРАНИЦАХ ДО НУЖНОЙ ДОРОЖКИ
  334.                 BIT 1,H
  335.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  336.                 LD B,A                          ;СОХРАНИЛИ НУЖНЫЕ 14-15 БИТЫ
  337.                 LD A,(HL)                       ;ВЗЯЛИ 16-23 БИТЫ СМЕЩЕНИЯ ДОРОЖКИ ОТ НАЧАЛА
  338.                 RL B
  339.                 RLA
  340.                 RL B
  341.                 RLA
  342.                 LD (DE),A                       ;УКЛАДКА БИТОВ СМЕЩЕНИЯ НОМЕРА СТРАНИЦЫ
  343.                 INC D
  344.                 REPT 4
  345.                 INC HL
  346.                 ENDM
  347.                 BIT 1,H
  348.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  349.                 LD B,(HL)                       ;ВЗЯЛИ КОЛИЧЕСТВО СЕКТОРОВ НА ДОРОЖКЕ
  350.                 LD A,B
  351.                 AND A
  352.                 JP Z,LOADFDI_ERR
  353.                 INC HL
  354.                 INC HL
  355. LOADFDI4        INC HL
  356.                 BIT 1,H
  357.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  358.                 LDI                             ;ПЕРЕНОС НОМЕРА СЕКТОРА
  359.                 DEC DE
  360.                 INC C
  361.                 INC D
  362.                 BIT 1,H
  363.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  364.                 LD A,(HL)                       ;ВЗЯЛИ РАЗМЕР СЕКТОРА
  365.                 EX DE,HL
  366.                 LD (HL),1
  367.                 AND A
  368.                 JR Z,LOADFDI2
  369.                 LD (HL),2
  370.                 DEC A
  371.                 JR Z,LOADFDI2
  372.                 LD (HL),4
  373.                 DEC A
  374.                 JR Z,LOADFDI2
  375.                 LD (HL),8
  376. LOADFDI2        EX DE,HL
  377.                 INC D
  378.                 REPT 5
  379.                 INC HL
  380.                 ENDM
  381.                 DJNZ LOADFDI4                   ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ, ПОКА СЕКТОРА ДОРОЖКИ НЕ КОНЧАТСЯ
  382.                 LD D,0X40
  383.                 INC E
  384.                 DEC C
  385.                 JR NZ,LOADFDI3                  ;ВОЗВРАЩАЕМСЯ ДЛЯ ПРОДОЛЖЕНИЯ ПОКА НЕ КОНЧАТСЯ ДОРОЖКИ
  386.                 DEC HL
  387.                 BIT 1,H
  388.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  389.                 PUSH HL
  390.                 LD A,H
  391.                 AND 1
  392.                 LD B,A
  393.                 LD C,L
  394.                 LD A,IXH
  395.                 ADD A,A
  396.                 ADD A,B
  397.                 LD B,A
  398.                 LD HL,(START_DATA)
  399.                 AND A
  400.                 SBC HL,BC
  401.                 EX DE,HL
  402.                 POP HL
  403.                 LD A,D
  404.                 AND A
  405.                 JR Z,LOADFDI7
  406. LOADFDI8        INC H
  407.                 BIT 1,H
  408.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  409.                 DEC D
  410.                 JR NZ,LOADFDI8
  411. LOADFDI7        ADD HL,DE
  412.                 BIT 1,H
  413.                 CALL NZ,LOAD1SECFDI             ;ЕСЛИ ВЫШЛИ ЗА ПРЕДЕЛЫ СЕКТОРА МЕНЯЕМ УКАЗАТЕЛЬ И ГРУЗИМ СЛЕДУЮЩИЙ СЕКТОР В БУФЕР
  414.                 PUSH HL                         ;СОХРАНИЛИ АДРЕС НА НАЧАЛО НАЧАЛА СЕКТОРОВ
  415.                 LD DE,CPU3
  416.                 AND A
  417.                 SBC HL,DE
  418.                 LD (OSTAT_SECT),HL              ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ ХВОСТА СЕКТОРА В БУФЕРЕ В НАЧАЛО СТРАНИЦЫ
  419.                 LD B,H
  420.                 LD C,L
  421.                 LD HL,0X200
  422.                 SBC HL,BC
  423.                 LD (NACH_SECT),HL               ;СКОЛЬКО БАЙТ ПЕРЕНЕСТИ ИЗ НАЧАЛА СЕКТОРА В БУФЕРЕ В КОНЕЦ СТРАНИЦЫ
  424.                 POP HL                          ;ВОССТАНОВИЛИ СДРЕС НАЧАЛА СЕКТОРОВ, ДАЛЕЕ ЗАГРУЗКА ВСЕХ СЕКТОРОВ В ПАМЯТЬ
  425. LOADFDI5        POP AF
  426.                 INC A
  427.                 PUSH BC
  428.                 LD BC,WIN_P5
  429.                 OUT (C),A
  430.                 POP BC
  431.                 PUSH AF
  432.                 BIT 1,H
  433.                 CALL NZ,LOAD1SECFDI
  434.                 EX AF,AF'
  435.                 LD DE,CPU5
  436.                 LD BC,(NACH_SECT)
  437.                 LDIR
  438.                 EX AF,AF'
  439.                 JP C,ELT5
  440.                 EX DE,HL
  441.                 LD A,0X1F
  442.                 CALL READ_FILE
  443.                 JP C,ELT5
  444.                 PUSH HL
  445.                 LD HL,CPU3
  446.                 PUSH HL
  447.                 LD A,1
  448.                 CALL READ_FILE
  449.                 POP HL
  450.                 POP DE
  451.                 LD BC,(OSTAT_SECT)
  452.                 LDIR
  453.                 JR LOADFDI5
  454.  
  455. LOADFDI_ERR     POP AF
  456.                 EVOPORT WIN_P5,PAGE_RAMDISK
  457.                 CALL FORMAT_RAMDISK
  458.                 LD IX,LDFDIERROR
  459.                 SCF
  460.                 RET
  461.  
  462. FORMAT_RAMDISK  EVOPORT WIN_P5,PAGE_DATARAMD
  463.                 LD HL,CPU5
  464.                 LD DE,CPU5+1
  465.                 LD BC,0XFFF
  466.                 LD (HL),L
  467.                 LDIR
  468.                 LD HL,DSKINFO
  469.                 LD DE,CPU5+0X8E1
  470.                 LD BC,DSK_END-DSKINFO
  471.                 LDIR
  472.                 JP ILD_IMG3
  473.  
  474. ;ЗАГРУЗКА СЛЕДУЮЩЕГО СЕКТОРА ЗАГОЛОВКА FDI
  475. LOAD1SECFDI     PUSH HL
  476.                 PUSH BC
  477.                 PUSH DE
  478.                 PUSH AF
  479.                 LD HL,CPU3
  480.                 LD A,1
  481.                 CALL READ_FILE
  482.                 INC IXH
  483.                 POP AF
  484.                 POP DE
  485.                 POP BC
  486.                 POP HL
  487.                 RES 1,H
  488.                 RET
  489.  
  490. OPEN_MOUNT      LD A,(RREG_A)
  491. OPEN_MOUNT_INT  LD (MOUNT_SYM),A
  492.                 LD IYL,INTERNAL
  493.                 EVOPORT WIN_P5,PAGE_MOUNTER     ;ВКЛЮЧИЛИ СТРАНИЦУ С ОПИСАТЕЛЯМИ ПРИМОНТИРОВАННЫХ ФАЙЛОВ
  494.                 LD A,(MOUNT_SYM)                ;ВЗЯЛИ НОМЕР МОНТИРУЕМОГО ДИСКОВОДА
  495.                 ADD A,HIGH (BUF_PATHMOUNT+CPU5)
  496.                 LD D,A
  497.                 LD E,0                          ;DE=АДРЕС БУФЕРА ПУТЕЙ ПРИМОНТИРОВАННЫХ ФАЙЛОВ
  498.                 LD A,(SETDVOL)                  ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  499.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4
  500.                 LD H,A
  501.                 LD L,E                          ;HL=АДРЕС ПУТИ НА ТЕКУЩЕМ УСТРОЙСТВЕ
  502.                 LD BC,0X100
  503.                 PUSH DE
  504.                 LDIR                            ;ПЕРЕНЕСЛИ ПУТЬ
  505.                 CALL READ_DIR                   ;ПРОЧИТАЛИ ОПИСАТЕЛЬ МОНТИРУЕМОГО ФАЙЛА
  506.                 POP DE
  507.                 PUSH HL
  508. OPENMOUNT05     LD A,(DE)
  509.                 INC DE
  510.                 AND A
  511.                 JR NZ,OPENMOUNT05
  512.                 DEC DE
  513.                 LD BC,0X8FF
  514. OPENMOUNT01     LDI
  515.                 LD A,(HL)
  516.                 CP "!"
  517.                 JR C,OPENMOUNT03
  518.                 DJNZ OPENMOUNT01
  519.                 LD A,"."
  520.                 LD (DE),A
  521.                 INC DE
  522.                 JR OPENMOUNT06
  523.  
  524. OPENMOUNT03     INC HL
  525.                 DJNZ OPENMOUNT03
  526.                 DEC HL
  527.                 LD A,"."
  528.                 LD (DE),A
  529.                 INC DE
  530. OPENMOUNT06     LD B,3
  531. OPENMOUNT02     LDI
  532.                 LD A,(HL)
  533.                 CP "!"
  534.                 JR C,OPENMOUNT04
  535.                 DJNZ OPENMOUNT02
  536. OPENMOUNT04     XOR A
  537.                 LD (DE),A
  538.                 POP HL
  539.                 LD A,(MOUNT_SYM)
  540.                 PUSH HL
  541.                 LD B,A
  542.                 RRCA
  543.                 RRCA
  544.                 LD E,A
  545.                 LD D,HIGH (MOUNT_DRIVES)
  546.                 LD IXH,D
  547.                 LD IXL,E                        ;IX=АДРЕС ОПИСАТЕЛЯ ПРИМОНТИРОВАННОГО ФАЙЛА
  548.                 LD (IX+0X28),B
  549.                 LD BC,0X20
  550.                 LDIR
  551.                 LD A,(IX+0X28)
  552.                 LD D,A
  553.                 INC A
  554.                 LD H,%11110111
  555. OPENMOUNT1      RLC H
  556.                 DEC A
  557.                 JR NZ,OPENMOUNT1
  558. ;               IF NEWDOS=1
  559. ;               CALL RD_DRIVE_INDOS
  560. ;               ELSE
  561.                 IN A,(RW_PORT0)
  562. ;               ENDIF
  563.                 AND H
  564.                 LD L,A
  565.                 LD A,H
  566.                 CPL
  567.                 OR L
  568. ;               IF NEWDOS=1
  569. ;               CALL WR_DRIVE_INDOS             ;УСТАНОВКА БИТА ПРИМОНТИРОВАННОГО ДИСКОВОДА
  570. ;               ELSE
  571.                 OUT (RW_PORT0),A
  572. ;               ENDIF
  573.                 EVOPORT WIN_P5,PAGE_MOUNTER     ;ВКЛЮЧИЛИ СТРАНИЦУ С ОПИСАТЕЛЯМИ ПРИМОНТИРОВАННЫХ ФАЙЛОВ
  574.                 POP HL
  575. ;HL=АДРЕС ОПИСАТЕЛЯ МОНТИРУЕМОГО ФАЙЛА
  576. IOPEN_MOUNT     LD DE,FILE_EXT
  577.                 CALL CP_EXT
  578.                 LD (IX+0X21),C                  ;ТИП ОБРАЗА ПО РАСШИРЕНИЮ
  579.                 CALL ICOM_DEV
  580.                 DB _KOL_VOL
  581.                 LD (IX+0X23),A                  ;ТИП РАЗДЕЛА
  582.                 LD (IX+0X24),D                  ;НОМЕР ВЫБРАННОГО РАЗДЕЛА
  583.                 LD L,D
  584.                 LD H,0
  585.                 ADD HL,HL
  586.                 ADD HL,HL
  587.                 ADD HL,HL
  588.                 LD DE,BUF_TABLVOL               ;АДРЕС ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
  589.                 ADD HL,DE
  590.                 LD A,(HL)
  591.                 CP SDZ
  592.                 LD HL,COMSDZ
  593.                 JR Z,OPENMOUNT6
  594.                 CP SDG
  595.                 LD HL,COMSDG
  596.                 JR Z,OPENMOUNT6
  597.                 LD HL,COMHDDN
  598. OPENMOUNT6      LD (IX+0X25),L
  599.                 LD (IX+0X26),H                  ;АДРЕС ДРАЙВЕРА МОНТИРУЕМОГО ОБРАЗА
  600.  
  601.                 LD E,(IX+0X1D)
  602.                 LD D,(IX+0X1E)
  603.                 LD L,(IX+0X1F)                  ;LDE=РАЗМЕР ФАЙЛА/256
  604.                 LD A,(BYTSSEC)
  605.                 LD H,A
  606. OPENMOUNT3      SRL L
  607.                 RR D
  608.                 RR E
  609.                 RRCA
  610.                 JR NC,OPENMOUNT3                ;LDE=КОЛИЧЕСТВО КЛАСТЕРОВ
  611. ;A00 СЕКТОРОВ (256 БАЙТ) -> 500 СЕКТОРОВ (512 БАЙТ)
  612. ;КЛАСТЕР=1 СЕКТОР       1280/8 БАЙТ     ШАГ=8
  613. ;КЛАСТЕР=2 СЕКТОРА      640/4 БАЙТ      ШАГ=4
  614. ;КЛАСТЕР=4 СЕКТОРА      320/2 БАЙТ      ШАГ=2
  615. ;КЛАСТЕР=8 СЕКТОРОВ     160 БАЙТ        ШАГ=1
  616. ;КЛАСТЕР=16 СЕКТОРОВ    80 БАЙТ         ШАГ=1
  617. ;КЛАСТЕР=32 СЕКТОРА     40 БАЙТ         ШАГ=1
  618. ;КЛАСТЕР=64 СЕКТОРА     20 БАЙТ         ШАГ=1
  619. ;КЛАСТЕР=128 СЕКТОРОВ   10 БАЙТ         ШАГ=1
  620.                 LD IY,1<<8+INTERNAL
  621.                 LD A,H
  622.                 CP 8
  623.                 JR NC,OPENMOUNT5
  624.                 LD IYH,8
  625.                 RRCA
  626.                 JR C,OPENMOUNT5
  627.                 LD IYH,4
  628.                 RRCA
  629.                 JR C,OPENMOUNT5
  630.                 LD IYH,2
  631. OPENMOUNT5      LD A,IYH
  632.                 LD (IX+0X22),A                  ;ШАГ КЛАСТЕРОВ
  633.                 LD A,(IX+0X28)                  ;НОМЕР МОНТИРУЕМОГО ДИСКОВОДА
  634.                 ADD A,A
  635.                 ADD A,A
  636.                 ADD A,HIGH (MOUNT_CLS+CPU5)
  637.                 LD H,A
  638.                 LD L,0
  639.                 LD C,(IX+0X14)
  640.                 LD B,(IX+0X15)
  641.                 LD E,(IX+0X1A)
  642.                 LD D,(IX+0X1B)
  643.                 JR OPENMOUNT9
  644.  
  645. OPENMOUNT7      DEC IYH
  646.                 JR NZ,OPENMOUNT8
  647. OPENMOUNT9      LD A,(IX+0X22)                  ;ШАГ КЛАСТЕРОВ
  648.                 LD IYH,A
  649.                 LD (HL),E
  650.                 INC H
  651.                 LD (HL),D
  652.                 INC H
  653.                 LD (HL),C
  654.                 INC H
  655.                 LD (HL),B
  656.                 DEC H
  657.                 DEC H
  658.                 DEC H
  659.                 INC L
  660. OPENMOUNT8      PUSH HL
  661.                 CALL RDFATZP
  662.                 CALL LST_CLS
  663.                 POP HL
  664.                 JR NC,OPENMOUNT7
  665.                 RET
  666.  
  667. FILE_EXT        DZ "TRD"
  668.  
  669. ;HL=АДРЕС ЧТЕНИЯ/ЗАПИСИ
  670. ;D=НОМЕР ТРЕКА, E=НОМЕР СЕКТОРА+1
  671. ;A=НОМЕР ДИСКОВОДА (BIT 7=0-ЧТЕНИЕ, =1-ЗАПИСЬ)
  672. RDWR_MOUNT      LD A,(RREG_A)
  673.                 AND 3
  674.                 RRCA
  675.                 RRCA
  676.                 LD IXL,A
  677.                 LD IXH,HIGH (MOUNT_DRIVES)      ;IX=ОПИСАТЕЛЬ ДИСКОВОДОВ A-D
  678.                 LD IYL,INTERNAL
  679.                 EVOPORT WIN_P5,PAGE_FATVARS
  680.                 LD A,(SETDVOL)
  681.                 ADD A,HIGH (CPU5+BUF_ALLVOL)+4
  682.                 LD D,A
  683.                 LD E,0
  684.                 LD HL,BUF_TEKVOL
  685.                 LD BC,0X100
  686.                 LDIR
  687.                 LD A,(IX+0X24)
  688.                 ADD A,HIGH (CPU5+BUF_ALLVOL)+4
  689.                 LD H,A
  690.                 LD L,0
  691.                 LD DE,BUF_TEKVOL
  692.                 LD BC,0X100
  693.                 LDIR
  694.                 EVOPORT WIN_P5,PAGE_MOUNTER
  695.                 LD HL,(GO_DEV)
  696.                 LD (IX+0X27),L
  697.                 LD (IX+0X28),H
  698.                 LD L,(IX+0X25)
  699.                 LD H,(IX+0X26)
  700.                 LD (GO_DEV),HL
  701.                 LD HL,(RREG_E)
  702.                 DEC L
  703.                 LD E,L
  704.                 LD L,H
  705.                 LD H,0
  706.                 LD D,H
  707.                 ADD HL,HL
  708.                 ADD HL,HL
  709.                 ADD HL,HL
  710.                 ADD HL,HL
  711.                 ADD HL,DE                       ;HL=НОМЕР СЕКТОРА В ФАЙЛЕ (256 БАЙТ)
  712.                 PUSH HL
  713.                 LD A,(BYTSSEC)
  714. RDWRMOUNT1      SRL H
  715.                 RR L
  716.                 RRCA
  717.                 JR NC,RDWRMOUNT1                ;HL=НОМЕР КЛАСТЕРА
  718. ;0XA00 СЕКТОРОВ (256 БАЙТ) -> 0X500 СЕКТОРОВ (512 БАЙТ)
  719. ;КЛАСТЕР=1 СЕКТОР       1280/8 БАЙТ     ШАГ=8
  720. ;КЛАСТЕР=2 СЕКТОРА      640/4 БАЙТ      ШАГ=4
  721. ;КЛАСТЕР=4 СЕКТОРА      320/2 БАЙТ      ШАГ=2
  722. ;КЛАСТЕР=8 СЕКТОРОВ     160 БАЙТ        ШАГ=1
  723. ;КЛАСТЕР=16 СЕКТОРОВ    80 БАЙТ         ШАГ=1
  724. ;КЛАСТЕР=32 СЕКТОРА     40 БАЙТ         ШАГ=1
  725. ;КЛАСТЕР=64 СЕКТОРА     20 БАЙТ         ШАГ=1
  726. ;КЛАСТЕР=128 СЕКТОРОВ   10 БАЙТ         ШАГ=1
  727.                 LD A,L
  728.                 EX AF,AF'
  729.                 LD A,(IX+0X22)
  730.                 DEC A
  731.                 JR Z,RDWRMOUNT6
  732.                 INC A
  733.                 ADD HL,HL
  734. RDWRMOUNT2      SRL H
  735.                 RR L
  736.                 RRCA
  737.                 JR NC,RDWRMOUNT2
  738. RDWRMOUNT6      LD A,(RREG_A)                   ;НОМЕР ДИСКОВОДА
  739.                 ADD A,A
  740.                 ADD A,A
  741.                 ADD A,HIGH (MOUNT_CLS+CPU5)
  742.                 LD H,A
  743.                 LD E,(HL)
  744.                 INC H
  745.                 LD D,(HL)
  746.                 INC H
  747.                 LD C,(HL)
  748.                 INC H
  749.                 LD B,(HL)                       ;BCDE=НОМЕР КЛАСТЕРА
  750.                 LD A,(IX+0X22)                  ;ШАГ КЛАСТЕРОВ
  751.                 DEC A
  752.                 JR Z,RDWRMOUNT3                 ;ШАГ КЛАСТЕРОВ =1
  753.                 LD B,A                          ;МАСКА СМЕЩЕНИЯ В ТАБЛИЦЕ КЛАСТЕРОВ
  754.                 EX AF,AF'
  755.                 AND B                           ;A=СМЕЩЕНИЕ В ТАБЛИЦЕ КЛАСТЕРОВ
  756.                 LD B,(HL)                       ;ВОССТАНОВЛЕНИЕ НОМЕРА КЛАСТЕРА
  757.                 JR Z,RDWRMOUNT3
  758. RDWRMOUNT4      PUSH AF
  759.                 CALL RDFATZP
  760.                 POP AF
  761.                 DEC A
  762.                 JR NZ,RDWRMOUNT4
  763. RDWRMOUNT3      CALL REALSEC                    ;КОНВЕРСИЯ НОМЕРА КЛАСТЕРА В НОМЕР СЕКТОРА
  764.                 POP HL
  765.                 PUSH HL
  766.                 SRL L
  767.                 LD A,(BYTSSEC)
  768.                 DEC A
  769.                 JR Z,RDWRMOUNT5
  770.                 AND L
  771.                 LD L,A
  772.                 LD H,0
  773.                 ADD HL,DE
  774.                 EX DE,HL
  775.                 LD HL,0
  776.                 ADC HL,BC
  777.                 LD B,H
  778.                 LD C,L
  779. RDWRMOUNT5      CALL LOADLST                    ;ЧТЕНИЕ СЕКТОРА В БУФЕР
  780.                 POP BC
  781.                 LD A,C
  782.                 AND 1
  783.                 ADD A,H
  784.                 LD H,A
  785.                 LD BC,CPU3
  786.                 ADD HL,BC                       ;АДРЕС БУФЕРА В ОКНЕ 1
  787.                 CALL LDIR_SEC
  788.                 LD A,(RREG_A)                   ;ЧТЕНИЕ ИЛИ ЗАПИСЬ
  789.                 AND 0X80
  790.                 CALL NZ,LSTSAVE
  791.                 LD HL,RREG_H
  792.                 INC (HL)
  793.                 LD L,(IX+0X27)
  794.                 LD H,(IX+0X28)
  795.                 LD (GO_DEV),HL
  796.                 EVOPORT WIN_P5,PAGE_FATVARS
  797.                 LD A,(SETDVOL)
  798.                 ADD A,HIGH (CPU5+BUF_ALLVOL)+4
  799.                 LD H,A
  800.                 LD DE,BUF_TEKVOL
  801.                 LD BC,0X100
  802.                 LD L,C
  803.                 LDIR
  804.                 LD (LSTLOAD+2),HL
  805.                 RET
  806.  
  807. LDIR_SEC        EX DE,HL                        ;АДРЕС БУФЕРА СОХРАНИЛИ В DE
  808.                 LD HL,(RREG_L)                  ;HL=АДРЕС В ОСНОВНОЙ ПАМЯТИ
  809.                 CALL RESETUP_WINS               ;ПЕРЕКОНФИГУРАЦИЯ ОКОН ПРОЕЦИРОВАНИЯ
  810.                 ADD HL,BC                       ;ИЗМЕНИЛИ АДРЕС ЧТЕНИЯ/ЗАПИСИ
  811.                 EX DE,HL                        ;HL=АДРЕС БУФЕРА, DE=АДРЕС В ОСНОВНОЙ ПАМЯТИ
  812.                 LD A,(RREG_A-CPU5)              ;ЧТЕНИЕ ИЛИ ЗАПИСЬ
  813.                 AND 0X80
  814.                 JR Z,LDIRSEC6
  815.                 EX DE,HL                        ;ДЛЯ ЗАПИСИ МЕНЯЕМ НАПРАЛЕНИЕ ПЕРЕНОСА
  816. LDIRSEC6        LD BC,0X100
  817.                 LDIR
  818.                 LD HL,CPU5
  819.                 ADD HL,SP
  820.                 LD SP,HL                        ;ВЕРНУЛИ АДРЕС СТЕКА В ОКНО 2
  821.                 ATMPORT WIN_A3,0X7F             ;УБРАЛИ ВОЗМОЖНУЮ ЗАВИСИМОСТЬ В ОКНЕ 3 ОТ ПОРТА 7FFD
  822.                 LD B,HIGH (WIN_A6)
  823.                 OUT (C),A                       ;УБРАЛИ ВОЗМОЖНУЮ ЗАВИСИМОСТЬ В ОКНЕ 2 ОТ ПОРТА 7FFD
  824.                 XOR A
  825.                 LD B,HIGH (WIN_P6)
  826.                 OUT (C),A                       ;ВЕРНУЛИ СТРАНИЦУ ПЕРЕМЕННЫХ В ОКНО 2
  827.                 RET
  828.  
  829. TXT_MOUNTER     DZ "IMAGE.MNT"                  ;ИМЯ ДЛЯ ПОИСКА ТЕКСТОВОГО ФАЙЛА С УКАЗАНИЕМ К МОНТИРОВАНИЮ TRD
  830. ETXT_MOUNTER
  831.  
  832. FIND_MOUNTED    LD A,(KOLDVOL)
  833.                 AND A
  834.                 JR NZ,FINDMNTD09
  835.                 LD IX,MOUNT_DRIVES
  836.                 LD DE,0X40
  837.                 LD B,4
  838. FINDMNTD10      LD (IX+0),D
  839.                 ADD IX,DE
  840.                 DJNZ FINDMNTD10
  841.                 RET
  842.  
  843. FINDMNTD09      LD A,(SETDVOL)
  844.                 LD (SAVE_TEK_VOL),A             ;СОХРАНИЛИ ТЕКУЩЕЕ УСТРОЙСТВО
  845.                 CALL SAVE_FNDVOL                ;СОХРАНИЛИ ПЕРЕМЕННЫЕ ТЕКУЩЕГО УСТРОЙСТВА
  846.                 LD H,CMOS_BYTE_01
  847.                 PCALL READCMOS,P_ADDONS
  848.                 LD A,L
  849.                 AND AUTOMOUNT                   ;ОПРЕДЕЛЕНИЕ НУЖНО ЛИ ИСКАТЬ ФАЙЛ IMAGE.MNT
  850.                 JP Z,FINDMNTD01
  851. ;ИЩЕМ ФАЙЛ IMAGE.MNT ДЛЯ АВТОМОНТИРОВАНИЯ
  852.                 LD IYL,INTERNAL
  853.                 LD A,(KOLDVOL)
  854.                 DEC A                           ;ИСКАТЬ БУДЕМ НА ПОСЛЕДНЕМ НАЙДЕННОМ РАЗДЕЛЕ
  855.                 CALL SET_VOL_MNT                ;ПЕРЕКЛЮЧИЛСЬ НА ВЫБРАННОЕ УСТРОЙСТВО
  856.                 LD HL,(ROOTCLS)
  857.                 LD (TEK_DIR),HL
  858.                 LD HL,(ROOTCLS+2)
  859.                 LD (TEK_DIR+2),HL               ;ВЫБРАЛИ КОРНЕВОЙ КАТАЛОГ ВЫБРАННОГО УСТРОЙСТВА
  860.                 CALL INIRTSC                    ;ИНИЦИАЛИЗИРОВАЛИ ЕГО ПЕРЕМЕННЫЕ НА ROOTDIR
  861.                 LD HL,TXT_MOUNTER
  862.                 LD DE,BUF_256
  863.                 LD BC,ETXT_MOUNTER-TXT_MOUNTER
  864.                 LDIR                            ;ПЕРЕНЕСЛИ ИМЯ ФАЙЛА ДЛЯ ПОИСКА
  865.                 CALL ICOM_FAT
  866.                 DB _FIND_NAME
  867.                 JP C,FINDMNTD01                 ;ФАЙЛ IMAGE.MNT НЕ НАЙДЕН
  868. ;ФАЙЛ НАЙДЕН
  869.                 CALL OPEN_FILE                  ;ОТКРЫВАЕМ ФАЙЛ
  870.                 LD HL,FILE_SRC+0X1F
  871.                 LD A,(HL)
  872.                 DEC HL
  873.                 OR (HL)
  874.                 JP NZ,FINDMNTD01                ;ФАЙЛ НЕ ДОЛЖЕН БЫТЬ БОЛЕЕ 512 БАЙТ
  875.                 DEC HL
  876.                 LD A,(HL)
  877.                 CP 2
  878.                 JP NC,FINDMNTD01                ;ФАЙЛ НЕ ДОЛЖЕН БЫТЬ БОЛЕЕ 512 БАЙТ
  879.                 LD A,1                          ;ЧИТАТЬ БУДЕМ 1 СЕКТОР ИЗ НАЙДЕННОГО ФАЙЛА
  880.                 LD B,(HL)
  881.                 DEC HL
  882.                 LD C,(HL)                       ;ВЗЯЛИ ДЛИНУ ФАЙЛА В БАЙТАХ
  883.                 PUSH BC                         ;СОХРАНИЛИ ДЛЯ ДАЛЬНЕЙШЕГО ИСПОЛЬЗОВАНИЯ
  884.                 LD IYL,INTERNAL
  885.                 LD HL,OFFSET_BUFSYM+CPU6
  886.                 PUSH HL
  887.                 CALL READ_FILE                  ;ПРОЧИТАЛИ 1 СЕКТОР ИЗ ФАЙЛА
  888.                 EVOPORT WIN_P5,PAGE_MOUNTER
  889.                 POP HL
  890.                 POP BC
  891.                 ADD HL,BC
  892.                 LD (HL),0                       ;УСТАНОВИЛИ ПРИЗНАК КОНЦА ФАЙЛА В 0
  893.                 SBC HL,BC
  894. FINDMNTD04      LD A,(HL)
  895.                 AND A
  896.                 JR Z,FINDMNTD01                 ;ВЫХОДИМ ЕСЛИ ФАЙЛ КОНЧИЛСЯ
  897.                 INC HL
  898.                 CP "!"
  899.                 JR C,FINDMNTD04                 ;ЕСЛИ СТРОКА КОНЧИЛАСЬ ПЕРЕНОСИМ ЭТУ СТРОКУ В БУФЕР ПОИСКА
  900.                 DEC HL
  901.                 PUSH HL
  902.                 INC HL
  903.                 CP "a"                          ;ПЕРВЫЙ СИМВОЛ СТРОКИ БУКВА УСТРОЙСТВА
  904.                 JR C,FINDMNTD06                 ;ДОЛЖНА БЫТЬ ТОЛЬКО СИМВОЛ ОТ "A"
  905.                 CP 'z'+1
  906.                 JR NC,FINDMNTD06                ;ДО "Z"
  907.                 AND 0XDF                        ;ПЕРЕВЕЛИ БУКВУ УСТРОЙСТВА В ВЕРХНИЙ РЕГИСТР, ЕСЛИ НУЖНО
  908. FINDMNTD06      SUB "E"                         ;FAT УСТРОЙСТВА НАЧИНАЮТСЯ С БУКВЫ "E"
  909.                 JR C,FINDMNTD02
  910.                 EXX
  911.                 LD C,A                          ;НОМЕР УСТРОЙСТВА ГДЕ ИСКАТЬ ФАЙЛ
  912.                 LD A,(KOLDVOL)                  ;КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
  913.                 CP C
  914.                 EXX
  915.                 JR C,FINDMNTD02
  916.                 LD A,(HL)
  917.                 INC HL
  918.                 CP ":"                          ;РАЗДЕЛИТЕЛЬ ОБЯЗАТЕЛЕН
  919.                 JR NZ,FINDMNTD02
  920.                 LD A,(HL)
  921.                 INC HL
  922.                 CP "/"                          ;РАЗДЕЛИТЕЛЬ ОБЯЗАТЕЛЕН
  923.                 JR NZ,FINDMNTD02
  924. FINDMNTD07      LD A,(HL)
  925.                 INC HL
  926.                 CP "!"
  927.                 JR NC,FINDMNTD07                ;ИЩЕМ КОНЕЦ СТРОКИ
  928.                 LD A,(HL)                       ;БУКВА ДИСКОВОДА НА КОТОРУЮ МОНТИРОВАТЬ
  929.                 INC HL
  930.                 CP "a"
  931.                 JR C,FINDMNTD08
  932.                 CP 'z'+1
  933.                 JR NC,FINDMNTD08
  934.                 AND 0XDF                        ;ПЕРЕВОДИ В ВЕРХНИЙ РЕГИСТР, ЕСЛИ НУЖНО
  935. FINDMNTD08      SUB "A"
  936.                 JR C,FINDMNTD02
  937.                 CP 4
  938.                 JR NC,FINDMNTD02
  939.                 EXX
  940.                 LD B,A                          ;НОМЕР ДИСКОВОДА НА КОТОРЫЙ МОНТИРОВАТЬ
  941.                 EXX
  942.                 LD A,(HL)
  943.                 INC HL
  944.                 CP ":"
  945.                 JR NZ,FINDMNTD02
  946.                 LD D,H
  947.                 LD E,L
  948.                 EX (SP),HL
  949.                 EX DE,HL
  950.                 SCF
  951.                 SBC HL,DE
  952.                 LD B,H
  953.                 LD C,L
  954.                 EX DE,HL
  955.                 EXX
  956.                 LD A,B
  957.                 EXX
  958.                 ADD A,HIGH (BUF_PATHMOUNT+CPU5)
  959.                 LD D,A
  960.                 LD E,0                          ;DE=АДРЕС БУФЕРА ТЕКСТОВОЙ СТРОКИ МОНТИРУЕМОГО ДИСКОВОДА
  961.                 DEC BC
  962.                 DEC BC
  963.                 LDIR                            ;ПЕРЕНЕСЛИ СТРОКУ
  964.                 XOR A
  965.                 LD (DE),A                       ;ПРИНУДИТЕЛЬНОЕ ЗАВЕРШЕНИЕ СТРОКИ МОНТИРОВАНИЯ
  966.                 POP HL
  967.                 JR FINDMNTD04
  968.  
  969. FINDMNTD02      LD A,(HL)
  970.                 INC HL
  971.                 AND A
  972.                 JR Z,FINDMNTD01
  973.                 CP " "
  974.                 JR NC,FINDMNTD02
  975.                 POP DE
  976.                 JR FINDMNTD04
  977.  
  978. FINDMNTD01      EVOPORT WIN_P5,PAGE_MOUNTER
  979.                 LD BC,0X400
  980.                 LD IX,MOUNT_DRIVES              ;БУФЕР ОПИСАТЕЛЕЙ МОНТИРУЕМЫХ ФАЙЛОВ
  981. FINDMNTD2       PUSH BC
  982.                 CALL FINDMNTD0                  ;ИЩЕМ УКАЗАННЫЙ ФАЙЛ ДЛЯ МОНТИРОВАНИЯ
  983.                 JR NC,FINDMNT5
  984.                 LD (IX+0),0                     ;ЕСЛИ ФАЙЛ НЕ НАЙДЕН, ТО ПРИНУДИТЕЛЬНО ДЕМОНТИРУЕМ ОБРАЗ
  985. FINDMNT5        LD BC,0X40
  986.                 ADD IX,BC                       ;СЛЕДУЮЩИЙ ОПИСАТЕЛЬ МОНТИРУЕМОГО ФАЙЛА
  987.                 POP BC
  988.                 DJNZ FINDMNTD2
  989.                 LD A,IYH
  990.                 AND 0XF0                        ;СТАРШИЕ 4 БИТА ПРИМОНТИРОВАННЫЕ ФАЙЛЫ
  991.                 LD D,A
  992. ;               IF NEWDOS=1
  993. ;               CALL RD_DRIVE_INDOS
  994. ;               ELSE
  995.                 IN A,(RW_PORT0)
  996. ;               ENDIF
  997.                 AND 0X0F                        ;МЛАДШИЕ 4 БИТА РЕАЛЬНЫЙ И ВИРТУАЛЬНЫЕ ПРИВОДЫ
  998.                 OR D                            ;СОВМЕСТИЛИ ДЛЯ ЗАПИСИ ОБРАТНО
  999. ;               IF NEWDOS=1
  1000. ;               CALL WR_DRIVE_INDOS             ;УСТАНОВИЛИ ЗНАЧЕНИЕ ПОРТА ДЛЯ EVO-DOS
  1001. ;               ELSE
  1002.                 OUT (RW_PORT0),A
  1003. ;               ENDIF
  1004.                 LD A,(SAVE_TEK_VOL)
  1005.                 PUSH IY
  1006.                 LD IYL,INTERNAL
  1007.                 CALL SET_VOL_MNT                ;ВОССТАНОВИЛИ ТЕКУЩЕЕ ВЫБРАННОЕ УСТРОЙСТВО
  1008.                 CALL INIRTSC                    ;ПРОИНИТИЛИ ЕГО ПЕРЕМЕННЫЕ
  1009.                 POP IY
  1010.                 JP LOAD_FNDVOL                  ;ВЕРНУЛИ НА МЕСТО ОПИСАТЕЛЬ УСТРОЙСТВА
  1011.  
  1012. ;ПОИСК МОНТИРУЕМОГО ФАЙЛА С УСТАНОВКОЙ СООТВЕСТВУЮЩЕГО БИТА
  1013. FINDMNTD0       CALL FINDMNTD1
  1014.                 EX AF,AF'
  1015.                 LD A,IXL
  1016.                 AND 0XC0
  1017.                 RLCA
  1018.                 RLCA                            ;НОМЕР ТЕКУЩЕГО МОНТИРУЕМОГО ДИСКОВОДА
  1019.                 INC A
  1020.                 LD B,A
  1021.                 LD A,%11110111
  1022.                 RLCA
  1023.                 DJNZ $-1                        ;УСТАНОВКА МАСКИ МОНТИРУЕМОГО ДИСКОВОДА
  1024.                 LD C,A                          ;МАСКА
  1025.                 CPL
  1026.                 LD B,A                          ;БИТ
  1027.                 LD A,IYH
  1028.                 AND C                           ;СБРОСИЛИ БИТ СМОНТИРОВАННОГО ДИСКОВОДА
  1029.                 LD IYH,A
  1030.                 EX AF,AF'
  1031.                 RET C                           ;ВЫХОД ЕСЛИ ФАЙЛ НЕ НАЙДЕН
  1032.                 LD A,IYH
  1033.                 OR B                            ;УСТАНОВИЛИ БИТ ЕСЛИ ФАЙЛ НАЙДЕН
  1034.                 LD IYH,A
  1035.                 RET
  1036.  
  1037. ;СОХРАНЕНИЕ ТЕКУЩЕГО ПУТИ
  1038. STORE_PATH      PUSH AF
  1039.                 EVOPORT WIN_P5,PAGE_MOUNTER
  1040.                 LD A,(SETDVOL)                  ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  1041.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4 ;+СТАРШИЙ БАЙТ АДРЕСА ПУТИ
  1042.                 LD H,A
  1043.                 LD DE,BUF_256
  1044.                 LD BC,0X100
  1045.                 LD L,C
  1046.                 LDIR
  1047. STOREPATH1      POP AF
  1048.                 RET
  1049.  
  1050. ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕГО ПУТИ
  1051. RESTORE_PATH    PUSH AF
  1052.                 EVOPORT WIN_P5,PAGE_MOUNTER
  1053.                 LD A,(SETDVOL)                  ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  1054.                 ADD A,HIGH (TEK_BUFPATH+CPU5)+4 ;+СТАРШИЙ БАЙТ АДРЕСА ПУТИ
  1055.                 LD D,A
  1056.                 LD HL,BUF_256
  1057.                 LD BC,0X100
  1058.                 LD E,C
  1059.                 LDIR
  1060. RESTOREPATH1    POP AF
  1061.                 RET
  1062.  
  1063. ;ПОИСК МОНТИРУЕМОГО ФАЙЛА
  1064. FINDMNTD1       LD A,IXL
  1065.                 RLCA
  1066.                 RLCA
  1067.                 AND 3
  1068.                 ADD A,HIGH (BUF_PATHMOUNT+CPU5)
  1069.                 LD D,A
  1070.                 LD E,0                          ;DE=АДРЕС БУФЕРА СТРОКИ ОПИСАТЕЛЯ МОНТИРУМОГО ФАЙЛА
  1071.                 LD A,(DE)                       ;ВЗЯЛИ БУКВУ УСТРОЙСТВА ГДЕ ФАЙЛ ИСКАТЬ
  1072.                 INC DE
  1073.                 INC DE
  1074.                 INC DE
  1075.                 AND A
  1076.                 SCF
  1077.                 RET Z
  1078.                 SUB "E"                         ;КОНВЕРСИЯ БУКВЫ В НОМЕР
  1079.                 PUSH DE
  1080.                 CALL SET_VOL_MNT                ;ПЕРЕКЛЮЧИЛИСЬ НА ЭТО УСТРОЙСТВО
  1081.                 CALL STORE_PATH                 ;СОХРАНИЛИ ТЕКУЩИЙ ПУТЬ
  1082.                 LD HL,(ROOTCLS)
  1083.                 LD (TEK_DIR),HL
  1084.                 LD HL,(ROOTCLS+2)
  1085.                 LD (TEK_DIR+2),HL               ;ПЕРЕШЛИ В КОРЕНЬ УСТРОЙСТВА
  1086.                 CALL INIRTSC                    ;ИНИЦИАЛИЗАЦИЯ ЕГО ПЕРЕМЕННЫХ
  1087.                 EVOPORT WIN_P5,PAGE_MOUNTER
  1088.                 POP HL
  1089.                 CALL FNDBUF                     ;РАСПАКОВКА ТЕКСТОВОЙ СТРОКИ
  1090. FINDMNTD13      PUSH HL
  1091.                 CALL POSTF02                    ;СБРОС ТЕКУЩЕГО НОМЕРА ФАЙЛА В 0
  1092.                 CALL FINDMNTD3                  ;ПОИСК В ТЕКУЩЕЙ ДИРЕКТОРИИ
  1093.                 POP DE
  1094.                 JP C,RESTORE_PATH               ;ВОССТАНОВИЛИ ТЕКУЩИЙ ПУТЬ
  1095.                 LD BC,0X0B
  1096.                 ADD HL,BC
  1097.                 LD A,(HL)
  1098.                 SBC HL,BC
  1099.                 AND 0X10
  1100.                 JR Z,FINDMNTD23                 ;ЕСЛИ ЭТО ФАЙЛ НАЙДЕН, ТО ОН НАЙДЕН
  1101.                 PUSH DE
  1102.                 CALL ENTER_DIR                  ;ИНАЧЕ ВХОДИМ В ДИРЕКТОРИЮ
  1103.                 CALL POSTF02                    ;СБРОС ТЕКУЩЕГО НОИЕРА ФАЙЛА В 0
  1104.                 POP HL
  1105.                 LD A,(HL)
  1106.                 AND A
  1107.                 SCF
  1108.                 JP Z,RESTORE_PATH               ;ВОССТАНОВИЛИ ТЕКУЩИЙ ПУТЬ
  1109.                 CALL FNDBUF                     ;РАСПАКОВЫВАЕМ СЛЕДУЮЩУЮ ЧАСТЬ СТРОКИ
  1110.                 JR FINDMNTD13                   ;ПРОДОЛЖАЕМ ПОИСК
  1111.  
  1112. FINDMNTD23      LD A,IXL
  1113.                 RLCA
  1114.                 RLCA
  1115.                 LD E,IXL
  1116.                 LD D,IXH                        ;DE=КУДА ОПИСАТЕЛЬ ПЕРЕНОСИТЬ
  1117.                 LD (IX+0X28),A                  ;НОМЕР МОНТИРУЕМОГО ДИСКОВОДА
  1118.                 PUSH HL
  1119.                 LD BC,0X20
  1120.                 LDIR
  1121.                 POP HL
  1122.                 PUSH IY
  1123.                 CALL IOPEN_MOUNT
  1124.                 POP IY
  1125.                 XOR A
  1126.                 JP RESTORE_PATH                 ;ВОССТАНОВИЛИ ТЕКУЩИЙ ПУТЬ
  1127.  
  1128. FINDMNTD4       CALL NXTLEGZ
  1129. FINDMNTD3       PUSH HL
  1130.                 LD DE,FB_EXT
  1131.                 CALL ICMP_NAME
  1132.                 POP HL
  1133.                 RET Z
  1134.                 LD A,(HL)
  1135.                 AND A
  1136.                 JR NZ,FINDMNTD4
  1137.                 SCF
  1138.                 RET
  1139.  
  1140. REST_NAMELOAD   LD HL,NAME_RAMDISK-CPU6
  1141.                 LD DE,(RREG_L)
  1142.                 LD BC,0X20
  1143.                 JP LDIR_BYTES
  1144.  
  1145. STOR_NAMELOAD   LD HL,(RREG_L)
  1146.                 LD DE,NAME_RAMDISK-CPU6
  1147.                 LD BC,0X20
  1148.                 JP LDIR_BYTES
  1149.  
  1150. GET_MOUNTED     EVOPORT WIN_P5,PAGE_MOUNTER
  1151.                 LD HL,MOUNT_DRIVES-CPU6
  1152.                 LD DE,(RREG_L)
  1153.                 LD BC,0X100
  1154.                 JP LDIR_BYTES
  1155.  
  1156. CMP_DRIVE       EVOPORT WIN_P5,PAGE_MOUNTER
  1157.                 LD A,(RREG_A)
  1158.                 AND 3
  1159.                 RLCA
  1160.                 RLCA
  1161.                 LD L,A
  1162.                 LD H,HIGH (MOUNT_DRIVES)
  1163.                 LD A,(HL)
  1164.                 AND A                           ;ЕСЛИ НЕ ПРИМОНТИРОВАН,
  1165.                 SCF                             ;ТО ДИСКА НЕТ
  1166.                 JR Z,CMP_DRIVE1
  1167.                 XOR A
  1168. CMP_DRIVE1      PUSH AF
  1169.                 POP HL
  1170.                 LD (RREG_F),HL
  1171.                 RET
  1172.  
  1173. CLOSEMOUNT      EVOPORT WIN_P5,PAGE_MOUNTER
  1174.                 LD A,(RREG_A)
  1175.                 LD B,A
  1176.                 RRCA
  1177.                 RRCA
  1178.                 LD L,A
  1179.                 LD H,HIGH (MOUNT_DRIVES)
  1180.                 LD (HL),0
  1181.                 LD A,B
  1182.                 ADD A,HIGH (BUF_PATHMOUNT+CPU5)
  1183.                 LD H,A
  1184.                 LD L,0
  1185.                 LD (HL),L
  1186.                 INC B
  1187.                 LD A,%11110111
  1188.                 RLCA
  1189.                 DJNZ $-1
  1190.                 LD B,A
  1191. ;               IF NEWDOS=1
  1192. ;               CALL RD_DRIVE_INDOS
  1193. ;               ELSE
  1194.                 IN A,(RW_PORT0)
  1195. ;               ENDIF
  1196.                 AND B
  1197. ;               IF NEWDOS=1
  1198. ;WR_DRIVE_INDOS PUSH BC
  1199. ;               PUSH HL
  1200. ;               LD BC,WIN_P2
  1201. ;               LD HL,PAGE_EVODOS
  1202. ;               OUT (C),L
  1203. ;               LD (CPU6+DRIVE_IN_DOS),A
  1204. ;               OUT (C),H
  1205. ;               POP HL
  1206. ;               POP BC
  1207. ;               ELSE
  1208.                 OUT (RW_PORT0),A
  1209. ;               ENDIF
  1210.                 RET
  1211.  
  1212. ;               IF NEWDOS=1
  1213. ;RD_DRIVE_INDOS PUSH BC
  1214. ;               PUSH HL
  1215. ;               EVOPORT WIN_P2,PAGE_EVODOS
  1216. ;               LD HL,(CPU6+DRIVE_IN_DOS)
  1217. ;               XOR A
  1218. ;               OUT (C),A
  1219. ;               LD A,L
  1220. ;               POP HL
  1221. ;               POP BC
  1222. ;               RET
  1223. ;               ENDIF
  1224.  
  1225. ;РАСПАКОВЩИК ПУТИ К ФАЙЛУ
  1226. ;HL=АДРЕС ТЕКСТОВОЙ СТРОКИ
  1227. FNDBUF          LD BC,0X0802
  1228.                 LD DE,FB_EXT
  1229. FNDBUF4         LD A,(HL)
  1230.                 INC HL
  1231.                 CP "."
  1232.                 JR Z,FNDBUF2
  1233.                 CP "/"
  1234.                 JR Z,FNDBUF5
  1235.                 LD (DE),A
  1236.                 INC DE
  1237.                 DJNZ FNDBUF4
  1238.                 LD A,(HL)
  1239.                 AND A
  1240.                 RET Z
  1241.                 INC HL
  1242.                 JR FNDBUF3
  1243.  
  1244. FNDBUF5         LD A,C
  1245.                 AND A
  1246.                 RET Z
  1247. FNDBUF2         LD A,B
  1248.                 AND A
  1249.                 JR Z,FNDBUF3
  1250.                 LD A," "
  1251.                 LD (DE),A
  1252.                 INC DE
  1253.                 DJNZ $-2
  1254. FNDBUF3         LD B,3
  1255.                 DEC C
  1256.                 DEC HL
  1257.                 LD A,(HL)
  1258.                 CP "/"
  1259.                 JR Z,FNDBUF4
  1260.                 INC HL
  1261.                 JR FNDBUF4
  1262.