cr0acker
God
Joined: 03 Feb 2003 13:53 Posts: 1078
|
Вот есть такой дайвер | | | | Code: ;---------------------------------------------- ; Driver IDE for KAY v1.0 ; Written by breeze/fishbone crew 05.07.2003 ; (may be standart form 4 DOORS2003 Drivers ;) ;----------------------------------------------
ORG #E000
;----------------STANDARTNY HEADER--------------------- DEFB "DRV" ;IDENTIFIKATOR IDEINIT JP iIDEINIT ;'ZAGLUSHKA' FOR NORMAL EXIT
DRV_NAME DEFB " IDE HDD BY (C) NEMO" ; 20 SIM MAX DRV_AUTHOR DEFB " breeze / fishbone" ; 18 SIM MAX DRV_VER DEFB " 1.01" ; 5 MAX DRV_LANG DEFB 7 ; LANGUAGE: 7-ENGLISH
;------------------TABLICA PORTOV-------------------- REG_COM DEFW #F0 ;SCORP: #FFBE - REGISTR COMMAND REG_SOS DEFW #F0 ;SCORP: #FFBE - REGISTR SOSTOYANIA REG_CYL_H DEFW #B0 ;SCORP: #FDBE - REGISTR CYLINDRA (STARSH) REG_CYL_L DEFW #90 ;SCORP: #FCBE - REGISTR CYLINDRA (MLADSH) REG_SEC DEFW #70 ;SCORP: #FBBE - REGISTR SECTORA REG_HEAD DEFW #D0 ;SCORP: #FEBE - REGISTR GOLOVKI / NAKOPITEL A REG_CONT DEFW #50 ;SCORP: #FABE - REGISTR SCHETCHIKA SECTOROV REG_ERR DEFW #30 ;SCORP: #F9BE - REGISTR OSHIBOK REG_DAT_H DEFW #11 ;SCORP: #D8BE - REGISTR DANNYH (STARSH) REG_DAT_L DEFW #10 ;SCORP: #F8BE - REGISTR DANNYH (MLADSH) REZ_1 DEFW 0 ;RESERV REZ_2 DEFW 0 ;RESERV REZ_3 DEFW 0 ;RESERV REZ_4 DEFW 0 ;RESERV REZ_5 DEFW 0 ;RESERV REZ_6 DEFW 0 ;RESERV
;------------TABLICA SSYLOK (NE IZMENYAT'!)------------ SEL_MASTER JP iSEL_MASTER ;VYBOR MASTER DEVICE SEL_SLAVE JP iSEL_SLAVE ;VYBOR SLAVE DEVICE OUT_A JP iOUT_A ;A W PORT BC IN_A JP iIN_A ;A IZ PORT BC WAIT_DRQ JP iWAIT_DRQ ;OZHIDANIE DRQ HDD_READ JP iHDD_READ ;CHTENIE GRUPPY SECTOROW A W HL READ_SS JP iREAD_SS ;CHTENIE 1 SECTORA W HL HDD_WRITE JP iHDD_WRITE ;ZAPIS GRUPPY SECTOROV A IZ HL WRITE_SS JP iWRITE_SS ;ZAPIS 1 SECTORA IZ HL HDSC JP iHDSC ;KOMANADA A TO HDD NO_BSY JP iNO_BSY ;OZHDANIE BSY NO_ERROR JP iNO_ERROR ;OZHDANIE ERROR W_CHS JP iW_CHS ;POZICIROWANIE PO C=BC, H=H, S=L GET_ERROR JP iGET_ERROR ;WOZWRAT CODE OSHIBKI
;------------------START PODPROGRAMM--------------- iIDEINIT RET
iGET_ERROR RET
iSEL_MASTER LD A,#00 LD BC,(REG_HEAD) CALL OUT_A LD BC,(REG_HEAD) CALL IN_A RLCA RET
iSEL_SLAVE LD A,#10 LD BC,(REG_HEAD) CALL OUT_A LD BC,(REG_HEAD) CALL IN_A RLCA RET
iOUT_A OUT (C),A RET
iIN_A IN A,(C) RET
iWAIT_DRQ LD BC,(REG_SOS) CALL IN_A BIT 3,A RET NZ JR WAIT_DRQ
; CHITAEM SECTORA ZADANNYE ; IN: HL - BUFER FOR READING, A-SECTORS
iHDD_READ LD B,A PUSH BC LD BC,(REG_CONT) CALL OUT_A LD (BUF),HL LD A,#20 CALL HDSC ;KOMM CHITAT POP BC hDDREAD1 PUSH BC
CALL READ_SS ;CHITAEM SECTOR CALL NO_BSY
POP BC DJNZ hDDREAD1 RET
iREAD_SS LD B,0 LD (BUF),HL rEAD_1S PUSH BC LD BC,(REG_DAT_L) CALL IN_A LD (HL),A INC HL LD BC,(REG_DAT_H) CALL IN_A LD (HL),A INC HL POP BC DJNZ rEAD_1S LD (BUF),HL RET
BUF DEFW 0 ; VREMENNAYA PEREMENNAYA DLA READ/WRITE
; PISHEM SECTORA ZADANNYE ; IN: HL - BUFER FOR WRITE, A-SECTORS
iHDD_WRITE LD B,A PUSH BC LD BC,(REG_CONT) CALL OUT_A LD (BUF),HL LD A,#30 CALL HDSC ;KOMM PISAT POP BC hDDWRITE1 PUSH BC
CALL WRITE_SS ;PISHEM SECTOR CALL NO_BSY
POP BC DJNZ hDDWRITE1 RET
iWRITE_SS LD B,0 LD (BUF),HL wRITE_1S PUSH BC INC HL LD A,(HL) LD BC,(REG_DAT_H) CALL OUT_A DEC HL LD BC,(REG_DAT_L) LD A,(HL) CALL OUT_A INC HL INC HL POP BC DJNZ wRITE_1S LD (BUF),HL RET
; HDD SEND COMMAND ; IN:A, - KOD KOMMANDY OUT: CY - OPERACIYA WYPOLNENA S ERROR
iHDSC LD BC,(REG_COM) CALL OUT_A CALL NO_BSY RET
iNO_BSY LD BC,(REG_COM) CALL IN_A RLCA RET NC JR iNO_BSY
iNO_ERROR LD BC,(REG_COM) CALL IN_A RLCA RET
; POZICIROVANIE GOLOVOK ; DE - CYL H - HEAD L - SECTOR
iW_CHS LD BC,(REG_HEAD) LD A,H CALL OUT_A LD BC,(REG_CYL_H) LD A,D CALL OUT_A LD BC,(REG_CYL_L) LD A,E CALL OUT_A LD BC,(REG_SEC) LD A,L CALL OUT_A RET ;---------------------------------------- ENDDRV NOP
| | | | |
Он для контраллёра НЕМО, Я написал аналогичный для спринтера: | | | | Code: ;------------------------------- ;Sprinter IDE driver ;Written BY cr0acker^NedoPC TEAM ;NON STANDART HDE FORM ;MAY BE STANDART 4 DOOR2K ;------------------------------- ORG #E000 ;------STANDART HEADER---------- DEFB "DRV" IDEINIT JP iIDEINIT DRV_NAME DEFB "SPRINTER IDE " DRV_AUTH DEFB "CR0ACKER^NedoPC " DRV_VER DEFB " 1.01" DRV_LANG DEFB 7 ;-PORTS------------------------ REG_COM DEFW #4153 REG_STAT DEFW #4053 REG_CYL_H_W DEFW #0155 REG_CYL_L_W DEFW #0154 REG_SEC_W DEFW #0153 REG_HEAD_W DEFW #4152 REG_CONT DEFW #0052 REG_ERR DEFW #0051 REG_DAT_H DEFW #0150 REG_DAT_L DEFW #0050 REG_CONT_W DEFW #0152 REZ_2 DEFW 0 REZ_3 DEFW 0 REZ_4 DEFW 0 REZ_5 DEFW 0 REZ_6 DEFW 0
;-DRIVER FUNCTIONS-------------- SEL_MASTER JP iSEL_MASTER SEL_SLAVE JP iSEL_SLAVE OUT_A JP iOUT_A IN_A JP iIN_A WAIT_DRQ JP iWAIT_DRQ HDD_READ JP iHDD_READ READ_SS JP iREAD_SS HDD_WRITE JP iHDD_WRITE WRITE_SS JP iWRITE_SS HDSC JP iHDSC NO_BSY JP iNO_BSY NO_ERROR JP iNO_ERROR W_CHS JP iW_CHS GET_ERROR JP iGET_ERROR
;-DRIVER START----------------- iIDEINIT RET
iGET_ERROR RET
iSEL_MASTER CALL iBIOS_ON LD C,#51 LD A,#80 RST #18 CALL iBIOS_OFF RET
iSEL_SLAVE CALL iBIOS_ON LD C,#51 LD A,#81 RST #18 CALL iBIOS_OFF RET
iOUT_A OUT (C),A RET
iIN_A IN A,(C) RET
iWAIT_DRQ LD BC,(REG_STAT) CALL IN_A BIT 3, A RET NZ JR WAIT_DRQ RET
;READ SECTORS ;IN: HL-BUFFER, A-SECTOR iHDD_READ LD B,A PUSH BC LD BC,(REG_CONT_W) CALL OUT_A LD (BUF), HL LD A,#20 CALL HDSC POP BC hDDREAD1 PUSH BC CALL READ_SS CALL NO_BSY POP BC DJNZ hDDREAD1 RET
iREAD_SS LD B,0 LD (BUF), HL rEAD_1S PUSH BC LD BC,(REG_DAT_L) CALL IN_A LD (HL),A INC HL LD BC,(REG_DAT_H) CALL IN_A LD (HL),A INC HL POP BC DJNZ rEAD_1S LD (BUF), HL RET
BUF DEFW #FF
;WRITE SECTORS. ;IN: HL-BUFFER, A-SCTORS
iHDD_WRITE LD B,A PUSH BC LD BC,(REG_CONT_W) CALL OUT_A LD (BUF), HL LD A,#30 CALL HDSC POP BC hDDWRITE1 PUSH BC CALL WRITE_SS CALL NO_BSY POP BC DJNZ hDDWRITE1 RET
iWRITE_SS LD B,0 LD (BUF), HL wRITE_1S PUSH BC INC HL LD A,(HL) LD BC,(REG_DAT_H) CALL OUT_A DEC HL LD BC,(REG_DAT_L) LD A,(HL) CALL OUT_A INC HL INC HL POP BC DJNZ wRITE_1S LD (BUF), HL RET
;SEND COMMAND TO HDD ;IN: A-COMMAND, OUT: CY-ERROR iHDSC LD BC,(REG_COM) CALL OUT_A CALL NO_BSY RET
iNO_BSY LD BC,(REG_STAT) CALL IN_A RLCA RET NC JR iNO_BSY
iNO_ERROR LD BC,(REG_STAT) CALL IN_A RLCA RET
;HEAD POSITIONING ;IN: DE-CYL,H-HEAD,L-SECTOR iW_CHS LD BC,(REG_HEAD_W) LD A,H CALL OUT_A LD BC,(REG_CYL_H_W) LD A,D CALL OUT_A LD BC,(REG_CYL_L_W) LD A,E CALL OUT_A LD BC,(REG_SEC_W) LD A,L CALL OUT_A RET ;------------------------------- ENDDRV NOP
;REG_SEC_W DEFW #0153 ;REG_CYL_L_W DEFW #0154 ;REG_CYL_H_W DEFW #0155 ;REG_HEAD_W DEFW #4152 ;REG_STAT DEFW #4053 ;REG_COM DEFW #4153 ;REG_CONT_R DEFW #0052 ;REG_CONT_W DEFW #0152 ;REG_DAT_L DEFW #0050 ;REG_DAT_H DEFW #0150
iBIOS_ON POP HL LD (OLDSP), SP LD SP,#BFFF LD A,0 OUT (#07C), A PUSH HL RET
OLDSP DEFB #FFFF
iBIOS_OFF POP HL LD SP,(OLDSP) LD A,0 OUT (#03C), A PUSH HL RET
| | | | |
Почему мой не пашет:)
|