Subversion Repositories pentevo

Rev

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

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