-   
- ;LAST UPDATE: 14.12.2013 savelij 
-   
- ;#INCLUDE "ALLVARS.ASH" 
- ;#INCLUDE "DDEF.ASM" 
-   
- P_1F7           EQU 0XF0                        ;РЕГИСТР СОСТОЯНИЯ/РЕГИСТР КОМАНД 
- P_1F6           EQU 0XD0                        ;CHS-НОМЕР ГОЛОВЫ И УСТР/LBA АДРЕС 24-27 
- P_1F5           EQU 0XB0                        ;CHS-ЦИЛИНДР 8-15/LBA АДРЕС 16-23 
- P_1F4           EQU 0X90                        ;CHS-ЦИЛИНДР 0-7/LBA АДРЕС 8-15 
- P_1F3           EQU 0X70                        ;CHS-НОМЕР СЕКТОРА/LBA АДРЕС 0-7 
- P_1F2           EQU 0X50                        ;СЧЕТЧИК СЕКТОРОВ 
- P_1F1           EQU 0X30                        ;ПОРТ ОШИБОК/СВОЙСТВ 
- P_1F0           EQU 0X10                        ;ПОРТ ДАННЫХ 
- P_3F6           EQU 0XC8                        ;РЕГИСТР СОСТОЯНИЯ/УПРАВЛЕНИЯ 
- P_HI            EQU 0X11                        ;СТАРШИЕ 8 БИТ 
- PRT_RW          EQU P_1F0*0X100+P_HI            ;ПОРТЫ ЧТЕНИЯ/ЗАПИСИ ОДНИМ СЛОВОМ 
-   
- HD_DAT          EQU P_1F0;0FH           ;P_1F0 
- HD_ERR          EQU P_1F1;2FH           ;P_1F1 
- HD_SECCNT       EQU P_1F2;4FH           ;P_1F2 
- HD_SECT         EQU P_1F3;6FH           ;P_1F3 
- HD_CYLLO        EQU P_1F4;8FH           ;P_1F4 
- HD_CYLHI        EQU P_1F5;0AFH  ;P_1F5 
- HD_HEAD         EQU P_1F6;0CFH  ;P_1F6 
- HD_COMM         EQU P_1F7;0EFH  ;P_1F7 
-   
- HD_DRV          DW      HD_RES                  ; RESET HD 
-                 DW      HD_SEEK                 ; SEEK HD 
-                 DW      HD_FRM                  ; FORMAT HD 
-                 DW      HD_REC                  ; RECALIBRATE HD 
-                 DW      HD_RD                   ; READ 
-                 DW      HD_NOP 
-                 DW      HD_WR                   ; WRITE 
-   
- HD_TST: BIT     6,(IY+_DDTYP)    ; 6 BIT - CHECKED 
-         RET     NZ 
-         BIT     7,(IY+_DDTYP)    ; 7 BIT - NO DISK 
-         JR      NZ,_1ERR 
-         LD      BC,HD_COMM 
-         IN      A,(C) 
-         INC     A 
-         JR      Z,_1ERR 
-         LD      D,0 
-         CALL    HD_WT1 
-         OR      A 
-         JR      NZ,_1ERR 
- ;               IF HACK_RBIOS=0 
- ;               LD BC,HD_CYLHI 
- ;               ELSE 
-                 CALL WR_MAS_SLA 
- ;               ENDIF 
-         LD      A,55H 
-         OUT     (C),A 
-         CPL 
-         LD      C,HD_CYLLO 
-         OUT     (C),A 
-         LD      C,HD_CYLHI 
-         IN      A,(C) 
-         CP      55H 
-         JR      NZ,_1ERR 
-         LD      C,HD_CYLLO 
-         IN      A,(C) 
-         CP      0AAH 
-         JR      NZ,_1ERR 
-         SET     6,(IY+_DDTYP) 
- HD_SCL: LD      HL,(RQCYL) 
-         LD      BC,HD_CYLLO 
-         OUT     (C),L 
-         LD      C,HD_CYLHI 
-         OUT     (C),H 
-         RET 
-   
- _1ERR:  SET     7,(IY+_DDTYP) 
-         POP     AF 
- NR_ERR: LD      A,_NRDY 
-         OR      A 
-         RET 
-   
- HD_RES: 
- HD_REC: CALL    HD_TST 
-         LD      BC,HD_COMM 
-         LD      A,10H 
-         OUT     (C),A 
- HD_WAIT:LD     D,64 
- HD_WT1: LD      BC,HD_COMM 
-         LD      HL,0 
- HD_W_LP:IN      E,(C) 
-         BIT     7,E 
-         JR      Z,HD_W_DN 
-         DEC     HL 
-         LD      A,L 
-         OR      H 
-         JR      NZ,HD_W_LP 
-         DEC     D 
-         JR      NZ,HD_W_LP 
-         JR      NR_ERR 
-   
- HD_W_DN:BIT     0,E 
-         JR      NZ,IS_HD_ERR 
- ;        AND     50H 
- ;        SUB     50H 
- ;        JR      NZ,HD_W_LP 
- HD_NOP: XOR     A 
-         RET 
- IS_HD_ERR: 
-         LD      BC,HD_ERR 
-         IN      B,(C) 
-         BIT     0,B 
-         LD      A,_NO_ADDR_MARK 
-         RET     NZ 
-         BIT     2,B 
-         JR      NZ,HD_ERR_AB 
-         BIT     4,B 
-         LD      A,_NO_DATA 
-         RET     NZ 
-         BIT     6,B 
-         JR      Z,HD_SH1 
-         BIT     2,E 
-         LD      A,_CRC_ERR 
-         RET     Z 
-         XOR     A 
-         RET 
- HD_SH1: BIT     7,B 
-         LD      A,_FATAL_ERROR 
-         RET     NZ 
-         LD      A,_HRDERR 
-         RET 
- HD_ERR_AB: 
-         BIT     6,E 
-         LD      A,_NRDY 
-         RET     NZ 
-         BIT     5,E 
-         LD      A,_WR_PROT 
-         RET     NZ 
-         BIT     4,E 
-         LD      A,_IOERR 
-         RET     NZ 
-         LD      A,_COMERR 
-         RET 
-   
- HD_SEEK:CALL    HD_TST 
-         LD      HL,(RQCYL) 
-         LD      A,H 
-         OR      L 
-         JR      Z,HD_REC 
-         CALL    HD_SCL 
-         LD      C,HD_COMM 
-         LD      A,70H 
-         OUT     (C),A 
-         JR      HD_WAIT 
-   
-   
- HD_SET_RW: 
-         LD      A,(RQHEAD) 
-         OR      0A0H 
- ;               IF HACK_RBIOS=0 
- ;               LD BC,HD_HEAD 
- ;               ELSE 
-                 CALL GET_MAS_SLA 
- ;               ENDIF 
-         OUT     (C),A 
-         LD      A,(RQSECT) 
-         INC     A 
-         LD      C,HD_SECT 
-         OUT     (C),A 
-         LD      A,D 
-         LD      C,HD_SECCNT 
-         OUT     (C),A 
-         CALL    HD_SCL 
-         LD      C,HD_COMM 
-         RET 
-   
- HD_RD:  CALL    HD_TST 
-         LD      D,1 
-         CALL    HD_SET_RW 
-         LD      A,20H 
-         OUT     (C),A 
-         CALL    HD_WAIT 
-         OR      A 
-         RET     NZ 
-         LD      HL,(DCBUF) 
-         LD      BC,HD_DAT 
-         INIR 
-         INIR 
-         LD      BC,HD_COMM 
-         IN      A,(C) 
-         AND     8 
-         RET     Z 
-         LD      A,_OVERRUN 
-         RET 
-   
- HD_SETWR: 
-         CALL    HD_SET_RW 
-         LD      A,30H 
-         OUT     (C),A 
-   
- HD_W_W: IN      E,(C) 
-         BIT     0,E 
-         JP      NZ,IS_HD_ERR 
-         BIT     3,E 
-         JR      Z,HD_W_W 
-         LD      BC,HD_DAT+256 
-         RET 
-   
- HD_WR:  CALL    HD_TST 
-         LD      D,1 
-         CALL    HD_SETWR 
-         LD      HL,(DCBUF) 
-         DEC     D 
-         INC     HL 
-                 LD C,P_HI 
- HD_WLP: 
-         LD      A,(HL) 
-         OUT     (C),A 
-         DEC     C;B 
-         DEC     HL 
-         LD      A,(HL) 
-         OUT     (C),A 
-         INC     C;B 
-         INC     HL 
-         INC     HL 
-         INC     HL 
-   
-         PUSH BC 
-         LD BC,HD_COMM 
-         IN A,(C) 
-         POP BC 
-   
-         DEC     D 
-         JR      NZ,HD_WLP 
-   
- HD_WWAIT 
- ;               IF HACK_RBIOS=0 
- ;               LD BC,CONF_128;TLRD 
- ;HD_WLPD                IN A,(C) 
- ;               AND 40H 
- ;               JR Z,HD_WLPD 
- ;               ELSE 
-                 DUPL 9,0 
- ;               ENDIF 
-                 JP HD_WAIT 
-   
- HD_FRM: 
-         CALL    HD_SEEK 
-         OR      A 
-         RET     NZ 
-         LD      D,(IY+_DSECTT) 
-         CALL    HD_SETWR 
-   
- HD_F2:  LD      A,(RQBLN) 
-         OUT     (C),A 
-         DEC     B 
-         LD E,B 
- HD_F1: 
-         PUSH BC 
-         LD BC,HD_COMM 
-         IN B,(C) 
-         POP BC 
-   
-         OUT     (C),A 
-         ;LD      E,B 
-   
-   
-         DEC     E 
-         JR      NZ,HD_F1 
-   
-         LD      BC,CONF_128;TLRD 
- HD_F3:  IN      A,(C) 
-         AND     40H 
-         JR      Z,HD_F3 
-   
-         LD      BC,HD_COMM 
-         IN      E,(C) 
-         BIT     0,E 
-         JP      NZ,IS_HD_ERR 
-         BIT     3,E 
-         JP      Z,HD_WAIT 
-         LD      BC,HD_DAT+256 
-         JR      HD_F2 
-