add boot from ATAPI
This commit is contained in:
		
							parent
							
								
									1cb8ee9e78
								
							
						
					
					
						commit
						65a2957424
					
				| @ -1 +1 @@ | ||||
| Subproject commit 237dd36651b4af124f12d3f1eaee3688467f8fa3 | ||||
| Subproject commit 831b2da8a66ee3bd78a7c73ef3592609e5f02902 | ||||
| @ -131,7 +131,7 @@ ATAPI_5x_SET_PAR: | ||||
| 		LD	(IY+IDE.HDD_INIT_TABLE.MediaParameters),B | ||||
| 		EX	AF,AF | ||||
| 		OUT	(SLOT3),A | ||||
| 		RET | ||||
| 		RET  | ||||
| ;[]================================================================[#59] | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -3,66 +3,60 @@ | ||||
| ; ‚室:  A - ®¬Ąŕ ăáâனá⢠, C - DriveType | ||||
| ; ‚ë室: A - MediaParameters, C - DriveType | ||||
| ; Ą Ż®ŕâ¨â L | ||||
| SELECT_DRIVE: | ||||
| 	AND	#0F | ||||
| 	LD	IY,IDE.INIT_TBL_IDE0 | ||||
| 	JR	Z,.channel | ||||
| 	DEC	A | ||||
| 	LD	IY,IDE.INIT_TBL_IDE1 | ||||
| 	;R02 | ||||
| 	 JR	Z,.channel | ||||
| 	 DEC	A | ||||
| 	 LD	IY,IDE.INIT_TBL_IDE2 | ||||
| 	 JR	Z,.channel | ||||
| 	 DEC	A | ||||
| 	 LD	IY,IDE.INIT_TBL_IDE3 | ||||
| 	; | ||||
| 	JR	Z,.channel | ||||
| 	LD	A,BIOS.Error.BadNumber | ||||
| 	SCF  | ||||
| 	RET 	 | ||||
| 	; | ||||
| .channel: | ||||
| 	EXX  | ||||
| 	 IN	A,(SLOT3) | ||||
| 	 PUSH	AF | ||||
| 	 LD	A,SYS_PAGE | ||||
| 	 OUT	(SLOT3),A | ||||
| 	 ; | ||||
| 	 LD	H,(IY + IDE.HDD_INIT_TABLE.MediaParameters) | ||||
| 	 LD	C,(IY + IDE.HDD_INIT_TABLE.DriveType) | ||||
| 	 LD	B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	 POP	AF | ||||
| 	 OUT	(SLOT3),A				;¢®§¢à â áâà ¨æë | ||||
| 	 ; | ||||
| 	 LD	A,C | ||||
| 	EXX | ||||
| 	; | ||||
| 	CP	C | ||||
| 	; | ||||
| 	EXX | ||||
| 	 SCF | ||||
| 	 LD	A,BIOS.Error.BadNumber | ||||
| 	 RET	NZ | ||||
| 	 ; | ||||
| 	 LD	A,B | ||||
| 	 RRA | ||||
| 	 LD	A,IDE.Chanel.Secondary | ||||
| 	 JR	C,.device | ||||
| 	 LD	A,IDE.Chanel.Primary | ||||
| .device: OUT	(IDE.Chanel.Set),A	;R02 | ||||
| 	 LD	A,B | ||||
| 	 AND	#F0 | ||||
| 	 LD	BC,IDE.Write.DeviceHead | ||||
| 	 OUT	(C),A | ||||
| 	 LD	A,H | ||||
| 	EXX  | ||||
| 	RET | ||||
| 	; | ||||
| ; NODRIVE: | ||||
| ; 	LD	A,BIOS.Error.BadDrvNumber | ||||
| ; 	SCF  | ||||
| ; 	RET  | ||||
| SELECT_DRIVE:	AND	#0F | ||||
| 		LD	IY,IDE.INIT_TBL_IDE0 | ||||
| 		JR	Z,.channel | ||||
| 		DEC	A | ||||
| 		LD	IY,IDE.INIT_TBL_IDE1 | ||||
| 		;R02 | ||||
| 		 JR	Z,.channel | ||||
| 		 DEC	A | ||||
| 		 LD	IY,IDE.INIT_TBL_IDE2 | ||||
| 		 JR	Z,.channel | ||||
| 		 DEC	A | ||||
| 		 LD	IY,IDE.INIT_TBL_IDE3 | ||||
| 		; | ||||
| 		JR	NZ,.error | ||||
| 		; | ||||
| .channel:	EXX  | ||||
| 		 IN	A,(SLOT3) | ||||
| 		 PUSH	AF | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 ; | ||||
| 		 LD	H,(IY + IDE.HDD_INIT_TABLE.MediaParameters) | ||||
| 		 LD	C,(IY + IDE.HDD_INIT_TABLE.DriveType) | ||||
| 		 LD	B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 		 POP	AF | ||||
| 		 OUT	(SLOT3),A				;¢®§¢à â áâà ¨æë | ||||
| 		 ; | ||||
| 		 LD	A,C | ||||
| 		EXX | ||||
| 		; | ||||
| 		CP	C | ||||
| 		; | ||||
| 		EXX | ||||
| 		 SCF | ||||
| 		 LD	A,BIOS.Error.BadNumber | ||||
| 		 RET	NZ | ||||
| 		 ; | ||||
| 		 LD	A,B | ||||
| 		 RRA | ||||
| 		 LD	A,IDE.Chanel.Secondary | ||||
| 		 JR	C,.device | ||||
| 		 LD	A,IDE.Chanel.Primary | ||||
| .device:	 OUT	(IDE.Chanel.Set),A	;R02 | ||||
| 		 LD	A,B | ||||
| 		 AND	#F0 | ||||
| 		 LD	BC,IDE.Write.DeviceHead | ||||
| 		 OUT	(C),A | ||||
| 		 LD	A,H | ||||
| 		EXX  | ||||
| 		RET | ||||
| 		; | ||||
| .error:		LD	A,BIOS.Error.BadNumber | ||||
| 		SCF  | ||||
| 		RET  | ||||
| ;======================================================================= | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -457,9 +457,9 @@ IDESPEC:	IN	A,(SLOT3) | ||||
| 		 CP	BIOS.Error.ATAPI.UnitAttention | ||||
| 		 JR	Z,IDESPEC.END | ||||
| 		 ; | ||||
| 		 CP	BIOS.Error.ATAPI.NotReady | ||||
| 		 SCF | ||||
| 		 JR	NZ,.set_sector	; «î¡ ï ¥¯®ïâ ï ®è¨¡ª  - ¥â ®á¨â¥«ï | ||||
| 		 ;CP	BIOS.Error.ATAPI.NotReady | ||||
| 		 ;SCF | ||||
| 		 ;JR	NZ,.set_sector	; «î¡ ï ¥¯®ïâ ï ®è¨¡ª  - ¥â ®á¨â¥«ï | ||||
| 		 HALT | ||||
| 		 DJNZ	.get_error_loop | ||||
| 		 ; | ||||
|  | ||||
| @ -74,9 +74,10 @@ | ||||
| ;FDD	EQU	#03 | ||||
| 
 | ||||
| ;!FIXIT	®à¬ «ì® ¯à®¯¨á âì | ||||
| TEMP			EQU	#7E00   						; !HARDCODE | ||||
| TEMP			EQU	#7800					; !HARDCODE | ||||
| OS_LOAD.SectorSizeAddr	EQU	TEMP-2 | ||||
| IDENTIFY_DEVICE_BUFFER	_ATA_IDENTIFY_DEVICE_DATA = TEMP | ||||
| MEMMAP2			EQU	TEMP                                                    ; ¤®«¦® ¡ëâì ¢ë஢¥® ¯® ALIGN 256 | ||||
| MEMMAP2			EQU	TEMP					; ¤®«¦® ¡ëâì ¢ë஢¥® ¯® ALIGN 256 | ||||
| TPOINTD			EQU	TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023 | ||||
|  ASSERT	(low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!" | ||||
| 
 | ||||
| @ -1059,132 +1060,140 @@ PrepareToBOOT:	;CALL	INT_ON | ||||
|         	;   Error | ||||
| 		SCF  | ||||
| 		RET  | ||||
| 
 | ||||
| FDSTART: | ||||
|         PUSH	BC | ||||
| 	PUSH	BC | ||||
| 	LD	A,msgStrings.bootFdd | ||||
| 	CALL	POSTMSG | ||||
| 	POP	AF | ||||
|         CALL    FDD_5x_RESET | ||||
| 	POP	BC | ||||
| 	RET	C | ||||
| 	JP	OS_LOAD | ||||
| ;!TODO | ||||
| CDSTART: | ||||
| 	PUSH	BC | ||||
| 	LD	A,msgStrings.bootCd | ||||
| 	CALL	POSTMSG | ||||
| 	POP	AF | ||||
| 	PUSH	AF | ||||
| 	CALL	PRINT_CHANEL | ||||
| 	; | ||||
| 	POP	BC | ||||
| 	SET	6,B | ||||
| 	SCF  | ||||
| 	RET  | ||||
| 
 | ||||
| RDSTART: | ||||
| 	LD	A,msgStrings.bootRamDrv | ||||
| 	CALL	POSTMSG | ||||
|         LD      B,DRIVE_CODES.SPRINTER.RAM				; 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ®¬¥à ¤à ©¢  | ||||
| .loop:  PUSH	BC | ||||
| 	CALL	OS_LOAD | ||||
| 	POP	BC | ||||
|         INC	B | ||||
|         LD	A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1	; ¬ ªá¨¬ «ìë© ®¬¥à à ¬¤¨áª  | ||||
|         SUB	B | ||||
|         JR	NC,.loop  | ||||
|         RET | ||||
| 		; | ||||
| FDSTART:       	PUSH	BC | ||||
| 		PUSH	BC | ||||
| 		LD	A,msgStrings.bootFdd | ||||
| 		CALL	POSTMSG | ||||
| 		POP	AF | ||||
|         	CALL    FDD_5x_RESET | ||||
| 		POP	BC | ||||
| 		RET	C | ||||
| 		JP	OS_LOAD | ||||
| 		; | ||||
| CDSTART:	LD	A,B						; [ ] 15/02/2025 boot from ATAPI | ||||
| 		OR	DRIVE_CODES.SPRINTER.ATAPI | ||||
| 		LD	B,A | ||||
| 		PUSH	BC | ||||
| 		LD	A,msgStrings.bootCd | ||||
| 		CALL	POSTMSG | ||||
| 		POP	AF | ||||
| 		PUSH	AF | ||||
| 		CALL	PRINT_CHANEL | ||||
| 		; | ||||
| 		POP	BC | ||||
| 		PUSH	BC | ||||
| 		CALL	OS_LOAD | ||||
| 		POP	BC | ||||
| 		RET	NC | ||||
| 		LD	HL,2048						;!HARDCODE sector size | ||||
| 		LD	IX,#0011 | ||||
| 		JR	OS_LOAD.CD | ||||
| 		; | ||||
| RDSTART:	LD	A,msgStrings.bootRamDrv | ||||
| 		CALL	POSTMSG | ||||
|         	LD      B,DRIVE_CODES.SPRINTER.RAM				; 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ®¬¥à ¤à ©¢  | ||||
| .loop:  	PUSH	BC | ||||
| 		CALL	OS_LOAD | ||||
| 		POP	BC | ||||
|         	INC	B | ||||
|         	LD	A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1	; ¬ ªá¨¬ «ìë© ®¬¥à à ¬¤¨áª  | ||||
|         	SUB	B | ||||
|         	JR	NC,.loop  | ||||
|         	RET | ||||
| 
 | ||||
| 
 | ||||
| HDSTART: | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,SYS_PAGE | ||||
| 	OUT	(SLOT3),A | ||||
| 	LD	A,B | ||||
| 	; | ||||
| 	AND	#03		;R02 %00000011 | ||||
| 	LD	IY,IDE.INIT_TBL_IDE0 | ||||
| 	JR	Z,.next | ||||
| 	; | ||||
| 	LD	IY,IDE.INIT_TBL_IDE1 | ||||
| 	CP	1							;R02 | ||||
| 	JR	Z,.next	 | ||||
| 	; | ||||
| 	LD	IY,IDE.INIT_TBL_IDE2					;R02 | ||||
| 	CP	2							;R02 | ||||
| 	JR	Z,.next | ||||
| 	; | ||||
| 	LD	IY,IDE.INIT_TBL_IDE3					;R02 | ||||
| 	; | ||||
| .next:	LD	A,(IY+IDE.HDD_INIT_TABLE.DriveType) | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	EX	AF,AF' | ||||
| 	CP	IDE.Device.ATAPI | ||||
| 	JP	Z,CDSTART | ||||
| 	PUSH	AF | ||||
| 	PUSH	BC | ||||
| 	LD	A,msgStrings.bootHdd | ||||
| 	CALL	POSTMSG | ||||
| 	POP	AF | ||||
| 	PUSH	AF | ||||
| 	CALL	PRINT_CHANEL | ||||
| HDSTART:	IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,B | ||||
| 		; | ||||
| 		AND	#03		;R02 %00000011 | ||||
| 		LD	IY,IDE.INIT_TBL_IDE0 | ||||
| 		JR	Z,.next | ||||
| 		; | ||||
| 		LD	IY,IDE.INIT_TBL_IDE1 | ||||
| 		CP	1							;R02 | ||||
| 		JR	Z,.next	 | ||||
| 		; | ||||
| 		LD	IY,IDE.INIT_TBL_IDE2					;R02 | ||||
| 		CP	2							;R02 | ||||
| 		JR	Z,.next | ||||
| 		; | ||||
| 		LD	IY,IDE.INIT_TBL_IDE3					;R02 | ||||
| 		; | ||||
| .next:		LD	A,(IY+IDE.HDD_INIT_TABLE.DriveType) | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		CP	IDE.Device.ATAPI | ||||
| 		JP	Z,CDSTART | ||||
| 		PUSH	AF | ||||
| 		PUSH	BC | ||||
| 		LD	A,msgStrings.bootHdd | ||||
| 		CALL	POSTMSG | ||||
| 		POP	AF | ||||
| 		PUSH	AF | ||||
| 		CALL	PRINT_CHANEL | ||||
| 		; | ||||
| 		POP	BC | ||||
| 		POP	AF | ||||
| 		CP	#FF | ||||
| 		SCF  | ||||
| 		RET	Z | ||||
| 		; | ||||
| OS_LOAD:	LD	HL,512						;!HARDCODE | ||||
| 		LD	IX,#0001 | ||||
| .CD:		LD	(.SectorSizeAddr),HL | ||||
| 		LD	HL,#0000 | ||||
| 		LD	DE,TEMP | ||||
| 		LD	A,B | ||||
| 		LD	BC,1*256 + BIOS.DRV_READ | ||||
|         	PUSH	AF | ||||
|         	RST     ToBIOS_18 | ||||
| 		; | ||||
| 		POP	BC | ||||
| 		RET	C | ||||
| 		LD	A,B | ||||
| 		EX	AF,AF' | ||||
| 		LD	HL,TEMP | ||||
| 		LD	DE,SYSID | ||||
| 		LD	B,SYSID.length | ||||
| .loop:		LD	A,(DE) | ||||
| 		CP	(HL) | ||||
| 		SCF  | ||||
| 		RET	NZ | ||||
| 		INC	HL | ||||
| 		INC	DE | ||||
| 		DJNZ .loop | ||||
| 		EX	AF,AF' | ||||
| 		PUSH	AF | ||||
| 		LD	A,msgStrings.bootOk | ||||
| 		LD	E,COLORS.CGA.INK.LGREEN | ||||
| 		CALL	POSTMSC | ||||
| 		CALL	ScreenPOS.CRLF | ||||
| 		POP	AF			; 䨧¨ç¥áª¨© ®¬¥à ¤¨áª  | ||||
| 		POP	HL | ||||
| .MOVE0:		DI  | ||||
| 		IM	1 | ||||
| 		LD	HL,MOVE1 | ||||
| 		LD	DE,OS_LOAD.SectorSizeAddr - MOVE1.length	; !HARDCODE  | ||||
| 		LD	BC,MOVE1.length | ||||
| 		LDIR  | ||||
| 		JP	OS_LOAD.SectorSizeAddr - MOVE1.length | ||||
| 		; | ||||
| MOVE1:		LD	HL,#8000					; !HARDCODE  | ||||
| 		LD	SP,HL | ||||
| 		EX	DE,HL | ||||
| 		LD	HL,TEMP | ||||
| 		LD	BC,(OS_LOAD.SectorSizeAddr) | ||||
| 		LDIR | ||||
| 		JP	#8000+SYSID.length ;#800C			; !HARDCODE  | ||||
| 		; | ||||
| .length		EQU	$-MOVE1 | ||||
| 
 | ||||
| 
 | ||||
| 	POP	BC | ||||
| 	POP	AF | ||||
| 	CP	#FF | ||||
| 	SCF  | ||||
| 	RET	Z | ||||
| OS_LOAD: | ||||
| 	LD	HL,#0000 | ||||
| 	LD	IX,#0001 | ||||
| 	LD	DE,TEMP | ||||
| 	LD	A,B | ||||
| 	LD	BC,1*256 + BIOS.DRV_READ | ||||
|         PUSH	AF | ||||
|         RST     ToBIOS_18 | ||||
|          | ||||
| 	POP	BC | ||||
| 	RET	C | ||||
| 	LD	A,B | ||||
| 	EX	AF,AF' | ||||
| 	LD	HL,TEMP | ||||
| 	LD	DE,SYSID | ||||
| 	LD	B,SYSID.length | ||||
| .loop:	LD	A,(DE) | ||||
| 	CP	(HL) | ||||
| 	SCF  | ||||
| 	RET	NZ | ||||
| 	INC	HL | ||||
| 	INC	DE | ||||
| 	DJNZ .loop | ||||
| 	EX	AF,AF' | ||||
| 	PUSH	AF | ||||
| 	LD	A,msgStrings.bootOk | ||||
| 	LD	E,COLORS.CGA.INK.LGREEN | ||||
| 	;CALL	POSTMSG | ||||
| 	CALL	POSTMSC | ||||
| 	CALL	ScreenPOS.CRLF | ||||
| 	POP	AF | ||||
| 	POP	HL | ||||
| ;	JP	MOVE0 | ||||
| MOVE0:	DI  | ||||
| 	IM	1 | ||||
| 	LD	HL,MOVE1 | ||||
| 	LD	DE,#7C00						; !HARDCODE  | ||||
| 	LD	BC,MOVE1.length | ||||
| 	LDIR  | ||||
| 	JP	#7C00 | ||||
| MOVE1:	LD	SP,#7FFF						; !HARDCODE  | ||||
| 	LD	HL,TEMP | ||||
| 	LD	DE,#8000						; !HARDCODE  | ||||
| 	LD	BC,#0200						; !HARDCODE  | ||||
| 	LDIR  | ||||
| 	JP	#8000+SYSID.length ;#800C				; !HARDCODE  | ||||
| .length	EQU $-MOVE1 | ||||
| SYSID:	DZ	"Starting..." | ||||
| .length	EQU	$-SYSID | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik