Subversion Repositories pentevo

Rev

Rev 665 | Rev 761 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 16.11.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.                 LD A,(HDDTIMEOUT)
  142. DEVFIND41       EI
  143.                 HALT
  144.                 HALT
  145.                 DI
  146.                 DEC A
  147.                 JR NZ,DEVFIND41
  148.                 INC A
  149.                 LD (HDDTIMEOUT),A
  150. ;NEMO
  151.                 LD HL,BUF_512                   ;АДРЕС БУФЕРА ДЛЯ ЗАГРУЗКИ СЕКТОРА (512 БАЙТ)
  152.                 CALL COMHDDN
  153.                 DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ УСТРОЙСТВА С ОПРЕДЕЛЕНИЕМ ЧТО ПОДКЛЮЧЕНО
  154.                 LD A,H
  155.                 AND A
  156.                 JR NZ,DEVFIND1
  157. DEVFIND10       LD (IX+0),HDDN+MASTER
  158.                 INC IX
  159. DEVFIND1       
  160. ;SD ON NEOGS
  161.                 LD H,CMOS_BYTE_01
  162.                 PCALL READCMOS,P_ADDONS
  163.                 LD A,L
  164.                 AND ACCESSSDG                   ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
  165.                 JR Z,DEVFIND2                   ;ЕСЛИ ЗАПРЕЩЕН, ТО НЕ ВЫЗЫВАЕМ
  166.                 CALL INSTSDD                    ;УCТАНОВКА ДРАЙВЕРА SD КАРТЫ НА NEOGS
  167.                 AND A
  168.                 JR NZ,DEVFIND2                  ;НЕ ИНИЦИАЛИЗИРОВАТЬ ЕСЛИ NEOGS НЕ НАЙДЕН
  169.                 LD HL,FLAGS_DRV
  170.                 SET 7,(HL)                      ;ДРАЙВЕР УСТАНОВИЛСЯ
  171.                 CALL COMSDG
  172.                 DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ НА NEOGS
  173.                 AND A
  174.                 JR NZ,DEVFIND2
  175. DEVFIND20       LD (IX+0),SDG
  176.                 INC IX
  177. DEVFIND2
  178. ;SD ON Z-CONTROLLER
  179.                 CALL COMSDZ
  180.                 DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ
  181.                 AND A
  182.                 JR NZ,DEVFIND3
  183. DEVFIND30       LD (IX+0),SDZ
  184.                 INC IX
  185. DEVFIND3        LD (IX+0),0XFF                  ;ДАЛЕЕ НЕТ НАЙДЕННЫХ УСТРОЙСТВ
  186.                 CALL FIND_SD
  187.                 LD HL,DEVICES
  188.                 LD IX,BUF_TABLVOL
  189.                 LD A,(HL)
  190.                 INC A
  191.                 JR Z,DEVFIND6
  192. DEVFIND5        CALL FINDVOL
  193.                 INC HL
  194.                 LD A,(HL)
  195.                 INC A
  196.                 JR NZ,DEVFIND5
  197. DEVFIND6        CALL SETVOLD                    ;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
  198.                 POP IY
  199.                 SCF
  200.                 JP Z,KOLVOL1                    ;ПЕРЕХОД ЕСЛИ НИЧЕГО НЕ НАЙДЕНО
  201.                 DEC A
  202.                 LD (SETDVOL),A
  203. ;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
  204. INIT_VOLS       LD IX,BUF_TABLVOL
  205.                 LD A,(SETDVOL)
  206.                 PUSH AF                         ;СОХРАНИЛИ ТЕКУЩИЙ ВЫБРАННЫЙ РАЗДЕЛ
  207.                 LD A,(KOLDVOL)
  208.                 LD E,A
  209.                 LD D,0
  210. IV_SETDRV2      PUSH AF
  211.                 LD A,D
  212.                 LD (SETDVOL),A
  213.                 LD A,(IX+0)
  214.                 CP SDZ
  215.                 LD HL,COMSDZ
  216.                 JR Z,IV_SETDRV1
  217.                 CP SDG
  218.                 LD HL,COMSDG
  219.                 JR Z,IV_SETDRV1
  220.                 LD HL,COMHDDN
  221. IV_SETDRV1      LD (GO_DEV),HL                  ;УСТАНОВИЛИ АДРЕС ТЕКУЩЕГО ВЫЗЫВАЕМОГО ДРАЙВЕРА
  222.                 LD A,(IX+2)
  223.                 LD HL,BUF_TABLVOL
  224.                 PUSH DE
  225.                 CALL ICOM_FAT
  226.                 DB _INIT_FATVARS
  227.                 CALL SAVE_FNDVOL
  228.                 POP DE
  229.                 INC D
  230.                 LD BC,8
  231.                 ADD IX,BC
  232.                 POP AF
  233.                 DEC A
  234.                 JR NZ,IV_SETDRV2
  235. ;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
  236.                 POP AF
  237.                 CALL SET_VOL1                   ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  238.                 LD A,(KOLDVOL)
  239.                 DEC A
  240.                 CALL C,SET_VOL1                 ;ЕСЛИ ВЫБРАН НЕ СУЩЕСТВУЮЩИЙ РАЗДЕЛ, ТО ПРИНУДИТЕЛЬНО ВЫБИРАЕМ ПОСЛЕДНИЙ НАЙДЕННЫЙ
  241.                 CALL ICOM_FAT
  242.                 DB _INIT_TEKDIR
  243.                 LD HL,0XFE
  244.                 LD IX,BUF_TABLVOL
  245.                 PCALL CRC16_FAST,P_ADDON1
  246.                 LD (CRC_DRVS),HL
  247. KOL_VOL         LD A,IYL
  248.                 AND A
  249.                 JR NZ,IKOL_VOL
  250.                 LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  251.                 INC HL
  252.                 INC HL
  253.                 LD A,(HL)                       ;ТИП РАЗДЕЛА
  254.                 LD HL,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
  255.                 LD (RREG_E),HL
  256.                 AND A
  257. KOLVOL1         PUSH AF
  258.                 POP HL
  259.                 LD (RREG_F),HL
  260.                 RET
  261.  
  262. FINDVOL         PUSH HL
  263.                 LD A,(HL)
  264.                 LD (TEK_TYPE),A
  265.                 AND 0X7F
  266.                 CP HDDN
  267.                 LD HL,COMHDDN
  268.                 JR Z,FINDVOL1
  269.                 CP SDG
  270.                 LD HL,COMSDG
  271.                 JR Z,FINDVOL1
  272.                 LD HL,COMSDZ
  273. FINDVOL1        LD (GO_DEV),HL                  ;ВЫСТАВИЛИ АДРЕС ВЫЗОВА НУЖНОГО ДРАЙВЕРА
  274.                 LD DE,0
  275.                 LD B,D
  276.                 LD C,D                          ;ЧИТАТЬ СЕКТОР 0
  277.                 LD A,1                          ;1 СЕКТОР
  278.                 LD HL,BUF_512                   ;АДРЕС БУФЕРА ЧТЕНИЯ
  279.                 PUSH HL
  280.                 LD IYL,INTERNAL
  281.                 CALL TO_DRV
  282.                 DB _DEV_READ
  283.                 DEC HL
  284.                 LD D,(HL)
  285.                 DEC HL
  286.                 LD E,(HL)
  287.                 LD HL,0XAA55
  288.                 AND A
  289.                 SBC HL,DE
  290.                 POP IY
  291.                 LD (ADRTEKV),IX
  292.                 CALL Z,READ_MBR
  293.                 POP HL
  294.                 RET
  295.  
  296. ;ЗАПРОС НАЙДЕНОГО И ТЕКУЩЕГО ВЫБРАННОГО УСТРОЙСТВА
  297. IKOL_VOL        LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
  298.                 INC HL
  299.                 INC HL
  300.                 LD A,(HL)                       ;ТИП РАЗДЕЛА
  301.                 LD DE,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
  302.                 LD HL,BUF_TABLVOL               ;АДРЕС НАЧАЛА ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
  303.                 AND A
  304.                 RET
  305.  
  306. ;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
  307. SETVOLD         LD A,IXL
  308.                 RRCA
  309.                 RRCA
  310.                 RRCA
  311.                 AND 0X1F
  312.                 LD (KOLDVOL),A
  313.                 RET
  314.  
  315. ;ВЫБОР РАЗДЕЛА И ИНИТ ЕГО ПЕРЕМЕННЫХ
  316. FREINIT_VOL     LD L,A
  317.                 LD A,IYL
  318.                 AND A
  319.                 JR Z,FREINITVOL1
  320.                 LD A,(RREG_A)
  321. FREINITVOL1     LD IYL,INTERNAL
  322.                 CALL SET_VOL1
  323.                 CALL INIT_FATVARS
  324.                 JP INIRTSC
  325.  
  326. ;ВЫБОР РАЗДЕЛА
  327. SET_VOL         LD L,A
  328.                 LD A,IYL
  329.                 AND A
  330.                 LD A,L
  331.                 JR NZ,SET_VOL1
  332.                 LD A,(RREG_A)
  333.                 LD HL,KOLVOL1
  334.                 PUSH HL
  335. SET_VOL1        PUSH AF
  336.                 CALL SAVE_FNDVOL
  337.                 POP AF
  338. SET_VOL_MNT     LD HL,KOLDVOL
  339.                 CP (HL)
  340.                 CCF
  341.                 RET C
  342.                 LD (SETDVOL),A
  343.                 LD L,A
  344.                 LD H,0
  345.                 ADD HL,HL
  346.                 ADD HL,HL
  347.                 ADD HL,HL
  348.                 LD DE,BUF_TABLVOL
  349.                 ADD HL,DE
  350.                 LD (ADRTEKV),HL
  351.                 LD A,(HL)
  352. ;               CP 4
  353. ;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
  354. ;               JR C,SET_DRV
  355.                 CP SDZ
  356.                 LD HL,COMSDZ
  357.                 JR Z,SET_DRV
  358.                 CP SDG
  359.                 LD HL,COMSDG
  360.                 JR Z,SET_DRV
  361.                 LD HL,COMHDDN
  362. SET_DRV         LD (GO_DEV),HL
  363.                 CALL LOAD_FNDVOL
  364.                 LD HL,0XFE
  365.                 PUSH IX
  366.                 LD IX,BUF_TABLVOL
  367.                 PCALL CRC16_FAST,P_ADDON1
  368.                 POP IX
  369.                 LD (CRC_DRVS),HL
  370.                 XOR A
  371.                 RET
  372.  
  373. SAVE_FNDVOL     PUSH IX
  374.                 LD HL,0XFE
  375.                 LD IX,ERORDRV
  376.                 PCALL CRC16_FAST,P_ADDON1
  377.                 POP IX
  378.                 LD (CRC_VOL),HL                 ;ВЫЧИСЛЕНИЕ CRC РАЗДЕЛА ПЕРЕД СОХРАНЕНИЕМ
  379.                 EVOPORT WIN_P5,PAGE_FATVARS
  380.                 LD A,(SETDVOL)
  381.                 ADD A,HIGH (CPU5+BUF_ALLVOL)+4
  382.                 LD D,A
  383.                 LD E,0
  384.                 LD HL,BUF_TEKVOL
  385.                 LD BC,0X100
  386.                 LDIR
  387.                 RET
  388.  
  389. LOAD_FNDVOL     EVOPORT WIN_P5,PAGE_FATVARS
  390.                 LD A,(SETDVOL)
  391.                 ADD A,HIGH (CPU5+BUF_ALLVOL)+4
  392.                 LD H,A
  393.                 LD L,0
  394.                 LD DE,BUF_TEKVOL
  395.                 LD BC,0X100
  396.                 LDIR
  397. ;               PUSH IX
  398. ;               LD HL,0XFE
  399. ;               LD IX,ERORDRV
  400. ;               PCALL CRC16_FAST,P_ADDON1
  401. ;               POP IX
  402. ;               LD DE,(CRC_VOL)
  403. ;               AND A
  404. ;               SBC HL,DE
  405. ;               JP NZ,REDEVFIND
  406.                 CALL ICOM_FAT
  407.                 DB _INIT_TEKDIR
  408.                 RET
  409.  
  410. CMP_SDCARD      LD A,(SETDVOL)
  411.                 CP SDG
  412.                 JR NZ,CMPSDCARD1
  413.                 LD H,CMOS_BYTE_01
  414.                 PCALL READCMOS,P_ADDONS
  415.                 LD A,L
  416.                 AND ACCESSSDG                   ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
  417.                 RET Z
  418. CMPSDCARD1      PUSH IY
  419.                 LD IYL,INTERNAL
  420.                 CALL TO_DRV
  421.                 DB _DEV_STATUS
  422.                 POP IY
  423.                 INC A
  424.                 RET
  425.  
  426. READ_MBR        LD DE,0X01BE                    ;СМЕЩЕНИЕ В 0 СЕКТОРЕ УСТРОЙСТВА ДО ТАБЛИЦЫ MBR
  427.                 PUSH IY
  428.                 ADD IY,DE                       ;УСТАНОВИЛИ УКАЗАТЕЛЬ НА НАЧАЛО ОПИСАТЕЛЕЙ РАЗДЕЛОВ
  429.                 LD BC,0X0400                    ;РАЗДЕЛОВ МАКСИМУМ 4 И ОБНУЛИЛИ СЧЕТЧИК РАЗДЕЛОВ С FAT
  430. RDMBR0          LD A,(IY)                       ;ПЕРВЫЙ БАЙТ 16 БАЙТНОГО ОПИСАТЕЛЯ
  431.                 AND A                           ;ДОЛЖЕН БЫТЬ РАВЕН 0
  432.                 JR Z,RDMBR1
  433.                 CP 0X80                         ;ИЛИ 0X80 (ПРИЗНАК ЗАГРУЗОЧНОГО РАЗДЕЛА)
  434.                 JR NZ,RDMBR2
  435. RDMBR1          LD A,(IY+4)                     ;БАЙТ ТИПА РАЭДЕЛА
  436.                 CALL CP_RAZD                    ;ПРОВЕРКА ТИПА РАЗДЕЛА
  437.                 JR NZ,RDMBR2                    ;ЕСЛИ НЕ FAT ТО ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ
  438.                 INC C
  439. RDMBR2          LD DE,0X10
  440.                 ADD IY,DE
  441.                 DJNZ RDMBR0                     ;ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ В MBR
  442.                 LD A,C
  443.                 AND A
  444.                 POP HL
  445.                 JP NZ,SCANMBR
  446.                 PUSH HL
  447.                 POP IY
  448.                 LD C,(IY+0X0D)
  449.                 XOR A
  450.                 LD E,A
  451.                 LD B,8
  452.                 RR C
  453.                 ADC A,0
  454.                 DJNZ $-4
  455.                 DEC A
  456.                 JR NZ,$+3
  457.                 INC E
  458.                 LD A,(IY+0X0E)
  459.                 OR (IY+0X0F)
  460.                 JR Z,$+3
  461.                 INC E
  462. ;               LD A,(IY+0X13)
  463. ;               OR (IY+0X14)
  464. ;               JR Z,$+3
  465. ;               INC E
  466. ;               LD A,(IY+0X20)
  467. ;               OR (IY+0X21)
  468. ;               OR (IY+0X22)
  469. ;               OR (IY+0X22)
  470. ;               JR Z,$+3
  471. ;               INC E
  472.                 LD A,(IY+0X15)
  473.                 AND 0XF0
  474.                 CP 0XF0
  475.                 JR NZ,$+3
  476.                 INC E
  477.                 LD A,E
  478.                 CP 3;4
  479.                 RET NZ
  480.                 LD A,(TEK_TYPE)
  481.                 BIT 7,A
  482.                 LD B,0
  483.                 JR Z,$+3
  484.                 INC B
  485.                 AND 0X7F
  486.                 LD C,A
  487.                 PUSH IX
  488.                 POP HL
  489.                 XOR A
  490.                 LD (HL),C
  491.                 INC HL
  492.                 LD (HL),B
  493.                 INC HL
  494.                 LD (HL),0XFF
  495.                 INC HL
  496.                 LD (HL),A
  497.                 INC HL
  498.                 LD (HL),A
  499.                 INC HL
  500.                 LD (HL),A
  501.                 INC HL
  502.                 LD (HL),A
  503.                 INC HL
  504.                 LD (HL),A
  505.                 LD DE,8
  506.                 ADD IX,DE
  507. INIT_VOL        PUSH IY
  508.                 LD IYL,INTERNAL
  509.                 CALL SETVOLD
  510.                 DEC A
  511.                 LD (SETDVOL),A
  512.                 LD L,A
  513.                 LD H,0
  514.                 ADD HL,HL
  515.                 ADD HL,HL
  516.                 ADD HL,HL
  517.                 LD DE,BUF_TABLVOL
  518.                 ADD HL,DE
  519.                 LD (ADRTEKV),HL
  520.                 LD A,(HL)
  521.                 AND 0X7F
  522. ;               CP 4
  523. ;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
  524.                 JR C,DSET_DRV
  525.                 CP SDZ
  526.                 LD HL,COMSDZ
  527.                 JR Z,DSET_DRV
  528.                 CP SDG
  529.                 LD HL,COMSDG
  530.                 JR Z,DSET_DRV
  531.                 LD HL,COMHDDN
  532. DSET_DRV        LD (GO_DEV),HL
  533.                 CALL IKOL_VOL
  534.                 CALL ICOM_FAT
  535.                 DB _INIT_FATVARS
  536.                 LD (IX-6),A
  537.                 POP IY
  538.                 RET
  539.  
  540. ;НА ВХОДЕ:
  541. ;A-BIT 7-0/1-MASTER/SLAVE
  542. ;BITS 6-0-ТИП НОСИТЕЛЯ
  543. SCANMBR         LD DE,0X01BE
  544.                 ADD HL,DE
  545.                 EXX
  546.                 LD A,(TEK_TYPE)
  547.                 BIT 7,A
  548.                 LD B,0
  549.                 JR Z,$+3
  550.                 INC B
  551.                 AND 0X7F
  552.                 LD C,A
  553.                 EXX
  554.                 LD A,4
  555. SCNMBR0         PUSH AF
  556.                 LD A,(HL)
  557.                 LD C,4
  558.                 ADD HL,BC
  559.                 LD C,0X0C
  560.                 AND A
  561.                 JR Z,SCNMBR1
  562.                 CP 0X80
  563.                 JR NZ,SCNMBR2
  564. SCNMBR1         LD A,(HL)
  565.                 AND A
  566.                 JR Z,SCNMBR2
  567.                 CALL CP_RAZD
  568.                 JR NZ,SCNMBR2
  569. SCNMBR3         EXX
  570.                 LD (IX+0),C
  571.                 LD (IX+1),B
  572.                 EXX
  573.                 LD (IX+2),E                     ;УСТАНОВКА ТИПА FAT
  574.                 PUSH IX
  575.                 POP DE
  576.                 INC DE
  577.                 INC DE
  578.                 INC DE
  579.                 LD C,4
  580.                 ADD HL,BC
  581.                 LDI
  582.                 LDI
  583.                 LDI
  584.                 LDI
  585.                 LD (IX+7),0                     ;РЕЗЕРВНЫЙ БАЙТ
  586. SCNMBR4         LD C,8
  587.                 ADD IX,BC
  588.                 LD C,4
  589. SCNMBR2         ADD HL,BC
  590.                 POP AF
  591.                 DEC A
  592.                 JR NZ,SCNMBR0
  593.                 RET
  594.  
  595. SET_DEVICE      PUSH AF
  596.                 PUSH HL
  597.                 LD A,B
  598.                 AND 0X0F
  599.                 LD B,A
  600.                 LD HL,(ADRTEKV)
  601.                 INC HL
  602.                 LD A,(HL)
  603.                 AND 1                           ;MASTER ИЛИ SLAVE?
  604.                 RLCA
  605.                 RLCA
  606.                 RLCA
  607.                 RLCA
  608.                 OR 0XE0                         ;ВСЕГДА LBA РЕЖИМ
  609.                 OR B
  610.                 LD B,A                          ;УСТАНОВИЛИ ВЫБРАННОЕ УСТРОЙСТВО MASTER ИЛИ SLAVE
  611.                 POP HL
  612.                 POP AF
  613.                 RET
  614.  
  615. ;ПРОВЕРКА ТИПА РАЗДЕЛА
  616. CP_RAZD         LD E,1                          ;FAT16
  617.                 CP 4
  618.                 RET Z
  619.                 CP 6
  620.                 RET Z
  621.                 CP 0X0E
  622.                 RET Z
  623.                 LD E,2                          ;FAT32
  624.                 CP 0X0B
  625.                 RET Z
  626.                 CP 0X0C
  627.                 RET Z
  628.                 LD E,0                          ;FAT12
  629.                 CP 1
  630.                 RET
  631.  
  632. ;ВРЕМЕННАЯ ФУНКЦИЯ ВЫЗОВА ДРАЙВЕРА HDD NEMO
  633. COMHDDNEX       CALL P5_READ_BYTE
  634.                 LD A,(RREG_A)
  635.                 LD DE,(RREG_E)
  636.                 LD BC,(RREG_C)
  637.                 LD HL,(RREG_L)
  638.                 JP COMHDDN
  639.  
  640. ;КОПИРОВАНИЕ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ ВО ВНЕШНЮЮ ПРОГРАММУ
  641. GET_FNDVOLUME   LD BC,0X100                     ;ПЕРЕНОС 256 БАЙТ
  642.                 LD DE,(RREG_L)                  ;АДРЕС КУДА ПЕРЕНОСИТЬ
  643.                 LD HL,BUF_TABLVOL-CPU6
  644.                 JP LDIR_BYTES
  645.  
  646. CONTROL_SD      LD A,(FLAGS_DRV)
  647.                 PUSH AF
  648.                 CALL FIND_SD
  649.                 LD C,A
  650.                 AND 3
  651.                 LD (RREG_A),A
  652.                 LD A,C
  653.                 POP BC
  654.                 CP B
  655.                 JP NZ,SD_CARD_LOST
  656.                 RET
  657.  
  658. FIND_SD         PUSH IY
  659.                 LD IYL,INTERNAL
  660.                 LD E,0
  661.                 LD A,(FLAGS_DRV)
  662.                 AND B_INST_SDG
  663.                 JR Z,CRTLSD1                    ;ЕСЛИ ДРАЙВЕР НЕ УСТАНОВЛЕН
  664.                 PUSH HL
  665.                 PUSH DE
  666.                 CALL COMSDG
  667.                 DB _DEV_STATUS
  668.                 POP DE
  669.                 POP HL
  670.                 AND A
  671.                 SET 1,E                         ;ЕСТЬ SD КАРТА NEOGS
  672.                 JR Z,CRTLSD1
  673.                 RES 1,E                         ;КАРТЫ НЕТ
  674.                 EX DE,HL
  675.                 LD HL,FLAGS_DRV
  676.                 RES 7,(HL)
  677.                 EX DE,HL
  678. CRTLSD1         PUSH HL
  679.                 CALL COMSDZ
  680.                 DB _DEV_STATUS
  681.                 POP HL
  682.                 AND A
  683.                 SET 0,E                         ;ЕСТЬ SD КАРТЫ ZC
  684.                 JR Z,CRTLSD2
  685.                 RES 0,E                         ;КАРТЫ НЕТ
  686. CRTLSD2         POP IY
  687.                 LD HL,FLAGS_DRV
  688.                 LD A,0XFC
  689.                 AND (HL)
  690.                 OR E
  691.                 LD (HL),A
  692.                 RET
  693.