новый бит в переменной 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
MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254
_ZIP_WAITS_ EQU 128
ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number"
;[]================================================================[#51]
@ -93,6 +96,7 @@ ATAPI_5x_GET_PAR:
OUT (SLOT3),A
;
; [ ] sector size. media changed
RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
CALL ATAPI_CHECK_MEDIA_CHANGED
EX AF,AF'
POP AF
@ -123,6 +127,10 @@ ATAPI_5x_GET_PAR:
SCF
EX AF,AF'
.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)
; [ ] sector size
LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize)
@ -140,6 +148,13 @@ ATAPI_5x_GET_PAR:
LD A,BIOS.Error.ATAPI.UnitAttention ; ¥á«¨ CF, â® ­®¬¥à ®è¨¡ª¨
EX AF,AF
RET
.RereadCapacity:
EX AF,AF'
PUSH AF
CALL GET_ATAPI_CAPACITY
POP AF
EX AF,AF'
RET
;[]================================================================[#58]
@ -515,27 +530,7 @@ EXEC_PACKET_COMMAND:
RET NZ
LD A,BIOS.Error.Failure
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
EX DE,HL
JR Z,.error_fail
@ -543,10 +538,8 @@ EXEC_PACKET_COMMAND:
SCF
RET
;
; .start_sys_page:
; LD A,SYS_PAGE
; EX AF,AF'
;
;
.start: XOR A ; ¯à¨§­ ª ⮣®, çâ® ®è¨¡ª  ᬥ­ë ­®á¨â¥«ï ¤®«¦­  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND
.start_custom: EXX
LD C,A ; ¯à¨§­ ª ⮣®, çâ® ®è¨¡ª  ᬥ­ë ­®á¨â¥«ï ¤®«¦­  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND
@ -636,7 +629,7 @@ EXEC_PACKET_COMMAND:
EX DE,HL
;
.AP_LOOP: ;CALL ATAPI_WAITPRT.wait_NZ
LD B,128
LD B,_ZIP_WAITS_
DJNZ $
CALL ATAPI_CHECK_DRV
JP C,.error;_APLOOP
@ -683,7 +676,7 @@ EXEC_PACKET_COMMAND:
JR .return_rw
; ;
.END_BUFFER: ;CALL ATAPI_WAITPRT.wait_NZ
LD B,128
LD B,_ZIP_WAITS_
DJNZ $
CALL ATAPI_CHECK_DRV
JP C,.error
@ -693,7 +686,7 @@ EXEC_PACKET_COMMAND:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ATAPI_IdlePasses:
;CALL ATAPI_WAITPRT.wait_NZ
LD B,128
LD B,_ZIP_WAITS_
DJNZ $
CALL ATAPI_CHECK_DRV
JP C,EXEC_PACKET_COMMAND.error
@ -1084,26 +1077,27 @@ ATAPI_MEDIA_ERROR:
OR %0000'0011
LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A
;
;LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
LD DE,SYS_PAGE.TMP_BUFFER
;CALL EXEC_PACKET_COMMAND.start_sys_page
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
CALL 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
; JR NC,.exit
; SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
;
.exit: POP AF
POP HL
@ -1132,6 +1126,34 @@ ATAPI_MEDIA_ERROR:
;
.unkn_error: LD C,BIOS.Error.ATAPI.MediumError
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 ¤®«¦¥­ ®âà ¡®â âì § à ­¥¥

View File

@ -459,7 +459,7 @@ PARSE_IdentifyDevice:
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H
.END: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
; [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'
OUT (SLOT3),A
@ -473,11 +473,10 @@ PARSE_IdentifyDevice:
OR (HL)
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
;
;
; ­  ¢á直© á«ãç ©
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
LD B,200 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT)
.get_error_loop: PUSH BC
.get_error_loop:
PUSH BC
;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
;CALL EXEC_PACKET_COMMAND.start
CALL EXEC_TEST_CMD
@ -487,8 +486,23 @@ PARSE_IdentifyDevice:
CP BIOS.Error.ATAPI.UnitAttention
JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug
;
CP BIOS.Error.ATAPI.NotReady
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
DJNZ .get_error_loop
;
@ -675,16 +689,15 @@ SELECT_IDE: AND A ;%0000'0011
/////////////////////////////////////////////////////////////////////[v]
SKIPKEY:
EXX
SKIPKEY: EXX
CALL SCANKEY
EXX
SCF
CCF
;SCF
;CCF
RET Z
EXX
LD HL,#3E00 ;!HARDCODE
XOR A
;XOR A
SBC HL,DE
EXX
SCF

View File

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

Binary file not shown.