ещё куски для media change flag
This commit is contained in:
		
							parent
							
								
									82c590c8a4
								
							
						
					
					
						commit
						e5856eef12
					
				| @ -54,6 +54,7 @@ CD_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| ;      DE - Cylinders | ||||
| ;      IX - Capacity sector in bytes | ||||
| ;	B - Flags: MASTER/SLAVE, LBA/CHS | ||||
| ; [ ]	A - HDD_INIT_TABLE.RemovableMedia | ||||
| CD_5x_GETMED:	LD	C,IDE.Device.ATAPI | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		RET	C | ||||
| @ -79,6 +80,7 @@ CD_5x_GETMED:	LD	C,IDE.Device.ATAPI | ||||
| 		 ; 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	A,(IY+IDE.HDD_INIT_TABLE.RemovableMedia) | ||||
| 		 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 | ||||
| @ -91,7 +93,7 @@ CD_5x_GETMED:	LD	C,IDE.Device.ATAPI | ||||
| 		 LD	E,H | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		;AND	A | ||||
| 		EX	AF,AF | ||||
| 		RET  | ||||
| ;[]================================================================[#58] | ||||
| 
 | ||||
| @ -255,10 +257,32 @@ CD_5x_LONG_WRITE: | ||||
| ;	   A - Disk | ||||
| ;Return:   CF=0 - A=Drive type  | ||||
| ;	   CF=1 - drive not present, A=#02 | ||||
| CD_5x_DETECT: | ||||
| 	LD	C,IDE.Device.ATAPI | ||||
| 	AND	%1011'1111 | ||||
| 	JP	DRV_DETECT | ||||
| CD_5x_DETECT:	LD	C,IDE.Device.ATAPI | ||||
| 		AND	%1011'1111 | ||||
| 		CALL	DRV_DETECT | ||||
| 		RET	C | ||||
| 		; | ||||
| 		PUSH	AF | ||||
| 		LD	BC,SLOT3 | ||||
| 		IN	B,(C) | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(C),A | ||||
| 		INC	HL			;!HARDCODE HDD_INIT_TABLE | ||||
| 		INC	HL | ||||
| 		INC	HL | ||||
| 		LD	A,(HL) | ||||
| 		OUT	(C),B | ||||
| 		AND	%0000'0010 | ||||
| 		JR	Z,.exit | ||||
| 		; | ||||
| 		POP	AF | ||||
| 		LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .exit:		POP	AF | ||||
| 		RET | ||||
| 
 | ||||
| ;[]================================================================[#57] | ||||
| 
 | ||||
| 
 | ||||
| @ -323,11 +347,8 @@ CD_CHECK_MEDIA_CHANGED: | ||||
| 		 OR	#70 | ||||
| 		EXX | ||||
| 		CP	BIOS.Error.ATAPI.NoSence | ||||
| 		JP	Z,CD_MEDIA_CHANGED_ERROR | ||||
| 		;SCF | ||||
| 		RET	NZ | ||||
| 		; | ||||
| 		CALL	CD_MEDIA_CHANGED_ERROR | ||||
| 		; LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| @ -338,8 +359,7 @@ TRAY_FN:	LD	HL,ATAPI_CMD_PACKET.CLOSE | ||||
| 		JR	Z,EXEC_PACKET_COMMAND | ||||
| 		LD	HL,ATAPI_CMD_PACKET.OPEN | ||||
| 		;JR	EXEC_PACKET_COMMAND | ||||
| ;----------------------------------------------------------------------; | ||||
| ;----------------------------------------------------------------------; | ||||
| 		 | ||||
| ; INPUT:  HL - AP packet (12bytes) | ||||
| ;	  DE - address for/with data if needed | ||||
| ; | ||||
| @ -378,9 +398,9 @@ EXEC_PACKET_COMMAND: | ||||
| 		; | ||||
| 		EXX  | ||||
| 		 CALL	CD_WAITPRT | ||||
| 		EXX  | ||||
| 		;RET	C | ||||
| 		JR	C,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		EXX | ||||
| 		JR	C,.error | ||||
| 		;JR	C,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		; | ||||
| .READY:		LD	C,SLOT3 | ||||
| 		IN	B,(C) | ||||
| @ -413,19 +433,30 @@ EXEC_PACKET_COMMAND: | ||||
| 		 OUT	(C),A | ||||
| 		 CALL	CD_WAITPRT | ||||
| 		EXX  | ||||
| 		;RET	C | ||||
| 		JR	C,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		JR	C,.error | ||||
| 		;JR	C,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		; | ||||
| 		EXX  | ||||
| 		 LD	DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest | ||||
| 		 CALL	CD_WAITPRT.Custom | ||||
| 		EXX  | ||||
| 		BIT	IDE.CtrlBit.Error,A | ||||
| 		JR	NZ,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		JR	NC,.YEP_DRQ | ||||
| 		LD	A,BIOS.Error.ATAPI.TimeOut	;!FIXIT media change test | ||||
| 		; | ||||
| 		CP	#FF | ||||
| 		JR	Z,.error_fail | ||||
| 		; | ||||
| 		RRA					;AND IDE.CtrlByte.Error | ||||
| 		JR	C,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		; | ||||
| 		LD	A,BIOS.Error.ATAPI.TimeOut | ||||
| 		RET | ||||
| 		; | ||||
| .error:		CP	#FF | ||||
| 		SCF | ||||
| .error_fail:	LD	A,BIOS.Error.Failure | ||||
| 		RET	Z | ||||
| 		LD	A,BIOS.Error.Busy | ||||
| 		RET | ||||
| ; .CMD_ERROR:	 CALL	CD_GET_ERROR | ||||
| ; 		 OR	#70 | ||||
| ; 		 CP	BIOS.Error.UnitAttention | ||||
| @ -475,7 +506,8 @@ EXEC_PACKET_COMMAND: | ||||
| 		EXX  | ||||
| 		 CALL	CD_WAITPRT | ||||
| 		EXX  | ||||
| 		RET	C | ||||
| 		JR	C,.error | ||||
| 		; | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		BIT	IDE.CtrlBit.Error,A | ||||
| @ -575,7 +607,7 @@ CD_GET_ERROR:	LD	BC,IDE.Read.Error	;ERROR | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; D - MASK, E - PATTERN | ||||
| CD_WAITPRT:	LD	DE,256*(IDE.CtrlByte.Busy) + 0 | ||||
| CD_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| .Custom:	LD	B,100 | ||||
| 		LD	HL,#0000 | ||||
| .LOOP:		LD	A,high IDE.Read.Status | ||||
| @ -592,11 +624,8 @@ CD_WAITPRT:	LD	DE,256*(IDE.CtrlByte.Busy) + 0 | ||||
| 		DEC	H | ||||
| 		JR	NZ,.LOOP | ||||
| 		DJNZ	.LOOP | ||||
| 		; | ||||
| 		;EX	AF,AF' | ||||
| .error:		; !FIXIT error number | ||||
| 		SCF  | ||||
| 		RET  | ||||
| .error:		SCF  | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik