nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 16 Apr 2024 03:56



This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
IDE 
Author Message
God
User avatar

Joined: 03 Feb 2003 13:53
Posts: 1078
Post IDE
Вот есть такой дайвер
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


Почему мой не пашет:)


29 Dec 2003 19:58
Profile
Display posts from previous:  Sort by  
This topic is locked, you cannot edit posts or make further replies.   [ 1 post ] 

Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.