промежуточное
This commit is contained in:
parent
73f9070083
commit
2927028434
@ -1 +1 @@
|
|||||||
Subproject commit 710aa4b5dd4b651bcb01ef5e86150b99dfe739ee
|
Subproject commit ccb95c96a5684e4f99c19f96b8fcc72f7d0b8212
|
||||||
@ -18,7 +18,7 @@
|
|||||||
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB high FN_RESERVED_5x ;#5E - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_ABSENT_5x ;#5E
|
||||||
DB high DRV_LIST ;#5F - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high DRV_LIST ;#5F - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
EDUP
|
EDUP
|
||||||
ELSE
|
ELSE
|
||||||
@ -487,7 +487,7 @@ TAB_5xFNS:
|
|||||||
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB low FN_RESERVED_5x ;#5C - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB low FN_RESERVED_5x ;#5C - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB low FN_RESERVED_5x ;#5D - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB low FN_RESERVED_5x ;#5D - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB low FN_RESERVED_5x ;#5E - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB low FN_ABSENT_5x ;#5E - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB low DRV_LIST ;#5F - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB low DRV_LIST ;#5F - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
;
|
;
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
@ -513,7 +513,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 FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_ABSENT_5x
|
||||||
DB low DRV_LIST
|
DB low DRV_LIST
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
@ -538,7 +538,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 FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_ABSENT_5x
|
||||||
DB low DRV_LIST
|
DB low DRV_LIST
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
@ -551,13 +551,13 @@ TAB_5xFNS:
|
|||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low CD_5x_RESET
|
DB low CD_5x_RESET
|
||||||
DB low CD_5x_LONG_READ
|
DB low CD_5x_LONG_READ
|
||||||
DB low FN_ABSENT_5x
|
DB low FN_ABSENT_5x ; LONG_WRITE
|
||||||
DB low FN_ABSENT_5x
|
DB low FN_ABSENT_5x ; VERIFY
|
||||||
DB low CD_5x_READ
|
DB low CD_5x_READ
|
||||||
DB low FN_ABSENT_5x
|
DB low FN_ABSENT_5x ; WRITE
|
||||||
DB low CD_5x_DETECT
|
DB low CD_5x_DETECT
|
||||||
DB low FN_ABSENT_5x
|
DB low FN_ABSENT_5x ; GETMED
|
||||||
DB low FN_ABSENT_5x
|
DB low FN_ABSENT_5x ; SETMED
|
||||||
|
|
||||||
DB low DRV_VERSION
|
DB low DRV_VERSION
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
@ -589,7 +589,7 @@ TAB_5xFNS:
|
|||||||
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB high FN_RESERVED_5x ;#5E - Extended functions
|
DB high FN_ABSENT_5x ;#5E - Extended functions
|
||||||
DB high DRV_LIST ;#5F - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high DRV_LIST ;#5F - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
;
|
;
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
@ -614,7 +614,7 @@ TAB_5xFNS:
|
|||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_ABSENT_5x
|
||||||
DB high DRV_LIST
|
DB high DRV_LIST
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
@ -638,7 +638,7 @@ TAB_5xFNS:
|
|||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_ABSENT_5x
|
||||||
DB high DRV_LIST
|
DB high DRV_LIST
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
@ -684,34 +684,50 @@ EXP_FNS_RST18:
|
|||||||
EX (SP),HL
|
EX (SP),HL
|
||||||
RET
|
RET
|
||||||
|
|
||||||
FN_5x_Parser_1:
|
; HDD_5x_RESET
|
||||||
|
; HDD_5x_LONG_READ
|
||||||
|
; HDD_5x_LONG_WRITE
|
||||||
|
; HDD_5x_VERIFY
|
||||||
|
; HDD_5x_READ
|
||||||
|
; HDD_5x_WRITE
|
||||||
|
; HDD_5x_DETECT
|
||||||
|
; HDD_5x_GETMED
|
||||||
|
; HDD_5x_SETMED
|
||||||
|
; DRV_VERSION
|
||||||
|
; FN_RESERVED_5x
|
||||||
|
; FN_RESERVED_5x
|
||||||
|
; FN_RESERVED_5x
|
||||||
|
; FN_RESERVED_5x
|
||||||
|
; DRV_LIST
|
||||||
|
|
||||||
|
FN_5x_Parser_1: ; HDD_5x_RESET
|
||||||
LD C,#01
|
LD C,#01
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_2:
|
FN_5x_Parser_2: ; HDD_5x_LONG_READ
|
||||||
LD C,#02
|
LD C,#02
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_3:
|
FN_5x_Parser_3: ; HDD_5x_LONG_WRITE
|
||||||
LD C,#03
|
LD C,#03
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_4:
|
FN_5x_Parser_4: ; HDD_5x_VERIFY
|
||||||
LD C,#04
|
LD C,#04
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_6:
|
FN_5x_Parser_6: ; HDD_5x_WRITE
|
||||||
LD C,#06
|
LD C,#06
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_7:
|
FN_5x_Parser_7: ; HDD_5x_DETECT
|
||||||
LD C,#07
|
LD C,#07
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_8:
|
FN_5x_Parser_8: ; HDD_5x_GETMED
|
||||||
LD C,#08
|
LD C,#08
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_9:
|
FN_5x_Parser_9: ; HDD_5x_SETMED
|
||||||
LD C,#09
|
LD C,#09
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_E:
|
FN_5x_Parser_E: ; DRV_EXTENDED
|
||||||
LD C,#0E
|
LD C,#0E
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_5:
|
FN_5x_Parser_5: ; HDD_5x_READ
|
||||||
LD C,5
|
LD C,5
|
||||||
FN_5x_Parser:
|
FN_5x_Parser:
|
||||||
PUSH HL
|
PUSH HL
|
||||||
|
|||||||
425
src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM
Normal file
425
src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM
Normal file
@ -0,0 +1,425 @@
|
|||||||
|
;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
||||||
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||||||
|
;CD ROM DRIVE DRIVER
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
; 02-08-2001 DNS Initial this module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;========================================================
|
||||||
|
MAX_ATAPI_SEC_SIZE EQU 4096
|
||||||
|
PKTSIZE EQU 12
|
||||||
|
RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
|
||||||
|
RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16
|
||||||
|
|
||||||
|
ASSERT ((PKTSIZE % 4) = 0), "PKTSIZE must be an even number"
|
||||||
|
|
||||||
|
;[]================================================================[#51]
|
||||||
|
CD_5x_RESET: LD C,IDE.Device.ATAPI
|
||||||
|
CALL SELECT_DRIVE
|
||||||
|
RET C
|
||||||
|
LD B,50
|
||||||
|
.loop: PUSH BC
|
||||||
|
CALL CD_TEST
|
||||||
|
POP BC
|
||||||
|
RET NC
|
||||||
|
EI
|
||||||
|
HALT
|
||||||
|
DJNZ .loop
|
||||||
|
RET
|
||||||
|
;[]================================================================[#51]
|
||||||
|
|
||||||
|
|
||||||
|
;!TODO
|
||||||
|
; atapi.pdf áâà. 24 § ¯¨áì/ç⥨¥ ¬®£ãâ ¡ëâì ¬ ªá¨¬ «ì묨 ¡«®ª ¬¨ ¢ ¥áª®«ìª® § 室®¢
|
||||||
|
;[]================================================================[#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:
|
||||||
|
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:
|
||||||
|
PUSH IY
|
||||||
|
SAFE_PORTY_2
|
||||||
|
PUSH BC
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
;
|
||||||
|
CALL RW_ATAPI_SECTORs
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
|
||||||
|
RW_ATAPI_SECTORs:
|
||||||
|
LD C,IDE.Device.ATAPI
|
||||||
|
CALL SELECT_DRIVE
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
LD C,SLOT3
|
||||||
|
IN A,(C)
|
||||||
|
PUSH AF
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (C),A
|
||||||
|
LD HL,ATAPI_CMD_PACKET.READ
|
||||||
|
LD DE,RAM_ATAPI_READ
|
||||||
|
LD BC,PKTSIZE
|
||||||
|
LDIR
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
LD A,H
|
||||||
|
LD H,L
|
||||||
|
LD L,A
|
||||||
|
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL
|
||||||
|
LD A,XH
|
||||||
|
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01
|
||||||
|
LD A,XL
|
||||||
|
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01
|
||||||
|
LD A,B
|
||||||
|
LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; OUT (SLOT3),A
|
||||||
|
LD HL,RAM_ATAPI_READ
|
||||||
|
CALL EXEC_PACKET_COMMAND
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
LD C,SLOT3
|
||||||
|
OUT (C),B
|
||||||
|
;[]===========================================================[#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.ATAPI
|
||||||
|
AND %1011'1111
|
||||||
|
JP DRV_DETECT
|
||||||
|
;[]================================================================[#57]
|
||||||
|
|
||||||
|
|
||||||
|
;[]================================================================[#5E]
|
||||||
|
;Function: Extended
|
||||||
|
; A - Disk
|
||||||
|
; B - SubFunction
|
||||||
|
;Return:
|
||||||
|
;
|
||||||
|
CD_5x_Extended:
|
||||||
|
LD C,IDE.Device.ATAPI
|
||||||
|
CALL SELECT_DRIVE
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
LD A,B
|
||||||
|
CP 2
|
||||||
|
JR C,TRAY_FN
|
||||||
|
; ...
|
||||||
|
; ...
|
||||||
|
;LD A,#AA
|
||||||
|
LD A,BIOS.Error.InvalidSubFunction
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;[]================================================================[#5E]
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
||||||
|
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||||
|
DEC A
|
||||||
|
JR Z,EXEC_PACKET_COMMAND
|
||||||
|
LD HL,ATAPI_CMD_PACKET.OPEN
|
||||||
|
JR EXEC_PACKET_COMMAND
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; INPUT: HL - AP paket (12bytes)
|
||||||
|
; RETURN: CF - ERROR
|
||||||
|
; !TODO CD ERRORS to INCLUDES
|
||||||
|
; #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
|
||||||
|
EXEC_PACKET_COMMAND:
|
||||||
|
EXX
|
||||||
|
CALL CD_WAITPRT
|
||||||
|
EXX
|
||||||
|
JR NC,.READY
|
||||||
|
;
|
||||||
|
LD BC,IDE.Write.Command
|
||||||
|
LD A,IDE.ATAPI.Reset
|
||||||
|
OUT (C),A
|
||||||
|
;
|
||||||
|
LD B,#80
|
||||||
|
.pause: DJNZ .pause
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
CALL CD_WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
.READY: LD C,SLOT3
|
||||||
|
IN B,(C)
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
;
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (C),A
|
||||||
|
LD DE,RAM_ATAPI_PK ;!FIXIT ¬®¦¥â á⥪¥ ¢ë¤¥«ïâì ¬¥áâ®?
|
||||||
|
LD BC,PKTSIZE
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
OUT (C),B
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
EXX
|
||||||
|
;OUT (C),A
|
||||||
|
;XOR A
|
||||||
|
LD BC,IDE.Write.Features
|
||||||
|
OUT (C),A
|
||||||
|
LD DE,MAX_ATAPI_SEC_SIZE ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥®© ª ª®©-¨¡ã¤ì
|
||||||
|
LD BC,IDE.Write.CylinderLow
|
||||||
|
OUT (C),E
|
||||||
|
LD BC,IDE.Write.CylinderHigh
|
||||||
|
OUT (C),D
|
||||||
|
LD BC,IDE.Write.Command
|
||||||
|
LD A,IDE.ATAPI.Packet
|
||||||
|
OUT (C),A
|
||||||
|
CALL CD_WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
EXX
|
||||||
|
LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
||||||
|
CALL CD_WAITPRT.Custom
|
||||||
|
EXX
|
||||||
|
BIT IDE.CtrlBit.Error,A
|
||||||
|
JR NZ,.CDERROR
|
||||||
|
JR NC,.YEP_DRQ
|
||||||
|
LD A,#80 ; ERROR TIME OUT ;!HARDCODE
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.YEP_DRQ: LD C,SLOT3
|
||||||
|
IN B,(C)
|
||||||
|
PUSH BC
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD HL,RAM_ATAPI_PK
|
||||||
|
LD BC,IDE.Write.Data
|
||||||
|
LD A,PKTSIZE/4
|
||||||
|
.OUTPKT: OUTI
|
||||||
|
OUTI
|
||||||
|
OUTI
|
||||||
|
OUTI
|
||||||
|
DEC A
|
||||||
|
JR NZ,.OUTPKT
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
|
||||||
|
OUT (C),B
|
||||||
|
LD B,#80
|
||||||
|
.pause2: DJNZ .pause2
|
||||||
|
;
|
||||||
|
.AP_LOOP: EXX
|
||||||
|
CALL CD_WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
LD BC,IDE.Read.Status
|
||||||
|
IN A,(C)
|
||||||
|
BIT IDE.CtrlBit.Error,A
|
||||||
|
;JR NZ,.CDERROR
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
.CDERROR: LD BC,IDE.Read.Error ;ERROR
|
||||||
|
IN A,(C)
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;!FIXIT
|
||||||
|
AND IDE.CtrlByte.DataRequest
|
||||||
|
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,IDE.Read.CylinderLow
|
||||||
|
IN E,(C)
|
||||||
|
LD BC,IDE.Read.CylinderHigh
|
||||||
|
IN D,(C) ;TRANSFER BLOCK SIZE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
RET Z ;BLOCK = 0
|
||||||
|
;
|
||||||
|
LD BC,IDE.Read.Counter
|
||||||
|
IN A,(C)
|
||||||
|
AND #02
|
||||||
|
;WRITE ;!FIXIT
|
||||||
|
LD BC,IDE.Read.Data
|
||||||
|
JR NZ,.FROM_CD
|
||||||
|
;
|
||||||
|
.WR_T_CD: OUTI
|
||||||
|
OUTI
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,.WR_T_CD
|
||||||
|
EX DE,HL
|
||||||
|
JR .AP_LOOP
|
||||||
|
;
|
||||||
|
;READ
|
||||||
|
.FROM_CD: ;LD BC,IDE.Read.Data
|
||||||
|
; ¯à®¢¥àª ¯¥à¥¯®«¥¨¥ ¤à¥á ¡ãä¥à
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR NZ,.read_loop
|
||||||
|
; next page in mem block
|
||||||
|
LD HL,#C000
|
||||||
|
IN A,(SLOT3)
|
||||||
|
EX AF,AF' ;>-----------> \
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD D,high SYS_PAGE.RAM_TABLE
|
||||||
|
LD E,XH
|
||||||
|
LD A,(DE)
|
||||||
|
LD XH,A
|
||||||
|
EX AF,AF' ;<-----------< /
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
.read_loop: INI
|
||||||
|
INI
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,.read_loop
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
JR .AP_LOOP
|
||||||
|
;
|
||||||
|
|
||||||
|
;.NULL: LD BC,IDE.Read.Data
|
||||||
|
;.RD_N_CD: IN A,(C)
|
||||||
|
; DEC B
|
||||||
|
; IN A,(C)
|
||||||
|
; DEC B
|
||||||
|
; DEC DE
|
||||||
|
; DEC DE
|
||||||
|
; LD A,D
|
||||||
|
; OR E
|
||||||
|
; JR NZ,.RD_N_CD
|
||||||
|
; ; DE = 0
|
||||||
|
; JR .AP_LOOP
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; D - MASK, E - PATTERN
|
||||||
|
CD_WAITPRT: LD DE,256*(IDE.CtrlByte.DataRequest) + 0
|
||||||
|
.Custom: LD B,100
|
||||||
|
LD HL,#0000
|
||||||
|
.LOOP: LD A,high IDE.Read.Status
|
||||||
|
IN A,(low IDE.Read.Status)
|
||||||
|
CP #FF
|
||||||
|
JR Z,.error
|
||||||
|
AND D
|
||||||
|
CP E
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
.NEXT_TRY: DEC L
|
||||||
|
JR NZ,.LOOP
|
||||||
|
DEC H
|
||||||
|
JR NZ,.LOOP
|
||||||
|
DJNZ .LOOP
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
.error: ; !FIXIT error number
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
|
||||||
|
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||||
|
JP EXEC_PACKET_COMMAND
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
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
|
||||||
|
;
|
||||||
|
.WRITE: DB #2E,#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
|
||||||
|
;
|
||||||
@ -168,25 +168,33 @@ HDD_5x_READ:
|
|||||||
; A - Disk
|
; A - Disk
|
||||||
; HL:IX - Sector
|
; HL:IX - Sector
|
||||||
; DE - Address
|
; DE - Address
|
||||||
; B - Sector counter
|
; B - Sector counter, 0 = 256
|
||||||
; A'- Memory Page Number
|
; A'- Memory Page Number
|
||||||
;Return:
|
;Return:
|
||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
|
; A' - Last mem page in RAM Block used for readed data
|
||||||
;LONG READ SECTOR(S)
|
;LONG READ SECTOR(S)
|
||||||
HDD_5x_LONG_READ:
|
HDD_5x_LONG_READ:
|
||||||
PUSH IY
|
PUSH IY
|
||||||
|
|
||||||
SAFE_PORTY_2
|
SAFE_PORTY_2
|
||||||
|
|
||||||
PUSH BC
|
PUSH BC
|
||||||
PUSH IX
|
PUSH IX
|
||||||
PUSH HL
|
PUSH HL
|
||||||
CALL RDS000
|
;IF OPTIMIZE_RW_PROCEDURE
|
||||||
EX DE,HL
|
|
||||||
JR C,HERRRD0
|
|
||||||
LD A,XH
|
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
|
AND A ;read
|
||||||
|
EX AF,AF'
|
||||||
|
CALL RW_ATA_SECTORs
|
||||||
|
;ELSE
|
||||||
|
;CALL READ_ATA_SECTORs
|
||||||
|
;ENDIF
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
JR C,.error
|
||||||
|
LD A,XH ; current page in mem block for SLOT3
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
POP HL
|
POP HL
|
||||||
POP IX
|
POP IX
|
||||||
POP BC
|
POP BC
|
||||||
@ -194,23 +202,23 @@ HDD_5x_LONG_READ:
|
|||||||
CP B
|
CP B
|
||||||
LD C,B
|
LD C,B
|
||||||
LD B,A
|
LD B,A
|
||||||
JR NZ,RNOT256
|
JR Z,.B_256_sectors
|
||||||
INC B
|
;
|
||||||
|
ADD IX,BC
|
||||||
|
LD C,B
|
||||||
|
.pre_exit: ADC HL,BC
|
||||||
|
.exit: RESTORE_PORTY
|
||||||
|
POP IY
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.B_256_sectors: INC B
|
||||||
ADD IX,BC
|
ADD IX,BC
|
||||||
LD B,C
|
LD B,C
|
||||||
ADC HL,BC
|
JR .pre_exit
|
||||||
;EX AF,AF' ;!TEST 21/11/23
|
;
|
||||||
JR RST8RDR
|
.error: LD B,A ; A - ®¬¥à ®è¨¡ª¨
|
||||||
|
|
||||||
RNOT256 ADD IX,BC
|
|
||||||
LD C,B
|
|
||||||
ADC HL,BC
|
|
||||||
;EX AF,AF' ;!TEST 21/11/23
|
|
||||||
JR RST8RDR
|
|
||||||
|
|
||||||
HERRRD0 LD B,A
|
|
||||||
LD C,XL
|
LD C,XL
|
||||||
LD A,XH
|
LD A,XH ; current page in mem block for SLOT3
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
POP HL
|
POP HL
|
||||||
POP IX
|
POP IX
|
||||||
@ -225,88 +233,92 @@ HERRRD0 LD B,A
|
|||||||
LD C,A
|
LD C,A
|
||||||
LD A,B
|
LD A,B
|
||||||
LD B,C
|
LD B,C
|
||||||
;R03
|
SCF ;R03
|
||||||
SCF
|
JR .exit
|
||||||
;EX AF,AF' ;!TEST 21/11/23
|
|
||||||
;
|
;
|
||||||
RST8RDR: RESTORE_PORTY
|
/*
|
||||||
POP IY
|
IFN OPTIMIZE_RW_PROCEDURE
|
||||||
;EX AF,AF' ;!TEST 21/11/23
|
READ_ATA_SECTORs:
|
||||||
RET
|
LD C,IDE.Device.HDD
|
||||||
|
|
||||||
;READ SECTOR(S)
|
|
||||||
RDS000: LD C,IDE.Device.HDD
|
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
EXX
|
EXX
|
||||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
;LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||||
CALL WAITPRT
|
CALL WAITPRT
|
||||||
EXX
|
EXX
|
||||||
RET C
|
RET C
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
PUSH AF
|
PUSH AF ; memory page number
|
||||||
PUSH DE
|
PUSH DE
|
||||||
CALL PRESET
|
CALL PRESET
|
||||||
POP HL
|
POP HL
|
||||||
POP AF
|
POP AF ; memory page number
|
||||||
LD XL,0
|
LD XL,0
|
||||||
LD XH,A
|
LD XH,A
|
||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
LD A,IDE.ATA.ReadSectorsWithRetry
|
LD A,IDE.ATA.ReadSectorsWithRetry
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
;?????
|
|
||||||
;SAVE HL!
|
;SAVE HL!
|
||||||
RDS002: EXX
|
EXX
|
||||||
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
||||||
CALL WAITPRT
|
CALL WAITPRT.custom
|
||||||
EXX
|
EXX
|
||||||
RET C
|
RET C
|
||||||
;NOP ;R01 REMOVED "DI"
|
;DI ;R01 REMOVED "DI"
|
||||||
IN A,(SLOT3)
|
.big_loop: IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF' ;>-----------> \
|
||||||
LD A,XH
|
LD A,XH
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
; READ SECTOR 512 bytes ;!HARDCODE sector size
|
||||||
LD BC,IDE.Read.Data
|
LD BC,IDE.Read.Data
|
||||||
|
.loop_256_1: DUP 16
|
||||||
RDS003: DUP 16
|
|
||||||
INI
|
INI
|
||||||
EDUP
|
EDUP
|
||||||
JP NZ,RDS003
|
JP NZ,.loop_256_1
|
||||||
RDS004: DUP 16
|
.loop_256_2: DUP 16
|
||||||
INI
|
INI
|
||||||
EDUP
|
EDUP
|
||||||
JP NZ,RDS004
|
JP NZ,.loop_256_2
|
||||||
|
; ; ; ; ;
|
||||||
EX AF,AF'
|
;
|
||||||
|
EX AF,AF' ;<-----------< /
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
LD A,H
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
JR NZ,.W44
|
JR NZ,.W44
|
||||||
|
; next page in mem block
|
||||||
LD HL,#C000
|
LD HL,#C000
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF' ;>-----------> \
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD D,#C2
|
LD D,high SYS_PAGE.RAM_TABLE
|
||||||
LD E,XH
|
LD E,XH
|
||||||
LD A,(DE)
|
LD A,(DE)
|
||||||
LD XH,A
|
LD XH,A
|
||||||
EX AF,AF'
|
EX AF,AF' ;<-----------< /
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
.W44: INC XL ;INC LOADED SECTORS
|
.W44: INC XL ;INC LOADED SECTORS
|
||||||
EXX
|
EXX
|
||||||
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
;LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||||
CALL WAITPRT
|
CALL WAITPRT
|
||||||
EXX
|
EXX
|
||||||
RET C
|
RET C
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
BIT IDE.ControlBit.DataRequest,A
|
BIT IDE.CtrlBit.DataRequest,A
|
||||||
JP NZ,RDS002
|
;
|
||||||
XOR A
|
RET Z
|
||||||
RET
|
JP .big_loop
|
||||||
|
;JP NZ,.big_loop
|
||||||
|
;XOR A
|
||||||
|
;RET
|
||||||
|
;
|
||||||
|
ENDIF
|
||||||
|
*/
|
||||||
;[]===========================================================[#52, #55]
|
;[]===========================================================[#52, #55]
|
||||||
|
|
||||||
|
|
||||||
@ -343,7 +355,15 @@ HDD_5x_LONG_WRITE:
|
|||||||
PUSH IX
|
PUSH IX
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH BC
|
PUSH BC
|
||||||
CALL WRS000
|
;IF OPTIMIZE_RW_PROCEDURE
|
||||||
|
EX AF,AF'
|
||||||
|
SCF ;write
|
||||||
|
EX AF,AF'
|
||||||
|
CALL RW_ATA_SECTORs
|
||||||
|
;ELSE
|
||||||
|
;CALL WRITE_ATA_SECTORs
|
||||||
|
;ENDIF
|
||||||
|
;
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
JP C,HERRWR0
|
JP C,HERRWR0
|
||||||
LD A,XH
|
LD A,XH
|
||||||
@ -395,37 +415,129 @@ RST8WRR: RESTORE_PORTY
|
|||||||
;EX AF,AF'
|
;EX AF,AF'
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;WRITE SECTOR(S)
|
|
||||||
WRS000:
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||||||
|
/*
|
||||||
|
temp1=0;
|
||||||
|
bp 20e3,{b@20e3==cd},{temp1=1; g};
|
||||||
|
bp 213b,{b@213b==cd},{temp1=2; g};
|
||||||
|
bp 21B1,{b@21b1==01 and temp1==2};
|
||||||
|
bp 2229,{b@2229==01 and temp1==1};
|
||||||
|
*/
|
||||||
|
; IF OPTIMIZE_RW_PROCEDURE
|
||||||
|
; CF=1 - write, CF=0 - read
|
||||||
|
RW_ATA_SECTORs: LD C,IDE.Device.HDD
|
||||||
|
CALL SELECT_DRIVE
|
||||||
|
RET C
|
||||||
|
EXX
|
||||||
|
;LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||||
|
CALL WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
EX AF,AF'
|
||||||
|
PUSH AF ; memory page number
|
||||||
|
PUSH DE
|
||||||
|
CALL PRESET
|
||||||
|
POP HL
|
||||||
|
POP AF ; memory page number
|
||||||
|
LD XL,0
|
||||||
|
LD XH,A
|
||||||
|
LD BC,IDE.Write.Command
|
||||||
|
LD A,IDE.ATA.WriteSectorsWithRetry
|
||||||
|
JR C,.set_command
|
||||||
|
;
|
||||||
|
LD A,IDE.ATA.ReadSectorsWithRetry
|
||||||
|
.set_command: OUT (C),A
|
||||||
|
;SAVE HL!
|
||||||
|
EX AF,AF'
|
||||||
|
EXX
|
||||||
|
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
||||||
|
CALL WAITPRT.custom
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
;DI ;R01 REMOVED "DI"
|
||||||
|
.big_loop: IN A,(SLOT3)
|
||||||
|
EX AF,AF' ;>-----------> \
|
||||||
|
LD A,XH
|
||||||
|
OUT (SLOT3),A
|
||||||
|
JR C,.write_sector
|
||||||
|
;
|
||||||
|
; READ SECTOR 512 bytes ;!HARDCODE sector size
|
||||||
|
LD BC,IDE.Read.Data
|
||||||
|
.loop_256_1: DUP 16
|
||||||
|
INI
|
||||||
|
EDUP
|
||||||
|
JP NZ,.loop_256_1
|
||||||
|
.loop_256_2: DUP 16
|
||||||
|
INI
|
||||||
|
EDUP
|
||||||
|
JP NZ,.loop_256_2
|
||||||
|
EX AF,AF'
|
||||||
|
; ; ; ; ;
|
||||||
|
; CF=0
|
||||||
|
.return_rw: EX AF,AF' ;<-----------< /
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR NZ,.W44
|
||||||
|
; next page in mem block
|
||||||
|
LD HL,#C000
|
||||||
|
IN A,(SLOT3)
|
||||||
|
EX AF,AF' ;>-----------> \
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD D,high SYS_PAGE.RAM_TABLE
|
||||||
|
LD E,XH
|
||||||
|
LD A,(DE)
|
||||||
|
LD XH,A
|
||||||
|
EX AF,AF' ;<-----------< /
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
.W44: INC XL ;INC LOADED SECTORS
|
||||||
|
EXX
|
||||||
|
CALL WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
LD BC,IDE.Read.Status
|
||||||
|
IN A,(C)
|
||||||
|
BIT IDE.CtrlBit.DataRequest,A
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
JP .big_loop
|
||||||
|
;JP NZ,.big_loop
|
||||||
|
;XOR A
|
||||||
|
;RET
|
||||||
|
;
|
||||||
|
;
|
||||||
|
.write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size
|
||||||
|
LD BC,IDE.Write.Data
|
||||||
|
LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size
|
||||||
|
.loop: DUP WRITE_OUTI_DUPs
|
||||||
|
OUTI
|
||||||
|
EDUP
|
||||||
|
DEC D
|
||||||
|
JR NZ,.loop
|
||||||
|
SCF
|
||||||
|
JP .return_rw
|
||||||
|
; ; ; ; ;
|
||||||
|
|
||||||
|
;ENDIF
|
||||||
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||||||
|
/*
|
||||||
|
IFN OPTIMIZE_RW_PROCEDURE
|
||||||
|
WRITE_ATA_SECTORs:
|
||||||
LD C,IDE.Device.HDD
|
LD C,IDE.Device.HDD
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
EXX
|
EXX
|
||||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
;LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||||
CALL WAITPRT
|
CALL WAITPRT
|
||||||
EXX
|
EXX
|
||||||
RET C
|
RET C
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
PUSH AF
|
PUSH AF
|
||||||
PUSH DE
|
PUSH DE
|
||||||
|
|
||||||
;[x] CMOS Write Protect Disabled
|
|
||||||
IF HDDwriteProtect
|
|
||||||
PUSH BC
|
|
||||||
LD D,CMOS_CELL.Options
|
|
||||||
CALL CMOS_RD
|
|
||||||
POP BC
|
|
||||||
AND 1
|
|
||||||
JR Z,NO_WriteProtect
|
|
||||||
POP HL
|
|
||||||
POP AF
|
|
||||||
EX AF,AF'
|
|
||||||
LD XL,0
|
|
||||||
LD A,BIOS.Error.WriteProtect
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
ENDIF
|
|
||||||
NO_WriteProtect:
|
|
||||||
CALL PRESET
|
CALL PRESET
|
||||||
POP HL
|
POP HL
|
||||||
POP AF
|
POP AF
|
||||||
@ -434,58 +546,64 @@ NO_WriteProtect:
|
|||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
LD A,IDE.ATA.WriteSectorsWithRetry
|
LD A,IDE.ATA.WriteSectorsWithRetry
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
;SAVE HL!
|
; SAVE HL?!
|
||||||
WRS002: EXX
|
EXX
|
||||||
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
||||||
CALL WAITPRT
|
CALL WAITPRT.custom
|
||||||
EXX
|
EXX
|
||||||
RET C
|
RET C
|
||||||
|
;
|
||||||
;DI
|
.big_loop: IN A,(SLOT3)
|
||||||
IN A,(SLOT3)
|
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,XH
|
LD A,XH
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
|
; WRITE SECTOR 512 bytes ;!HARDCODE sector size
|
||||||
LD BC,IDE.Write.Data
|
LD BC,IDE.Write.Data
|
||||||
;LD D,#20
|
LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size
|
||||||
LD D,512/WRITE_OUTI_DUPs
|
.loop: DUP WRITE_OUTI_DUPs
|
||||||
WRS003:
|
|
||||||
DUP WRITE_OUTI_DUPs
|
|
||||||
OUTI
|
OUTI
|
||||||
EDUP
|
EDUP
|
||||||
DEC D
|
DEC D
|
||||||
JR NZ,WRS003
|
JR NZ,.loop
|
||||||
|
; ; ; ; ;
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
//EI
|
;EI
|
||||||
;
|
;
|
||||||
LD A,H
|
LD A,H
|
||||||
OR L
|
OR L
|
||||||
JR NZ,.W33
|
JR NZ,.W33
|
||||||
|
; next page in mem block
|
||||||
LD HL,#C000
|
LD HL,#C000
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD D,#C2
|
LD D,high SYS_PAGE.RAM_TABLE
|
||||||
LD E,XH
|
LD E,XH
|
||||||
LD A,(DE)
|
LD A,(DE)
|
||||||
LD XH,A
|
LD XH,A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
.W33: INC XL ;INC SAVED SECTORS
|
.W33: INC XL ;INC SAVED SECTORS
|
||||||
EXX
|
EXX
|
||||||
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
;LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||||
CALL WAITPRT
|
CALL WAITPRT
|
||||||
EXX
|
EXX
|
||||||
RET C
|
RET C
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
BIT IDE.ControlBit.DataRequest,A
|
BIT IDE.CtrlBit.DataRequest,A
|
||||||
JP NZ,WRS002
|
;
|
||||||
XOR A
|
RET Z
|
||||||
RET
|
JP .big_loop
|
||||||
|
;JP NZ,.big_loop
|
||||||
|
;XOR A
|
||||||
|
;RET
|
||||||
|
;
|
||||||
|
ENDIF
|
||||||
|
*/
|
||||||
;[]===========================================================[#53, #56]
|
;[]===========================================================[#53, #56]
|
||||||
|
|
||||||
|
|
||||||
@ -513,7 +631,6 @@ VRS000: LD C,IDE.Device.HDD
|
|||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
EXX
|
EXX
|
||||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
|
||||||
CALL WAITPRT
|
CALL WAITPRT
|
||||||
EXX
|
EXX
|
||||||
RET C
|
RET C
|
||||||
@ -525,16 +642,15 @@ VRS000: LD C,IDE.Device.HDD
|
|||||||
OUT (C),A
|
OUT (C),A
|
||||||
VRS002: LD BC,IDE.Read.Status
|
VRS002: LD BC,IDE.Read.Status
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
BIT IDE.ControlBit.Error,A
|
BIT IDE.CtrlBit.Error,A
|
||||||
JR Z,VRS003
|
JR Z,VRS003
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
VRS003: LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
VRS003: CALL WAITPRT
|
||||||
CALL WAITPRT
|
|
||||||
RET C
|
RET C
|
||||||
XOR A
|
XOR A
|
||||||
RET
|
RET
|
||||||
|
LD BC,IDE.Read.Counter
|
||||||
; HL:IX - LBA SECTOR
|
; HL:IX - LBA SECTOR
|
||||||
; B - SECTOR COUNTER
|
; B - SECTOR COUNTER
|
||||||
PRESET: LD A,B
|
PRESET: LD A,B
|
||||||
@ -624,8 +740,8 @@ CHS005: INC A
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; D - MASK
|
; D - MASK
|
||||||
; E - PATTERN
|
; E - PATTERN
|
||||||
WAITPRT:
|
WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE.CtrlByte.Ready
|
||||||
LD BC,IDE.Read.Status
|
.custom: LD BC,IDE.Read.Status
|
||||||
LD HL,#0000 ; § ¤¥à¦ª ;!HARDCODE
|
LD HL,#0000 ; § ¤¥à¦ª ;!HARDCODE
|
||||||
;
|
;
|
||||||
.loop: PUSH HL
|
.loop: PUSH HL
|
||||||
@ -1,403 +0,0 @@
|
|||||||
;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
|
||||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
||||||
;CD ROM DRIVE DRIVER
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
; 02-08-2001 DNS Initial this module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;========================================================
|
|
||||||
SIZESEC EQU #0800
|
|
||||||
PKTSIZE EQU 12
|
|
||||||
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
|
|
||||||
CALL CD_TEST
|
|
||||||
POP BC
|
|
||||||
RET NC
|
|
||||||
EI
|
|
||||||
HALT
|
|
||||||
DJNZ .loop
|
|
||||||
RET
|
|
||||||
;[]================================================================[#51]
|
|
||||||
|
|
||||||
|
|
||||||
;[]================================================================[#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:
|
|
||||||
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
|
|
||||||
;
|
|
||||||
EXX
|
|
||||||
LD C,SLOT3
|
|
||||||
IN A,(C)
|
|
||||||
PUSH AF
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (C),A
|
|
||||||
LD HL,ATAPI_CMD_PACKET.READ
|
|
||||||
LD DE,RAM_ATAPI_READ
|
|
||||||
LD BC,PKTSIZE
|
|
||||||
LDIR
|
|
||||||
EXX
|
|
||||||
|
|
||||||
LD A,H
|
|
||||||
LD H,L
|
|
||||||
LD L,A
|
|
||||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL
|
|
||||||
LD A,XH
|
|
||||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01
|
|
||||||
LD A,XL
|
|
||||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01
|
|
||||||
LD A,B
|
|
||||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01
|
|
||||||
;
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;
|
|
||||||
; POP AF
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
LD HL,RAM_ATAPI_READ
|
|
||||||
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
|
|
||||||
LD A,BIOS.Error.InvalidSubFunction
|
|
||||||
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
|
|
||||||
; !TODO CD ERRORS to INCLUDES
|
|
||||||
; #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
|
|
||||||
CALL CD_WAITPRT
|
|
||||||
EXX
|
|
||||||
JR NC,.READY
|
|
||||||
LD BC,IDE.Write.Command
|
|
||||||
LD A,IDE.ATAPI.Reset
|
|
||||||
OUT (C),A
|
|
||||||
|
|
||||||
LD B,#80
|
|
||||||
.pause: DJNZ .pause
|
|
||||||
|
|
||||||
EXX
|
|
||||||
;LD DE,#8000
|
|
||||||
CALL CD_WAITPRT
|
|
||||||
EXX
|
|
||||||
RET C
|
|
||||||
.READY:
|
|
||||||
LD C,SLOT3
|
|
||||||
IN B,(C)
|
|
||||||
|
|
||||||
PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (C),A
|
|
||||||
LD DE,RAM_ATAPI_PK ;!FIXIT ¬®¦¥â á⥪¥ ¢ë¤¥«ïâì ¬¥áâ®?
|
|
||||||
LD BC,PKTSIZE
|
|
||||||
LDIR
|
|
||||||
|
|
||||||
POP BC
|
|
||||||
POP DE
|
|
||||||
OUT (C),B
|
|
||||||
|
|
||||||
XOR A
|
|
||||||
EXX
|
|
||||||
;OUT (C),A
|
|
||||||
;XOR A
|
|
||||||
LD BC,IDE.Write.Features
|
|
||||||
OUT (C),A
|
|
||||||
LD DE,SIZESEC ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥®© ª ª®©-¨¡ã¤ì
|
|
||||||
LD BC,IDE.Write.CylinderLow
|
|
||||||
OUT (C),E
|
|
||||||
LD BC,IDE.Write.CylinderHigh
|
|
||||||
OUT (C),D
|
|
||||||
LD BC,IDE.Write.Command
|
|
||||||
LD A,IDE.ATAPI.Packet
|
|
||||||
OUT (C),A
|
|
||||||
;LD DE,#8000
|
|
||||||
CALL CD_WAITPRT
|
|
||||||
EXX
|
|
||||||
RET C
|
|
||||||
EXX
|
|
||||||
LD DE,#0908
|
|
||||||
CALL CD_WAITPRT.Custom
|
|
||||||
EXX
|
|
||||||
BIT IDE.ControlBit.Error,A
|
|
||||||
JR NZ,.CDERROR
|
|
||||||
JR NC,.YEP_DRQ
|
|
||||||
LD A,#80 ; ERROR TIME OUT ;!HARDCODE
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.YEP_DRQ:
|
|
||||||
LD C,SLOT3
|
|
||||||
IN B,(C)
|
|
||||||
PUSH BC
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD HL,RAM_ATAPI_PK
|
|
||||||
LD BC,IDE.Write.Data
|
|
||||||
LD A,PKTSIZE/2
|
|
||||||
.OUTPKT:
|
|
||||||
OUTI
|
|
||||||
OUTI
|
|
||||||
DEC A
|
|
||||||
JR NZ,.OUTPKT
|
|
||||||
;
|
|
||||||
POP BC
|
|
||||||
OUT (C),B
|
|
||||||
;
|
|
||||||
LD B,#80
|
|
||||||
.pause2: DJNZ .pause2
|
|
||||||
;
|
|
||||||
.AP_LOOP:
|
|
||||||
EXX
|
|
||||||
;LD DE,#8000
|
|
||||||
CALL CD_WAITPRT
|
|
||||||
EXX
|
|
||||||
RET C
|
|
||||||
LD BC,IDE.Read.Status
|
|
||||||
IN A,(C)
|
|
||||||
BIT IDE.ControlBit.Error,A
|
|
||||||
JR Z,.NO_ERR
|
|
||||||
.CDERROR:
|
|
||||||
LD BC,IDE.Read.Error ;ERROR
|
|
||||||
IN A,(C)
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
AND #0F
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
.NO_ERR:
|
|
||||||
;BIT IDE.ControlBit.DataRequest,A
|
|
||||||
AND IDE.ControlByte.DataRequest
|
|
||||||
LD A,BIOS.Error.NoErrors
|
|
||||||
RET Z ;NO DATA REQUEST A = 0: BIOS.Error.NoErrors
|
|
||||||
EX DE,HL
|
|
||||||
LD BC,IDE.Read.CylinderLow
|
|
||||||
IN E,(C)
|
|
||||||
LD BC,IDE.Read.CylinderHigh
|
|
||||||
IN D,(C) ;TRANSFER BLOCK SIZE
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
RET Z ;BLOCK = 0
|
|
||||||
LD BC,IDE.Read.Counter
|
|
||||||
IN A,(C)
|
|
||||||
AND #02
|
|
||||||
JR NZ,.FROM_CD
|
|
||||||
;.TO_CD:
|
|
||||||
LD BC,IDE.Read.Data
|
|
||||||
.WR_T_CD:
|
|
||||||
OUTI
|
|
||||||
OUTI
|
|
||||||
DEC DE
|
|
||||||
DEC DE
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JR NZ,.WR_T_CD
|
|
||||||
EX DE,HL
|
|
||||||
JR .AP_LOOP
|
|
||||||
;
|
|
||||||
.FROM_CD:
|
|
||||||
; ¯à®¢¥àª ¯¥à¥¯®«¥¨¥ ¤à¥á ¡ãä¥à
|
|
||||||
LD A,H
|
|
||||||
OR L
|
|
||||||
JR Z,.NULL
|
|
||||||
LD BC,IDE.Read.Data
|
|
||||||
.RD_F_CD:
|
|
||||||
INI
|
|
||||||
INI
|
|
||||||
DEC DE
|
|
||||||
DEC DE
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JR NZ,.RD_F_CD
|
|
||||||
EX DE,HL
|
|
||||||
JR .AP_LOOP
|
|
||||||
;
|
|
||||||
.NULL: LD BC,IDE.Read.Data
|
|
||||||
.RD_N_CD:
|
|
||||||
IN A,(C)
|
|
||||||
DEC B
|
|
||||||
IN A,(C)
|
|
||||||
DEC B
|
|
||||||
DEC DE
|
|
||||||
DEC DE
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JR NZ,.RD_N_CD
|
|
||||||
; DE = 0
|
|
||||||
JR .AP_LOOP
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
CD_WAITPRT: LD DE,#8000 ; D - MASK, E - PATTERN
|
|
||||||
.Custom: LD BC,IDE.Read.Status
|
|
||||||
LD A,100
|
|
||||||
LD HL,#0000
|
|
||||||
.LOOP_A: EX AF,AF'
|
|
||||||
.LOOP_HL: IN A,(C)
|
|
||||||
CP #FF
|
|
||||||
JR Z,.error
|
|
||||||
AND D
|
|
||||||
CP E
|
|
||||||
;
|
|
||||||
; JR NZ,.NEXT_TRY
|
|
||||||
; AND A
|
|
||||||
; RET
|
|
||||||
RET Z
|
|
||||||
;
|
|
||||||
.NEXT_TRY: DEC L
|
|
||||||
JR NZ,.LOOP_HL
|
|
||||||
DEC H
|
|
||||||
JR NZ,.LOOP_HL
|
|
||||||
EX AF,AF'
|
|
||||||
DEC A
|
|
||||||
JR NZ,.LOOP_A
|
|
||||||
;
|
|
||||||
EX AF,AF'
|
|
||||||
.error: SCF
|
|
||||||
RET
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
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
|
|
||||||
;
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
MACRO WAIT_HDD
|
MACRO WAIT_HDD
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
.loop: IN A,(C)
|
.loop: IN A,(C)
|
||||||
BIT IDE.ControlBit.Busy,A
|
BIT IDE.CtrlBit.Busy,A
|
||||||
JR NZ,.loop
|
JR NZ,.loop
|
||||||
ENDM
|
ENDM
|
||||||
;______________________________________________________________________:
|
;______________________________________________________________________:
|
||||||
@ -279,8 +279,8 @@ FN_HDD_READ:
|
|||||||
LD A,IDE.ATA.ReadSectorsWithRetry
|
LD A,IDE.ATA.ReadSectorsWithRetry
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
.L2: WAIT_HDD
|
.L2: WAIT_HDD
|
||||||
;BIT IDE.ControlBit.DataRequest,A
|
;BIT IDE.CtrlBit.DataRequest,A
|
||||||
AND IDE.ControlByte.DataRequest
|
AND IDE.CtrlByte.DataRequest
|
||||||
JR Z,.RET_PortY
|
JR Z,.RET_PortY
|
||||||
;
|
;
|
||||||
;HD_READ_CONT
|
;HD_READ_CONT
|
||||||
@ -354,7 +354,7 @@ FN_HDD_WRITE:
|
|||||||
HD_WR_L2:
|
HD_WR_L2:
|
||||||
WAIT_HDD
|
WAIT_HDD
|
||||||
|
|
||||||
BIT IDE.ControlBit.DataRequest,A
|
BIT IDE.CtrlBit.DataRequest,A
|
||||||
JR Z,HD_RET
|
JR Z,HD_RET
|
||||||
|
|
||||||
LD BC,IDE.Write.Data
|
LD BC,IDE.Write.Data
|
||||||
@ -390,7 +390,7 @@ FN_HDD_RECAL:
|
|||||||
LD A,IDE.ATA.ExecuteDeviceDiagnostic
|
LD A,IDE.ATA.ExecuteDeviceDiagnostic
|
||||||
CALL HD_CMD_EXE
|
CALL HD_CMD_EXE
|
||||||
;AND A
|
;AND A
|
||||||
CP IDE.ControlByte.Error
|
CP IDE.CtrlByte.Error
|
||||||
RET Z
|
RET Z
|
||||||
LD BC,IDE.Read.Error
|
LD BC,IDE.Read.Error
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
@ -627,7 +627,7 @@ FN_HDD_INIT:
|
|||||||
LD A,IDE.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
|
LD A,IDE.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
WAIT_HDD
|
WAIT_HDD
|
||||||
AND IDE.ControlByte.DataRequest
|
AND IDE.CtrlByte.DataRequest
|
||||||
;JR NZ,.L2
|
;JR NZ,.L2
|
||||||
SCF
|
SCF
|
||||||
RET Z
|
RET Z
|
||||||
@ -705,7 +705,7 @@ HD_WAIT:
|
|||||||
LD DE,0
|
LD DE,0
|
||||||
.loop: LD BC,IDE.Read.Status
|
.loop: LD BC,IDE.Read.Status
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
AND IDE.ControlByte.Busy
|
AND IDE.CtrlByte.Busy
|
||||||
JR Z,.EXIT
|
JR Z,.EXIT
|
||||||
DEC DE
|
DEC DE
|
||||||
LD A,D
|
LD A,D
|
||||||
|
|||||||
@ -33,94 +33,131 @@ DRV_LIST:
|
|||||||
LD (IX+1),#00 ; DB 0 ;FDD COUNT
|
LD (IX+1),#00 ; DB 0 ;FDD COUNT
|
||||||
LD (IX+2),#00 ; DB 0 ;HDD COUNT
|
LD (IX+2),#00 ; DB 0 ;HDD COUNT
|
||||||
LD (IX+3),#00 ; DB 0 ;CDROM COUNT
|
LD (IX+3),#00 ; DB 0 ;CDROM COUNT
|
||||||
; ; BLOCK 28,0 ;RESERVED ;!TODO ᤥ« âì RAMDRIVE âãâ?
|
; ; BLOCK 13,0 ;RESERVED ;!TODO ᤥ« âì RAMDRIVE âãâ?
|
||||||
LD (IX+4),#00 ; END FLAG
|
LD (IX+4),#00 ; END FLAG
|
||||||
|
|
||||||
;Calculating FDD devices
|
;Calculating FDD devices
|
||||||
|
LD A,#FF
|
||||||
LD HL,FDD_INI_TABLE.FDD_0
|
LD HL,FDD_INI_TABLE.FDD_0
|
||||||
INC (IX+1)
|
CALL .CHECK_FDD
|
||||||
LD B,8
|
|
||||||
LD A,#FF
|
|
||||||
.TFD0:
|
|
||||||
CP (HL)
|
|
||||||
INC HL
|
|
||||||
JR NZ,.YYYFD0
|
|
||||||
DJNZ .TFD0
|
|
||||||
DEC (IX+1)
|
|
||||||
.YYYFD0:
|
|
||||||
LD HL,FDD_INI_TABLE.FDD_1
|
LD HL,FDD_INI_TABLE.FDD_1
|
||||||
INC (IX+1)
|
CALL .CHECK_FDD
|
||||||
LD B,8
|
|
||||||
LD A,#FF
|
; INC (IX+1)
|
||||||
.TFD1:
|
; LD B,8
|
||||||
CP (HL)
|
; LD A,#FF
|
||||||
INC HL
|
; .TFD0:
|
||||||
JR NZ,.YYYFD1
|
; CP (HL)
|
||||||
DJNZ .TFD1
|
; INC HL
|
||||||
DEC (IX+1)
|
; JR NZ,.YYYFD0
|
||||||
.YYYFD1:
|
; DJNZ .TFD0
|
||||||
;Calculating IDE devices
|
; DEC (IX+1)
|
||||||
|
; .YYYFD0:
|
||||||
|
; LD HL,FDD_INI_TABLE.FDD_1
|
||||||
|
; INC (IX+1)
|
||||||
|
; LD B,8
|
||||||
|
; LD A,#FF
|
||||||
|
; .TFD1:
|
||||||
|
; CP (HL)
|
||||||
|
; INC HL
|
||||||
|
; JR NZ,.YYYFD1
|
||||||
|
; DJNZ .TFD1
|
||||||
|
; DEC (IX+1)
|
||||||
|
; .YYYFD1:
|
||||||
|
|
||||||
|
; A=#FF
|
||||||
|
;Calculating IDE devices IDE TYPE 1-HDD, 2-CD-ROM
|
||||||
LD IY,IDE.INIT_TBL_IDE0
|
LD IY,IDE.INIT_TBL_IDE0
|
||||||
|
LD DE,IDE.HDD_INIT_TABLE
|
||||||
|
LD B,4 ; !HARDCODE ª®«-¢® IDE ãáâனáâ¢
|
||||||
|
.CHECK_IDE:
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
||||||
CP #FF
|
CP #FF
|
||||||
JR Z,.ABSIDE0
|
JR Z,.NEXT_IDE
|
||||||
CP IDE.Device.HDD
|
CP IDE.Device.HDD
|
||||||
JR NZ,.NOT_HD0
|
JR NZ,.NOT_HDD
|
||||||
INC (IX+2)
|
INC (IX+2)
|
||||||
.NOT_HD0:
|
.NOT_HDD:
|
||||||
CP IDE.Device.CDROM
|
CP IDE.Device.ATAPI
|
||||||
JR NZ,.NOT_CD0
|
JR NZ,.NEXT_IDE
|
||||||
INC (IX+3)
|
|
||||||
.NOT_CD0:
|
|
||||||
.ABSIDE0:
|
|
||||||
LD IY,IDE.INIT_TBL_IDE1
|
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
|
||||||
CP #FF
|
|
||||||
JR Z,.ABSIDE1
|
|
||||||
CP IDE.Device.HDD
|
|
||||||
JR NZ,.NOT_HD1
|
|
||||||
INC (IX+2)
|
|
||||||
.NOT_HD1:
|
|
||||||
CP IDE.Device.CDROM
|
|
||||||
JR NZ,.NOT_CD1
|
|
||||||
INC (IX+3)
|
|
||||||
.NOT_CD1:
|
|
||||||
.ABSIDE1:
|
|
||||||
LD IY,IDE.INIT_TBL_IDE2
|
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
|
||||||
CP #FF
|
|
||||||
JR Z,.ABSIDE2
|
|
||||||
CP IDE.Device.HDD
|
|
||||||
JR NZ,.NOT_HD2
|
|
||||||
INC (IX+2)
|
|
||||||
.NOT_HD2:
|
|
||||||
CP IDE.Device.CDROM
|
|
||||||
JR NZ,.NOT_CD2
|
|
||||||
INC (IX+3)
|
|
||||||
.NOT_CD2:
|
|
||||||
.ABSIDE2:
|
|
||||||
LD IY,IDE.INIT_TBL_IDE3
|
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
|
||||||
CP #FF
|
|
||||||
JR Z,.check_exit
|
|
||||||
CP IDE.Device.HDD
|
|
||||||
JR NZ,.NOT_HD3
|
|
||||||
INC (IX+2)
|
|
||||||
.NOT_HD3:
|
|
||||||
CP IDE.Device.CDROM
|
|
||||||
JR NZ,.check_exit
|
|
||||||
INC (IX+3)
|
INC (IX+3)
|
||||||
|
.NEXT_IDE:
|
||||||
|
ADD IY,DE
|
||||||
|
DJNZ .CHECK_IDE
|
||||||
|
|
||||||
|
; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
||||||
|
; CP #FF
|
||||||
|
; JR Z,.ABSIDE0
|
||||||
|
; CP IDE.Device.HDD
|
||||||
|
; JR NZ,.NOT_HD0
|
||||||
|
; INC (IX+2)
|
||||||
|
; .NOT_HD0:
|
||||||
|
; CP IDE.Device.ATAPI
|
||||||
|
; JR NZ,.NOT_CD0
|
||||||
|
; INC (IX+3)
|
||||||
|
; .NOT_CD0:
|
||||||
|
; .ABSIDE0:
|
||||||
|
; LD IY,IDE.INIT_TBL_IDE1
|
||||||
|
; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
||||||
|
; CP #FF
|
||||||
|
; JR Z,.ABSIDE1
|
||||||
|
; CP IDE.Device.HDD
|
||||||
|
; JR NZ,.NOT_HD1
|
||||||
|
; INC (IX+2)
|
||||||
|
; .NOT_HD1:
|
||||||
|
; CP IDE.Device.ATAPI
|
||||||
|
; JR NZ,.NOT_CD1
|
||||||
|
; INC (IX+3)
|
||||||
|
; .NOT_CD1:
|
||||||
|
; .ABSIDE1:
|
||||||
|
; LD IY,IDE.INIT_TBL_IDE2
|
||||||
|
; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
||||||
|
; CP #FF
|
||||||
|
; JR Z,.ABSIDE2
|
||||||
|
; CP IDE.Device.HDD
|
||||||
|
; JR NZ,.NOT_HD2
|
||||||
|
; INC (IX+2)
|
||||||
|
; .NOT_HD2:
|
||||||
|
; CP IDE.Device.ATAPI
|
||||||
|
; JR NZ,.NOT_CD2
|
||||||
|
; INC (IX+3)
|
||||||
|
; .NOT_CD2:
|
||||||
|
; .ABSIDE2:
|
||||||
|
; LD IY,IDE.INIT_TBL_IDE3
|
||||||
|
; LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM
|
||||||
|
; CP #FF
|
||||||
|
; JR Z,.check_exit
|
||||||
|
; CP IDE.Device.HDD
|
||||||
|
; JR NZ,.NOT_HD3
|
||||||
|
; INC (IX+2)
|
||||||
|
; .NOT_HD3:
|
||||||
|
; CP IDE.Device.ATAPI
|
||||||
|
; JR NZ,.check_exit
|
||||||
|
; INC (IX+3)
|
||||||
|
|
||||||
.check_exit:
|
.check_exit:
|
||||||
POP IY
|
POP IY
|
||||||
POP AF
|
POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
XOR A
|
XOR A
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
; A=#FF
|
||||||
|
.CHECK_FDD:
|
||||||
|
INC (IX+1)
|
||||||
|
LD B,8
|
||||||
|
.TFD0: CP (HL)
|
||||||
|
INC HL
|
||||||
|
RET NZ
|
||||||
|
DJNZ .TFD0
|
||||||
|
DEC (IX+1)
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
INCLUDE 'EXTENDED/FDD_DRIVER_2.asm'
|
INCLUDE 'EXTENDED/FDD_DRIVER_2.asm'
|
||||||
INCLUDE 'EXTENDED/RAM_DISK_DRIVER_1.asm'
|
INCLUDE 'EXTENDED/RAM_DISK_DRIVER_1.asm'
|
||||||
INCLUDE 'EXTENDED/IDE/HDD_DRV.asm'
|
INCLUDE 'EXTENDED/IDE/ATA_DRV.asm'
|
||||||
INCLUDE 'EXTENDED/IDE/CD_DRV.asm'
|
INCLUDE 'EXTENDED/IDE/ATAPI_DRV.asm'
|
||||||
INCLUDE 'EXTENDED/IDE/SHARED.asm'
|
INCLUDE 'EXTENDED/IDE/SHARED.asm'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -290,7 +290,7 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
|||||||
; enter point for ATAPI in setup
|
; enter point for ATAPI in setup
|
||||||
.Its_ATAPI: CALL DETECTORS.IdentPDevChk
|
.Its_ATAPI: CALL DETECTORS.IdentPDevChk
|
||||||
JR C,.IDE_ABSENT
|
JR C,.IDE_ABSENT
|
||||||
LD A,IDE.Device.CDROM
|
LD A,IDE.Device.ATAPI
|
||||||
LD (IDEDEV),A
|
LD (IDEDEV),A
|
||||||
JR .get
|
JR .get
|
||||||
|
|
||||||
@ -331,8 +331,8 @@ SETUP_FROM_CMOS:
|
|||||||
JR Z,.step1
|
JR Z,.step1
|
||||||
;
|
;
|
||||||
LD IX,SEC_SLAVE_CMOS_T
|
LD IX,SEC_SLAVE_CMOS_T
|
||||||
.step1: LD HL,TEMP
|
.step1: LD HL,IDENTIFY_DEVICE_BUFFER
|
||||||
LD DE,TEMP+1
|
LD DE,IDENTIFY_DEVICE_BUFFER+1
|
||||||
LD BC,511
|
LD BC,511
|
||||||
LD (HL),0
|
LD (HL),0
|
||||||
LDIR
|
LDIR
|
||||||
@ -346,7 +346,7 @@ SETUP_FROM_CMOS:
|
|||||||
;
|
;
|
||||||
.step2: LD A,(IX+2) ;M_HEAD
|
.step2: LD A,(IX+2) ;M_HEAD
|
||||||
CALL READCMS
|
CALL READCMS
|
||||||
LD (TEMP+3*2),A ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. HEADS PER TRACK
|
LD (IDENTIFY_DEVICE_BUFFER.NumHeads),A
|
||||||
;
|
;
|
||||||
LD A,(IX+1) ;M_CYLH
|
LD A,(IX+1) ;M_CYLH
|
||||||
CALL READCMS
|
CALL READCMS
|
||||||
@ -356,42 +356,40 @@ SETUP_FROM_CMOS:
|
|||||||
CALL READCMS
|
CALL READCMS
|
||||||
POP HL
|
POP HL
|
||||||
LD L,A
|
LD L,A
|
||||||
LD (TEMP+1*2),HL ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. CYLINDERS
|
LD (IDENTIFY_DEVICE_BUFFER.NumCylinders),HL
|
||||||
;
|
;
|
||||||
LD A,(IX+3) ;M_SECT
|
LD A,(IX+3) ;M_SECT
|
||||||
CALL READCMS
|
CALL READCMS
|
||||||
LD (TEMP+6*2),A ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. SECTOR PER TRACK
|
LD (IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A
|
||||||
;
|
;
|
||||||
LD A,IDE.Device.HDD
|
LD A,IDE.Device.HDD
|
||||||
LD (IDEDEV),A
|
LD (IDEDEV),A
|
||||||
CALL IDESPEC
|
; CALL IDESPEC
|
||||||
RET
|
; RET
|
||||||
/////////////////////////////////////////////////////////////////////[^]
|
/////////////////////////////////////////////////////////////////////[^]
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////[v]
|
/////////////////////////////////////////////////////////////////////[v]
|
||||||
IDESPEC:
|
IDESPEC: IN A,(SLOT3)
|
||||||
IN A,(SLOT3)
|
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(IDEDEV)
|
LD A,(IDEDEV)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DriveType),A
|
LD (IY+IDE.HDD_INIT_TABLE.DriveType),A
|
||||||
CP IDE.Device.CDROM
|
CP IDE.Device.ATAPI
|
||||||
JP Z,.FOR_CDR
|
JP Z,.FOR_ATAPI
|
||||||
;
|
;
|
||||||
LD BC,IDE.Read.Control
|
LD BC,IDE.Read.Control
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
AND #F0
|
AND #F0
|
||||||
LD B,A
|
LD B,A
|
||||||
LD A,(TEMP+#06) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. HEADS PER TRACK
|
LD A,(IDENTIFY_DEVICE_BUFFER.NumHeads)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),A
|
LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),A
|
||||||
DEC A
|
DEC A
|
||||||
AND #0F
|
AND #0F
|
||||||
OR B
|
OR B
|
||||||
LD B,A
|
LD B,A
|
||||||
LD A,(TEMP+#63) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. LBA/NON-LBA bit 1 (FROM ZERO!)
|
LD A,(IDENTIFY_DEVICE_BUFFER.Capabilities_high)
|
||||||
BIT 1,A
|
;BIT 1,A
|
||||||
|
AND %0000'0010
|
||||||
JR Z,.NONLBA
|
JR Z,.NONLBA
|
||||||
;
|
;
|
||||||
SET 6,B
|
SET 6,B
|
||||||
@ -402,10 +400,10 @@ IDESPEC:
|
|||||||
LD HL,ICHANEL
|
LD HL,ICHANEL
|
||||||
OR (HL)
|
OR (HL)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
||||||
LD HL,(TEMP+#02) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. CYLINDERS
|
LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L
|
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H
|
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H
|
||||||
LD A,(TEMP+#0C) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. SECTOR PER TRACK
|
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
|
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
|
||||||
IF IDE_Optimization
|
IF IDE_Optimization
|
||||||
LD B,high IDE.Write.Counter
|
LD B,high IDE.Write.Counter
|
||||||
@ -420,11 +418,11 @@ IDESPEC:
|
|||||||
LD H,B
|
LD H,B
|
||||||
LD L,B
|
LD L,B
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) ; Head per HDD
|
LD A,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) ; Head per HDD
|
||||||
|
;
|
||||||
.loop: ADD HL,BC
|
.loop: ADD HL,BC
|
||||||
DEC A
|
DEC A
|
||||||
JR NZ,.loop
|
JR NZ,.loop
|
||||||
|
;
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow),L
|
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow),L
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H
|
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H
|
||||||
.END: ; [x] save hdd parameters to cmos for "setup" in settings
|
.END: ; [x] save hdd parameters to cmos for "setup" in settings
|
||||||
@ -435,7 +433,7 @@ IDESPEC:
|
|||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.FOR_CDR: LD BC,IDE.Read.Control
|
.FOR_ATAPI: LD BC,IDE.Read.Control
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
AND #F0
|
AND #F0
|
||||||
LD HL,ICHANEL
|
LD HL,ICHANEL
|
||||||
@ -449,20 +447,20 @@ IDESPEC:
|
|||||||
IDE_CMD:
|
IDE_CMD:
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD HL,PAUSES.WAIT.IDE
|
LD HL,PAUSES.WAIT.IDE
|
||||||
LD DE,256*IDE.ControlByte.Busy + 0
|
LD DE,256*IDE.CtrlByte.Busy + 0
|
||||||
CALL BITS_WAITS.WAIT_PRT
|
CALL BITS_WAITS.WAIT_PRT
|
||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
INC B ; LD BC,IDE.Write.Command
|
INC B ; LD BC,IDE.Write.Command
|
||||||
OUT (C),H
|
OUT (C),H
|
||||||
LD HL,PAUSES.WAIT.IDE
|
LD HL,PAUSES.WAIT.IDE
|
||||||
;LD DE,256*IDE.ControlByte.Busy + 0
|
;LD DE,256*IDE.CtrlByte.Busy + 0
|
||||||
JR BITS_WAITS.WAIT_PRT
|
JR BITS_WAITS.WAIT_PRT
|
||||||
/////////////////////////////////////////////////////////////////////[^]
|
/////////////////////////////////////////////////////////////////////[^]
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////[v]
|
/////////////////////////////////////////////////////////////////////[v]
|
||||||
MODEL: LD HL,TEMP+27*2 ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã.
|
MODEL: LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber
|
||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
OR A
|
OR A
|
||||||
JR Z,.unknown
|
JR Z,.unknown
|
||||||
@ -512,7 +510,7 @@ BITS_WAITS:
|
|||||||
;SCF
|
;SCF
|
||||||
;RET Z
|
;RET Z
|
||||||
;
|
;
|
||||||
AND IDE.ControlByte.Busy; + IDE.ControlByte.DataRequest
|
AND IDE.CtrlByte.Busy; + IDE.CtrlByte.DataRequest
|
||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
HALT
|
HALT
|
||||||
@ -611,7 +609,7 @@ SaveToCMOS:
|
|||||||
;
|
;
|
||||||
LD IX,PRIM_SLAVE_CMOS_T
|
LD IX,PRIM_SLAVE_CMOS_T
|
||||||
.save_to_cmos:
|
.save_to_cmos:
|
||||||
LD HL,(TEMP+1*2)
|
LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders)
|
||||||
LD B,L
|
LD B,L
|
||||||
LD A,(IX+0)
|
LD A,(IX+0)
|
||||||
CALL WRITCMS ; Cylinder low
|
CALL WRITCMS ; Cylinder low
|
||||||
@ -620,12 +618,12 @@ SaveToCMOS:
|
|||||||
LD A,(IX+1)
|
LD A,(IX+1)
|
||||||
CALL WRITCMS ; Cylinder high
|
CALL WRITCMS ; Cylinder high
|
||||||
|
|
||||||
LD A,(TEMP+3*2)
|
LD A,(IDENTIFY_DEVICE_BUFFER.NumHeads)
|
||||||
LD B,A
|
LD B,A
|
||||||
LD A,(IX+2)
|
LD A,(IX+2)
|
||||||
CALL WRITCMS ; Heads
|
CALL WRITCMS ; Heads
|
||||||
|
|
||||||
LD A,(TEMP+6*2)
|
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
|
||||||
LD B,A
|
LD B,A
|
||||||
LD A,(IX+3)
|
LD A,(IX+3)
|
||||||
JP WRITCMS ; Heads
|
JP WRITCMS ; Heads
|
||||||
@ -667,11 +665,11 @@ Bug31SecCheck: LD A,(MasterSlave)
|
|||||||
/////////////////////////////////////////////////////////////////////[v]
|
/////////////////////////////////////////////////////////////////////[v]
|
||||||
GETPARAM:
|
GETPARAM:
|
||||||
LD HL,PAUSES.WAIT.IDE
|
LD HL,PAUSES.WAIT.IDE
|
||||||
LD DE,IDE.ControlByte.DataRequest * 256 + IDE.ControlByte.DataRequest
|
LD DE,IDE.CtrlByte.DataRequest * 256 + IDE.CtrlByte.DataRequest
|
||||||
CALL BITS_WAITS.WAIT_PRT
|
CALL BITS_WAITS.WAIT_PRT
|
||||||
RET C
|
RET C
|
||||||
LD BC,IDE.Read.Data
|
LD BC,IDE.Read.Data
|
||||||
LD HL,TEMP
|
LD HL,IDENTIFY_DEVICE_BUFFER
|
||||||
INIR
|
INIR
|
||||||
INIR
|
INIR
|
||||||
CALL IDESPEC
|
CALL IDESPEC
|
||||||
@ -693,11 +691,11 @@ DETECTORS:
|
|||||||
LD BC,IDE.Write.Counter
|
LD BC,IDE.Write.Counter
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
LD HL,PAUSES.WAIT.SMALL
|
LD HL,PAUSES.WAIT.SMALL
|
||||||
LD DE,IDE.ControlByte.Busy*256 + 0
|
LD DE,IDE.CtrlByte.Busy*256 + 0
|
||||||
CALL BITS_WAITS.WAIT_PRT
|
CALL BITS_WAITS.WAIT_PRT
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
LD BC,IDE.Read.Counter ; LD BC,IDE.Read.Counter
|
LD BC,IDE.Read.Counter
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
CP .test_counter
|
CP .test_counter
|
||||||
RET Z
|
RET Z
|
||||||
@ -722,8 +720,8 @@ DETECTORS:
|
|||||||
SCF
|
SCF
|
||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
AND IDE.ControlByte.Busy + IDE.ControlByte.DataRequest + IDE.ControlByte.Error
|
AND IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error
|
||||||
CP IDE.ControlByte.Error
|
CP IDE.CtrlByte.Error
|
||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
HALT
|
HALT
|
||||||
@ -748,7 +746,7 @@ DETECTORS:
|
|||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
OUT (C),E
|
OUT (C),E
|
||||||
;
|
;
|
||||||
LD DE,IDE.ControlByte.Busy * 256 + 0
|
LD DE,IDE.CtrlByte.Busy * 256 + 0
|
||||||
LD HL,PAUSES.WAIT.IDE
|
LD HL,PAUSES.WAIT.IDE
|
||||||
CALL BITS_WAITS.WAIT_PRT
|
CALL BITS_WAITS.WAIT_PRT
|
||||||
RET C ; Absent
|
RET C ; Absent
|
||||||
@ -758,7 +756,7 @@ DETECTORS:
|
|||||||
RRCA
|
RRCA
|
||||||
JR C,.non_ATA
|
JR C,.non_ATA
|
||||||
;
|
;
|
||||||
AND (IDE.ControlByte.DataRequest + IDE.ControlByte.Ready) / 2
|
AND (IDE.CtrlByte.DataRequest + IDE.CtrlByte.Ready) / 2
|
||||||
SCF
|
SCF
|
||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
@ -778,19 +776,19 @@ DETECTORS:
|
|||||||
; ATAPI or Absent
|
; ATAPI or Absent
|
||||||
; Exit: CF - No device
|
; Exit: CF - No device
|
||||||
; NC - ATAPI
|
; NC - ATAPI
|
||||||
.IdentPDevChk: LD E,IDE.ATAPI.IdentifyPackedDevice
|
.IdentPDevChk: LD E,IDE.ATAPI.IdentifyPacketDevice
|
||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
OUT (C),E
|
OUT (C),E
|
||||||
LD HL,PAUSES.WAIT.IDE
|
LD HL,PAUSES.WAIT.IDE
|
||||||
LD DE,IDE.ControlByte.Busy*256 + 0
|
LD DE,IDE.CtrlByte.Busy*256 + 0
|
||||||
CALL BITS_WAITS.WAIT_PRT
|
CALL BITS_WAITS.WAIT_PRT
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
RRCA
|
RRCA
|
||||||
RET C
|
; RET C
|
||||||
XOR A
|
; XOR A
|
||||||
RET
|
RET
|
||||||
;-------;
|
;-------;
|
||||||
|
|
||||||
|
|||||||
@ -75,6 +75,7 @@
|
|||||||
|
|
||||||
;!FIXIT ®à¬ «ì® ¯à®¯¨á âì
|
;!FIXIT ®à¬ «ì® ¯à®¯¨á âì
|
||||||
TEMP EQU #7E00 ; !HARDCODE
|
TEMP EQU #7E00 ; !HARDCODE
|
||||||
|
IDENTIFY_DEVICE_BUFFER _ATA_IDENTIFY_DEVICE_DATA = TEMP
|
||||||
MEMMAP2 EQU TEMP ; ¤®«¦® ¡ëâì ¢ë஢¥® ¯® ALIGN 256
|
MEMMAP2 EQU TEMP ; ¤®«¦® ¡ëâì ¢ë஢¥® ¯® ALIGN 256
|
||||||
TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023
|
TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023
|
||||||
ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!"
|
ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!"
|
||||||
@ -1122,7 +1123,7 @@ HDSTART:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
CP IDE.Device.CDROM
|
CP IDE.Device.ATAPI
|
||||||
JP Z,CDSTART
|
JP Z,CDSTART
|
||||||
PUSH AF
|
PUSH AF
|
||||||
PUSH BC
|
PUSH BC
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
"TrDosC", -- 6
|
"TrDosC", -- 6
|
||||||
"TrDosD", -- 7
|
"TrDosD", -- 7
|
||||||
"SetTime", -- 8 DEFINES.INC --> NEW_FEATURE
|
"SetTime", -- 8 DEFINES.INC --> NEW_FEATURE
|
||||||
"HddWrPr", -- 9 DEFINES.INC --> HDDwriteProtect
|
--"HddWrPr", -- 9 DEFINES.INC --> HDDwriteProtect
|
||||||
-- 10
|
-- 10
|
||||||
-- 11
|
-- 11
|
||||||
-- 12
|
-- 12
|
||||||
@ -70,7 +70,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DeleteValueByDEFINE(SettingsTabsOrder,"NEW_FEATURE","SetTime")
|
DeleteValueByDEFINE(SettingsTabsOrder,"NEW_FEATURE","SetTime")
|
||||||
DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr")
|
--DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr")
|
||||||
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","MemTest")
|
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","MemTest")
|
||||||
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","UpdBios")
|
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","UpdBios")
|
||||||
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypRate")
|
DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypRate")
|
||||||
@ -340,16 +340,16 @@ SettingsItemsTabs:
|
|||||||
DB msgStrings.valCdRom
|
DB msgStrings.valCdRom
|
||||||
DB msgStrings.valDash6
|
DB msgStrings.valDash6
|
||||||
|
|
||||||
IF HDDwriteProtect
|
; IF HDDwriteProtect
|
||||||
_mSETitemParams HddWrPr
|
; _mSETitemParams HddWrPr
|
||||||
DW OnChangeAction.nothing
|
; DW OnChangeAction.nothing
|
||||||
IF NEW_FEATURE : DB paramLine : ENDIF
|
; IF NEW_FEATURE : DB paramLine : ENDIF
|
||||||
DB columnNum,lineNum
|
; DB columnNum,lineNum
|
||||||
DB paramName
|
; DB paramName
|
||||||
DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001
|
; DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001
|
||||||
DB msgStrings.valDisabled
|
; DB msgStrings.valDisabled
|
||||||
DB msgStrings.valEnabled
|
; DB msgStrings.valEnabled
|
||||||
ENDIF
|
; ENDIF
|
||||||
|
|
||||||
_mSETitemParams ScreenY
|
_mSETitemParams ScreenY
|
||||||
DW OnChangeAction.setXYpos
|
DW OnChangeAction.setXYpos
|
||||||
@ -652,9 +652,9 @@ msgStrings:
|
|||||||
_mSetStr parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : '
|
_mSetStr parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : '
|
||||||
_mSetStr parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : '
|
_mSetStr parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : '
|
||||||
_mSetStr parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : '
|
_mSetStr parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : '
|
||||||
IF HDDwriteProtect
|
; IF HDDwriteProtect
|
||||||
_mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : '
|
; _mSetStr parHddWrPr, tmp_Counter : DZ 'HDD write protect : '
|
||||||
ENDIF
|
; ENDIF
|
||||||
_mSetStr parScreenY, tmp_Counter : DZ 'Y-screen position : '
|
_mSetStr parScreenY, tmp_Counter : DZ 'Y-screen position : '
|
||||||
_mSetStr valMinus7, tmp_Counter : DZ '-7'
|
_mSetStr valMinus7, tmp_Counter : DZ '-7'
|
||||||
_mSetStr valMinus6, tmp_Counter : DZ '-6'
|
_mSetStr valMinus6, tmp_Counter : DZ '-6'
|
||||||
@ -828,9 +828,9 @@ msgRusStrings:
|
|||||||
_mSetStrRus parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : '
|
_mSetStrRus parPriIdeSl, tmp_Counter : DZ 'Primary IDE Slave',#FF,' : '
|
||||||
_mSetStrRus parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : '
|
_mSetStrRus parSecIdeMA, tmp_Counter : DZ 'Secondary IDE Master',#FF,' : '
|
||||||
_mSetStrRus parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : '
|
_mSetStrRus parSecIdeSl, tmp_Counter : DZ 'Secondary IDE Slave',#FF,' : '
|
||||||
IF HDDwriteProtect
|
; IF HDDwriteProtect
|
||||||
_mSetStrRus parHddWrPr, tmp_Counter : DZ '‡ é¨â § ¯¨á¨ HDD : '
|
; _mSetStrRus parHddWrPr, tmp_Counter : DZ '‡ é¨â § ¯¨á¨ HDD : '
|
||||||
ENDIF
|
; ENDIF
|
||||||
_mSetStrRus parScreenY, tmp_Counter : DZ '‘¤¢¨£ íªà ¯® Y : '
|
_mSetStrRus parScreenY, tmp_Counter : DZ '‘¤¢¨£ íªà ¯® Y : '
|
||||||
_mSetStrRus valMinus7, tmp_Counter : DZ '-7'
|
_mSetStrRus valMinus7, tmp_Counter : DZ '-7'
|
||||||
_mSetStrRus valMinus6, tmp_Counter : DZ '-6'
|
_mSetStrRus valMinus6, tmp_Counter : DZ '-6'
|
||||||
|
|||||||
@ -19,7 +19,8 @@ BETA_RC EQU 1 ;
|
|||||||
;----------------------------[ TEST ]---------------------------;
|
;----------------------------[ TEST ]---------------------------;
|
||||||
DEFINE TEST_INT 1 ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ ⥫ì᪮£® INT
|
DEFINE TEST_INT 1 ; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ ⥫ì᪮£® INT
|
||||||
DEFINE NEW_FEATURE 0 ; !TODO ¯ãªâë ¢ á¥â ¯
|
DEFINE NEW_FEATURE 0 ; !TODO ¯ãªâë ¢ á¥â ¯
|
||||||
DEFINE HDDwriteProtect 0 ; áâ à ï ä¨èª ¤«ï äãªæ¨© 5x
|
;DEFINE HDDwriteProtect 0 ; áâ à ï ä¨èª ¤«ï äãªæ¨© 5x
|
||||||
DEFINE FDD_NormalCount 0 ; !TODO
|
DEFINE FDD_NormalCount 0 ; !TODO
|
||||||
DEFINE UnusedSettingsFeatures 0 ;
|
DEFINE UnusedSettingsFeatures 0 ;
|
||||||
|
;DEFINE OPTIMIZE_RW_PROCEDURE 0 ;
|
||||||
;===============================================================;
|
;===============================================================;
|
||||||
@ -2,6 +2,7 @@
|
|||||||
;---------[All shared includes]---------
|
;---------[All shared includes]---------
|
||||||
INCLUDE 'src/bios/shared/DEFINES.INC' ; Shared defines
|
INCLUDE 'src/bios/shared/DEFINES.INC' ; Shared defines
|
||||||
INCLUDE 'Shared_Includes/structures/FileSystem.inc'
|
INCLUDE 'Shared_Includes/structures/FileSystem.inc'
|
||||||
|
INCLUDE 'Shared_Includes/structures/ATA_ATAPI.inc'
|
||||||
INCLUDE 'src/bios/Loader/Loader.asm' ; Bitstream loader as macros
|
INCLUDE 'src/bios/Loader/Loader.asm' ; Bitstream loader as macros
|
||||||
INCLUDE 'src/bios/shared/CompMacro.asm' ; ¬ ªà®áë
|
INCLUDE 'src/bios/shared/CompMacro.asm' ; ¬ ªà®áë
|
||||||
INCLUDE 'Shared_Includes/constants/SP2000.inc' ; ª®áâ âë
|
INCLUDE 'Shared_Includes/constants/SP2000.inc' ; ª®áâ âë
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user