refactoring, optimization
This commit is contained in:
		
							parent
							
								
									cd7f0580ba
								
							
						
					
					
						commit
						aedd21445b
					
				| @ -1 +1 @@ | ||||
| Subproject commit 8d33d0cb93254448d9dcca4a4d7d4977125280c9 | ||||
| Subproject commit 552b44b20bb90ad446fbd70d3229a935c89412d3 | ||||
| @ -40,7 +40,7 @@ CDROM		EQU	2 | ||||
| 
 | ||||
| 
 | ||||
| ;EQU FOR IY+ | ||||
| IDE.HDD_INIT_TABLE.Chanel		EQU	0 | ||||
| IDE.HDD_INIT_TABLE.DRV_Flags		EQU	0 | ||||
| IDE.HDD_INIT_TABLE.SectorsPerTrack		EQU	1 | ||||
| IDE.HDD_INIT_TABLE.HeadsNumber		EQU	2 | ||||
| IDE.HDD_INIT_TABLE.CylinderNumberLow		EQU	3 | ||||
| @ -95,7 +95,6 @@ SELECTH: | ||||
| 	JR	Z,SELHH | ||||
| 	DEC	A | ||||
| 	LD	IY,IDE.INIT_TBL_IDE1 | ||||
| 
 | ||||
| 	;R02 | ||||
| 	 JR	Z,SELHH | ||||
| 	 DEC	A | ||||
| @ -103,7 +102,7 @@ SELECTH: | ||||
| 	 JR	Z,SELHH | ||||
| 	 DEC	A | ||||
| 	 LD	IY,IDE.INIT_TBL_IDE3 | ||||
| 	;R02 | ||||
| 	; | ||||
| 	JR	NZ,NODRIVE | ||||
| SELHH:	EXX  | ||||
| 	LD	C,SLOT3 | ||||
| @ -111,7 +110,7 @@ SELHH:	EXX | ||||
| 	LD	A,SYS_PAGE | ||||
| 	OUT	(C),A | ||||
| 
 | ||||
| 	LD	A,(IY+IDE.HDD_INIT_TABLE.Chanel) | ||||
| 	LD	A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	AND	#01 | ||||
| 	LD	A,IDE.Chanel.Secondary | ||||
| 	JR	NZ,SELCHAN | ||||
| @ -121,8 +120,8 @@ SELCHAN: | ||||
| 	 | ||||
| 	LD	A,(IY+IDE.HDD_INIT_TABLE.DriveType) | ||||
| 	CP	IDE.Device.HDD						;!FIXIT ¢®§¬®¦®,  åॠ¥ 㦮, ¯®â®¬ã-çâ® ¥á«¨ CD, â® ¯à¨«¥â¨â ¢ ¤à ©¢¥à CD | ||||
| 	LD	A,(IY+IDE.HDD_INIT_TABLE.Chanel) | ||||
| 	OUT	(C),B | ||||
| 	LD	A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	OUT	(C),B							;¢®§¢à â áâà ¨æë | ||||
| 	LD	BC,IDE.Write.DriveCtrl | ||||
| 	RES	0,A | ||||
| 	OUT	(C),A | ||||
| @ -141,7 +140,7 @@ NODRIVE: | ||||
| ;	L - Sectors per cylinder | ||||
| ;      DE - Cylinders | ||||
| ;      IX - Capacity sector in bytes | ||||
| ;	B - Flags: ide chanel | ||||
| ;	B - Flags: MASTER/SLAVE, LBA/CHS | ||||
| HDD_5x.GETMED: | ||||
| 	CALL	SELECTH | ||||
| 	RET	C | ||||
| @ -153,7 +152,7 @@ HDD_5x.GETMED: | ||||
| 	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.Chanel) | ||||
| 	LD	B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	LD	IX,512 | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| @ -182,7 +181,7 @@ HDD_5x.SETMED: | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.HeadsNumber),H | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.Chanel),B | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.DRV_Flags),B | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	EX	AF,AF' | ||||
| @ -595,25 +594,39 @@ PRESET:	LD	A,B | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,SYS_PAGE | ||||
| 	OUT	(SLOT3),A | ||||
| 	LD	A,(IY+IDE.HDD_INIT_TABLE.Chanel) | ||||
| 	LD	A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	LD	BC,IDE.Write.DriveCtrl | ||||
| 	OUT	(C),A | ||||
| 	BIT	6,A                             ;¡¨â CHS/LBA ;!FIXIT ᤥ« âì ¬¥âª ¬¨ ®¬¥à  ¡¨â | ||||
| 	;!TEST  | ||||
| 	 ;BIT	6,A                             ;¡¨â CHS/LBA ;!FIXIT ᤥ« âì ¬¥âª ¬¨ ®¬¥à  ¡¨â | ||||
| 	 AND	%0100'0000 | ||||
| 	; | ||||
| 	LD	E,XL | ||||
| 	LD	D,XH | ||||
| 	CALL	Z,LBA_CHS | ||||
| 	LD	BC,IDE.Write.Sector | ||||
| 	OUT	(C),E		;LBA 0..7 | ||||
| 	LD	BC,IDE.Write.CylinderLow | ||||
|  IF IDE_Optimization | ||||
| 	INC	C		;	LD BC,IDE.Write.CylinderLow | ||||
| 	OUT	(C),D		;LBA 8..15 | ||||
| 	INC	C		;	LD BC,IDE.Write.CylinderHigh | ||||
| 	OUT	(C),L		;LBA 16..23 | ||||
| 	LD	BC,IDE.Read.Control | ||||
| 	IN	A,(C) | ||||
| 	AND	#F0		;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask | ||||
| 	OR	H		;LBA 24..27 | ||||
| 	INC	B		;	LD BC,IDE.Write.DriveCtrl | ||||
|  ELSE | ||||
|  	LD	BC,IDE.Write.CylinderLow | ||||
| 	OUT	(C),D		;LBA 8..15 | ||||
| 	LD	BC,IDE.Write.CylinderHigh | ||||
| 	OUT	(C),L		;LBA 16..23 | ||||
| 	LD	BC,IDE.Write.DriveCtrl | ||||
| 	DEC	B | ||||
| 	LD	BC,IDE.Read.Control | ||||
| 	IN	A,(C) | ||||
| 	AND	#F0 | ||||
| 	AND	#F0		;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask | ||||
| 	OR	H		;LBA 24..27 | ||||
| 	INC	B | ||||
| 	LD	BC,IDE.Write.DriveCtrl | ||||
|  ENDIF | ||||
| 	OUT	(C),A | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| @ -688,7 +701,7 @@ WAITPRT: | ||||
| ;[]================================================================[#57] | ||||
| ;Function: Detect Disk | ||||
| ;	   A - Disk | ||||
| ;Return:   CF=0 - A=Drive type | ||||
| ;Return:   CF=0 - A=Drive type  | ||||
| ;	   CF=1 - drive not present, A=#FF | ||||
| HDD_5x.DETECT: | ||||
| 	CP	#84	;!HARDCODE max HDD drives (#80,#81,#82,#83) | ||||
| @ -715,7 +728,7 @@ HDD_5x.DETECT: | ||||
| 	LD	C,SLOT3 | ||||
| 	OUT	(C),B | ||||
| 
 | ||||
| 	CP	#FF | ||||
| 	CP	IDE.Device.NONE | ||||
| 	CCF | ||||
| 	RET  | ||||
| ;[]================================================================[#57] | ||||
| @ -106,18 +106,17 @@ SELECT_IDE: | ||||
| 	JR	Z,IAUTO1				;R00 | ||||
| 	DEC	A	;R00 | ||||
| 	LD	D,#B0	;R00 | ||||
| IAUTO1: | ||||
| 	LD	A,IDE.Chanel.Secondary					;R00 ;SELECT SECONDARY | ||||
| IAUTO1:	LD	A,IDE.Chanel.Secondary					;R00 ;SELECT SECONDARY | ||||
| 	OUT	(IDE.Chanel.Set),A					;R00 | ||||
| 	LD	A,1 | ||||
| 	;LD	A,1 | ||||
| 	JP	IAUTO					;R00 | ||||
| 
 | ||||
| IAUTO0: | ||||
| 	LD	A,IDE.Chanel.Primary					;R00 ;SELECT PRIMARY | ||||
| 	OUT	(IDE.Chanel.Set),A					;R00 | ||||
| 	LD	A,0 | ||||
| IAUTO: | ||||
| 	LD	(ICHANEL),A | ||||
| 	;LD	A,0 | ||||
| 	XOR	A | ||||
| IAUTO:	LD	(ICHANEL),A | ||||
| 	LD	BC,IDE.Write.DriveCtrl	;R01  | ||||
| 	OUT	(C),D					;R01 | ||||
| 	RET | ||||
| @ -131,8 +130,12 @@ CDMASTR: | ||||
| 	LD	(SKIP),A | ||||
| 	LD	BC,IDE.Write.DriveCtrl | ||||
| 	OUT	(C),D | ||||
| 
 | ||||
| 	LD	BC,IDE.Read.Status	 | ||||
|  IF IDE_Optimization | ||||
| 	DEC	B | ||||
| 	INC	C | ||||
|  ELSE | ||||
|  	LD	BC,IDE.Read.Status	 | ||||
|  ENDIF | ||||
| 	IN	A,(C) | ||||
| 	AND	#80 | ||||
| 	LD	HL,280 | ||||
| @ -156,11 +159,17 @@ NO_BUSY: | ||||
| 	LD	E,#05 | ||||
| 	LD	BC,IDE.Write.Counter | ||||
| 	OUT	(C),E | ||||
| 	LD	BC,#0010 | ||||
| 	DJNZ	$                       ;!HARDCODE | ||||
| 
 | ||||
| 	LD	BC,#0010	;§ ¤¥à¦ª  50092 â ªâ  + int | ||||
| .pause:	DJNZ	.pause | ||||
| 	DEC	C | ||||
| 	JR	NZ,$-3                  ;!HARDCODE | ||||
| 	LD	BC,IDE.Read.Counter | ||||
| 	JR	NZ,.pause | ||||
| 
 | ||||
|  IF IDE_Optimization | ||||
| 	LD	C,IDE.Read.Counter | ||||
|  ELSE | ||||
|  	LD	BC,IDE.Read.Counter | ||||
|  ENDIF | ||||
| 	IN	A,(C) | ||||
| 	CP	E | ||||
| 	JP	NZ,ABSENT | ||||
| @ -172,7 +181,9 @@ NO_BUSY: | ||||
| 	LD	E,#00		;NOP | ||||
| 	LD	BC,IDE.Write.Command | ||||
| 	OUT	(C),E | ||||
| 
 | ||||
|  IF IDE_Optimization | ||||
| 	DEC	B | ||||
|  ENDIF | ||||
| WXREADY: | ||||
| 	HALT  | ||||
| 	DEC	HL | ||||
| @ -181,13 +192,15 @@ WXREADY: | ||||
| 	JP	Z,ABSENT | ||||
| 	CALL	SKIPKEY | ||||
| 	JP	C,ABSENT | ||||
| 	LD	BC,IDE.Read.Status | ||||
|  IFN IDE_Optimization | ||||
|  	LD	BC,IDE.Read.Status | ||||
|  ENDIF | ||||
| 	IN	A,(C) | ||||
| 	AND	#C0 | ||||
| 	CP	#40 | ||||
| 	JR	NZ,WXREADY | ||||
| 
 | ||||
| ;	LD	A,#90		; | ||||
| ;	LD	A,#90		;????? | ||||
| ;	CALL	IDE_CMD | ||||
| 
 | ||||
| 	LD	A,IDE.Device.HDD | ||||
| @ -195,11 +208,17 @@ WXREADY: | ||||
| 	LD	E,#EC		;IDENTIFY ATA | ||||
| 	LD	BC,IDE.Write.Command | ||||
| 	OUT	(C),E | ||||
| 
 | ||||
| 	LD	B,0 | ||||
| .pause:	DJNZ	.pause | ||||
| 
 | ||||
| 	LD	HL,(WAITSML) | ||||
| 	LD	DE,#0101 | ||||
| 	LD	BC,IDE.Read.Status | ||||
|  IF IDE_Optimization | ||||
| 	LD	B,high IDE.Read.Status | ||||
|  ELSE | ||||
|  	LD	BC,IDE.Read.Status | ||||
|  ENDIF | ||||
| 	CALL	WAIT_PRT | ||||
| 	JP	NC,NOHDD | ||||
| 
 | ||||
| @ -222,11 +241,17 @@ NOHDD:  LD	A,IDE.Device.CDROM | ||||
| 	LD	E,#A1		;IDENTIFY ATAPI | ||||
| 	LD	BC,IDE.Write.Command | ||||
| 	OUT	(C),E | ||||
| 	LD	B,#00 | ||||
| 	DJNZ	$ | ||||
| 
 | ||||
| 	LD	B,0 | ||||
| .pause:	DJNZ	.pause | ||||
| 
 | ||||
| 	LD	HL,(WAITSML) | ||||
| 	LD	DE,#0101 | ||||
| 	LD	BC,IDE.Read.Status | ||||
|  IF IDE_Optimization | ||||
| 	LD	B,high IDE.Read.Status | ||||
|  ELSE | ||||
|  	LD	BC,IDE.Read.Status | ||||
|  ENDIF | ||||
| 	CALL	WAIT_PRT | ||||
| 	JP	C,GETPARM | ||||
| ABSENT: | ||||
| @ -256,20 +281,23 @@ IDESPEC: | ||||
| 	BIT	1,A | ||||
| 	JR	Z,NONLBA | ||||
| 	SET	6,B | ||||
| NONLBA: | ||||
| 	LD	A,B | ||||
| NONLBA:	LD	A,B | ||||
| 	LD	BC,IDE.Write.DriveCtrl | ||||
| 	OUT	(C),A | ||||
| 	AND	#F0 | ||||
| 	AND	#F0		;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask | ||||
| 	LD	HL,ICHANEL | ||||
| 	OR	(HL) | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.Chanel),A | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.DRV_Flags),A | ||||
| 	LD	HL,(TEMP+#02)                                           ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. CYLINDERS | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H | ||||
| 	LD	A,(TEMP+#0C)                                            ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. SECTOR PER TRACK | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A | ||||
| 	LD	BC,IDE.Write.Counter | ||||
|  IF IDE_Optimization | ||||
| 	LD	B,high IDE.Write.Counter	 | ||||
|  ELSE | ||||
|  	LD	BC,IDE.Write.Counter | ||||
|  ENDIF | ||||
| 	OUT	(C),A | ||||
| 	LD	A,#91		; | ||||
| 	CALL	IDE_CMD | ||||
| @ -296,7 +324,7 @@ FOR_CDR: | ||||
| 	AND	#F0 | ||||
| 	LD	HL,ICHANEL | ||||
| 	OR	(HL) | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.Chanel),A | ||||
| 	LD	(IY+IDE.HDD_INIT_TABLE.DRV_Flags),A | ||||
| 	JR	NOSPEC | ||||
| 
 | ||||
| IDE_CMD: | ||||
| @ -307,7 +335,11 @@ IDE_CMD: | ||||
| 	CALL	WAIT_PRT | ||||
| 	POP	DE | ||||
| 	RET	C | ||||
| 	LD	BC,IDE.Write.Command | ||||
|  IF IDE_Optimization | ||||
| 	INC	B | ||||
|  ELSE | ||||
|  	LD	BC,IDE.Write.Command  | ||||
|  ENDIF | ||||
| 	OUT	(C),D | ||||
| 	LD	HL,(WAITIDE) | ||||
| 	LD	DE,#C040 | ||||
| @ -372,15 +404,15 @@ WAIT_PRT: | ||||
| 
 | ||||
| SKIPKEY: | ||||
| 	EXX  | ||||
| 	CALL	SCANKEY | ||||
| 	 CALL	SCANKEY | ||||
| 	EXX  | ||||
| 	SCF  | ||||
| 	CCF  | ||||
| 	RET	Z | ||||
| 	EXX  | ||||
| 	LD	HL,#3E00        ;!HARDCODE | ||||
| 	AND	A | ||||
| 	SBC	HL,DE | ||||
| 	 LD	HL,#3E00        ;!HARDCODE | ||||
| 	 AND	A | ||||
| 	 SBC	HL,DE | ||||
| 	EXX  | ||||
| 	SCF  | ||||
| 	CCF  | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Anatoliy Belyanskiy
						Anatoliy Belyanskiy