Subversion Repositories pentevo

Rev

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

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