Subversion Repositories pentevo

Rev

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

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