not working
This commit is contained in:
parent
2927028434
commit
394025462d
@ -7,10 +7,16 @@
|
||||
; 02-08-2001 DNS Initial this module
|
||||
;---------------------------------------------------------------
|
||||
;========================================================
|
||||
MAX_ATAPI_SEC_SIZE EQU 4096
|
||||
|
||||
;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO ;!TODO
|
||||
;
|
||||
; [ ] ãáâ ®¢ª ¯ à ¬¥âà ¬ ªá¨¬ «ì®£® à §¬¥à ¤«ï ç⥨ï ç¥à¥§ DRV_SET_PAR
|
||||
;
|
||||
;----------------------------------------------------------------------------------
|
||||
MAX_ATAPI_SEC_SIZE EQU 4096/2
|
||||
PKTSIZE EQU 12
|
||||
RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
|
||||
RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16
|
||||
RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16
|
||||
|
||||
ASSERT ((PKTSIZE % 4) = 0), "PKTSIZE must be an even number"
|
||||
|
||||
@ -64,11 +70,11 @@ CD_5x_LONG_READ:
|
||||
PUSH IX
|
||||
PUSH HL
|
||||
;
|
||||
EX AF,AF'
|
||||
AND A ;read
|
||||
EX AF,AF'
|
||||
CALL RW_ATAPI_SECTORs
|
||||
;
|
||||
|
||||
;
|
||||
RET
|
||||
JP HDD_5x_LONG_READ.shared
|
||||
|
||||
RW_ATAPI_SECTORs:
|
||||
LD C,IDE.Device.ATAPI
|
||||
@ -82,7 +88,11 @@ RW_ATAPI_SECTORs:
|
||||
LD A,SYS_PAGE
|
||||
OUT (C),A
|
||||
LD HL,ATAPI_CMD_PACKET.READ
|
||||
LD DE,RAM_ATAPI_READ
|
||||
EX AF,AF'
|
||||
JR NC,.read_cmd
|
||||
LD HL,ATAPI_CMD_PACKET.WRITE
|
||||
.read_cmd: EX AF,AF'
|
||||
LD DE,RAM_ATAPI_RW_CMD
|
||||
LD BC,PKTSIZE
|
||||
LDIR
|
||||
EXX
|
||||
@ -90,25 +100,26 @@ RW_ATAPI_SECTORs:
|
||||
LD A,H
|
||||
LD H,L
|
||||
LD L,A
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL
|
||||
LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+0),HL
|
||||
LD A,XH
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01
|
||||
LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+2),A ;R01
|
||||
LD A,XL
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01
|
||||
LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.SECTOR+3),A ;R01
|
||||
LD A,B
|
||||
LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01
|
||||
LD (RAM_ATAPI_RW_CMD + ATAPI_PACKET.COUNTER+1),A ;R01
|
||||
;
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
; POP AF
|
||||
; OUT (SLOT3),A
|
||||
LD HL,RAM_ATAPI_READ
|
||||
LD HL,RAM_ATAPI_RW_CMD
|
||||
CALL EXEC_PACKET_COMMAND
|
||||
;
|
||||
POP BC
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
RET
|
||||
;[]===========================================================[#52, #55]
|
||||
|
||||
|
||||
@ -157,7 +168,9 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; INPUT: HL - AP paket (12bytes)
|
||||
; INPUT: HL - AP packet (12bytes)
|
||||
; DE - address for/with data if needed
|
||||
;
|
||||
; RETURN: CF - ERROR
|
||||
; !TODO CD ERRORS to INCLUDES
|
||||
; #01 - RECOVERED ERROR
|
||||
@ -216,10 +229,10 @@ EXEC_PACKET_COMMAND:
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,IDE.ATAPI.Packet
|
||||
OUT (C),A
|
||||
CALL CD_WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
EXX
|
||||
;CALL CD_WAITPRT
|
||||
;EXX
|
||||
;RET C
|
||||
;EXX
|
||||
LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
||||
CALL CD_WAITPRT.Custom
|
||||
EXX
|
||||
@ -229,6 +242,16 @@ EXEC_PACKET_COMMAND:
|
||||
LD A,#80 ; ERROR TIME OUT ;!HARDCODE
|
||||
RET
|
||||
;
|
||||
.CDERROR: LD BC,IDE.Read.Error ;ERROR
|
||||
IN A,(C)
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND #0F
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.YEP_DRQ: LD C,SLOT3
|
||||
IN B,(C)
|
||||
PUSH BC
|
||||
@ -250,29 +273,33 @@ EXEC_PACKET_COMMAND:
|
||||
LD B,#80
|
||||
.pause2: DJNZ .pause2
|
||||
;
|
||||
.AP_LOOP: EXX
|
||||
EX AF,AF'
|
||||
LD XH,A ; áâà ¨æ ¤«ï R/W_LONG
|
||||
LD XL,0
|
||||
EX AF,AF'
|
||||
;
|
||||
EX DE,HL
|
||||
.AP_LOOP: EX DE,HL
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF' ;>-----------> \
|
||||
;
|
||||
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
|
||||
JR NZ,.CDERROR
|
||||
;
|
||||
.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
|
||||
;
|
||||
LD A,XH
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
;====== IF DATA REQUEST =======================================;
|
||||
;
|
||||
EX DE,HL
|
||||
LD BC,IDE.Read.CylinderLow
|
||||
IN E,(C)
|
||||
@ -284,27 +311,23 @@ EXEC_PACKET_COMMAND:
|
||||
;
|
||||
LD BC,IDE.Read.Counter
|
||||
IN A,(C)
|
||||
AND #02
|
||||
;WRITE ;!FIXIT
|
||||
AND %0000'0010 ;SENSE DATA AVAILABLE bit
|
||||
LD BC,IDE.Read.Data
|
||||
JR NZ,.FROM_CD
|
||||
JR Z,.WRITE_DATA
|
||||
;
|
||||
.WR_T_CD: OUTI
|
||||
OUTI
|
||||
;READ
|
||||
.read_loop: INI
|
||||
INI
|
||||
DEC DE
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,.WR_T_CD
|
||||
EX DE,HL
|
||||
JR .AP_LOOP
|
||||
JR NZ,.read_loop
|
||||
;
|
||||
;READ
|
||||
.FROM_CD: ;LD BC,IDE.Read.Data
|
||||
; 能恥丞<E681A5> <20> 砲鄍祚垠平言 𨸹鄍<F0A8B8B9> ~銗<EFBD9E>
|
||||
.return_rw: INC XL ;INC LOADED SECTORS
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,.read_loop
|
||||
JR NZ,.AP_LOOP
|
||||
; next page in mem block
|
||||
LD HL,#C000
|
||||
IN A,(SLOT3)
|
||||
@ -317,18 +340,18 @@ EXEC_PACKET_COMMAND:
|
||||
LD XH,A
|
||||
EX AF,AF' ;<-----------< /
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
.read_loop: INI
|
||||
INI
|
||||
JR .AP_LOOP
|
||||
; ;
|
||||
;WRITE
|
||||
.WRITE_DATA: INC B ; LD BC,IDE.Write.Data
|
||||
.write_loop: OUTI
|
||||
OUTI
|
||||
DEC DE
|
||||
DEC DE
|
||||
LD A,D
|
||||
OR E
|
||||
JR NZ,.read_loop
|
||||
;
|
||||
EX DE,HL
|
||||
JR .AP_LOOP
|
||||
;
|
||||
JR NZ,.write_loop
|
||||
JR .return_rw
|
||||
|
||||
;.NULL: LD BC,IDE.Read.Data
|
||||
;.RD_N_CD: IN A,(C)
|
||||
@ -366,7 +389,7 @@ CD_WAITPRT: LD DE,256*(IDE.CtrlByte.DataRequest) + 0
|
||||
JR NZ,.LOOP
|
||||
DJNZ .LOOP
|
||||
;
|
||||
EX AF,AF'
|
||||
;EX AF,AF'
|
||||
.error: ; !FIXIT error number
|
||||
SCF
|
||||
RET
|
||||
|
||||
779
src/bios/exp/EXTENDED/IDE/ATA_DRV 2.ASM
Normal file
779
src/bios/exp/EXTENDED/IDE/ATA_DRV 2.ASM
Normal file
@ -0,0 +1,779 @@
|
||||
|
||||
;========================================================
|
||||
;R03 !25.07.2001! BUG FIX WITH RETURN ERROR CODE
|
||||
;R02 !24.07.2001! ADD SECONDARY CHANEL
|
||||
;R01 !16.08.2000! REMOVED "DI"
|
||||
|
||||
/*
|
||||
;Write
|
||||
IDE.Write.Command EQU #4153 ; #1F7 Command
|
||||
IDE.Write.DeviceHead EQU #4152 ; #1F6 Drive Control
|
||||
|
||||
HDW_CLH EQU #0155 ; #1F5 Cylinder High
|
||||
HDW_CLL EQU #0154 ; #1F4 Cylinder Low
|
||||
HDW_SEC EQU #0153 ; #1F3 Sector
|
||||
HDW_CNT EQU #0152 ; #1F2 Counter
|
||||
HDW_ERR EQU #0151 ; #1F1 Error
|
||||
HDW_DAT EQU #0150 ; #1F0 Data
|
||||
|
||||
;Read
|
||||
IDE.Read.Status EQU #4053 ; #1F7 Status (Control)
|
||||
HDR_DRV EQU #4052 ; #1F6 Drive Control
|
||||
|
||||
HDR_CLH EQU #0055 ; #1F5 Cylinder High
|
||||
HDR_CLL EQU #0054 ; #1F4 Cylinder Low
|
||||
HDR_SEC EQU #0053 ; #1F3 Sector
|
||||
HDR_CNT EQU #0052 ; #1F2 Counter
|
||||
HDR_ERR EQU #0051 ; #1F1 Error
|
||||
HDR_DAT EQU #0050 ; #1F0 Data
|
||||
|
||||
;Bits for IDE.Read.Status
|
||||
;---[]
|
||||
BSY EQU 7
|
||||
RDY EQU 6
|
||||
DRQ EQU 3
|
||||
ERR EQU 0
|
||||
;---[]
|
||||
|
||||
HDD EQU 1
|
||||
CDROM EQU 2
|
||||
|
||||
|
||||
;EQU FOR IY+
|
||||
IDE.HDD_INIT_TABLE.DRV_Flags EQU 0
|
||||
IDE.HDD_INIT_TABLE.SectorsPerTrack EQU 1
|
||||
IDE.HDD_INIT_TABLE.HeadsNumber EQU 2
|
||||
IDE.HDD_INIT_TABLE.CylinderNumberLow EQU 3
|
||||
IDE.HDD_INIT_TABLE.CylinderNumberHigh EQU 4
|
||||
IDE.HDD_INIT_TABLE.SectorsPerCylinderLow EQU 5
|
||||
IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh EQU 6
|
||||
DTYPE_H EQU 7
|
||||
|
||||
IDE0 EQU #C1C0
|
||||
IDE1 EQU #C1C8
|
||||
IDE2 EQU #C1D0
|
||||
IDE3 EQU #C1D8
|
||||
*/
|
||||
|
||||
;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00
|
||||
; DB #FF ;SECTORS PER TRACK ;01
|
||||
; DB #FF ;HEADS ;02
|
||||
; DB #FF ;CYLINDERS LOW ;03
|
||||
; DB #FF ;CYLINDERS HIGH ;04
|
||||
; DB #FF ;SECTOR PER CYLINDER LOW ;05
|
||||
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
|
||||
; DB #FF ;RESERVED ;07
|
||||
|
||||
;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00
|
||||
; DB #FF ;SECTORS PER TRACK ;01
|
||||
; DB #FF ;HEADS ;02
|
||||
; DB #FF ;CYLINDERS LOW ;03
|
||||
; DB #FF ;CYLINDERS HIGH ;04
|
||||
; DB #FF ;SECTOR PER CYLINDER LOW ;05
|
||||
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
|
||||
; DB #FF ;RESERVED ;07
|
||||
|
||||
|
||||
WRITE_OUTI_DUPs EQU 32 ; bytes
|
||||
|
||||
;[]================================================================[#51]
|
||||
;Function: Reset drive
|
||||
HDD_5x_RESET: ; !FIXIT ¥ à¥á¥â¨âáï?
|
||||
;For non-ATAPI drives, the only method a driver has of resetting a drive
|
||||
; after a major error is to do a "software reset" on the bus.
|
||||
; Set bit 2 (SRST, value = 4) in the proper Control Register for the
|
||||
; bus. This will reset both ATA devices on the bus. Then, you have to
|
||||
; clear that bit again, yourself. The master drive on the bus is
|
||||
; automatically selected.
|
||||
XOR A
|
||||
RET
|
||||
;[]================================================================[#51]
|
||||
|
||||
|
||||
;[]================================================================[#58]
|
||||
;Function: Get Current Media Parameters
|
||||
; A - Disk
|
||||
;Return:
|
||||
; H - Heads
|
||||
; L - Sectors per cylinder
|
||||
; DE - Cylinders
|
||||
; IX - Capacity sector in bytes
|
||||
; B - Flags: MASTER/SLAVE, LBA/CHS
|
||||
HDD_5x_GETMED:
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
||||
LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
||||
LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
||||
LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
||||
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||
LD IX,512 ;!HARDCODE sector size
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;EX AF,AF'
|
||||
AND A
|
||||
RET
|
||||
;[]================================================================[#58]
|
||||
|
||||
;[]================================================================[#59]
|
||||
;Function: Set Current Media Parameters
|
||||
; A - Disk
|
||||
; H - Heads
|
||||
; L - Sectors
|
||||
; DE - Cylinders
|
||||
; IX - Capacity sector in bytes
|
||||
; B - Flags
|
||||
;Return: None
|
||||
HDD_5x_SETMED:
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L
|
||||
LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H
|
||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E
|
||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D
|
||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;EX AF,AF'
|
||||
AND A
|
||||
RET
|
||||
;[]================================================================[#59]
|
||||
|
||||
;[]================================================================[#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)
|
||||
HDD_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, 0 = 256
|
||||
; A'- Memory Page Number
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
; A' - Last mem page in RAM Block used for readed data
|
||||
;LONG READ SECTOR(S)
|
||||
HDD_5x_LONG_READ:
|
||||
PUSH IY
|
||||
SAFE_PORTY_2
|
||||
PUSH BC
|
||||
PUSH IX
|
||||
PUSH HL
|
||||
;IF OPTIMIZE_RW_PROCEDURE
|
||||
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 IX
|
||||
POP BC
|
||||
XOR A
|
||||
CP B
|
||||
LD C,B
|
||||
LD B,A
|
||||
JR Z,.B_256_sectors
|
||||
;
|
||||
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
|
||||
LD B,C
|
||||
JR .pre_exit
|
||||
;
|
||||
.error: LD B,A ; A - ®¬¥à ®è¨¡ª¨
|
||||
LD C,XL
|
||||
LD A,XH ; current page in mem block for SLOT3
|
||||
EX AF,AF'
|
||||
POP HL
|
||||
POP IX
|
||||
PUSH BC
|
||||
LD B,0
|
||||
ADD IX,BC
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
POP BC
|
||||
POP AF
|
||||
SUB C
|
||||
LD C,A
|
||||
LD A,B
|
||||
LD B,C
|
||||
SCF ;R03
|
||||
JR .exit
|
||||
;
|
||||
/*
|
||||
IFN OPTIMIZE_RW_PROCEDURE
|
||||
READ_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.ReadSectorsWithRetry
|
||||
OUT (C),A
|
||||
;SAVE HL!
|
||||
EXX
|
||||
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
||||
CALL WAITPRT.custom
|
||||
EXX
|
||||
RET C
|
||||
;DI ;R01 REMOVED "DI"
|
||||
.big_loop: IN A,(SLOT3)
|
||||
EX AF,AF' ;>-----------> \
|
||||
LD A,XH
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
; 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' ;<-----------< /
|
||||
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
|
||||
;LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||
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
|
||||
;
|
||||
ENDIF
|
||||
*/
|
||||
;[]===========================================================[#52, #55]
|
||||
|
||||
|
||||
;[]================================================================[#56]
|
||||
;Function: Write Sectors
|
||||
; A - Disk
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
;Return:
|
||||
; HL:IX - Sector + Sector counter
|
||||
; DE - Address + (Sector counter * Size sector)
|
||||
;WRITE SECTOR(S)
|
||||
HDD_5x_WRITE:
|
||||
EX AF,AF'
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
;[]================================================================[#53]
|
||||
;Function: Long Write 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)
|
||||
;WRITE SECTOR(S)
|
||||
HDD_5x_LONG_WRITE:
|
||||
PUSH IY
|
||||
|
||||
SAFE_PORTY_2
|
||||
|
||||
PUSH IX
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
;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
|
||||
JP C,HERRWR0
|
||||
LD A,XH
|
||||
EX AF,AF'
|
||||
POP BC
|
||||
POP HL
|
||||
POP IX
|
||||
XOR A
|
||||
CP B
|
||||
LD C,B
|
||||
LD B,A
|
||||
JR NZ,WNOT256
|
||||
INC B
|
||||
ADD IX,BC
|
||||
LD B,C
|
||||
ADC HL,BC
|
||||
;EX AF,AF'
|
||||
JR RST8WRR
|
||||
|
||||
WNOT256 ADD IX,BC
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
;EX AF,AF'
|
||||
JR RST8WRR
|
||||
|
||||
HERRWR0 LD B,A
|
||||
LD C,XL
|
||||
LD A,XH
|
||||
EX AF,AF'
|
||||
POP HL
|
||||
POP IX
|
||||
PUSH BC
|
||||
LD B,0
|
||||
ADD IX,BC
|
||||
LD C,B
|
||||
ADC HL,BC
|
||||
POP BC
|
||||
POP AF
|
||||
SUB C
|
||||
LD C,A
|
||||
LD A,B
|
||||
LD B,C
|
||||
;R03
|
||||
SCF ;R03
|
||||
;EX AF,AF' ;R03 ;!FIXIT ¬ã¤à¨« ® çñâ ¢ í⮬ R03
|
||||
;
|
||||
RST8WRR: RESTORE_PORTY
|
||||
POP IY
|
||||
;EX AF,AF'
|
||||
RET
|
||||
|
||||
|
||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||||
/*
|
||||
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
|
||||
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
|
||||
PUSH DE
|
||||
CALL PRESET
|
||||
POP HL
|
||||
POP AF
|
||||
LD XL,0
|
||||
LD XH,A
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,IDE.ATA.WriteSectorsWithRetry
|
||||
OUT (C),A
|
||||
; SAVE HL?!
|
||||
EXX
|
||||
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
||||
CALL WAITPRT.custom
|
||||
EXX
|
||||
RET C
|
||||
;
|
||||
.big_loop: IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,XH
|
||||
OUT (SLOT3),A
|
||||
; 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
|
||||
; ; ; ; ;
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;EI
|
||||
;
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,.W33
|
||||
; 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
|
||||
;
|
||||
.W33: INC XL ;INC SAVED SECTORS
|
||||
EXX
|
||||
;LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||
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
|
||||
;
|
||||
ENDIF
|
||||
*/
|
||||
;[]===========================================================[#53, #56]
|
||||
|
||||
|
||||
;[]================================================================[#54]
|
||||
;Function: Verify Sectors
|
||||
; A - Disk
|
||||
; HL:IX - Sector
|
||||
; B - Sector counter
|
||||
;Return: None
|
||||
;VERIFY SECTOR(S)
|
||||
HDD_5x_VERIFY:
|
||||
PUSH IY
|
||||
SAFE_PORTY_2
|
||||
PUSH IX
|
||||
PUSH HL
|
||||
CALL VRS000
|
||||
POP HL
|
||||
POP IX
|
||||
RESTORE_PORTY
|
||||
POP IY
|
||||
RET
|
||||
;[]================================================================[#54]
|
||||
;VERIFY SECTOR(S)
|
||||
VRS000: LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
EXX
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
PUSH DE
|
||||
CALL PRESET
|
||||
POP HL
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,IDE.ATA.ReadVerifySectorsWithRetry
|
||||
OUT (C),A
|
||||
VRS002: LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
BIT IDE.CtrlBit.Error,A
|
||||
JR Z,VRS003
|
||||
SCF
|
||||
RET
|
||||
VRS003: CALL WAITPRT
|
||||
RET C
|
||||
XOR A
|
||||
RET
|
||||
LD BC,IDE.Read.Counter
|
||||
; HL:IX - LBA SECTOR
|
||||
; B - SECTOR COUNTER
|
||||
PRESET: LD A,B
|
||||
LD BC,IDE.Write.Counter
|
||||
OUT (C),A
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
;¡¨â CHS/LBA ;!FIXIT ᤥ« âì ¬¥âª ¬¨ ®¬¥à ¡¨â
|
||||
AND %0100'0000
|
||||
LD E,XL
|
||||
LD D,XH
|
||||
CALL Z,LBA_CHS
|
||||
LD BC,IDE.Write.Sector
|
||||
OUT (C),E ;LBA 0..7
|
||||
IF IDE_Optimization
|
||||
INC C ; LD BC,IDE.Write.CylinderLow
|
||||
OUT (C),D ;LBA 8..15
|
||||
INC C ; LD BC,IDE.Write.CylinderHigh
|
||||
OUT (C),L ;LBA 16..23
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
|
||||
OR H ;LBA 24..27
|
||||
INC B ; LD BC,IDE.Write.DeviceHead
|
||||
ELSE
|
||||
LD BC,IDE.Write.CylinderLow
|
||||
OUT (C),D ;LBA 8..15
|
||||
LD BC,IDE.Write.CylinderHigh
|
||||
OUT (C),L ;LBA 16..23
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
|
||||
OR H ;LBA 24..27
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
ENDIF
|
||||
OUT (C),A
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
AND A
|
||||
RET
|
||||
|
||||
; HL:DE - SECTOR OFFSET
|
||||
LBA_CHS:
|
||||
LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow)
|
||||
LD B,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh)
|
||||
; HL:DE / BC => DE:IX HL-OSTATOK
|
||||
DIV32X: LD XH,D
|
||||
LD XL,E
|
||||
EX DE,HL
|
||||
LD HL,0
|
||||
LD A,#20
|
||||
DIV011: ADD IX,IX
|
||||
EX DE,HL
|
||||
ADC HL,HL
|
||||
EX DE,HL
|
||||
ADC HL,HL
|
||||
SBC HL,BC
|
||||
JR NC,DIV012
|
||||
ADD HL,BC
|
||||
DEC A
|
||||
JR NZ,DIV011
|
||||
JR DIV014
|
||||
DIV012: INC IX
|
||||
DEC A
|
||||
JR NZ,DIV011
|
||||
DIV014: LD E,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
||||
LD D,0
|
||||
XOR A
|
||||
CHS005: INC A
|
||||
SBC HL,DE
|
||||
JR NC,CHS005
|
||||
ADD HL,DE
|
||||
DEC A
|
||||
LD H,A
|
||||
LD E,L
|
||||
INC E
|
||||
LD D,XL
|
||||
LD A,XH
|
||||
LD L,A
|
||||
RET
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; D - MASK
|
||||
; E - PATTERN
|
||||
WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE.CtrlByte.Ready
|
||||
.custom: LD BC,IDE.Read.Status
|
||||
LD HL,#0000 ; § ¤¥à¦ª ;!HARDCODE
|
||||
;
|
||||
.loop: PUSH HL
|
||||
;
|
||||
.loop2: IN A,(C)
|
||||
AND D
|
||||
CP E
|
||||
JR Z,.ok
|
||||
DEC HL
|
||||
LD A,L
|
||||
OR H
|
||||
JP NZ,.loop2
|
||||
;
|
||||
POP HL
|
||||
DEC L
|
||||
JR NZ,.loop
|
||||
;
|
||||
.error: LD A,BIOS.Error.NotReady
|
||||
SCF
|
||||
RET
|
||||
.ok: POP HL
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;[]================================================================[#57]
|
||||
;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
||||
;Function: Detect Disk
|
||||
; A - Disk
|
||||
;Return: CF=0 - A=Drive type
|
||||
; CF=1 - drive not present, A=#02
|
||||
HDD_5x_DETECT:
|
||||
LD C,IDE.Device.HDD
|
||||
JP DRV_DETECT
|
||||
;[]================================================================[#57]
|
||||
@ -181,16 +181,13 @@ HDD_5x_LONG_READ:
|
||||
PUSH BC
|
||||
PUSH IX
|
||||
PUSH HL
|
||||
;IF OPTIMIZE_RW_PROCEDURE
|
||||
;
|
||||
EX AF,AF'
|
||||
AND A ;read
|
||||
EX AF,AF'
|
||||
CALL RW_ATA_SECTORs
|
||||
;ELSE
|
||||
;CALL READ_ATA_SECTORs
|
||||
;ENDIF
|
||||
;
|
||||
EX DE,HL
|
||||
.shared: EX DE,HL
|
||||
JR C,.error
|
||||
LD A,XH ; current page in mem block for SLOT3
|
||||
EX AF,AF'
|
||||
@ -417,15 +414,12 @@ RST8WRR: RESTORE_PORTY
|
||||
|
||||
|
||||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
|
||||
/*
|
||||
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
|
||||
; A - Disk
|
||||
; HL:IX - Sector
|
||||
; DE - Address
|
||||
; B - Sector counter
|
||||
; A'- Memory Page Number
|
||||
; CF'=1 - write, CF'=0 - read
|
||||
RW_ATA_SECTORs: LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
@ -460,10 +454,10 @@ RW_ATA_SECTORs: LD C,IDE.Device.HDD
|
||||
EX AF,AF' ;>-----------> \
|
||||
LD A,XH
|
||||
OUT (SLOT3),A
|
||||
LD BC,IDE.Read.Data
|
||||
JR C,.write_sector
|
||||
;
|
||||
; READ SECTOR 512 bytes ;!HARDCODE sector size
|
||||
LD BC,IDE.Read.Data
|
||||
.loop_256_1: DUP 16
|
||||
INI
|
||||
EDUP
|
||||
@ -482,6 +476,7 @@ RW_ATA_SECTORs: LD C,IDE.Device.HDD
|
||||
OR L
|
||||
JR NZ,.W44
|
||||
; next page in mem block
|
||||
; ᤥ« âì ¥á«¨ ¥ RW_LONG, ⮠宫®áâë¥ ç⥨¥/§ ¯¨áì ¨ ¢ë室 á ®è¨¡ª®©
|
||||
LD HL,#C000
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF' ;>-----------> \
|
||||
@ -511,7 +506,7 @@ RW_ATA_SECTORs: LD C,IDE.Device.HDD
|
||||
;
|
||||
;
|
||||
.write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size
|
||||
LD BC,IDE.Write.Data
|
||||
INC B ; LD BC,IDE.Write.Data
|
||||
LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size
|
||||
.loop: DUP WRITE_OUTI_DUPs
|
||||
OUTI
|
||||
@ -650,7 +645,8 @@ VRS003: CALL WAITPRT
|
||||
RET C
|
||||
XOR A
|
||||
RET
|
||||
LD BC,IDE.Read.Counter
|
||||
|
||||
|
||||
; HL:IX - LBA SECTOR
|
||||
; B - SECTOR COUNTER
|
||||
PRESET: LD A,B
|
||||
@ -670,7 +666,7 @@ PRESET: LD A,B
|
||||
CALL Z,LBA_CHS
|
||||
LD BC,IDE.Write.Sector
|
||||
OUT (C),E ;LBA 0..7
|
||||
IF IDE_Optimization
|
||||
;
|
||||
INC C ; LD BC,IDE.Write.CylinderLow
|
||||
OUT (C),D ;LBA 8..15
|
||||
INC C ; LD BC,IDE.Write.CylinderHigh
|
||||
@ -680,17 +676,7 @@ PRESET: LD A,B
|
||||
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
|
||||
OR H ;LBA 24..27
|
||||
INC B ; LD BC,IDE.Write.DeviceHead
|
||||
ELSE
|
||||
LD BC,IDE.Write.CylinderLow
|
||||
OUT (C),D ;LBA 8..15
|
||||
LD BC,IDE.Write.CylinderHigh
|
||||
OUT (C),L ;LBA 16..23
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
|
||||
OR H ;LBA 24..27
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
ENDIF
|
||||
;
|
||||
OUT (C),A
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
|
||||
;=======================================================================
|
||||
; ‚室: A - ®¬¥à ãáâனáâ¢
|
||||
; C - 暢ッ
|
||||
SELECT_DRIVE:
|
||||
AND #0F
|
||||
LD IY,IDE.INIT_TBL_IDE0
|
||||
|
||||
1144
src/bios/exp/FUNC_SCREEN 2.ASM
Normal file
1144
src/bios/exp/FUNC_SCREEN 2.ASM
Normal file
File diff suppressed because it is too large
Load Diff
13
src/bios/exp/ZX_MEM 2.TXT
Normal file
13
src/bios/exp/ZX_MEM 2.TXT
Normal file
@ -0,0 +1,13 @@
|
||||
Žâ¤¥«ìë¥ à ¬¡«®ª¨ ¤«ï:
|
||||
vROM
|
||||
vRAM
|
||||
Žâ¤¥«ìë¥ ¯à®æ¥¤ãàë ¢ë¤¥«¥¨ï áâà ¨æ ¤«ï:
|
||||
#1FFD - ®¡à ¡ âë¢ âì ¯¥à¢ë¬ ¥á«¨ 㦥. <20>¥ ¯®¤å®¤ïâ #A0, #D0..#DF
|
||||
#7FFD - 128/512, ¥ ¢ë¤¥«ïâì ¯ ¬ïâì ¤«ï #1FFD ¢ ०¨¬¥ pent 512
|
||||
vROM
|
||||
‘âà ¨æã 0 ¨á¯®«ì§®¢ âì ª ª à ìè¥ ¤«ï ¬ ¯¯ ¢ #7FFD ¨ ¤«ï #1FFD=1
|
||||
<EFBFBD>®¤ªàãâ¨âì ¢ ¬¥î ᯥªâà㬠¯¥à¥ª«îç «ªã ०¨¬®¢ ¨ ®á¢®¡®¦¤¥¨¥ ¯ ¬ï⨠¯®¤ ®¢ãî ¬®¤¥«ì ¯ ¬ïâ¨
|
||||
<EFBFBD>ਠ®á¢®¡®¦¤¥¨¨ ¯ ¬ï⨠vROM ¬ ¯¨âì í⨠¯®àâë ®¡à â® Spec_Page
|
||||
<EFBFBD>஢¥à¨âì å प®¤ ¡¨®á ¨ zxroms, ç⮡ ¥ ¢âëª «¨áì áâ ¤ àâë¥ (§ १¥à¢¨à®¢ ë¥) áâà ¨æë
|
||||
;
|
||||
‘¤¥« âì ¯¥à¥ª«îç «ªã ¢ ¡¨®á¥ áâ àë©/®¢ë© ०¨¬ à ¡®âë ¯ ¬ïâ¨?
|
||||
Loading…
Reference in New Issue
Block a user