...
This commit is contained in:
		
							parent
							
								
									4a3574fe3f
								
							
						
					
					
						commit
						2d3dca1109
					
				| @ -1 +1 @@ | ||||
| Subproject commit 8371051031cac61e25740ba6cf9f2acacdc783b7 | ||||
| Subproject commit 72b28f7d64cd4f263ed0e23acbe8f1eb254b1f7f | ||||
| @ -1,12 +1,18 @@ | ||||
| ; | ||||
|  MACRO WAIT_HDD | ||||
| 	LD BC,IDE.Read.Status	 | ||||
| .loop:	IN A,(C) | ||||
| 	BIT IDE.CtrlBit.Busy,A | ||||
| 	JR NZ,.loop | ||||
|  ENDM | ||||
| ;  MACRO WAIT_HDD | ||||
| ; 	LD BC,IDE.Read.Status	 | ||||
| ; .loop:	IN A,(C) | ||||
| ; 	BIT IDE.CtrlBit.Busy,A | ||||
| ; 	JR NZ,.loop | ||||
| ;  ENDM | ||||
| ;______________________________________________________________________: | ||||
| ; | ||||
| F4x_WAIT_HDD:	LD	BC,IDE.Read.Status	 | ||||
| .loop:		IN	A,(C) | ||||
| 		BIT	IDE.CtrlBit.Busy,A | ||||
| 		RET	Z | ||||
| 		JR .loop | ||||
| 
 | ||||
| 
 | ||||
| ; GET_BPB_OFFSET: | ||||
| ; 	;LD A,SYS_PAGE | ||||
| @ -91,23 +97,14 @@ HD_PREPARE: | ||||
| 	LD A,B | ||||
| 	LD BC,IDE.Write.Counter						; “áâ ®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨ | ||||
| 	OUT (C),A | ||||
| 
 | ||||
|  IF IDE_Optimization | ||||
| 	; | ||||
|  	INC C | ||||
| 	OUT (C),L | ||||
| 	INC C | ||||
| 	OUT (C),E | ||||
| 	INC C | ||||
| 	OUT (C),D | ||||
|  ELSE | ||||
| 	LD BC,IDE.Write.Sector | ||||
| 	OUT (C),L							; ‘…Š’Ž<E28099> | ||||
| 	LD BC,IDE.Write.CylinderLow | ||||
| 	INC C | ||||
| 	OUT (C),E							; ¤®à®¦ª  low | ||||
| 	LD BC,IDE.Write.CylinderHigh | ||||
| 	INC C | ||||
| 	OUT (C),D							; ¤®à®¦ª  high | ||||
|  ENDIF | ||||
| 
 | ||||
| 	; | ||||
| 	LD BC,IDE.Read.Control | ||||
| 	IN A,(C) | ||||
| 	AND #F0								; !!!!!  ¯®á¬®âà¥âì | ||||
| @ -132,7 +129,6 @@ NEXT_ADD_SEC: | ||||
| 	LD BC,IDE.Write.Counter						; “áâ ®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨ | ||||
| 	OUT (C),A | ||||
| 
 | ||||
|  IF IDE_Optimization | ||||
| 	DEC B | ||||
| 	INC C | ||||
| 	IN A,(C)							; IDE.Read.Sector | ||||
| @ -156,29 +152,7 @@ NEXT_ADD_SEC: | ||||
| 
 | ||||
| 	LD BC,IDE.Read.Control | ||||
| 	IN A,(C) | ||||
|  ELSE | ||||
| 	LD BC,IDE.Read.Sector | ||||
| 	IN A,(C) | ||||
| 	ADC A,E | ||||
| 	INC B | ||||
| 	OUT (C),A							; IDE.Write.Sector | ||||
| 
 | ||||
| 	LD BC,IDE.Read.CylinderLow | ||||
| 	IN A,(C) | ||||
| 	ADC A,D | ||||
| 	INC B | ||||
| 	OUT (C),A							; IDE.Write.CylinderLow | ||||
| 
 | ||||
| 	LD BC,IDE.Read.CylinderHigh | ||||
| 	IN A,(C) | ||||
| 	ADC A,0 | ||||
| 	INC B | ||||
| 	OUT (C),A							; IDE.Write.CylinderHigh | ||||
| 
 | ||||
| 	LD BC,IDE.Read.Control | ||||
| 	IN A,(C) | ||||
|  ENDIF | ||||
| 
 | ||||
| 	; | ||||
| 	LD D,A | ||||
| 	ADC A,0 | ||||
| 	AND #0F | ||||
| @ -278,7 +252,7 @@ FN_HDD_READ: | ||||
| 	LD BC,IDE.Write.Command | ||||
| 	LD A,IDE.CMD.ATA.ReadSectorsWithRetry | ||||
| 	OUT (C),A | ||||
| .L2:	WAIT_HDD | ||||
| .L2:	CALL	F4x_WAIT_HDD | ||||
| 	;BIT IDE.CtrlBit.DataRequest,A | ||||
| 	AND IDE.CtrlByte.DataRequest | ||||
| 	JR Z,.RET_PortY | ||||
| @ -352,7 +326,7 @@ FN_HDD_WRITE: | ||||
| 	OUT	(C),A | ||||
| 
 | ||||
| HD_WR_L2: | ||||
| 	WAIT_HDD | ||||
| 	CALL	F4x_WAIT_HDD | ||||
| 
 | ||||
| 	BIT IDE.CtrlBit.DataRequest,A | ||||
| 	JR Z,HD_RET | ||||
| @ -511,11 +485,9 @@ FN_HDD_TEST_IDE: | ||||
| ;-----------------------------------[DIFFERENT] | ||||
| ; <20>¥ ¤®«¦  ¯®àâ¨âì ॣ¨áâà E!!! | ||||
| TEST_HDD_DRV: | ||||
| ; EXP_HDD.ASM variant | ||||
| 	LD HL,#01FE | ||||
| 	LD BC,IDE.Write.Counter | ||||
| 	OUT (C),L | ||||
|  IF IDE_Optimization | ||||
| 	INC C | ||||
| 	OUT (C),H							; IDE.Write.Sector | ||||
| 	; | ||||
| @ -525,15 +497,6 @@ TEST_HDD_DRV: | ||||
| 	CP L | ||||
| 	RET NZ | ||||
| 	INC C | ||||
|  ELSE | ||||
| 	LD BC,IDE.Write.Sector | ||||
| 	OUT (C),H | ||||
| 	LD BC,IDE.Read.Counter | ||||
| 	IN A,(C) | ||||
| 	CP L | ||||
| 	RET NZ | ||||
| 	LD BC,IDE.Read.Sector | ||||
|  ENDIF | ||||
| 	IN A,(C)							; IDE.Read.Sector | ||||
| 	CP H | ||||
| 	RET | ||||
| @ -543,26 +506,15 @@ TEST_HDD_DRV: | ||||
| ; 	LD	HL,#00FF | ||||
| ; 	LD	BC,IDE.Write.CylinderLow | ||||
| ; 	OUT	(C),L | ||||
| ;  IF IDE_Optimization | ||||
| ; 	INC C | ||||
| ; 	INC	C | ||||
| ; 	OUT	(C),H				; IDE.Write.CylinderHigh | ||||
| 					 | ||||
| ; 	INC B | ||||
| ; 	DEC C | ||||
| ; 	INC	B | ||||
| ; 	DEC	C | ||||
| ; 	IN	A,(C)				; ’ãâ ॣ¨áâà BC = #0254 - .CylinderLow | ||||
| ; 	CP	L | ||||
| ; 	RET	NZ | ||||
| ; 	INC C | ||||
| 
 | ||||
| ;  ELSE | ||||
| ; 	LD	BC,IDE.Write.CylinderHigh | ||||
| ; 	OUT	(C),H | ||||
| ; 	LD	BC,#0254 | ||||
| ; 	IN	A,(C) | ||||
| ; 	CP	L | ||||
| ; 	RET	NZ | ||||
| ; 	LD	BC,#0255 | ||||
| ;  ENDIF | ||||
| ; 	INC	C | ||||
| 
 | ||||
| ; 	IN	A,(C)				; ’ãâ ॣ¨áâà BC = #0255 - .CylinderHigh | ||||
| ; 	CP	H | ||||
| @ -647,11 +599,11 @@ FN_HDD_INIT: | ||||
| 	; CALL	TEST_HDD_DRV | ||||
| 	; JR	NZ,.ABSENT | ||||
| 	; | ||||
| .L3:	WAIT_HDD | ||||
| .L3:	CALL	F4x_WAIT_HDD | ||||
| 	LD	BC,IDE.Write.Command | ||||
| 	LD	A,IDE.CMD.ATA.IdentifyDevice	;!FIXIT ¯¥à¥¤¥« âì | ||||
| 	OUT	(C),A | ||||
| 	WAIT_HDD | ||||
| 	CALL	F4x_WAIT_HDD | ||||
| 	AND	IDE.CtrlByte.DataRequest | ||||
| 	;JR	NZ,.L2 | ||||
| 	SCF  | ||||
| @ -689,7 +641,7 @@ FN_HDD_INIT: | ||||
| 	DEC	A | ||||
| 	JR	NZ,.loop | ||||
| 	LD	(SYS_PAGE.HD_IDF_ADR.sec_cyl),HL | ||||
| 	WAIT_HDD | ||||
| 	CALL	F4x_WAIT_HDD | ||||
| 	LD	BC,IDE.Read.Control | ||||
| 	IN	A,(C) | ||||
| 	AND	#10 | ||||
|  | ||||
| @ -138,7 +138,14 @@ WAIT: | ||||
|  ENDM | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| START:	;CALL	Nop_CHANELS | ||||
| START:	; reset all | ||||
| 	LD	A,IDE.Chanel.Primary | ||||
| 	OUT	(IDE.Chanel.Set),A | ||||
| 	CALL	RESET_IDE_CHANEL | ||||
| 	LD	A,IDE.Chanel.Secondary	 ;SELECT SECONDARY | ||||
| 	OUT	(IDE.Chanel.Set),A | ||||
| 	CALL	RESET_IDE_CHANEL | ||||
| 	; | ||||
| 	; | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| @ -177,26 +184,33 @@ START:	;CALL	Nop_CHANELS | ||||
| 	;RET | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| RESET_IDE_CHANEL: | ||||
| 	LD	BC,IDE.Write.DeviceControl | ||||
| 	LD	A,IDE.DeviceControlByte.setReset | ||||
| 	OUT	(C),A | ||||
| 	DJNZ	$ | ||||
| 	LD	B,high IDE.Write.DeviceControl | ||||
| 	LD	A,IDE.DeviceControlByte.resReset | ||||
| 	OUT	(C),A | ||||
| 	RET | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| AUTODETECT: | ||||
| 	LD	A,L		;DETECT	MESSAGE | ||||
| 	CALL	POSTMSG | ||||
| 	CALL	ScreenPOS.SUBNAME | ||||
| 	LD	A,(MasterSlave) | ||||
| 	; | ||||
| 	CALL	AUTODETECTING | ||||
| .IDEJUMPBACK: | ||||
| 	CALL	NC,PRINT_IDE_MODEL | ||||
| 	LD	A,(SKIP) | ||||
| 	INC	A | ||||
| 	LD	A,msgStrings.ideNone | ||||
| 	JR	Z,.NOSKIPKEY | ||||
| 	LD	A,msgStrings.ideSkiped | ||||
| .NOSKIPKEY: | ||||
| 	CALL	C,POSTMSG | ||||
| 	CALL	ScreenPOS.CRLF | ||||
| 	RET | ||||
| AUTODETECT:	LD	A,L		;DETECT	MESSAGE | ||||
| 		CALL	POSTMSG | ||||
| 		CALL	ScreenPOS.SUBNAME | ||||
| 		LD	A,(MasterSlave) | ||||
| 		CALL	AUTODETECTING | ||||
| .IDEJUMPBACK:	CALL	NC,PRINT_IDE_MODEL | ||||
| 		LD	A,(SKIP) | ||||
| 		INC	A | ||||
| 		LD	A,msgStrings.ideNone | ||||
| 		JR	Z,.NOSKIPKEY | ||||
| 		LD	A,msgStrings.ideSkiped | ||||
| .NOSKIPKEY:	CALL	C,POSTMSG | ||||
| 		CALL	ScreenPOS.CRLF | ||||
| 		RET | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| 
 | ||||
| @ -265,7 +279,20 @@ IT_IS_ATAPI: | ||||
| 
 | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| AUTODETECTING:	CALL	DETECTORS.CheckChanel | ||||
| SEND_NOP:	XOR	A | ||||
| 		LD	BC,IDE.Write.Features | ||||
| 		OUT	(C),A | ||||
| 		LD	BC,IDE.Write.Command | ||||
| 		LD	E,IDE.CMD.ATA.Nop | ||||
| 		OUT	(C),E | ||||
| 		PAUSE_DJNZ 32 | ||||
| 		RET | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| AUTODETECTING:	CALL	SEND_NOP | ||||
| 		; | ||||
| 		CALL	DETECTORS.CheckChanel | ||||
| 		JR	C,.IDE_ABSENT | ||||
| 
 | ||||
| 		CALL	Bug31SecCheck | ||||
| @ -295,12 +322,12 @@ AUTODETECTING:	CALL	DETECTORS.CheckChanel | ||||
| .Its_ATA:	LD	A,IDE.Device.HDD | ||||
| .get:		LD	(IDEDEV),A | ||||
| 		CALL	GETPARAM | ||||
| 		JR	C,.IDE_ABSENT | ||||
| 		RET	NC | ||||
| 		;JR	C,.IDE_ABSENT | ||||
| 		;CALL	DisableWriteCache | ||||
| 		;CALL	DisableStandBy | ||||
| 		AND	A | ||||
| 		RET | ||||
| 		;	 | ||||
| 		;AND	A | ||||
| 		;RET | ||||
| .IDE_ABSENT:	LD	A,IDE.Device.NONE | ||||
| 		LD	(IDEDEV),A	 | ||||
| 		;LD	A,IDE.CMD.ATA.Nop | ||||
| @ -319,65 +346,66 @@ AUTODETECTING:	CALL	DETECTORS.CheckChanel | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| SETUP_FROM_CMOS: | ||||
| 	LD	A,H | ||||
| 	LD	IX,PRIM_MASTER_CMOS_TABLE | ||||
| 	OR	A | ||||
| 	JR	Z,.step1 | ||||
| 	; | ||||
| 	LD	IX,PRIM_SLAVE_CMOS_TABLE | ||||
| 	CP	1 | ||||
| 	JR	Z,.step1 | ||||
| 	; | ||||
| 	LD	IX,SEC_MASTER_CMOS_TABLE | ||||
| 	CP	2 | ||||
| 	JR	Z,.step1 | ||||
| 	; | ||||
| 	LD	IX,SEC_SLAVE_CMOS_TABLE | ||||
| .step1:	LD	HL,IDENTIFY_DEVICE_BUFFER | ||||
| 	LD	DE,IDENTIFY_DEVICE_BUFFER+1 | ||||
| 	LD	BC,511 | ||||
| 	LD	(HL),0 | ||||
| 	LDIR  | ||||
| 	; | ||||
| 	CALL	Bug31SecCheck | ||||
| 	JR	NC,.step2 | ||||
| 	; | ||||
| 	LD	HL,PAUSES.HALT.BIG | ||||
| 	CALL	BITS_WAITS.Clear_BUSY | ||||
| 	JR	C,AUTODETECTING.IDE_ABSENT | ||||
| 	; | ||||
| .step2:	LD	A,(IX + IDE_CMOS_TABLE.Heads) | ||||
| 	CALL	READCMS | ||||
| 	LD	(IDENTIFY_DEVICE_BUFFER.NumHeads),A | ||||
| 	; | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.CylindersHigh) | ||||
| 	CALL	READCMS | ||||
| 	PUSH	AF | ||||
| 	; | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.CylindersLow) | ||||
| 	CALL	READCMS | ||||
| 	POP	HL | ||||
| 	LD	L,A | ||||
| 	LD	(IDENTIFY_DEVICE_BUFFER.NumCylinders),HL | ||||
| 	; | ||||
| 	LD	A,(IX + IDE_CMOS_TABLE.Sectors) | ||||
| 	CALL	READCMS | ||||
| 	LD	(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A | ||||
| 	; | ||||
| 	LD	A,IDE.Device.HDD | ||||
| 	LD	(IDEDEV),A | ||||
| 	; CALL	IDESPEC | ||||
| 	; RET | ||||
| 		LD	A,H | ||||
| 		LD	IX,PRIM_MASTER_CMOS_TABLE | ||||
| 		OR	A | ||||
| 		JR	Z,.step1 | ||||
| 		; | ||||
| 		LD	IX,PRIM_SLAVE_CMOS_TABLE | ||||
| 		DEC	A | ||||
| 		JR	Z,.step1 | ||||
| 		; | ||||
| 		LD	IX,SEC_MASTER_CMOS_TABLE | ||||
| 		DEC	A | ||||
| 		JR	Z,.step1 | ||||
| 		; | ||||
| 		LD	IX,SEC_SLAVE_CMOS_TABLE | ||||
| .step1:		LD	HL,IDENTIFY_DEVICE_BUFFER | ||||
| 		LD	DE,IDENTIFY_DEVICE_BUFFER+1 | ||||
| 		LD	BC,511 | ||||
| 		LD	(HL),0 | ||||
| 		LDIR  | ||||
| 		; | ||||
| 		CALL	Bug31SecCheck | ||||
| 		JR	NC,.step2 | ||||
| 		; | ||||
| 		LD	HL,PAUSES.HALT.BIG | ||||
| 		CALL	BITS_WAITS.Clear_BUSY | ||||
| 		JR	C,AUTODETECTING.IDE_ABSENT | ||||
| 		; | ||||
| .step2:		LD	A,(IX + IDE_CMOS_TABLE.Heads) | ||||
| 		CALL	READCMS | ||||
| 		LD	(IDENTIFY_DEVICE_BUFFER.NumHeads),A | ||||
| 		; | ||||
| 		LD	A,(IX + IDE_CMOS_TABLE.CylindersHigh) | ||||
| 		CALL	READCMS | ||||
| 		PUSH	AF | ||||
| 		; | ||||
| 		LD	A,(IX + IDE_CMOS_TABLE.CylindersLow) | ||||
| 		CALL	READCMS | ||||
| 		POP	HL | ||||
| 		LD	L,A | ||||
| 		LD	(IDENTIFY_DEVICE_BUFFER.NumCylinders),HL | ||||
| 		; | ||||
| 		LD	A,(IX + IDE_CMOS_TABLE.Sectors) | ||||
| 		CALL	READCMS | ||||
| 		LD	(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A | ||||
| 		; | ||||
| 		LD	A,IDE.Device.HDD | ||||
| 		LD	(IDEDEV),A | ||||
| 		; CALL	IDESPEC | ||||
| 		; RET | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| IDESPEC:	IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	A,(IDEDEV) | ||||
| 		LD	(IY+IDE.HDD_INIT_TABLE.DriveType),A	 | ||||
| 		CP	IDE.Device.ATAPI | ||||
| 		JP	Z,.FOR_ATAPI | ||||
| 		JR	Z,.FOR_ATAPI | ||||
| 		; | ||||
| 		LD	BC,IDE.Read.Control | ||||
| 		IN	A,(C) | ||||
| @ -562,37 +590,36 @@ BITS_WAITS: | ||||
| 
 | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| SELECT_IDE: | ||||
| 	AND	A	;%0000'0011 | ||||
| 	LD	B,IDE.Drive.Master | ||||
| 	JR	Z,.AUTO_0 | ||||
| 	; | ||||
| 	DEC	A | ||||
| 	LD	B,IDE.Drive.Slave | ||||
| 	JR	Z,.AUTO_0 | ||||
| 	; | ||||
| 	DEC	A | ||||
| 	;R00 | ||||
| 	 LD	B,IDE.Drive.Master | ||||
| 	 JR	Z,.AUTO_1 | ||||
| 	 ;		 | ||||
| 	 DEC	A			 | ||||
| 	 LD	B,IDE.Drive.Slave		 | ||||
| .AUTO_1: LD	A,IDE.Chanel.Secondary	 ;SELECT SECONDARY | ||||
| 	 OUT	(IDE.Chanel.Set),A	 | ||||
| 	 JP	.AUTO | ||||
| 	 ;		 | ||||
| .AUTO_0: LD	A,IDE.Chanel.Primary	 ;SELECT PRIMARY | ||||
| 	 OUT	(IDE.Chanel.Set),A	 | ||||
| 	; | ||||
| 	XOR	A | ||||
| .AUTO:	LD	(ICHANEL),A | ||||
| 	;R01 | ||||
| 	 LD	A,B | ||||
| 	 LD	BC,IDE.Write.DeviceHead | ||||
| 	 OUT	(C),A | ||||
| 	; | ||||
| 	RET | ||||
| SELECT_IDE:	AND	A	;%0000'0011 | ||||
| 		LD	B,IDE.Drive.Master | ||||
| 		JR	Z,.AUTO_0 | ||||
| 		; | ||||
| 		DEC	A | ||||
| 		LD	B,IDE.Drive.Slave | ||||
| 		JR	Z,.AUTO_0 | ||||
| 		; | ||||
| 		DEC	A | ||||
| 		;R00 | ||||
| 		 LD	B,IDE.Drive.Master | ||||
| 		 JR	Z,.AUTO_1 | ||||
| 		 ;		 | ||||
| 		 DEC	A			 | ||||
| 		 LD	B,IDE.Drive.Slave		 | ||||
| .AUTO_1:	 LD	A,IDE.Chanel.Secondary	 ;SELECT SECONDARY | ||||
| 		 OUT	(IDE.Chanel.Set),A	 | ||||
| 		 JP	.AUTO | ||||
| 		 ;		 | ||||
| .AUTO_0:	 LD	A,IDE.Chanel.Primary	 ;SELECT PRIMARY | ||||
| 		 OUT	(IDE.Chanel.Set),A	 | ||||
| 		; | ||||
| 		XOR	A | ||||
| .AUTO:		LD	(ICHANEL),A | ||||
| 		;R01 | ||||
| 		 LD	A,B | ||||
| 		 LD	BC,IDE.Write.DeviceHead | ||||
| 		 OUT	(C),A | ||||
| 		; | ||||
| 		RET | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| 
 | ||||
| 
 | ||||
| @ -692,8 +719,9 @@ SaveToCMOS: | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| ; Check bug with 31 sec freeze | ||||
| Bug31SecCheck:	LD	A,(MasterSlave) | ||||
| 		AND	1 | ||||
| 		RET	Z | ||||
| 		;AND	1 | ||||
| 		RRA | ||||
| 		RET	C | ||||
| 		; | ||||
| 		LD	HL,PAUSES.HALT.Time_2s | ||||
| 		CALL	BITS_WAITS.Clear_BUSY | ||||
| @ -704,14 +732,19 @@ Bug31SecCheck:	LD	A,(MasterSlave) | ||||
| 		LD	A,IDE.Drive.Slave | ||||
| 		LD	BC,IDE.Write.DeviceHead | ||||
| 		OUT	(C),A | ||||
| 		PAUSE_DJNZ 16 | ||||
| 		PAUSE_DJNZ 32 | ||||
| 		LD	BC,IDE.Write.Command | ||||
| 		LD	A,IDE.CMD.ATAPI.Reset | ||||
| 		OUT	(C),A | ||||
| 		PAUSE_DJNZ 16 | ||||
| 		PAUSE_DJNZ 64 | ||||
| 		LD	A,IDE.Drive.Master | ||||
| 		LD	BC,IDE.Write.DeviceHead | ||||
| 		OUT	(C),A | ||||
| 		PAUSE_DJNZ 32 | ||||
| 		; | ||||
| 		;CALL	SEND_NOP | ||||
| 		;SCF | ||||
| 		;CF=1 | ||||
| 		RET | ||||
| 		; | ||||
| .skip:		POP	BC			; ¡ « á á⥪  | ||||
| @ -720,7 +753,8 @@ Bug31SecCheck:	LD	A,(MasterSlave) | ||||
| 
 | ||||
| /////////////////////////////////////////////////////////////////////[v] | ||||
| GETPARAM:	LD	HL,PAUSES.WAIT.IDE | ||||
| 		LD	DE,IDE.CtrlByte.DataRequest * 256 + IDE.CtrlByte.DataRequest | ||||
| 		;LD	DE,256*(IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest) + IDE.CtrlByte.DataRequest | ||||
| 		LD	DE,256*IDE.CtrlByte.DataRequest + IDE.CtrlByte.DataRequest | ||||
| 		CALL	BITS_WAITS.WAIT_PRT | ||||
| 		RET	C | ||||
| 		LD	BC,IDE.Read.Data | ||||
| @ -729,8 +763,7 @@ GETPARAM:	LD	HL,PAUSES.WAIT.IDE | ||||
| 		INIR  | ||||
| 		CALL	IDESPEC | ||||
| 		; [x] save hdd parameters to cmos for "setup" in settings | ||||
| 		 CALL	SaveToCMOS | ||||
| 		; | ||||
| 		CALL	SaveToCMOS | ||||
| 		AND	A | ||||
| 		RET  | ||||
| /////////////////////////////////////////////////////////////////////[^] | ||||
| @ -753,21 +786,27 @@ DETECTORS: | ||||
|  		LD	BC,IDE.Read.Counter | ||||
|  		IN	A,(C) | ||||
|  		CP	.test_counter | ||||
|  		RET	Z | ||||
| 		SCF | ||||
|  		RET	NZ | ||||
| 		AND	A | ||||
| 		RET | ||||
| 		; | ||||
| 		; § ¡¨¢ ¥¬ âãä⮩ ¤«ï â¥áâ  ATAPI ¢ .IdentDevCheck | ||||
| 		;XOR	A | ||||
| 		;INC	B | ||||
| 		;INC	C	; IDE.Write.Sector | ||||
| 		;OUT	(C),A | ||||
| 		;INC	C	; IDE.Write.CylinderLow | ||||
| 		;OUT	(C),A | ||||
| 		;INC	C	; IDE.Write.CylinderHigh | ||||
| 		;OUT	(C),A | ||||
| 		;RET | ||||
| ;-------; | ||||
| 
 | ||||
| ;-------; | ||||
| 	; CHECK BY EXECUTING NOP COMMAND AND WAIT. | ||||
| 	; Exit:	CF - No device | ||||
| .NOP_Check:	LD	E,IDE.CMD.ATA.Nop | ||||
| 		LD	BC,IDE.Write.Command | ||||
| 		OUT	(C),E | ||||
| 		 | ||||
| 		PAUSE_DJNZ 0 | ||||
| 		 | ||||
| 		;LD	HL,PAUSES.HALT.SMALL | ||||
| .NOP_Check:	CALL	SEND_NOP | ||||
| 		LD	HL,PAUSES.HALT.MEDIUM | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		; | ||||
| @ -830,30 +869,31 @@ DETECTORS: | ||||
| .non_ATA:	LD	BC,IDE.Read.Error | ||||
| 		IN	A,(C) | ||||
| 		AND	IDE.ErrorByte.Abort | ||||
| 		; check signature #0114EB | ||||
| 		 ;RET	NZ			; ATAPI | ||||
| 		; | ||||
| 		 RET	NZ			; ATAPI | ||||
| 		 SCF | ||||
| 		 RET				; Absent | ||||
| 		 ; check signature #0114EB | ||||
| 		 ;SCF | ||||
| 		 ;RET				; Absent | ||||
| 		 SCF | ||||
| 		 RET	Z			; Absent | ||||
| 		 LD	C,low IDE.Read.Sector | ||||
| 		 IN	A,(C) | ||||
| 		 DEC	A | ||||
| 		 ;CF=1 | ||||
| 		 RET	NZ | ||||
| 		 ; | ||||
| 		 INC	C			; LD BC,IDE.Read.CylinderLow | ||||
| 		 IN	L,(C) | ||||
| 		 INC	C			; LD BC,IDE.Read.CylinderHigh | ||||
| 		 IN	H,(C) | ||||
| 		 ;AND	A | ||||
| 		 LD	BC,#EB14 - 1	; CF=1 | ||||
| 		 SBC	HL,BC | ||||
| 		 SCF | ||||
| 		 RET	NZ | ||||
| 		 ;A=0, CF=1 | ||||
| 		 ADC	A,A			; CF=0,ZF=0 | ||||
| 		 RET				; ATAPI | ||||
| 		 ;RET	Z			; Absent | ||||
| 		 ;LD	C,low IDE.Read.Sector | ||||
| 		 ;IN	A,(C) | ||||
| 		 ;DEC	A | ||||
| 		 ;;CF=1 | ||||
| 		 ;RET	NZ | ||||
| 		 ;; | ||||
| 		 ;INC	C			; LD BC,IDE.Read.CylinderLow | ||||
| 		 ;IN	L,(C) | ||||
| 		 ;INC	C			; LD BC,IDE.Read.CylinderHigh | ||||
| 		 ;IN	H,(C) | ||||
| 		 ;;AND	A | ||||
| 		 ;LD	BC,#EB14 - 1	; CF=1 | ||||
| 		 ;SBC	HL,BC | ||||
| 		 ;SCF | ||||
| 		 ;RET	NZ | ||||
| 		 ;;A=0, CF=1 | ||||
| 		 ;ADC	A,A			; CF=0,ZF=0 | ||||
| 		 ;RET				; ATAPI | ||||
| 		; | ||||
| ;-------; | ||||
| 
 | ||||
| @ -889,11 +929,16 @@ DETECTORS: | ||||
| 		LD	E,L | ||||
| 		; ¥á«¨ ¯ãá⮩: DE=#7868, A=#ED | ||||
| 		; | ||||
| 		LD	HL,#7868 + #ED | ||||
| 		LD	HL,#7868		; #7868 + #ED = #7955 | ||||
| 		AND	A | ||||
| 		SBC	HL,DE | ||||
| 		XOR	L | ||||
| 		RET	NZ			; not absent | ||||
| 		JR	Z,.NOT_HL | ||||
| 		; | ||||
| 		AND	A | ||||
| 		RET				; not absent | ||||
| 		; | ||||
| .NOT_HL:	XOR	#ED | ||||
| 		RET	NZ | ||||
| 		SCF | ||||
| 		RET				; absent | ||||
| ;-------; | ||||
| @ -911,11 +956,11 @@ Nop_CHANELS: | ||||
| 	CALL	.CMD | ||||
| 	LD	A,2 | ||||
| .CMD:	CALL	SELECT_IDE | ||||
| 	PAUSE_DJNZ 0 | ||||
| 	PAUSE_DJNZ 32 | ||||
| 	 LD	BC,IDE.Write.Command | ||||
| 	 LD	H,IDE.CMD.ATA.Nop | ||||
| 	 OUT	(C),H | ||||
| 	PAUSE_DJNZ 0 | ||||
| 	PAUSE_DJNZ 64 | ||||
| 	LD	BC,IDE.Read.Status | ||||
| 	IN	A,(C) | ||||
| 	RET | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik