Subversion Repositories pentevo

Rev

Rev 831 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

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