This commit is contained in:
Anatoliy Belyanskiy 2023-08-21 01:29:49 +10:00
parent 7fc7fe3490
commit 1f3a3f2192
6 changed files with 84 additions and 92 deletions

@ -1 +1 @@
Subproject commit dd98f391c99f3ff16920ca176349cff874ad9b23 Subproject commit 2facbb273ecfd873a5bb622c8c405cc9880a39e5

View File

@ -292,7 +292,7 @@ RDS000: CALL SELECTH
LD XL,0 LD XL,0
LD XH,A LD XH,A
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,ATA_READ_SECTORS ; WITH RETRY LD A,IDE.ATA.ReadSectorsWithRetry
OUT (C),A OUT (C),A
;????? ;?????
;SAVE HL! ;SAVE HL!
@ -473,7 +473,7 @@ NO_WriteProtect:
LD XL,0 LD XL,0
LD XH,A LD XH,A
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,ATA_WRITE_SECTORS ; WITH RETRY LD A,IDE.ATA.WriteSectorsWithRetry
OUT (C),A OUT (C),A
;SAVE HL! ;SAVE HL!
WRS002: EXX WRS002: EXX
@ -570,7 +570,7 @@ VRS000: CALL SELECTH
CALL PRESET CALL PRESET
POP HL POP HL
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,ATA_READ_VERIFY_SECTORS ; WITH RETRY LD A,IDE.ATA.ReadVerifySectorsWithRetry
OUT (C),A OUT (C),A
VRS002: LD BC,IDE.Read.Status VRS002: LD BC,IDE.Read.Status
IN A,(C) IN A,(C)

View File

@ -169,7 +169,7 @@ FN_HDD_PREPARE: ;
.SetCommand: .SetCommand:
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,ATA_READ_SECTORS LD A,IDE.ATA.ReadSectorsWithRetry
; OUT (C),A ; OUT (C),A
AND A AND A
RET RET
@ -220,7 +220,7 @@ HD_RD_L1:
SAFE_PORTY SAFE_PORTY
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,ATA_READ_SECTORS LD A,IDE.ATA.ReadSectorsWithRetry
OUT (C),A OUT (C),A
HD_RD_L2: HD_RD_L2:
@ -293,7 +293,7 @@ FN_HDD_WRITE:
EX AF,AF' EX AF,AF'
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,ATA_WRITE_SECTORS LD A,IDE.ATA.WriteSectorsWithRetry
OUT (C),A OUT (C),A
HD_WR_L2: HD_WR_L2:
@ -331,7 +331,7 @@ FN_HDD_RECAL:
LD A,#A0 LD A,#A0
LD BC,IDE.Write.DriveCtrl LD BC,IDE.Write.DriveCtrl
OUT (C),A OUT (C),A
LD A,ATA_EXECUTE_DEVICE_DIAGNOSTIC LD A,IDE.ATA.ExecuteDeviceDiagnostic
CALL HD_CMD_EXE CALL HD_CMD_EXE
AND A AND A
BIT IDE.ControlBit.Error,A BIT IDE.ControlBit.Error,A
@ -451,7 +451,7 @@ HD_C0_L3:
WAIT_HDD WAIT_HDD
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,ATA_IDENTIFY_DEVICE LD A,IDE.ATA.IdentifyDevice
OUT (C),A OUT (C),A
WAIT_HDD WAIT_HDD
@ -519,7 +519,7 @@ HD_C0_NO_LBA:
LD A,D LD A,D
OUT (SLOT3),A OUT (SLOT3),A
LD A,ATA_INITIALIZE_DEVICE_PARAMETERS ; SET HDD PARAMETERS LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS
CALL HD_CMD_EXE CALL HD_CMD_EXE
RET RET

View File

@ -105,17 +105,17 @@ CDAUTO:
SELECT_IDE: SELECT_IDE:
AND A ;%0000'0011 AND A ;%0000'0011
LD D,IDE.ATA.Master LD D,IDE.Drive.Master
JR Z,.AUTO_0 JR Z,.AUTO_0
DEC A DEC A
LD D,#B0 LD D,#B0
JR Z,.AUTO_0 JR Z,.AUTO_0
DEC A DEC A
;R00 ;R00
LD D,IDE.ATA.Master LD D,IDE.Drive.Master
JR Z,.AUTO_1 JR Z,.AUTO_1
DEC A DEC A
LD D,IDE.ATA.Slave LD D,IDE.Drive.Slave
.AUTO_1: LD A,IDE.Chanel.Secondary ;SELECT SECONDARY .AUTO_1: LD A,IDE.Chanel.Secondary ;SELECT SECONDARY
OUT (IDE.Chanel.Set),A OUT (IDE.Chanel.Set),A
;LD A,1 ;LD A,1
@ -134,7 +134,6 @@ SELECT_IDE:
IDEAUTO: IDEAUTO:
CALL SELECT_IDE CALL SELECT_IDE
;MASTER
LD A,IDE.Device.NONE LD A,IDE.Device.NONE
LD (IDEDEV),A LD (IDEDEV),A
CDMASTR: CDMASTR:
@ -192,7 +191,7 @@ NO_BUSY:
JR NZ,.check_next JR NZ,.check_next
;JP NZ,DETECT_ATA_ATAPI ;JP NZ,DETECT_ATA_ATAPI
; ;
/*
DETECT_ATA_ATAPI: ;R02 DETECT_ATA_ATAPI: ;R02
; 1. Set the Sectorcount, LBAlo, LBAmid, and LBAhi IO ports to 0 (port 0x1F2 to 0x1F5). ; 1. Set the Sectorcount, LBAlo, LBAmid, and LBAhi IO ports to 0 (port 0x1F2 to 0x1F5).
LD BC,IDE.Write.Counter LD BC,IDE.Write.Counter
@ -206,13 +205,13 @@ DETECT_ATA_ATAPI: ;R02
; ;
; 2. Send the IDENTIFY command (0xEC) to the Command IO port (0x1F7). ; 2. Send the IDENTIFY command (0xEC) to the Command IO port (0x1F7).
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD E,ATA_IDENTIFY_DEVICE LD E,IDE.ATA.IdentifyDevice
OUT (C),E OUT (C),E
; ;
; 3. Read the Status port (0x1F7) again. ; 3. Read the Status port (0x1F7) again.
; 3.1 If the value read is 0, the drive does not exist.
LD B,0 LD B,0
.pause: DJNZ .pause .pause: DJNZ .pause
; 3.1 If the value read is 0, the drive does not exist.
LD BC,IDE.Read.Status LD BC,IDE.Read.Status
IN A,(C) IN A,(C)
JP Z,ABSENT JP Z,ABSENT
@ -228,13 +227,12 @@ DETECT_ATA_ATAPI: ;R02
INC C ;IDE.Read.CylinderHigh INC C ;IDE.Read.CylinderHigh
IN B,(C) IN B,(C)
OR B OR B
JP NZ,Non_ATA ; IT IS ATAPI
JP NZ,NOHDD ; IT IS ATAPI
; 3.5 Otherwise, continue polling one of the Status ports until bit 3 (DRQ, value = 8) sets, or until bit 0 (ERR, value = 1) sets. ; 3.5 Otherwise, continue polling one of the Status ports until bit 3 (DRQ, value = 8) sets, or until bit 0 (ERR, value = 1) sets.
LD HL,WAIT_SML LD HL,WAIT_SML
LD DE,#0101 ;!FIXIT LD DE,#0908
CALL WAIT_PRT CALL WAIT_PRT
JP NC,ABSENT JP C,ABSENT
; ;
; 4. At that point, if ERR is clear, the data is ready to read from the Data port (0x1F0). Read 256 16-bit values, and store them. ; 4. At that point, if ERR is clear, the data is ready to read from the Data port (0x1F0). Read 256 16-bit values, and store them.
LD A,IDE.Device.HDD LD A,IDE.Device.HDD
@ -242,15 +240,16 @@ DETECT_ATA_ATAPI: ;R02
JP GETPARM JP GETPARM
; ;
;;;;;;;;;;;;;;;;;;;;;;; R02 ;;;;;;;;;;;;;;;;;;;;;;; R02
*/
NO_BUSY.check_next: NO_BUSY.check_next:
CP IDE.Device.CDROM CP IDE.Device.CDROM
JP Z,NOHDD JP Z,Non_ATA
;!TODO ¯à¨¡à âìáï âãâ. <20>®á«¥ R02 âãâ ¬®¦­® ã¡à âì ¬­®£® «¨è­¥£® ;!TODO ¯à¨¡à âìáï âãâ. <20>®á«¥ R02 âãâ ¬®¦­® ã¡à âì ¬­®£® «¨è­¥£®
;-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=; ;-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=;
LD E,ATA_NOP LD E,IDE.ATA.Nop
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
OUT (C),E OUT (C),E
DEC B ; LD BC, IDE.Read.Status DEC B ; LD BC, IDE.Read.Status
@ -273,7 +272,7 @@ WXREADY:
LD A,IDE.Device.HDD LD A,IDE.Device.HDD
LD (IDEDEV),A LD (IDEDEV),A
LD E,ATA_IDENTIFY_DEVICE LD E,IDE.ATA.IdentifyDevice
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
OUT (C),E OUT (C),E
@ -283,7 +282,7 @@ WXREADY:
LD HL,WAIT_SML LD HL,WAIT_SML
LD DE,#0101 LD DE,#0101
CALL WAIT_PRT CALL WAIT_PRT
JP NC,NOHDD JP NC,Non_ATA
;-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=; ;-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=-=-=-=-=-==-=-=;
GETPARM: GETPARM:
LD HL,WAIT_IDE LD HL,WAIT_IDE
@ -299,7 +298,7 @@ GETPARM:
AND A AND A
RET RET
NOHDD: LD A,IDE.Device.CDROM Non_ATA: LD A,IDE.Device.CDROM
LD (IDEDEV),A LD (IDEDEV),A
LD E,#A1 ;!HARDCODE IDENTIFY ATAPI LD E,#A1 ;!HARDCODE IDENTIFY ATAPI
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
@ -313,8 +312,7 @@ NOHDD: LD A,IDE.Device.CDROM
LD DE,#0101 LD DE,#0101
CALL WAIT_PRT CALL WAIT_PRT
JP C,GETPARM JP C,GETPARM
ABSENT: ABSENT: SCF
SCF
RET RET
IDESPEC: IDESPEC:
@ -358,7 +356,7 @@ NONLBA: LD A,B
LD BC,IDE.Write.Counter LD BC,IDE.Write.Counter
ENDIF ENDIF
OUT (C),A OUT (C),A
LD A,ATA_INITIALIZE_DEVICE_PARAMETERS LD A,IDE.ATA.InitializeDeviceParameters
CALL IDE_CMD CALL IDE_CMD
; RET C ; RET C
LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) ; Sector per track LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) ; Sector per track
@ -417,26 +415,27 @@ WTREADY:
JR NZ,WTREADY JR NZ,WTREADY
SCF SCF
RET RET
; IN:
; D - MASK ; HL - Waiting delay
; E - PATTERN ; DE - MASK : PATTERN
; BC - PORT ; OUT:
; NC: (PORT & D)-E = 0
; CF: waiting delay exceeded
WAIT_PRT: WAIT_PRT:
LD BC,IDE.Read.Status LD BC,IDE.Read.Status
;
.loop: IN A,(C) .loop: IN A,(C)
AND D AND D
CP E CP E
;JR NZ,.P2
;AND A
;RET
RET Z RET Z
.P2: DEC HL DEC HL
CALL SKIPKEY CALL SKIPKEY
RET C RET C
LD A,L LD A,L
OR H OR H
JP NZ,.loop JP NZ,.loop
.error: SCF ;
SCF
RET RET
SKIPKEY: SKIPKEY:

View File

@ -633,7 +633,8 @@ CHEKOK: ;CALL ScreenPOS.GET_CUR
CALL CMOS_TEST CALL CMOS_TEST
LD A,msgStrings.cmosNone LD A,msgStrings.cmosNone
JR C,NOCMOS JR C,CMOS_ABSENT
; CMOS OK
CALL CMOSINIT CALL CMOSINIT
LD A,msgStrings.cmosFound LD A,msgStrings.cmosFound
CALL POSTMSG CALL POSTMSG
@ -644,11 +645,10 @@ CHEKOK: ;CALL ScreenPOS.GET_CUR
LD HL,RebootDate LD HL,RebootDate
CALL PRNTIME CALL PRNTIME
CALL ScreenPOS.CRLF CALL ScreenPOS.CRLF
JR NOCMOS2 JR INFO_MESSAGE
CMOS_ABSENT:
NOCMOS:
CALL POSTMSG CALL POSTMSG
NOCMOS2: ;!FIXIT ­ §¢ ­¨¥ ­¥¯à ¢¨«ì­®¥ INFO_MESSAGE: ;!FIXIT ­ §¢ ­¨¥ ­¥¯à ¢¨«ì­®¥
LD DE,#0528 LD DE,#0528
;CALL ScreenPOS.LOCAT ;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE CALL LP_SET_PLACE
@ -723,10 +723,7 @@ TSETUP:
JR NZ,TSETUP JR NZ,TSETUP
POP HL POP HL
JP EXIT_SETUP JP EXIT_SETUP
CSETUP: CSETUP: XOR A
; POP HL
;------------test ; !!!!! ¯®á¬®âà¥âì
XOR A
LD (ITEM_Restore),A LD (ITEM_Restore),A
CALL SETTINGS CALL SETTINGS
XOR A XOR A
@ -1103,7 +1100,7 @@ AUTODET:
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
LD HL,IDE.INIT_TBL_IDE0 LD HL,IDE.INIT_TBL_IDE0
LD BC,#20FF ;R02 ;!HARDCODE table LD BC,256*(IDE.HDD_INIT_TABLE * 4) + #FF ;R02
FILLIDE: FILLIDE:
LD (HL),C ;CLEAR HDD VARIABLE LD (HL),C ;CLEAR HDD VARIABLE
INC HL INC HL
@ -1111,7 +1108,7 @@ FILLIDE:
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
;==== ;!!!!! áâ à ï ­ã¬¥à æ¨ï ¤¨áª®¢ !!!!!==== ;======== áâ à ï ­ã¬¥à æ¨ï ¤¨áª®¢! ========
; CALL GET_AVAILABLE_STRUCT ; CALL GET_AVAILABLE_STRUCT
; LD A,#00 ; LD A,#00
; CALL COMMONIDE ; CALL COMMONIDE
@ -1148,7 +1145,7 @@ FILLIDE:
CALL ScreenPOS.CRLF CALL ScreenPOS.CRLF
RET RET
; ;
;==== ;!!!!! áâ à ï ­ã¬¥à æ¨ï ¤¨áª®¢ !!!!!==== ;======== áâ à ï ­ã¬¥à æ¨ï ¤¨áª®¢! ========
;GET_AVAILABLE_STRUCT ;GET_AVAILABLE_STRUCT
;LD C,SLOT3 ;LD C,SLOT3
;IN B,(C) ;IN B,(C)
@ -1157,7 +1154,6 @@ FILLIDE:
;CALL FIND_AVAILABLE_STRUCT ;CALL FIND_AVAILABLE_STRUCT
;OUT (C),B ;OUT (C),B
;RET ;RET
;FIND_AVAILABLE_STRUCT ;FIND_AVAILABLE_STRUCT
;LD IY,IDE0 ;LD IY,IDE0
;LD A,(IY+DTYPE_H) ;LD A,(IY+DTYPE_H)
@ -1176,7 +1172,7 @@ FILLIDE:
;INC A ;INC A
;RET ;RET
;========================================== ;==========================================
;
; !HARDCODE § ¬¥­¨âì ç¨á«  ­  ¬¥âª¨ ¢ í⮩ ¯à®æ¥¤ãॠ; !HARDCODE § ¬¥­¨âì ç¨á«  ­  ¬¥âª¨ ¢ í⮩ ¯à®æ¥¤ãà¥
COMMONIDE: COMMONIDE:
@ -1204,9 +1200,8 @@ COMMONIDE:
;0 - AUTODETECT ;0 - AUTODETECT
;1 - GETTING FROM SETUP ;1 - GETTING FROM SETUP
;2 - CD-ROM ;2 - CD-ROM (ATAPI device)
;3 - DISABLED ;3 - DISABLED
COMMON2: COMMON2:
CALL G_VALUE CALL G_VALUE
OR A OR A
@ -1764,20 +1759,19 @@ POSTMSC:
LD A,E LD A,E
JP CPRINTZ JP CPRINTZ
;
SETLAND: SETLAND:
LD A,#0E ; !HARDCODE CMOS ï祩ª  options LD A,#0E ; !HARDCODE CMOS ï祩ª  options
CALL READCMS CALL READCMS
AND #04 ; !HARDCODE CMOS §­ ç¥­¨¥ ï§ëª  AND #04 ; !HARDCODE CMOS §­ ç¥­¨¥ ï§ëª 
JR NZ,.RUS JR NZ,.RUS
;
LD HL,MSG_ENG LD HL,MSG_ENG
LD DE,memBUFFER.Messages LD DE,memBUFFER.Messages
LD BC,MSG_ENG.size LD BC,MSG_ENG.size
LDIR LDIR
RET RET
.RUS: ;
LD HL,MSG_RUS .RUS: LD HL,MSG_RUS
LD DE,memBUFFER.Messages LD DE,memBUFFER.Messages
LD BC,MSG_RUS.size LD BC,MSG_RUS.size
LDIR LDIR

View File

@ -13,6 +13,5 @@
INCLUDE 'src/bios/shared/VERSION.inc' ; ‚¥àá¨ï EXP ¨ ROM INCLUDE 'src/bios/shared/VERSION.inc' ; ‚¥àá¨ï EXP ¨ ROM
INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc' INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc'
INCLUDE 'src/bios/ROM/BIOS.inc' INCLUDE 'src/bios/ROM/BIOS.inc'
INCLUDE 'Shared_Includes/constants/ata.inc'
;--------------------------------------- ;---------------------------------------
; ;