Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 03.12.2014 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. HDDOFF          RET
  88.  
  89. INIT_91         PUSH HL
  90.                 PUSH BC
  91.                 LD A,IYL
  92.                 AND A
  93.                 JR NZ,INIT91_1
  94.                 EVOPORT WIN_P6,0XFD
  95. INIT91_1        LD L,49*2+1
  96.                 LD A,(HL)
  97.                 AND 2
  98.                 JR Z,INI_912
  99.                 LD BC,0XFF00+P_1F2
  100.                 LD L,0X0C
  101.                 LD A,(HL)
  102.                 OUT (C),A
  103.                 LD L,6
  104.                 LD C,P_1F6
  105.                 LD A,(HL)
  106.                 DEC A
  107.                 OUT (C),A
  108.                 LD C,P_1F7
  109.                 LD A,0X91
  110.                 OUT (C),A
  111.                 LD DE,0X4000
  112. INI_911         DEC DE
  113.                 LD A,D
  114.                 OR E
  115.                 JR Z,INI_912
  116.                 IN A,(C)
  117.                 AND 0X80
  118.                 JR NZ,INI_911
  119.                 LD L,A
  120.                 LD A,IYL
  121.                 AND A
  122.                 LD A,L
  123.                 JR NZ,INIT91_2
  124.                 LD BC,WIN_P6
  125.                 XOR A
  126.                 OUT (C),A
  127. INIT91_2        POP BC
  128.                 POP HL
  129.                 RET
  130.  
  131. INI_912         LD BC,WIN_P6
  132.                 XOR A
  133.                 OUT (C),A
  134.                 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         
  203. ;               LD A,(R_7FFD)
  204.                 READ_7FFD
  205.                 AND 0X10
  206.                 LD BC,(B0_CPU2)
  207.                 JR Z,RD2MEM1
  208.                 LD BC,(B1_CPU2)
  209. RD2MEM1         LD A,0X37
  210.                 OR B
  211.                 LD B,A
  212.                 LD A,C
  213.                 LD C,LOW (WIN_A0)
  214.                 OUT (C),A
  215. RD2MEM2         LD BC,P_1F0
  216.                 INIR
  217.                 INIR
  218.                 LD BC,WIN_P6
  219.                 XOR A
  220.                 OUT (C),A
  221.                 RET
  222.  
  223. WRITSEC         EXX
  224.                 PUSH HL
  225.                 LD HL,0
  226.                 ADD HL,SP
  227.                 EXX
  228.                 LD SP,HL
  229.                 LD A,0X40
  230.                 LD HL,PRT_RW
  231. WR_SEC1         POP DE
  232.                 LD C,L
  233.                 OUT (C),D
  234.                 LD C,H
  235.                 OUT (C),E
  236.                 POP DE
  237.                 LD C,L
  238.                 OUT (C),D
  239.                 LD C,H
  240.                 OUT (C),E
  241.                 POP DE
  242.                 LD C,L
  243.                 OUT (C),D
  244.                 LD C,H
  245.                 OUT (C),E
  246.                 POP DE
  247.                 LD C,L
  248.                 OUT (C),D
  249.                 LD C,H
  250.                 OUT (C),E
  251.                 DEC A
  252.                 JR NZ,WR_SEC1
  253.                 LD HL,0
  254.                 ADD HL,SP
  255.                 EXX
  256.                 LD SP,HL
  257.                 POP HL
  258.                 EXX
  259.                 RET
  260.  
  261. SETHREG         PUSH DE
  262.                 CALL ICOM_DEV
  263.                 DB _SET_DEVICE
  264.                 LD D,B
  265.                 LD E,C
  266.                 LD BC,0XFF00+P_1F6
  267.                 OUT (C),D
  268.                 EX AF,AF'
  269.                 LD C,P_1F7
  270. SETHRE1         IN A,(C)
  271.                 AND 0X80
  272.                 JR NZ,SETHRE1
  273.                 LD C,P_1F5
  274.                 OUT (C),E
  275.                 POP DE
  276.                 LD C,P_1F4
  277.                 OUT (C),D
  278.                 LD C,P_1F3
  279.                 OUT (C),E
  280.                 LD C,P_1F2
  281.                 EX AF,AF'
  282.                 OUT (C),A
  283.                 RET
  284.  
  285. ;HL-АДРЕС БУФЕРА СЕКТОРА ИДЕНТИФИКАЦИИ
  286. ;A=E0-ДЛЯ MASTER, A=F0-ДЛЯ SLAVE
  287. ID_DEV          LD BC,0XFF00+P_1F6
  288.                 OUT (C),A
  289.                 LD C,P_1F7
  290.                 LD D,8
  291. ID_DEV3         EI
  292.                 HALT
  293.                 DI
  294.                 DEC D
  295.                 JR Z,NO_DEV
  296.                 IN A,(C)
  297.                 BIT 7,A
  298.                 JR NZ,ID_DEV3
  299.                 AND A
  300.                 JR Z,NO_DEV
  301.                 INC A
  302.                 JR Z,NO_DEV
  303.                 XOR A
  304.                 LD C,P_1F5
  305.                 OUT (C),A
  306.                 LD C,P_1F4
  307.                 OUT (C),A
  308.                 LD A,0XEC
  309.                 LD C,P_1F7
  310.                 OUT (C),A
  311.                 LD C,P_1F7
  312. ID_DEV1         IN A,(C)
  313.                 AND A
  314.                 JR Z,NO_DEV
  315.                 INC A
  316.                 JR Z,NO_DEV
  317.                 DEC A
  318.                 RRCA
  319.                 JR C,ID_DEV2
  320.                 RLCA
  321.                 AND 0X88
  322.                 CP 8
  323.                 JR NZ,ID_DEV1
  324. ID_DEV2         LD C,P_1F4
  325.                 IN E,(C)
  326.                 LD C,P_1F5
  327.                 IN D,(C)
  328.                 LD A,D
  329.                 OR E
  330.                 JP Z,RD2MEM2
  331.                 LD HL,0XEB14
  332.                 SBC HL,DE
  333.                 LD A,1
  334.                 RET Z
  335. NO_DEV          LD A,0XFF
  336.                 RET
  337.