;LAST UPDATE: 30.06.2019 savelij
 
 
 
MASTER          EQU 0
 
SLAVE           EQU 0X80
 
 
 
;DRV_A          EQU 0                   ;DRIVE A
 
;DRV_B          EQU 1                   ;DRIVE B
 
;DRV_C          EQU 2                   ;DRIVE C
 
;DRV_D          EQU 3                   ;DRIVE D
 
;SDZ            EQU 4                   ;SD КАРТА НА ZC
 
;SDG            EQU 5                   ;SD КАРТА НА NEOGS
 
;HDDN           EQU 6                   ;HDD NEMO
 
;HDDS           EQU 7                   ;HDD SMUC
 
;HDDV           EQU 8                   ;HDD DIVIDE
 
 
 
EXTERNAL        EQU 0                   ;ВНЕШНИЙ ВЫЗОВ
 
INTERNAL        EQU 1                   ;ВНУТРЕННИЙ ВЫЗОВ
 
INT4EXT         EQU 3                   ;ВНУТРЕННИЙ ВЫЗОВ ДЛЯ ВЫЗВАВШЕЙ ПРОГИ
 
 
 
B_SDZ           EQU %00000001
 
B_SDG           EQU %00000010
 
B_HDD           EQU %00000100
 
B_NEW_SD        EQU %01000000
 
B_INST_SDG      EQU %10000000
 
 
 
;ВЫЗОВ ВЫБРАННОГО ДРАЙВЕРА
 
TO_DRV          PUSH HL
 
                LD L,A
 
                LD A,IYL
 
                AND A
 
                LD A,L
 
                JR NZ,TO_DRV1
 
                CALL P5_READ_BYTE
 
                LD A,(RREG_A)
 
                LD DE,(RREG_E)
 
                LD BC,(RREG_C)
 
                LD HL,(RREG_L)
 
                EX (SP),HL
 
TO_DRV1         LD HL,(GO_DEV)
 
                EX (SP),HL
 
                RET
 
 
 
;ВНЕШНИЙ ВЫЗОВ МЕНЕДЖЕРА УСТРОЙСТВ
 
COM_DEV         EX AF,AF'
 
                CALL P5_READ_BYTE
 
                LD A,(NEXTBYTERST8)
 
                PUSH IY
 
                LD IYL,EXTERNAL                 ;ВНЕШНИЙ ВЫЗОВ
 
NEXT_ICOM_DEV   PUSH IX
 
                PUSH HL
 
                LD HL,EXITDEV
 
                EX (SP),HL
 
                PUSH HL
 
                ADD A,A
 
                ADD A,LOW (TABLDEV)
 
                LD L,A
 
                ADC A,HIGH (TABLDEV)
 
                SUB L
 
                LD H,A
 
                LD A,(HL)
 
                INC HL
 
                LD H,(HL)
 
                LD L,A
 
                EX AF,AF'
 
                EX (SP),HL
 
                RET
 
 
 
EXITDEV         POP IX
 
                POP IY
 
                RET
 
 
 
;ВНУТРЕННИЙ ВЫЗОВ МЕНЕДЖЕРА УСТРОЙСТВ
 
ICOM_DEV        EX AF,AF'
 
                EX (SP),HL
 
                LD A,(HL)
 
                INC HL
 
                EX (SP),HL
 
                PUSH IY
 
                LD IYL,INTERNAL                 ;ВНУТРЕННИЙ ВЫЗОВ
 
                JR NEXT_ICOM_DEV
 
 
 
TABLDEV         DW DEVFIND                      ;00 ПОИСК УСТРОЙСТВ
 
                DW SET_VOL                      ;01 ВЫБОР РАЗДЕЛА
 
                DW KOL_VOL                      ;02 ЗАПРОС НАЙДЕНОГО
 
                DW GET_FNDVOLUME                ;03 ПОЛУЧИТЬ ТАБЛИЦУ НАЙДЕННЫХ РАЗДЕЛОВ
 
                DW TO_DRV                       ;04 ВЫЗОВ ДРАЙВЕРА ВЫБРАННОГО УСТРОЙСТВА
 
                DW SET_DEVICE                   ;05 УСТАНОВКА БИТОВ УСТРОЙСТВА И LBA РЕЖИМА
 
                DW CONTROL_SD                   ;06 КОНТРОЛЬ НАЛИЧИЯ SD КАРТ
 
                DW COMHDDNEX                    ;07 ПРЯМОЙ ВЫЗОВ ДРАЙВЕРА HDD NEMO (ВРЕМЕННАЯ ФУНКЦИЯ)
 
                DW FREINIT_VOL                  ;08 ПОЛНАЯ ПЕРЕИНИЦИАЛИЗАЦИЯ РАЗДЕЛА
 
 
 
;ФОРМАТ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
 
;+0(1)-0-DRIVE A
 
;      1-DRIVE B
 
;      2-DRIVE C
 
;      3-DRIVE D
 
;      4-SD КАРТА ZC
 
;      5-SD КАРТА NEOGS
 
;      6-HDD NEMO
 
;      7-HDD SMUC
 
;      8-HDD DIVIDE
 
;+1(1)-ДЛЯ SD-ТУПО 0
 
;      ИНАЧЕ HDD/CD 0-MASTER, 1-SLAVE
 
;+2(1)-ТИП РАЗДЕЛА, В ТАБЛИЦЕ ТОЛЬКО
 
;РАЗДЕЛЫ:
 
;00=01-FAT12
 
;01=04,06,0E-FAT16
 
;02=0B,0C-FAT32
 
;+3(4)-СТАРТОВЫЙ СЕКТОР РАЗДЕЛА
 
;+7(1)-РЕЗЕРВ
 
 
 
;ТОЧКА ВХОДА ДЛЯ ПОИСКА РАЗДЕЛОВ
 
;HL-АДРЕС КУДА ПОКЛАСТЬ ТАБЛИЦУ РАЗДЕЛОВ
 
;НА ВЫХОДЕ:
 
;A-КОЛ-ВО РАЗДЕЛОВ
 
DEVFIND         LD A,(FLAGS_DRV)
 
                AND B_NEW_SD
 
                JR NZ,.L1
 
                LD HL,0XFE
 
                LD IX,BUF_TABLVOL
 
                ROMCALL CRC16_FAST,ROM_RST81
 
                LD BC,(BUF_TABLVOL+0XFE)
 
                AND A
 
                SBC HL,BC
 
                JP Z,KOL_VOL
 
.L1             LD HL,FLAGS_DRV
 
                LD A,B_NEW_SD!0XFF
 
                AND (HL)
 
                LD (HL),A
 
                PUSH IY
 
                XOR A
 
                LD (KOLDVOL),A
 
                LD HL,BUF_TABLVOL
 
                LD DE,BUF_TABLVOL+1
 
                LD BC,0XEF
 
                LD (HL),B
 
                LDIR
 
                LD IX,DEVICES
 
                LD IYL,INTERNAL
 
                LD A,(HDDTIMEOUT)
 
.L2             EI
 
                HALT
 
                HALT
 
                DI
 
                DEC A
 
                JR NZ,.L2
 
                INC A
 
                LD (HDDTIMEOUT),A
 
;NEMO
 
                LD HL,BUF_512                   ;АДРЕС БУФЕРА ДЛЯ ЗАГРУЗКИ СЕКТОРА (512 БАЙТ)
 
                CALL COMHDDN
 
                DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ УСТРОЙСТВА С ОПРЕДЕЛЕНИЕМ ЧТО ПОДКЛЮЧЕНО
 
                LD A,H
 
                AND A
 
                JR NZ,.L3
 
                LD (IX+0),_HDD_NEMO_MASTER+MASTER
 
                INC IX
 
.L3     
 
;SD ON NEOGS
 
                LD H,CMOS_BYTE_01
 
                ROMCALL READCMOS,ROM_RST82
 
                LD A,L
 
                AND M_ACCESSSDG                 ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
 
                JR Z,.L4                        ;ЕСЛИ ЗАПРЕЩЕН, ТО НЕ ВЫЗЫВАЕМ
 
                CALL INSTSDD                    ;УCТАНОВКА ДРАЙВЕРА SD КАРТЫ НА NEOGS
 
                AND A
 
                JR NZ,.L4                       ;НЕ ИНИЦИАЛИЗИРОВАТЬ ЕСЛИ NEOGS НЕ НАЙДЕН
 
                LD HL,FLAGS_DRV
 
                SET 7,(HL)                      ;ДРАЙВЕР УСТАНОВИЛСЯ
 
                CALL COMSDG
 
                DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ НА NEOGS
 
                AND A
 
                JR NZ,.L4
 
                LD (IX+0),_SD_SDG
 
                INC IX
 
.L4
 
;USB FLASH
 
        IF USB_ENABLE
 
                CALL COMUSBF
 
                DB _DEV_INIT
 
                AND A
 
                JR Z,.L8
 
                LD (IX+0),_SL_USBF
 
                INC IX
 
        ENDIF
 
.L8
 
;SD ON Z-CONTROLLER
 
                CALL COMSDZ
 
                DB _DEV_INIT                    ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ
 
                AND A
 
                JR NZ,.L5
 
                LD (IX+0),_SD_SDZ
 
                INC IX
 
.L5             LD (IX+0),0XFF                  ;ДАЛЕЕ НЕТ НАЙДЕННЫХ УСТРОЙСТВ
 
                CALL FIND_SD
 
                LD HL,DEVICES
 
                LD IX,BUF_TABLVOL
 
                LD A,(HL)
 
                INC A
 
                JR Z,.L7
 
.L6             CALL FINDVOL
 
                INC HL
 
                LD A,(HL)
 
                INC A
 
                JR NZ,.L6
 
.L7             CALL SETVOLD                    ;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
 
                POP IY
 
                SCF
 
                JP Z,KOLVOL1                    ;ПЕРЕХОД ЕСЛИ НИЧЕГО НЕ НАЙДЕНО
 
                DEC A
 
                LD (SETDVOL),A
 
;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
 
INIT_VOLS       LD IX,BUF_TABLVOL
 
                LD A,(SETDVOL)
 
                PUSH AF                         ;СОХРАНИЛИ ТЕКУЩИЙ ВЫБРАННЫЙ РАЗДЕЛ
 
                LD A,(KOLDVOL)
 
                LD E,A
 
                LD D,0
 
IV_SETDRV2      PUSH AF
 
                LD A,D
 
                LD (SETDVOL),A
 
                LD A,(IX+0)
 
                CP _SD_SDZ
 
                LD HL,COMSDZ
 
                JR Z,IV_SETDRV1
 
                CP _SL_USBF
 
                LD HL,COMUSBF
 
                JR Z,IV_SETDRV1
 
                CP _SD_SDG
 
                LD HL,COMSDG
 
                JR Z,IV_SETDRV1
 
                LD HL,COMHDDN
 
IV_SETDRV1      LD (GO_DEV),HL                  ;УСТАНОВИЛИ АДРЕС ТЕКУЩЕГО ВЫЗЫВАЕМОГО ДРАЙВЕРА
 
                LD A,(IX+2)
 
                LD HL,BUF_TABLVOL
 
                PUSH DE
 
                CALL ICOM_FAT
 
                DB _INIT_FATVARS
 
                PUSH AF
 
                CALL SAVE_FNDVOL
 
                POP AF
 
                POP DE
 
                CALL C,DEL_VOL                  ;РАЗДЕЛ НЕИЗВЕСТЕН ИЛИ НЕ ОТФОРМАТИРОВАН, УДАЛЯЕМ ОПИСАТЕЛЬ
 
                INC D
 
                LD BC,8
 
                ADD IX,BC
 
                POP AF
 
                DEC A
 
                JR NZ,IV_SETDRV2
 
;====ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ ВСЕХ НАЙДЕННЫХ РАЗДЕЛОВ====
 
                POP AF
 
                CALL SET_VOL1                   ;ВОССТАНОВЛЕНИЕ ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
 
                LD A,(KOLDVOL)
 
                DEC A
 
                CALL C,SET_VOL1                 ;ЕСЛИ ВЫБРАН НЕ СУЩЕСТВУЮЩИЙ РАЗДЕЛ, ТО ПРИНУДИТЕЛЬНО ВЫБИРАЕМ ПОСЛЕДНИЙ НАЙДЕННЫЙ
 
                CALL ICOM_FAT
 
                DB _INIT_TEKDIR
 
                LD HL,0XFE
 
                LD IX,BUF_TABLVOL
 
                ROMCALL CRC16_FAST,ROM_RST81
 
                LD (CRC_DRVS),HL
 
KOL_VOL         LD A,IYL
 
                AND A
 
                JR NZ,IKOL_VOL
 
                LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
 
                INC HL
 
                INC HL
 
                LD A,(HL)                       ;ТИП РАЗДЕЛА
 
                LD HL,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
 
                LD (RREG_E),HL
 
                AND A
 
KOLVOL1         PUSH AF
 
                POP HL
 
                LD (RREG_F),HL
 
                RET
 
 
 
;УДАЛЕНИЕ РАЗДЕЛА ИЗ ТАБЛИЦЫ
 
DEL_VOL         PUSH DE
 
                PUSH IX
 
                POP HL
 
                EX DE,HL
 
                LD HL,8
 
                ADD HL,DE
 
                LD C,L
 
                LD A,26*8
 
                SUB C
 
                LD C,A
 
                LD B,0
 
                LDIR
 
                LD BC,-8
 
                ADD IX,BC
 
                LD HL,KOLDVOL
 
                DEC (HL)
 
                POP DE
 
                DEC D
 
                RET
 
 
 
FINDVOL         PUSH HL
 
                LD A,(HL)
 
                LD (TEK_TYPE),A
 
                AND 0X7F
 
                CP _HDD_NEMO_MASTER
 
                LD HL,COMHDDN
 
                JR Z,FINDVOL1
 
                CP _SD_SDG
 
                LD HL,COMSDG
 
                JR Z,FINDVOL1
 
                LD HL,COMSDZ
 
FINDVOL1        LD (GO_DEV),HL                  ;ВЫСТАВИЛИ АДРЕС ВЫЗОВА НУЖНОГО ДРАЙВЕРА
 
                LD DE,0
 
                LD B,D
 
                LD C,D                          ;ЧИТАТЬ СЕКТОР 0
 
                LD A,1                          ;1 СЕКТОР
 
                LD HL,BUF_512                   ;АДРЕС БУФЕРА ЧТЕНИЯ
 
                PUSH HL
 
                LD IYL,INTERNAL
 
                CALL TO_DRV
 
                DB _DEV_READ
 
                DEC HL
 
                LD D,(HL)
 
                DEC HL
 
                LD E,(HL)
 
                LD HL,0XAA55
 
                AND A
 
                SBC HL,DE
 
                POP IY
 
                LD (ADRTEKV),IX
 
                CALL Z,READ_MBR
 
                POP HL
 
                RET
 
 
 
;ЗАПРОС НАЙДЕНОГО И ТЕКУЩЕГО ВЫБРАННОГО УСТРОЙСТВА
 
IKOL_VOL        LD HL,(ADRTEKV)                 ;АДРЕС ТЕКУЩЕГО ВЫБРАННОГО РАЗДЕЛА
 
                INC HL
 
                INC HL
 
                LD A,(HL)                       ;ТИП РАЗДЕЛА
 
                LD DE,(KOLDVOL)                 ;D-НОМЕР ВЫБРАННОГО РАЗДЕЛА, E-КОЛИЧЕСТВО НАЙДЕННЫХ РАЗДЕЛОВ
 
                LD HL,BUF_TABLVOL               ;АДРЕС НАЧАЛА ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ
 
                AND A
 
                RET
 
 
 
;ВЫЧИСЛЕНИЕ КОЛИЧЕСТВА НАЙДЕННЫХ РАЗДЕЛОВ НА ВСЕХ УСТРОЙСТВАХ
 
SETVOLD         LD A,IXL
 
                RRCA
 
                RRCA
 
                RRCA
 
                AND 0X1F
 
                LD (KOLDVOL),A
 
                RET
 
 
 
;ВЫБОР РАЗДЕЛА И ИНИТ ЕГО ПЕРЕМЕННЫХ
 
FREINIT_VOL     LD L,A
 
                LD A,IYL
 
                AND A
 
                JR Z,FREINITVOL1
 
                LD A,(RREG_A)
 
FREINITVOL1     LD IYL,INTERNAL
 
                CALL SET_VOL1
 
                CALL INIT_FATVARS
 
                JP INIRTSC
 
 
 
;ВЫБОР РАЗДЕЛА
 
SET_VOL         LD L,A
 
                LD A,IYL
 
                AND A
 
                LD A,L
 
                JR NZ,SET_VOL1
 
                LD A,(RREG_A)
 
                LD HL,KOLVOL1
 
                PUSH HL
 
SET_VOL1        PUSH AF
 
                CALL SAVE_FNDVOL
 
                POP AF
 
SET_VOL_MNT     LD HL,KOLDVOL
 
                CP (HL)
 
                CCF
 
                RET C
 
                LD (SETDVOL),A
 
                LD L,A
 
                LD H,0
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                LD DE,BUF_TABLVOL
 
                ADD HL,DE
 
                LD (ADRTEKV),HL
 
                LD A,(HL)
 
;               CP 4
 
;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
 
;               JR C,SET_DRV
 
                CP _SL_USBF
 
                LD HL,COMUSBF
 
                JR Z,SET_DRV
 
                CP _SD_SDZ
 
                LD HL,COMSDZ
 
                JR Z,SET_DRV
 
                CP _SD_SDG
 
                LD HL,COMSDG
 
                JR Z,SET_DRV
 
                LD HL,COMHDDN
 
SET_DRV         LD (GO_DEV),HL
 
                CALL LOAD_FNDVOL
 
                LD HL,0XFE
 
                PUSH IX
 
                LD IX,BUF_TABLVOL
 
                ROMCALL CRC16_FAST,ROM_RST81
 
                POP IX
 
                LD (CRC_DRVS),HL
 
                XOR A
 
                RET
 
 
 
SAVE_FNDVOL     PUSH IX
 
                LD HL,0XFE
 
                LD IX,ERORDRV
 
                ROMCALL CRC16_FAST,ROM_RST81
 
                POP IX
 
                LD (CRC_VOL),HL                 ;ВЫЧИСЛЕНИЕ CRC РАЗДЕЛА ПЕРЕД СОХРАНЕНИЕМ
 
                EVOPORT WIN_P5,RAM_FATVARS
 
                LD A,(SETDVOL)
 
                ADD A,HIGH (CPU5+BUF_ALLVOL)+4
 
                LD D,A
 
                LD E,0
 
                LD HL,BUF_TEKVOL
 
                LD BC,0X100
 
                LDIR
 
                RET
 
 
 
LOAD_FNDVOL     EVOPORT WIN_P5,RAM_FATVARS
 
                LD A,(SETDVOL)
 
                ADD A,HIGH (CPU5+BUF_ALLVOL)+4
 
                LD H,A
 
                LD L,0
 
                LD DE,BUF_TEKVOL
 
                LD BC,0X100
 
                LDIR
 
;               PUSH IX
 
;               LD HL,0XFE
 
;               LD IX,ERORDRV
 
;               ROMCALL CRC16_FAST,P_ADDON1
 
;               POP IX
 
;               LD DE,(CRC_VOL)
 
;               AND A
 
;               SBC HL,DE
 
;               JP NZ,REDEVFIND
 
                CALL ICOM_FAT
 
                DB _INIT_TEKDIR
 
                RET
 
 
 
CMP_SDCARD      LD A,(SETDVOL)
 
                CP _SD_SDG
 
                JR NZ,CMPSDCARD1
 
                LD H,CMOS_BYTE_01
 
                ROMCALL READCMOS,ROM_RST82
 
                LD A,L
 
                AND M_ACCESSSDG                 ;ПРОВЕРКА РАЗРЕШЕНИЯ ДОСТУПА К SD КАРТЕ NEOGS
 
                RET Z
 
CMPSDCARD1      PUSH IY
 
                LD IYL,INTERNAL
 
                CALL TO_DRV
 
                DB _DEV_STATUS
 
                POP IY
 
                INC A
 
                RET
 
 
 
READ_MBR        LD DE,0X01BE                    ;СМЕЩЕНИЕ В 0 СЕКТОРЕ УСТРОЙСТВА ДО ТАБЛИЦЫ MBR
 
                PUSH IY
 
                ADD IY,DE                       ;УСТАНОВИЛИ УКАЗАТЕЛЬ НА НАЧАЛО ОПИСАТЕЛЕЙ РАЗДЕЛОВ
 
                LD BC,0X0400                    ;РАЗДЕЛОВ МАКСИМУМ 4 И ОБНУЛИЛИ СЧЕТЧИК РАЗДЕЛОВ С FAT
 
RDMBR0          LD A,(IY)                       ;ПЕРВЫЙ БАЙТ 16 БАЙТНОГО ОПИСАТЕЛЯ
 
                AND A                           ;ДОЛЖЕН БЫТЬ РАВЕН 0
 
                JR Z,RDMBR1
 
                CP 0X80                         ;ИЛИ 0X80 (ПРИЗНАК ЗАГРУЗОЧНОГО РАЗДЕЛА)
 
                JR NZ,RDMBR2
 
RDMBR1          LD A,(IY+4)                     ;БАЙТ ТИПА РАЗДЕЛА
 
                CALL CP_RAZD                    ;ПРОВЕРКА ТИПА РАЗДЕЛА
 
                JR NZ,RDMBR2                    ;ЕСЛИ НЕ FAT ТО ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ
 
                INC C
 
RDMBR2          LD DE,0X10
 
                ADD IY,DE
 
                DJNZ RDMBR0                     ;ПРОВЕРЯЕМ СЛЕДУЮЩУЮ 16 БАЙТНУЮ ЗАПИСЬ В MBR
 
                LD A,C
 
                AND A
 
                POP HL
 
                JP NZ,SCANMBR
 
                PUSH HL
 
                POP IY
 
                LD C,(IY+0X0D)
 
                XOR A
 
                LD E,A
 
                LD B,8
 
                RR C
 
                ADC A,0
 
                DJNZ $-4
 
                DEC A
 
                JR NZ,$+3
 
                INC E
 
                LD A,(IY+0X0E)
 
                OR (IY+0X0F)
 
                JR Z,$+3
 
                INC E
 
;               LD A,(IY+0X13)
 
;               OR (IY+0X14)
 
;               JR Z,$+3
 
;               INC E
 
;               LD A,(IY+0X20)
 
;               OR (IY+0X21)
 
;               OR (IY+0X22)
 
;               OR (IY+0X22)
 
;               JR Z,$+3
 
;               INC E
 
                LD A,(IY+0X15)
 
                AND 0XF0
 
                CP 0XF0
 
                JR NZ,$+3
 
                INC E
 
                LD A,E
 
                CP 3;4
 
                RET NZ
 
                LD A,(TEK_TYPE)
 
                BIT 7,A
 
                LD B,0
 
                JR Z,$+3
 
                INC B
 
                AND 0X7F
 
                LD C,A
 
                PUSH IX
 
                POP HL
 
                XOR A
 
                LD (HL),C
 
                INC HL
 
                LD (HL),B
 
                INC HL
 
                LD (HL),0XFF
 
                INC HL
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                INC HL
 
                LD (HL),A
 
                LD DE,8
 
                ADD IX,DE
 
INIT_VOL        PUSH IY
 
                LD IYL,INTERNAL
 
                CALL SETVOLD
 
                DEC A
 
                LD (SETDVOL),A
 
                LD L,A
 
                LD H,0
 
                ADD HL,HL
 
                ADD HL,HL
 
                ADD HL,HL
 
                LD DE,BUF_TABLVOL
 
                ADD HL,DE
 
                LD (ADRTEKV),HL
 
                LD A,(HL)
 
                AND 0X7F
 
;               CP 4
 
;               LD HL,DISKETA           ;ЕЩЕ НЕ ОСИЛИЛ
 
;               JR C,DSET_DRV
 
                CP _SL_USBF
 
                LD HL,COMUSBF
 
                JR Z,DSET_DRV
 
                CP _SD_SDZ
 
                LD HL,COMSDZ
 
                JR Z,DSET_DRV
 
                CP _SD_SDG
 
                LD HL,COMSDG
 
                JR Z,DSET_DRV
 
                LD HL,COMHDDN
 
DSET_DRV        LD (GO_DEV),HL
 
                CALL IKOL_VOL
 
                CALL ICOM_FAT
 
                DB _INIT_FATVARS
 
                LD (IX-6),A
 
                POP IY
 
                RET
 
 
 
;НА ВХОДЕ:
 
;A-BIT 7-0/1-MASTER/SLAVE
 
;BITS 6-0-ТИП НОСИТЕЛЯ
 
SCANMBR         LD DE,0X01BE
 
                ADD HL,DE
 
                EXX
 
                LD A,(TEK_TYPE)
 
                BIT 7,A
 
                LD B,0
 
                JR Z,$+3
 
                INC B
 
                AND 0X7F
 
                LD C,A
 
                EXX
 
                LD A,4
 
SCNMBR0         PUSH AF
 
                LD A,(HL)
 
                LD C,4
 
                ADD HL,BC
 
                LD C,0X0C
 
                AND A
 
                JR Z,SCNMBR1
 
                CP 0X80
 
                JR NZ,SCNMBR2
 
SCNMBR1         LD A,(HL)
 
                AND A
 
                JR Z,SCNMBR2
 
                CALL CP_RAZD
 
                JR NZ,SCNMBR2
 
SCNMBR3         EXX
 
                LD (IX+0),C
 
                LD (IX+1),B
 
                EXX
 
                LD (IX+2),E                     ;УСТАНОВКА ТИПА FAT
 
                PUSH IX
 
                POP DE
 
                INC DE
 
                INC DE
 
                INC DE
 
                LD C,4
 
                ADD HL,BC
 
                LDI
 
                LDI
 
                LDI
 
                LDI
 
                LD (IX+7),0                     ;РЕЗЕРВНЫЙ БАЙТ
 
SCNMBR4         LD C,8
 
                ADD IX,BC
 
                LD C,4
 
SCNMBR2         ADD HL,BC
 
                POP AF
 
                DEC A
 
                JR NZ,SCNMBR0
 
                RET
 
 
 
SET_DEVICE      PUSH AF
 
                PUSH HL
 
                LD A,B
 
                AND 0X0F
 
                LD B,A
 
                LD HL,(ADRTEKV)
 
                INC HL
 
                LD A,(HL)
 
                AND 1                           ;MASTER ИЛИ SLAVE?
 
                RLCA
 
                RLCA
 
                RLCA
 
                RLCA
 
                OR 0XE0                         ;ВСЕГДА LBA РЕЖИМ
 
                OR B
 
                LD B,A                          ;УСТАНОВИЛИ ВЫБРАННОЕ УСТРОЙСТВО MASTER ИЛИ SLAVE
 
                POP HL
 
                POP AF
 
                RET
 
 
 
;ПРОВЕРКА ТИПА РАЗДЕЛА
 
CP_RAZD         LD E,1                          ;FAT16
 
                CP 4
 
                RET Z
 
                CP 6
 
                RET Z
 
                CP 0X0E
 
                RET Z
 
                LD E,2                          ;FAT32
 
                CP 0X0B
 
                RET Z
 
                CP 0X0C
 
                RET Z
 
                LD E,0                          ;FAT12
 
                CP 1
 
                RET
 
 
 
;ВРЕМЕННАЯ ФУНКЦИЯ ВЫЗОВА ДРАЙВЕРА HDD NEMO
 
COMHDDNEX       CALL P5_READ_BYTE
 
                LD A,(RREG_AA)
 
                EX AF,AF'
 
                LD A,(RREG_A)
 
                LD DE,(RREG_E)
 
                LD BC,(RREG_C)
 
                LD HL,(RREG_L)
 
                CALL COMHDDN
 
                LD (RREG_A),A
 
                LD (RREG_L),HL
 
                LD (RREG_E),DE
 
                LD (RREG_C),BC
 
                RET
 
 
 
;КОПИРОВАНИЕ ТАБЛИЦЫ НАЙДЕННЫХ РАЗДЕЛОВ ВО ВНЕШНЮЮ ПРОГРАММУ
 
GET_FNDVOLUME   LD BC,0X100                     ;ПЕРЕНОС 256 БАЙТ
 
                LD DE,(RREG_L)                  ;АДРЕС КУДА ПЕРЕНОСИТЬ
 
                LD HL,BUF_TABLVOL-CPU6
 
                JP LDIR_BYTES
 
 
 
CONTROL_SD      LD A,(FLAGS_DRV)
 
                PUSH AF
 
                CALL FIND_SD
 
                LD C,A
 
                AND 3
 
                LD (RREG_A),A
 
                LD A,C
 
                POP BC
 
                CP B
 
                JP NZ,SD_CARD_LOST
 
                RET
 
 
 
FIND_SD         PUSH IY
 
                LD IYL,INTERNAL
 
                LD E,0
 
                LD A,(FLAGS_DRV)
 
                AND B_INST_SDG
 
                JR Z,CRTLSD1                    ;ЕСЛИ ДРАЙВЕР НЕ УСТАНОВЛЕН
 
                PUSH HL
 
                PUSH DE
 
                CALL COMSDG
 
                DB _DEV_STATUS
 
                POP DE
 
                POP HL
 
                AND A
 
                SET 1,E                         ;ЕСТЬ SD КАРТА NEOGS
 
                JR Z,CRTLSD1
 
                RES 1,E                         ;КАРТЫ НЕТ
 
                EX DE,HL
 
                LD HL,FLAGS_DRV
 
                RES 7,(HL)
 
                EX DE,HL
 
CRTLSD1         PUSH HL
 
                CALL COMSDZ
 
                DB _DEV_STATUS
 
                POP HL
 
                AND A
 
                SET 0,E                         ;ЕСТЬ SD КАРТЫ ZC
 
                JR Z,CRTLSD2
 
                RES 0,E                         ;КАРТЫ НЕТ
 
CRTLSD2         POP IY
 
                LD HL,FLAGS_DRV
 
                LD A,0XFC
 
                AND (HL)
 
                OR E
 
                LD (HL),A
 
                RET