ATAPI media change ¢த¥ OK
This commit is contained in:
		
							parent
							
								
									0749fd92b5
								
							
						
					
					
						commit
						a2022a4c6f
					
				| @ -1 +1 @@ | ||||
| Subproject commit b3224fc3afac71c6b1d461ff54049e58657bbe5a | ||||
| Subproject commit 237dd36651b4af124f12d3f1eaee3688467f8fa3 | ||||
| @ -524,15 +524,15 @@ TAB_5xFNS: | ||||
| ;-------------------------------------------------------------[ ATA #8 ] | ||||
| ; | ||||
|  DB low			FN_RESERVED_5x | ||||
|  DB low		HDD_5x_RESET | ||||
|  DB low		HDD_5x_LONG_READ | ||||
|  DB low		HDD_5x_LONG_WRITE | ||||
|  DB low		HDD_5x_VERIFY | ||||
|  DB low		HDD_5x_READ | ||||
|  DB low		HDD_5x_WRITE | ||||
|  DB low		HDD_5x_DETECT | ||||
|  DB low		HDD_5x_GET_PAR | ||||
|  DB low		HDD_5x_SET_PAR | ||||
|  DB low		ATA_5x_RESET | ||||
|  DB low		ATA_5x_LONG_READ | ||||
|  DB low		ATA_5x_LONG_WRITE | ||||
|  DB low		ATA_5x_VERIFY | ||||
|  DB low		ATA_5x_READ | ||||
|  DB low		ATA_5x_WRITE | ||||
|  DB low		ATA_5x_DETECT | ||||
|  DB low		ATA_5x_GET_PAR | ||||
|  DB low		ATA_5x_SET_PAR | ||||
| 
 | ||||
|  DB low		DRV_VERSION | ||||
|  DB low			FN_RESERVED_5x  | ||||
| @ -549,21 +549,21 @@ TAB_5xFNS: | ||||
| ;-----------------------------------------------------------[ ATAPI #C ] | ||||
| ; | ||||
|  DB low			FN_RESERVED_5x | ||||
|  DB low		CD_5x_RESET | ||||
|  DB low		CD_5x_LONG_READ | ||||
|  DB low		CD_5x_LONG_WRITE					; [ ] new  | ||||
|  DB low		ATAPI_5x_RESET | ||||
|  DB low		ATAPI_5x_LONG_READ | ||||
|  DB low		ATAPI_5x_LONG_WRITE					; [ ] new  | ||||
|  DB low			FN_ABSENT_5x	; VERIFY | ||||
|  DB low		CD_5x_READ | ||||
|  DB low		CD_5x_WRITE						; [ ] new  | ||||
|  DB low		CD_5x_DETECT | ||||
|  DB low		CD_5x_GET_PAR						; [ ] new  | ||||
|  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			FN_ABSENT_5x	; SETMED | ||||
| 
 | ||||
|  DB low		DRV_VERSION | ||||
|  DB low			FN_RESERVED_5x  | ||||
|  DB low			FN_RESERVED_5x  | ||||
|  DB low			FN_RESERVED_5x  | ||||
|  DB low		CD_5x_Extended 						;[ ] media changed? ;!TODO | ||||
|  DB low		ATAPI_5x_Extended 						;[ ] media changed? ;!TODO | ||||
|  DB low		DRV_LIST | ||||
| ;---------------------------------------------------------------------[] | ||||
| 
 | ||||
| @ -627,15 +627,15 @@ TAB_5xFNS: | ||||
| ;-------------------------------------------------------------[ ATA #8 ] | ||||
| ; | ||||
|  DB high		FN_RESERVED_5x | ||||
|  DB high	HDD_5x_RESET | ||||
|  DB high	HDD_5x_LONG_READ | ||||
|  DB high	HDD_5x_LONG_WRITE | ||||
|  DB high	HDD_5x_VERIFY | ||||
|  DB high	HDD_5x_READ | ||||
|  DB high	HDD_5x_WRITE | ||||
|  DB high	HDD_5x_DETECT | ||||
|  DB high	HDD_5x_GET_PAR | ||||
|  DB high	HDD_5x_SET_PAR | ||||
|  DB high	ATA_5x_RESET | ||||
|  DB high	ATA_5x_LONG_READ | ||||
|  DB high	ATA_5x_LONG_WRITE | ||||
|  DB high	ATA_5x_VERIFY | ||||
|  DB high	ATA_5x_READ | ||||
|  DB high	ATA_5x_WRITE | ||||
|  DB high	ATA_5x_DETECT | ||||
|  DB high	ATA_5x_GET_PAR | ||||
|  DB high	ATA_5x_SET_PAR | ||||
| 
 | ||||
|  DB high	DRV_VERSION | ||||
|  DB high		FN_RESERVED_5x  | ||||
| @ -652,21 +652,21 @@ TAB_5xFNS: | ||||
| ;-----------------------------------------------------------[ ATAPI #C ] | ||||
| ; | ||||
|  DB high		FN_RESERVED_5x | ||||
|  DB high	CD_5x_RESET | ||||
|  DB high	CD_5x_LONG_READ | ||||
|  DB high	CD_5x_LONG_WRITE	; LONG_WRITE			; [ ] new | ||||
|  DB high	ATAPI_5x_RESET | ||||
|  DB high	ATAPI_5x_LONG_READ | ||||
|  DB high	ATAPI_5x_LONG_WRITE	; LONG_WRITE			; [ ] new | ||||
|  DB high		FN_ABSENT_5x | ||||
|  DB high	CD_5x_READ | ||||
|  DB high	CD_5x_WRITE		; WRITE				; [ ] new | ||||
|  DB high	CD_5x_DETECT | ||||
|  DB high	CD_5x_GET_PAR | ||||
|  DB high	ATAPI_5x_READ | ||||
|  DB high	ATAPI_5x_WRITE		; WRITE				; [ ] new | ||||
|  DB high	ATAPI_5x_DETECT | ||||
|  DB high	ATAPI_5x_GET_PAR | ||||
|  DB high		FN_ABSENT_5x	; SETMED | ||||
| 
 | ||||
|  DB high	DRV_VERSION | ||||
|  DB high		FN_RESERVED_5x  | ||||
|  DB high		FN_RESERVED_5x  | ||||
|  DB high		FN_RESERVED_5x  | ||||
|  DB high	CD_5x_Extended | ||||
|  DB high	ATAPI_5x_Extended | ||||
|  DB high	DRV_LIST | ||||
| ;---------------------------------------------------------------------[] | ||||
| 
 | ||||
| @ -688,15 +688,15 @@ EXP_FNS_RST18: | ||||
| 	EX	(SP),HL | ||||
| 	RET | ||||
| 
 | ||||
| 	; HDD_5x_RESET | ||||
| 	; HDD_5x_LONG_READ | ||||
| 	; HDD_5x_LONG_WRITE | ||||
| 	; HDD_5x_VERIFY | ||||
| 	; HDD_5x_READ | ||||
| 	; HDD_5x_WRITE | ||||
| 	; HDD_5x_DETECT | ||||
| 	; HDD_5x_GET_PAR | ||||
| 	; HDD_5x_SET_PAR | ||||
| 	; ATA_5x_RESET | ||||
| 	; ATA_5x_LONG_READ | ||||
| 	; ATA_5x_LONG_WRITE | ||||
| 	; ATA_5x_VERIFY | ||||
| 	; ATA_5x_READ | ||||
| 	; ATA_5x_WRITE | ||||
| 	; ATA_5x_DETECT | ||||
| 	; ATA_5x_GET_PAR | ||||
| 	; ATA_5x_SET_PAR | ||||
| 	; DRV_VERSION | ||||
| 	; 	FN_RESERVED_5x  | ||||
| 	; 	FN_RESERVED_5x  | ||||
| @ -704,34 +704,34 @@ EXP_FNS_RST18: | ||||
| 	; 	FN_RESERVED_5x  | ||||
| 	; DRV_LIST | ||||
| 
 | ||||
| FN_5x_Parser_1:			 	; HDD_5x_RESET | ||||
| FN_5x_Parser_1:			 	; ATA_5x_RESET | ||||
| 	LD	C,#01 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_2:				; HDD_5x_LONG_READ | ||||
| FN_5x_Parser_2:				; ATA_5x_LONG_READ | ||||
| 	LD	C,#02 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_3:				; HDD_5x_LONG_WRITE | ||||
| FN_5x_Parser_3:				; ATA_5x_LONG_WRITE | ||||
| 	LD	C,#03 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_4:				; HDD_5x_VERIFY | ||||
| FN_5x_Parser_4:				; ATA_5x_VERIFY | ||||
| 	LD	C,#04 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_6:				; HDD_5x_WRITE | ||||
| FN_5x_Parser_6:				; ATA_5x_WRITE | ||||
| 	LD	C,#06 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_7:				; HDD_5x_DETECT | ||||
| FN_5x_Parser_7:				; ATA_5x_DETECT | ||||
| 	LD	C,#07 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_8:				; HDD_5x_GET_PAR | ||||
| FN_5x_Parser_8:				; ATA_5x_GET_PAR | ||||
| 	LD	C,#08 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_9:				; HDD_5x_SET_PAR | ||||
| FN_5x_Parser_9:				; ATA_5x_SET_PAR | ||||
| 	LD	C,#09 | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_E:				; DRV_EXTENDED | ||||
| 	LD	C,#0E | ||||
| 	JP	FN_5x_Parser  | ||||
| FN_5x_Parser_5:				; HDD_5x_READ | ||||
| FN_5x_Parser_5:				; ATA_5x_READ | ||||
| 	LD	C,5 | ||||
| FN_5x_Parser: | ||||
|         PUSH    HL | ||||
|  | ||||
| @ -23,17 +23,17 @@ MAX_DATA_PACKET_FOR_REQUEST_SENSE	EQU	254 | ||||
| 
 | ||||
| ;[]================================================================[#51] | ||||
| ;!FIXIT ᤥ« âì  áâ®ï騩 à¥á¥â | ||||
| CD_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| ATAPI_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		RET	C | ||||
| 		LD	B,50 | ||||
| .loop:		PUSH	BC | ||||
| 		CALL	EXEC_NOP_CMD | ||||
| 		CALL	EXEC_TEST_CMD | ||||
| 		;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE | ||||
| 		POP	BC | ||||
| 		RET	NC | ||||
| 		; | ||||
| 		CALL	CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		CALL	ATAPI_CHECK_MEDIA_CHANGED.noWait | ||||
| 		RET	C | ||||
| 		; | ||||
| 		EI  | ||||
| @ -55,27 +55,31 @@ CD_5x_RESET:	LD	C,IDE.Device.ATAPI | ||||
| ; [ ]	A - HDD_INIT_TABLE.MediaParameters | ||||
| ;	IF media changed | ||||
| ; [ ]	CF' = 1, A' = error number UnitAttention | ||||
| CD_5x_GET_PAR:	LD	C,IDE.Device.ATAPI | ||||
| ATAPI_5x_GET_PAR: | ||||
| 		LD	C,IDE.Device.ATAPI | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		RET	C | ||||
| 		; | ||||
| 		IN	A,(SLOT3) | ||||
| .DriveSelected:	IN	A,(SLOT3) | ||||
| 		AND	A | ||||
| 		EX	AF,AF' | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 ; | ||||
| 		 ; [ ] sector size. media changed | ||||
| 		  CALL	CD_CHECK_MEDIA_CHANGED | ||||
| 		  CALL	ATAPI_CHECK_MEDIA_CHANGED | ||||
| 		  JR	NC,.get_data | ||||
| 		  ; | ||||
| 		  CP	BIOS.Error.ATAPI.NotReady | ||||
| 		  ;LD	A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) | ||||
| 		  SCF | ||||
| 		  JR	NZ,.UnitAttention | ||||
| 		  CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		  JR	Z,.UnitAttention | ||||
| 		  ; | ||||
| 		  ;CP	BIOS.Error.ATAPI.NotReady | ||||
| 		  ;SCF | ||||
| 		  ;RET	NZ | ||||
| 		  LD	HL,#FFFF | ||||
| 		  LD	D,H | ||||
| 		  LD	E,L | ||||
| 		  SCF | ||||
| 		  RET | ||||
| 		  ; | ||||
| .UnitAttention:	  RES	1,(IY + IDE.HDD_INIT_TABLE.MediaParameters)	; [ ] removable media | ||||
| @ -115,7 +119,7 @@ CD_5x_GET_PAR:	LD	C,IDE.Device.ATAPI | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;READ SECTOR(S) | ||||
| CD_5x_READ:	EX	AF,AF' | ||||
| ATAPI_5x_READ:	EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| ;[]================================================================[#52] | ||||
| @ -129,7 +133,7 @@ CD_5x_READ:	EX	AF,AF' | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;LONG READ SECTOR(S) | ||||
| CD_5x_LONG_READ: | ||||
| ATAPI_5x_LONG_READ: | ||||
| 		AND	A | ||||
| 		; | ||||
| 		PUSH	IY | ||||
| @ -143,10 +147,10 @@ CD_5x_LONG_READ: | ||||
| 		 EX	AF,AF' | ||||
| 		CALL	RW_ATAPI_SECTORs | ||||
| 		; [ ] sector size. media changed | ||||
| 		 JP	HDD_5x_LONG_READ.shared | ||||
| 		;  JP	NC,HDD_5x_LONG_READ.shared | ||||
| 		 JP	ATA_5x_LONG_READ.shared | ||||
| 		;  JP	NC,ATA_5x_LONG_READ.shared | ||||
| 		;  CP	BIOS.Error.UnitAttention | ||||
| 		;  JR	Z,CD_MEDIA_CHANGED_ERROR | ||||
| 		;  JR	Z,ATAPI_MEDIA_ERROR | ||||
| 		;  SCF | ||||
| ;[]================================================================[#52] | ||||
| ; INPUT: | ||||
| @ -226,10 +230,9 @@ RW_ATAPI_SECTORs: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;WRITE SECTOR(S) | ||||
| CD_5x_WRITE: | ||||
| 	EX	AF,AF' | ||||
| 	 IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| ATAPI_5x_WRITE:	EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| ;[]================================================================[#53] | ||||
| ;Function: Long	Write Sectors | ||||
| ;	A - Disk | ||||
| @ -241,7 +244,7 @@ CD_5x_WRITE: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;WRITE SECTOR(S) | ||||
| CD_5x_LONG_WRITE: | ||||
| ATAPI_5x_LONG_WRITE: | ||||
| 		AND	A | ||||
| 		; | ||||
| 		PUSH	IY | ||||
| @ -255,7 +258,7 @@ CD_5x_LONG_WRITE: | ||||
| 		 EX	AF,AF' | ||||
| 		 CALL	RW_ATAPI_SECTORs | ||||
| 		; | ||||
| 		JP	HDD_5x_LONG_READ.shared | ||||
| 		JP	ATA_5x_LONG_READ.shared | ||||
| 
 | ||||
| ;[]================================================================[#57] | ||||
| ;Function: Detect Disk | ||||
| @ -263,7 +266,7 @@ CD_5x_LONG_WRITE: | ||||
| ;Return:   CF=0 - A=Drive type  | ||||
| ;		  B=MediaParameters byte ; [ ] media change | ||||
| ;	   CF=1 - drive not present, A=#02 | ||||
| ; CD_5x_DETECT:	LD	C,IDE.Device.ATAPI | ||||
| ; ATAPI_5x_DETECT:	LD	C,IDE.Device.ATAPI | ||||
| ; 		AND	%1011'1111 | ||||
| ; .shared:	LD	D,A | ||||
| ; 		LD	E,C | ||||
| @ -295,7 +298,7 @@ CD_5x_LONG_WRITE: | ||||
| ; 		LD	A,D | ||||
| ; 		LD	C,E | ||||
| ; 		CALL	SELECT_DRIVE | ||||
| ; 		CALL	CD_CHECK_MEDIA_CHANGED | ||||
| ; 		CALL	ATAPI_CHECK_MEDIA_CHANGED | ||||
| ; 		JR	NC,.exit | ||||
| ; 		POP	BC | ||||
| ; 		RET | ||||
| @ -311,8 +314,9 @@ CD_5x_LONG_WRITE: | ||||
| ;Return:   CF=0 - A=Drive type  | ||||
| ;		  B=MediaParameters byte ; [ ] media change | ||||
| ;	   CF=1 - drive not present, A=#02 | ||||
| CD_5x_DETECT:	LD	C,IDE.Device.ATAPI | ||||
| 		JP	HDD_5x_DETECT.shared | ||||
| ATAPI_5x_DETECT: | ||||
| 		LD	C,IDE.Device.ATAPI | ||||
| 		JP	ATA_5x_DETECT.shared | ||||
| ;[]================================================================[#57] | ||||
| 
 | ||||
| ;[]================================================================[#5E] | ||||
| @ -322,7 +326,7 @@ CD_5x_DETECT:	LD	C,IDE.Device.ATAPI | ||||
| ;	   B - SubFunction | ||||
| ;Return:    | ||||
| ;	    | ||||
| CD_5x_Extended: | ||||
| ATAPI_5x_Extended: | ||||
| 	LD	C,IDE.Device.ATAPI | ||||
| 	CALL	SELECT_DRIVE | ||||
| 	RET	C | ||||
| @ -331,7 +335,7 @@ CD_5x_Extended: | ||||
| 	CP	2 | ||||
| 	JR	C,TRAY_FN		; B = 0 ¨«¨ 1 | ||||
| 	; | ||||
| 	JR	Z,CD_REQUEST_SENSE	; B = 2 | ||||
| 	JR	Z,ATAPI_REQUEST_SENSE	; B = 2 | ||||
| 	; ... | ||||
| 	; ... | ||||
| 	;LD	A,#AA | ||||
| @ -342,23 +346,24 @@ CD_5x_Extended: | ||||
| 
 | ||||
| ;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API | ||||
| ; ¢å®¤:	DE -  ¤à¥á ¤«ï ¤ ëå | ||||
| CD_REQUEST_SENSE: | ||||
| ATAPI_REQUEST_SENSE: | ||||
| 		LD	HL,ATAPI_CMD_PACKET.REQUEST_SENSE | ||||
| 		JR	EXEC_PACKET_COMMAND.start | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ;[ ] media changed | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_CHECK_MEDIA_CHANGED: | ||||
| 		CALL	EXEC_NOP_CMD	;!FIXIT   ¬®¦¥â ¨ ¥  ¤® | ||||
| ATAPI_CHECK_MEDIA_CHANGED: | ||||
| 		CALL	EXEC_TEST_CMD	;!FIXIT   ¬®¦¥â ¨ ¥  ¤® | ||||
| 		RET	C | ||||
| ; .skip_nop:	EXX | ||||
| ; 		 CALL	CD_WAITPRT | ||||
| ; 		 CALL	ATAPI_WAITPRT | ||||
| ; 		EXX | ||||
| ; 		LD	A, high IDE.Read.Status | ||||
| ; 		IN	A,(low IDE.Read.Status) | ||||
| ; 		RRA | ||||
| ; 		;RET	NC | ||||
| 		JR	C,.noWait | ||||
| 		;JR	C,.noWait | ||||
| 		; | ||||
| 		EXX | ||||
| 		 LD	C,SLOT3 | ||||
| @ -375,12 +380,25 @@ CD_CHECK_MEDIA_CHANGED: | ||||
| 		RET | ||||
| 		; | ||||
| .noWait:	EXX | ||||
| 		 CALL	CD_GET_ERROR | ||||
| 		 ;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 | ||||
| 		EXX | ||||
| 		CP	BIOS.Error.ATAPI.NoSence | ||||
| 		JP	Z,CD_MEDIA_CHANGED_ERROR | ||||
| 		;SCF | ||||
| 		JP	Z,ATAPI_MEDIA_ERROR | ||||
| 		; !FIXIT ᪮॥ ¢á¥£® ¦¥«¥§® âã⠢뤠á⠢ᥣ¤  Error.ATAPI.NoSence | ||||
| 		 CP	BIOS.Error.ATAPI.NotReady | ||||
| 		 JP	Z,ATAPI_MEDIA_ERROR | ||||
| 		 CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		 JP	Z,ATAPI_MEDIA_ERROR | ||||
| 		; | ||||
| 		SCF | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| @ -420,10 +438,10 @@ EXEC_PACKET_COMMAND: | ||||
| 		LD	A,BIOS.Error.ATAPI.TimeOut | ||||
| 		SCF | ||||
| 		RET | ||||
| ; .CMD_ERROR:	 CALL	CD_GET_ERROR | ||||
| ; .CMD_ERROR:	 CALL	ATAPI_GET_ERROR | ||||
| ; 		 OR	#70 | ||||
| ; 		 CP	BIOS.Error.UnitAttention | ||||
| ; 		 CALL	Z,CD_MEDIA_CHANGED_ERROR | ||||
| ; 		 CALL	Z,ATAPI_MEDIA_ERROR | ||||
| ; 		 ;LD	BC,IDE.Read.Error	;ERROR | ||||
| ; 		 ;IN	A,(C) | ||||
| ; 		 ;RRCA  | ||||
| @ -435,7 +453,7 @@ EXEC_PACKET_COMMAND: | ||||
| ; 		RET | ||||
| 		; | ||||
| .start:		EXX  | ||||
| 		 CALL	CD_WAITPRT | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX  | ||||
| 		JR	NC,.READY | ||||
| 		; | ||||
| @ -447,10 +465,9 @@ EXEC_PACKET_COMMAND: | ||||
| .pause:		DJNZ	.pause | ||||
| 		; | ||||
| 		EXX  | ||||
| 		 CALL	CD_WAITPRT | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX | ||||
| 		JR	C,.error | ||||
| 		;JR	C,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		; | ||||
| .READY:		LD	C,SLOT3 | ||||
| 		IN	B,(C) | ||||
| @ -479,14 +496,13 @@ EXEC_PACKET_COMMAND: | ||||
| 		 LD	BC,IDE.Write.Command | ||||
| 		 LD	A,IDE.ATAPI.Packet | ||||
| 		 OUT	(C),A | ||||
| 		 CALL	CD_WAITPRT | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX  | ||||
| 		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 | ||||
| 		 CALL	ATAPI_WAITPRT.Custom | ||||
| 		EXX  | ||||
| 		JR	C,.error_TimeOut | ||||
| 		; | ||||
| @ -523,24 +539,22 @@ EXEC_PACKET_COMMAND: | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		; | ||||
| 		EXX  | ||||
| 		 CALL	CD_WAITPRT | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX  | ||||
| 		JP	C,.error | ||||
| 		; | ||||
| 		; [ ] media change.    ¤® «¨ âãâ? ;!FIXIT «ãçè¥ ¡«®ª¨à®¢ âì ®á¨â¥«ì | ||||
| 		LD	A,high IDE.Read.Status | ||||
| 		IN	A,(low IDE.Read.Status) | ||||
| 		; | ||||
| 		BIT	IDE.CtrlBit.Error,A | ||||
| 		JP	NZ,CD_CHECK_MEDIA_CHANGED.noWait | ||||
| 		; | ||||
| 		AND	IDE.CtrlByte.DataRequest | ||||
| 		RET	Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors | ||||
| 		; | ||||
| 		LD	A,XH | ||||
| 		OUT	(SLOT3),A | ||||
| 		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 =======================================; | ||||
| 	; | ||||
| 		LD	A,XH | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	DE,HL | ||||
| 		LD	BC,IDE.Read.ByteCountLow | ||||
| 		IN	E,(C) | ||||
| @ -626,21 +640,21 @@ EXEC_PACKET_COMMAND: | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_GET_ERROR:	LD	BC,IDE.Read.Error	;ERROR | ||||
| 		IN	A,(C) | ||||
| 		RRCA  | ||||
| 		RRCA  | ||||
| 		RRCA  | ||||
| 		RRCA  | ||||
| 		AND	#0F | ||||
| 		RET | ||||
| ; 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 | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; D - MASK, E - PATTERN | ||||
| CD_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| ATAPI_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| .Custom:	LD	B,100 | ||||
| 		LD	HL,#0000 | ||||
| .LOOP:		LD	A,high IDE.Read.Status | ||||
| @ -663,35 +677,35 @@ CD_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; CD_TEST:	LD	HL,ATAPI_CMD_PACKET.NOP | ||||
| ; ATAPI_TEST:	LD	HL,ATAPI_CMD_PACKET.TEST_UNIT_READY | ||||
| ; 		LD	DE,0	; ¬ àª¥à ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠ ¢ އ“ | ||||
| ; 		JP	EXEC_PACKET_COMMAND | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| CD_MEDIA_CHANGED_ERROR: | ||||
| ATAPI_MEDIA_ERROR: | ||||
| 		IN	A,(SLOT3) | ||||
| 		PUSH	AF | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	DE,SYS_PAGE.SHARED_BUFFER_256b | ||||
| 		CALL	CD_REQUEST_SENSE | ||||
| 		CALL	ATAPI_REQUEST_SENSE | ||||
| 		; | ||||
| 		LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 2)		; SenceKey. 06 - UNIT ATTENTION | ||||
| 		CP	2						; SenceKey. 02 - NOT READY | ||||
| 		JR	Z,.Not_Ready | ||||
| 		CP	6 | ||||
| 		JR	NZ,.exit | ||||
| 		JR	NZ,.unkn_error | ||||
| 		; | ||||
| 		LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 12)		; AdditionalSenceKey. #28 | ||||
| 		CP	#28		 | ||||
| 		JR	NZ,.exit | ||||
| 		JR	NZ,.unkn_error | ||||
| 		; | ||||
| 		LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 13)		; AdditionalSenseCodeQualifier. 0 | ||||
| 		AND	A | ||||
| 		JR	NZ,.exit | ||||
| 		JR	NZ,.unkn_error | ||||
| 		; | ||||
| 		LD	A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) | ||||
| 		OR	%0000'0011 | ||||
| @ -701,6 +715,7 @@ CD_MEDIA_CHANGED_ERROR: | ||||
| 		LD	DE,SYS_PAGE.TMP_BUFFER | ||||
| 		CALL	EXEC_PACKET_COMMAND.start | ||||
| 		LD	HL,#FFFF | ||||
| 		LD	C,BIOS.Error.ATAPI.MediumError | ||||
| 		JR	C,.No_Media | ||||
| 		; | ||||
| 		 LD	HL,(SYS_PAGE.TMP_BUFFER)	; media size high | ||||
| @ -711,70 +726,73 @@ CD_MEDIA_CHANGED_ERROR: | ||||
| 		 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		 | ||||
| 		; | ||||
| 		POP	AF | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,BIOS.Error.ATAPI.UnitAttention | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .Not_Ready:	POP	AF | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,BIOS.Error.ATAPI.NotReady | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .exit:		POP	AF | ||||
| 		OUT	(SLOT3),A | ||||
| 		; CF=0 | ||||
| 		;AND	A | ||||
| 		LD	A,C | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .Not_Ready:	LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 12)		; AdditionalSenceKey | ||||
| 		LD	C,BIOS.Error.ATAPI.MediumError			; ¥â ®á¨â¥«ï | ||||
| 		CP	4 | ||||
| 		JR	NZ,.exit | ||||
| 		; [ ]  !(test for ZIP) | ||||
| 		 LD	A,(SYS_PAGE.SHARED_BUFFER_256b + 13)		; AdditionalSenseCodeQualifier | ||||
| 		 CP	1 | ||||
| 		 JR	NZ,.exit | ||||
| 		; | ||||
| 		; ¨¤ñâ ¨¨æ¨ «¨§ æ¨ï | ||||
| 		LD	C,BIOS.Error.ATAPI.NotReady | ||||
| 		JR	.exit | ||||
| 		; | ||||
| .unkn_error:	LD	C,BIOS.Error.ATAPI.MediumError	 | ||||
| 		JR	.exit | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| ; SELECT_DRIVE ¤®«¦¥ ®âà ¡®â âì § à ¥¥ | ||||
| EXEC_NOP_CMD:	LD	HL,ATAPI_CMD_PACKET.NOP | ||||
| ; !!! SELECT_DRIVE ¤®«¦¥ ®âà ¡®â âì § à ¥¥ | ||||
| EXEC_TEST_CMD:	LD	HL,ATAPI_CMD_PACKET.TEST_UNIT_READY | ||||
| 		LD	DE,0	; ¬ àª¥à ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠ ¢ އ“ | ||||
| 		JP	EXEC_PACKET_COMMAND.start | ||||
| 
 | ||||
| //////////////////////////////////////////////////////////////////////// | ||||
| ATAPI_CMD_PACKET: | ||||
| .NOP:	DUP	12 | ||||
| 	 DB	#00 | ||||
| 	EDUP | ||||
| .TEST_UNIT_READY:	DUP	12 | ||||
| 			 DB	#00 | ||||
| 			EDUP | ||||
| ; | ||||
| .OPEN:	DB	#1B | ||||
| 	DB	#00,#00,#00 | ||||
| 	DB	#02 | ||||
| 	DB	#00,#00,#00,#00,#00,#00,#00 | ||||
| .OPEN:			DB	#1B | ||||
| 			DB	#00,#00,#00 | ||||
| 			DB	#02 | ||||
| 			DB	#00,#00,#00,#00,#00,#00,#00 | ||||
| ; | ||||
| .CLOSE:	DB	#1B | ||||
| 	DB	#00,#00,#00 | ||||
| 	DB	#03 | ||||
| 	DB	#00,#00,#00,#00,#00,#00,#00 | ||||
| .CLOSE:			DB	#1B | ||||
| 			DB	#00,#00,#00 | ||||
| 			DB	#03 | ||||
| 			DB	#00,#00,#00,#00,#00,#00,#00 | ||||
| ; | ||||
| .READ:	DB	#28,#00 | ||||
| 	DB	#00,#00,#00,#00	; sector dword | ||||
| 	DB	#00 | ||||
| 	DB	#00,#01,#00,#00	; counter dword | ||||
| 	DB	#00 | ||||
| .READ:			DB	#28,#00 | ||||
| 			DB	#00,#00,#00,#00	; sector dword | ||||
| 			DB	#00 | ||||
| 			DB	#00,#01,#00,#00	; counter dword | ||||
| 			DB	#00 | ||||
| ; | ||||
| .WRITE:	DB	#2E,#00 | ||||
| 	DB	#00,#00,#00,#00	; sector dword | ||||
| 	DB	#00 | ||||
| 	DB	#00,#01,#00,#00	; counter dword | ||||
| 	DB	#00 | ||||
| .WRITE:			DB	#2E,#00 | ||||
| 			DB	#00,#00,#00,#00	; sector dword | ||||
| 			DB	#00 | ||||
| 			DB	#00,#01,#00,#00	; counter dword | ||||
| 			DB	#00 | ||||
| ; | ||||
| .READ_CAPACITY_DATA: | ||||
| 	DB	#25 | ||||
| 	BLOCK	11,0 | ||||
| .READ_CAPACITY_DATA:	DB	#25 | ||||
| 			BLOCK	11,0 | ||||
| ; | ||||
| .REQUEST_SENSE: | ||||
| 	DB	#03 | ||||
| 	DB	#00,#00,#00 | ||||
| 	DB	MAX_DATA_PACKET_FOR_REQUEST_SENSE | ||||
| 	DB	#00,#00,#00,#00,#00,#00,#00 | ||||
| .REQUEST_SENSE:		DB	#03 | ||||
| 			DB	#00,#00,#00 | ||||
| 			DB	MAX_DATA_PACKET_FOR_REQUEST_SENSE | ||||
| 			DB	#00,#00,#00,#00,#00,#00,#00 | ||||
| ; | ||||
| 
 | ||||
| ATAPI_PACKET: | ||||
|  | ||||
| @ -78,7 +78,7 @@ WRITE_OUTI_DUPs	EQU	32 ; bytes | ||||
| 
 | ||||
| ;[]================================================================[#51] | ||||
| ;Function: Reset drive | ||||
| HDD_5x_RESET:                      ; !FIXIT ¥ à¥á¥â¨âáï? | ||||
| ATA_5x_RESET:                      ; !FIXIT ¥ à¥á¥â¨âáï? | ||||
| ;For non-ATAPI drives, the only method a driver has of resetting a drive | ||||
| ; after a major error is to do a "software reset" on the bus. | ||||
| ; Set bit 2 (SRST, value = 4) in the proper Control Register for the | ||||
| @ -99,7 +99,7 @@ HDD_5x_RESET:                      ; !FIXIT  | ||||
| ;      DE - Cylinders | ||||
| ;      IX - Capacity sector in bytes | ||||
| ;	B - Flags: MASTER/SLAVE, LBA/CHS | ||||
| HDD_5x_GET_PAR: | ||||
| ATA_5x_GET_PAR: | ||||
| 	LD	C,IDE.Device.HDD | ||||
| 	CALL	SELECT_DRIVE | ||||
| 	RET	C | ||||
| @ -129,7 +129,7 @@ HDD_5x_GET_PAR: | ||||
| ;      IX - Capacity sector in bytes | ||||
| ;	B - Flags | ||||
| ;Return: None | ||||
| HDD_5x_SET_PAR: | ||||
| ATA_5x_SET_PAR: | ||||
| 	LD	C,IDE.Device.HDD | ||||
| 	CALL	SELECT_DRIVE | ||||
| 	RET	C | ||||
| @ -161,7 +161,7 @@ HDD_5x_SET_PAR: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;READ SECTOR(S) | ||||
| HDD_5x_READ: | ||||
| ATA_5x_READ: | ||||
| 	EX	AF,AF' | ||||
| 	 IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| @ -177,7 +177,7 @@ HDD_5x_READ: | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;      A' - Last mem page in RAM Block used for readed data  | ||||
| ;LONG READ SECTOR(S) | ||||
| HDD_5x_LONG_READ: | ||||
| ATA_5x_LONG_READ: | ||||
| 		PUSH	IY | ||||
| 		SAFE_PORTY_2 | ||||
| 		PUSH	BC | ||||
| @ -245,7 +245,7 @@ HDD_5x_LONG_READ: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;WRITE SECTOR(S) | ||||
| HDD_5x_WRITE: | ||||
| ATA_5x_WRITE: | ||||
| 	EX	AF,AF' | ||||
| 	 IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| @ -260,7 +260,7 @@ HDD_5x_WRITE: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;WRITE SECTOR(S) | ||||
| HDD_5x_LONG_WRITE: | ||||
| ATA_5x_LONG_WRITE: | ||||
| 		PUSH	IY | ||||
| 		SAFE_PORTY_2 | ||||
| 		PUSH	BC | ||||
| @ -272,7 +272,7 @@ HDD_5x_LONG_WRITE: | ||||
| 		 EX	AF,AF' | ||||
| 		 CALL	RW_ATA_SECTORs | ||||
| 		; | ||||
| 		JP	HDD_5x_LONG_READ.shared | ||||
| 		JP	ATA_5x_LONG_READ.shared | ||||
| /* | ||||
| 		EX	DE,HL | ||||
| 		JP	C,.error | ||||
| @ -525,7 +525,7 @@ WRITE_ATA_SECTORs: | ||||
| ;	B - Sector counter | ||||
| ;Return: None | ||||
| ;VERIFY	SECTOR(S) | ||||
| HDD_5x_VERIFY:	PUSH	IY | ||||
| ATA_5x_VERIFY:	PUSH	IY | ||||
| 		 SAFE_PORTY_2 | ||||
| 		PUSH	IX | ||||
| 		PUSH	HL | ||||
| @ -671,11 +671,12 @@ WAITPRT:	LD	DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE | ||||
| 
 | ||||
| ;[]================================================================[#57] | ||||
| ;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI) | ||||
| ; [ ] media change | ||||
| ;Function: Detect Disk | ||||
| ;	   A - Disk | ||||
| ;Return:   CF=0 - A=Drive type  | ||||
| ;	   CF=1 - drive not present, A=#02 | ||||
| HDD_5x_DETECT:	LD	C,IDE.Device.HDD | ||||
| ;	   CF=1 - error | ||||
| ATA_5x_DETECT:	LD	C,IDE.Device.HDD | ||||
| .shared:	CALL	SELECT_DRIVE | ||||
| 		RET	C | ||||
| 		; | ||||
| @ -691,13 +692,13 @@ HDD_5x_DETECT:	LD	C,IDE.Device.HDD | ||||
| 		LD	A,C | ||||
| 		CP	IDE.Device.ATAPI | ||||
| 		JR	Z,.AtapiCheckMedia | ||||
| 		;!FIXIT AtaCheckMedia - ¥ ᤥ« ® | ||||
| 		;!FIXIT AtaCheckMedia - ¥ ᤥ« ® ; [ ] media change | ||||
| 		AND	A | ||||
| 		RET | ||||
| 		; | ||||
| .AtapiCheckMedia: | ||||
| 		PUSH	BC		; B - MediaParameters, C - DriveType | ||||
| 		CALL	CD_CHECK_MEDIA_CHANGED | ||||
| 		CALL	ATAPI_CHECK_MEDIA_CHANGED | ||||
| 		POP	BC		; B - MediaParameters, C - DriveType | ||||
| 		RET	C | ||||
| 		LD	A,C | ||||
|  | ||||
| @ -103,29 +103,29 @@ WAIT: | ||||
| .ERROR		EQU #0400 | ||||
|  ENDMODULE | ||||
| 
 | ||||
| WAIT_IDE	EQU	#0000 | ||||
| WAIT_SML	EQU	#1000 | ||||
| WAIT_ERROR	EQU	#0400 | ||||
| ; WAIT_IDE	EQU	#0000 | ||||
| ; WAIT_SML	EQU	#1000 | ||||
| ; WAIT_ERROR	EQU	#0400 | ||||
| 
 | ||||
| M_CYLL	EQU	#12 | ||||
| M_CYLH	EQU	#13 | ||||
| M_HEAD	EQU	#14 | ||||
| M_SECT	EQU	#15 | ||||
| ; M_CYLL	EQU	#12 | ||||
| ; M_CYLH	EQU	#13 | ||||
| ; M_HEAD	EQU	#14 | ||||
| ; M_SECT	EQU	#15 | ||||
| 
 | ||||
| S_CYLL	EQU	#16 | ||||
| S_CYLH	EQU	#17 | ||||
| S_HEAD	EQU	#18 | ||||
| S_SECT	EQU	#19 | ||||
| ; S_CYLL	EQU	#16 | ||||
| ; S_CYLH	EQU	#17 | ||||
| ; S_HEAD	EQU	#18 | ||||
| ; S_SECT	EQU	#19 | ||||
| 
 | ||||
| SM_CYLL	EQU	#37 | ||||
| SM_CYLH	EQU	#38 | ||||
| SM_HEAD	EQU	#39 | ||||
| SM_SECT	EQU	#3A | ||||
| ; SM_CYLL	EQU	#37 | ||||
| ; SM_CYLH	EQU	#38 | ||||
| ; SM_HEAD	EQU	#39 | ||||
| ; SM_SECT	EQU	#3A | ||||
| 
 | ||||
| SS_CYLL	EQU	#3B | ||||
| SS_CYLH	EQU	#3C | ||||
| SS_HEAD	EQU	#3D | ||||
| SS_SECT	EQU	#3E | ||||
| ; SS_CYLL	EQU	#3B | ||||
| ; SS_CYLH	EQU	#3C | ||||
| ; SS_HEAD	EQU	#3D | ||||
| ; SS_SECT	EQU	#3E | ||||
| 
 | ||||
|  MACRO PAUSE_DJNZ num | ||||
| 	IF num<255 | ||||
| @ -318,19 +318,19 @@ AUTODETECTING:	CALL	DETECTORS.CheckChanel | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| SETUP_FROM_CMOS: | ||||
| 	LD	A,H | ||||
| 	LD	IX,PRIM_MASTER_CMOS_T | ||||
| 	LD	IX,PRIM_MASTER_CMOS_TABLE | ||||
| 	OR	A | ||||
| 	JR	Z,.step1 | ||||
| 	; | ||||
| 	LD	IX,PRIM_SLAVE_CMOS_T | ||||
| 	LD	IX,PRIM_SLAVE_CMOS_TABLE | ||||
| 	CP	1 | ||||
| 	JR	Z,.step1 | ||||
| 	; | ||||
| 	LD	IX,SEC_MASTER_CMOS_T | ||||
| 	LD	IX,SEC_MASTER_CMOS_TABLE | ||||
| 	CP	2 | ||||
| 	JR	Z,.step1 | ||||
| 	; | ||||
| 	LD	IX,SEC_SLAVE_CMOS_T | ||||
| 	LD	IX,SEC_SLAVE_CMOS_TABLE | ||||
| .step1:	LD	HL,IDENTIFY_DEVICE_BUFFER | ||||
| 	LD	DE,IDENTIFY_DEVICE_BUFFER+1 | ||||
| 	LD	BC,511 | ||||
| @ -344,21 +344,21 @@ SETUP_FROM_CMOS: | ||||
| 	CALL	BITS_WAITS.Clear_BUSY | ||||
| 	JR	C,AUTODETECTING.IDE_ABSENT | ||||
| 	; | ||||
| .step2:	LD	A,(IX+2)	;M_HEAD | ||||
| .step2:	LD	A,(IX + IDE_CMOS_TABLE.Heads) | ||||
| 	CALL	READCMS | ||||
| 	LD	(IDENTIFY_DEVICE_BUFFER.NumHeads),A | ||||
| 	; | ||||
| 	LD	A,(IX+1)	;M_CYLH | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.CylindersHigh) | ||||
| 	CALL	READCMS | ||||
| 	PUSH	AF | ||||
| 	; | ||||
| 	LD	A,(IX+0)	;M_CYLL | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.CylindersLow) | ||||
| 	CALL	READCMS | ||||
| 	POP	HL | ||||
| 	LD	L,A | ||||
| 	LD	(IDENTIFY_DEVICE_BUFFER.NumCylinders),HL | ||||
| 	; | ||||
| 	LD	A,(IX+3)	;M_SECT | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.Sectors) | ||||
| 	CALL	READCMS | ||||
| 	LD	(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A | ||||
| 	; | ||||
| @ -445,14 +445,30 @@ IDESPEC:	IN	A,(SLOT3) | ||||
| 		OR	(HL) | ||||
| 		LD	(IY+IDE.HDD_INIT_TABLE.DRV_Flags),A | ||||
| 		;   ¢á直© á«ãç © | ||||
| 		 LD	HL,ATAPI_CMD_PACKET.REQUEST_SENSE | ||||
| 		 LD	DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224	; ¯à®á⮠㦥 ¡ë« ¡ãä¥à | ||||
| 		 LD	(IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 | ||||
| 		 ;!FIXIT ᤥ« âì æ¨ª« á® áçñâ稪®¬ | ||||
| .get_error_loop: LD	HL,ATAPI_CMD_PACKET.TEST_UNIT_READY | ||||
| 		 CALL	EXEC_PACKET_COMMAND.start | ||||
| 		 JR	NC,.s_size | ||||
| 		 ; | ||||
| 		 CP	BIOS.Error.ATAPI.NotReady | ||||
| 		 JR	Z,.get_error_loop | ||||
| 		 ; | ||||
| 		 RES	1,(IY + IDE.HDD_INIT_TABLE.MediaParameters)	; [ ] removable media | ||||
| 		 CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		 JR	Z,IDESPEC.END | ||||
| 		 ; «î¡ ï ¥¯®ïâ ï ®è¨¡ª  - ¥â ®á¨â¥«ï | ||||
| 		 SCF | ||||
| 		 JR	.set_sector | ||||
| 		 ; | ||||
| 		 ;  LD	HL,ATAPI_CMD_PACKET.REQUEST_SENSE | ||||
| 		 ;  LD	DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224	; ¯à®á⮠㦥 ¡ë« ¡ãä¥à | ||||
| 		 ;  CALL	EXEC_PACKET_COMMAND.start | ||||
| 		; [ ] sector size ATAPI | ||||
| 		 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 | ||||
| 		 LD	HL,#FFFF | ||||
| .set_sector:	 LD	HL,#FFFF | ||||
| 		 JR	C,.No_Media | ||||
| 		 ; | ||||
| 		 LD	HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224)	; media size high | ||||
| @ -465,7 +481,7 @@ IDESPEC:	IN	A,(SLOT3) | ||||
| 		 ; | ||||
| .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.MediaParameters),%0000'0001 ; !HARDCODE ATAPI ¯®ª  ¢á¥£¤  removable | ||||
| 		 ;LD	(IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 ; !HARDCODE ATAPI ¯®ª  ¢á¥£¤  removable | ||||
| 		; | ||||
| 		JR	IDESPEC.END | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| @ -624,37 +640,37 @@ SaveToCMOS: | ||||
| 	EX	AF,AF' | ||||
| 	;LD	A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	AND	%0001'0001 | ||||
| 	LD	IX,PRIM_MASTER_CMOS_T | ||||
| 	LD	IX,PRIM_MASTER_CMOS_TABLE | ||||
| 	JR	Z,.save_to_cmos | ||||
| 	; | ||||
| 	DEC	A | ||||
| 	LD	IX,SEC_MASTER_CMOS_T | ||||
| 	LD	IX,SEC_MASTER_CMOS_TABLE | ||||
| 	JR	Z,.save_to_cmos	  | ||||
| 	; | ||||
| 	CP	%0001'0000 | ||||
| 	LD	IX,SEC_SLAVE_CMOS_T | ||||
| 	LD	IX,SEC_SLAVE_CMOS_TABLE | ||||
| 	JR	Z,.save_to_cmos	 | ||||
| 	; | ||||
| 	LD	IX,PRIM_SLAVE_CMOS_T | ||||
| 	LD	IX,PRIM_SLAVE_CMOS_TABLE | ||||
| .save_to_cmos: | ||||
| 	LD	HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders) | ||||
| 	LD	B,L | ||||
| 	LD	A,(IX+0) | ||||
| 	CALL	WRITCMS			; Cylinder low | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.CylindersLow) | ||||
| 	CALL	WRITCMS | ||||
| 
 | ||||
| 	LD	B,H | ||||
| 	LD	A,(IX+1) | ||||
| 	CALL	WRITCMS			; Cylinder high | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.CylindersHigh) | ||||
| 	CALL	WRITCMS | ||||
| 
 | ||||
| 	LD	A,(IDENTIFY_DEVICE_BUFFER.NumHeads) | ||||
| 	LD	B,A | ||||
| 	LD	A,(IX+2) | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.Heads) | ||||
| 	CALL	WRITCMS			; Heads | ||||
| 
 | ||||
| 	LD	A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack) | ||||
| 	LD	B,A | ||||
| 	LD	A,(IX+3) | ||||
| 	JP	WRITCMS			; Heads	  | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.Sectors) | ||||
| 	JP	WRITCMS | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| 
 | ||||
| @ -900,16 +916,32 @@ SetUP_CHANELS: | ||||
| ; 	JP	IDE_CMD | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| 
 | ||||
| ;!FIXIT CMOS ¯¥à¥¤¥« âì ¯®¤  §¢ ¨ï ï祥ª ¨§ SP2000.inc | ||||
| PRIM_MASTER_CMOS_T: | ||||
| 	DB	M_CYLL,M_CYLH,M_HEAD,M_SECT | ||||
| PRIM_SLAVE_CMOS_T: | ||||
| 	DB	S_CYLL,S_CYLH,S_HEAD,S_SECT | ||||
| SEC_MASTER_CMOS_T: | ||||
| 	DB	SM_CYLL,SM_CYLH,SM_HEAD,SM_SECT	 | ||||
| SEC_SLAVE_CMOS_T: | ||||
| 	DB	SS_CYLL,SS_CYLH,SS_HEAD,SS_SECT | ||||
| IDE_CMOS_TABLE: | ||||
| .CylindersLow		EQU	0 | ||||
| .CylindersHigh		EQU	1 | ||||
| .Heads			EQU	2 | ||||
| .Sectors		EQU	3 | ||||
| ; | ||||
| PRIM_MASTER_CMOS_TABLE: | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriMaster.CylindersLow | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriMaster.CylindersHigh | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriMaster.Heads | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriMaster.Sectros | ||||
| PRIM_SLAVE_CMOS_TABLE: | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriSlave.CylindersLow | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriSlave.CylindersHigh | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriSlave.Heads | ||||
| 		DB	CMOS_CELL.IDE_Setup.PriSlave.Sectros | ||||
| SEC_MASTER_CMOS_TABLE: | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecMaster.CylindersLow | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecMaster.CylindersHigh | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecMaster.Heads | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecMaster.Sectros | ||||
| SEC_SLAVE_CMOS_TABLE: | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecSlave.CylindersLow | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecSlave.CylindersHigh | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecSlave.Heads | ||||
| 		DB	CMOS_CELL.IDE_Setup.SecSlave.Sectros | ||||
| 
 | ||||
| 
 | ||||
| SKIP:		BYTE #FF | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik