ATAPI media changed flag
This commit is contained in:
		
							parent
							
								
									d25dacb942
								
							
						
					
					
						commit
						82c590c8a4
					
				| @ -1 +1 @@ | ||||
| Subproject commit d21dd0c0291e48f53d40b7bd09fcb8e7756dda1e | ||||
| Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa | ||||
| @ -28,10 +28,16 @@ CD_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| 		RET	C | ||||
| 		LD	B,50 | ||||
| .loop:		PUSH	BC | ||||
| 		CALL	CD_TEST | ||||
| 		LD	HL,ATAPI_CMD_PACKET.NOP | ||||
| 		LD	DE,0	; ¬ àª¥à ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠ ¢ އ“ | ||||
| 		CALL	EXEC_PACKET_COMMAND | ||||
| 		;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE | ||||
| 		POP	BC | ||||
| 		RET	NC | ||||
| 		; | ||||
| 		CALL	CD_CHECK_MEDIA_CHANGED | ||||
| 		RET	C | ||||
| 		; | ||||
| 		EI  | ||||
| 		HALT  | ||||
| 		DJNZ  .loop | ||||
| @ -51,14 +57,6 @@ CD_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| 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' | ||||
| @ -69,28 +67,21 @@ CD_5x_GETMED:	LD	C,IDE.Device.ATAPI | ||||
| 		  CALL	CD_CHECK_MEDIA_CHANGED | ||||
| 		  JR	NC,.get_data | ||||
| 		  ; | ||||
| 		  CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		  JR	NZ,.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	A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia) | ||||
| 		  AND	%1111'1101 | ||||
| 		  LD	(IY + IDE.HDD_INIT_TABLE.RemovableMedia),A | ||||
| 		  ; | ||||
| 		  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 | ||||
| 		 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 | ||||
| @ -303,25 +294,40 @@ CD_REQUEST_SENSE: | ||||
| 		JR	EXEC_PACKET_COMMAND | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ;[ ] media changed | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_CHECK_MEDIA_CHANGED: | ||||
| 		EXX | ||||
| 		 LD	DE,256*(IDE.CtrlByte.Error) + 0 | ||||
| 		 CALL	CD_WAITPRT.Custom | ||||
| 		EXX | ||||
| 		RET	NC | ||||
| 		;RET	NC | ||||
| 		JR	C,.noWait | ||||
| 		; | ||||
| 		EXX | ||||
| 		 LD	BC,SLOT3 | ||||
| 		 IN	B,(C) | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(C),A | ||||
| 		 ; | ||||
| 		 LD	A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia) | ||||
| 		 OUT	(C),B | ||||
| 		EXX | ||||
| 		RRA | ||||
| 		RRA | ||||
| 		LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		RET | ||||
| 		; | ||||
| .noWait:	EXX | ||||
| 		 CALL	CD_GET_ERROR | ||||
| 		 OR	#70 | ||||
| 		EXX | ||||
| 		CP	BIOS.Error.ATAPI.NoSence | ||||
| 		SCF | ||||
| 		;SCF | ||||
| 		RET	NZ | ||||
| 		; | ||||
| 		CALL	CD_MEDIA_CHANGED_ERROR | ||||
| 		; CF=1 | ||||
| 		LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		; LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| @ -595,16 +601,14 @@ CD_WAITPRT:	LD	DE,256*(IDE.CtrlByte.Busy) + 0 | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_TEST:	LD	HL,ATAPI_CMD_PACKET.NOP | ||||
| 		LD	DE,0	; ¬ àª¥à ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠ ¢ އ“ | ||||
| 		JP	EXEC_PACKET_COMMAND | ||||
| ; CD_TEST:	LD	HL,ATAPI_CMD_PACKET.NOP | ||||
| ; 		LD	DE,0	; ¬ àª¥à ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠ ¢ އ“ | ||||
| ; 		JP	EXEC_PACKET_COMMAND | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_MEDIA_CHANGED_ERROR: | ||||
| 		PUSH	AF | ||||
| 		; | ||||
| 		IN	A,(SLOT3) | ||||
| 		PUSH	AF | ||||
| 		LD	A,SYS_PAGE | ||||
| @ -625,12 +629,31 @@ CD_MEDIA_CHANGED_ERROR: | ||||
| 		AND	A | ||||
| 		JR	NZ,.exit | ||||
| 		; | ||||
| 		LD	A,%0000'0011 | ||||
| 		LD	A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia) | ||||
| 		OR	%0000'0011 | ||||
| 		LD	(IY + IDE.HDD_INIT_TABLE.RemovableMedia),A | ||||
| 		; | ||||
| 		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		 | ||||
| 		; | ||||
| 		POP	AF | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .exit:		POP	AF | ||||
| 		OUT	(SLOT3),A | ||||
| 		POP	AF | ||||
| 		; CF=0 | ||||
| 		;AND	A | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
|  | ||||
| @ -523,20 +523,18 @@ WRITE_ATA_SECTORs: | ||||
| ;	B - Sector counter | ||||
| ;Return: None | ||||
| ;VERIFY	SECTOR(S) | ||||
| HDD_5x_VERIFY: | ||||
| 	PUSH	IY | ||||
| 	 SAFE_PORTY_2 | ||||
| 	PUSH	IX | ||||
| 	PUSH	HL | ||||
| 	CALL	VRS000 | ||||
| 	POP	HL | ||||
| 	POP	IX | ||||
| 	 RESTORE_PORTY | ||||
| 	POP	IY | ||||
| 	RET  | ||||
| ;[]================================================================[#54] | ||||
| HDD_5x_VERIFY:	PUSH	IY | ||||
| 		 SAFE_PORTY_2 | ||||
| 		PUSH	IX | ||||
| 		PUSH	HL | ||||
| 		CALL	.VERIFY | ||||
| 		POP	HL | ||||
| 		POP	IX | ||||
| 		 RESTORE_PORTY | ||||
| 		POP	IY | ||||
| 		RET  | ||||
| ;VERIFY	SECTOR(S) | ||||
| VRS000:		LD	C,IDE.Device.HDD | ||||
| .VERIFY:	LD	C,IDE.Device.HDD | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		RET	C | ||||
| 		EXX  | ||||
| @ -549,16 +547,17 @@ VRS000:		LD	C,IDE.Device.HDD | ||||
| 		LD	BC,IDE.Write.Command | ||||
| 		LD	A,IDE.ATA.ReadVerifySectorsWithRetry | ||||
| 		OUT	(C),A | ||||
| VRS002:		LD	BC,IDE.Read.Status | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		BIT	IDE.CtrlBit.Error,A | ||||
| 		JR	Z,VRS003 | ||||
| 		SCF  | ||||
| 		RET  | ||||
| VRS003:		CALL	WAITPRT | ||||
| 		;BIT	IDE.CtrlBit.Error,A | ||||
| 		RRA				;BIT IDE.CtrlBit.Error,A : SCF : RET NZ | ||||
| 		RET	C | ||||
| 		; | ||||
| 		CALL	WAITPRT | ||||
| 		RET	C | ||||
| 		XOR	A | ||||
| 		RET | ||||
| ;[]================================================================[#54] | ||||
| 
 | ||||
| 
 | ||||
| ; HL:IX	- LBA SECTOR | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik