...
This commit is contained in:
parent
2d65e4cdd0
commit
be6233a072
@ -1 +1 @@
|
||||
Subproject commit f112b1359045d7fe7aa47f843011fddc5e03eba2
|
||||
Subproject commit 226dbc13e8cacb202848245b7f11de3df2f0cbd7
|
||||
@ -96,7 +96,7 @@ TAB_FNS:
|
||||
DB low FN_RESERVED_5x ;#5B
|
||||
DB low FN_RESERVED_5x ;#5C
|
||||
DB low FN_RESERVED_5x ;#5D
|
||||
DB low FN_RESERVED_5x ;#5E
|
||||
DB low FN_5x_Parser_E ;#5E
|
||||
DB low DRV_LIST ;#5F
|
||||
;--------------
|
||||
|
||||
@ -288,7 +288,7 @@ TAB_FNS:
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_5x_Parser_E
|
||||
DB high DRV_LIST
|
||||
;--------------
|
||||
|
||||
@ -434,6 +434,27 @@ TAB_FNS:
|
||||
DB high REINIT
|
||||
DB high FN_RESERVED
|
||||
DB high FN_VERSION
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
;
|
||||
; ,----, ,----,.
|
||||
; ,/ .`| ,' ,' |
|
||||
; ,` .' : ,--, ,' .' |
|
||||
; ; ; / ,---, ,--.'| ,----.' .'
|
||||
; .'___,/ ,' ,---.'| | | : | | .'
|
||||
; | : | | | : : : ' : : |--, ,--, ,--,
|
||||
; ; |.'; ; ,--.--. : : : | ' | ,---. : | ;.' \|'. \/ .`|
|
||||
; `----' | | / \ : |,-.' | | / \ | | |' \/ / ;
|
||||
; ' : ;.--. .-. || : ' || | : / / | `----'.'\ ; \ \.' /
|
||||
; | | ' \__\/: . .| | / :' : |__ . ' / | __ \ . | \ ; ;
|
||||
; ' : | ," .--.; |' : |: || | '.'|' ; /| / /\/ / : / \ \ \
|
||||
; ; |.' / / ,. || | '/ :; : ;' | / | / ,,/ ',- ./__; ; \
|
||||
; '---' ; : .' \ : || , / | : | \ ''\ ;| :/\ \ ;
|
||||
; | , .-./ \ / ---`-' \ \ / \ \ .' `---' `--`
|
||||
; `--`---' `-'----' `----' `--`-,-'
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
_mInfoALIGN 256,0
|
||||
@ -542,7 +563,7 @@ TAB_5xFNS:
|
||||
DB low FN_RESERVED_5x
|
||||
DB low FN_RESERVED_5x
|
||||
DB low FN_RESERVED_5x
|
||||
DB low FN_RESERVED_5x
|
||||
DB low CD_5x.Extended
|
||||
DB low DRV_LIST
|
||||
;---------------------------------------------------------------------[]
|
||||
|
||||
@ -564,12 +585,11 @@ TAB_5xFNS:
|
||||
DB high FDD_5x.DETECT ;#57
|
||||
DB high FDD_5x.GETMED ;#58
|
||||
DB high FDD_5x.SETMED ;#59
|
||||
|
||||
DB high DRV_VERSION ;#5A - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||
DB high FN_RESERVED_5x ;#5E - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||
DB high FN_RESERVED_5x ;#5E - Extended functions
|
||||
DB high DRV_LIST ;#5F - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||
;
|
||||
;---------------------------------------------------------------------[]
|
||||
@ -590,7 +610,6 @@ TAB_5xFNS:
|
||||
DB high FN_ABSENT_5x
|
||||
DB high RMD_5x.GETMED
|
||||
DB high RMD_5x.SETMED
|
||||
|
||||
DB high DRV_VERSION
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
@ -615,7 +634,6 @@ TAB_5xFNS:
|
||||
DB high HDD_5x.DETECT
|
||||
DB high HDD_5x.GETMED
|
||||
DB high HDD_5x.SETMED
|
||||
|
||||
DB high DRV_VERSION
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
@ -640,12 +658,11 @@ TAB_5xFNS:
|
||||
DB high CD_5x.DETECT
|
||||
DB high FN_ABSENT_5x
|
||||
DB high FN_ABSENT_5x
|
||||
|
||||
DB high DRV_VERSION
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
DB high FN_RESERVED_5x
|
||||
DB high CD_5x.Extended
|
||||
DB high DRV_LIST
|
||||
;---------------------------------------------------------------------[]
|
||||
|
||||
@ -668,31 +685,34 @@ EXP_FNS_RST18:
|
||||
RET
|
||||
|
||||
FN_5x_Parser_1:
|
||||
LD C,1
|
||||
LD C,#01
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_2:
|
||||
LD C,2
|
||||
LD C,#02
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_3:
|
||||
LD C,3
|
||||
LD C,#03
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_4:
|
||||
LD C,4
|
||||
LD C,#04
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_6:
|
||||
LD C,#06
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_7:
|
||||
LD C,#07
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_8:
|
||||
LD C,#08
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_9:
|
||||
LD C,#09
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_E:
|
||||
LD C,#0E
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_5:
|
||||
LD C,5
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_6:
|
||||
LD C,6
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_7:
|
||||
LD C,7
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_8:
|
||||
LD C,8
|
||||
JP FN_5x_Parser
|
||||
FN_5x_Parser_9:
|
||||
LD C,9
|
||||
FN_5x_Parser:
|
||||
PUSH HL
|
||||
LD H,A
|
||||
|
||||
@ -173,7 +173,7 @@ FDD_5x.READ:
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
; A'- Memory ID Block
|
||||
; A'- Memory Page Number
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
@ -320,7 +320,7 @@ FDD_5x.WRITE:
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
; A'- Memory ID Block
|
||||
; A'- Memory Page Number
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
;CD ROM DRIVE DRIVER ;!FIXIT ALL!
|
||||
;[ ] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
||||
|
||||
;CD ROM DRIVE DRIVER
|
||||
;---------------------------------------------------------------
|
||||
;Rev Date Name Description
|
||||
;---------------------------------------------------------------
|
||||
@ -11,12 +13,15 @@ RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
|
||||
RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16
|
||||
|
||||
ASSERT ((PKTSIZE % 2) = 0), "PKTSIZE must be an even number"
|
||||
;[]===========================================================[]
|
||||
|
||||
;[]================================================================[#51]
|
||||
CD_5x.RESET:
|
||||
LD C,IDE.Device.CDROM
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
LD B,50
|
||||
.loop:
|
||||
PUSH BC
|
||||
LD A,1
|
||||
CALL CD_TEST
|
||||
POP BC
|
||||
RET NC
|
||||
@ -24,70 +29,46 @@ CD_5x.RESET:
|
||||
HALT
|
||||
DJNZ .loop
|
||||
RET
|
||||
;[]===========================================================[]
|
||||
;[]================================================================[#51]
|
||||
|
||||
|
||||
;[]===========================================================[]
|
||||
CD_5x.LONG_READ: ; !FIXIT ¥ ¤® á®åà ïâì áâà ¨æã SLOT3 ª ª ¢ ¤àã£¨å ¤à ©¢ å?
|
||||
;[]===========================================================[]
|
||||
;[]===========================================================[]
|
||||
;[]================================================================[#55]
|
||||
;Function: Read Sectors
|
||||
; A - Disk
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
;READ SECTOR(S)
|
||||
CD_5x.READ:
|
||||
LD A,1
|
||||
JP CD_READ
|
||||
;[]===========================================================[]
|
||||
|
||||
|
||||
;[]===========================================================[]
|
||||
CD.OPEN:
|
||||
LD A,1
|
||||
JP CD_OPEN
|
||||
;[]===========================================================[]
|
||||
|
||||
|
||||
;[]===========================================================[]
|
||||
CD.CLOSE:
|
||||
LD A,1
|
||||
JP CD_CLOSE
|
||||
;[]===========================================================[]
|
||||
|
||||
CD_TEST LD HL,CMDNOPP
|
||||
LD DE,0
|
||||
CALL AP_COM
|
||||
RET
|
||||
|
||||
EX AF,AF'
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
;[]================================================================[#52]
|
||||
;Function: Long Read Sectors
|
||||
; A - Disk
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
; A'- Memory Page Number
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
;LONG READ SECTOR(S)
|
||||
CD_5x.LONG_READ:
|
||||
LD C,IDE.Device.CDROM
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
;
|
||||
;[]===========================================================[]
|
||||
CD_5x.DETECT: ; !FIXIT
|
||||
SCF
|
||||
RET
|
||||
;[]===========================================================[]
|
||||
CD_OPEN:
|
||||
LD HL,CMDOPEN
|
||||
LD DE,0
|
||||
CALL AP_COM
|
||||
RET
|
||||
;
|
||||
|
||||
CD_CLOSE:
|
||||
LD HL,CMDCLOS
|
||||
LD DE,0
|
||||
CALL AP_COM
|
||||
RET
|
||||
|
||||
; HL:IX - SECTOR
|
||||
; DE - ADDRESS
|
||||
; B - SECTOR COUNT
|
||||
; A - DRIVE
|
||||
|
||||
CD_READ:
|
||||
LD C,A
|
||||
EXX
|
||||
LD C,SLOT3
|
||||
IN A,(C)
|
||||
PUSH AF
|
||||
LD A,SYS_PAGE
|
||||
OUT (C),A
|
||||
LD HL,CMDREAD
|
||||
LD HL,ATAPI_CMD_PACKET.READ
|
||||
LD DE,RAM_ATAPI_READ
|
||||
LD BC,PKTSIZE
|
||||
LDIR
|
||||
@ -101,59 +82,107 @@ CD_READ:
|
||||
LD A,H
|
||||
LD H,L
|
||||
LD L,A
|
||||
LD (RAM_ATAPI_READ+SECREAD+0),HL
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL
|
||||
;
|
||||
LD A,XH
|
||||
LD (RAM_ATAPI_READ+SECREAD+2),A ;R01
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01
|
||||
LD A,XL
|
||||
LD (RAM_ATAPI_READ+SECREAD+3),A ;R01
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01
|
||||
LD A,B
|
||||
LD (RAM_ATAPI_READ+COUNT+1),A ;R01
|
||||
POP AF
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01
|
||||
;
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
; POP AF
|
||||
; OUT (SLOT3),A
|
||||
;R01 LD HL,CMDREAD
|
||||
LD HL,RAM_ATAPI_READ
|
||||
LD A,C
|
||||
CALL AP_COM
|
||||
;
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
;
|
||||
RET
|
||||
;[]===========================================================[#52, #55]
|
||||
|
||||
|
||||
;[]================================================================[#57]
|
||||
;Function: Detect Disk
|
||||
; A - Disk
|
||||
;Return: CF=0 - A=Drive type
|
||||
; CF=1 - drive not present, A=#02
|
||||
CD_5x.DETECT:
|
||||
LD C,IDE.Device.CDROM
|
||||
AND %1011'1111
|
||||
JP DRV_DETECT
|
||||
;[]================================================================[#57]
|
||||
|
||||
|
||||
;[]================================================================[#5E]
|
||||
;Function: Extended
|
||||
; A - Disk
|
||||
; B - SubFunction
|
||||
;Return:
|
||||
;
|
||||
CD_5x.Extended:
|
||||
LD C,IDE.Device.CDROM
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
;
|
||||
LD A,B
|
||||
CP 2
|
||||
JR C,TRAY_FN
|
||||
; ...
|
||||
; ...
|
||||
LD A,#AA ;!HARDCODE error code
|
||||
SCF
|
||||
RET
|
||||
;[]================================================================[#5E]
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
TRAY_FN:
|
||||
LD DE,0 ;!FIXIT 㦮 «¨?
|
||||
LD HL,ATAPI_CMD_PACKET.CLOSE
|
||||
DEC A
|
||||
JR Z,AP_COM
|
||||
LD HL,ATAPI_CMD_PACKET.OPEN
|
||||
JR AP_COM
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; INPUT: HL - AP paket (12bytes)
|
||||
; RETURN: CF - ERROR
|
||||
; 01h - RECOVERED ERROR
|
||||
; 02h - NOT READY
|
||||
; 03h - MEDIUM ERROR
|
||||
; 04h - HARDWARE ERROR
|
||||
; 05h - ILLEGAL REQUEST
|
||||
; 06h - UNIT ATTETION
|
||||
; 07h - DATA PROTECT
|
||||
; 0Bh - ABORTED COMMAND
|
||||
; 80h - TIME OUT
|
||||
AP_COM: AND #01
|
||||
LD A,IDE.Drive.Master
|
||||
JR Z,.APCOM1
|
||||
LD A,IDE.Drive.Slave
|
||||
.APCOM1 LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A ;SELECT DRIVE
|
||||
EXX
|
||||
; #01 - RECOVERED ERROR
|
||||
; #02 - NOT READY
|
||||
; #03 - MEDIUM ERROR
|
||||
; #04 - HARDWARE ERROR
|
||||
; #05 - ILLEGAL REQUEST
|
||||
; #06 - UNIT ATTETION
|
||||
; #07 - DATA PROTECT
|
||||
; #0B - ABORTED COMMAND
|
||||
; #80 - TIME OUT
|
||||
AP_COM: EXX
|
||||
LD DE,#8000
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
CALL CD_WAITPRT
|
||||
EXX
|
||||
JR NC,.CDREADY
|
||||
JR NC,.READY
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,#08
|
||||
LD A,IDE.ATAPI.Reset
|
||||
OUT (C),A
|
||||
|
||||
LD B,#00
|
||||
LD B,#80
|
||||
.pause: DJNZ .pause
|
||||
|
||||
EXX
|
||||
LD DE,#8000
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
CALL CD_WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
.CDREADY:
|
||||
.READY:
|
||||
LD C,SLOT3
|
||||
IN B,(C)
|
||||
|
||||
@ -163,7 +192,7 @@ AP_COM: AND #01
|
||||
LD A,SYS_PAGE
|
||||
OUT (C),A
|
||||
LD A,B
|
||||
LD DE,RAM_ATAPI_PK
|
||||
LD DE,RAM_ATAPI_PK ;!FIXIT ¬®¦¥â á⥪¥ ¢ë¤¥«ïâì ¬¥áâ®?
|
||||
LD BC,PKTSIZE
|
||||
LDIR
|
||||
|
||||
@ -173,11 +202,11 @@ AP_COM: AND #01
|
||||
|
||||
XOR A
|
||||
EXX
|
||||
OUT (C),A
|
||||
XOR A
|
||||
;OUT (C),A
|
||||
;XOR A
|
||||
LD BC,IDE.Write.Features
|
||||
OUT (C),A
|
||||
LD DE,SIZESEC ;SIZE BLOCK
|
||||
LD DE,SIZESEC ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥®© ª ª®©-¨¡ã¤ì
|
||||
LD BC,IDE.Write.CylinderLow
|
||||
OUT (C),E
|
||||
LD BC,IDE.Write.CylinderHigh
|
||||
@ -186,19 +215,17 @@ AP_COM: AND #01
|
||||
LD A,IDE.ATAPI.Packet
|
||||
OUT (C),A
|
||||
LD DE,#8000
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
CALL CD_WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#0908
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
CALL CD_WAITPRT
|
||||
EXX
|
||||
BIT IDE.ControlBit.Error,A
|
||||
JR NZ,.CDERROR
|
||||
JR NC,.YEP_DRQ
|
||||
LD A,#80
|
||||
LD A,#80 ; TIME OUT ;!HARDCODE
|
||||
RET
|
||||
.YEP_DRQ:
|
||||
LD C,SLOT3
|
||||
@ -209,7 +236,6 @@ AP_COM: AND #01
|
||||
LD HL,RAM_ATAPI_PK
|
||||
LD BC,IDE.Write.Data
|
||||
LD A,PKTSIZE/2
|
||||
;SRL A
|
||||
.OUTPKT:
|
||||
OUTI
|
||||
OUTI
|
||||
@ -225,8 +251,7 @@ AP_COM: AND #01
|
||||
.AP_LOOP:
|
||||
EXX
|
||||
LD DE,#8000
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
CALL CD_WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
LD BC,IDE.Read.Status
|
||||
@ -245,7 +270,7 @@ AP_COM: AND #01
|
||||
RET
|
||||
.NO_ERR:
|
||||
BIT IDE.ControlBit.DataRequest,A
|
||||
LD A,0
|
||||
LD A,BIOS.Error.NoErrors
|
||||
RET Z ;NO DATA REQUEST
|
||||
EX DE,HL
|
||||
LD BC,IDE.Read.CylinderLow
|
||||
@ -258,8 +283,8 @@ AP_COM: AND #01
|
||||
LD BC,IDE.Read.Counter
|
||||
IN A,(C)
|
||||
AND #02
|
||||
CP #02
|
||||
JP Z,.FROM_CD
|
||||
;CP #02
|
||||
JP NZ,.FROM_CD
|
||||
;.TO_CD:
|
||||
LD BC,IDE.Read.Data
|
||||
.WR_T_CD:
|
||||
@ -298,26 +323,15 @@ AP_COM: AND #01
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,.RD_N_CD
|
||||
; DE = 0 !!!
|
||||
; DE = 0
|
||||
JR .AP_LOOP
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
; E - Second * 10
|
||||
; PAUSE LD HL,#0000
|
||||
; PAUSE1 DEC L
|
||||
; JR NZ,PAUSE1
|
||||
; DEC H
|
||||
; JR NZ,PAUSE1
|
||||
; DEC E
|
||||
; JR NZ,PAUSE1
|
||||
; RET
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; D - MASK
|
||||
; E - PATTERN
|
||||
//; BC - PORT
|
||||
CWAITPRT:
|
||||
CD_WAITPRT:
|
||||
LD BC,IDE.Read.Status
|
||||
LD A,100
|
||||
LD HL,#0000
|
||||
@ -344,32 +358,50 @@ CWAITPRT:
|
||||
.CWAITP1:
|
||||
SCF
|
||||
RET
|
||||
|
||||
CMDNOPP DEFB #00
|
||||
DEFB 00,00,00
|
||||
DEFB #00
|
||||
DEFB 00,00,00
|
||||
DEFB 00,00,00
|
||||
DEFB #00
|
||||
|
||||
CMDOPEN DEFB #1B
|
||||
DEFB #00,#00,#00
|
||||
DEFB #02
|
||||
DEFB #00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
CMDCLOS DEFB #1B
|
||||
DEFB #00,#00,#00
|
||||
DEFB #03
|
||||
DEFB #00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
CMDREAD DEFB #28,#00
|
||||
SECREAD EQU $-CMDREAD
|
||||
DEFB #00,#00,#00,#00
|
||||
DEFB #00
|
||||
COUNT EQU $-CMDREAD
|
||||
DEFB #00,#01
|
||||
DEFB #00,#00,#00
|
||||
|
||||
;========================================================
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
CD_TEST LD HL,ATAPI_CMD_PACKET.NOP
|
||||
LD DE,0 ;!FIXIT 㦮 «¨?
|
||||
JP AP_COM
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
ATAPI_CMD_PACKET:
|
||||
.NOP: DUP 12
|
||||
DB #00
|
||||
EDUP
|
||||
;
|
||||
.OPEN: DB #1B
|
||||
DB #00,#00,#00
|
||||
DB #02
|
||||
DB #00,#00,#00,#00,#00,#00,#00
|
||||
;
|
||||
.CLOSE: DB #1B
|
||||
DB #00,#00,#00
|
||||
DB #03
|
||||
DB #00,#00,#00,#00,#00,#00,#00
|
||||
;
|
||||
.READ: DB #28,#00
|
||||
DB #00,#00,#00,#00 ; sector dword
|
||||
DB #00
|
||||
DB #00,#01,#00,#00 ; counter dword
|
||||
DB #00
|
||||
;
|
||||
ATAPI_PACKET:
|
||||
.SECTOR EQU 2
|
||||
.COUNTER EQU 7
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;
|
||||
; E - Second * 10
|
||||
; PAUSE LD HL,#0000
|
||||
; PAUSE1 DEC L
|
||||
; JR NZ,PAUSE1
|
||||
; DEC H
|
||||
; JR NZ,PAUSE1
|
||||
; DEC E
|
||||
; JR NZ,PAUSE1
|
||||
; RET
|
||||
;
|
||||
@ -89,47 +89,6 @@ HDD_5x.RESET: ; !FIXIT
|
||||
RET
|
||||
;[]================================================================[#51]
|
||||
|
||||
SELECTH:
|
||||
AND #0F
|
||||
LD IY,IDE.INIT_TBL_IDE0
|
||||
JR Z,SELHH
|
||||
DEC A
|
||||
LD IY,IDE.INIT_TBL_IDE1
|
||||
;R02
|
||||
JR Z,SELHH
|
||||
DEC A
|
||||
LD IY,IDE.INIT_TBL_IDE2
|
||||
JR Z,SELHH
|
||||
DEC A
|
||||
LD IY,IDE.INIT_TBL_IDE3
|
||||
;
|
||||
JR NZ,NODRIVE
|
||||
SELHH: EXX
|
||||
LD C,SLOT3
|
||||
IN B,(C)
|
||||
LD A,SYS_PAGE
|
||||
OUT (C),A
|
||||
|
||||
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||
AND #01
|
||||
LD A,IDE.Chanel.Secondary
|
||||
JR NZ,SELCHAN
|
||||
LD A,IDE.Chanel.Primary
|
||||
SELCHAN:
|
||||
OUT (IDE.Chanel.Set),A ;R02
|
||||
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType)
|
||||
CP IDE.Device.HDD ;!FIXIT ¢®§¬®¦®, åॠ¥ 㦮, ¯®â®¬ã-çâ® ¥á«¨ CD, â® ¯à¨«¥â¨â ¢ ¤à ©¢¥à CD
|
||||
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||
OUT (C),B ;¢®§¢à â áâà ¨æë
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
RES 0,A
|
||||
OUT (C),A
|
||||
EXX
|
||||
RET Z
|
||||
NODRIVE:
|
||||
LD A,BIOS.Error.BadDrvNumber
|
||||
SCF
|
||||
RET
|
||||
|
||||
;[]================================================================[#58]
|
||||
;Function: Get Current Media Parameters
|
||||
@ -141,7 +100,8 @@ NODRIVE:
|
||||
; IX - Capacity sector in bytes
|
||||
; B - Flags: MASTER/SLAVE, LBA/CHS
|
||||
HDD_5x.GETMED:
|
||||
CALL SELECTH
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
@ -170,7 +130,8 @@ HDD_5x.GETMED:
|
||||
; B - Flags
|
||||
;Return: None
|
||||
HDD_5x.SETMED:
|
||||
CALL SELECTH
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
@ -208,7 +169,7 @@ HDD_5x.READ:
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
; A'- Memory ID Block
|
||||
; A'- Memory Page Number
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
@ -273,7 +234,9 @@ RST8RDR: RESTORE_PORTY
|
||||
;EX AF,AF' ;!TEST 21/11/23
|
||||
RET
|
||||
;READ SECTOR(S)
|
||||
RDS000: CALL SELECTH
|
||||
RDS000:
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||
@ -333,6 +296,7 @@ RDS004: DUP 16
|
||||
LD XH,A
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
.W44: INC XL ;INC LOADED SECTORS
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||
@ -369,7 +333,7 @@ HDD_5x.WRITE:
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
; A'- Memory ID Block
|
||||
; A'- Memory Page Number
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
@ -436,7 +400,8 @@ RST8WRR: RESTORE_PORTY
|
||||
|
||||
;WRITE SECTOR(S)
|
||||
WRS000:
|
||||
CALL SELECTH
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||
@ -550,7 +515,9 @@ HDD_5x.VERIFY:
|
||||
RET
|
||||
;[]================================================================[#54]
|
||||
;VERIFY SECTOR(S)
|
||||
VRS000: CALL SELECTH
|
||||
VRS000:
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||
@ -665,9 +632,9 @@ CHS005: INC A
|
||||
LD L,A
|
||||
RET
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; D - MASK
|
||||
; E - PATTERN
|
||||
//; BC - PORT
|
||||
WAITPRT:
|
||||
LD BC,IDE.Read.Status
|
||||
LD HL,#0000 ; § ¤¥à¦ª ;!HARDCODE
|
||||
@ -690,42 +657,46 @@ WAITPRT:
|
||||
RET
|
||||
.ok: POP HL
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
;=======================================================================
|
||||
|
||||
;[]================================================================[#57]
|
||||
;[ ] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
||||
;Function: Detect Disk
|
||||
; A - Disk
|
||||
;Return: CF=0 - A=Drive type
|
||||
; CF=1 - drive not present, A=#FF
|
||||
; CF=1 - drive not present, A=#02
|
||||
HDD_5x.DETECT:
|
||||
CP #84 ;!HARDCODE max HDD drives (#80,#81,#82,#83)
|
||||
CCF
|
||||
JR C,.error
|
||||
LD C,IDE.Device.HDD
|
||||
JP DRV_DETECT
|
||||
|
||||
LD HL,IDE.INIT_TBL_IDE0.DriveType
|
||||
AND 3
|
||||
JR Z,.get_param
|
||||
LD HL,IDE.INIT_TBL_IDE1.DriveType
|
||||
DEC A
|
||||
JR Z,.get_param
|
||||
LD HL,IDE.INIT_TBL_IDE2.DriveType
|
||||
DEC A
|
||||
JR Z,.get_param
|
||||
LD HL,IDE.INIT_TBL_IDE3.DriveType
|
||||
.get_param:
|
||||
IN A,(SLOT3)
|
||||
LD B,A
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
; CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
|
||||
; CCF
|
||||
; JR C,.error
|
||||
|
||||
LD A,(HL)
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
; LD HL,IDE.INIT_TBL_IDE0.DriveType
|
||||
; AND 3
|
||||
; JR Z,.get_param
|
||||
; LD HL,IDE.INIT_TBL_IDE1.DriveType
|
||||
; DEC A
|
||||
; JR Z,.get_param
|
||||
; LD HL,IDE.INIT_TBL_IDE2.DriveType
|
||||
; DEC A
|
||||
; JR Z,.get_param
|
||||
; LD HL,IDE.INIT_TBL_IDE3.DriveType
|
||||
; .get_param:
|
||||
; IN A,(SLOT3)
|
||||
; LD B,A
|
||||
; LD A,SYS_PAGE
|
||||
; OUT (SLOT3),A
|
||||
|
||||
CP IDE.Device.HDD
|
||||
RET Z
|
||||
SCF
|
||||
.error: LD A,BIOS.Error.BadDrvNumber
|
||||
RET
|
||||
; LD A,(HL)
|
||||
; LD C,SLOT3
|
||||
; OUT (C),B
|
||||
|
||||
; CP IDE.Device.HDD
|
||||
; RET Z
|
||||
; SCF
|
||||
; .error: LD A,BIOS.Error.BadDrvNumber
|
||||
; RET
|
||||
;[]================================================================[#57]
|
||||
100
src/bios/exp/EXTENDED/IDE/shared.asm
Normal file
100
src/bios/exp/EXTENDED/IDE/shared.asm
Normal file
@ -0,0 +1,100 @@
|
||||
;[ ] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
||||
|
||||
;=======================================================================
|
||||
; ‚室: A - ®¬¥à ãáâனáâ¢
|
||||
; C - ’¨¯
|
||||
SELECT_DRIVE:
|
||||
AND #0F
|
||||
LD IY,IDE.INIT_TBL_IDE0
|
||||
JR Z,.channel
|
||||
DEC A
|
||||
LD IY,IDE.INIT_TBL_IDE1
|
||||
;R02
|
||||
JR Z,.channel
|
||||
DEC A
|
||||
LD IY,IDE.INIT_TBL_IDE2
|
||||
JR Z,.channel
|
||||
DEC A
|
||||
LD IY,IDE.INIT_TBL_IDE3
|
||||
;
|
||||
JR Z,.channel
|
||||
LD A,BIOS.Error.BadDrvNumber
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.channel:
|
||||
EXX
|
||||
IN A,(SLOT3)
|
||||
PUSH AF
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||
AND 1
|
||||
LD A,IDE.Chanel.Secondary
|
||||
JR NZ,.device
|
||||
LD A,IDE.Chanel.Primary
|
||||
.device:
|
||||
OUT (IDE.Chanel.Set),A ;R02
|
||||
LD C,(IY+IDE.HDD_INIT_TABLE.DriveType)
|
||||
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||
POP AF
|
||||
OUT (SLOT3),A ;¢®§¢à â áâà ¨æë
|
||||
;
|
||||
LD A,C
|
||||
EXX
|
||||
CP C
|
||||
EXX
|
||||
SCF
|
||||
LD A,BIOS.Error.BadDrvNumber
|
||||
RET NZ
|
||||
;
|
||||
LD A,B
|
||||
AND #F0
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
EXX
|
||||
RET
|
||||
;
|
||||
; NODRIVE:
|
||||
; LD A,BIOS.Error.BadDrvNumber
|
||||
; SCF
|
||||
; RET
|
||||
;=======================================================================
|
||||
|
||||
|
||||
;=======================================================================
|
||||
;Function: Detect Disk
|
||||
; A - Disk
|
||||
; ‘ - Type
|
||||
;Return: CF=0 - A=Drive type
|
||||
; CF=1 - drive not present, A=#02
|
||||
DRV_DETECT:
|
||||
CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
|
||||
CCF
|
||||
JR C,.error
|
||||
|
||||
LD HL,IDE.INIT_TBL_IDE0.DriveType
|
||||
AND 3
|
||||
JR Z,.get_param
|
||||
LD HL,IDE.INIT_TBL_IDE1.DriveType
|
||||
DEC A
|
||||
JR Z,.get_param
|
||||
LD HL,IDE.INIT_TBL_IDE2.DriveType
|
||||
DEC A
|
||||
JR Z,.get_param
|
||||
LD HL,IDE.INIT_TBL_IDE3.DriveType
|
||||
.get_param:
|
||||
IN A,(SLOT3)
|
||||
LD B,A
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
|
||||
LD A,(HL)
|
||||
CP C ; compare Type
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
RET Z
|
||||
SCF
|
||||
.error: LD A,BIOS.Error.BadDrvNumber
|
||||
RET
|
||||
@ -119,8 +119,9 @@ DRV_LIST: ; ?????
|
||||
|
||||
INCLUDE 'EXTENDED/FDD_DRIVER_2.asm'
|
||||
INCLUDE 'EXTENDED/RAM_DISK_DRIVER_1.asm'
|
||||
INCLUDE 'EXTENDED/HDD_DRIVER_6.asm'
|
||||
INCLUDE 'EXTENDED/CD_DRIVER_0.asm'
|
||||
INCLUDE 'EXTENDED/IDE/HDD_DRV.asm'
|
||||
INCLUDE 'EXTENDED/IDE/CD_DRV.asm'
|
||||
INCLUDE 'EXTENDED/IDE/SHARED.asm'
|
||||
|
||||
|
||||
;DISPLAY " EXTENDED end addr: ", /A, $
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
;-----------------------------------------------------------------------
|
||||
;Rev Date Name Description
|
||||
;-----------------------------------------------------------------------
|
||||
;R02 17.08.2023 BAO Fixed bug with AUTODETECT ATAPI Drives
|
||||
;R02 17.08.2023 BAO New AUTODETECT ATA/ATAPI procedure
|
||||
;R01 01.08.2001 DNS FIX BUG INT "SELECT_IDE"
|
||||
;R00 24.07.2001 DNS ADD SECONDARY IDE
|
||||
; 24.07.2001 DNS INITIAL NEW VERSION 2.48
|
||||
@ -169,7 +169,7 @@ START: CALL SetUP_CHANELS
|
||||
LD A,#03
|
||||
CALL STEP1_GETCMOS
|
||||
|
||||
;!TEST save hdd parameters to cmos for "setup" in settings
|
||||
;[x] save hdd parameters to cmos for "setup" in settings
|
||||
CALL WRITING
|
||||
;
|
||||
CALL ScreenPOS.CRLF
|
||||
|
||||
@ -884,6 +884,7 @@ RECOVERYstart:
|
||||
|
||||
|
||||
PrepareToBOOT:
|
||||
CALL INT_ON
|
||||
HALT ; ¡¥§ ¥£® ¥ áà ¡ âë¢ ¥â § ¦¨¬ ¨¥ è¨ä⠯ਠáâ à⥠¤®á ¤«ï ®â¬¥ë áâ àâ system.exe
|
||||
CALL INT_OFF
|
||||
CALL PORTS_INIT.clean_kbd_buf ;Clearing the keyboard buffer
|
||||
@ -937,7 +938,7 @@ CDSTART:
|
||||
POP AF
|
||||
PUSH AF
|
||||
CALL PRINT_CHANEL
|
||||
|
||||
;
|
||||
POP BC
|
||||
SET 6,B
|
||||
SCF
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user