новый бит в переменной HDD_INIT_TABLE.MediaParameters, мелкие правки

This commit is contained in:
Tolik 2025-06-17 05:18:11 +10:00
parent 5069c5941e
commit fddc5985b8
6 changed files with 199 additions and 168 deletions

@ -1 +1 @@
Subproject commit 63faf9f0823649cfb52e9fcaad430170a05b31a7 Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1

Binary file not shown.

View File

@ -19,6 +19,9 @@ RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16 RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16
MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254 MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254
_ZIP_WAITS_ EQU 128
ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number" ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number"
;[]================================================================[#51] ;[]================================================================[#51]
@ -93,6 +96,7 @@ ATAPI_5x_GET_PAR:
OUT (SLOT3),A OUT (SLOT3),A
; ;
; [ ] sector size. media changed ; [ ] sector size. media changed
RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
CALL ATAPI_CHECK_MEDIA_CHANGED CALL ATAPI_CHECK_MEDIA_CHANGED
EX AF,AF' EX AF,AF'
POP AF POP AF
@ -123,6 +127,10 @@ ATAPI_5x_GET_PAR:
SCF SCF
EX AF,AF' EX AF,AF'
.get_data: LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) .get_data: LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters)
AND %000'0100
CALL NZ,.RereadCapacity
;
LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters)
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
; [ ] sector size ; [ ] sector size
LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize) LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize)
@ -140,6 +148,13 @@ ATAPI_5x_GET_PAR:
LD A,BIOS.Error.ATAPI.UnitAttention ; ¥á«¨ CF, â® ­®¬¥à ®è¨¡ª¨ LD A,BIOS.Error.ATAPI.UnitAttention ; ¥á«¨ CF, â® ­®¬¥à ®è¨¡ª¨
EX AF,AF EX AF,AF
RET RET
.RereadCapacity:
EX AF,AF'
PUSH AF
CALL GET_ATAPI_CAPACITY
POP AF
EX AF,AF'
RET
;[]================================================================[#58] ;[]================================================================[#58]
@ -515,27 +530,7 @@ EXEC_PACKET_COMMAND:
RET NZ RET NZ
LD A,BIOS.Error.Failure LD A,BIOS.Error.Failure
RET RET
; ;
; .error_ex: EX DE,HL
; .error: CP #FF
; .error_fail: SCF
; LD C,A
; LD A,BIOS.Error.Failure
; RET Z
; ;
; LD A,BIOS.Error.ATAPI.UnitAttention
; CP C
; SCF
; RET Z
; ;
; LD A,BIOS.Error.ATAPI.MediumError
; CP C
; SCF
; RET Z
; ;
; LD A,BIOS.Error.Busy
; RET
;
.error_TimeOut: CP #FF .error_TimeOut: CP #FF
EX DE,HL EX DE,HL
JR Z,.error_fail JR Z,.error_fail
@ -543,10 +538,8 @@ EXEC_PACKET_COMMAND:
SCF SCF
RET RET
; ;
; .start_sys_page:
; LD A,SYS_PAGE
; EX AF,AF'
; ;
;
.start: XOR A ; ¯à¨§­ ª ⮣®, çâ® ®è¨¡ª  ᬥ­ë ­®á¨â¥«ï ¤®«¦­  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND .start: XOR A ; ¯à¨§­ ª ⮣®, çâ® ®è¨¡ª  ᬥ­ë ­®á¨â¥«ï ¤®«¦­  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND
.start_custom: EXX .start_custom: EXX
LD C,A ; ¯à¨§­ ª ⮣®, çâ® ®è¨¡ª  ᬥ­ë ­®á¨â¥«ï ¤®«¦­  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND LD C,A ; ¯à¨§­ ª ⮣®, çâ® ®è¨¡ª  ᬥ­ë ­®á¨â¥«ï ¤®«¦­  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND
@ -636,7 +629,7 @@ EXEC_PACKET_COMMAND:
EX DE,HL EX DE,HL
; ;
.AP_LOOP: ;CALL ATAPI_WAITPRT.wait_NZ .AP_LOOP: ;CALL ATAPI_WAITPRT.wait_NZ
LD B,128 LD B,_ZIP_WAITS_
DJNZ $ DJNZ $
CALL ATAPI_CHECK_DRV CALL ATAPI_CHECK_DRV
JP C,.error;_APLOOP JP C,.error;_APLOOP
@ -683,7 +676,7 @@ EXEC_PACKET_COMMAND:
JR .return_rw JR .return_rw
; ; ; ;
.END_BUFFER: ;CALL ATAPI_WAITPRT.wait_NZ .END_BUFFER: ;CALL ATAPI_WAITPRT.wait_NZ
LD B,128 LD B,_ZIP_WAITS_
DJNZ $ DJNZ $
CALL ATAPI_CHECK_DRV CALL ATAPI_CHECK_DRV
JP C,.error JP C,.error
@ -693,7 +686,7 @@ EXEC_PACKET_COMMAND:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ATAPI_IdlePasses: ATAPI_IdlePasses:
;CALL ATAPI_WAITPRT.wait_NZ ;CALL ATAPI_WAITPRT.wait_NZ
LD B,128 LD B,_ZIP_WAITS_
DJNZ $ DJNZ $
CALL ATAPI_CHECK_DRV CALL ATAPI_CHECK_DRV
JP C,EXEC_PACKET_COMMAND.error JP C,EXEC_PACKET_COMMAND.error
@ -1084,26 +1077,27 @@ ATAPI_MEDIA_ERROR:
OR %0000'0011 OR %0000'0011
LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A
; ;
;LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA CALL GET_ATAPI_CAPACITY
LD DE,SYS_PAGE.TMP_BUFFER ; LD DE,SYS_PAGE.TMP_BUFFER
;CALL EXEC_PACKET_COMMAND.start_sys_page ; CALL ATAPI_READ_CAPACITY_DATA
CALL ATAPI_READ_CAPACITY_DATA ; ;
; ; LD HL,#FFFF
LD HL,#FFFF ; LD C,BIOS.Error.ATAPI.MediumError
LD C,BIOS.Error.ATAPI.MediumError ; JR C,.No_Media
JR C,.No_Media ; ;
; ; LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high
LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high ; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H ; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L ; LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low
LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low ; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H ; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L ; LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size ; ;
; ; LD C,BIOS.Error.ATAPI.UnitAttention
LD C,BIOS.Error.ATAPI.UnitAttention ; .No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size ; LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L ; JR NC,.exit
; SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
; ;
.exit: POP AF .exit: POP AF
POP HL POP HL
@ -1132,6 +1126,34 @@ ATAPI_MEDIA_ERROR:
; ;
.unkn_error: LD C,BIOS.Error.ATAPI.MediumError .unkn_error: LD C,BIOS.Error.ATAPI.MediumError
JR .exit JR .exit
;----------------------------------------------------------------------;
GET_ATAPI_CAPACITY:
;
LD DE,SYS_PAGE.TMP_BUFFER
CALL ATAPI_READ_CAPACITY_DATA
;
LD HL,#FFFF
LD C,BIOS.Error.ATAPI.MediumError
JR C,.No_Media
;
LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L
LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size
;
LD C,BIOS.Error.ATAPI.UnitAttention
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
RET NC
SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; !!! SELECT_DRIVE ¤®«¦¥­ ®âà ¡®â âì § à ­¥¥ ; !!! SELECT_DRIVE ¤®«¦¥­ ®âà ¡®â âì § à ­¥¥

View File

@ -459,7 +459,7 @@ PARSE_IdentifyDevice:
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H
.END: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media .END: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
; [x] save hdd parameters to cmos for "setup" in settings ; [x] save hdd parameters to cmos for "setup" in settings
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM .END_2: LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM
; ;
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
@ -473,11 +473,10 @@ PARSE_IdentifyDevice:
OR (HL) OR (HL)
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
; ;
;
; ­  ¢á直© á«ãç ©
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
LD B,200 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT) LD B,200 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT)
.get_error_loop: PUSH BC .get_error_loop:
PUSH BC
;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY ;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
;CALL EXEC_PACKET_COMMAND.start ;CALL EXEC_PACKET_COMMAND.start
CALL EXEC_TEST_CMD CALL EXEC_TEST_CMD
@ -487,8 +486,23 @@ PARSE_IdentifyDevice:
CP BIOS.Error.ATAPI.UnitAttention CP BIOS.Error.ATAPI.UnitAttention
JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug
; ;
CP BIOS.Error.ATAPI.NotReady
HALT HALT
;
PUSH AF
CALL SKIPKEY
JR NC,.noSkipKey
; CF=1
LD A,#FF
LD (SKIP),A
; LD (IY+IDE.HDD_INIT_TABLE.SectorSize),A
; LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),A
SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
POP AF
SCF
JR .set_sector
.noSkipKey: POP AF
;
CP BIOS.Error.ATAPI.NotReady
JR Z,.get_error_loop JR Z,.get_error_loop
DJNZ .get_error_loop DJNZ .get_error_loop
; ;
@ -675,16 +689,15 @@ SELECT_IDE: AND A ;%0000'0011
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[v]
SKIPKEY: SKIPKEY: EXX
EXX
CALL SCANKEY CALL SCANKEY
EXX EXX
SCF ;SCF
CCF ;CCF
RET Z RET Z
EXX EXX
LD HL,#3E00 ;!HARDCODE LD HL,#3E00 ;!HARDCODE
XOR A ;XOR A
SBC HL,DE SBC HL,DE
EXX EXX
SCF SCF

View File

@ -81,18 +81,16 @@ SF_BUFF EQU 0
; D8 ; D8
; D7..D0 - ASCII code ; D7..D0 - ASCII code
WAITKEY: WAITKEY: LD HL,HOST
LD HL,HOST
LD A,(HEAD) LD A,(HEAD)
CP (HL) CP (HL)
JR Z,WAITKEY JR Z,WAITKEY
CALL GETSYM CALL GETSYM
LD A,E LD A,E
AND A ;AND A
RET RET
SCANKEY: SCANKEY: LD HL,HOST
LD HL,HOST
LD A,(HEAD) LD A,(HEAD)
CP (HL) CP (HL)
RET Z RET Z
@ -100,8 +98,7 @@ SCANKEY:
LD A,E LD A,E
RET RET
CTRLKEY: CTRLKEY: LD HL,HOST
LD HL,HOST
LD A,(HEAD) LD A,(HEAD)
CP (HL) CP (HL)
LD BC,(KEYFLAG) LD BC,(KEYFLAG)
@ -116,14 +113,9 @@ PUTSYM: LD HL,HEAD
AND #3F AND #3F
CP (HL) CP (HL)
JR Z,FULL_BF JR Z,FULL_BF
LD A,(HL) ;
INC (HL) CALL GetSymAddr
INC (HL) ;
INC (HL)
INC (HL)
RES 6,(HL)
LD L,A
LD H,high SBUF
LD (HL),E LD (HL),E
INC L INC L
LD (HL),D LD (HL),D
@ -133,11 +125,7 @@ PUTSYM: LD HL,HEAD
LD (HL),C LD (HL),C
RET RET
GETSYM: LD HL,HOST GetSymAddr: LD A,(HL)
LD A,(HEAD)
CP (HL)
RET Z
LD A,(HL)
INC (HL) INC (HL)
INC (HL) INC (HL)
INC (HL) INC (HL)
@ -145,6 +133,16 @@ GETSYM: LD HL,HOST
RES 6,(HL) RES 6,(HL)
LD L,A LD L,A
LD H,high SBUF LD H,high SBUF
RET
GETSYM: LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
AND A
;
CALL GetSymAddr
;
LD E,(HL) LD E,(HL)
INC L INC L
LD D,(HL) LD D,(HL)
@ -154,8 +152,7 @@ GETSYM: LD HL,HOST
LD C,(HL) LD C,(HL)
RET RET
FULL_BF: FULL_BF: EX AF,AF'
EX AF,AF'
BIT SF_BUFF,(IX+SOUND_K) BIT SF_BUFF,(IX+SOUND_K)
JR Z,.FBF JR Z,.FBF
EXX EXX
@ -166,8 +163,7 @@ FULL_BF:
.FBF: EX AF,AF' .FBF: EX AF,AF'
RET RET
KEYSCAN: KEYSCAN: LD IX,KEYFLAG
LD IX,KEYFLAG
RESCANN: RESCANN:
IN A,(Z84.SIO.Ch_A.Ctrl) IN A,(Z84.SIO.Ch_A.Ctrl)
AND 1 AND 1

Binary file not shown.