ATAPI media changed - 99%
This commit is contained in:
		
							parent
							
								
									65a2957424
								
							
						
					
					
						commit
						e7cb4c354f
					
				| @ -1 +1 @@ | ||||
| Subproject commit 831b2da8a66ee3bd78a7c73ef3592609e5f02902 | ||||
| Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a | ||||
| @ -556,14 +556,14 @@ TAB_5xFNS: | ||||
|  DB low		ATAPI_5x_READ | ||||
|  DB low		ATAPI_5x_WRITE						; [ ] new  | ||||
|  DB low		ATAPI_5x_DETECT | ||||
|  DB low		ATAPI_5x_GET_PAR						; [ ] new  | ||||
|  DB low		ATAPI_5x_GET_PAR					; [ ] new  | ||||
|  DB low		ATAPI_5x_SET_PAR	; SETMED | ||||
| 
 | ||||
|  DB low		DRV_VERSION | ||||
|  DB low			FN_RESERVED_5x  | ||||
|  DB low			FN_RESERVED_5x  | ||||
|  DB low			FN_RESERVED_5x  | ||||
|  DB low		ATAPI_5x_Extended 						;[ ] media changed? ;!TODO | ||||
|  DB low		ATAPI_5x_Extended 					;[ ] media changed? ;!TODO | ||||
|  DB low		DRV_LIST | ||||
| ;---------------------------------------------------------------------[] | ||||
| 
 | ||||
|  | ||||
| @ -33,8 +33,11 @@ ATAPI_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| 		POP	BC | ||||
| 		RET	NC | ||||
| 		; | ||||
| 		CALL	ATAPI_CHECK_MEDIA_CHANGED.noWait | ||||
| 		RET	C | ||||
| 		;CALL	ATAPI_CHECK_MEDIA_CHANGED.noWait | ||||
| 		;RET	C | ||||
| 		CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		SCF | ||||
| 		RET	Z | ||||
| 		; | ||||
| 		EI  | ||||
| 		HALT  | ||||
| @ -354,29 +357,32 @@ ATAPI_5x_DETECT: | ||||
| ;	   A - Disk | ||||
| ;	   B - SubFunction | ||||
| ;Return:    | ||||
| ;	    | ||||
| ; [ ] à á¯¨á âì ¢ ¤®ª¥ | ||||
| ATAPI_5x_Extended: | ||||
| 	LD	C,IDE.Device.ATAPI | ||||
| 	CALL	SELECT_DRIVE | ||||
| 	RET	C | ||||
| 	; | ||||
| 	LD	A,B | ||||
| 	CP	2 | ||||
| 	JR	C,TRAY_FN		; B = 0 ¨«¨ 1 | ||||
| 	; | ||||
| 	JR	Z,ATAPI_REQUEST_SENSE	; B = 2 | ||||
| 	; ... | ||||
| 	; ... | ||||
| 	;LD	A,#AA | ||||
| 	LD	A,BIOS.Error.InvalidSubFunction | ||||
| 	SCF | ||||
| 	RET | ||||
| 		LD	C,IDE.Device.ATAPI | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		RET	C | ||||
| 		; | ||||
| 		LD	A,B | ||||
| 		CP	2 | ||||
| 		JR	C,TRAY_FN		; B = 0 ¨«¨ 1 | ||||
| 		; | ||||
| 		JR	Z,ATAPI_REQUEST_SENSE	; B = 2 | ||||
| 		; | ||||
| 		CP	3 | ||||
| 		JR	Z,ATAPI_CUSTOM_CMD | ||||
| 		; ... | ||||
| 		LD	A,BIOS.Error.InvalidSubFunction | ||||
| 		SCF | ||||
| 		RET | ||||
| ;[]================================================================[#5E] | ||||
| 
 | ||||
| ;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API | ||||
| ; ¢å®¤:	DE -  ¤à¥á ¤«ï ¤ ëå | ||||
| ATAPI_REQUEST_SENSE: | ||||
| 		LD	HL,ATAPI_CMD_PACKET.REQUEST_SENSE | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| .FN:		LD	HL,ATAPI_CMD_PACKET.REQUEST_SENSE | ||||
| 		JR	EXEC_PACKET_COMMAND.start | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| @ -409,15 +415,7 @@ ATAPI_CHECK_MEDIA_CHANGED: | ||||
| 		RET | ||||
| 		; | ||||
| .noWait:	EXX | ||||
| 		 ;CALL	ATAPI_GET_ERROR | ||||
| 		 XOR	A			;LD	BC,IDE.Read.Error | ||||
| 		 IN	A,(IDE.Read.Error)	;IN	A,(C) | ||||
| 		 RRCA  | ||||
| 		 RRCA  | ||||
| 		 RRCA  | ||||
| 		 RRCA  | ||||
| 		 AND	#0F | ||||
| 		 OR	#70 | ||||
| 		 CALL	ATAPI_GET_ERROR_REG | ||||
| 		EXX | ||||
| 		CP	BIOS.Error.ATAPI.NoSence | ||||
| 		JP	Z,ATAPI_MEDIA_ERROR | ||||
| @ -431,6 +429,18 @@ ATAPI_CHECK_MEDIA_CHANGED: | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; HL - 㪠§ â¥«ì   ¯ ª¥âãî ª®¬ ¤ã (¯¥à¢ë© ¨«¨ ¢â®à®© á«®â) | ||||
| ; DE - 㪠§ â¥«ì   ¡ãää¥à ¤«ï ª®¬ ¤ë | ||||
| ATAPI_CUSTOM_CMD: | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,1	; ¯à¨§ ª, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï <20>… ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		JP	EXEC_PACKET_COMMAND.start_custom | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| TRAY_FN:	LD	HL,ATAPI_CMD_PACKET.CLOSE | ||||
| 		LD	DE,0	; ¬ àª¥à ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠ ¢ އ“ | ||||
| @ -441,6 +451,7 @@ TRAY_FN:	LD	HL,ATAPI_CMD_PACKET.CLOSE | ||||
| 		 | ||||
| ; INPUT:  HL - AP packet (12bytes) | ||||
| ;	  DE - address for/with data if needed | ||||
| ;	  A' -  ç «ì ï áâà ¨æ  ¤«ï R/W Long | ||||
| ; | ||||
| ; RETURN: CF - ERROR | ||||
| ;	!TODO CD ERRORS to INCLUDES | ||||
| @ -467,21 +478,14 @@ EXEC_PACKET_COMMAND: | ||||
| 		LD	A,BIOS.Error.ATAPI.TimeOut | ||||
| 		SCF | ||||
| 		RET | ||||
| ; .CMD_ERROR:	 CALL	ATAPI_GET_ERROR | ||||
| ; 		 OR	#70 | ||||
| ; 		 CP	BIOS.Error.UnitAttention | ||||
| ; 		 CALL	Z,ATAPI_MEDIA_ERROR | ||||
| ; 		 ;LD	BC,IDE.Read.Error	;ERROR | ||||
| ; 		 ;IN	A,(C) | ||||
| ; 		 ;RRCA  | ||||
| ; 		 ;RRCA  | ||||
| ; 		 ;RRCA  | ||||
| ; 		 ;RRCA  | ||||
| ; 		 ;AND	#0F | ||||
| ; 		SCF  | ||||
| ; 		RET | ||||
| 		; | ||||
| .start:		EXX  | ||||
| .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 | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX  | ||||
| 		JR	NC,.READY | ||||
| @ -515,6 +519,7 @@ EXEC_PACKET_COMMAND: | ||||
| 		; | ||||
| 		XOR	A | ||||
| 		EXX | ||||
| 		 LD	H,C	; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		 LD	BC,IDE.Write.Features | ||||
| 		 OUT	(C),A | ||||
| 		 LD	DE,MAX_ATAPI_SEC_SIZE	;SIZE BLOCK	;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥®© ª ª®©-¨¡ã¤ì | ||||
| @ -525,6 +530,7 @@ EXEC_PACKET_COMMAND: | ||||
| 		 LD	BC,IDE.Write.Command | ||||
| 		 LD	A,IDE.ATAPI.Packet | ||||
| 		 OUT	(C),A | ||||
| 		 LD	C,H	; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX  | ||||
| 		JR	C,.error | ||||
| @ -564,13 +570,14 @@ EXEC_PACKET_COMMAND: | ||||
| 		; | ||||
| 		EX	DE,HL | ||||
| .AP_LOOP:	EX	DE,HL | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		; IN	A,(SLOT3) | ||||
| 		; EX	AF,AF'		;>-----------> \ | ||||
| 		; | ||||
| 		EXX  | ||||
| 		EXX | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX  | ||||
| 		EXX | ||||
| 		JP	C,.error | ||||
| 		; | ||||
| 		; [ ] media change.    ¤® «¨ âãâ? ;!FIXIT «ãçè¥ ¡«®ª¨à®¢ âì ®á¨â¥«ì | ||||
| 		LD	A,high IDE.Read.Status | ||||
| 		IN	A,(low IDE.Read.Status) | ||||
| @ -578,10 +585,18 @@ EXEC_PACKET_COMMAND: | ||||
| 		AND	IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error | ||||
| 		RET	Z	;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors | ||||
| 		RRA		; Checking IDE.CtrlByte.CheckCondition | ||||
| 		JP	C,ATAPI_CHECK_MEDIA_CHANGED.noWait | ||||
| 	; | ||||
| 	;====== IF DATA REQUEST =======================================; | ||||
| 	; | ||||
| 		JR	NC,.data_request | ||||
| 		; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		 EXX | ||||
| 		  DEC	C	; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		 EXX | ||||
| 		 RET	Z ; ¢ë室, ¥á«¨ ®è¨¡ª  ®¡à ¡ â뢠¥âáï ¥ ¢ EXEC_PACKET_COMMAND | ||||
| 		; | ||||
| 		JP	ATAPI_CHECK_MEDIA_CHANGED.noWait | ||||
| ;====== IF DATA REQUEST ===============================================; | ||||
| .data_request:	IN	A,(SLOT3) | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		; | ||||
| 		LD	A,XH | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	DE,HL | ||||
| @ -669,14 +684,17 @@ EXEC_PACKET_COMMAND: | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; ATAPI_GET_ERROR:	XOR	A			;LD	BC,IDE.Read.Error | ||||
| ; 		IN	A,(IDE.Read.Error)	;IN	A,(C) | ||||
| ; 		RRCA  | ||||
| ; 		RRCA  | ||||
| ; 		RRCA  | ||||
| ; 		RRCA  | ||||
| ; 		AND	#0F | ||||
| ; 		RET | ||||
| ; ¯®à⨬ ⮫쪮 ॣ¨áâà AF | ||||
| ATAPI_GET_ERROR_REG: | ||||
| 		XOR	A			;LD	BC,IDE.Read.Error | ||||
| 		IN	A,(IDE.Read.Error)	;IN	A,(C) | ||||
| 		RRCA  | ||||
| 		RRCA  | ||||
| 		RRCA  | ||||
| 		RRCA  | ||||
| 		AND	#0F | ||||
| 		OR	BIOS.Error.ATAPI | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| @ -705,6 +723,45 @@ ATAPI_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; DE - buffer | ||||
| ATAPI_READ_CAPACITY_DATA: | ||||
| 		LD	BC,28	;áçñâ稪 | ||||
| 		; | ||||
| .loop:		PUSH	BC | ||||
| 		PUSH	DE | ||||
| 		LD	A,SYS_PAGE | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,1 | ||||
| 		LD	HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA | ||||
| 		CALL	EXEC_PACKET_COMMAND.start_custom | ||||
| 		POP	DE | ||||
| 		POP	BC | ||||
| 		RET	NC | ||||
| 		; | ||||
| 		CALL	ATAPI_GET_ERROR_REG | ||||
| 		CP	BIOS.Error.ATAPI.NotReady | ||||
| 		SCF | ||||
| 		RET	NZ | ||||
| 		CALL	ATAPI_MEDIA_ERROR | ||||
| 		CP	BIOS.Error.ATAPI.NotReady | ||||
| 		SCF | ||||
| 		RET	NZ | ||||
| 		; | ||||
| 		CPI | ||||
| 		RET	PO | ||||
| 		; | ||||
| 		LD	HL,0 | ||||
| .pause:		DEC	HL | ||||
| 		LD	A,H | ||||
| 		OR	L | ||||
| 		JR	NZ,.pause | ||||
| 		; | ||||
| 		JP	.loop | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; ATAPI_TEST:	LD	HL,ATAPI_CMD_PACKET.TEST_UNIT_READY | ||||
| ; 		LD	DE,0	; ¬ àª¥à ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠ ¢ އ“ | ||||
| @ -718,9 +775,9 @@ ATAPI_MEDIA_ERROR: | ||||
| 		PUSH	AF | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		EX	AF,AF'	; set page with buffer to SYS_PAGE | ||||
| 		LD	DE,SYS_PAGE.SHARED_BUFFER_256b | ||||
| 		CALL	ATAPI_REQUEST_SENSE | ||||
| 		CALL	ATAPI_REQUEST_SENSE.FN | ||||
| 		; | ||||
| 		LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 2)		; SenceKey. 06 - UNIT ATTENTION | ||||
| 		CP	2						; SenceKey. 02 - NOT READY | ||||
| @ -740,9 +797,11 @@ 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 | ||||
| 		 ;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 | ||||
|  | ||||
| @ -291,12 +291,11 @@ AUTODETECTING:	CALL	DETECTORS.CheckChanel | ||||
| .Its_ATAPI:	CALL	DETECTORS.IdentPDevChk | ||||
| 		JR	C,.IDE_ABSENT | ||||
| 		LD	A,IDE.Device.ATAPI | ||||
| 		LD	(IDEDEV),A | ||||
| 		JR	.get | ||||
| 
 | ||||
| .Its_ATA:	LD	A,IDE.Device.HDD | ||||
| 		LD	(IDEDEV),A | ||||
| .get:		CALL	GETPARAM | ||||
| .get:		LD	(IDEDEV),A | ||||
| 		CALL	GETPARAM | ||||
| 		JR	C,.IDE_ABSENT | ||||
| 		;CALL	DisableWriteCache | ||||
| 		;CALL	DisableStandBy | ||||
| @ -467,9 +466,10 @@ IDESPEC:	IN	A,(SLOT3) | ||||
| 		 ;  LD	DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224	; ¯à®á⮠㦥 ¡ë« ¡ãä¥à | ||||
| 		 ;  CALL	EXEC_PACKET_COMMAND.start | ||||
| 		; [ ] sector size ATAPI | ||||
| .s_size:	 LD	HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA | ||||
| .s_size:	 ;LD	HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA | ||||
| 		 LD	DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224	; ¯à®á⮠㦥 ¡ë« ¡ãä¥à | ||||
| 		 CALL	EXEC_PACKET_COMMAND.start | ||||
| 		 ;CALL	EXEC_PACKET_COMMAND.start_sys_page | ||||
| 		 CALL	ATAPI_READ_CAPACITY_DATA | ||||
| 		 ; | ||||
| .set_sector:	 LD	HL,#FFFF | ||||
| 		 JR	C,.No_Media | ||||
| @ -526,31 +526,27 @@ MODEL:	LD	HL,IDENTIFY_DEVICE_BUFFER.ModelNumber | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| BITS_WAITS: | ||||
| ; IN: | ||||
| ;  HL - Waiting delay | ||||
| ;  DE - MASK : PATTERN | ||||
| ; OUT: | ||||
| ;  NC: (PORT & D)-E = 0 | ||||
| ;  CF: waiting delay exceeded  | ||||
| .WAIT_PRT: | ||||
| 	LD	BC,IDE.Read.Status | ||||
| 	; | ||||
| .loop:	IN	A,(C) | ||||
| 	AND	D | ||||
| 	CP	E | ||||
| 	 RET	Z | ||||
| 	DEC	HL | ||||
| 	CALL	SKIPKEY | ||||
| 	RET	C | ||||
| 	LD	A,L | ||||
| 	OR	H | ||||
| 	JP	NZ,.loop | ||||
| 	; | ||||
| 	SCF  | ||||
| 	RET  | ||||
| 	; | ||||
| 
 | ||||
| ; Pause for clear BUSY and DATA REQUEST | ||||
| 	; IN: | ||||
| 	;  HL - Waiting delay | ||||
| 	;  DE - MASK : PATTERN | ||||
| 	; OUT: | ||||
| 	;  NC: (PORT & D)-E = 0 | ||||
| 	;  CF: waiting delay exceeded  | ||||
| .WAIT_PRT:	LD	BC,IDE.Read.Status | ||||
| .loop:		IN	A,(C) | ||||
| 		AND	D | ||||
| 		CP	E | ||||
| 		 RET	Z | ||||
| 		DEC	HL | ||||
| 		CALL	SKIPKEY | ||||
| 		RET	C | ||||
| 		LD	A,L | ||||
| 		OR	H | ||||
| 		JP	NZ,.loop | ||||
| 		SCF  | ||||
| 		RET  | ||||
| 		; | ||||
| 	; Pause for clear BUSY and DATA REQUEST | ||||
| .Clear_BUSY:	LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		;!TEST for normal bus with pull-ups | ||||
| @ -570,7 +566,6 @@ BITS_WAITS: | ||||
| 		; | ||||
| 		CALL	SKIPKEY | ||||
| 		RET	C | ||||
| 		; | ||||
| 		JR	.Clear_BUSY | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| @ -835,8 +830,6 @@ DETECTORS: | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		RRCA | ||||
| 		; RET	C | ||||
| 		; XOR	A | ||||
| 		RET | ||||
| ;-------; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik