новый бит в переменной 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)
@ -139,7 +147,14 @@ ATAPI_5x_GET_PAR:
OUT (SLOT3),A
LD A,BIOS.Error.ATAPI.UnitAttention ; ¥á«¨ CF, â® ­®¬¥à ®è¨¡ª¨
EX AF,AF
RET
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
@ -472,26 +472,40 @@ PARSE_IdentifyDevice:
LD HL,ICHANEL
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
;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
;CALL EXEC_PACKET_COMMAND.start
CALL EXEC_TEST_CMD
POP BC
JR NC,.s_size
;
CP BIOS.Error.ATAPI.UnitAttention
JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug
;
; ­  ¢á直© á«ãç ©
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
LD B,200 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT)
.get_error_loop: PUSH BC
;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
;CALL EXEC_PACKET_COMMAND.start
CALL EXEC_TEST_CMD
POP BC
JR NC,.s_size
;
CP BIOS.Error.ATAPI.UnitAttention
JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug
;
CP BIOS.Error.ATAPI.NotReady
HALT
JR Z,.get_error_loop
DJNZ .get_error_loop
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
;
; [ ] sector size ATAPI
.s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®áâ® ­ã¦¥­ ¡ë« ¡ãä¥à
CALL ATAPI_READ_CAPACITY_DATA
@ -675,26 +689,25 @@ SELECT_IDE: AND A ;%0000'0011
/////////////////////////////////////////////////////////////////////[v]
SKIPKEY:
EXX
CALL SCANKEY
EXX
SCF
CCF
RET Z
EXX
LD HL,#3E00 ;!HARDCODE
XOR A
SBC HL,DE
EXX
SCF
CCF
RET NZ
;A=0
LD (SKIP),A
INC A
SCF
RET ;ZF=0, CF=1
SKIPKEY: EXX
CALL SCANKEY
EXX
;SCF
;CCF
RET Z
EXX
LD HL,#3E00 ;!HARDCODE
;XOR A
SBC HL,DE
EXX
SCF
CCF
RET NZ
;A=0
LD (SKIP),A
INC A
SCF
RET ;ZF=0, CF=1
/////////////////////////////////////////////////////////////////////[^]

View File

@ -81,93 +81,89 @@ SF_BUFF EQU 0
; D8
; D7..D0 - ASCII code
WAITKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
JR Z,WAITKEY
CALL GETSYM
LD A,E
AND A
RET
WAITKEY: LD HL,HOST
LD A,(HEAD)
CP (HL)
JR Z,WAITKEY
CALL GETSYM
LD A,E
;AND A
RET
SCANKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
CALL GETSYM
LD A,E
RET
SCANKEY: LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
CALL GETSYM
LD A,E
RET
CTRLKEY:
LD HL,HOST
LD A,(HEAD)
CP (HL)
LD BC,(KEYFLAG)
LD A,#00
RET Z
DEC A
RET
CTRLKEY: LD HL,HOST
LD A,(HEAD)
CP (HL)
LD BC,(KEYFLAG)
LD A,#00
RET Z
DEC A
RET
PUTSYM: LD HL,HEAD
LD A,(HOST)
SUB 4
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
LD (HL),E
INC L
LD (HL),D
INC L
LD (HL),B
INC L
LD (HL),C
RET
PUTSYM: LD HL,HEAD
LD A,(HOST)
SUB 4
AND #3F
CP (HL)
JR Z,FULL_BF
;
CALL GetSymAddr
;
LD (HL),E
INC L
LD (HL),D
INC L
LD (HL),B
INC L
LD (HL),C
RET
GETSYM: LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
LD A,(HL)
INC (HL)
INC (HL)
INC (HL)
INC (HL)
RES 6,(HL)
LD L,A
LD H,high SBUF
LD E,(HL)
INC L
LD D,(HL)
INC L
LD B,(HL)
INC L
LD C,(HL)
RET
GetSymAddr: LD A,(HL)
INC (HL)
INC (HL)
INC (HL)
INC (HL)
RES 6,(HL)
LD L,A
LD H,high SBUF
RET
FULL_BF:
EX AF,AF'
BIT SF_BUFF,(IX+SOUND_K)
JR Z,.FBF
EXX
LD DE,230
LD HL,50
CALL BEEP
EXX
.FBF: EX AF,AF'
RET
GETSYM: LD HL,HOST
LD A,(HEAD)
CP (HL)
RET Z
AND A
;
CALL GetSymAddr
;
LD E,(HL)
INC L
LD D,(HL)
INC L
LD B,(HL)
INC L
LD C,(HL)
RET
KEYSCAN:
LD IX,KEYFLAG
FULL_BF: EX AF,AF'
BIT SF_BUFF,(IX+SOUND_K)
JR Z,.FBF
EXX
LD DE,230
LD HL,50
CALL BEEP
EXX
.FBF: EX AF,AF'
RET
KEYSCAN: LD IX,KEYFLAG
RESCANN:
IN A,(Z84.SIO.Ch_A.Ctrl)
AND 1

Binary file not shown.