новый бит в переменной 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)
@ -139,7 +147,14 @@ ATAPI_5x_GET_PAR:
OUT (SLOT3),A OUT (SLOT3),A
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
@ -472,26 +472,40 @@ PARSE_IdentifyDevice:
LD HL,ICHANEL LD HL,ICHANEL
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 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
; ;
; ­  ¢á直© á«ãç © HALT
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
; ;
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 ; [ ] sector size ATAPI
.s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®áâ® ­ã¦¥­ ¡ë« ¡ãä¥à .s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®áâ® ­ã¦¥­ ¡ë« ¡ãä¥à
CALL ATAPI_READ_CAPACITY_DATA CALL ATAPI_READ_CAPACITY_DATA
@ -675,26 +689,25 @@ 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 CCF
CCF RET NZ
RET NZ ;A=0
;A=0 LD (SKIP),A
LD (SKIP),A INC A
INC A SCF
SCF RET ;ZF=0, CF=1
RET ;ZF=0, CF=1
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]

View File

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

Binary file not shown.