Subversion Repositories pentevo

Rev

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

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