Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 18.12.2013 savelij
  3.  
  4. MASTER          EQU 0
  5. SLAVE           EQU 0X80
  6.  
  7. DRV_A           EQU 0                   ;DRIVE A
  8. DRV_B           EQU 1                   ;DRIVE B
  9. DRV_C           EQU 2                   ;DRIVE C
  10. DRV_D           EQU 3                   ;DRIVE D
  11. SDZ             EQU 4                   ;SD КАРТА НА ZC
  12. SDG             EQU 5                   ;SD КАРТА НА NEOGS
  13. HDDN            EQU 6                   ;HDD NEMO
  14. HDDS            EQU 7                   ;HDD SMUC
  15. HDDV            EQU 8                   ;HDD DIVIDE
  16.  
  17. EXTERNAL        EQU 0                   ;ВНЕШНИЙ ВЫЗОВ
  18. INTERNAL        EQU 1                   ;ВНУТРЕННИЙ ВЫЗОВ
  19. INT4EXT         EQU 3                   ;ВНУТРЕННИЙ ВЫЗОВ ДЛЯ ВЫЗВАВШЕЙ ПРОГИ
  20.  
  21. B_SDZ           EQU %00000001
  22. B_SDG           EQU %00000010
  23. B_HDD           EQU %00000100
  24. B_NEW_SD        EQU %01000000
  25. B_INST_SDG      EQU %10000000
  26.  
  27. ;ВЫЗОВ ВЫБРАННОГО ДРАЙВЕРА
  28. TO_DRV          PUSH HL
  29.                 LD L,A
  30.                 LD A,IYL
  31.                 AND A
  32.                 LD A,L
  33.                 JR NZ,TO_DRV1
  34.                 CALL P5_READ_BYTE
  35.                 LD A,(RREG_A)
  36.                 LD DE,(RREG_E)
  37.                 LD BC,(RREG_C)
  38.                 LD HL,(RREG_L)
  39.                 EX (SP),HL
  40. TO_DRV1         LD HL,(GO_DEV)
  41.                 EX (SP),HL
  42.                 RET
  43.  
  44. ;ВНЕШНИЙ ВЫЗОВ МЕНЕДЖЕРА УСТРОЙСТВ
  45. COM_DEV         EX AF,AF'
  46.                 CALL P5_READ_BYTE
  47.                 LD A,(NEXTBYTERST8)
  48.                 PUSH IY
  49.                 LD IYL,EXTERNAL                 ;ВНЕШНИЙ ВЫЗОВ
  50. NEXT_ICOM_DEV   PUSH IX
  51.                 PUSH HL
  52.                 LD HL,EXITDEV
  53.                 EX (SP),HL
  54.                 PUSH HL
  55.                 ADD A,A
  56.                 ADD A,LOW (TABLDEV)
  57.                 LD L,A
  58.                 ADC A,HIGH (TABLDEV)
  59.                 SUB L
  60.                 LD H,A
  61.                 LD A,(HL)
  62.                 INC HL
  63.                 LD H,(HL)
  64.                 LD L,A
  65.                 EX AF,AF'
  66.                 EX (SP),HL
  67.                 RET
  68.  
  69. EXITDEV         POP IX
  70.                 POP IY
  71.                 RET
  72.  
  73. ;ВНУТРЕННИЙ ВЫЗОВ МЕНЕДЖЕРА УСТРОЙСТВ
  74. ICOM_DEV        EX AF,AF'
  75.                 EX (SP),HL
  76.                 LD A,(HL)
  77.                 INC HL
  78.                 EX (SP),HL
  79.                 PUSH IY
  80.                 LD IYL,INTERNAL                 ;ВНУТРЕННИЙ ВЫЗОВ
  81.                 JR NEXT_ICOM_DEV
  82.  
  83. TABLDEV         DW DEVFIND                      ;00 ПОИСК УСТРОЙСТВ
  84.                 DW SET_VOL                      ;01 ВЫБОР РАЗДЕЛА
  85.                 DW KOL_VOL                      ;02 ЗАПРОС НАЙДЕНОГО
  86.                 DW GET_FNDVOLUME                ;03 ПОЛУЧИТЬ ТАБЛИЦУ НАЙДЕННЫХ РАЗДЕЛОВ
  87.                 DW TO_DRV                       ;04 ВЫЗОВ ДРАЙВЕРА ВЫБРАННОГО УСТРОЙСТВА
  88.                 DW SET_DEVICE                   ;05 УСТАНОВКА БИТОВ УСТРОЙСТВА И LBA РЕЖИМА
  89.                 DW CONTROL_SD                   ;06 КОНТРОЛЬ НАЛИЧИЯ SD КАРТ
  90.                 DW COMHDDNEX                    ;07 ПРЯМОЙ ВЫЗОВ ДРАЙВЕРА HDD NEMO (ВРЕМЕННАЯ ФУНКЦИЯ)
  91.                 DW FREINIT_VOL                  ;08 ПОЛНАЯ ПЕРЕИНИЦИАЛИЗАЦИЯ РАЗДЕЛА
  92.  
  93. ;ФОРМАТ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
  94. ;+0(1)-0-DRIVE A
  95. ;      1-DRIVE B
  96. ;      2-DRIVE C
  97. ;      3-DRIVE D
  98. ;      4-SD КАРТА ZC
  99. ;      5-SD КАРТА NEOGS
  100. ;      6-HDD NEMO
  101. ;      7-HDD SMUC
  102. ;      8-HDD DIVIDE
  103. ;+1(1)-ДЛЯ SD-ТУПО 0
  104. ;      ИНАЧЕ HDD/CD 0-MASTER, 1-SLAVE
  105. ;+2(1)-ТИП РАЗДЕЛА, В ТАБЛИЦЕ ТОЛЬКО
  106. ;РАЗДЕЛЫ:
  107. ;00=01-FAT12
  108. ;01=04,06,0E-FAT16
  109. ;02=0B,0C-FAT32
  110. ;+3(4)-СТАРТОВЫЙ СЕКТОР РАЗДЕЛА
  111. ;+7(1)-РЕЗЕРВ
  112.  
  113. ;ТОЧКА ВХОДА ДЛЯ ПОИСКА РАЗДЕЛОВ
  114. ;HL-АДРЕС КУДА ПОКЛАСТЬ ТАБЛИЦУ РАЗДЕЛОВ
  115. ;НА ВЫХОДЕ:
  116. ;A-КОЛ-ВО РАЗДЕЛОВ
  117. DEVFIND         LD A,(FLAGS_DRV)
  118.                 AND B_NEW_SD
  119.                 JR NZ,DEVFIND4
  120.                 LD HL,0XFE
  121.                 LD IX,BUF_TABLVOL
  122.                 PCALL CRC16_FAST,P_ADDON1
  123.                 LD BC,(BUF_TABLVOL+0XFE)
  124.                 AND A
  125.                 SBC HL,BC
  126.                 JP Z,KOL_VOL
  127. DEVFIND4        LD HL,FLAGS_DRV
  128.                 LD A,B_NEW_SD!0XFF
  129.                 AND (HL)
  130.                 LD (HL),A
  131.                 PUSH IY
  132.                 XOR A
  133.                 LD (KOLDVOL),A
  134.                 LD HL,BUF_TABLVOL
  135.                 LD DE,BUF_TABLVOL+1
  136.                 LD BC,0XEF
  137.                 LD (HL),B
  138.                 LDIR
  139.                 LD IX,DEVICES
  140.                 LD IYL,INTERNAL
  141. ;NEMO
  142.                 LD HL,BUF_512                   ;АДРЕС БУФЕРА ДЛЯ ЗАГРУЗКИ СЕКТОРА (512 БАЙТ)
  143.                 CALL COMHDDN
  144.                 DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ УСТРОЙСТВА С ОПРЕДЕЛЕНИЕМ ЧТО ПОДКЛЮЧЕНО
  145.                 LD A,H
  146.                 AND A
  147.                 JR NZ,DEVFIND1
  148. DEVFIND10       LD (IX+0),HDDN+MASTER
  149.                 INC IX
  150. DEVFIND1       
  151. ;SD ON NEOGS
  152.                 LD H,CMOS_BYTE_01
  153.                 PCALL READCMOS,P_ADDONS
  154.                 LD A,L
  155.                 AND ACCESSSDG                   ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
  156.                 JR Z,DEVFIND2                   ;ЕСЛИ ЗАПРЕЩЕН, ТО НЕ ВЫЗЫВАЕМ
  157.                 CALL INSTSDD                    ;УCТАНОВКА ДРАЙВЕРА SD КАРТЫ НА NEOGS
  158.                 AND A
  159.                 JR NZ,DEVFIND2                  ;НЕ ИНИЦИАЛИЗИРОВАТЬ ЕСЛИ NEOGS НЕ НАЙДЕН
  160.                 LD HL,FLAGS_DRV
  161.                 SET 7,(HL)                      ;ДРАЙВЕР УСТАНОВИЛСЯ
  162.                 CALL COMSDG
  163.                 DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ НА NEOGS
  164.                 AND A
  165.                 JR NZ,DEVFIND2
  166. DEVFIND20       LD (IX+0),SDG
  167.                 INC IX
  168. DEVFIND2
  169. ;SD ON Z-CONTROLLER
  170.                 CALL COMSDZ
  171.                 DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ
  172.                 AND A
  173.                 JR NZ,DEVFIND3
  174. DEVFIND30       LD (IX+0),SDZ
  175.                 INC IX
  176. DEVFIND3        LD (IX+0),0XFF                  ;ДАЛЕЕ НЕТ НАЙДЕННЫХ УСТРОЙСТВ
  177.                 CALL FIND_SD
  178.                 LD HL,DEVICES
  179.                 LD IX,BUF_TABLVOL
  180.                 LD A,(HL)
  181.                 INC A
  182.                 JR Z,DEVFIND6
  183. DEVFIND5        CALL FINDVOL
  184.                 INC HL
  185.                 LD A,(HL)
  186.                 INC A
  187.                 JR NZ,DEVFIND5
  188. DEVFIND6        CALL SETVOLD                    ;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
  189.                 POP IY
  190.                 SCF
  191.                 JP Z,KOLVOL1                    ;ПЕРЕХОД ЕСЛИ НИЧЕГО НЕ НАЙДЕНО
  192.                 DEC A
  193.                 LD (SETDVOL),A
  194. ;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
  195. INIT_VOLS       LD IX,BUF_TABLVOL
  196.                 LD A,(SETDVOL)
  197.                 PUSH AF                         ;СОХРАНИЛИ ТЕКУЩИЙ ВЫБРАННЫЙ РАЗДЕЛ
  198.                 LD A,(KOLDVOL)
  199.                 LD E,A
  200.                 LD D,0
  201. IV_SETDRV2      PUSH AF
  202.                 LD A,D
  203.                 LD (SETDVOL),A
  204.                 LD A,(IX+0)
  205.                 CP SDZ
  206.                 LD HL,COMSDZ
  207.                 JR Z,IV_SETDRV1
  208.                 CP SDG
  209.                 LD HL,COMSDG
  210.                 JR Z,IV_SETDRV1
  211.                 LD HL,COMHDDN
  212. IV_SETDRV1      LD (GO_DEV),HL                  ;УСТАНОВИЛИ АДРЕС ТЕКУЩЕГО ВЫЗЫВАЕМОГО ДРАЙВЕРА
  213.                 LD A,(IX+2)
  214.                 LD HL,BUF_TABLVOL
  215.                 PUSH DE
  216.                 CALL ICOM_FAT
  217.                 DB _INIT_FATVARS
  218.                 CALL SAVE_FNDVOL
  219.                 POP DE
  220.                 INC D
  221.                 LD BC,8
  222.                 ADD IX,BC
  223.                 POP AF
  224.                 DEC A
  225.                 JR NZ,IV_SETDRV2
  226. ;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
  227.                 POP AF
  228.                 CALL SET_VOL1                   ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  229.                 LD A,(KOLDVOL)
  230.                 DEC A
  231.                 CALL C,SET_VOL1                 ;ЕСЛИ ВЫБРАН НЕ СУЩЕСТВУЮЩИЙ РАЗДЕЛ, ТО ПРИНУДИТЕЛЬНО ВЫБИРАЕМ ПОСЛЕДНИЙ НАЙДЕННЫЙ
  232.                 CALL ICOM_FAT
  233.                 DB _INIT_TEKDIR
  234.                 LD HL,0XFE
  235.                 LD IX,BUF_TABLVOL
  236.                 PCALL CRC16_FAST,P_ADDON1
  237.                 LD (CRC_DRVS),HL
  238. KOL_VOL         LD A,IYL
  239.                 AND A
  240.                 JR NZ,IKOL_VOL
  241.                 LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  242.                 INC HL
  243.                 INC HL
  244.                 LD A,(HL)                       ;ТИП РАЗДЕЛА
  245.                 LD HL,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
  246.                 LD (RREG_E),HL
  247.                 AND A
  248. KOLVOL1         PUSH AF
  249.                 POP HL
  250.                 LD (RREG_F),HL
  251.                 RET
  252.  
  253. FINDVOL         PUSH HL
  254.                 LD A,(HL)
  255.                 LD (TEK_TYPE),A
  256.                 AND 0X7F
  257.                 CP HDDN
  258.                 LD HL,COMHDDN
  259.                 JR Z,FINDVOL1
  260.                 CP SDG
  261.                 LD HL,COMSDG
  262.                 JR Z,FINDVOL1
  263.                 LD HL,COMSDZ
  264. FINDVOL1        LD (GO_DEV),HL                  ;ВЫСТАВИЛИ АДРЕС ВЫЗОВА НУЖНОГО ДРАЙВЕРА
  265.                 LD DE,0
  266.                 LD B,D
  267.                 LD C,D                          ;ЧИТАТЬ СЕКТОР 0
  268.                 LD A,1                          ;1 СЕКТОР
  269.                 LD HL,BUF_512                   ;АДРЕС БУФЕРА ЧТЕНИЯ
  270.                 PUSH HL
  271.                 LD IYL,INTERNAL
  272.                 CALL TO_DRV
  273.                 DB _DEV_READ
  274.                 DEC HL
  275.                 LD D,(HL)
  276.                 DEC HL
  277.                 LD E,(HL)
  278.                 LD HL,0XAA55
  279.                 AND A
  280.                 SBC HL,DE
  281.                 POP IY
  282.                 LD (ADRTEKV),IX
  283.                 CALL Z,READ_MBR
  284.                 POP HL
  285.                 RET
  286.  
  287. ;ЗАПРОС НАЙДЕНОГО И ТЕКУЩЕГО ВЫБРАННОГО УСТРОЙСТВА
  288. IKOL_VOL        LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  289.                 INC HL
  290.                 INC HL
  291.                 LD A,(HL)                       ;ТИП РАЗДЕЛА
  292.                 LD DE,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
  293.                 LD HL,BUF_TABLVOL               ;АДРЕС НАЧАЛА ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
  294.                 AND A
  295.                 RET
  296.  
  297. ;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
  298. SETVOLD         LD A,IXL
  299.                 RRCA
  300.                 RRCA
  301.                 RRCA
  302.                 AND 0X1F
  303.                 LD (KOLDVOL),A
  304.                 RET
  305.  
  306. ;ВЫБОР РАЗДЕЛА И ИНИТ ЕГО ПЕРЕМЕННЫХ
  307. FREINIT_VOL     LD L,A
  308.                 LD A,IYL
  309.                 AND A
  310.                 JR Z,FREINITVOL1
  311.                 LD A,(RREG_A)
  312. FREINITVOL1     LD IYL,INTERNAL
  313.                 CALL SET_VOL1
  314.                 CALL INIT_FATVARS
  315.                 JP INIRTSC
  316.  
  317. ;ВЫБОР РАЗДЕЛА
  318. SET_VOL         LD L,A
  319.                 LD A,IYL
  320.                 AND A
  321.                 LD A,L
  322.                 JR NZ,SET_VOL1
  323.                 LD A,(RREG_A)
  324.                 LD HL,KOLVOL1
  325.                 PUSH HL
  326. SET_VOL1        PUSH AF
  327.                 CALL SAVE_FNDVOL
  328.                 POP AF
  329. SET_VOL_MNT     LD HL,KOLDVOL
  330.                 CP (HL)
  331.                 CCF
  332.                 RET C
  333.                 LD (SETDVOL),A
  334.                 LD L,A
  335.                 LD H,0
  336.                 ADD HL,HL
  337.                 ADD HL,HL
  338.                 ADD HL,HL
  339.                 LD DE,BUF_TABLVOL
  340.                 ADD HL,DE
  341.                 LD (ADRTEKV),HL
  342.                 LD A,(HL)
  343. ;               CP 4
  344. ;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
  345. ;               JR C,SET_DRV
  346.                 CP SDZ
  347.                 LD HL,COMSDZ
  348.                 JR Z,SET_DRV
  349.                 CP SDG
  350.                 LD HL,COMSDG
  351.                 JR Z,SET_DRV
  352.                 LD HL,COMHDDN
  353. SET_DRV         LD (GO_DEV),HL
  354.                 CALL LOAD_FNDVOL
  355.                 LD HL,0XFE
  356.                 PUSH IX
  357.                 LD IX,BUF_TABLVOL
  358.                 PCALL CRC16_FAST,P_ADDON1
  359.                 POP IX
  360.                 LD (CRC_DRVS),HL
  361.                 XOR A
  362.                 RET
  363.  
  364. SAVE_FNDVOL     PUSH IX
  365.                 LD HL,0XFE
  366.                 LD IX,ERORDRV
  367.                 PCALL CRC16_FAST,P_ADDON1
  368.                 POP IX
  369.                 LD (CRC_VOL),HL                 ;ВЫЧИСЛЕНИЕ CRC РАЗДЕЛА ПЕРЕД СОХРАНЕНИЕМ
  370.                 LD BC,WIN_P1
  371.                 LD A,PAGE_FATVARS
  372.                 OUT (C),A
  373.                 LD A,(SETDVOL)
  374.                 ADD A,HIGH (CPU1+BUF_ALLVOL)+4
  375.                 LD D,A
  376.                 LD E,0
  377.                 LD HL,BUF_TEKVOL
  378.                 LD BC,0X100
  379.                 LDIR
  380.                 RET
  381.  
  382. LOAD_FNDVOL     LD BC,WIN_P1
  383.                 LD A,PAGE_FATVARS
  384.                 OUT (C),A
  385.                 LD A,(SETDVOL)
  386.                 ADD A,HIGH (CPU1+BUF_ALLVOL)+4
  387.                 LD H,A
  388.                 LD L,0
  389.                 LD DE,BUF_TEKVOL
  390.                 LD BC,0X100
  391.                 LDIR
  392. ;               PUSH IX
  393. ;               LD HL,0XFE
  394. ;               LD IX,ERORDRV
  395. ;               PCALL CRC16_FAST,P_ADDON1
  396. ;               POP IX
  397. ;               LD DE,(CRC_VOL)
  398. ;               AND A
  399. ;               SBC HL,DE
  400. ;               JP NZ,REDEVFIND
  401.                 CALL ICOM_FAT
  402.                 DB _INIT_TEKDIR
  403.                 RET
  404.  
  405. CMP_SDCARD      LD A,(SETDVOL)
  406.                 CP SDG
  407.                 JR NZ,CMPSDCARD1
  408.                 LD H,CMOS_BYTE_01
  409.                 PCALL READCMOS,P_ADDONS
  410.                 LD A,L
  411.                 AND ACCESSSDG                   ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
  412.                 RET Z
  413. CMPSDCARD1      PUSH IY
  414.                 LD IYL,INTERNAL
  415.                 CALL TO_DRV
  416.                 DB _DEV_STATUS
  417.                 POP IY
  418.                 INC A
  419.                 RET
  420.  
  421. READ_MBR        LD DE,0X01BE                    ;СМЕЩЕНИЕ В 0 СЕКТОРЕ УСТРОЙСТВА ДО ТАБЛИЦЫ MBR
  422.                 PUSH IY
  423.                 ADD IY,DE                       ;УСТАНОВИЛИ УКАЗАТЕЛЬ НА НАЧАЛО ОПИСАТЕЛЕЙ РАЗДЕЛОВ
  424.                 LD BC,0X0400                    ;РАЗДЕЛОВ МАКСИМУМ 4 И ОБНУЛИЛИ СЧЕТЧИК РАЗДЕЛОВ С FAT
  425. RDMBR0          LD A,(IY)                       ;ПЕРВЫЙ БАЙТ 16 БАЙТНОГО ОПИСАТЕЛЯ
  426.                 AND A                           ;ДОЛЖЕН БЫТЬ РАВЕН 0
  427.                 JR Z,RDMBR1
  428.                 CP 0X80                         ;ИЛИ 0X80 (ПРИЗНАК ЗАГРУЗОЧНОГО РАЗДЕЛА)
  429.                 JR NZ,RDMBR2
  430. RDMBR1          LD A,(IY+4)                     ;БАЙТ ТИПА РАЭДЕЛА
  431.                 CALL CP_RAZD                    ;ПРОВЕРКА ТИПА РАЗДЕЛА
  432.                 JR NZ,RDMBR2                    ;ЕСЛИ НЕ FAT ТО ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ
  433.                 INC C
  434. RDMBR2          LD DE,0X10
  435.                 ADD IY,DE
  436.                 DJNZ RDMBR0                     ;ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ В MBR
  437.                 LD A,C
  438.                 AND A
  439.                 POP HL
  440.                 JP NZ,SCANMBR
  441.                 PUSH HL
  442.                 POP IY
  443.                 LD C,(IY+0X0D)
  444.                 XOR A
  445.                 LD E,A
  446.                 LD B,8
  447.                 RR C
  448.                 ADC A,0
  449.                 DJNZ $-4
  450.                 DEC A
  451.                 JR NZ,$+3
  452.                 INC E
  453.                 LD A,(IY+0X0E)
  454.                 OR (IY+0X0F)
  455.                 JR Z,$+3
  456.                 INC E
  457.                 LD A,(IY+0X13)
  458.                 OR (IY+0X14)
  459.                 JR NZ,$+3
  460.                 INC E
  461.                 LD A,(IY+0X20)
  462.                 OR (IY+0X21)
  463.                 OR (IY+0X22)
  464.                 OR (IY+0X22)
  465.                 JR NZ,$+3
  466.                 INC E
  467.                 LD A,(IY+0X15)
  468.                 AND 0XF0
  469.                 CP 0XF0
  470.                 JR NZ,$+3
  471.                 INC E
  472.                 LD A,E
  473.                 CP 4
  474.                 RET NZ
  475.                 LD A,(TEK_TYPE)
  476.                 BIT 7,A
  477.                 LD B,0
  478.                 JR Z,$+3
  479.                 INC B
  480.                 AND 0X7F
  481.                 LD C,A
  482.                 PUSH IX
  483.                 POP HL
  484.                 XOR A
  485.                 LD (HL),C
  486.                 INC HL
  487.                 LD (HL),B
  488.                 INC HL
  489.                 LD (HL),0XFF
  490.                 INC HL
  491.                 LD (HL),A
  492.                 INC HL
  493.                 LD (HL),A
  494.                 INC HL
  495.                 LD (HL),A
  496.                 INC HL
  497.                 LD (HL),A
  498.                 INC HL
  499.                 LD (HL),A
  500.                 LD DE,8
  501.                 ADD IX,DE
  502. INIT_VOL        PUSH IY
  503.                 LD IYL,INTERNAL
  504.                 CALL SETVOLD
  505.                 DEC A
  506.                 LD (SETDVOL),A
  507.                 LD L,A
  508.                 LD H,0
  509.                 ADD HL,HL
  510.                 ADD HL,HL
  511.                 ADD HL,HL
  512.                 LD DE,BUF_TABLVOL
  513.                 ADD HL,DE
  514.                 LD (ADRTEKV),HL
  515.                 LD A,(HL)
  516.                 AND 0X7F
  517. ;               CP 4
  518. ;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
  519.                 JR C,DSET_DRV
  520.                 CP SDZ
  521.                 LD HL,COMSDZ
  522.                 JR Z,DSET_DRV
  523.                 CP SDG
  524.                 LD HL,COMSDG
  525.                 JR Z,DSET_DRV
  526.                 LD HL,COMHDDN
  527. DSET_DRV        LD (GO_DEV),HL
  528.                 CALL IKOL_VOL
  529.                 CALL ICOM_FAT
  530.                 DB _INIT_FATVARS
  531.                 LD (IX-6),A
  532.                 POP IY
  533.                 RET
  534.  
  535. ;НА ВХОДЕ:
  536. ;A-BIT 7-0/1-MASTER/SLAVE
  537. ;BITS 6-0-ТИП НОСИТЕЛЯ
  538. SCANMBR         LD DE,0X01BE
  539.                 ADD HL,DE
  540.                 EXX
  541.                 LD A,(TEK_TYPE)
  542.                 BIT 7,A
  543.                 LD B,0
  544.                 JR Z,$+3
  545.                 INC B
  546.                 AND 0X7F
  547.                 LD C,A
  548.                 EXX
  549.                 LD A,4
  550. SCNMBR0         PUSH AF
  551.                 LD A,(HL)
  552.                 LD C,4
  553.                 ADD HL,BC
  554.                 LD C,0X0C
  555.                 AND A
  556.                 JR Z,SCNMBR1
  557.                 CP 0X80
  558.                 JR NZ,SCNMBR2
  559. SCNMBR1         LD A,(HL)
  560.                 AND A
  561.                 JR Z,SCNMBR2
  562.                 CALL CP_RAZD
  563.                 JR NZ,SCNMBR2
  564. SCNMBR3         EXX
  565.                 LD (IX+0),C
  566.                 LD (IX+1),B
  567.                 EXX
  568.                 LD (IX+2),E                     ;УСТАНОВКА ТИПА FAT
  569.                 PUSH IX
  570.                 POP DE
  571.                 INC DE
  572.                 INC DE
  573.                 INC DE
  574.                 LD C,4
  575.                 ADD HL,BC
  576.                 LDI
  577.                 LDI
  578.                 LDI
  579.                 LDI
  580.                 LD (IX+7),0                     ;РЕЗЕРВНЫЙ БАЙТ
  581. SCNMBR4         LD C,8
  582.                 ADD IX,BC
  583.                 LD C,4
  584. SCNMBR2         ADD HL,BC
  585.                 POP AF
  586.                 DEC A
  587.                 JR NZ,SCNMBR0
  588.                 RET
  589.  
  590. SET_DEVICE      PUSH AF
  591.                 PUSH HL
  592.                 LD A,B
  593.                 AND 0X0F
  594.                 LD B,A
  595.                 LD HL,(ADRTEKV)
  596.                 INC HL
  597.                 LD A,(HL)
  598.                 AND 1                           ;MASTER ИЛИ SLAVE?
  599.                 RLCA
  600.                 RLCA
  601.                 RLCA
  602.                 RLCA
  603.                 OR 0XE0                         ;ВСЕГДА LBA РЕЖИМ
  604.                 OR B
  605.                 LD B,A                          ;УСТАНОВИЛИ ВЫБРАННОЕ УСТРОЙСТВО MASTER ИЛИ SLAVE
  606.                 POP HL
  607.                 POP AF
  608.                 RET
  609.  
  610. ;ПРОВЕРКА ТИПА РАЗДЕЛА
  611. CP_RAZD         LD E,1                          ;FAT16
  612.                 CP 4
  613.                 RET Z
  614.                 CP 6
  615.                 RET Z
  616.                 CP 0X0E
  617.                 RET Z
  618.                 LD E,2                          ;FAT32
  619.                 CP 0X0B
  620.                 RET Z
  621.                 CP 0X0C
  622.                 RET Z
  623.                 LD E,0                          ;FAT12
  624.                 CP 1
  625.                 RET
  626.  
  627. ;ВРЕМЕННАЯ ФУНКЦИЯ ВЫЗОВА ДРАЙВЕРА HDD NEMO
  628. COMHDDNEX       CALL P5_READ_BYTE
  629.                 LD A,(RREG_A)
  630.                 LD DE,(RREG_E)
  631.                 LD BC,(RREG_C)
  632.                 LD HL,(RREG_L)
  633.                 JP COMHDDN
  634.  
  635. ;КОПИРОВАНИЕ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ ВО ВНЕШНЮЮ ПРОГРАММУ
  636. GET_FNDVOLUME   LD BC,0X100                     ;ПЕРЕНОС 256 БАЙТ
  637.                 LD DE,(RREG_L)                  ;АДРЕС КУДА ПЕРЕНОСИТЬ
  638.                 LD HL,BUF_TABLVOL-CPU2
  639.                 JP LDIR_BYTES
  640.  
  641. CONTROL_SD      LD A,(FLAGS_DRV)
  642.                 PUSH AF
  643.                 CALL FIND_SD
  644.                 LD C,A
  645.                 AND 3
  646.                 LD (RREG_A),A
  647.                 LD A,C
  648.                 POP BC
  649.                 CP B
  650.                 JP NZ,SD_CARD_LOST
  651.                 RET
  652.  
  653. FIND_SD         PUSH IY
  654.                 LD IYL,INTERNAL
  655.                 LD E,0
  656.                 LD A,(FLAGS_DRV)
  657.                 AND B_INST_SDG
  658.                 JR Z,CRTLSD1                    ;ЕСЛИ ДРАЙВЕР НЕ УСТАНОВЛЕН
  659.                 PUSH HL
  660.                 PUSH DE
  661.                 CALL COMSDG
  662.                 DB _DEV_STATUS
  663.                 POP DE
  664.                 POP HL
  665.                 AND A
  666.                 SET 1,E                         ;ЕСТЬ SD КАРТА NEOGS
  667.                 JR Z,CRTLSD1
  668.                 RES 1,E                         ;КАРТЫ НЕТ
  669.                 EX DE,HL
  670.                 LD HL,FLAGS_DRV
  671.                 RES 7,(HL)
  672.                 EX DE,HL
  673. CRTLSD1         PUSH HL
  674.                 CALL COMSDZ
  675.                 DB _DEV_STATUS
  676.                 POP HL
  677.                 AND A
  678.                 SET 0,E                         ;ЕСТЬ SD КАРТЫ ZC
  679.                 JR Z,CRTLSD2
  680.                 RES 0,E                         ;КАРТЫ НЕТ
  681. CRTLSD2         POP IY
  682.                 LD HL,FLAGS_DRV
  683.                 LD A,0XFC
  684.                 AND (HL)
  685.                 OR E
  686.                 LD (HL),A
  687.                 RET
  688.