Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 26.05.2012 savelij
  3.  
  4. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С HDD NEMO
  5. COMHDDN         EX AF,AF'
  6.                 LD A,IYL
  7.                 AND A
  8.                 LD A,(NEXTBYTERST8)
  9.                 JR Z,COMHDDN1
  10.                 EX (SP),HL
  11.                 LD A,(HL)
  12.                 INC HL
  13.                 EX (SP),HL
  14. COMHDDN1        ADD A,A
  15.                 PUSH HL
  16.                 LD HL,RET4NEMO
  17.                 EX (SP),HL
  18.                 PUSH HL
  19.                 LD HL,TBLHDDN
  20.                 ADD A,L
  21.                 LD L,A
  22.                 ADC A,H
  23.                 SUB L
  24.                 LD H,A
  25.                 LD A,(HL)
  26.                 INC HL
  27.                 LD H,(HL)
  28.                 LD L,A
  29.                 EX AF,AF'
  30.                 EX (SP),HL
  31.                 RET
  32.  
  33. RET4NEMO        PUSH AF
  34.                 LD A,IYL
  35.                 AND A
  36.                 JR NZ,RET4NEMO1
  37.                 LD (RREG_L),HL
  38.                 EX (SP),HL
  39.                 LD (RREG_F),HL
  40.                 EX (SP),HL
  41. RET4NEMO1       POP AF
  42.                 RET
  43.  
  44. TBLHDDN         DW HDDINIT
  45.                 DW HDDOFF
  46.                 DW HDDRDM                       ;READ MULTI
  47.                 DW HDDWRM                       ;WRITE MULTI
  48.  
  49. ;ВХОДНЫЕ ПАРАМЕТРЫ ОБЩИЕ:
  50. ;HL-АДРЕС ЗАГРУЗКИ В ПАМЯТЬ
  51. ;BCDE-32-Х БИТНЫЙ НОМЕР СЕКТОРА
  52. ;A-КОЛИЧЕСТВО БЛОКОВ (БЛОК=512 БАЙТ)
  53. ;ТОЛЬКО ДЛЯ МНОГОБЛОЧНОЙ ЗАПИСИ/ЧТЕНИИ
  54.  
  55. P_1F7           EQU 0XF0                        ;РЕГИСТР СОСТОЯНИЯ/РЕГИСТР КОМАНД
  56. P_1F6           EQU 0XD0                        ;CHS-НОМЕР ГОЛОВЫ И УСТР/LBA АДРЕС 24-27
  57. P_1F5           EQU 0XB0                        ;CHS-ЦИЛИНДР 8-15/LBA АДРЕС 16-23
  58. P_1F4           EQU 0X90                        ;CHS-ЦИЛИНДР 0-7/LBA АДРЕС 8-15
  59. P_1F3           EQU 0X70                        ;CHS-НОМЕР СЕКТОРА/LBA АДРЕС 0-7
  60. P_1F2           EQU 0X50                        ;СЧЕТЧИК СЕКТОРОВ
  61. P_1F1           EQU 0X30                        ;ПОРТ ОШИБОК/СВОЙСТВ
  62. P_1F0           EQU 0X10                        ;ПОРТ ДАННЫХ
  63. P_3F6           EQU 0XC8                        ;РЕГИСТР СОСТОЯНИЯ/УПРАВЛЕНИЯ
  64. P_HI            EQU 0X11                        ;СТАРШИЕ 8 БИТ
  65. PRT_RW          EQU P_1F0*0X100+P_HI            ;ПОРТЫ ЧТЕНИЯ/ЗАПИСИ ОДНИМ СЛОВОМ
  66.  
  67. ;НА ВЫХОДЕ:
  68. ;H-ДЛЯ MASTER 0-HDD, 1-CDROM, 0XFF-NONE
  69. ;L-ДЛЯ SLAVE  0-HDD, 1-CDROM, 0XFF-NONE
  70. HDDINIT         LD A,0XE0
  71.                 PUSH HL
  72.                 CALL ID_DEV
  73.                 POP HL
  74.                 AND A
  75.                 CALL Z,INIT_91
  76.                 LD D,A
  77.                 PUSH DE
  78. ;               LD A,0XF0
  79. ;               PUSH HL
  80. ;               CALL ID_DEV
  81. ;               POP HL
  82. ;               AND A
  83. ;               CALL Z,INIT_91
  84.                 POP HL
  85.                 LD L,0XFF;A
  86.                 XOR A
  87.  
  88. HDDOFF          RET
  89.  
  90. INIT_91         PUSH HL
  91.                 PUSH BC
  92.                 LD A,IYL
  93.                 AND A
  94.                 JR NZ,INIT91_1
  95.                 LD BC,WIN_P2
  96.                 LD A,0XFD
  97.                 OUT (C),A
  98. INIT91_1        LD L,49*2+1
  99.                 LD A,(HL)
  100.                 AND 2
  101.                 JR Z,INI_912
  102.                 LD BC,0XFF00+P_1F2
  103.                 LD L,0X0C
  104.                 LD A,(HL)
  105.                 OUT (C),A
  106.                 LD L,6
  107.                 LD C,P_1F6
  108.                 LD A,(HL)
  109.                 DEC A
  110.                 OUT (C),A
  111.                 LD C,P_1F7
  112.                 LD A,0X91
  113.                 OUT (C),A
  114.                 LD DE,0X2000
  115. INI_911         DEC DE
  116.                 LD A,D
  117.                 OR E
  118.                 JR Z,INI_912
  119.                 IN A,(C)
  120.                 AND 0X80
  121.                 JR NZ,INI_911
  122.                 LD L,A
  123.                 LD A,IYL
  124.                 AND A
  125.                 LD A,L
  126.                 JR NZ,INIT91_2
  127.                 LD BC,WIN_P2
  128.                 XOR A
  129.                 OUT (C),A
  130. INIT91_2        POP BC
  131.                 POP HL
  132.                 RET
  133.  
  134. INI_912         LD A,0XFF
  135.                 POP BC
  136.                 POP HL
  137.                 RET
  138.  
  139. HDDRDM          PUSH BC
  140.                 PUSH DE
  141.                 CALL SETHREG
  142.                 EX AF,AF'
  143.                 LD C,P_1F7
  144.                 LD A,0X20
  145.                 OUT (C),A
  146.                 LD C,P_1F7
  147. HDDRD1          IN A,(C)
  148.                 AND 0X88
  149.                 CP 8
  150.                 JR NZ,HDDRD1
  151.                 EX AF,AF'
  152. HDDRD2          EX AF,AF'
  153.                 CALL READSEC
  154.                 LD C,P_1F7
  155. HDDRD3          IN A,(C)
  156.                 AND 0X80
  157.                 JR NZ,HDDRD3
  158.                 EX AF,AF'
  159.                 DEC A
  160.                 JR NZ,HDDRD2
  161.                 POP DE
  162.                 POP BC
  163.                 XOR A
  164.                 RET
  165.  
  166. HDDWRM          PUSH BC
  167.                 PUSH DE
  168.                 CALL SETHREG
  169.                 EX AF,AF'
  170.                 LD C,P_1F7
  171.                 LD A,0X30
  172.                 OUT (C),A
  173.                 LD C,P_1F7
  174. HDDWR1          IN A,(C)
  175.                 AND 0X88
  176.                 CP 8
  177.                 JR NZ,HDDWR1
  178.                 EX AF,AF'
  179. HDDWR2          EX AF,AF'
  180.                 CALL WRITSEC
  181.                 LD C,P_1F7
  182. HDDWR3          IN A,(C)
  183.                 AND 0X80
  184.                 JR NZ,HDDWR3
  185.                 EX AF,AF'
  186.                 DEC A
  187.                 JR NZ,HDDWR2
  188.                 POP DE
  189.                 POP BC
  190.                 LD A,B
  191.                 AND 0X0F
  192.                 LD B,A
  193.                 XOR A
  194.                 RET
  195.  
  196. READSEC         LD A,IYL
  197.                 AND A
  198.                 JR NZ,RD2MEM2                   ;ВНУТРЕННИЙ ВЫЗОВ. ЧТЕНИЕ СЕКТОРА ВО ВНУТРЕНННИЙ БУФЕР
  199. ;ВНЕШНИЙ ВЫЗОВ. ЧТЕНИЕ СЕКТОРА В ПАМЯТЬ ВЫЗВАВШЕГО
  200. RD2MEM          LD A,(R_7FFD)
  201.                 AND 0X10
  202.                 LD BC,(B0_CPU2)
  203.                 JR Z,RD2MEM1
  204.                 LD BC,(B1_CPU2)
  205. RD2MEM1         LD A,C
  206.                 LD C,LOW (WIN_A0)
  207.                 OUT (C),A
  208. RD2MEM2         LD BC,P_1F0
  209.                 INIR
  210.                 INIR
  211.                 LD BC,WIN_P2
  212.                 XOR A
  213.                 OUT (C),A
  214.                 RET
  215.  
  216. WRITSEC         EXX
  217.                 PUSH HL
  218.                 LD HL,0
  219.                 ADD HL,SP
  220.                 EXX
  221.                 LD SP,HL
  222.                 LD A,0X40
  223.                 LD HL,PRT_RW
  224. WR_SEC1         POP DE
  225.                 LD C,L
  226.                 OUT (C),D
  227.                 LD C,H
  228.                 OUT (C),E
  229.                 POP DE
  230.                 LD C,L
  231.                 OUT (C),D
  232.                 LD C,H
  233.                 OUT (C),E
  234.                 POP DE
  235.                 LD C,L
  236.                 OUT (C),D
  237.                 LD C,H
  238.                 OUT (C),E
  239.                 POP DE
  240.                 LD C,L
  241.                 OUT (C),D
  242.                 LD C,H
  243.                 OUT (C),E
  244.                 DEC A
  245.                 JR NZ,WR_SEC1
  246.                 LD HL,0
  247.                 ADD HL,SP
  248.                 EXX
  249.                 LD SP,HL
  250.                 POP HL
  251.                 EXX
  252.                 RET
  253.  
  254. SETHREG         PUSH DE
  255.                 CALL ICOM_DEV
  256.                 DB Set_device
  257.                 LD D,B
  258.                 LD E,C
  259.                 LD BC,0XFF00+P_1F6
  260.                 OUT (C),D
  261.                 EX AF,AF'
  262.                 LD C,P_1F7
  263. SETHRE1         IN A,(C)
  264.                 AND 0X80
  265.                 JR NZ,SETHRE1
  266.                 LD C,P_1F5
  267.                 OUT (C),E
  268.                 POP DE
  269.                 LD C,P_1F4
  270.                 OUT (C),D
  271.                 LD C,P_1F3
  272.                 OUT (C),E
  273.                 LD C,P_1F2
  274.                 EX AF,AF'
  275.                 OUT (C),A
  276.                 RET
  277.  
  278. ;HL-АДРЕС БУФЕРА СЕКТОРА ИДЕНТИФИКАЦИИ
  279. ;A=E0-ДЛЯ MASTER, A=F0-ДЛЯ SLAVE
  280. ID_DEV          LD BC,0XFF00+P_1F6
  281.                 OUT (C),A
  282.                 LD C,P_1F7
  283.                 LD D,0X10
  284. ID_DEV3         EI
  285.                 HALT
  286.                 DI
  287.                 DEC D
  288.                 JR Z,NO_DEV
  289.                 IN A,(C)
  290.                 BIT 7,A
  291.                 JR NZ,ID_DEV3
  292.                 AND A
  293.                 JR Z,NO_DEV
  294.                 INC A
  295.                 JR Z,NO_DEV
  296.                 XOR A
  297.                 LD C,P_1F5
  298.                 OUT (C),A
  299.                 LD C,P_1F4
  300.                 OUT (C),A
  301.                 LD A,0XEC
  302.                 LD C,P_1F7
  303.                 OUT (C),A
  304.                 LD C,P_1F7
  305. ID_DEV1         IN A,(C)
  306.                 AND A
  307.                 JR Z,NO_DEV
  308.                 INC A
  309.                 JR Z,NO_DEV
  310.                 DEC A
  311.                 RRCA
  312.                 JR C,ID_DEV2
  313.                 RLCA
  314.                 AND 0X88
  315.                 CP 8
  316.                 JR NZ,ID_DEV1
  317. ID_DEV2         LD C,P_1F4
  318.                 IN E,(C)
  319.                 LD C,P_1F5
  320.                 IN D,(C)
  321.                 LD A,D
  322.                 OR E
  323.                 JP Z,RD2MEM2
  324.                 LD HL,0XEB14
  325.                 SBC HL,DE
  326.                 LD A,1
  327.                 RET Z
  328. NO_DEV          LD A,0XFF
  329.                 RET
  330.