расширение функции 5х DRV_GET_NAME. Новый выхлоп и параметры

This commit is contained in:
Tolik 2026-04-30 19:33:46 +10:00
parent 64f6edd5be
commit 2c5d438476
8 changed files with 339 additions and 329 deletions

@ -1 +1 @@
Subproject commit 20f00d231f2a8e7979248c02769c9528ee67f457 Subproject commit daae799b0dfc833d6bbbb8910910790f834996a3

View File

@ -1441,8 +1441,7 @@ DOS_OFF:
;------[ ; !TODO çâ®- â® á¢ï§ ­­®¥ á ¯¥à¥¬¥­­ë¬¨ LIB_TABLE ; ]------ ;------[ ; !TODO çâ®- â® á¢ï§ ­­®¥ á ¯¥à¥¬¥­­ë¬¨ LIB_TABLE ; ]------
; _mInfoBLOCK #3E20-$,#FF ; _mInfoBLOCK #3E20-$,#FF
; [x] ; [x]
FN_LIB: FN_LIB: SCF
SCF
RET RET
// //
// IN A,(SLOT3) // IN A,(SLOT3)

View File

@ -1,13 +1,6 @@
; !FIXIT ALL
;
;[]===========================================================[] ;[]===========================================================[]
;!TODO
; ®¡ê¥¤¥­¨âì ¯à®æ¥¤ãàë FDD_5x_LONG_READ ¨ FDD_5x_LONG_WRITE
; ®¡ê¥¤¥­¨âì ¯à®æ¥¤ãàë READ_SECTOR ¨ WR_SEC
; FDD.CHANGE: ; FDD.CHANGE:
; LD A,#01 ; LD A,#01
; AND A ; AND A

View File

@ -26,18 +26,16 @@ _ZIP_WAITS_ EQU 128
;[]================================================================[#50] ;[]================================================================[#50]
; IN: A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ­®¬¥à ãáâனá⢠ ; IN: A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; DE - ¡ãää¥à 64 ¡ ©â  ¤«ï ­ §¢ ­¨ï ãáâனá⢠ ; B - ­®¬¥à ¯®¤ä㭪樨:
; OUT: NC - ¢ ¡ãä¥à¥ ­ §¢ ­¨¥ ; 1 - ¯®«ãç¨âì 512 ¡ ©â®¢ Identify Device
; 2 - ¯®«ãç¨âì ­ §¢ ­¨¥, á¥à¨©­¨ª ¨ ¢¥àá¨î ¯à®è¨¢ª¨ ãáâனá⢠
; HL - ¡ãää¥à 71 ¡ ©â ¤«ï ­ §¢ ­¨ï ãáâனá⢠
; OUT: NC - ¢ ¡ãä¥à¥ § ¯à è¨¢ ¥¬ë¥ ¤ ­­ë¥
; F - ¢ A ­®¬¥à ®è¨¡ª¨ ; F - ¢ A ­®¬¥à ®è¨¡ª¨
ATAPI_5x_GET_DRIVE_NAME: ATAPI_5x_GET_DRIVE_NAME:
LD B,A ; á®å࠭塞 A
LD C,IDE.Device.ATAPI LD C,IDE.Device.ATAPI
CALL SELECT_DRIVE.drv_params LD E,IDE.CMD.ATAPI.IdentifyPacketDevice
JP Z,ATAxx_5x_GET_DRIVE_NAME JP ATAxx_IdentifyDevice
;
LD A,BIOS.Error.BadNumber
SCF
RET
;[]================================================================[#50] ;[]================================================================[#50]

View File

@ -79,18 +79,16 @@ WRITE_OUTI_DUPs EQU 32 ; bytes
;[]================================================================[#50] ;[]================================================================[#50]
; IN: A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ­®¬¥à ãáâனá⢠ ; IN: A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; DE - ¡ãää¥à 64 ¡ ©â  ¤«ï ­ §¢ ­¨ï ãáâனá⢠ ; B - ­®¬¥à ¯®¤ä㭪樨:
; OUT: NC - ¢ ¡ãä¥à¥ ­ §¢ ­¨¥ ; 1 - ¯®«ãç¨âì 512 ¡ ©â®¢ Identify Device
; 2 - ¯®«ãç¨âì ­ §¢ ­¨¥, á¥à¨©­¨ª ¨ ¢¥àá¨î ¯à®è¨¢ª¨ ãáâனá⢠
; HL - ¡ãää¥à 71 ¡ ©â ¤«ï ­ §¢ ­¨ï ãáâனá⢠
; OUT: NC - ¢ ¡ãä¥à¥ § ¯à è¨¢ ¥¬ë¥ ¤ ­­ë¥
; F - ¢ A ­®¬¥à ®è¨¡ª¨ ; F - ¢ A ­®¬¥à ®è¨¡ª¨
ATA_5x_GET_DRIVE_NAME: ATA_5x_GET_DRIVE_NAME:
LD B,A ; á®å࠭塞 A
LD C,IDE.Device.HDD LD C,IDE.Device.HDD
CALL SELECT_DRIVE.drv_params LD E,IDE.CMD.ATA.IdentifyDevice
JP Z,ATAxx_5x_GET_DRIVE_NAME JP ATAxx_IdentifyDevice
;
LD A,BIOS.Error.BadNumber
SCF
RET
;[]================================================================[#50] ;[]================================================================[#50]
@ -320,7 +318,7 @@ RW_ATA_SECTORs: PUSH BC ;
; ;
EXX EXX
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
CALL WAITPRT.custom CALL WAITPRT.custom_DE
EXX EXX
RET C RET C
; ;
@ -345,7 +343,7 @@ RW_ATA_SECTORs: PUSH BC ;
EX AF,AF' EX AF,AF'
EXX EXX
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
CALL WAITPRT.custom CALL WAITPRT.custom_DE
EXX EXX
RET C RET C
;DI ;R01 REMOVED "DI" ;DI ;R01 REMOVED "DI"
@ -462,87 +460,6 @@ ATA_IdlePasses: CALL .CHECK_DRV
RET RET
;!TODO ¤®¤¥« âì íâã ¦¥ åãà¬ã ¤«ï ¤à㣨å ãáâனá⢠;!TODO ¤®¤¥« âì íâã ¦¥ åãà¬ã ¤«ï ¤à㣨å ãáâனáâ¢
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ; ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
/*
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.CMD.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] ;[]================================================================[#54]
@ -568,7 +485,7 @@ ATA_5x_VERIFY: ;PUSH IY ; !FIXIT
RET C RET C
EXX EXX
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
CALL WAITPRT.custom CALL WAITPRT.custom_DE
EXX EXX
RET C RET C
;PUSH DE ;PUSH DE
@ -685,25 +602,25 @@ DIV32X: ;HL:DE / BC => DE:IX HL-OSTATOK
; E - PATTERN ; E - PATTERN
; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  ZF ; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  ZF
WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready
.custom_DE: LD HL,#0000 ; § ¤¥à¦ª  ;!HARDCODE
.custom: LD BC,IDE.Read.Status .custom: LD BC,IDE.Read.Status
LD HL,#0000 ; § ¤¥à¦ª  ;!HARDCODE
; ;
.loop: PUSH HL .loop: PUSH HL ; 11
; ; ;;;;;;;;;
.loop2: IN A,(C) .loop2: IN A,(C) ; 12
AND D AND D ; 4
CP E CP E ; 4
JR Z,.ok JR Z,.ok ; 7
; ;
DEC HL DEC HL ; 6
LD A,L LD A,L ; 4
OR H OR H ; 4
JP NZ,.loop2 JP NZ,.loop2 ; 10
; ; ;;;;;;;;; 51
POP HL POP HL ; 10
DEC L DEC L ; 4
JR NZ,.loop JR NZ,.loop ; 12
; error ; error ;;;;;;;;; 37
LD A,BIOS.Error.NotReady LD A,BIOS.Error.NotReady
SCF SCF
RET RET

View File

@ -4,39 +4,6 @@
; ‚ë室: A - MediaParameters, C - DriveType ; ‚ë室: A - MediaParameters, C - DriveType
; ­¥ ¯®àâ¨â L ; ­¥ ¯®àâ¨â L
SELECT_DRIVE: CALL .drv_params SELECT_DRIVE: CALL .drv_params
; AND #0F
; LD IY,IDE.INIT_TBL_IDE0
; JR Z,.channel
; ;
; DEC A
; LD IY,IDE.INIT_TBL_IDE1
; JR Z,.channel
; ;
; DEC A
; LD IY,IDE.INIT_TBL_IDE2
; JR Z,.channel
; ;
; DEC A
; LD IY,IDE.INIT_TBL_IDE3
; JR NZ,.error
; ;
; .channel: EXX
; IN A,(SLOT3)
; PUSH AF
; LD A,SYS_PAGE
; OUT (SLOT3),A
; ;
; LD H,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
; LD C,(IY + IDE.HDD_INIT_TABLE.DriveType)
; LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags)
; POP AF
; OUT (SLOT3),A ;¢®§¢à â áâà ­¨æë
; ;
; LD A,C
; EXX
; ;
; CP C
;
EXX EXX
SCF SCF
LD A,BIOS.Error.BadNumber LD A,BIOS.Error.BadNumber
@ -53,11 +20,10 @@ SELECT_DRIVE: CALL .drv_params
LD BC,IDE.Write.DeviceHead LD BC,IDE.Write.DeviceHead
OUT (C),A OUT (C),A
; ;
.del_me: LD A,high IDE.Read.Status LD A,high IDE.Read.Status
IN A,(low IDE.Read.Status) IN A,(low IDE.Read.Status)
AND IDE.CtrlByte.Busy AND IDE.CtrlByte.Busy
; â¥áâ¨à®¢ ­¨¥ § ¤¥à¦¥ª ; â¥áâ¨à®¢ ­¨¥ § ¤¥à¦¥ª
;JR NZ,.del_me
JR Z,.notBusy JR Z,.notBusy
LD B,32 LD B,32
DJNZ $ DJNZ $
@ -127,82 +93,82 @@ CHANGE_MEM_BLK: LD HL,#C000
RET RET
;======================================================================= ;=======================================================================
; NOT USED
;======================================================================= ;=======================================================================
; IN: B - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ­®¬¥à ãáâனá⢠ ; IN: B - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; DE - ¡ãää¥à 64 ¡ ©â  ¤«ï ­ §¢ ­¨ï ãáâனá⢠ ; DE - ¡ãää¥à 64 ¡ ©â  ¤«ï ­ §¢ ­¨ï ãáâனá⢠
; OUT: NC - ¢ ¡ãä¥à¥ ­ §¢ ­¨¥ ; OUT: NC - ¢ ¡ãä¥à¥ ­ §¢ ­¨¥
; F - ¢ A ­®¬¥à ®è¨¡ª¨ ; F - ¢ A ­®¬¥à ®è¨¡ª¨
ATAxx_5x_GET_DRIVE_NAME: ; ATAxx_5x_GET_DRIVE_NAME:
LD A,B ; LD A,B
AND #0F ; AND #0F
LD HL,SYS_PAGE.IDE_0.NAME ; LD HL,SYS_PAGE.IDE_0.NAME
JR Z,.ldir ; JR Z,.ldir
; ; ;
DEC A ; DEC A
LD HL,SYS_PAGE.IDE_1.NAME ; LD HL,SYS_PAGE.IDE_1.NAME
JR Z,.ldir ; JR Z,.ldir
DEC A ; DEC A
LD HL,SYS_PAGE.IDE_2.NAME ; LD HL,SYS_PAGE.IDE_2.NAME
JR Z,.ldir ; JR Z,.ldir
DEC A ; DEC A
LD HL,SYS_PAGE.IDE_3.NAME ; LD HL,SYS_PAGE.IDE_3.NAME
JR NZ,.error ; JR NZ,.error
; ; ;
.ldir: EXX ; .ldir: EXX
LD C,SLOT3 ; LD C,SLOT3
IN B,(C) ; IN B,(C)
LD D,SYS_PAGE ; LD D,SYS_PAGE
OUT (C),D ; OUT (C),D
EXX ; EXX
LD A,(HL) ; LD A,(HL)
EXX ; EXX
OUT (C),B ; OUT (C),B
EXX ; EXX
AND A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.None ; AND A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.None
JR Z,.error ; JR Z,.error
; ; ;
INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.NoInfo ; INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.NoInfo
JR Z,.autodetect ; JR Z,.autodetect
; ; ;
INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.Unknown ; INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.Unknown
JR Z,.UnknownName ; JR Z,.UnknownName
; ; ;
LD B,SYS_PAGE.IDE_x.NAME.Size ; LD B,SYS_PAGE.IDE_x.NAME.Size
.loop: EXX ; .loop: EXX
OUT (C),D ; OUT (C),D
EXX ; EXX
LD A,(HL) ; LD A,(HL)
EXX ; EXX
OUT (C),B ; OUT (C),B
EXX ; EXX
LD (DE),A ; LD (DE),A
INC HL ; INC HL
INC DE ; INC DE
DJNZ .loop ; DJNZ .loop
RET ; RET
; ; ;
.UnknownName: LD HL,.Unknown_str ; .UnknownName: LD HL,.Unknown_str
LD BC,.Unknown_str.Size ; LD BC,.Unknown_str.Size
LDIR ; LDIR
XOR A ; XOR A
EX DE,HL ; EX DE,HL
LD B,SYS_PAGE.IDE_x.NAME.Size - .Unknown_str.Size ; LD B,SYS_PAGE.IDE_x.NAME.Size - .Unknown_str.Size
.loop_zero: LD (HL),A ; .loop_zero: LD (HL),A
INC HL ; INC HL
DJNZ .loop_zero ; DJNZ .loop_zero
RET ; RET
; ; ;
.autodetect: ;!FIXIT ᤥ« âì ¤¥â¥ªâ!!! ; .autodetect: ;!FIXIT ᤥ« âì ¤¥â¥ªâ!!!
JR .UnknownName ; JR .UnknownName
; ; ;
; ¥á«¨ ­¥â ¤à ©¢  ; ; ¥á«¨ ­¥â ¤à ©¢ 
.error: LD A,BIOS.Error.BadNumber ; .error: LD A,BIOS.Error.BadNumber
SCF ; SCF
RET ; RET
; ; ;
.Unknown_str: BYTE 'Unknown' ; .Unknown_str: BYTE 'Unknown'
.Unknown_str.Size EQU $ - .Unknown_str ; .Unknown_str.Size EQU $ - .Unknown_str
; ¥á«¨ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¢®§¢à â ¨¬¥­¨ ¤«ï ãáâனá⢠ ; ¥á«¨ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¢®§¢à â ¨¬¥­¨ ¤«ï ãáâனá⢠
;LD A,BIOS.Error.InvalidSubFunction ;LD A,BIOS.Error.InvalidSubFunction
@ -212,36 +178,177 @@ ATAxx_5x_GET_DRIVE_NAME:
;======================================================================= ;=======================================================================
;Function: Detect Disk ; !FIXIT ¬®¦­® ¯®¯à®¡®¢ âì ¨á¯®«ì§®¢ âì ¢ AUTOIDE.asm ¤«ï ᮪à é¥­¨ï ª®¤ 
; A - Disk ; A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ­®¬¥à ãáâனá⢠
; - Type ; C - IDE.Device.HDD
;Return: CF=0 - A=Drive type, H=MediaParameters ; E - IDE.CMD.ATA.IdentifyDevice / IDE.CMD.ATAPI.IdentifyPacketDevice
; CF=1 - drive not present, A=#02 ; HL - Buffer
;DRV_DETECT: CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83) ATAxx_IdentifyDevice:
; CCF PUSH HL
; JR C,.error PUSH BC
; ; CALL .RUN_CMD
; LD IX,IDE.INIT_TBL_IDE0 POP BC
; AND 3 JR C,.error
; JR Z,.get_param ;
; LD IX,IDE.INIT_TBL_IDE1 DJNZ .get_full_name
; DEC A ; B=1
; JR Z,.get_param POP HL
; LD IX,IDE.INIT_TBL_IDE2 .read_hdd_data: LD BC,IDE.Read.Data
; DEC A INIR
; JR Z,.get_param INIR
; LD IX,IDE.INIT_TBL_IDE3 RET
; .get_param: IN A,(SLOT3) ;
; LD B,A .invalidFunction:
; LD A,SYS_PAGE POP HL
; OUT (SLOT3),A LD A,BIOS.Error.InvalidSubFunction
; ; SCF
; LD H,(IX + IDE.HDD_INIT_TABLE.MediaParameters) RET
; LD A,(IX + IDE.HDD_INIT_TABLE.DriveType) ;
; CP C ; compare Type ; B=2
; LD C,SLOT3 .get_full_name: DJNZ .invalidFunction
; OUT (C),B ;
; RET Z LD HL,SYS_PAGE.MS_BUF
; SCF IN A,(SLOT3)
; .error: LD A,BIOS.Error.BadNumber PUSH AF ; áâà ­¨æ  ¯®«ì§®¢ â¥«ï
; RET LD A,SYS_PAGE
OUT (SLOT3),A
CALL .read_hdd_data
LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision
LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision)/2
CALL ATAxx_IdentifyDevice.STR_BIG_ENDIAN_TO_LITTLE
LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.SerialNumber
LD B,+(_ATA_IDENTIFY_DEVICE_DATA.BufferType - _ATA_IDENTIFY_DEVICE_DATA.SerialNumber)/2
CALL ATAxx_IdentifyDevice.STR_BIG_ENDIAN_TO_LITTLE
POP AF ; áâà ­¨æ  ¯®«ì§®¢ â¥«ï
EXX
LD B,A
LD C,SLOT3
LD D,SYS_PAGE
EXX
POP DE
LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.ModelNumber
LD B,_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber
CALL .ldirSwitched
;
LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.SerialNumber
LD B,_ATA_IDENTIFY_DEVICE_DATA.BufferType - _ATA_IDENTIFY_DEVICE_DATA.SerialNumber
CALL .ldir
;
LD HL,SYS_PAGE.MS_BUF + _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision
LD B,_ATA_IDENTIFY_DEVICE_DATA.ModelNumber - _ATA_IDENTIFY_DEVICE_DATA.FirmwareRevision
;CALL .ldir
.ldir: EXX
OUT (C),D
EXX
.ldirSwitched: LD A,(HL)
EXX
OUT (C),B
EXX
LD (DE),A
INC HL
INC DE
AND A
RET Z
;
DJNZ .ldir
XOR A
LD (DE),A
INC DE
RET
;
.error: POP HL
CP BIOS.Error.BadNumber
SCF
RET Z
LD A,BIOS.Error.NotReady
RET
;
;
.RUN_CMD: CALL SELECT_DRIVE
RET C
;
LD BC,IDE.Write.Command
OUT (C),E
LD A,E
EXX
SUB IDE.CMD.ATA.IdentifyDevice
LD H,A
LD L,A
JR Z,.wait
;
LD H,#0C
.wait: LD DE,IDE.CtrlByte.Busy * 256 + 0
CALL WAITPRT.custom ; HL = 0 or #0CB7
EXX
RET C
;
LD BC,IDE.Read.Status
IN A,(C)
RRCA
RET C
;
AND (IDE.CtrlByte.DataRequest + IDE.CtrlByte.Ready) / 2
SCF
RET Z
;
EXX
LD DE,256*IDE.CtrlByte.DataRequest + IDE.CtrlByte.DataRequest
CALL WAITPRT.custom_DE
EXX
RET
;
; LD BC,IDE.Read.Data
; LD HL,SYS_PAGE.MS_BUF
; IN A,(SLOT3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (SLOT3),A
; INIR
; INIR
; EX AF,AF'
; RET
;
;
; 1 - ¯¥ç âì á ¯®à祩 ¡ãä¥à  ¡¥§ ¯à®¯ã᪠ ¤¢®©­ëå ¯à®¡¥«®¢ - ¢ 3 à §  èãáâ॥ á⮪ 
; ¬®¦¥â ¯®â®¬ ᤥ« âì ¨§ í⮣® API ¯¥ç â¨ ¤«ï BIG ENDIAN
.STR_BIG_ENDIAN_TO_LITTLE:
LD D,H
LD E,L
LD A,(HL)
AND A
RET Z
;
INC HL
.loop_ch: LD A,(DE)
LDI
LD (DE),A
INC HL
INC DE
DJNZ .loop_ch
RET
;=======================================================================
/*
; D - MASK
; E - PATTERN
; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  ZF
WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready
.custom: LD BC,IDE.Read.Status
; ATAPI or Absent
; Exit: CF - No device
; NC - ATAPI
.IdentPDevChk: LD E,IDE.CMD.ATAPI.IdentifyPacketDevice
LD BC,IDE.Write.Command
OUT (C),E
;
LD HL,PAUSES.HALT.Time_2s
LD DE,IDE.CtrlByte.Busy*256 + 0
CALL BITS_WAITS.Clear_BUSY
RET C
;
; BC = IDE.Read.Status
IN A,(C)
RRCA
RET
*/

View File

@ -163,14 +163,6 @@ START: ; reset all
LD (HL),C LD (HL),C
INC HL INC HL
DJNZ .FILLIDE DJNZ .FILLIDE
;CLEAR HDD NAME
LD HL,SYS_PAGE.IDE_NAMES_TABLE
LD B,low SYS_PAGE.IDE_NAMES_TABLE.Size
INC C ; IDE_NAME_MARKER.None
.FILLIDE_NAME:
LD (HL),C
INC HL
DJNZ .FILLIDE_NAME
; ;
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
@ -613,25 +605,30 @@ IDE_CMD:
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[v]
PRINT_IDE_MODEL: PRINT_IDE_MODEL:
LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber
LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber)/2
LD A,(HL) LD A,(HL)
OR A OR A
JR Z,.unknown JR Z,.unknown
; ;
CALL PRINT_STR_BIG_ENDIAN ;CALL PRINT_STR_BIG_ENDIAN
LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber)/2
PUSH HL
CALL ATAxx_IdentifyDevice.STR_BIG_ENDIAN_TO_LITTLE
POP HL
LD B,_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber
CALL LP_PRINT_LINE2
AND A AND A
RET RET
; ;
.unknown: LD HL,.marker .unknown: ;LD HL,.marker
LD A,.marker.Size ;LD A,.marker.Size
CALL COPY_IDE_NAME_TO_SYS_PAGE ;CALL COPY_IDE_NAME_TO_SYS_PAGE
LD A,msgStrings.ideUnknown LD A,msgStrings.ideUnknown
CALL POSTMSG CALL POSTMSG
AND A AND A
RET RET
; ;
.marker: BYTE IDE_NAME_MARKER.Unknown ;.marker: BYTE IDE_NAME_MARKER.Unknown
.marker.Size: EQU $ - .marker ;.marker.Size: EQU $ - .marker
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
@ -839,7 +836,6 @@ Bug31SecCheck: LD A,(MasterSlave)
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[v]
GETPARAM: LD HL,PAUSES.WAIT.IDE GETPARAM: LD HL,PAUSES.WAIT.IDE
;LD DE,256*(IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest) + IDE.CtrlByte.DataRequest
LD DE,256*IDE.CtrlByte.DataRequest + IDE.CtrlByte.DataRequest LD DE,256*IDE.CtrlByte.DataRequest + IDE.CtrlByte.DataRequest
CALL BITS_WAITS.WAIT_PRT CALL BITS_WAITS.WAIT_PRT
RET C RET C
@ -1067,30 +1063,30 @@ Nop_CHANELS:
; HL -  ¤à¥á áâப¨ ; HL -  ¤à¥á áâப¨
; IY -  ¤à¥á ¤ ­­ëå ¤à ©¢  ¢ SYS_PAGE (.IDE_0 .. .IDE_3) ; IY -  ¤à¥á ¤ ­­ëå ¤à ©¢  ¢ SYS_PAGE (.IDE_0 .. .IDE_3)
; ‚ë室: B - ¤«¨­  áâப¨ ; ‚ë室: B - ¤«¨­  áâப¨
COPY_IDE_NAME_TO_SYS_PAGE: ; COPY_IDE_NAME_TO_SYS_PAGE:
; save IDE name ; ; save IDE name
LD C,A ; LD C,A
LD B,0 ; LD B,0
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
; SYS_PAGE.IDE_x --> SYS_PAGE.IDE_x.NAME ; ; SYS_PAGE.IDE_x --> SYS_PAGE.IDE_x.NAME
PUSH IY ; PUSH IY
POP DE ; POP DE
SET 1,D ; SET 1,D
LD A,%0010'0000 ; LD A,%0010'0000
XOR E ; XOR E
LD E,A ; LD E,A
SLA E ; SLA E
SLA E ; SLA E
; ; ;
LD A,C ; LD A,C
LDIR ; LDIR
LD B,A ; LD B,A
EX AF,AF' ; EX AF,AF'
OUT (SLOT3),A ; OUT (SLOT3),A
RET ; RET
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]

View File

@ -106,28 +106,28 @@ ScreenPOS:
; RET ; RET
;======================================================================= ;=======================================================================
; 1 - ¯¥ç âì á ¯®à祩 ¡ãä¥à  ¡¥§ ¯à®¯ã᪠ ¤¢®©­ëå ¯à®¡¥«®¢ - ¢ 3 à §  èãáâ॥ á⮪  ; 1 - ¯¥ç âì á ¯®à祩 ¡ãä¥à  ¡¥§ ¯à®¯ã᪠ ¤¢®©­ëå ¯à®¡¥«®¢ - ¢ 3 à §  èãáâ॥ á⮪ 
PRINT_STR_BIG_ENDIAN: ; PRINT_STR_BIG_ENDIAN:
PUSH HL ; ;PUSH HL
PUSH BC ; PUSH BC
LD D,H ; LD D,H
LD E,L ; LD E,L
INC HL ; INC HL
; ; ;
.loop_ch: LD A,(DE) ; .loop_ch: LD A,(DE)
LDI ; LDI
LD (DE),A ; LD (DE),A
INC HL ; INC HL
INC DE ; INC DE
DJNZ .loop_ch ; DJNZ .loop_ch
; ; ;
POP BC ; POP BC
POP HL ; ;POP HL
LD A,B ; ;LD A,B
ADD A,B ; ;ADD A,B
PUSH HL ; ;PUSH HL
CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE ; ;CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE
POP HL ; ;POP HL
JP LP_PRINT_LINE2 ; JP LP_PRINT_LINE2
;======================================================================= ;=======================================================================