Subversion Repositories pentevo

Rev

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

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