Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 04.07.2014 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.                 EVOPORT WIN_P5,PAGE_FATVARS
  371.                 LD A,(SETDVOL)
  372.                 ADD A,HIGH (CPU5+BUF_ALLVOL)+4
  373.                 LD D,A
  374.                 LD E,0
  375.                 LD HL,BUF_TEKVOL
  376.                 LD BC,0X100
  377.                 LDIR
  378.                 RET
  379.  
  380. LOAD_FNDVOL     EVOPORT WIN_P5,PAGE_FATVARS
  381.                 LD A,(SETDVOL)
  382.                 ADD A,HIGH (CPU5+BUF_ALLVOL)+4
  383.                 LD H,A
  384.                 LD L,0
  385.                 LD DE,BUF_TEKVOL
  386.                 LD BC,0X100
  387.                 LDIR
  388. ;               PUSH IX
  389. ;               LD HL,0XFE
  390. ;               LD IX,ERORDRV
  391. ;               PCALL CRC16_FAST,P_ADDON1
  392. ;               POP IX
  393. ;               LD DE,(CRC_VOL)
  394. ;               AND A
  395. ;               SBC HL,DE
  396. ;               JP NZ,REDEVFIND
  397.                 CALL ICOM_FAT
  398.                 DB _INIT_TEKDIR
  399.                 RET
  400.  
  401. CMP_SDCARD      LD A,(SETDVOL)
  402.                 CP SDG
  403.                 JR NZ,CMPSDCARD1
  404.                 LD H,CMOS_BYTE_01
  405.                 PCALL READCMOS,P_ADDONS
  406.                 LD A,L
  407.                 AND ACCESSSDG                   ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
  408.                 RET Z
  409. CMPSDCARD1      PUSH IY
  410.                 LD IYL,INTERNAL
  411.                 CALL TO_DRV
  412.                 DB _DEV_STATUS
  413.                 POP IY
  414.                 INC A
  415.                 RET
  416.  
  417. READ_MBR        LD DE,0X01BE                    ;СМЕЩЕНИЕ В 0 СЕКТОРЕ УСТРОЙСТВА ДО ТАБЛИЦЫ MBR
  418.                 PUSH IY
  419.                 ADD IY,DE                       ;УСТАНОВИЛИ УКАЗАТЕЛЬ НА НАЧАЛО ОПИСАТЕЛЕЙ РАЗДЕЛОВ
  420.                 LD BC,0X0400                    ;РАЗДЕЛОВ МАКСИМУМ 4 И ОБНУЛИЛИ СЧЕТЧИК РАЗДЕЛОВ С FAT
  421. RDMBR0          LD A,(IY)                       ;ПЕРВЫЙ БАЙТ 16 БАЙТНОГО ОПИСАТЕЛЯ
  422.                 AND A                           ;ДОЛЖЕН БЫТЬ РАВЕН 0
  423.                 JR Z,RDMBR1
  424.                 CP 0X80                         ;ИЛИ 0X80 (ПРИЗНАК ЗАГРУЗОЧНОГО РАЗДЕЛА)
  425.                 JR NZ,RDMBR2
  426. RDMBR1          LD A,(IY+4)                     ;БАЙТ ТИПА РАЭДЕЛА
  427.                 CALL CP_RAZD                    ;ПРОВЕРКА ТИПА РАЗДЕЛА
  428.                 JR NZ,RDMBR2                    ;ЕСЛИ НЕ FAT ТО ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ
  429.                 INC C
  430. RDMBR2          LD DE,0X10
  431.                 ADD IY,DE
  432.                 DJNZ RDMBR0                     ;ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ В MBR
  433.                 LD A,C
  434.                 AND A
  435.                 POP HL
  436.                 JP NZ,SCANMBR
  437.                 PUSH HL
  438.                 POP IY
  439.                 LD C,(IY+0X0D)
  440.                 XOR A
  441.                 LD E,A
  442.                 LD B,8
  443.                 RR C
  444.                 ADC A,0
  445.                 DJNZ $-4
  446.                 DEC A
  447.                 JR NZ,$+3
  448.                 INC E
  449.                 LD A,(IY+0X0E)
  450.                 OR (IY+0X0F)
  451.                 JR Z,$+3
  452.                 INC E
  453.                 LD A,(IY+0X13)
  454.                 OR (IY+0X14)
  455.                 JR Z,$+3
  456.                 INC E
  457.                 LD A,(IY+0X20)
  458.                 OR (IY+0X21)
  459.                 OR (IY+0X22)
  460.                 OR (IY+0X22)
  461.                 JR Z,$+3
  462.                 INC E
  463.                 LD A,(IY+0X15)
  464.                 AND 0XF0
  465.                 CP 0XF0
  466.                 JR NZ,$+3
  467.                 INC E
  468.                 LD A,E
  469.                 CP 4
  470.                 RET NZ
  471.                 LD A,(TEK_TYPE)
  472.                 BIT 7,A
  473.                 LD B,0
  474.                 JR Z,$+3
  475.                 INC B
  476.                 AND 0X7F
  477.                 LD C,A
  478.                 PUSH IX
  479.                 POP HL
  480.                 XOR A
  481.                 LD (HL),C
  482.                 INC HL
  483.                 LD (HL),B
  484.                 INC HL
  485.                 LD (HL),0XFF
  486.                 INC HL
  487.                 LD (HL),A
  488.                 INC HL
  489.                 LD (HL),A
  490.                 INC HL
  491.                 LD (HL),A
  492.                 INC HL
  493.                 LD (HL),A
  494.                 INC HL
  495.                 LD (HL),A
  496.                 LD DE,8
  497.                 ADD IX,DE
  498. INIT_VOL        PUSH IY
  499.                 LD IYL,INTERNAL
  500.                 CALL SETVOLD
  501.                 DEC A
  502.                 LD (SETDVOL),A
  503.                 LD L,A
  504.                 LD H,0
  505.                 ADD HL,HL
  506.                 ADD HL,HL
  507.                 ADD HL,HL
  508.                 LD DE,BUF_TABLVOL
  509.                 ADD HL,DE
  510.                 LD (ADRTEKV),HL
  511.                 LD A,(HL)
  512.                 AND 0X7F
  513. ;               CP 4
  514. ;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
  515.                 JR C,DSET_DRV
  516.                 CP SDZ
  517.                 LD HL,COMSDZ
  518.                 JR Z,DSET_DRV
  519.                 CP SDG
  520.                 LD HL,COMSDG
  521.                 JR Z,DSET_DRV
  522.                 LD HL,COMHDDN
  523. DSET_DRV        LD (GO_DEV),HL
  524.                 CALL IKOL_VOL
  525.                 CALL ICOM_FAT
  526.                 DB _INIT_FATVARS
  527.                 LD (IX-6),A
  528.                 POP IY
  529.                 RET
  530.  
  531. ;НА ВХОДЕ:
  532. ;A-BIT 7-0/1-MASTER/SLAVE
  533. ;BITS 6-0-ТИП НОСИТЕЛЯ
  534. SCANMBR         LD DE,0X01BE
  535.                 ADD HL,DE
  536.                 EXX
  537.                 LD A,(TEK_TYPE)
  538.                 BIT 7,A
  539.                 LD B,0
  540.                 JR Z,$+3
  541.                 INC B
  542.                 AND 0X7F
  543.                 LD C,A
  544.                 EXX
  545.                 LD A,4
  546. SCNMBR0         PUSH AF
  547.                 LD A,(HL)
  548.                 LD C,4
  549.                 ADD HL,BC
  550.                 LD C,0X0C
  551.                 AND A
  552.                 JR Z,SCNMBR1
  553.                 CP 0X80
  554.                 JR NZ,SCNMBR2
  555. SCNMBR1         LD A,(HL)
  556.                 AND A
  557.                 JR Z,SCNMBR2
  558.                 CALL CP_RAZD
  559.                 JR NZ,SCNMBR2
  560. SCNMBR3         EXX
  561.                 LD (IX+0),C
  562.                 LD (IX+1),B
  563.                 EXX
  564.                 LD (IX+2),E                     ;УСТАНОВКА ТИПА FAT
  565.                 PUSH IX
  566.                 POP DE
  567.                 INC DE
  568.                 INC DE
  569.                 INC DE
  570.                 LD C,4
  571.                 ADD HL,BC
  572.                 LDI
  573.                 LDI
  574.                 LDI
  575.                 LDI
  576.                 LD (IX+7),0                     ;РЕЗЕРВНЫЙ БАЙТ
  577. SCNMBR4         LD C,8
  578.                 ADD IX,BC
  579.                 LD C,4
  580. SCNMBR2         ADD HL,BC
  581.                 POP AF
  582.                 DEC A
  583.                 JR NZ,SCNMBR0
  584.                 RET
  585.  
  586. SET_DEVICE      PUSH AF
  587.                 PUSH HL
  588.                 LD A,B
  589.                 AND 0X0F
  590.                 LD B,A
  591.                 LD HL,(ADRTEKV)
  592.                 INC HL
  593.                 LD A,(HL)
  594.                 AND 1                           ;MASTER ИЛИ SLAVE?
  595.                 RLCA
  596.                 RLCA
  597.                 RLCA
  598.                 RLCA
  599.                 OR 0XE0                         ;ВСЕГДА LBA РЕЖИМ
  600.                 OR B
  601.                 LD B,A                          ;УСТАНОВИЛИ ВЫБРАННОЕ УСТРОЙСТВО MASTER ИЛИ SLAVE
  602.                 POP HL
  603.                 POP AF
  604.                 RET
  605.  
  606. ;ПРОВЕРКА ТИПА РАЗДЕЛА
  607. CP_RAZD         LD E,1                          ;FAT16
  608.                 CP 4
  609.                 RET Z
  610.                 CP 6
  611.                 RET Z
  612.                 CP 0X0E
  613.                 RET Z
  614.                 LD E,2                          ;FAT32
  615.                 CP 0X0B
  616.                 RET Z
  617.                 CP 0X0C
  618.                 RET Z
  619.                 LD E,0                          ;FAT12
  620.                 CP 1
  621.                 RET
  622.  
  623. ;ВРЕМЕННАЯ ФУНКЦИЯ ВЫЗОВА ДРАЙВЕРА HDD NEMO
  624. COMHDDNEX       CALL P5_READ_BYTE
  625.                 LD A,(RREG_A)
  626.                 LD DE,(RREG_E)
  627.                 LD BC,(RREG_C)
  628.                 LD HL,(RREG_L)
  629.                 JP COMHDDN
  630.  
  631. ;КОПИРОВАНИЕ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ ВО ВНЕШНЮЮ ПРОГРАММУ
  632. GET_FNDVOLUME   LD BC,0X100                     ;ПЕРЕНОС 256 БАЙТ
  633.                 LD DE,(RREG_L)                  ;АДРЕС КУДА ПЕРЕНОСИТЬ
  634.                 LD HL,BUF_TABLVOL-CPU6
  635.                 JP LDIR_BYTES
  636.  
  637. CONTROL_SD      LD A,(FLAGS_DRV)
  638.                 PUSH AF
  639.                 CALL FIND_SD
  640.                 LD C,A
  641.                 AND 3
  642.                 LD (RREG_A),A
  643.                 LD A,C
  644.                 POP BC
  645.                 CP B
  646.                 JP NZ,SD_CARD_LOST
  647.                 RET
  648.  
  649. FIND_SD         PUSH IY
  650.                 LD IYL,INTERNAL
  651.                 LD E,0
  652.                 LD A,(FLAGS_DRV)
  653.                 AND B_INST_SDG
  654.                 JR Z,CRTLSD1                    ;ЕСЛИ ДРАЙВЕР НЕ УСТАНОВЛЕН
  655.                 PUSH HL
  656.                 PUSH DE
  657.                 CALL COMSDG
  658.                 DB _DEV_STATUS
  659.                 POP DE
  660.                 POP HL
  661.                 AND A
  662.                 SET 1,E                         ;ЕСТЬ SD КАРТА NEOGS
  663.                 JR Z,CRTLSD1
  664.                 RES 1,E                         ;КАРТЫ НЕТ
  665.                 EX DE,HL
  666.                 LD HL,FLAGS_DRV
  667.                 RES 7,(HL)
  668.                 EX DE,HL
  669. CRTLSD1         PUSH HL
  670.                 CALL COMSDZ
  671.                 DB _DEV_STATUS
  672.                 POP HL
  673.                 AND A
  674.                 SET 0,E                         ;ЕСТЬ SD КАРТЫ ZC
  675.                 JR Z,CRTLSD2
  676.                 RES 0,E                         ;КАРТЫ НЕТ
  677. CRTLSD2         POP IY
  678.                 LD HL,FLAGS_DRV
  679.                 LD A,0XFC
  680.                 AND (HL)
  681.                 OR E
  682.                 LD (HL),A
  683.                 RET
  684.