промежуточные правки ATAPI media changed
This commit is contained in:
		
							parent
							
								
									5c47eb30d6
								
							
						
					
					
						commit
						d25dacb942
					
				| @ -1 +1 @@ | ||||
| Subproject commit 7ef1dd98b491068d5a9ded34f5ff51430b7fa7e7 | ||||
| Subproject commit d21dd0c0291e48f53d40b7bd09fcb8e7756dda1e | ||||
| @ -13,10 +13,11 @@ | ||||
| ;	[ ] ãáâ ®¢ª  ¯ à ¬¥âà  ¬ ªá¨¬ «ì®£® à §¬¥à  ¤«ï ç⥨ï ç¥à¥§ DRV_SET_PAR | ||||
| ; | ||||
| ;---------------------------------------------------------------------------------- | ||||
| MAX_ATAPI_SEC_SIZE	EQU	4096/2 | ||||
| PACKET_SIZE		EQU	12					; !FIXIT ¡à âì ¨§ IDENTIFY PACKET DEVICE | ||||
| RAM_ATAPI_PK 		EQU	SYS_PAGE.SHARED_BUFFER_32b | ||||
| RAM_ATAPI_RW_CMD	EQU	SYS_PAGE.SHARED_BUFFER_32b+16 | ||||
| MAX_ATAPI_SEC_SIZE			EQU	4096/2 | ||||
| PACKET_SIZE				EQU	12	; !FIXIT ¡à âì ¨§ IDENTIFY PACKET DEVICE | ||||
| 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 | ||||
| 
 | ||||
| 	ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number" | ||||
| 
 | ||||
| @ -47,33 +48,60 @@ CD_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| ;      DE - Cylinders | ||||
| ;      IX - Capacity sector in bytes | ||||
| ;	B - Flags: MASTER/SLAVE, LBA/CHS | ||||
| CD_5x_GETMED: | ||||
| 	LD	C,IDE.Device.ATAPI | ||||
| 	CALL	SELECT_DRIVE | ||||
| 	RET	C | ||||
| 	; [ ] sector size. media changed | ||||
| CD_5x_GETMED:	LD	C,IDE.Device.ATAPI | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		RET	C | ||||
| 		; [ ] sector size. media changed | ||||
| 		 CALL	CD_CHECK_MEDIA_CHANGED | ||||
| 		 JR	NC,.get_data | ||||
| 		 ; | ||||
| 		 CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		 JR	NZ,.get_data | ||||
| 		 ; | ||||
| 
 | ||||
| 	; | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| 	 LD	A,SYS_PAGE | ||||
| 	 OUT	(SLOT3),A | ||||
| 	 LD	HL,0 | ||||
| 	 LD	D,H | ||||
| 	 LD	L,H | ||||
| 	 ; LD	L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) | ||||
| 	 ; LD	H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) | ||||
| 	 ; LD	E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) | ||||
| 	 ; LD	D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) | ||||
| 	 LD	B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	 LD	A,(IY+IDE.HDD_INIT_TABLE.SectorSize)			;[ ]sector size | ||||
| 	 LD	XL,A | ||||
| 	 LD	A,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1)		;[ ]sector size | ||||
| 	 LD	XH,A | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	;AND	A | ||||
| 	RET  | ||||
| 		; | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 ; | ||||
| 		 ; [ ] sector size. media changed | ||||
| 		  CALL	CD_CHECK_MEDIA_CHANGED | ||||
| 		  JR	NC,.get_data | ||||
| 		  ; | ||||
| 		  CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		  JR	NZ,.get_data | ||||
| 		  ; | ||||
| 		  LD	HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA | ||||
| 		  LD	DE,SYS_PAGE.TMP_BUFFER | ||||
| 		  CALL	EXEC_PACKET_COMMAND | ||||
| 		  LD	HL,#FFFF | ||||
| 		  JR	C,.No_Media | ||||
| 		  ; | ||||
| 		  LD	HL,(SYS_PAGE.TMP_BUFFER + 6)	; sector size (high byte, low byte) | ||||
| 		  ; | ||||
| .No_Media:	  LD	(IY+IDE.HDD_INIT_TABLE.SectorSize),H			;[ ]sector size | ||||
| 		  LD	(IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L		;[ ]sector size | ||||
| 		; | ||||
| .get_data:	 ; | ||||
| 		 ; LD	L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) | ||||
| 		 ; LD	H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber) | ||||
| 		 ; LD	E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow) | ||||
| 		 ; LD	D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh) | ||||
| 		 LD	B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 		 LD	L,(IY+IDE.HDD_INIT_TABLE.SectorSize)			;[ ]sector size | ||||
| 		 LD	H,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1)		;[ ]sector size | ||||
| 		 EX	DE,HL | ||||
| 		 LD	XL,E | ||||
| 		 LD	XH,D | ||||
| 		 ; | ||||
| 		 LD	HL,0 | ||||
| 		 LD	D,H | ||||
| 		 LD	E,H | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		;AND	A | ||||
| 		RET  | ||||
| ;[]================================================================[#58] | ||||
| 
 | ||||
| ;!TODO | ||||
| @ -115,9 +143,7 @@ CD_5x_LONG_READ: | ||||
| 		 EX	AF,AF' | ||||
| 		  AND	A	;read | ||||
| 		 EX	AF,AF' | ||||
| 		 ld | ||||
| 		 ; ¯à®¢¥à¨âì .RemovableMedia bit, ¥á«¨ ãáâ ®¢«¥, â® ¯à®¯ã᪠RW_ATAPI_SECTORs | ||||
| 		CALL	NC,RW_ATAPI_SECTORs | ||||
| 		CALL	RW_ATAPI_SECTORs | ||||
| 		; [ ] sector size. media changed | ||||
| 		 JP	HDD_5x_LONG_READ.shared | ||||
| 		;  JP	NC,HDD_5x_LONG_READ.shared | ||||
| @ -146,6 +172,11 @@ RW_ATAPI_SECTORs: | ||||
| 		 PUSH	BC | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(C),A | ||||
| 		 ; [ ] media change | ||||
| 		  LD	A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia) | ||||
| 		  AND	%0000'0010 | ||||
| 		  JR	NZ,.error_media | ||||
| 		 ; | ||||
| 		 LD	HL,ATAPI_CMD_PACKET.READ | ||||
| 		 EX	AF,AF' | ||||
| 		  JR	NC,.read_cmd | ||||
| @ -175,10 +206,16 @@ RW_ATAPI_SECTORs: | ||||
| 		LD	HL,RAM_ATAPI_RW_CMD | ||||
| 		CALL	EXEC_PACKET_COMMAND | ||||
| 		; | ||||
| 		POP	BC | ||||
| .exit:		POP	BC | ||||
| 		;LD	C,SLOT3 | ||||
| 		OUT	(C),B | ||||
| 		RET | ||||
| 		; | ||||
| .error_media:	EXX | ||||
| 		LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		SCF | ||||
| 		JR	.exit | ||||
| 
 | ||||
| ;[]===========================================================[#52, #55] | ||||
| 
 | ||||
| ;[]================================================================[#56] | ||||
| @ -218,10 +255,7 @@ CD_5x_LONG_WRITE: | ||||
| 		 EX	AF,AF' | ||||
| 		  SCF		;write | ||||
| 		 EX	AF,AF' | ||||
| 		 ; | ||||
| 		 ld | ||||
| 		 ; ¯à®¢¥à¨âì .RemovableMedia bit, ¥á«¨ ãáâ ®¢«¥, â® ¯à®¯ã᪠RW_ATAPI_SECTORs | ||||
| 		 CALL	NC,RW_ATAPI_SECTORs | ||||
| 		 CALL	RW_ATAPI_SECTORs | ||||
| 		; | ||||
| 		JP	HDD_5x_LONG_READ.shared | ||||
| 
 | ||||
| @ -238,6 +272,7 @@ CD_5x_DETECT: | ||||
| 
 | ||||
| 
 | ||||
| ;[]================================================================[#5E] | ||||
| ; [ ] | ||||
| ;Function: Extended | ||||
| ;	   A - Disk | ||||
| ;	   B - SubFunction | ||||
| @ -250,7 +285,9 @@ CD_5x_Extended: | ||||
| 	; | ||||
| 	LD	A,B | ||||
| 	CP	2 | ||||
| 	JR	C,TRAY_FN | ||||
| 	JR	C,TRAY_FN		; B = 0 ¨«¨ 1 | ||||
| 	; | ||||
| 	JR	Z,CD_REQUEST_SENSE	; B = 2 | ||||
| 	; ... | ||||
| 	; ... | ||||
| 	;LD	A,#AA | ||||
| @ -259,6 +296,34 @@ CD_5x_Extended: | ||||
| 	RET | ||||
| ;[]================================================================[#5E] | ||||
| 
 | ||||
| ;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API | ||||
| ; ¢å®¤:	DE -  ¤à¥á ¤«ï ¤ ëå | ||||
| CD_REQUEST_SENSE: | ||||
| 		LD	HL,ATAPI_CMD_PACKET.REQUEST_SENSE | ||||
| 		JR	EXEC_PACKET_COMMAND | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_CHECK_MEDIA_CHANGED: | ||||
| 		EXX | ||||
| 		 LD	DE,256*(IDE.CtrlByte.Error) + 0 | ||||
| 		 CALL	CD_WAITPRT.Custom | ||||
| 		EXX | ||||
| 		RET	NC | ||||
| 		; | ||||
| .noWait:	EXX | ||||
| 		 CALL	CD_GET_ERROR | ||||
| 		 OR	#70 | ||||
| 		EXX | ||||
| 		CP	BIOS.Error.ATAPI.NoSence | ||||
| 		SCF | ||||
| 		RET	NZ | ||||
| 		; | ||||
| 		CALL	CD_MEDIA_CHANGED_ERROR | ||||
| 		; CF=1 | ||||
| 		LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| TRAY_FN:	LD	HL,ATAPI_CMD_PACKET.CLOSE | ||||
| @ -266,9 +331,8 @@ TRAY_FN:	LD	HL,ATAPI_CMD_PACKET.CLOSE | ||||
| 		DEC	A | ||||
| 		JR	Z,EXEC_PACKET_COMMAND | ||||
| 		LD	HL,ATAPI_CMD_PACKET.OPEN | ||||
| 		JR	EXEC_PACKET_COMMAND | ||||
| 		;JR	EXEC_PACKET_COMMAND | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; INPUT:  HL - AP packet (12bytes) | ||||
| ;	  DE - address for/with data if needed | ||||
| @ -312,10 +376,7 @@ EXEC_PACKET_COMMAND: | ||||
| 		;RET	C | ||||
| 		JR	C,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		; | ||||
| .READY:		CALL	CD_CHECK_MEDIA_CHANGED | ||||
| 		RET	C | ||||
| 		; | ||||
| 		LD	C,SLOT3 | ||||
| .READY:		LD	C,SLOT3 | ||||
| 		IN	B,(C) | ||||
| 		PUSH	DE | ||||
| 		PUSH	BC | ||||
| @ -356,7 +417,7 @@ EXEC_PACKET_COMMAND: | ||||
| 		BIT	IDE.CtrlBit.Error,A | ||||
| 		JR	NZ,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		JR	NC,.YEP_DRQ | ||||
| 		LD	A,BIOS.Error.TimeOut	;!FIXIT media change test | ||||
| 		LD	A,BIOS.Error.ATAPI.TimeOut	;!FIXIT media change test | ||||
| 		RET | ||||
| 		; | ||||
| ; .CMD_ERROR:	 CALL	CD_GET_ERROR | ||||
| @ -412,7 +473,7 @@ EXEC_PACKET_COMMAND: | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		BIT	IDE.CtrlBit.Error,A | ||||
| 		JR	NZ,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		JP	NZ,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		; | ||||
| 		AND	IDE.CtrlByte.DataRequest | ||||
| 		RET	Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors | ||||
| @ -539,54 +600,41 @@ CD_TEST:	LD	HL,ATAPI_CMD_PACKET.NOP | ||||
| 		JP	EXEC_PACKET_COMMAND | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API | ||||
| ; ¢å®¤:	DE -  ¤à¥á ¤«ï ¤ ëå | ||||
| CD_REQUEST_SENSE: | ||||
| 		LD	HL,ATAPI_CMD_PACKET.REQUEST_SENSE | ||||
| 		JP	EXEC_PACKET_COMMAND | ||||
| 		ld | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_MEDIA_CHANGED_ERROR: | ||||
| 		PUSH	AF | ||||
| 		; | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF | ||||
| 		PUSH	AF | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	A,%0000'0011 | ||||
| 		LD	(IY + HDD_INIT_TABLE.RemovableMedia),A | ||||
| 		LD	DE,SYS_PAGE.SHARED_BUFFER_256b | ||||
| 		CALL	CD_REQUEST_SENSE | ||||
| 		; | ||||
| 		EX	AF,AF | ||||
| 		LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 2)		; SenceKey. 06 | ||||
| 		CP	6 | ||||
| 		JR	NZ,.exit | ||||
| 		; | ||||
| 		LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 12)		; AdditionalSenceKey. #28 | ||||
| 		CP	#28		 | ||||
| 		JR	NZ,.exit | ||||
| 		; | ||||
| 		LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 13)		; AdditionalSenseCodeQualifier. 0 | ||||
| 		AND	A | ||||
| 		JR	NZ,.exit | ||||
| 		; | ||||
| 		LD	A,%0000'0011 | ||||
| 		LD	(IY + IDE.HDD_INIT_TABLE.RemovableMedia),A | ||||
| 		; | ||||
| .exit:		POP	AF | ||||
| 		OUT	(SLOT3),A | ||||
| 		POP	AF | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_CHECK_MEDIA_CHANGED: | ||||
| 		EXX | ||||
| 		 LD	DE,256*(IDE.CtrlByte.Error) + 0 | ||||
| 		 CALL	CD_WAITPRT.Custom | ||||
| 		EXX | ||||
| 		RET	NC | ||||
| 		; | ||||
| .noWait:	EXX | ||||
| 		 CALL	CD_GET_ERROR | ||||
| 		 OR	#70 | ||||
| 		EXX | ||||
| 		CP	BIOS.Error.UnitAttention | ||||
| 		SCF | ||||
| 		RET	NZ | ||||
| 		; | ||||
| 		CALL	CD_MEDIA_CHANGED_ERROR | ||||
| 		; CF=1 | ||||
| 		LD	A,BIOS.Error.UnitAttention | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////////////////////////////////////////////// | ||||
| ATAPI_CMD_PACKET: | ||||
|  | ||||
| @ -440,7 +440,6 @@ IDESPEC:	IN	A,(SLOT3) | ||||
| 		OR	(HL) | ||||
| 		LD	(IY+IDE.HDD_INIT_TABLE.DRV_Flags),A | ||||
| 		; | ||||
| 		ld | ||||
| 		; [ ] sector size ATAPI | ||||
| 		 LD	HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA | ||||
| 		 LD	DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224	; ¯à®á⮠㦥 ¡ë« ¡ãä¥à   8 ¡ ©â®¢ | ||||
| @ -448,12 +447,9 @@ IDESPEC:	IN	A,(SLOT3) | ||||
| 		 LD	HL,#FFFF | ||||
| 		 JR	C,.No_Media | ||||
| 		 ; | ||||
| 		 LD	A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6)	; sector size high | ||||
| 		 LD	H,A | ||||
| 		 LD	A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 7)	; sector size low | ||||
| 		 LD	L,A | ||||
| .No_Media:	 LD	(IY+IDE.HDD_INIT_TABLE.SectorSize),L | ||||
| 		 LD	(IY+IDE.HDD_INIT_TABLE.SectorSize + 1),H | ||||
| 		 LD	HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6)	; sector size high | ||||
| .No_Media:	 LD	(IY+IDE.HDD_INIT_TABLE.SectorSize),H | ||||
| 		 LD	(IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L | ||||
| 		 LD	(IY+IDE.HDD_INIT_TABLE.RemovableMedia),%0000'0001 ; !HARDCODE ATAPI ¯®ª  ¢á¥£¤  removable | ||||
| 		; | ||||
| 		JR	IDESPEC.END | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik