Subversion Repositories pentevo

Rev

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

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