Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 08.09.2011 savelij
  3.  
  4. Hddinit         EQU 0
  5. Hddoff          EQU 1
  6. Hddrds          EQU 2
  7. Hddrdm          EQU 3
  8.  
  9. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С HDD NEMO
  10. COMHDDN         EX AF,AF'
  11.                 LD A,IYL
  12.                 AND A
  13.                 LD A,(NEXTBYTERST8)
  14.                 JR Z,COMHDDN1
  15.                 EX (SP),HL
  16.                 LD A,(HL)
  17.                 INC HL
  18.                 EX (SP),HL
  19. COMHDDN1        ADD A,A
  20.                 PUSH HL
  21.                 LD HL,RET4NEMO
  22.                 EX (SP),HL
  23.                 PUSH HL
  24.                 LD HL,TBLHDDN
  25.                 ADD A,L
  26.                 LD L,A
  27.                 ADC A,H
  28.                 SUB L
  29.                 LD H,A
  30.                 LD A,(HL)
  31.                 INC HL
  32.                 LD H,(HL)
  33.                 LD L,A
  34.                 EX AF,AF'
  35.                 EX (SP),HL
  36.                 RET
  37.  
  38. RET4NEMO        PUSH AF
  39.                 LD A,IYL
  40.                 AND A
  41.                 JR NZ,RET4NEMO1
  42.                 LD (REG_L),HL
  43.                 EX (SP),HL
  44.                 LD (REG_F),HL
  45.                 EX (SP),HL
  46. RET4NEMO1       POP AF
  47.                 RET
  48.  
  49. TBLHDDN         DW HDDINIT
  50.                 DW HDDOFF
  51.                 DW HDDRDS                       ;READ SINGLE
  52.                 DW HDDRDM                       ;READ MULTI
  53.  
  54. ;Входные параметры общие:
  55. ;HL-адрес загрузки в память
  56. ;BCDE-32-х битный номер сектора
  57. ;A-количество блоков (блок=512 байт)
  58. ;только для многоблочной записи/чтении
  59.  
  60. P_1F7           EQU 0XF0                        ;РЕГИСТР СОСТОЯНИЯ/РЕГИСТР КОМАНД
  61. P_1F6           EQU 0XD0                        ;CHS-НОМЕР ГОЛОВЫ И УСТР/LBA АДРЕС 24-27
  62. P_1F5           EQU 0XB0                        ;CHS-ЦИЛИНДР 8-15/LBA АДРЕС 16-23
  63. P_1F4           EQU 0X90                        ;CHS-ЦИЛИНДР 0-7/LBA АДРЕС 8-15
  64. P_1F3           EQU 0X70                        ;CHS-НОМЕР СЕКТОРА/LBA АДРЕС 0-7
  65. P_1F2           EQU 0X50                        ;СЧЕТЧИК СЕКТОРОВ
  66. P_1F1           EQU 0X30                        ;ПОРТ ОШИБОК/СВОЙСТВ
  67. P_1F0           EQU 0X10                        ;ПОРТ ДАННЫХ
  68. P_3F6           EQU 0XC8                        ;РЕГИСТР СОСТОЯНИЯ/УПРАВЛЕНИЯ
  69. P_HI            EQU 0X11                        ;СТАРШИЕ 8 БИТ
  70. PRT_RW          EQU P_1F0*0X100+P_HI            ;ПОРТЫ ЧТЕНИЯ/ЗАПИСИ ОДНИМ СЛОВОМ
  71.  
  72. ;НА ВЫХОДЕ:
  73. ;H-ДЛЯ MASTER 0-HDD, 1-CDROM, 0XFF-NONE
  74. ;L-ДЛЯ SLAVE  0-HDD, 1-CDROM, 0XFF-NONE
  75. HDDINIT         LD A,0XE0
  76.                 PUSH HL
  77.                 CALL ID_DEV
  78.                 POP HL
  79.                 AND A
  80.                 CALL Z,INIT_91
  81.                 LD D,A
  82.                 PUSH DE
  83. ;               LD A,0XF0
  84. ;               PUSH HL
  85. ;               CALL ID_DEV
  86. ;               POP HL
  87. ;               AND A
  88. ;               CALL Z,INIT_91
  89.                 POP HL
  90.                 LD L,0XFF;A
  91.                 XOR A
  92.  
  93. HDDOFF          RET
  94.  
  95. INIT_91         PUSH HL
  96.                 PUSH BC
  97.                 LD A,IYL
  98.                 AND A
  99.                 JR NZ,INIT91_1
  100.                 LD BC,WIN_P2
  101.                 LD A,0XFD
  102.                 OUT (C),A
  103. INIT91_1        LD L,49*2+1
  104.                 LD A,(HL)
  105.                 AND 2
  106.                 JR Z,INI_912
  107.                 LD BC,0XFF00+P_1F2
  108.                 LD L,0X0C
  109.                 LD A,(HL)
  110.                 OUT (C),A
  111.                 LD L,6
  112.                 LD C,P_1F6
  113.                 LD A,(HL)
  114.                 DEC A
  115.                 OUT (C),A
  116.                 LD C,P_1F7
  117.                 LD A,0X91
  118.                 OUT (C),A
  119.                 LD DE,0X1000
  120. INI_911         DEC DE
  121.                 LD A,D
  122.                 OR E
  123.                 JR Z,INI_912
  124.                 IN A,(C)
  125.                 AND 0X80
  126.                 JR NZ,INI_911
  127.                 LD L,A
  128.                 LD A,IYL
  129.                 AND A
  130.                 LD A,L
  131.                 JR NZ,INIT91_2
  132.                 LD BC,WIN_P2
  133.                 XOR A
  134.                 OUT (C),A
  135. INIT91_2        POP BC
  136.                 POP HL
  137.                 RET
  138.  
  139. INI_912         LD A,0XFF
  140.                 POP HL
  141.                 RET
  142.  
  143. HDDRDS          LD A,1
  144. HDDRDM          PUSH BC
  145.                 PUSH DE
  146.                 CALL SETHREG
  147.                 EX AF,AF'
  148.                 LD C,P_1F7
  149.                 LD A,0X20
  150.                 OUT (C),A
  151.                 LD C,P_1F7
  152. HDDRD1          IN A,(C)
  153.                 AND 0X88
  154.                 CP 8
  155.                 JR NZ,HDDRD1
  156.                 EX AF,AF'
  157. HDDRD2          EX AF,AF'
  158.                 CALL READSEC
  159.                 LD C,P_1F7
  160. HDDRD3          IN A,(C)
  161.                 AND 0X80
  162.                 JR NZ,HDDRD3
  163.                 EX AF,AF'
  164.                 DEC A
  165.                 JR NZ,HDDRD2
  166.                 POP DE
  167.                 POP BC
  168.                 XOR A
  169.                 RET
  170.  
  171. READSEC         LD A,IYL
  172.                 AND A
  173.                 JR Z,RD2MEM
  174. ;ВНУТРЕННИЙ ВЫЗОВ. ЧТЕНИЕ СЕКТОРА ВО ВНУТРЕНННИЙ БУФЕР
  175.                 LD BC,P_1F0
  176.                 INIR
  177.                 INIR
  178.                 XOR A
  179.                 RET
  180.  
  181. ;ВНЕШНИЙ ВЫЗОВ. ЧТЕНИЕ СЕКТОРА В ПАМЯТЬ ВЫЗВАВШЕГО
  182. RD2MEM          LD BC,WIN_P2
  183.                 LD A,0XFD
  184.                 OUT (C),A
  185.                 LD BC,P_1F0
  186.                 INIR
  187.                 INIR
  188.                 LD BC,WIN_P2
  189.                 XOR A
  190.                 OUT (C),A
  191.                 RET
  192.  
  193. SETHREG         PUSH DE
  194.                 CALL ICOM_DEV
  195.                 DB Set_device
  196.                 LD D,B
  197.                 LD E,C
  198.                 LD BC,0XFF00+P_1F6
  199.                 OUT (C),D
  200.                 EX AF,AF'
  201.                 LD C,P_1F7
  202. SETHRE1         IN A,(C)
  203.                 AND 0X80
  204.                 JR NZ,SETHRE1
  205.                 LD C,P_1F5
  206.                 OUT (C),E
  207.                 POP DE
  208.                 LD C,P_1F4
  209.                 OUT (C),D
  210.                 LD C,P_1F3
  211.                 OUT (C),E
  212.                 LD C,P_1F2
  213.                 EX AF,AF'
  214.                 OUT (C),A
  215.                 RET
  216.  
  217. ;HL-АДРЕС БУФЕРА СЕКТОРА ИДЕНТИФИКАЦИИ
  218. ;A=E0-ДЛЯ MASTER, A=F0-ДЛЯ SLAVE
  219. ID_DEV          LD BC,0XFF00+P_1F6
  220.                 OUT (C),A
  221.                 LD C,P_1F7
  222.                 IN A,(C)
  223.                 AND A
  224.                 JR Z,NO_DEV
  225.                 INC A
  226.                 JR Z,NO_DEV
  227.                 XOR A
  228.                 LD C,P_1F5
  229.                 OUT (C),A
  230.                 LD C,P_1F4
  231.                 OUT (C),A
  232.                 LD A,0XEC
  233.                 LD C,P_1F7
  234.                 OUT (C),A
  235.                 LD C,P_1F7
  236. ID_DEV1         IN A,(C)
  237.                 AND A
  238.                 JR Z,NO_DEV
  239.                 INC A
  240.                 JR Z,NO_DEV
  241.                 DEC A
  242.                 RRCA
  243.                 JR C,ID_DEV2
  244.                 RLCA
  245.                 AND 0X88
  246.                 CP 8
  247.                 JR NZ,ID_DEV1
  248. ID_DEV2         LD C,P_1F4
  249.                 IN E,(C)
  250.                 LD C,P_1F5
  251.                 IN D,(C)
  252.                 LD A,D
  253.                 OR E
  254.                 JP Z,READSEC
  255.                 LD HL,0XEB14
  256.                 SBC HL,DE
  257.                 LD A,1
  258.                 RET Z
  259. NO_DEV          LD A,0XFF
  260.                 RET
  261.