Subversion Repositories pentevo

Rev

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

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