Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 09.12.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,0X4000
  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.                 BIT 1,A
  198.                 JR NZ,RD2MEM
  199.                 AND A
  200.                 JR NZ,RD2MEM2                   ;ВНУТРЕННИЙ ВЫЗОВ. ЧТЕНИЕ СЕКТОРА ВО ВНУТРЕНННИЙ БУФЕР
  201. ;ВНЕШНИЙ ВЫЗОВ. ЧТЕНИЕ СЕКТОРА В ПАМЯТЬ ВЫЗВАВШЕГО
  202. RD2MEM          LD A,(R_7FFD)
  203.                 AND 0X10
  204.                 LD BC,(B0_CPU2)
  205.                 JR Z,RD2MEM1
  206.                 LD BC,(B1_CPU2)
  207. RD2MEM1         LD A,0X37
  208.                 OR B
  209.                 LD B,A
  210.                 LD A,C
  211.                 LD C,LOW (WIN_A0)
  212.                 OUT (C),A
  213. RD2MEM2         LD BC,P_1F0
  214.                 INIR
  215.                 INIR
  216.                 LD BC,WIN_P2
  217.                 XOR A
  218.                 OUT (C),A
  219.                 RET
  220.  
  221. WRITSEC         EXX
  222.                 PUSH HL
  223.                 LD HL,0
  224.                 ADD HL,SP
  225.                 EXX
  226.                 LD SP,HL
  227.                 LD A,0X40
  228.                 LD HL,PRT_RW
  229. WR_SEC1         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.                 POP DE
  245.                 LD C,L
  246.                 OUT (C),D
  247.                 LD C,H
  248.                 OUT (C),E
  249.                 DEC A
  250.                 JR NZ,WR_SEC1
  251.                 LD HL,0
  252.                 ADD HL,SP
  253.                 EXX
  254.                 LD SP,HL
  255.                 POP HL
  256.                 EXX
  257.                 RET
  258.  
  259. SETHREG         PUSH DE
  260.                 CALL ICOM_DEV
  261.                 DB _SET_DEVICE
  262.                 LD D,B
  263.                 LD E,C
  264.                 LD BC,0XFF00+P_1F6
  265.                 OUT (C),D
  266.                 EX AF,AF'
  267.                 LD C,P_1F7
  268. SETHRE1         IN A,(C)
  269.                 AND 0X80
  270.                 JR NZ,SETHRE1
  271.                 LD C,P_1F5
  272.                 OUT (C),E
  273.                 POP DE
  274.                 LD C,P_1F4
  275.                 OUT (C),D
  276.                 LD C,P_1F3
  277.                 OUT (C),E
  278.                 LD C,P_1F2
  279.                 EX AF,AF'
  280.                 OUT (C),A
  281.                 RET
  282.  
  283. ;HL-АДРЕС БУФЕРА СЕКТОРА ИДЕНТИФИКАЦИИ
  284. ;A=E0-ДЛЯ MASTER, A=F0-ДЛЯ SLAVE
  285. ID_DEV          LD BC,0XFF00+P_1F6
  286.                 OUT (C),A
  287.                 LD C,P_1F7
  288.                 LD D,0X10
  289. ID_DEV3         EI
  290.                 HALT
  291.                 DI
  292.                 DEC D
  293.                 JR Z,NO_DEV
  294.                 IN A,(C)
  295.                 BIT 7,A
  296.                 JR NZ,ID_DEV3
  297.                 AND A
  298.                 JR Z,NO_DEV
  299.                 INC A
  300.                 JR Z,NO_DEV
  301.                 XOR A
  302.                 LD C,P_1F5
  303.                 OUT (C),A
  304.                 LD C,P_1F4
  305.                 OUT (C),A
  306.                 LD A,0XEC
  307.                 LD C,P_1F7
  308.                 OUT (C),A
  309.                 LD C,P_1F7
  310. ID_DEV1         IN A,(C)
  311.                 AND A
  312.                 JR Z,NO_DEV
  313.                 INC A
  314.                 JR Z,NO_DEV
  315.                 DEC A
  316.                 RRCA
  317.                 JR C,ID_DEV2
  318.                 RLCA
  319.                 AND 0X88
  320.                 CP 8
  321.                 JR NZ,ID_DEV1
  322. ID_DEV2         LD C,P_1F4
  323.                 IN E,(C)
  324.                 LD C,P_1F5
  325.                 IN D,(C)
  326.                 LD A,D
  327.                 OR E
  328.                 JP Z,RD2MEM2
  329.                 LD HL,0XEB14
  330.                 SBC HL,DE
  331.                 LD A,1
  332.                 RET Z
  333. NO_DEV          LD A,0XFF
  334.                 RET
  335.