расширение функции 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 ; ]------
; _mInfoBLOCK #3E20-$,#FF
; [x]
FN_LIB:
SCF
FN_LIB: SCF
RET
//
// 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:
; LD A,#01
; AND A

View File

@ -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]

View File

@ -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

View File

@ -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
*/

View File

@ -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
/////////////////////////////////////////////////////////////////////[^]

View File

@ -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
;=======================================================================