mirror of
https://github.com/Tolik-Trek/Sprinter-BIOS.git
synced 2026-06-15 17:31:46 +03:00
расширение функции 5х DRV_GET_NAME. Новый выхлоп и параметры
This commit is contained in:
parent
64f6edd5be
commit
2c5d438476
@ -1 +1 @@
|
||||
Subproject commit 20f00d231f2a8e7979248c02769c9528ee67f457
|
||||
Subproject commit daae799b0dfc833d6bbbb8910910790f834996a3
|
||||
@ -1441,8 +1441,7 @@ DOS_OFF:
|
||||
;------[ ; !TODO çâ®- â® á¢ï§ ®¥ á ¯¥à¥¬¥ë¬¨ LIB_TABLE ; ]------
|
||||
; _mInfoBLOCK #3E20-$,#FF
|
||||
; [x]
|
||||
FN_LIB:
|
||||
SCF
|
||||
FN_LIB: SCF
|
||||
RET
|
||||
//
|
||||
// IN A,(SLOT3)
|
||||
|
||||
@ -1,13 +1,6 @@
|
||||
; !FIXIT ALL
|
||||
;
|
||||
;[]===========================================================[]
|
||||
|
||||
|
||||
;!TODO
|
||||
; ®¡ê¥¤¥¨âì ¯à®æ¥¤ãàë FDD_5x_LONG_READ ¨ FDD_5x_LONG_WRITE
|
||||
; ®¡ê¥¤¥¨âì ¯à®æ¥¤ãàë READ_SECTOR ¨ WR_SEC
|
||||
|
||||
|
||||
; FDD.CHANGE:
|
||||
; LD A,#01
|
||||
; AND A
|
||||
|
||||
@ -26,18 +26,16 @@ _ZIP_WAITS_ EQU 128
|
||||
|
||||
;[]================================================================[#50]
|
||||
; IN: A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ®¬¥à ãáâனáâ¢
|
||||
; DE - ¡ãää¥à 64 ¡ ©â ¤«ï §¢ ¨ï ãáâனáâ¢
|
||||
; OUT: NC - ¢ ¡ãä¥à¥ §¢ ¨¥
|
||||
; B - ®¬¥à ¯®¤äãªæ¨¨:
|
||||
; 1 - ¯®«ãç¨âì 512 ¡ ©â®¢ Identify Device
|
||||
; 2 - ¯®«ãç¨âì §¢ ¨¥, á¥à¨©¨ª ¨ ¢¥àá¨î ¯à®è¨¢ª¨ ãáâனáâ¢
|
||||
; HL - ¡ãää¥à 71 ¡ ©â ¤«ï §¢ ¨ï ãáâனáâ¢
|
||||
; OUT: NC - ¢ ¡ãä¥à¥ § ¯à 訢 ¥¬ë¥ ¤ ë¥
|
||||
; ‘F - ¢ A ®¬¥à ®è¨¡ª¨
|
||||
ATAPI_5x_GET_DRIVE_NAME:
|
||||
LD B,A ; á®åà 塞 A
|
||||
LD C,IDE.Device.ATAPI
|
||||
CALL SELECT_DRIVE.drv_params
|
||||
JP Z,ATAxx_5x_GET_DRIVE_NAME
|
||||
;
|
||||
LD A,BIOS.Error.BadNumber
|
||||
SCF
|
||||
RET
|
||||
LD E,IDE.CMD.ATAPI.IdentifyPacketDevice
|
||||
JP ATAxx_IdentifyDevice
|
||||
;[]================================================================[#50]
|
||||
|
||||
|
||||
|
||||
@ -79,18 +79,16 @@ WRITE_OUTI_DUPs EQU 32 ; bytes
|
||||
|
||||
;[]================================================================[#50]
|
||||
; IN: A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ®¬¥à ãáâனáâ¢
|
||||
; DE - ¡ãää¥à 64 ¡ ©â ¤«ï §¢ ¨ï ãáâனáâ¢
|
||||
; OUT: NC - ¢ ¡ãä¥à¥ §¢ ¨¥
|
||||
; B - ®¬¥à ¯®¤äãªæ¨¨:
|
||||
; 1 - ¯®«ãç¨âì 512 ¡ ©â®¢ Identify Device
|
||||
; 2 - ¯®«ãç¨âì §¢ ¨¥, á¥à¨©¨ª ¨ ¢¥àá¨î ¯à®è¨¢ª¨ ãáâனáâ¢
|
||||
; HL - ¡ãää¥à 71 ¡ ©â ¤«ï §¢ ¨ï ãáâனáâ¢
|
||||
; OUT: NC - ¢ ¡ãä¥à¥ § ¯à 訢 ¥¬ë¥ ¤ ë¥
|
||||
; ‘F - ¢ A ®¬¥à ®è¨¡ª¨
|
||||
ATA_5x_GET_DRIVE_NAME:
|
||||
LD B,A ; á®åà 塞 A
|
||||
LD C,IDE.Device.HDD
|
||||
CALL SELECT_DRIVE.drv_params
|
||||
JP Z,ATAxx_5x_GET_DRIVE_NAME
|
||||
;
|
||||
LD A,BIOS.Error.BadNumber
|
||||
SCF
|
||||
RET
|
||||
LD E,IDE.CMD.ATA.IdentifyDevice
|
||||
JP ATAxx_IdentifyDevice
|
||||
;[]================================================================[#50]
|
||||
|
||||
|
||||
@ -320,7 +318,7 @@ RW_ATA_SECTORs: PUSH BC ;
|
||||
;
|
||||
EXX
|
||||
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
|
||||
CALL WAITPRT.custom
|
||||
CALL WAITPRT.custom_DE
|
||||
EXX
|
||||
RET C
|
||||
;
|
||||
@ -345,7 +343,7 @@ RW_ATA_SECTORs: PUSH BC ;
|
||||
EX AF,AF'
|
||||
EXX
|
||||
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
||||
CALL WAITPRT.custom
|
||||
CALL WAITPRT.custom_DE
|
||||
EXX
|
||||
RET C
|
||||
;DI ;R01 REMOVED "DI"
|
||||
@ -462,87 +460,6 @@ ATA_IdlePasses: CALL .CHECK_DRV
|
||||
RET
|
||||
;!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]
|
||||
@ -568,7 +485,7 @@ ATA_5x_VERIFY: ;PUSH IY ; !FIXIT
|
||||
RET C
|
||||
EXX
|
||||
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
|
||||
CALL WAITPRT.custom
|
||||
CALL WAITPRT.custom_DE
|
||||
EXX
|
||||
RET C
|
||||
;PUSH DE
|
||||
@ -685,25 +602,25 @@ DIV32X: ;HL:DE / BC => DE:IX HL-OSTATOK
|
||||
; E - PATTERN
|
||||
; !!! ¥ª®â®àë¥ äãªæ¨¨ ¤¥îâáï, çâ® ¢ë室¥ ¢á¥£¤ ZF
|
||||
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
|
||||
LD HL,#0000 ; § ¤¥à¦ª ;!HARDCODE
|
||||
;
|
||||
.loop: PUSH HL
|
||||
;
|
||||
.loop2: IN A,(C)
|
||||
AND D
|
||||
CP E
|
||||
JR Z,.ok
|
||||
.loop: PUSH HL ; 11
|
||||
; ;;;;;;;;;
|
||||
.loop2: IN A,(C) ; 12
|
||||
AND D ; 4
|
||||
CP E ; 4
|
||||
JR Z,.ok ; 7
|
||||
;
|
||||
DEC HL
|
||||
LD A,L
|
||||
OR H
|
||||
JP NZ,.loop2
|
||||
;
|
||||
POP HL
|
||||
DEC L
|
||||
JR NZ,.loop
|
||||
; error
|
||||
DEC HL ; 6
|
||||
LD A,L ; 4
|
||||
OR H ; 4
|
||||
JP NZ,.loop2 ; 10
|
||||
; ;;;;;;;;; 51
|
||||
POP HL ; 10
|
||||
DEC L ; 4
|
||||
JR NZ,.loop ; 12
|
||||
; error ;;;;;;;;; 37
|
||||
LD A,BIOS.Error.NotReady
|
||||
SCF
|
||||
RET
|
||||
|
||||
@ -4,39 +4,6 @@
|
||||
; ‚ë室: A - MediaParameters, C - DriveType
|
||||
; ¥ ¯®àâ¨â L
|
||||
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
|
||||
SCF
|
||||
LD A,BIOS.Error.BadNumber
|
||||
@ -53,11 +20,10 @@ SELECT_DRIVE: CALL .drv_params
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
;
|
||||
.del_me: LD A,high IDE.Read.Status
|
||||
LD A,high IDE.Read.Status
|
||||
IN A,(low IDE.Read.Status)
|
||||
AND IDE.CtrlByte.Busy
|
||||
; â¥áâ¨à®¢ ¨¥ § ¤¥à¦¥ª
|
||||
;JR NZ,.del_me
|
||||
JR Z,.notBusy
|
||||
LD B,32
|
||||
DJNZ $
|
||||
@ -127,82 +93,82 @@ CHANGE_MEM_BLK: LD HL,#C000
|
||||
RET
|
||||
;=======================================================================
|
||||
|
||||
|
||||
; NOT USED
|
||||
;=======================================================================
|
||||
; IN: B - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ®¬¥à ãáâனáâ¢
|
||||
; DE - ¡ãää¥à 64 ¡ ©â ¤«ï §¢ ¨ï ãáâனáâ¢
|
||||
; OUT: NC - ¢ ¡ãä¥à¥ §¢ ¨¥
|
||||
; ‘F - ¢ A ®¬¥à ®è¨¡ª¨
|
||||
ATAxx_5x_GET_DRIVE_NAME:
|
||||
LD A,B
|
||||
AND #0F
|
||||
LD HL,SYS_PAGE.IDE_0.NAME
|
||||
JR Z,.ldir
|
||||
;
|
||||
DEC A
|
||||
LD HL,SYS_PAGE.IDE_1.NAME
|
||||
JR Z,.ldir
|
||||
DEC A
|
||||
LD HL,SYS_PAGE.IDE_2.NAME
|
||||
JR Z,.ldir
|
||||
DEC A
|
||||
LD HL,SYS_PAGE.IDE_3.NAME
|
||||
JR NZ,.error
|
||||
;
|
||||
.ldir: EXX
|
||||
LD C,SLOT3
|
||||
IN B,(C)
|
||||
LD D,SYS_PAGE
|
||||
OUT (C),D
|
||||
EXX
|
||||
LD A,(HL)
|
||||
EXX
|
||||
OUT (C),B
|
||||
EXX
|
||||
AND A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.None
|
||||
JR Z,.error
|
||||
;
|
||||
INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.NoInfo
|
||||
JR Z,.autodetect
|
||||
;
|
||||
INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.Unknown
|
||||
JR Z,.UnknownName
|
||||
;
|
||||
LD B,SYS_PAGE.IDE_x.NAME.Size
|
||||
.loop: EXX
|
||||
OUT (C),D
|
||||
EXX
|
||||
LD A,(HL)
|
||||
EXX
|
||||
OUT (C),B
|
||||
EXX
|
||||
LD (DE),A
|
||||
INC HL
|
||||
INC DE
|
||||
DJNZ .loop
|
||||
RET
|
||||
;
|
||||
.UnknownName: LD HL,.Unknown_str
|
||||
LD BC,.Unknown_str.Size
|
||||
LDIR
|
||||
XOR A
|
||||
EX DE,HL
|
||||
LD B,SYS_PAGE.IDE_x.NAME.Size - .Unknown_str.Size
|
||||
.loop_zero: LD (HL),A
|
||||
INC HL
|
||||
DJNZ .loop_zero
|
||||
RET
|
||||
;
|
||||
.autodetect: ;!FIXIT ᤥ« âì ¤¥â¥ªâ!!!
|
||||
JR .UnknownName
|
||||
;
|
||||
; ¥á«¨ ¥â ¤à ©¢
|
||||
.error: LD A,BIOS.Error.BadNumber
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.Unknown_str: BYTE 'Unknown'
|
||||
.Unknown_str.Size EQU $ - .Unknown_str
|
||||
; ATAxx_5x_GET_DRIVE_NAME:
|
||||
; LD A,B
|
||||
; AND #0F
|
||||
; LD HL,SYS_PAGE.IDE_0.NAME
|
||||
; JR Z,.ldir
|
||||
; ;
|
||||
; DEC A
|
||||
; LD HL,SYS_PAGE.IDE_1.NAME
|
||||
; JR Z,.ldir
|
||||
; DEC A
|
||||
; LD HL,SYS_PAGE.IDE_2.NAME
|
||||
; JR Z,.ldir
|
||||
; DEC A
|
||||
; LD HL,SYS_PAGE.IDE_3.NAME
|
||||
; JR NZ,.error
|
||||
; ;
|
||||
; .ldir: EXX
|
||||
; LD C,SLOT3
|
||||
; IN B,(C)
|
||||
; LD D,SYS_PAGE
|
||||
; OUT (C),D
|
||||
; EXX
|
||||
; LD A,(HL)
|
||||
; EXX
|
||||
; OUT (C),B
|
||||
; EXX
|
||||
; AND A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.None
|
||||
; JR Z,.error
|
||||
; ;
|
||||
; INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.NoInfo
|
||||
; JR Z,.autodetect
|
||||
; ;
|
||||
; INC A ;CONFIGURE_IDE_DRIVES.IDE_NAME_MARKER.Unknown
|
||||
; JR Z,.UnknownName
|
||||
; ;
|
||||
; LD B,SYS_PAGE.IDE_x.NAME.Size
|
||||
; .loop: EXX
|
||||
; OUT (C),D
|
||||
; EXX
|
||||
; LD A,(HL)
|
||||
; EXX
|
||||
; OUT (C),B
|
||||
; EXX
|
||||
; LD (DE),A
|
||||
; INC HL
|
||||
; INC DE
|
||||
; DJNZ .loop
|
||||
; RET
|
||||
; ;
|
||||
; .UnknownName: LD HL,.Unknown_str
|
||||
; LD BC,.Unknown_str.Size
|
||||
; LDIR
|
||||
; XOR A
|
||||
; EX DE,HL
|
||||
; LD B,SYS_PAGE.IDE_x.NAME.Size - .Unknown_str.Size
|
||||
; .loop_zero: LD (HL),A
|
||||
; INC HL
|
||||
; DJNZ .loop_zero
|
||||
; RET
|
||||
; ;
|
||||
; .autodetect: ;!FIXIT ᤥ« âì ¤¥â¥ªâ!!!
|
||||
; JR .UnknownName
|
||||
; ;
|
||||
; ; ¥á«¨ ¥â ¤à ©¢
|
||||
; .error: LD A,BIOS.Error.BadNumber
|
||||
; SCF
|
||||
; RET
|
||||
; ;
|
||||
; .Unknown_str: BYTE 'Unknown'
|
||||
; .Unknown_str.Size EQU $ - .Unknown_str
|
||||
|
||||
; ¥á«¨ ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¢®§¢à â ¨¬¥¨ ¤«ï ãáâனáâ¢
|
||||
;LD A,BIOS.Error.InvalidSubFunction
|
||||
@ -212,36 +178,177 @@ ATAxx_5x_GET_DRIVE_NAME:
|
||||
|
||||
|
||||
;=======================================================================
|
||||
;Function: Detect Disk
|
||||
; A - Disk
|
||||
; ‘ - Type
|
||||
;Return: CF=0 - A=Drive type, H=MediaParameters
|
||||
; CF=1 - drive not present, A=#02
|
||||
;DRV_DETECT: CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
|
||||
; CCF
|
||||
; JR C,.error
|
||||
; ;
|
||||
; LD IX,IDE.INIT_TBL_IDE0
|
||||
; AND 3
|
||||
; JR Z,.get_param
|
||||
; LD IX,IDE.INIT_TBL_IDE1
|
||||
; DEC A
|
||||
; JR Z,.get_param
|
||||
; LD IX,IDE.INIT_TBL_IDE2
|
||||
; DEC A
|
||||
; JR Z,.get_param
|
||||
; LD IX,IDE.INIT_TBL_IDE3
|
||||
; .get_param: IN A,(SLOT3)
|
||||
; LD B,A
|
||||
; LD A,SYS_PAGE
|
||||
; OUT (SLOT3),A
|
||||
; ;
|
||||
; LD H,(IX + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||
; LD A,(IX + IDE.HDD_INIT_TABLE.DriveType)
|
||||
; CP C ; compare Type
|
||||
; LD C,SLOT3
|
||||
; OUT (C),B
|
||||
; RET Z
|
||||
; SCF
|
||||
; .error: LD A,BIOS.Error.BadNumber
|
||||
; RET
|
||||
; !FIXIT ¬®¦® ¯®¯à®¡®¢ âì ¨á¯®«ì§®¢ âì ¢ AUTOIDE.asm ¤«ï ᮪à é¥¨ï ª®¤
|
||||
; A - ¡¨â 4..7 - ⨯ ãáâனá⢠, ¡¨â 0..3 - ®¬¥à ãáâனáâ¢
|
||||
; C - IDE.Device.HDD
|
||||
; E - IDE.CMD.ATA.IdentifyDevice / IDE.CMD.ATAPI.IdentifyPacketDevice
|
||||
; HL - Buffer
|
||||
ATAxx_IdentifyDevice:
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
CALL .RUN_CMD
|
||||
POP BC
|
||||
JR C,.error
|
||||
;
|
||||
DJNZ .get_full_name
|
||||
; B=1
|
||||
POP HL
|
||||
.read_hdd_data: LD BC,IDE.Read.Data
|
||||
INIR
|
||||
INIR
|
||||
RET
|
||||
;
|
||||
.invalidFunction:
|
||||
POP HL
|
||||
LD A,BIOS.Error.InvalidSubFunction
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
; B=2
|
||||
.get_full_name: DJNZ .invalidFunction
|
||||
;
|
||||
LD HL,SYS_PAGE.MS_BUF
|
||||
IN A,(SLOT3)
|
||||
PUSH AF ; áâà ¨æ ¯®«ì§®¢ ⥫ï
|
||||
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
|
||||
*/
|
||||
@ -163,14 +163,6 @@ START: ; reset all
|
||||
LD (HL),C
|
||||
INC HL
|
||||
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'
|
||||
OUT (SLOT3),A
|
||||
@ -613,25 +605,30 @@ IDE_CMD:
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
PRINT_IDE_MODEL:
|
||||
LD HL,IDENTIFY_DEVICE_BUFFER.ModelNumber
|
||||
LD B,+(_ATA_IDENTIFY_DEVICE_DATA.MaximumBlockTransfer - _ATA_IDENTIFY_DEVICE_DATA.ModelNumber)/2
|
||||
LD A,(HL)
|
||||
OR A
|
||||
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
|
||||
RET
|
||||
;
|
||||
.unknown: LD HL,.marker
|
||||
LD A,.marker.Size
|
||||
CALL COPY_IDE_NAME_TO_SYS_PAGE
|
||||
.unknown: ;LD HL,.marker
|
||||
;LD A,.marker.Size
|
||||
;CALL COPY_IDE_NAME_TO_SYS_PAGE
|
||||
LD A,msgStrings.ideUnknown
|
||||
CALL POSTMSG
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
.marker: BYTE IDE_NAME_MARKER.Unknown
|
||||
.marker.Size: EQU $ - .marker
|
||||
;.marker: BYTE IDE_NAME_MARKER.Unknown
|
||||
;.marker.Size: EQU $ - .marker
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
@ -839,7 +836,6 @@ Bug31SecCheck: LD A,(MasterSlave)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
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
|
||||
CALL BITS_WAITS.WAIT_PRT
|
||||
RET C
|
||||
@ -1067,30 +1063,30 @@ Nop_CHANELS:
|
||||
; HL - ¤à¥á áâப¨
|
||||
; IY - ¤à¥á ¤ ëå ¤à ©¢ ¢ SYS_PAGE (.IDE_0 .. .IDE_3)
|
||||
; ‚ë室: B - ¤«¨ áâப¨
|
||||
COPY_IDE_NAME_TO_SYS_PAGE:
|
||||
; save IDE name
|
||||
LD C,A
|
||||
LD B,0
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
; SYS_PAGE.IDE_x --> SYS_PAGE.IDE_x.NAME
|
||||
PUSH IY
|
||||
POP DE
|
||||
SET 1,D
|
||||
LD A,%0010'0000
|
||||
XOR E
|
||||
LD E,A
|
||||
SLA E
|
||||
SLA E
|
||||
;
|
||||
LD A,C
|
||||
LDIR
|
||||
LD B,A
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
; COPY_IDE_NAME_TO_SYS_PAGE:
|
||||
; ; save IDE name
|
||||
; LD C,A
|
||||
; LD B,0
|
||||
; IN A,(SLOT3)
|
||||
; EX AF,AF'
|
||||
; LD A,SYS_PAGE
|
||||
; OUT (SLOT3),A
|
||||
; ; SYS_PAGE.IDE_x --> SYS_PAGE.IDE_x.NAME
|
||||
; PUSH IY
|
||||
; POP DE
|
||||
; SET 1,D
|
||||
; LD A,%0010'0000
|
||||
; XOR E
|
||||
; LD E,A
|
||||
; SLA E
|
||||
; SLA E
|
||||
; ;
|
||||
; LD A,C
|
||||
; LDIR
|
||||
; LD B,A
|
||||
; EX AF,AF'
|
||||
; OUT (SLOT3),A
|
||||
; RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
|
||||
@ -106,28 +106,28 @@ ScreenPOS:
|
||||
; RET
|
||||
;=======================================================================
|
||||
; 1 - ¯¥ç âì á ¯®à祩 ¡ãä¥à ¡¥§ ¯à®¯ã᪠¤¢®©ëå ¯à®¡¥«®¢ - ¢ 3 à § èãáâ॥ á⮪
|
||||
PRINT_STR_BIG_ENDIAN:
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
LD D,H
|
||||
LD E,L
|
||||
INC HL
|
||||
;
|
||||
.loop_ch: LD A,(DE)
|
||||
LDI
|
||||
LD (DE),A
|
||||
INC HL
|
||||
INC DE
|
||||
DJNZ .loop_ch
|
||||
;
|
||||
POP BC
|
||||
POP HL
|
||||
LD A,B
|
||||
ADD A,B
|
||||
PUSH HL
|
||||
CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE
|
||||
POP HL
|
||||
JP LP_PRINT_LINE2
|
||||
; PRINT_STR_BIG_ENDIAN:
|
||||
; ;PUSH HL
|
||||
; PUSH BC
|
||||
; LD D,H
|
||||
; LD E,L
|
||||
; INC HL
|
||||
; ;
|
||||
; .loop_ch: LD A,(DE)
|
||||
; LDI
|
||||
; LD (DE),A
|
||||
; INC HL
|
||||
; INC DE
|
||||
; DJNZ .loop_ch
|
||||
; ;
|
||||
; POP BC
|
||||
; ;POP HL
|
||||
; ;LD A,B
|
||||
; ;ADD A,B
|
||||
; ;PUSH HL
|
||||
; ;CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE
|
||||
; ;POP HL
|
||||
; JP LP_PRINT_LINE2
|
||||
;=======================================================================
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user