Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 14.12.2013 savelij
  3.  
  4. ;#INCLUDE "ALLVARS.ASH"
  5. ;#INCLUDE "DDEF.ASM"
  6.  
  7. P_1F7           EQU 0XF0                        ;РЕГИСТР СОСТОЯНИЯ/РЕГИСТР КОМАНД
  8. P_1F6           EQU 0XD0                        ;CHS-НОМЕР ГОЛОВЫ И УСТР/LBA АДРЕС 24-27
  9. P_1F5           EQU 0XB0                        ;CHS-ЦИЛИНДР 8-15/LBA АДРЕС 16-23
  10. P_1F4           EQU 0X90                        ;CHS-ЦИЛИНДР 0-7/LBA АДРЕС 8-15
  11. P_1F3           EQU 0X70                        ;CHS-НОМЕР СЕКТОРА/LBA АДРЕС 0-7
  12. P_1F2           EQU 0X50                        ;СЧЕТЧИК СЕКТОРОВ
  13. P_1F1           EQU 0X30                        ;ПОРТ ОШИБОК/СВОЙСТВ
  14. P_1F0           EQU 0X10                        ;ПОРТ ДАННЫХ
  15. P_3F6           EQU 0XC8                        ;РЕГИСТР СОСТОЯНИЯ/УПРАВЛЕНИЯ
  16. P_HI            EQU 0X11                        ;СТАРШИЕ 8 БИТ
  17. PRT_RW          EQU P_1F0*0X100+P_HI            ;ПОРТЫ ЧТЕНИЯ/ЗАПИСИ ОДНИМ СЛОВОМ
  18.  
  19. HD_DAT          EQU P_1F0;0FH           ;P_1F0
  20. HD_ERR          EQU P_1F1;2FH           ;P_1F1
  21. HD_SECCNT       EQU P_1F2;4FH           ;P_1F2
  22. HD_SECT         EQU P_1F3;6FH           ;P_1F3
  23. HD_CYLLO        EQU P_1F4;8FH           ;P_1F4
  24. HD_CYLHI        EQU P_1F5;0AFH  ;P_1F5
  25. HD_HEAD         EQU P_1F6;0CFH  ;P_1F6
  26. HD_COMM         EQU P_1F7;0EFH  ;P_1F7
  27.  
  28. HD_DRV          DW      HD_RES                  ; RESET HD
  29.                 DW      HD_SEEK                 ; SEEK HD
  30.                 DW      HD_FRM                  ; FORMAT HD
  31.                 DW      HD_REC                  ; RECALIBRATE HD
  32.                 DW      HD_RD                   ; READ
  33.                 DW      HD_NOP
  34.                 DW      HD_WR                   ; WRITE
  35.  
  36. HD_TST: BIT     6,(IY+_DDTYP)    ; 6 BIT - CHECKED
  37.         RET     NZ
  38.         BIT     7,(IY+_DDTYP)    ; 7 BIT - NO DISK
  39.         JR      NZ,_1ERR
  40.         LD      BC,HD_COMM
  41.         IN      A,(C)
  42.         INC     A
  43.         JR      Z,_1ERR
  44.         LD      D,0
  45.         CALL    HD_WT1
  46.         OR      A
  47.         JR      NZ,_1ERR
  48. ;               IF HACK_RBIOS=0
  49. ;               LD BC,HD_CYLHI
  50. ;               ELSE
  51.                 CALL WR_MAS_SLA
  52. ;               ENDIF
  53.         LD      A,55H
  54.         OUT     (C),A
  55.         CPL
  56.         LD      C,HD_CYLLO
  57.         OUT     (C),A
  58.         LD      C,HD_CYLHI
  59.         IN      A,(C)
  60.         CP      55H
  61.         JR      NZ,_1ERR
  62.         LD      C,HD_CYLLO
  63.         IN      A,(C)
  64.         CP      0AAH
  65.         JR      NZ,_1ERR
  66.         SET     6,(IY+_DDTYP)
  67. HD_SCL: LD      HL,(RQCYL)
  68.         LD      BC,HD_CYLLO
  69.         OUT     (C),L
  70.         LD      C,HD_CYLHI
  71.         OUT     (C),H
  72.         RET
  73.  
  74. _1ERR:  SET     7,(IY+_DDTYP)
  75.         POP     AF
  76. NR_ERR: LD      A,_NRDY
  77.         OR      A
  78.         RET
  79.  
  80. HD_RES:
  81. HD_REC: CALL    HD_TST
  82.         LD      BC,HD_COMM
  83.         LD      A,10H
  84.         OUT     (C),A
  85. HD_WAIT:LD     D,64
  86. HD_WT1: LD      BC,HD_COMM
  87.         LD      HL,0
  88. HD_W_LP:IN      E,(C)
  89.         BIT     7,E
  90.         JR      Z,HD_W_DN
  91.         DEC     HL
  92.         LD      A,L
  93.         OR      H
  94.         JR      NZ,HD_W_LP
  95.         DEC     D
  96.         JR      NZ,HD_W_LP
  97.         JR      NR_ERR
  98.  
  99. HD_W_DN:BIT     0,E
  100.         JR      NZ,IS_HD_ERR
  101. ;        AND     50H
  102. ;        SUB     50H
  103. ;        JR      NZ,HD_W_LP
  104. HD_NOP: XOR     A
  105.         RET
  106. IS_HD_ERR:
  107.         LD      BC,HD_ERR
  108.         IN      B,(C)
  109.         BIT     0,B
  110.         LD      A,_NO_ADDR_MARK
  111.         RET     NZ
  112.         BIT     2,B
  113.         JR      NZ,HD_ERR_AB
  114.         BIT     4,B
  115.         LD      A,_NO_DATA
  116.         RET     NZ
  117.         BIT     6,B
  118.         JR      Z,HD_SH1
  119.         BIT     2,E
  120.         LD      A,_CRC_ERR
  121.         RET     Z
  122.         XOR     A
  123.         RET
  124. HD_SH1: BIT     7,B
  125.         LD      A,_FATAL_ERROR
  126.         RET     NZ
  127.         LD      A,_HRDERR
  128.         RET
  129. HD_ERR_AB:
  130.         BIT     6,E
  131.         LD      A,_NRDY
  132.         RET     NZ
  133.         BIT     5,E
  134.         LD      A,_WR_PROT
  135.         RET     NZ
  136.         BIT     4,E
  137.         LD      A,_IOERR
  138.         RET     NZ
  139.         LD      A,_COMERR
  140.         RET
  141.  
  142. HD_SEEK:CALL    HD_TST
  143.         LD      HL,(RQCYL)
  144.         LD      A,H
  145.         OR      L
  146.         JR      Z,HD_REC
  147.         CALL    HD_SCL
  148.         LD      C,HD_COMM
  149.         LD      A,70H
  150.         OUT     (C),A
  151.         JR      HD_WAIT
  152.  
  153.  
  154. HD_SET_RW:
  155.         LD      A,(RQHEAD)
  156.         OR      0A0H
  157. ;               IF HACK_RBIOS=0
  158. ;               LD BC,HD_HEAD
  159. ;               ELSE
  160.                 CALL GET_MAS_SLA
  161. ;               ENDIF
  162.         OUT     (C),A
  163.         LD      A,(RQSECT)
  164.         INC     A
  165.         LD      C,HD_SECT
  166.         OUT     (C),A
  167.         LD      A,D
  168.         LD      C,HD_SECCNT
  169.         OUT     (C),A
  170.         CALL    HD_SCL
  171.         LD      C,HD_COMM
  172.         RET
  173.  
  174. HD_RD:  CALL    HD_TST
  175.         LD      D,1
  176.         CALL    HD_SET_RW
  177.         LD      A,20H
  178.         OUT     (C),A
  179.         CALL    HD_WAIT
  180.         OR      A
  181.         RET     NZ
  182.         LD      HL,(DCBUF)
  183.         LD      BC,HD_DAT
  184.         INIR
  185.         INIR
  186.         LD      BC,HD_COMM
  187.         IN      A,(C)
  188.         AND     8
  189.         RET     Z
  190.         LD      A,_OVERRUN
  191.         RET
  192.  
  193. HD_SETWR:
  194.         CALL    HD_SET_RW
  195.         LD      A,30H
  196.         OUT     (C),A
  197.  
  198. HD_W_W: IN      E,(C)
  199.         BIT     0,E
  200.         JP      NZ,IS_HD_ERR
  201.         BIT     3,E
  202.         JR      Z,HD_W_W
  203.         LD      BC,HD_DAT+256
  204.         RET
  205.  
  206. HD_WR:  CALL    HD_TST
  207.         LD      D,1
  208.         CALL    HD_SETWR
  209.         LD      HL,(DCBUF)
  210.         DEC     D
  211.         INC     HL
  212.                 LD C,P_HI
  213. HD_WLP:
  214.         LD      A,(HL)
  215.         OUT     (C),A
  216.         DEC     C;B
  217.         DEC     HL
  218.         LD      A,(HL)
  219.         OUT     (C),A
  220.         INC     C;B
  221.         INC     HL
  222.         INC     HL
  223.         INC     HL
  224.  
  225.         PUSH BC
  226.         LD BC,HD_COMM
  227.         IN A,(C)
  228.         POP BC
  229.  
  230.         DEC     D
  231.         JR      NZ,HD_WLP
  232.  
  233. HD_WWAIT
  234. ;               IF HACK_RBIOS=0
  235. ;               LD BC,CONF_128;TLRD
  236. ;HD_WLPD                IN A,(C)
  237. ;               AND 40H
  238. ;               JR Z,HD_WLPD
  239. ;               ELSE
  240.                 DUPL 9,0
  241. ;               ENDIF
  242.                 JP HD_WAIT
  243.  
  244. HD_FRM:
  245.         CALL    HD_SEEK
  246.         OR      A
  247.         RET     NZ
  248.         LD      D,(IY+_DSECTT)
  249.         CALL    HD_SETWR
  250.  
  251. HD_F2:  LD      A,(RQBLN)
  252.         OUT     (C),A
  253.         DEC     B
  254.         LD E,B
  255. HD_F1:
  256.         PUSH BC
  257.         LD BC,HD_COMM
  258.         IN B,(C)
  259.         POP BC
  260.  
  261.         OUT     (C),A
  262.         ;LD      E,B
  263.  
  264.  
  265.         DEC     E
  266.         JR      NZ,HD_F1
  267.  
  268.         LD      BC,CONF_128;TLRD
  269. HD_F3:  IN      A,(C)
  270.         AND     40H
  271.         JR      Z,HD_F3
  272.  
  273.         LD      BC,HD_COMM
  274.         IN      E,(C)
  275.         BIT     0,E
  276.         JP      NZ,IS_HD_ERR
  277.         BIT     3,E
  278.         JP      Z,HD_WAIT
  279.         LD      BC,HD_DAT+256
  280.         JR      HD_F2
  281.