Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 27.05.2012 savelij
  3.  
  4. ;32 БАЙТА ОПИСАТЕЛЬ ПРИМОНТИРОВАННОГО ФАЙЛА
  5. ;00...  | ОПИСАТЕЛЬ
  6. ;...1F  | ПРИМОНТИРОВАННОГО ФАЙЛА
  7. ;+20    1 ФЛАГОВЫЙ
  8. ;        7-
  9. ;        6-
  10. ;        5-
  11. ;        4-
  12. ;        3-
  13. ;        2-
  14. ;        1-
  15. ;        0-
  16. ;+21    1 ТИП ОБРАЗА ПО РАСШИРЕНИЮ
  17. ;+22    1 ШАГ КЛАСТЕРОВ
  18. ;+23    1 ТИП РАЗДЕЛА
  19. ;+24    1 НОМЕР ВЫБРАННОГО РАЗДЕЛА
  20. ;+25    2 АДРЕС ВЫЗЫВАЕМОГО ДРАЙВЕРА ДЛЯ РАБОТЫ С ПРИМОНТИРОВАННЫМ ОБРАЗОМ
  21. ;+27    2 АДРЕС ВЫЗЫВАЕМОГО ДРАЙВЕРА ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  22. ;+28    1 НОМЕР МОНТИРУМОГО ДИСКОВОДА
  23.  
  24. MOUNTER         CALL 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
  40.                 DW GET_MOUNTED
  41.                 DW CLOSEMOUNT
  42.  
  43. OPEN_MOUNT      LD IYL,INTERNAL
  44.                 LD BC,WIN_P1
  45.                 LD A,PAGE_MOUNTER
  46.                 OUT (C),A
  47.                 LD A,(RREG_A)                   ;ВЗЯЛИ НОМЕР МОНТИРУЕМОГО ДИСКОВОДА
  48.                 ADD A,HIGH (BUF_PATHMOUNT+CPU1)
  49.                 LD D,A
  50.                 LD E,0                          ;DE=АДРЕС БУФЕРА ПУТЕЙ ПРИМОНТИРОВАННЫХ ФАЙЛОВ
  51.                 LD A,(SETDVOL)                  ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  52.                 ADD A,HIGH (TEK_BUFPATH+CPU1)+4
  53.                 LD H,A
  54.                 LD L,E                          ;HL=АДРЕС ПУТИ НА ТЕКУЩЕМ УСТРОЙСТВЕ
  55.                 LD BC,0X100
  56.                 PUSH DE
  57.                 LDIR                            ;ПЕРЕНЕСЛИ ПУТЬ
  58.                 CALL READ_DIR                   ;ПРОЧИТАЛИ ОПИСАТЕЛЬ МОНТИРУЕМОГО ФАЙЛА
  59.                 POP DE
  60.                 PUSH HL
  61. OPENMOUNT05     LD A,(DE)
  62.                 INC DE
  63.                 AND A
  64.                 JR NZ,OPENMOUNT05
  65.                 DEC DE
  66.                 LD BC,0X8FF
  67. OPENMOUNT01     LDI
  68.                 LD A,(HL)
  69.                 CP "!"
  70.                 JR C,OPENMOUNT03
  71.                 DJNZ OPENMOUNT01
  72.                 LD A,"."
  73.                 LD (DE),A
  74.                 INC DE
  75.                 JR OPENMOUNT06
  76.  
  77. OPENMOUNT03     INC HL
  78.                 DJNZ OPENMOUNT03
  79.                 DEC HL
  80.                 LD A,"."
  81.                 LD (DE),A
  82.                 INC DE
  83. OPENMOUNT06     LD B,3
  84. OPENMOUNT02     LDI
  85.                 LD A,(HL)
  86.                 CP "!"
  87.                 JR C,OPENMOUNT04
  88.                 DJNZ OPENMOUNT02
  89. OPENMOUNT04     XOR A
  90.                 LD (DE),A
  91.                 POP HL
  92.                 LD A,(RREG_A)
  93.                 PUSH HL
  94.                 LD B,A
  95.                 RRCA
  96.                 RRCA
  97.                 LD E,A
  98.                 LD D,HIGH (MOUNT_DRIVES)
  99.                 LD IXH,D
  100.                 LD IXL,E                        ;IX=АДРЕС ОПИСАТЕЛЯ ПРИМОНТИРОВАННОГО ФАЙЛА
  101.                 LD (IX+0X28),B
  102.                 LD BC,0X20
  103.                 LDIR
  104.                 LD A,(IX+0X28)
  105.                 LD D,A
  106.                 INC A
  107.                 LD H,0XF7
  108. OPENMOUNT1      RLC H
  109.                 DEC A
  110.                 JR NZ,OPENMOUNT1
  111.                 IN A,(RW_PORT0)
  112.                 AND H
  113.                 LD L,A
  114.                 LD A,H
  115.                 CPL
  116.                 OR L
  117.                 OUT (RW_PORT0),A                ;УСТАНОВКА БИТА ПРИМОНТИРОВАННОГО ДИСКОВОДА
  118.                 LD BC,WIN_P1
  119.                 LD A,PAGE_MOUNTER
  120.                 OUT (C),A
  121.                 POP HL
  122. ;HL=АДРЕС ОПИСАТЕЛЯ МОНТИРУЕМОГО ФАЙЛА
  123. IOPEN_MOUNT     LD DE,FILE_EXT
  124.                 CALL CP_EXT
  125.                 LD (IX+0X21),C                  ;ТИП ОБРАЗА ПО РАСШИРЕНИЮ
  126.                 CALL ICOM_DEV
  127.                 DB Kol_vol
  128.                 LD (IX+0X23),A                  ;ТИП РАЗДЕЛА
  129.                 LD (IX+0X24),D                  ;НОМЕР ВЫБРАННОГО РАЗДЕЛА
  130.                 LD L,D
  131.                 LD H,0
  132.                 ADD HL,HL
  133.                 ADD HL,HL
  134.                 ADD HL,HL
  135.                 LD DE,BUF_TABLVOL               ;АДРЕС ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
  136.                 ADD HL,DE
  137.                 LD A,(HL)
  138.                 SUB 4
  139.                 LD HL,COMSDZ
  140.                 JR Z,OPENMOUNT6
  141.                 DEC A
  142.                 LD HL,COMSDG
  143.                 JR Z,OPENMOUNT6
  144.                 LD HL,COMHDDN
  145. OPENMOUNT6      LD (IX+0X25),L
  146.                 LD (IX+0X26),H
  147.  
  148.                 LD E,(IX+0X1D)
  149.                 LD D,(IX+0X1E)
  150.                 LD L,(IX+0X1F)                  ;LDE=РАЗМЕР ФАЙЛА/256
  151.                 LD A,(BYTSSEC)
  152. OPENMOUNT3      SRL L
  153.                 RR D
  154.                 RR E
  155.                 RRCA
  156.                 JR NC,OPENMOUNT3                ;LDE=КОЛИЧЕСТВО КЛАСТЕРОВ
  157.                 LD IY,INTERNAL
  158.                 LD A,D
  159.                 REPT 3
  160.                 SRL L
  161.                 RR D
  162.                 ENDM
  163.                 AND 7
  164.                 JR Z,OPENMOUNT4
  165.                 INC IYH
  166. OPENMOUNT4      LD A,L
  167.                 OR D
  168.                 JR Z,OPENMOUNT5                 ;ЕСЛИ КЛАСТЕРОВ МЕНЕЕ 100
  169.                 SRL L
  170.                 RR D
  171.                 INC IYH
  172.                 JR OPENMOUNT4
  173.  
  174. OPENMOUNT5      LD A,IYH
  175.                 LD (IX+0X22),A                  ;ШАГ КЛАСТЕРОВ
  176.                 LD A,(IX+0X28)
  177.                 ADD A,A
  178.                 ADD A,A
  179.                 ADD A,HIGH (MOUNT_CLS+CPU1)
  180.                 LD H,A
  181.                 LD L,0
  182.                 LD C,(IX+0X14)
  183.                 LD B,(IX+0X15)
  184.                 LD E,(IX+0X1A)
  185.                 LD D,(IX+0X1B)
  186.                 JR OPENMOUNT9
  187.  
  188. OPENMOUNT7      AND A
  189.                 JR Z,OPENMOUNT9
  190.                 DEC IYH
  191.                 JR NZ,OPENMOUNT8
  192. OPENMOUNT9      LD A,(IX+0X22)
  193.                 ADD A,A
  194.                 ADD A,A
  195.                 ADD A,A
  196.                 LD IYH,A
  197.                 LD (HL),E
  198.                 INC H
  199.                 LD (HL),D
  200.                 INC H
  201.                 LD (HL),C
  202.                 INC H
  203.                 LD (HL),B
  204.                 DEC H
  205.                 DEC H
  206.                 DEC H
  207.                 INC L
  208. OPENMOUNT8      PUSH HL
  209.                 CALL RDFATZP
  210.                 CALL LST_CLS
  211.                 POP HL
  212.                 LD A,IYH
  213.                 JR NC,OPENMOUNT7
  214.                 RET
  215.  
  216. FILE_EXT        DZ "TRD"
  217.  
  218. RDWR_MOUNT      LD A,(RREG_A)
  219.                 AND 3
  220.                 RRCA
  221.                 RRCA
  222.                 LD IXL,A
  223.                 LD IXH,HIGH (MOUNT_DRIVES)      ;IX=ОПИСАТЕЛЬ ДИСКОВОДОВ A-D
  224.                 LD BC,WIN_P1
  225.                 LD A,PAGE_FATVARS
  226.                 OUT (C),A
  227.                 LD A,(SETDVOL)
  228.                 ADD A,HIGH (CPU1+BUF_ALLVOL)+4
  229.                 LD D,A
  230.                 LD E,0
  231.                 LD HL,BUF_TEKVOL
  232.                 LD BC,0X100
  233.                 LDIR
  234.                 LD A,(IX+0X24)
  235.                 ADD A,HIGH (CPU1+BUF_ALLVOL)+4
  236.                 LD H,A
  237.                 LD L,0
  238.                 LD DE,BUF_TEKVOL
  239.                 LD BC,0X100
  240.                 LDIR
  241.                 LD BC,WIN_P1
  242.                 LD A,PAGE_MOUNTER
  243.                 OUT (C),A
  244.                 LD HL,(GO_DEV)
  245.                 LD (IX+0X27),L
  246.                 LD (IX+0X28),H
  247.                 LD L,(IX+0X25)
  248.                 LD H,(IX+0X26)
  249.                 LD (GO_DEV),HL
  250.                 LD HL,(RREG_E)
  251.                 DEC L
  252.                 LD E,L
  253.                 LD L,H
  254.                 LD H,0
  255.                 LD D,H
  256.                 ADD HL,HL
  257.                 ADD HL,HL
  258.                 ADD HL,HL
  259.                 ADD HL,HL
  260.                 ADD HL,DE                       ;HL=НОМЕР СЕКТОРА В ФАЙЛЕ (256 БАЙТ)
  261.                 PUSH HL
  262.                 LD A,(BYTSSEC)
  263. RDWRMOUNT1      SRL H
  264.                 RR L
  265.                 RRCA
  266.                 JR NC,RDWRMOUNT1
  267.                 LD A,(IX+0X22)
  268.                 AND A
  269.                 LD A,L
  270.                 JR Z,RDWRMOUNT2
  271.                 REPT 3
  272.                 SRL H
  273.                 RR L
  274.                 ENDM
  275. RDWRMOUNT2      EX AF,AF'
  276.                 LD A,(RREG_A)
  277.                 ADD A,A
  278.                 ADD A,A
  279.                 ADD A,HIGH (MOUNT_CLS+CPU1)
  280.                 LD H,A
  281.                 LD E,(HL)
  282.                 INC H
  283.                 LD D,(HL)
  284.                 INC H
  285.                 LD C,(HL)
  286.                 INC H
  287.                 LD B,(HL)
  288.                 LD A,(IX+0X22)
  289.                 AND A
  290.                 JR Z,RDWRMOUNT3
  291.                 EX AF,AF'
  292.                 AND 7
  293.                 JR Z,RDWRMOUNT3
  294. RDWRMOUNT4      PUSH AF
  295.                 CALL RDFATZP
  296.                 POP AF
  297.                 DEC A
  298.                 JR NZ,RDWRMOUNT4
  299. RDWRMOUNT3      CALL REALSEC
  300.                 POP HL
  301.                 PUSH HL
  302.                 SRL L
  303.                 LD A,(BYTSSEC)
  304.                 DEC A
  305.                 JR Z,RDWRMOUNT5
  306.                 AND L
  307.                 LD L,A
  308.                 LD H,0
  309.                 ADD HL,DE
  310.                 EX DE,HL
  311.                 LD HL,0
  312.                 ADC HL,BC
  313.                 LD B,H
  314.                 LD C,L
  315. RDWRMOUNT5      CALL LOADLST
  316.                 POP BC
  317.                 LD A,C
  318.                 AND 1
  319.                 ADD A,H
  320.                 LD H,A
  321.                 LD BC,CPU3
  322.                 ADD HL,BC                       ;АДРЕС БУФЕРА В ОКНЕ 1
  323.                 CALL LDIR_SEC
  324.                 LD A,(RREG_A)                   ;ЧТЕНИЕ ИЛИ ЗАПИСЬ
  325.                 AND 0X80
  326.                 CALL NZ,LSTSAVE
  327.                 LD HL,RREG_H
  328.                 INC (HL)
  329.                 LD L,(IX+0X27)
  330.                 LD H,(IX+0X28)
  331.                 LD (GO_DEV),HL
  332.                 LD BC,WIN_P1
  333.                 LD A,PAGE_FATVARS
  334.                 OUT (C),A
  335.                 LD A,(SETDVOL)
  336.                 ADD A,HIGH (CPU1+BUF_ALLVOL)+4
  337.                 LD H,A
  338.                 LD L,0
  339.                 LD DE,BUF_TEKVOL
  340.                 LD BC,0X100
  341.                 LDIR
  342.                 LD (LSTLOAD+2),HL
  343.                 RET
  344.  
  345. LDIR_SEC        EXX
  346.                 LD BC,WIN_P1
  347.                 XOR A
  348.                 OUT (C),A                       ;СТРАНИЦА ПЕРЕМЕННЫХ В ОКНО 1
  349.                 LD HL,CPU3
  350.                 ADD HL,SP
  351.                 LD SP,HL                        ;СТЕК ТОЖЕ В ОКНО 1
  352.                 LD A,(R_7FFD)                   ;ПРОВЕРКА В КАКОМ МАППЕРЕ
  353.                 AND 0X10
  354.                 LD HL,B0_CPU0-CPU1              ;ДЛЯ 0 МАППЕРА
  355.                 JR Z,LDIRSEC1
  356.                 LD HL,B1_CPU0-CPU1              ;ДЛЯ 1 МАППЕРА
  357. LDIRSEC1        EXX
  358.                 LD BC,CPU2                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X8000 ВЫШЕ
  359.                 EXX
  360.                 LD A,(RREG_H-CPU1)              ;ПРОВЕРКА СТАРШЕГО БАЙТА АДРЕСА
  361.                 CP 0X40
  362.                 JR C,LDIRSEC2                   ;УСТАНОВКА ДЛЯ ОКНО 0,1
  363.                 INC HL
  364.                 INC HL
  365.                 EXX
  366.                 LD BC,CPU1                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 ВЫШЕ
  367.                 EXX
  368.                 CP 0X80
  369.                 JR C,LDIRSEC2                   ;УСТАНОВКА ДЛЯ ОКОН 1,2
  370.                 INC HL
  371.                 INC HL
  372.                 EXX
  373.                 LD BC,CPU0                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ БЕЗ ИЗМЕНЕНИЙ
  374.                 EXX
  375.                 CP 0XC0
  376.                 JR C,LDIRSEC2                   ;УСТАНОВКА ДЛЯ ОКОН 2,3
  377.                 INC HL
  378.                 INC HL
  379.                 EXX
  380.                 LD BC,CPU3                      ;АДРЕС ЧТЕНИЯ/ЗАПИСИ НА 0X4000 НИЖЕ
  381.                 EXX
  382.                 LD B,HIGH (WIN_A2)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  383.                 CALL LDIRSEC4
  384.                 LD DE,0XFFF8
  385.                 ADD HL,DE                       ;АДРЕС ГДЕ КОНФИГ СТРАНИЦ ОСНОВНОЙ ПАМЯТИ ЛЕЖИТ
  386.                 JR LDIRSEC5
  387.                
  388. LDIRSEC2        LD B,HIGH (WIN_A2)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 2
  389.                 CALL LDIRSEC4
  390. LDIRSEC5        LD B,HIGH (WIN_A3)              ;СТАРШИЙ БАЙТ АДРЕСА ПОРТА ОКНА 3
  391.                 CALL LDIRSEC4
  392.                 EXX
  393.                 LD DE,(RREG_L-CPU1)             ;АДРЕС ЧТЕНИЯ/ЗАПИСИ
  394.                 EX DE,HL
  395.                 ADD HL,BC                       ;ИЗМЕНИЛИ АДРЕС ЧТЕНИЯ/ЗАПИСИ
  396.                 EX DE,HL
  397.                 LD A,(RREG_A-CPU1)              ;ЧТЕНИЕ ИЛИ ЗАПИСЬ
  398.                 AND 0X80
  399.                 JR Z,LDIRSEC6
  400.                 EX DE,HL                        ;ДЛЯ ЗАПИСИ МЕНЯЕМ НАПРАЛЕНИЕ ПЕРЕНОСА
  401. LDIRSEC6        LD BC,0X100
  402.                 LDIR
  403.                 LD HL,CPU1
  404.                 ADD HL,SP
  405.                 LD SP,HL                        ;ВЕРНУЛИ АДРЕС СТЕКА В ОКНО 2
  406.                 LD A,0X7F
  407.                 LD BC,WIN_A3
  408.                 OUT (C),A                       ;УБРАЛИ ВОЗМОЖНУЮ ЗАВИСИМОСТЬ В ОКНЕ 3 ОТ ПОРТА 7FFD
  409.                 LD B,HIGH (WIN_A2)
  410.                 OUT (C),A                       ;УБРАЛИ ВОЗМОЖНУЮ ЗАВИСИМОСТЬ В ОКНЕ 2 ОТ ПОРТА 7FFD
  411.                 XOR A
  412.                 LD B,HIGH (WIN_P2)
  413.                 OUT (C),A                       ;ВЕРНУЛИ СТРАНИЦУ ПЕРЕМЕННЫХ В ОКНО 2
  414.                 RET
  415.  
  416. LDIRSEC4        LD E,(HL)                       ;БАЙТ ДЛЯ ЗАПИСИ В ПОРТ
  417.                 INC HL                          ;УКАЗАНИЕ НА БАЙТ АДРЕСА ПОРТА
  418.                 BIT 3,(HL)
  419.                 JR NZ,LDIRSEC3
  420.                 SET 3,B
  421.                 LD A,(HL)
  422.                 AND 3
  423.                 RRCA
  424.                 RRCA
  425.                 OUT (C),A                       ;СНАЧАЛА ПИШЕМ В ПОРТ XFF7
  426.                 RES 3,B
  427. LDIRSEC3        INC HL
  428.                 OUT (C),E                       ;ТЕПЕРЬ ПИШЕМ В ПОРТ X7F7
  429.                 RET
  430.  
  431. TXT_MOUNTER     DZ "IMAGE.MNT"                  ;ИМЯ ДЛЯ ПОИСКА ТЕКСТОВОГО ФАЙЛА С УКАЗАНИЕМ К МОНТИРОВАНИЮ TRD
  432. ETXT_MOUNTER
  433.  
  434. FIND_MOUNTED    LD A,(SETDVOL)
  435.                 LD (SAVE_TEK_VOL),A             ;СОХРАНИЛИ ТЕКУЩЕЕ УСТРОЙСТВО
  436.                 CALL SAVE_FNDVOL                ;СОХРАНИЛИ ПЕРЕМЕННЫЕ ТЕКУЩЕГО УСТРОЙСТВА
  437.                 LD H,CMOS_BYTE_01
  438.                 CALL READCMOS
  439.                 AND AUTOMOUNT                   ;ОПРЕДЕЛЕНИЕ НУЖНО ЛИ ИСКАТЬ ФАЙЛ IMAGE.MNT
  440.                 JP Z,FINDMNTD01
  441. ;ИЩЕМ ФАЙЛ IMAGE.MNT ДЛЯ АВТОМОНТИРОВАНИЯ
  442.                 LD IYL,INTERNAL
  443.                 LD A,(KOLDVOL)
  444.                 DEC A                           ;ИСКАТЬ БУДЕМ НА ПОСЛЕДНЕМ НАЙДЕННОМ РАЗДЕЛЕ
  445.                 CALL SET_VOL_MNT                ;ПЕРЕКЛЮЧИЛСЬ НА ВЫБРАННОЕ УСТРОЙСТВО
  446.                 LD HL,(ROOTCLS)
  447.                 LD (TEK_DIR),HL
  448.                 LD HL,(ROOTCLS+2)
  449.                 LD (TEK_DIR+2),HL               ;ВЫБРАЛИ КОРНЕВОЙ КАТАЛОГ ВЫБРАННОГО УСТРОЙСТВА
  450.                 CALL INIRTSC                    ;ИНИЦИАЛИЗИРОВАЛИ ЕГО ПЕРЕМЕННЫЕ НА ROOTDIR
  451.                 LD HL,TXT_MOUNTER
  452.                 LD DE,BUF_256
  453.                 LD BC,ETXT_MOUNTER-TXT_MOUNTER
  454.                 LDIR                            ;ПЕРЕНЕСЛИ ИМЯ ФАЙЛА ДЛЯ ПОИСКА
  455.                 CALL ICOM_FAT
  456.                 DB Find_name
  457.                 JP C,FINDMNTD01                 ;ФАЙЛ IMAGE.MNT НЕ НАЙДЕН
  458. ;ФАЙЛ НАЙДЕН
  459.                 CALL OPEN_FILE                  ;ОТКРЫВАЕМ ФАЙЛ
  460.                 LD HL,FILE_SRC+0X1F
  461.                 LD A,(HL)
  462.                 DEC HL
  463.                 OR (HL)
  464.                 JP NZ,FINDMNTD01                ;ФАЙЛ НЕ ДОЛЖЕН БЫТЬ БОЛЕЕ 512 БАЙТ
  465.                 DEC HL
  466.                 LD A,(HL)
  467.                 CP 2
  468.                 JP NC,FINDMNTD01                ;ФАЙЛ НЕ ДОЛЖЕН БЫТЬ БОЛЕЕ 512 БАЙТ
  469.                 INC A                           ;ЧИТАТЬ БУДЕМ 1 СЕКТОР ИЗ НАЙДЕННОГО ФАЙЛА
  470.                 LD B,(HL)
  471.                 DEC HL
  472.                 LD C,(HL)                       ;ВЗЯЛИ ДЛИНУ ФАЙЛА В БАЙТАХ
  473.                 PUSH BC                         ;СОХРАНИЛИ ДЛЯ ДАЛЬНЕЙШЕГО ТСПОЛЬЗОВАНИЯ
  474.                 LD IYL,INTERNAL
  475.                 LD HL,CPU2+OFFSET_BUFSYM
  476.                 PUSH HL
  477.                 CALL READ_FILE                  ;ПРОЧИТАЛИ 1 СЕКТОР ИЗ ФАЙЛА
  478.                 LD BC,WIN_P1
  479.                 LD A,PAGE_MOUNTER
  480.                 OUT (C),A
  481.                 POP HL
  482.                 POP BC
  483.                 ADD HL,BC
  484.                 LD (HL),0                       ;УСТАНОВИЛИ ПРИЗНАЙ КОНЦА ФАЙЛА В 0
  485.                 SBC HL,BC
  486. FINDMNTD04      LD A,(HL)
  487.                 AND A
  488.                 JR Z,FINDMNTD01                 ;ВЫХОДИМ ЕСЛИ ФАЙЛ КОНЧИЛСЯ
  489.                 INC HL
  490.                 CP "!"
  491.                 JR C,FINDMNTD04                 ;ЕСЛИ СТРОКА КОНЧИЛАСЬ ПЕРЕНОСИМ ЭТУ СТРОКУ В БУФЕР ПОИСКА
  492.                 DEC HL
  493.                 PUSH HL
  494.                 INC HL
  495.                 CP "a"                          ;ПЕРВЫЙ СИМВОЛ СТРОКИ БУКВА УСТРОЙСТВА
  496.                 JR C,FINDMNTD06                 ;ДОЛЖНА БЫТЬ ТОЛЬКО СИМВОЛ ОТ "A"
  497.                 CP "{"
  498.                 JR NC,FINDMNTD06                ;ДО "Z"
  499.                 AND 0XDF                        ;ПЕРЕВЕЛИ БУКВУ УСТРОЙСТВА В ВЕРХНИЙ РЕГИСТР, ЕСЛИ НУЖНО
  500. FINDMNTD06      SUB "E"                         ;FAT УСТРОЙСТВА НАЧИНАЮТСЯ С БУКВЫ "E"
  501.                 JR C,FINDMNTD02
  502.                 EXX
  503.                 LD C,A                          ;НОМЕР УСТРОЙСТВА ГДЕ ИСКАТЬ ФАЙЛ
  504.                 LD A,(KOLDVOL)                  ;КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
  505.                 CP C
  506.                 EXX
  507.                 JR C,FINDMNTD02
  508.                 LD A,(HL)
  509.                 INC HL
  510.                 CP ":"                          ;РАЗДЕЛИТЕЛЬ ОБЯЗАТЕЛЕН
  511.                 JR NZ,FINDMNTD02
  512.                 LD A,(HL)
  513.                 INC HL
  514.                 CP "/"                          ;РАЗДЕЛИТЕЛЬ ОБЯЗАТЕЛЕН
  515.                 JR NZ,FINDMNTD02
  516. FINDMNTD07      LD A,(HL)
  517.                 INC HL
  518.                 CP "!"
  519.                 JR NC,FINDMNTD07                ;ИЩЕМ КОНЕЦ СТРОКИ
  520.                 LD A,(HL)                       ;БУКВА ДИСКОВОДА НА КОТОРУЮ МОНТИРОВАТЬ
  521.                 INC HL
  522.                 CP "a"
  523.                 JR C,FINDMNTD08
  524.                 CP "{"
  525.                 JR NC,FINDMNTD08
  526.                 AND 0XDF                        ;ПЕРЕВОДИ В ВЕРХНИЙ РЕГИСТР, ЕСЛИ НУЖНО
  527. FINDMNTD08      SUB "A"
  528.                 JR C,FINDMNTD02
  529.                 CP 4
  530.                 JR NC,FINDMNTD02
  531.                 EXX
  532.                 LD B,A                          ;НОМЕР ДИСКОВОДА НА КОТОРЫЙ МОНТИРОВАТЬ
  533.                 EXX
  534.                 LD A,(HL)
  535.                 INC HL
  536.                 CP ":"
  537.                 JR NZ,FINDMNTD02
  538.                 LD D,H
  539.                 LD E,L
  540.                 EX (SP),HL
  541.                 EX DE,HL
  542.                 SCF
  543.                 SBC HL,DE
  544.                 LD B,H
  545.                 LD C,L
  546.                 EX DE,HL
  547.                 EXX
  548.                 LD A,B
  549.                 EXX
  550.                 ADD A,HIGH (BUF_PATHMOUNT+CPU1)
  551.                 LD D,A
  552.                 LD E,0                          ;DE=АДРЕС БУФЕРА ТЕКСТОВОЙ СТРОКИ МОНТИРУЕМОГО ДИСКОВОДА
  553.                 DEC BC
  554.                 DEC BC
  555.                 LDIR                            ;ПЕРЕНЕСЛИ СТРОКУ
  556.                 XOR A
  557.                 LD (DE),A                       ;ПРИНУДИТЕЛЬНОЕ ЗАВЕРШЕНИЕ СТРОКИ МОНТИРОВАНИЯ
  558.                 POP HL
  559.                 JR FINDMNTD04
  560.  
  561. FINDMNTD02      LD A,(HL)
  562.                 INC HL
  563.                 AND A
  564.                 JR Z,FINDMNTD01
  565.                 CP " "
  566.                 JR NC,FINDMNTD02
  567.                 POP DE
  568.                 JR FINDMNTD04
  569.  
  570. FINDMNTD01      LD BC,WIN_P1
  571.                 LD A,PAGE_MOUNTER
  572.                 OUT (C),A
  573.                 LD BC,0X400
  574.                 LD IX,MOUNT_DRIVES              ;БУФЕР ОПИСАТЕЛЕЙ МОНТИРУЕМЫХ ФАЙЛОВ
  575. FINDMNTD2       PUSH BC
  576.                 CALL FINDMNTD0                  ;ИЩЕМ УКАЗАННЫЙ ФАЙЛ ДЛЯ МОНТИРОВАНИЯ
  577.                 JR NC,FINDMNT5
  578.                 LD (IX+0),0                     ;ЕСЛИ ФАЙЛ НЕ НАЙДЕН, ТО ПРИНУДИТЕЛЬНО ДЕМОНТИРУЕМ ОБРАЗ
  579. FINDMNT5        LD BC,0X40
  580.                 ADD IX,BC                       ;СЛЕДУЮЩИЙ ОПИСАТЕЛЬ МОНТИРУЕМОГО ФАЙЛА
  581.                 POP BC
  582.                 DJNZ FINDMNTD2
  583.                 LD A,IYH
  584.                 OUT (RW_PORT0),A                ;УСТАНОВИЛИ ЗНАЧЕНИЕ ПОРТА ДЛЯ EVO-DOS
  585.                 LD A,(SAVE_TEK_VOL)
  586.                 CALL SET_VOL_MNT                ;ВОССТАНОВИЛИ ТЕКУЩЕЕ ВЫБРАННОЕ УСТРОЙСТВО
  587.                 CALL INIRTSC                    ;ПРОИНИТИЛИ ЕГО ПЕРЕМЕННЫЕ
  588.                 JP LOAD_FNDVOL                  ;ВЕРНУЛИ НА МЕСТО ОПИСАТЕЛЬ УСТРОЙСТВА
  589.  
  590. ;ПОИСК МОНТИРУЕМОГО ФАЙЛА С УСТАНОВКОЙ СООТВЕСТВУЮЩЕГО БИТА
  591. FINDMNTD0       CALL FINDMNTD1
  592.                 EX AF,AF'
  593.                 LD A,IXL
  594.                 AND 0XC0
  595.                 RLCA
  596.                 RLCA                            ;НОМЕР ТЕКУЩЕГО МОНТИРУЕМОГО ДИСКОВОДА
  597.                 INC A
  598.                 LD B,A
  599.                 LD A,%11110111
  600.                 RLCA
  601.                 DJNZ $-1                        ;УСТАНОВКА МАСКИ МОНТИРУЕМОГО ДИСКОВОДА
  602.                 LD C,A                          ;МАСКА
  603.                 CPL
  604.                 LD B,A                          ;БИТ
  605.                 LD A,IYH
  606.                 AND C                           ;СБРОСИЛИ БИТ СМОНТИРОВАННОГО ДИСКОВОДА
  607.                 LD IYH,A
  608.                 EX AF,AF'
  609.                 RET C                           ;ВЫХОД ЕСЛИ ФАЙЛ НЕ НАЙДЕН
  610.                 LD A,IYH
  611.                 OR B                            ;УСТАНОВИЛИ БИТ ЕСЛИ ФАЙЛ НАЙДЕН
  612.                 LD IYH,A
  613.                 RET
  614.  
  615. ;СОХРАНЕНИЕ ТЕКУЩЕГО ПУТИ
  616. STORE_PATH      PUSH AF
  617.                 LD BC,WIN_P1
  618.                 LD A,PAGE_MOUNTER
  619.                 OUT (C),A
  620.                 LD A,(SETDVOL)                  ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  621.                 ADD A,HIGH (TEK_BUFPATH+CPU1)+4 ;+СТАРШИЙ БАЙТ АДРЕСА ПУТИ
  622.                 LD H,A
  623.                 LD DE,BUF_256
  624.                 LD BC,0X100
  625.                 LD L,C
  626.                 LDIR
  627. STOREPATH1      POP AF
  628.                 RET
  629.  
  630. ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕГО ПУТИ
  631. RESTORE_PATH    PUSH AF
  632.                 LD BC,WIN_P1
  633.                 LD A,PAGE_MOUNTER
  634.                 OUT (C),A
  635.                 LD A,(SETDVOL)                  ;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА
  636.                 ADD A,HIGH (TEK_BUFPATH+CPU1)+4 ;+СТАРШИЙ БАЙТ АДРЕСА ПУТИ
  637.                 LD D,A
  638.                 LD HL,BUF_256
  639.                 LD BC,0X100
  640.                 LD E,C
  641.                 LDIR
  642. RESTOREPATH1    POP AF
  643.                 RET
  644.  
  645. ;ПОИСК МОНТИРУЕМОГО ФАЙЛА
  646. FINDMNTD1       LD A,IXL
  647.                 RLCA
  648.                 RLCA
  649.                 AND 3
  650.                 ADD A,HIGH (BUF_PATHMOUNT+CPU1)
  651.                 LD D,A
  652.                 LD E,0                          ;DE=АДРЕС БУФЕРА СТРОКИ ОПИСАТЕЛЯ МОНТИРУМОГО ФАЙЛА
  653.                 LD A,(DE)                       ;ВЗЯЛИ БУКВУ УСТРОЙСТВА ГДЕ ФАЙЛ ИСКАТЬ
  654.                 INC DE
  655.                 INC DE
  656.                 INC DE
  657.                 AND A
  658.                 SCF
  659.                 RET Z
  660.                 SUB "E"                         ;КОНВЕРСИЯ БУКВЫ В НОМЕР
  661.                 PUSH DE
  662.                 CALL SET_VOL_MNT                ;ПЕРЕКЛЮЧИЛИСЬ НА ЭТО УСТРОЙСТВО
  663.                 CALL STORE_PATH                 ;СОХРАНИЛИ ТЕКУЩИЙ ПУТЬ
  664.                 LD HL,(ROOTCLS)
  665.                 LD (TEK_DIR),HL
  666.                 LD HL,(ROOTCLS+2)
  667.                 LD (TEK_DIR+2),HL               ;ПЕРЕШЛИ В КОРЕНЬ УСТРОЙСТВА
  668.                 CALL INIRTSC                    ;ИНИЦИАЛИЗАЦИЯ ЕГО ПЕРЕМЕННЫХ
  669.                 LD BC,WIN_P1
  670.                 LD A,PAGE_MOUNTER
  671.                 OUT (C),A
  672.                 POP HL
  673.                 CALL FNDBUF                     ;РАСПАКОВКА ТЕКСТОВОЙ СТРОКИ
  674. FINDMNTD13      PUSH HL
  675.                 CALL POSTF02                    ;СБРОС ТЕКУЩЕГО НОМЕРА ФАЙЛА В 0
  676.                 CALL FINDMNTD3                  ;ПОИСК В ТЕКУЩЕЙ ДИРЕКТОРИИ
  677.                 POP DE
  678.                 JP C,RESTORE_PATH               ;ВОССТАНОВИЛИ ТЕКУЩИЙ ПУТЬ
  679.                 LD BC,0X0B
  680.                 ADD HL,BC
  681.                 LD A,(HL)
  682.                 SBC HL,BC
  683.                 AND 0X10
  684.                 JR Z,FINDMNTD23                 ;ЕСЛИ ЭТО ФАЙЛ НАЙДЕН, ТО ОН НАЙДЕН
  685.                 PUSH DE
  686.                 CALL ENTER_DIR                  ;ИНАЧЕ ВХОДИМ В ДИРЕКТОРИЮ
  687.                 CALL POSTF02                    ;СБРОС ТЕКУЩЕГО НОИЕРА ФАЙЛА В 0
  688.                 POP HL
  689.                 LD A,(HL)
  690.                 AND A
  691.                 SCF
  692.                 JP Z,RESTORE_PATH               ;ВОССТАНОВИЛИ ТЕКУЩИЙ ПУТЬ
  693.                 CALL FNDBUF                     ;РАСПАКОВЫВАЕМ СЛЕДУЮЩУЮ ЧАСТЬ СТРОКИ
  694.                 JR FINDMNTD13                   ;ПРОДОЛЖАЕМ ПОИСК
  695.  
  696. FINDMNTD23      LD A,IXL
  697.                 RLCA
  698.                 RLCA
  699.                 LD E,IXL
  700.                 LD D,IXH                        ;DE=КУДА ОПИСАТЕЛЬ ПЕРЕНОСИТЬ
  701.                 LD (IX+0X28),A                  ;НОМЕР МОНТИРУЕМОГО ДИСКОВОДА
  702.                 PUSH HL
  703.                 LD BC,0X20
  704.                 LDIR
  705.                 POP HL
  706.                 PUSH IY
  707.                 CALL IOPEN_MOUNT
  708.                 POP IY
  709.                 XOR A
  710.                 JP RESTORE_PATH                 ;ВОССТАНОВИЛИ ТЕКУЩИЙ ПУТЬ
  711.  
  712. FINDMNTD4       CALL NXTLEGZ
  713. FINDMNTD3       PUSH HL
  714.                 LD DE,FB_EXT
  715.                 CALL ICMP_NAME
  716.                 POP HL
  717.                 RET Z
  718.                 LD A,(HL)
  719.                 AND A
  720.                 JR NZ,FINDMNTD4
  721.                 SCF
  722.                 RET
  723.  
  724. GET_MOUNTED     LD BC,WIN_P1
  725.                 LD A,PAGE_MOUNTER
  726.                 OUT (C),A
  727.                 LD HL,MOUNT_DRIVES-CPU2
  728.                 LD DE,(RREG_L)
  729.                 LD BC,0X100
  730.                 JP LDIR_BYTES
  731. ;               JP MAIN_MEM13
  732.  
  733. CLOSEMOUNT      LD BC,WIN_P1
  734.                 LD A,PAGE_MOUNTER
  735.                 OUT (C),A
  736.                 LD A,(RREG_A)
  737.                 LD B,A
  738.                 RRCA
  739.                 RRCA
  740.                 LD L,A
  741.                 LD H,HIGH (MOUNT_DRIVES)
  742.                 LD (HL),0
  743.                 LD A,B
  744.                 ADD A,HIGH (BUF_PATHMOUNT+CPU1)
  745.                 LD H,A
  746.                 LD L,0
  747.                 LD (HL),L
  748.                 INC B
  749.                 LD A,0XF7
  750.                 RLCA
  751.                 DJNZ $-1
  752.                 LD B,A
  753.                 IN A,(RW_PORT0)
  754.                 AND B
  755.                 OUT (RW_PORT0),A
  756.                 RET
  757.  
  758. ;РАСПАКОВЩИК ПУТИ К ФАЙЛУ
  759. ;HL=АДРЕС ТЕКСТОВОЙ СТРОКИ
  760. FNDBUF          LD BC,0X0802
  761.                 LD DE,FB_EXT
  762. FNDBUF4         LD A,(HL)
  763.                 INC HL
  764.                 CP "."
  765.                 JR Z,FNDBUF2
  766.                 CP "/"
  767.                 JR Z,FNDBUF5
  768.                 LD (DE),A
  769.                 INC DE
  770.                 DJNZ FNDBUF4
  771.                 LD A,(HL)
  772.                 AND A
  773.                 RET Z
  774.                 INC HL
  775.                 JR FNDBUF3
  776.  
  777. FNDBUF5         LD A,C
  778.                 AND A
  779.                 RET Z
  780. FNDBUF2         LD A,B
  781.                 AND A
  782.                 JR Z,FNDBUF3
  783.                 LD A," "
  784.                 LD (DE),A
  785.                 INC DE
  786.                 DJNZ $-2
  787. FNDBUF3         LD B,3
  788.                 DEC C
  789.                 DEC HL
  790.                 LD A,(HL)
  791.                 CP "/"
  792.                 JR Z,FNDBUF4
  793.                 INC HL
  794.                 JR FNDBUF4
  795.