5x Read/Write отличаются от R/W Long тем, что R/W
теперь при HL=0 не переключают страницу. Вместо этого выдаётся ошибка. В случае записи пишутся 0 в оставшиеся сектора. Мелкие фиксы.
This commit is contained in:
		
							parent
							
								
									9430a99f2b
								
							
						
					
					
						commit
						4caee04133
					
				| @ -126,22 +126,22 @@ NOINT:	 POP	AF | ||||
| ; any adress < #C0 with mask %xxxx0000 | ||||
| ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a | ||||
| TABLE_X: | ||||
| .v0:	DB 00101000b	; "0" | ||||
| .v1:	DB 10111101b	; "1" | ||||
| .v2:	DB 00110010b	; "2" | ||||
| .v3:	DB 00110100b	; "3" | ||||
| .v4:	DB 10100101b	; "4" | ||||
| .v5:	DB 01100100b	; "5" | ||||
| .v6:	DB 01100000b	; "6" | ||||
| .v7:	DB 00111101b	; "7" | ||||
| .v8:	DB 00100000b	; "8" | ||||
| .v9:	DB 00100100b	; "9" | ||||
| .vA:	DB 00100001b	; "A" | ||||
| .vB:	DB 11100000b	; "B" | ||||
| .vC:	DB 01101010b	; "C" | ||||
| .vD:	DB 10110000b	; "D" | ||||
| .vE:	DB 01100010b	; "E" | ||||
| .vF:	DB 01100011b	; "F" | ||||
| .v0:	DB %00101000	; "0"        a | ||||
| .v1:	DB %10111101	; "1"       ___ | ||||
| .v2:	DB %00110010	; "2"    f | g | b | ||||
| .v3:	DB %00110100	; "3"      |___| | ||||
| .v4:	DB %10100101	; "4"    e |   | c | ||||
| .v5:	DB %01100100	; "5"      |___|. | ||||
| .v6:	DB %01100000	; "6"        d	 | ||||
| .v7:	DB %00111101	; "7" | ||||
| .v8:	DB %00100000	; "8"      a - 7 | ||||
| .v9:	DB %00100100	; "9"      b - 6 | ||||
| .vA:	DB %00100001	; "A"      . - 5 | ||||
| .vB:	DB %11100000	; "B"      f - 4 | ||||
| .vC:	DB %01101010	; "C"      g - 3 | ||||
| .vD:	DB %10110000	; "D"      e - 2 | ||||
| .vE:	DB %01100010	; "E"      c - 1 | ||||
| .vF:	DB %01100011	; "F"	   d - 0 | ||||
|  ENDIF | ||||
| ;======================================= | ||||
| ; | ||||
| @ -268,23 +268,23 @@ ROM_DISK.Pages:                                                         ;  | ||||
|         _mInfoALIGN   #10,0 | ||||
| ; any adress < #C0 with mask %xxxx0000 | ||||
| ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a | ||||
| TABLE_X:								; â ĄŤ¨ć  ¤Ťď Sprinter POST-Tester-a | ||||
| TABLE_X: | ||||
| .v0:	DB %00101000	; "0"        a | ||||
| .v1:	DB %10111101	; "1"       ___ | ||||
| .v2:	DB %00110010	; "2"    f | g | b | ||||
| .v3:	DB %00110100	; "3"      |___| | ||||
| .v4:	DB %10100101	; "4"    e |   | c | ||||
| .v5:	DB %01100100	; "5"      |___| | ||||
| .v6:	DB %01100000	; "6"        d | ||||
| .v5:	DB %01100100	; "5"      |___|. | ||||
| .v6:	DB %01100000	; "6"        d	 | ||||
| .v7:	DB %00111101	; "7" | ||||
| .v8:	DB %00100000	; "8"      a - 7 | ||||
| .v9:	DB %00100100	; "9"      b - 6 | ||||
| .vA:	DB %00100001	; "A"      f - 4 | ||||
| .vB:	DB %11100000	; "B"      g - 3 | ||||
| .vC:	DB %01101010	; "C"      e - 2 | ||||
| .vD:	DB %10110000	; "D"      c - 1 | ||||
| .vE:	DB %01100010	; "E"      d - 0 | ||||
| .vF:	DB %01100011	; "F" | ||||
| .vA:	DB %00100001	; "A"      . - 5 | ||||
| .vB:	DB %11100000	; "B"      f - 4 | ||||
| .vC:	DB %01101010	; "C"      g - 3 | ||||
| .vD:	DB %10110000	; "D"      e - 2 | ||||
| .vE:	DB %01100010	; "E"      c - 1 | ||||
| .vF:	DB %01100011	; "F"	   d - 0 | ||||
|  ENDIF | ||||
| ;======================================= | ||||
| ; | ||||
| @ -424,6 +424,25 @@ EXTINT:	OR	A | ||||
| 
 | ||||
| 
 | ||||
| ; ==== POST PROCs ================= | ||||
| ; LPT 0 - start | ||||
| ; 	post 1. TEST RAM BUS | ||||
| ; 	 IF ERROR -> ERROR RAM BUS - CODE  'X'X'X'X... - ¢ëᢥâ¨âì ®¬¥à ®è¨¡®ç®£® ¡¨â  | ||||
| ; LPT 1 - post 1 OK | ||||
| ; 	post 2 TEST ADRESS BUS | ||||
| ; 	 IF ERROR -> ®è¨¡ª   ¤à¥á  CODE  'XXXX - ¢ë¢¥á⨠áâ à訩 ¡ ©â á § ¯ï⮩, ¯ ã§ , ¢ë¢¥á⨠¬« ¤è¨© ¡¥§ § ¯ï⮩ | ||||
| ; LPT 2 - post 2 OK	 | ||||
| ; 	post 3 init DCP | ||||
| ; 	 no errors | ||||
| ; LPT 3 - post 3 OK | ||||
| ; 	post 4 TEST RAM PAGES § ¯¨áì ¢ ¯®àâ áâà ¨æë, ç⥨¥ § ¯¨á ®£® | ||||
| ; 	 IF ERROR -> ®è¨¡ª  ¯¥à¥ª«î票ï Port-  CODE 'XX - ¢ë¢®¤ ¡ ©â  § ¯¨á ®£® ¢ ¯®àâ | ||||
| ; LPT 4 - post 4 OK | ||||
| ; 	post 5 ¯à®¢¥àª  ç¨áâ®âë è¨ë ¤ ëå Z84C15 | ||||
| ; 	 IF ERROR -> ERROR CODE   '_'XX  - ¢ ¡¨®á¥   ®è¨¡ª¥ ¥ § ¢¨á ¥â, å§ ¯®ç¥¬ã, ¬®¦¥â   á«ãç © ª®äë á £àï§®© 訮© ᯥªâà㬠 | ||||
| ; LPT 5 - post 5 OK | ||||
| ; LPT 4 - post 5 error - áâ àë© ¡¨®á | ||||
| ; LPT F - post 5 error - ¡¨®á 05/04/2025))) | ||||
| ; | ||||
| 	MODULE POST_TEST | ||||
| START: | ||||
| ; ********************************* | ||||
| @ -499,7 +518,7 @@ POST_1_RAM_BUS: | ||||
|         ; ¡¥áª®¥çë© æ¨ª« | ||||
| 	INC L | ||||
| 	LD A,L | ||||
| 	AND #AF | ||||
| 	AND +(TABLE_X or #0F)	;%1010'1111 | ||||
| 	LD L,A | ||||
| 	JR .ERB_2 | ||||
| 
 | ||||
| @ -548,12 +567,12 @@ POST_2_ADRESS_BUS: | ||||
| .error: | ||||
| .TSAB_4: | ||||
| 	LD C,D | ||||
| 	LD B,11011111b | ||||
| 	LD B,%1101'1111 | ||||
| 	LD IX,.TSAB_3 | ||||
| 	JR OUT_C_BYTE			; ¢ë¢¥á⨠áâ à訩 ¡ ©â á § ¯ï⮩ | ||||
| .TSAB_3: | ||||
| 	LD C,E | ||||
| 	LD B,#FF | ||||
| 	LD B,%1111'1111 | ||||
| 	LD IX,.TSAB_4 | ||||
| 	JR OUT_C_BYTE			; ¢ë¢¥á⨠¬« ¤è¨© ¡¥§ § ¯ï⮩ | ||||
| 
 | ||||
| @ -663,7 +682,7 @@ POST_4_PAGES: | ||||
| .error:	LD C,B | ||||
| 	LD IX,.error_out_ret | ||||
| .error_out_ret: | ||||
| 	LD B,11011111b | ||||
| 	LD B,%1101'1111 | ||||
| 	JP OUT_C_BYTE | ||||
| 
 | ||||
| ; *********************************** | ||||
| @ -679,11 +698,17 @@ POST_5_DATA_BUS: | ||||
| 	LD B,0 | ||||
| .loop:	IN A,(0) | ||||
| 	CP #FF | ||||
| 	;JR NZ,.error					;!!!!!  ŻŽáŹŽâŕĽâě | ||||
| 	JR NZ,POST_5_ERROR | ||||
| 	IF ERROR_POST_5 | ||||
| 	 JR NZ,.error					;!!!!!  ¯®á¬®âà¥âì | ||||
| 	ELSE | ||||
| 	 JR NZ,POST_5_ERROR | ||||
| 	ENDIF | ||||
| 	DJNZ .loop | ||||
| 	LD A,(TABLE_X.v5)				;rdlow-ok | ||||
| 	JR POST_5_OK | ||||
| 
 | ||||
| 	; | ||||
| 	; | ||||
|  IF ERROR_POST_5 | ||||
| ;	ERROR 	CODE   '_'XX | ||||
| .error: | ||||
| 	LD C,A | ||||
| @ -702,15 +727,18 @@ POST_5_DATA_BUS: | ||||
| 	OR E | ||||
| 	JR NZ,.LOOP_WTT4 | ||||
| 	JR .erb1 | ||||
|  ENDIF | ||||
| 
 | ||||
| ; ********************************** | ||||
| ; ===== Point 5 ========= | ||||
| ; ********************************** | ||||
|  IFN ERROR_POST_5 | ||||
| POST_5_ERROR: | ||||
| 	LD A,(TABLE_X.vF)				;rdlow-ok | ||||
|  ENDIF | ||||
| 
 | ||||
| POST_5_OK: | ||||
| 	LD A,(TABLE_X.v5)				;rdlow-ok | ||||
| 	OUT (Z84.PIO.Port_A.Data),A			; ¢ë¢¥á⨠"5" | ||||
| POST_5_ERROR: | ||||
| ; ********************************** | ||||
| ;	POST § ¢¥àè¥ | ||||
| 	ENDMODULE | ||||
|  | ||||
| @ -3,6 +3,10 @@ | ||||
| ;[]===========================================================[] | ||||
| 
 | ||||
| 
 | ||||
| ;!TODO | ||||
| ; ®¡ê¥¤¥¨âì ¯à®æ¥¤ãàë FDD_5x_LONG_READ ¨ FDD_5x_LONG_WRITE | ||||
| ; ®¡ê¥¤¥¨âì ¯à®æ¥¤ãàë READ_SECTOR ¨ WR_SEC | ||||
| 
 | ||||
| 
 | ||||
| ; FDD.CHANGE: | ||||
| ; 	LD	A,#01 | ||||
| @ -178,10 +182,9 @@ FDD_5x_RESET:	CALL	SAVE_INTERRUPTS.switch_off | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;[]===========================================================[] | ||||
| FDD_5x_READ: | ||||
| 	EX	AF,AF' | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| FDD_5x_READ:	EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| ;[]===========================================================[] | ||||
| ;Function: Long	Read Sectors | ||||
| ;	A - Disk | ||||
| @ -194,7 +197,11 @@ FDD_5x_READ: | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;[]===========================================================[] | ||||
| FDD_5x_LONG_READ: | ||||
| 		CALL	SAVE_INTERRUPTS.switch_off | ||||
| 		EXX | ||||
| 		 LD	B,#80		; COMMAND READ | ||||
| 		EXX | ||||
| 		; | ||||
| .RW_Shared:	CALL	SAVE_INTERRUPTS.switch_off | ||||
| 		CALL	.Start | ||||
| 		JP	SAVE_INTERRUPTS.restore | ||||
| 		; | ||||
| @ -202,8 +209,9 @@ FDD_5x_LONG_READ: | ||||
| 		PUSH	BC | ||||
| 		PUSH	HL | ||||
| 		PUSH	IX | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		LD	C,A | ||||
| 		 LD	C,A		; Memory Page Number | ||||
| 		EX	AF,AF' | ||||
| 		PUSH	BC | ||||
| 		CALL	SET_DOS_ON | ||||
| @ -212,46 +220,53 @@ FDD_5x_LONG_READ: | ||||
| 		CALL	NTRACK | ||||
| 		POP	BC | ||||
| 		EX	DE,HL | ||||
| ;		LD	A,B | ||||
| ;		OR	A | ||||
| ;		JP	Z,RETDOS | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	IY,(FDD_INIT_TABLE.FDD_0.BytesPerSector) | ||||
| 		LD	XH,C | ||||
| 		LD	XH,C		; Memory Page Number | ||||
| 		LD	A,(FDD_INIT_TABLE.FDD_0.SECTORS) | ||||
| 		LD	C,A | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| .DSK_LP:	LD	A,D | ||||
| 		EXX  | ||||
| 		CALL	SEEK | ||||
| 		EXX | ||||
| 		 PUSH	BC | ||||
| 		 CALL	SEEK | ||||
| 		 POP	BC | ||||
| 		EXX  | ||||
| 		PUSH	DE | ||||
| 		PUSH	BC | ||||
| 		PUSH	HL | ||||
| 		CALL	READ_SECTOR | ||||
| 	;CALL	READ_SECTOR | ||||
| 	CALL	FDD_RW_SECTOR | ||||
| 		JR	C,ERRDOS | ||||
| 		LD	D,YH | ||||
| 		LD	E,YL | ||||
| 		; à §¬¥à ᥪâ®à  | ||||
| 		 LD	D,YH | ||||
| 		 LD	E,YL | ||||
| 		; | ||||
| 		POP	HL | ||||
| 		POP	BC | ||||
| 		ADD	HL,DE | ||||
| 		JR	NC,.THISRD | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	D,#C2 | ||||
| 		LD	E,XH | ||||
| 		LD	A,(DE) | ||||
| 		LD	XH,A | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		SET	7,H | ||||
| 		SET	6,H | ||||
| 		; | ||||
| 		CALL	C,CHANGE_MEM_BLK | ||||
| 		; IN	A,(SLOT3) | ||||
| 		; EX	AF,AF' | ||||
| 		;  LD	A,SYS_PAGE | ||||
| 		;  OUT	(SLOT3),A | ||||
| 		;  LD	D,high SYS_PAGE.RAM_TABLE | ||||
| 		;  LD	E,XH | ||||
| 		;  LD	A,(DE) | ||||
| 		;  LD	XH,A | ||||
| 		; EX	AF,AF' | ||||
| 		; OUT	(SLOT3),A | ||||
| 		; ; SET	7,H | ||||
| 		; ; SET	6,H | ||||
| 		;  LD	A,%1100'0000 | ||||
| 		;  OR	H | ||||
| 		;  LD	H,A | ||||
| 	; | ||||
| .THISRD:	POP	DE | ||||
| 		LD	A,C | ||||
| 		INC	E | ||||
| @ -261,7 +276,7 @@ FDD_5x_LONG_READ: | ||||
| 		INC	D | ||||
| .NINC_T:	DJNZ	.DSK_LP | ||||
| .RETDOS:	CALL	SET_DOS_OFF | ||||
| 		LD	A,XH | ||||
| 		LD	A,XH		; Memory Page Number | ||||
| 		EX	AF,AF' | ||||
| 		EX	DE,HL | ||||
| 		POP	IX | ||||
| @ -276,12 +291,19 @@ FDD_5x_LONG_READ: | ||||
| 		JR	NZ,.ADD8BIT | ||||
| 		INC	B | ||||
| .ADD8BIT:	ADD	IX,BC | ||||
| 		LD	BC,0 | ||||
| 		ADC	HL,BC | ||||
| 		LD	B,A | ||||
| 		XOR	A | ||||
| 		RET  | ||||
| 	; | ||||
| 		;!TEST | ||||
| 		 ;LD	BC,0 | ||||
| 		 ;ADC	HL,BC | ||||
| 		 ;LD	B,A | ||||
| 		 ;XOR	A | ||||
| 		 ;RET  | ||||
| 		 ; | ||||
| 		 LD	B,A | ||||
| 		 RET	NC | ||||
| 		 INC	HL | ||||
| 		 XOR	A | ||||
| 		 RET | ||||
| 		; | ||||
| ERRDOS:		POP	HL | ||||
| 		POP	BC | ||||
| 		POP	DE | ||||
| @ -289,7 +311,7 @@ ERRDOS:		POP	HL | ||||
| 		EX	DE,HL | ||||
| 		EX	AF,AF' | ||||
| 		EXX  | ||||
| 		LD	C,XH | ||||
| 		 LD	C,XH		; Memory Page Number | ||||
| 		EXX  | ||||
| 		LD	A,B | ||||
| 		POP	IX | ||||
| @ -307,7 +329,7 @@ ERRDOS:		POP	HL | ||||
| 		ADC	HL,BC | ||||
| 		POP	BC | ||||
| 		EXX  | ||||
| 		LD	A,C | ||||
| 		 LD	A,C | ||||
| 		EXX  | ||||
| 		EX	AF,AF' | ||||
| 		SCF  | ||||
| @ -323,10 +345,9 @@ ERRDOS:		POP	HL | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;[]===========================================================[] | ||||
| FDD_5x_WRITE: | ||||
| 	EX	AF,AF' | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| FDD_5x_WRITE:	EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| ;[]===========================================================[] | ||||
| ;Function: Long	Write Sectors | ||||
| ;	A - Disk | ||||
| @ -340,6 +361,12 @@ FDD_5x_WRITE: | ||||
| ;??	B - Sector counter | ||||
| ;[]===========================================================[] | ||||
| FDD_5x_LONG_WRITE: | ||||
| 		EXX | ||||
| 		 LD	B,#A0		;COMMAND WRITE | ||||
| 		EXX | ||||
| 		JP	FDD_5x_LONG_READ.RW_Shared | ||||
| 
 | ||||
| /* | ||||
| 		CALL	SAVE_INTERRUPTS.switch_off | ||||
| 		CALL	.Start | ||||
| 		JP	SAVE_INTERRUPTS.restore | ||||
| @ -348,8 +375,9 @@ FDD_5x_LONG_WRITE: | ||||
| 		PUSH	BC | ||||
| 		PUSH	HL | ||||
| 		PUSH	IX | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		LD	C,A | ||||
| 		 LD	C,A | ||||
| 		EX	AF,AF' | ||||
| 		PUSH	BC | ||||
| 		CALL	SET_DOS_ON | ||||
| @ -358,9 +386,6 @@ FDD_5x_LONG_WRITE: | ||||
| 		CALL	NTRACK | ||||
| 		POP	BC | ||||
| 		EX	DE,HL | ||||
| ;		LD	A,B | ||||
| ;		OR	A | ||||
| ;		JP	Z,RETDOS | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| @ -372,32 +397,41 @@ FDD_5x_LONG_WRITE: | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| .DSK_LP2:	LD	A,D | ||||
| 		EXX  | ||||
| 		CALL	SEEK | ||||
| 		EXX | ||||
| 		 PUSH	BC | ||||
| 		 CALL	SEEK | ||||
| 		 POP	BC | ||||
| 		EXX  | ||||
| 		PUSH	DE | ||||
| 		PUSH	BC | ||||
| 		PUSH	HL | ||||
| 		CALL	WR_SEC | ||||
| 	CALL	WR_SEC | ||||
| 		JR	C,ERRDOS | ||||
| 		LD	D,YH | ||||
| 		LD	E,YL | ||||
| 		; à §¬¥à ᥪâ®à  | ||||
| 		 LD	D,YH | ||||
| 		 LD	E,YL | ||||
| 		; | ||||
| 		POP	HL | ||||
| 		POP	BC | ||||
| 		ADD	HL,DE | ||||
| 		JR	NC,.THISWR | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	D,#C2 | ||||
| 		LD	E,XH | ||||
| 		LD	A,(DE) | ||||
| 		LD	XH,A | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		SET	7,H | ||||
| 		SET	6,H | ||||
| 		; | ||||
| 		CALL	C,CHANGE_MEM_BLK | ||||
| 		; IN	A,(SLOT3) | ||||
| 		; EX	AF,AF' | ||||
| 		;  LD	A,SYS_PAGE | ||||
| 		;  OUT	(SLOT3),A | ||||
| 		;  LD	D,high SYS_PAGE.RAM_TABLE | ||||
| 		;  LD	E,XH | ||||
| 		;  LD	A,(DE) | ||||
| 		;  LD	XH,A | ||||
| 		; EX	AF,AF' | ||||
| 		; OUT	(SLOT3),A | ||||
| 		; ; SET	7,H | ||||
| 		; ; SET	6,H | ||||
| 		;  LD	A,%1100'0000 | ||||
| 		;  OR	H | ||||
| 		;  LD	H,A | ||||
| 		; | ||||
| .THISWR:	POP	DE | ||||
| 		LD	A,C | ||||
| 		INC	E | ||||
| @ -435,15 +469,16 @@ FDD_5x_LONG_WRITE: | ||||
| 		 XOR	A | ||||
| 		 RET | ||||
| 		; | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* | ||||
| ; | ||||
| ;------------------------------- | ||||
| ;READ SECTOR | ||||
| ;------------------------------- | ||||
| READ_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| .RRETRY:	;DI  | ||||
| .HL_RETRY:	;DI  | ||||
| 		PUSH	HL | ||||
| 		PUSH	DE | ||||
| 		LD	A,E | ||||
| 		INC	A | ||||
| @ -455,167 +490,203 @@ READ_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| 		; | ||||
| 		LD	B,4			; áçñâ稪 | ||||
| 		LD	C,FDC_93.Data | ||||
| 		LD	A,#80			;!HARDCODE COMMAND READ | ||||
| 	LD	A,#80				; COMMAND READ | ||||
| 		OUT	(FDC_93.Command),A | ||||
| 		; | ||||
| .FDR001:	IN	A,(FDC_93.DrvCTRL)	;WAIT INTRQ or DRQ | ||||
| 		AND	#C0 | ||||
| 		JR	NZ,.FDR004 | ||||
| 		AND	%1100'0000		;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤  = 0). | ||||
| 		JR	NZ,.read_loop | ||||
| 		INC	DE | ||||
| 		LD	A,E | ||||
| 		OR	D | ||||
| 		JR	NZ,.FDR001 | ||||
| 		; | ||||
| 		DJNZ	.FDR001 | ||||
| 		SCF  | ||||
| 		JR	.FDR005 | ||||
| 	;READ BYTE | ||||
| .read_loop:	INI | ||||
| .wait_data:	IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	%1100'0000		;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤  = 0). | ||||
| 		JR	Z,.wait_data | ||||
| 		JP	P,.read_loop		; JUMP if "¢ë¯®«ï¥âáï ª®¬ ¤  = 0" | ||||
| 		; | ||||
| .FDR004:	INI				;READ BYTE | ||||
| .FDR002:	IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	#C0 | ||||
| 		JR	Z,.FDR002 | ||||
| 		JP	P,.FDR004 | ||||
| .FDR005:	EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		 OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		; | ||||
| 		POP	DE | ||||
| 		POP	HL | ||||
| 		;EI  | ||||
| 		LD	A,BIOS.Error.NotReady | ||||
| 		JR	C,.ERR_XRD | ||||
| 		; | ||||
| 		IN	A,(FDC_93.Command) | ||||
| 		LD	C,A | ||||
| ;R01		; JP	C,ERRRD			;READ ERROR | ||||
| 		; [x] 29/06/2024 | ||||
| 		 ;JP	C,.ERR_XRD | ||||
| 		 JR	NC,.NO_ERR_XRD | ||||
| 		 DEC	D | ||||
| 		 JR	Z,.RSTOP | ||||
| 		 JR	.RRETRY | ||||
| 		; | ||||
| .NO_ERR_XRD:	;  | ||||
| 		AND	#7F | ||||
| 		RET	Z | ||||
| 		RET	Z			; ‚ë室 ¡¥§ ®è¨¡®ª | ||||
| 		; | ||||
| 		BIT	2,C | ||||
| 		JR	NZ,.ERDATA | ||||
| 		; | ||||
| 		LD	A,BIOS.Error.Seek | ||||
| 		DEC	D | ||||
| .ERR_XRD:	DEC	D | ||||
| 		JR	Z,.RSTOP | ||||
| 		; | ||||
| 		PUSH	DE | ||||
| 		PUSH	HL | ||||
| 		CALL	RESWG			; RESET_WG | ||||
| 		LD	A,XL | ||||
| 		CALL	SEEK	  ; !!!!!  ¯®á¬®âà¥âì | ||||
| .ERR_XRD:	POP	DE | ||||
| 		JR	.RRETRY | ||||
| 		CALL	SEEK	  		; !!!!!  ¯®á¬®âà¥âì | ||||
| 		POP	HL | ||||
| 		POP	DE | ||||
| 		JR	.HL_RETRY | ||||
| 		; | ||||
| .ERDATA:	DEC	D			; POTERIA DANNYH | ||||
| 		JR	NZ,.RRETRY | ||||
| .ERDATA:	DEC	D			; ¯®â¥àï ¤ ëå | ||||
| 		JR	NZ,.HL_RETRY | ||||
| 	; Error Read | ||||
| .ERRRD:		LD	A,BIOS.Error.Read | ||||
| .RSTOP:		EX	AF,AF' | ||||
| 		LD	A,#D0 | ||||
| 		OUT	(FDC_93.Command),A      ;STOP OPERATION | ||||
| 		 LD	A,#D0 | ||||
| 		 OUT	(FDC_93.Command),A      ;STOP OPERATION | ||||
| 		EX	AF,AF' | ||||
| 		BIT	0,C | ||||
| 		SCF  | ||||
| 		RET	Z | ||||
| 		LD	A,BIOS.Error.SectorNotFound | ||||
| 		RET  | ||||
| 		RET | ||||
| ;	;	; | ||||
| */ | ||||
| 
 | ||||
| ; | ||||
| ;------------------------------- | ||||
| ;WRITE SECTOR | ||||
| ;------------------------------- | ||||
| WR_SEC:	LD	D,5	;RETRY COUNT | ||||
| .WRETRY: | ||||
| 	;DI  | ||||
| 	PUSH	DE | ||||
| 	LD	A,E | ||||
| 	INC	A | ||||
| 	OUT	(FDC_93.Sector),A | ||||
| .FDWRITE: | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,XH | ||||
| 	OUT	(SLOT3),A | ||||
| 	LD	B,4 | ||||
| 	LD	C,FDC_93.Data | ||||
| 	LD	A,#A0		;COMMAND WRITE | ||||
| 	OUT	(FDC_93.Command),A | ||||
| .FDW001: | ||||
| 	IN	A,(FDC_93.DrvCTRL)	;WAIT INTRQ or DRQ | ||||
| 	AND	#C0 | ||||
| 	JR	NZ,.FDW004 | ||||
| 	INC	DE | ||||
| 	LD	A,E | ||||
| 	OR	D | ||||
| 	JR	NZ,.FDW001 | ||||
| 	DJNZ	.FDW001 | ||||
| 	SCF  | ||||
| 	JR	.FDW005 | ||||
| .FDW004: | ||||
| 	OUTI			;WRITE BYTE | ||||
| .FDW002: | ||||
| 	IN	A,(FDC_93.DrvCTRL) | ||||
| 	AND	#C0 | ||||
| 	JR	Z,.FDW002 | ||||
| 	JP	P,.FDW004 | ||||
| .FDW005: | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	EX	AF,AF' | ||||
| ;------------------------------- | ||||
| 	POP	DE | ||||
| 	;EI  | ||||
| 	IN	A,(FDC_93.Command) | ||||
| 	LD	C,A | ||||
| ;R01 | ||||
| 	JR	C,.ERR_XWR | ||||
| 	AND	#7F | ||||
| 	RET	Z | ||||
| 	BIT	6,C | ||||
| 	LD	A,BIOS.Error.WriteProtect | ||||
| 	JR	NZ,.WSTOP | ||||
| 	BIT	2,C | ||||
| 	JR	NZ,.EWDATA | ||||
| 	LD	A,BIOS.Error.Seek | ||||
| 	DEC	D | ||||
| 	JR	Z,.WSTOP | ||||
| .ERR_XWR: | ||||
| 	PUSH	DE | ||||
| 	CALL	RESWG		; RESET_WG | ||||
| 	LD	A,XL | ||||
| 	CALL	SEEK	  ; !!!!!  ¯®á¬®âà¥âì | ||||
| 	POP	DE | ||||
| 	JR	.WRETRY | ||||
| .EWDATA: | ||||
| 	DEC	D	       ; POTERIA DANNYH | ||||
| 	JR	NZ,.WRETRY | ||||
| .ERRWR: LD	A,BIOS.Error.Write | ||||
| .WSTOP:	EX	AF,AF' | ||||
| 	LD	A,#D0 | ||||
| 	OUT	(FDC_93.Command),A      ;STOP OPERATION | ||||
| 	EX	AF,AF' | ||||
| 	BIT	0,C | ||||
| 	SCF  | ||||
| 	RET	Z | ||||
| 	LD	A,BIOS.Error.SectorNotFound | ||||
| 	RET  | ||||
| 
 | ||||
| FDD_RW_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| .RETRY:		DI  | ||||
| 		PUSH	HL | ||||
| 		PUSH	DE | ||||
| 		LD	A,E | ||||
| 		INC	A | ||||
| 		OUT	(FDC_93.Sector),A | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,XH | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	B,4 | ||||
| 		LD	C,FDC_93.Data | ||||
| 		EXX | ||||
| 		 LD	A,B			; COMMAND read or write | ||||
| 		EXX | ||||
| 		OUT	(FDC_93.Command),A | ||||
| 		; | ||||
| .wait_loop:	IN	A,(FDC_93.DrvCTRL)	;WAIT INTRQ or DRQ | ||||
| 		AND	%1100'0000		;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤  = 0). | ||||
| 		JR	NZ,.RW_PROC | ||||
| 		INC	DE | ||||
| 		LD	A,E | ||||
| 		OR	D | ||||
| 		JR	NZ,.wait_loop | ||||
| 		DJNZ	.wait_loop | ||||
| 		SCF  | ||||
| 		JR	.after_rw		; error | ||||
| 		; | ||||
| .RW_PROC:	EXX | ||||
| 		 BIT	5,B | ||||
| 		EXX | ||||
| 		JR	NZ,.write_loop | ||||
| 		;READ BYTE | ||||
| .read_loop:	INI | ||||
| .wait_data_r:	IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	%1100'0000		;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤  = 0). | ||||
| 		JR	Z,.wait_data_r | ||||
| 		JP	P,.read_loop		; JUMP if "¢ë¯®«ï¥âáï ª®¬ ¤  = 0" | ||||
| .rw_return:	; | ||||
| .after_rw:	EX	AF,AF' | ||||
| 		 OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		; | ||||
| 		POP	DE | ||||
| 		POP	HL | ||||
| 		; ¯à¥à뢠¨ï | ||||
| 		LD	A,R | ||||
| 		AND	%1000'0000 | ||||
| 		JR	Z,.no_EI | ||||
| 		EI | ||||
| .no_EI:		; | ||||
| 		LD	A,BIOS.Error.NotReady | ||||
| 		JR	C,.CMD_ERROR | ||||
| 		; | ||||
| 		IN	A,(FDC_93.Command) | ||||
| 		LD	C,A | ||||
| 		AND	#7F | ||||
| 	; NORMAL EXIT | ||||
| 		RET	Z | ||||
| 	; | ||||
| 		BIT	6,C | ||||
| 		LD	A,BIOS.Error.WriteProtect | ||||
| 		JR	NZ,.error_exit | ||||
| 		; | ||||
| 		BIT	2,C | ||||
| 		JR	NZ,.data_lost | ||||
| 		; | ||||
| 		LD	A,BIOS.Error.Seek | ||||
| .CMD_ERROR:	DEC	D | ||||
| 		JR	Z,.error_exit | ||||
| 		; | ||||
| 		PUSH	DE | ||||
| 		PUSH	HL | ||||
| 		CALL	RESWG			; RESET_WG | ||||
| 		LD	A,XL | ||||
| 		CALL	SEEK			; !!!!!  ¯®á¬®âà¥âì | ||||
| 		POP	HL | ||||
| 		POP	DE | ||||
| 		JR	.RETRY | ||||
| 		; | ||||
| .data_lost:	DEC	D			; ¯®â¥àï ¤ ëå | ||||
| 		JR	NZ,.RETRY | ||||
| 		; | ||||
| 	 	EXX | ||||
| 		 BIT	5,B | ||||
| 	 	EXX | ||||
| 		LD	A,BIOS.Error.Read	; Error Read | ||||
| 		JR	Z,.error_exit | ||||
| 		; | ||||
| 		LD	A,BIOS.Error.Write	; Error Write | ||||
| .error_exit:	EX	AF,AF' | ||||
| 		 LD	A,#D0 | ||||
| 		 OUT	(FDC_93.Command),A	;STOP OPERATION | ||||
| 		EX	AF,AF' | ||||
| 		BIT	0,C | ||||
| 		SCF  | ||||
| 		RET	Z | ||||
| 		LD	A,BIOS.Error.SectorNotFound | ||||
| 		RET | ||||
| 		; | ||||
| 	;WRITE BYTE | ||||
| .write_loop:	OUTI | ||||
| .wwait_data:	IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	%1100'0000		;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤  = 0). | ||||
| 		JR	Z,.wwait_data | ||||
| 		JP	P,.write_loop | ||||
| 		JP	.rw_return | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ; | ||||
| ; ‚àã¡ ¥â âà¥âìî ª àâã ¯®à⮢ | ||||
| SET_DOS_ON: | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,CNF_PORT.CNF_3 + ROM.BIOS | ||||
| 	OUT	(SYS_PORT.ROM),A	                ; - OPEN | ||||
| 	EX	AF,AF' | ||||
| 	RET  | ||||
| SET_DOS_ON:	EX	AF,AF' | ||||
| 		 LD	A,CNF_PORT.CNF_3 + ROM.BIOS | ||||
| 		 OUT	(SYS_PORT.ROM),A	                ; - OPEN | ||||
| 		EX	AF,AF' | ||||
| 		RET  | ||||
| ; ‚àã¡ ¥â ã«¥¢ãî ª àâã ¯®à⮢ | ||||
| SET_DOS_OFF: | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,CNF_PORT.CNF_0 + ROM.BIOS | ||||
| 	OUT	(SYS_PORT.ROM),A	                ; - CLOSE | ||||
| 	EX	AF,AF' | ||||
| 	RET  | ||||
| SET_DOS_OFF:	EX	AF,AF' | ||||
| 		 LD	A,CNF_PORT.CNF_0 + ROM.BIOS | ||||
| 		 OUT	(SYS_PORT.ROM),A	                ; - CLOSE | ||||
| 		EX	AF,AF' | ||||
| 		RET  | ||||
| 
 | ||||
| ; | ||||
| S_FDD:	PUSH	BC | ||||
| @ -625,12 +696,12 @@ S_FDD:	PUSH	BC | ||||
| 	OUT	(FDC_93.DrvCTRL),A | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,SYS_PAGE | ||||
| 	OUT	(SLOT3),A | ||||
| 	LD	A,(FDD_INIT_TABLE.FDD_0.DISK) | ||||
| 	AND	#FE | ||||
| 	OR	B | ||||
| 	LD	(FDD_INIT_TABLE.FDD_0.DISK),A | ||||
| 	 LD	A,SYS_PAGE | ||||
| 	 OUT	(SLOT3),A | ||||
| 	 LD	A,(FDD_INIT_TABLE.FDD_0.DISK) | ||||
| 	 AND	#FE | ||||
| 	 OR	B | ||||
| 	 LD	(FDD_INIT_TABLE.FDD_0.DISK),A | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	POP	BC | ||||
| @ -672,10 +743,10 @@ FDD.SET1440:	LD	A,FDD_Density.SET_1440 | ||||
| ; | ||||
| SET_SPEED:	IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,(FDD_INIT_TABLE.FDD_0.F144) | ||||
| 		AND	#80 | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	A,(FDD_INIT_TABLE.FDD_0.F144) | ||||
| 		 AND	#80 | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| @ -687,116 +758,118 @@ FDD.SET720:	LD	A,FDD_Density.SET_720 | ||||
| 
 | ||||
| ; ¯à¥à뢠¨ï ¤®«¦ë ¡ëâì ®âª«îç¥ë | ||||
| DISK_ID:	EXX  | ||||
| 		CALL	SET_SPEED | ||||
| 		IN	A,(FDC_93.Track) | ||||
| 		OUT	(FDC_93.Data),A | ||||
| 		LD	A,#18	;!TODO ¢ë¯¨á âì ª®¬¬ ¤ë ‚ƒ ;SEARCH ; !HARDCODE | ||||
| 		CALL	EXECOM | ||||
| 		LD	C,4			; áçñâ稪 | ||||
| .loop_reg_C:	LD	A,#C0 | ||||
| 		OUT	(FDC_93.Command),A | ||||
| 		LD	HL,#F000		; áçñâ稪 | ||||
| .loop_reg_HL:	IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	#C0 | ||||
| 		JR	Z,.ID_LP4 | ||||
| 		; | ||||
| .ID_LP2:	IN	A,(FDC_93.Data) | ||||
| .ID_LP3:	IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	#C0 | ||||
| 		JR	Z,.ID_LP3 | ||||
| 		JP	P,.ID_LP2 | ||||
| 		 CALL	SET_SPEED | ||||
| 		 IN	A,(FDC_93.Track) | ||||
| 		 OUT	(FDC_93.Data),A | ||||
| 		 LD	A,#18	;!TODO ¢ë¯¨á âì ª®¬¬ ¤ë ‚ƒ ;SEARCH ; !HARDCODE | ||||
| 		 CALL	EXECOM | ||||
| 		 LD	C,4			; áçñâ稪 | ||||
| .loop_reg_C:	 LD	A,#C0 | ||||
| 		 OUT	(FDC_93.Command),A | ||||
| 		 LD	HL,#F000		; áçñâ稪 | ||||
| .loop_reg_HL:	 IN	A,(FDC_93.DrvCTRL) | ||||
| 		 AND	#C0 | ||||
| 		 JR	Z,.ID_LP4 | ||||
| 		 ; | ||||
| .ID_LP2:	 IN	A,(FDC_93.Data) | ||||
| .ID_LP3:	 IN	A,(FDC_93.DrvCTRL) | ||||
| 		 AND	#C0 | ||||
| 		 JR	Z,.ID_LP3 | ||||
| 		 JP	P,.ID_LP2 | ||||
| 		EXX  | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,(FDD_INIT_TABLE.FDD_0.F144) | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	A,(FDD_INIT_TABLE.FDD_0.F144) | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		AND	#80 | ||||
| 		RET | ||||
| 		; | ||||
| .ID_LP4:	DEC	HL | ||||
| 		LD	A,H | ||||
| 		OR	L | ||||
| 		JR	NZ,.loop_reg_HL | ||||
| 		CALL	CHANGE_SPEED | ||||
| 		DEC	C | ||||
| 		JR	NZ,.loop_reg_C | ||||
| .ID_LP4:	 DEC	HL | ||||
| 		 LD	A,H | ||||
| 		 OR	L | ||||
| 		 JR	NZ,.loop_reg_HL | ||||
| 		 CALL	CHANGE_SPEED | ||||
| 		 DEC	C | ||||
| 		 JR	NZ,.loop_reg_C | ||||
| 		EXX  | ||||
| 		SCF  | ||||
| 		RET | ||||
| ; | ||||
| 
 | ||||
| ; | ||||
| SEEK:	LD	XL,A | ||||
| 	LD	C,A | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,SYS_PAGE | ||||
| 	OUT	(SLOT3),A | ||||
| 	LD	A,(FDD_INIT_TABLE.FDD_0.DISK) | ||||
| 	AND	1 | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	EX	AF,AF' | ||||
| 	SRL	C | ||||
| 	JR	C,.GT001 | ||||
| 	OR	#3C | ||||
| .GT001:	OR	#2C | ||||
| 	OUT	(FDC_93.DrvCTRL),A | ||||
| 	IN	A,(FDC_93.Track) | ||||
| 	CP	C | ||||
| 	PUSH	BC | ||||
| 	CALL	NZ,P50ms | ||||
| 	POP	BC | ||||
| 	LD	A,C | ||||
| 	OUT	(FDC_93.Data),A | ||||
| 	IN	A,(FDC_93.Track) | ||||
| 	CP	C | ||||
| 	EX	AF,AF'	;R.TRACK==PHISICAL TRACK | ||||
| 	LD	A,#18 | ||||
| 	CALL	EXECOM | ||||
| 	RET	C | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,C | ||||
| 	OUT	(FDC_93.Track),A | ||||
| 	RET	Z | ||||
| .STOL:	PUSH	BC | ||||
| 	CALL	P50ms | ||||
| 	POP	BC | ||||
| 	RET  | ||||
| SEEK:		LD	XL,A | ||||
| 		LD	C,A | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,(FDD_INIT_TABLE.FDD_0.DISK) | ||||
| 		AND	1 | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		SRL	C | ||||
| 		JR	C,.GT001 | ||||
| 		; | ||||
| 		OR	#3C | ||||
| .GT001:		OR	#2C | ||||
| 		OUT	(FDC_93.DrvCTRL),A | ||||
| 		IN	A,(FDC_93.Track) | ||||
| 		CP	C | ||||
| 		PUSH	BC | ||||
| 		CALL	NZ,P50ms | ||||
| 		; | ||||
| 		POP	BC | ||||
| 		LD	A,C | ||||
| 		OUT	(FDC_93.Data),A | ||||
| 		IN	A,(FDC_93.Track) | ||||
| 		CP	C | ||||
| 		EX	AF,AF'	;R.TRACK==PHISICAL TRACK | ||||
| 		LD	A,#18 | ||||
| 		CALL	EXECOM | ||||
| 		RET	C | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,C | ||||
| 		OUT	(FDC_93.Track),A | ||||
| 		RET	Z | ||||
| .STOL:		PUSH	BC | ||||
| 		CALL	P50ms | ||||
| 		POP	BC | ||||
| 		RET  | ||||
| ; | ||||
| ;P750ms	 LD	 B,3 | ||||
| ;PMS2	 LD	 A,255 | ||||
| ;	 CALL	 P1ms | ||||
| ;	 DJNZ	 PMS2 | ||||
| ;	 RET | ||||
| P50ms:	LD	A,12 | ||||
| .P1ms:	LD	C,255 | ||||
| .PMS:	DEC	C | ||||
| 	JR	NZ,.PMS | ||||
| 	DEC	A | ||||
| 	JR	NZ,.P1ms | ||||
| 	RET  | ||||
| P50ms:		LD	A,12 | ||||
| .P1ms:		LD	C,255 | ||||
| .PMS:		DEC	C | ||||
| 		JR	NZ,.PMS | ||||
| 		DEC	A | ||||
| 		JR	NZ,.P1ms | ||||
| 		RET  | ||||
| ; | ||||
| 
 | ||||
| ; | ||||
| RESWG:	LD	A,8 | ||||
| EXECOM:	OUT	(FDC_93.Command),A | ||||
| 	LD	HL,#0000	; áçñâ稪 | ||||
| .WREST:	DEC	HL | ||||
| 	LD	A,H | ||||
| 	OR	L | ||||
| 	SCF  | ||||
| 	RET	Z | ||||
| 	; | ||||
| 	IN	A,(FDC_93.DrvCTRL) | ||||
| 	AND	#80 | ||||
| 	JR	Z,.WREST | ||||
| 	;AND	A | ||||
| 	RET  | ||||
| RESWG:		LD	A,8 | ||||
| 		; | ||||
| EXECOM:		OUT	(FDC_93.Command),A | ||||
| 		LD	HL,#0000	; áçñâ稪 | ||||
| .WREST:		DEC	HL | ||||
| 		LD	A,H | ||||
| 		OR	L | ||||
| 		SCF  | ||||
| 		RET	Z | ||||
| 		; | ||||
| 		IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	#80 | ||||
| 		JR	Z,.WREST | ||||
| 		RET  | ||||
| ; | ||||
| 
 | ||||
| ; | ||||
| @ -804,35 +877,34 @@ EXECOM:	OUT	(FDC_93.Command),A | ||||
| ; HL:IX	- SECTOR | ||||
| ;  H - TRACK, L	- SECTOR | ||||
| ;HL:IX/SECTOR_PER_TRACK | ||||
| NTRACK: | ||||
| 	PUSH	HL | ||||
| 	EX	(SP),IX | ||||
| 	POP	HL | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,SYS_PAGE | ||||
| 	OUT	(SLOT3),A | ||||
| 	LD	A,(FDD_INIT_TABLE.FDD_0.SECTORS) | ||||
| 	LD	C,A | ||||
| 	LD	B,0 | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	XOR	A | ||||
| .NTRK:	INC	A | ||||
| 	SBC	HL,BC | ||||
| 	JR	NC,.NTRK | ||||
| 	EX	AF,AF' | ||||
| 	LD	A,XL | ||||
| 	OR	XH | ||||
| 	JR	Z,.NTRK3 | ||||
| 	EX	AF,AF' | ||||
| 	DEC	IX | ||||
| 	JR	.NTRK | ||||
| .NTRK3:	EX	AF,AF' | ||||
| 	ADD	HL,BC | ||||
| 	DEC	A | ||||
| 	LD	H,A | ||||
| 	RET | ||||
| NTRACK:		PUSH	HL | ||||
| 		EX	(SP),IX | ||||
| 		POP	HL | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	A,(FDD_INIT_TABLE.FDD_0.SECTORS) | ||||
| 		 LD	C,A | ||||
| 		 LD	B,0 | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		XOR	A | ||||
| .NTRK:		INC	A | ||||
| 		SBC	HL,BC | ||||
| 		JR	NC,.NTRK | ||||
| 		EX	AF,AF' | ||||
| 		 LD	A,XL | ||||
| 		 OR	XH | ||||
| 		 JR	Z,.NTRK3 | ||||
| 		EX	AF,AF' | ||||
| 		DEC	IX | ||||
| 		JR	.NTRK | ||||
| .NTRK3:		EX	AF,AF' | ||||
| 		ADD	HL,BC | ||||
| 		DEC	A | ||||
| 		LD	H,A | ||||
| 		RET | ||||
| ; | ||||
| SAVE_INTERRUPTS: | ||||
| .switch_off:	PUSH AF | ||||
|  | ||||
| @ -151,9 +151,12 @@ ATAPI_5x_SET_PAR: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;READ SECTOR(S) | ||||
| ATAPI_5x_READ:	EX	AF,AF' | ||||
| ATAPI_5x_READ:	PUSH	IY | ||||
| 		LD	C,0		; ¯à¨§ ª short | ||||
| 		EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		JP	ATAPI_5x_LONG_READ.main | ||||
| ;[]================================================================[#52] | ||||
| ;Function: Long	Read Sectors | ||||
| ;	A - Disk | ||||
| @ -166,10 +169,11 @@ ATAPI_5x_READ:	EX	AF,AF' | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;LONG READ SECTOR(S) | ||||
| ATAPI_5x_LONG_READ: | ||||
| 		AND	A | ||||
| 		;AND	A | ||||
| 		; | ||||
| 		PUSH	IY | ||||
| 		SAFE_PORTY_2 | ||||
| 		LD	C,1		; ¯à¨§ ª long | ||||
| .main:		SAFE_PORTY_2 | ||||
| 		PUSH	BC | ||||
| 		PUSH	IX | ||||
| 		PUSH	HL | ||||
| @ -196,8 +200,10 @@ ATAPI_5x_LONG_READ: | ||||
| ; OUTPUT: | ||||
| ;	 | ||||
| RW_ATAPI_SECTORs: | ||||
| 		PUSH	BC | ||||
| 		LD	C,IDE.Device.ATAPI | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		POP	BC | ||||
| 		RET	C | ||||
| 		; | ||||
| 		EXX | ||||
| @ -232,16 +238,11 @@ RW_ATAPI_SECTORs: | ||||
| 		LD	A,B | ||||
| 		LD	(RAM_ATAPI_RW_CMD + ATAPI_PACKET.COUNTER+1),A	;R01 | ||||
| 		; | ||||
| 		; EX	AF,AF' | ||||
| 		; OUT	(SLOT3),A | ||||
| 		; | ||||
| 		; POP	AF | ||||
| 		; OUT	(SLOT3),A | ||||
| 		LD	YL,C		; ¯à¨§ ª short/long ¨§ C ¢ YL | ||||
| 		LD	HL,RAM_ATAPI_RW_CMD | ||||
| 		CALL	EXEC_PACKET_COMMAND.start | ||||
| 		; | ||||
| .exit:		POP	BC | ||||
| 		;LD	C,SLOT3 | ||||
| 		OUT	(C),B | ||||
| 		RET | ||||
| 		; | ||||
| @ -262,9 +263,12 @@ RW_ATAPI_SECTORs: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;WRITE SECTOR(S) | ||||
| ATAPI_5x_WRITE:	EX	AF,AF' | ||||
| ATAPI_5x_WRITE:	PUSH	IY | ||||
| 		LD	C,0		; ¯à¨§ ª short | ||||
| 		EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		JP	ATAPI_5x_LONG_WRITE.main | ||||
| ;[]================================================================[#53] | ||||
| ;Function: Long	Write Sectors | ||||
| ;	A - Disk | ||||
| @ -277,10 +281,11 @@ ATAPI_5x_WRITE:	EX	AF,AF' | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;WRITE SECTOR(S) | ||||
| ATAPI_5x_LONG_WRITE: | ||||
| 		AND	A | ||||
| 		;AND	A | ||||
| 		; | ||||
| 		PUSH	IY | ||||
| 		SAFE_PORTY_2 | ||||
| 		LD	C,1		; ¯à¨§ ª long | ||||
| .main:		SAFE_PORTY_2 | ||||
| 		PUSH	BC | ||||
| 		PUSH	IX | ||||
| 		PUSH	HL | ||||
| @ -466,6 +471,7 @@ TRAY_FN:	LD	HL,ATAPI_CMD_PACKET.CLOSE | ||||
| ;	 #0B - ABORTED COMMAND | ||||
| ;	 #80 - TIME OUT | ||||
| EXEC_PACKET_COMMAND: | ||||
| .error_ex:	EX	DE,HL | ||||
| .error:		CP	#FF | ||||
| .error_fail:	SCF | ||||
| 		LD	A,BIOS.Error.Failure | ||||
| @ -475,14 +481,15 @@ EXEC_PACKET_COMMAND: | ||||
| 		RET | ||||
| 		; | ||||
| .error_TimeOut:	CP	#FF | ||||
| 		EX	DE,HL | ||||
| 		JR	Z,.error_fail | ||||
| 		LD	A,BIOS.Error.ATAPI.TimeOut | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .start_sys_page: | ||||
| 		LD	A,SYS_PAGE | ||||
| 		EX	AF,AF' | ||||
| ; .start_sys_page: | ||||
| ; 		LD	A,SYS_PAGE | ||||
| ; 		EX	AF,AF' | ||||
| 		; | ||||
| .start:		XOR	A	; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| .start_custom:	EXX | ||||
| @ -501,7 +508,7 @@ EXEC_PACKET_COMMAND: | ||||
| 		EXX  | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX | ||||
| 		JR	C,.error | ||||
| 		JR	C,.error_ex | ||||
| 		; | ||||
| .READY:		LD	C,SLOT3 | ||||
| 		IN	B,(C) | ||||
| @ -534,7 +541,7 @@ EXEC_PACKET_COMMAND: | ||||
| 		 LD	C,H	; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX  | ||||
| 		JR	C,.error | ||||
| 		JR	C,.error_ex | ||||
| 		; | ||||
| 		EXX  | ||||
| 		 LD	DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest | ||||
| @ -568,16 +575,133 @@ EXEC_PACKET_COMMAND: | ||||
| 		 LD	XH,A	; áâà ¨æ  ¤«ï R/W_LONG | ||||
| 		 LD	XL,0 | ||||
| 		EX	AF,AF' | ||||
| 		; | ||||
| 		EX	DE,HL | ||||
| .AP_LOOP:	EX	DE,HL | ||||
| 		; IN	A,(SLOT3) | ||||
| 		; EX	AF,AF'		;>-----------> \ | ||||
| 		; | ||||
| .AP_LOOP:	CALL	ATAPI_CHECK_DRV | ||||
| 		JP	C,.error | ||||
| 		RET	Z | ||||
| 	;====== IF DATA REQUEST ===============================================; | ||||
| .data_request:	IN	A,(SLOT3) | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		; | ||||
| 		LD	A,XH | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		;LD	BC,IDE.Read.ByteCountLow | ||||
| 		;IN	E,(C) | ||||
| 		;INC	C	;LD BC,IDE.Read.ByteCountHigh | ||||
| 		;IN	D,(C)	;TRANSFER BLOCK	SIZE | ||||
| 		;; | ||||
| 		;LD	A,D | ||||
| 		;OR	E | ||||
| 		;RET	Z	;BLOCK = 0 | ||||
| 		;; 㬥ìè ¥¬ áçñâ稪 § £à㦠¥¬ëå ¡ ©â®¢ ¢ 2 à § . —¨â ¥¬ ¯® 2 ¡ ©â  | ||||
| 		;SRL	D | ||||
| 		;RR	E | ||||
| 		;; | ||||
| 		;LD	BC,IDE.Read.InterruptReason | ||||
| 		;IN	A,(C) | ||||
| 		;AND	IDE.InterruptReasonByte.IO | ||||
| 		;LD	BC,IDE.Read.Data | ||||
| 		CALL	ATAPI_PREPARE_RW | ||||
| 		RET	NC | ||||
| 		JR	Z,.WRITE_DATA | ||||
| 	;READ | ||||
| .read_loop:	INI  | ||||
| 		INI  | ||||
| 		DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	NZ,.read_loop | ||||
| 		; | ||||
| .return_rw:	EX	AF,AF'		;<-----------< / | ||||
| 		INC	XL		;INC LOADED SECTORS | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	A,H | ||||
| 		OR	L | ||||
| 		JR	NZ,.AP_LOOP | ||||
| 		; short/long | ||||
| 		; A = 0 | ||||
| 		SUB	YL | ||||
| 		JR	NC,.END_BUFFER | ||||
| 		; next page in mem block | ||||
| 		CALL	CHANGE_MEM_BLK | ||||
| 		JR	.AP_LOOP | ||||
| 	;WRITE | ||||
| .WRITE_DATA:	INC	B ; LD	BC,IDE.Write.Data | ||||
| .write_loop:	OUTI  | ||||
| 		OUTI  | ||||
| 		DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	NZ,.write_loop | ||||
| 		JR	.return_rw | ||||
| 	;	; | ||||
| .END_BUFFER:	CALL	ATAPI_CHECK_DRV | ||||
| 		JP	C,.error | ||||
| 		JR	NZ,ATAPI_IdlePasses.Enter | ||||
| 		RET | ||||
| ;;;;;;;;;;;;;;;;; | ||||
| ATAPI_IdlePasses: | ||||
| 		CALL	ATAPI_CHECK_DRV | ||||
| 		JP	C,EXEC_PACKET_COMMAND.error | ||||
| 		JP	Z,EXEC_PACKET_COMMAND.error_fail | ||||
| 		; | ||||
| .Enter:		;LD	BC,IDE.Read.ByteCountLow | ||||
| 		;IN	E,(C) | ||||
| 		;INC	C	;LD BC,IDE.Read.ByteCountHigh | ||||
| 		;IN	D,(C)	;TRANSFER BLOCK	SIZE | ||||
| 		;; | ||||
| 		;LD	A,D | ||||
| 		;OR	E | ||||
| 		;RET	Z	;BLOCK = 0 | ||||
| 		;; | ||||
| 		;; 㬥ìè ¥¬ áçñâ稪 § £à㦠¥¬ëå ¡ ©â®¢ ¢ 2 à § . —¨â ¥¬ ¯® 2 ¡ ©â  | ||||
| 		;SRL	D | ||||
| 		;RR	E | ||||
| 		;; | ||||
| 		;LD	BC,IDE.Read.InterruptReason | ||||
| 		;IN	A,(C) | ||||
| 		;AND	IDE.InterruptReasonByte.IO | ||||
| 		;LD	BC,IDE.Read.Data | ||||
| 		CALL	ATAPI_PREPARE_RW | ||||
| 		RET	NC | ||||
| 		JR	Z,.write_data | ||||
| 		; | ||||
| .read_loop:	IN	F,(C)	; ç¨â ¥¬ ¯® 1 à §ã á çñ⮣®  ¤à¥á , ç¨â ¥âáï WORD | ||||
| 		DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	NZ,.read_loop | ||||
| 		JR	ATAPI_IdlePasses | ||||
| 		; | ||||
| .write_data:	; A = 0 | ||||
| 		OUT	(C),A	; ª¨¤ ¥¬ 0 ¢ ॣ¨áâà § éñ«ªã IDE | ||||
| 		INC	B | ||||
| .write_loop:	XOR	A | ||||
| 		OUT	(C),A	; ¯¨è¥¬ ¯® 1 à §ã ¢ ¥çñâë©  ¤à¥á, ¯¨è¥âáï WORD | ||||
| 		DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	NZ,.write_loop | ||||
| 		JR	ATAPI_IdlePasses | ||||
| ; | ||||
| 
 | ||||
| 
 | ||||
| ; ¢ë室: | ||||
| ;	CF,ZF	ATAPI_WAITPRT Error ¨«¨ Check Condition á® ¢¥è¥© ®¡à ¡®âª®© | ||||
| ;	ZF	No errors, no data request | ||||
| ;	NZ,NC	DATA REQUEST | ||||
| ;	CF	Error | ||||
| ATAPI_CHECK_DRV: | ||||
| 		;EX	DE,HL | ||||
| 		EXX | ||||
| 		 CALL	ATAPI_WAITPRT | ||||
| 		EXX | ||||
| 		JP	C,.error | ||||
| 		; ZF=1 | ||||
| 		;JP	C,.error | ||||
| 		RET	C | ||||
| 		; | ||||
| 		; [ ] media change.    ¤® «¨ âãâ? ;!FIXIT «ãçè¥ ¡«®ª¨à®¢ âì ®á¨â¥«ì | ||||
| 		LD	A,high IDE.Read.Status | ||||
| @ -586,21 +710,17 @@ 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 | ||||
| 		JR	NC,.data_request | ||||
| 		;JR	NC,.data_request | ||||
| 		RET	NC | ||||
| 		; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		 EXX | ||||
| 		  DEC	C	; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª  á¬¥ë ®á¨â¥«ï ¤®«¦  ®¡à ¡ â뢠âìáï ¢ EXEC_PACKET_COMMAND | ||||
| 		 EXX | ||||
| 		 RET	Z ; ¢ë室, ¥á«¨ ®è¨¡ª  ®¡à ¡ â뢠¥âáï ¥ ¢ EXEC_PACKET_COMMAND | ||||
| 		 JP	ATAPI_CHECK_ERROR | ||||
| 		; | ||||
| 		JP	ATAPI_CHECK_ERROR | ||||
| ;====== IF DATA REQUEST ===============================================; | ||||
| .data_request:	IN	A,(SLOT3) | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		; | ||||
| 		LD	A,XH | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	DE,HL | ||||
| 
 | ||||
| ATAPI_PREPARE_RW: | ||||
| 		LD	BC,IDE.Read.ByteCountLow | ||||
| 		IN	E,(C) | ||||
| 		INC	C	;LD BC,IDE.Read.ByteCountHigh | ||||
| @ -618,54 +738,17 @@ EXEC_PACKET_COMMAND: | ||||
| 		IN	A,(C) | ||||
| 		AND	IDE.InterruptReasonByte.IO | ||||
| 		LD	BC,IDE.Read.Data | ||||
| 		JR	Z,.WRITE_DATA | ||||
| 	;READ | ||||
| 		; ¯à®¢¥àª    â㯮áâì ª®¤¥à  | ||||
| 		; CF=0 | ||||
| 		; ADC	HL,DE | ||||
| 		; JR	Z,.good_buffer | ||||
| 		; JR	C,.error_buffer | ||||
| 		; | ||||
| ; .good_buffer:	AND	A | ||||
| ; 		SBC	HL,DE | ||||
| 		SCF | ||||
| 		RET | ||||
| 
 | ||||
| .read_loop:	INI  | ||||
| 		INI  | ||||
| 		DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	NZ,.read_loop | ||||
| 		; | ||||
| .return_rw:	INC	XL		;INC LOADED SECTORS | ||||
| 		EX	AF,AF'		;<-----------< / | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	A,H | ||||
| 		OR	L | ||||
| 		JR	NZ,.AP_LOOP | ||||
| 		; next page in mem block | ||||
| 		LD	HL,#C000 | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	D,high SYS_PAGE.RAM_TABLE | ||||
| 		 LD	E,XH | ||||
| 		 LD	A,(DE) | ||||
| 		 LD	XH,A | ||||
| 		EX	AF,AF'		;<-----------< / | ||||
| 		OUT	(SLOT3),A | ||||
| 		JR	.AP_LOOP | ||||
| 	;WRITE | ||||
| .WRITE_DATA:	INC	B ; LD	BC,IDE.Write.Data | ||||
| .write_loop:	OUTI  | ||||
| 		OUTI  | ||||
| 		DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	NZ,.write_loop | ||||
| 		JR	.return_rw | ||||
| 		; | ||||
| 
 | ||||
| ; .AddrOverflow:	EX	DE,HL | ||||
| ; 		AND	A | ||||
| ; 		SBC	HL,DE | ||||
| ; 		EX	DE,HL | ||||
| ; 		RET | ||||
| 
 | ||||
| ; | ||||
| ; !TODO	宫®á⮥ ç⥨¥ | ||||
| ; .error_buffer:	AND	A | ||||
| ; 		SBC	HL,DE | ||||
| @ -702,6 +785,8 @@ ATAPI_GET_ERROR_REG: | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; D - MASK, E - PATTERN | ||||
| ; !!! ¥ª®â®àë¥ äãªæ¨¨  ¤¥îâáï, çâ®   ¢ë室¥ ¢á¥£¤  ZF | ||||
| ; ¥ ¤®«¦  âண âì ॣ. C | ||||
| ATAPI_WAITPRT:	LD	DE,256*IDE.CtrlByte.Busy + 0 | ||||
| .Custom:	LD	B,100 | ||||
| 		LD	HL,#0000 | ||||
| @ -762,7 +847,7 @@ ATAPI_READ_CAPACITY_DATA: | ||||
| 		JR	NZ,.pause | ||||
| 		; | ||||
| 		JP	.loop | ||||
| 		RET | ||||
| 		;RET | ||||
| ;----------------------------------------------------------------------; | ||||
| 
 | ||||
| 
 | ||||
| @ -775,6 +860,9 @@ ATAPI_READ_CAPACITY_DATA: | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ATAPI_MEDIA_ERROR: | ||||
| 		PUSH	IX | ||||
| 		PUSH	HL | ||||
| 		; | ||||
| 		IN	A,(SLOT3) | ||||
| 		PUSH	AF | ||||
| 		LD	A,SYS_PAGE | ||||
| @ -826,6 +914,8 @@ ATAPI_MEDIA_ERROR: | ||||
| 		LD	(IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L		 | ||||
| 		; | ||||
| .exit:		POP	AF | ||||
| 		POP	HL | ||||
| 		POP	IX | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	A,C | ||||
| 		SCF | ||||
|  | ||||
| @ -161,10 +161,12 @@ ATA_5x_SET_PAR: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;READ SECTOR(S) | ||||
| ATA_5x_READ: | ||||
| 	EX	AF,AF' | ||||
| 	 IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| ATA_5x_READ:	PUSH	IY | ||||
| 		LD	C,0		; ¯à¨§ ª short | ||||
| 		EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		JP	ATA_5x_LONG_READ.main | ||||
| ;[]================================================================[#52] | ||||
| ;Function: Long	Read Sectors | ||||
| ;	A - Disk | ||||
| @ -179,7 +181,8 @@ ATA_5x_READ: | ||||
| ;LONG READ SECTOR(S) | ||||
| ATA_5x_LONG_READ: | ||||
| 		PUSH	IY | ||||
| 		SAFE_PORTY_2 | ||||
| 		LD	C,1		; ¯à¨§ ª long | ||||
| .main:		SAFE_PORTY_2 | ||||
| 		PUSH	BC | ||||
| 		PUSH	IX | ||||
| 		PUSH	HL | ||||
| @ -222,8 +225,12 @@ ATA_5x_LONG_READ: | ||||
| 		PUSH	BC | ||||
| 		LD	B,0 | ||||
| 		ADD	IX,BC | ||||
| 		LD	C,B | ||||
| 		ADC	HL,BC | ||||
| 		; | ||||
| 		 ;LD	C,B | ||||
| 		 ;ADC	HL,BC | ||||
| 		 JR	NC,.no_inc_hl | ||||
| 		 INC	HL | ||||
| .no_inc_hl:	; | ||||
| 		POP	BC | ||||
| 		POP	AF | ||||
| 		SUB	C | ||||
| @ -245,10 +252,12 @@ ATA_5x_LONG_READ: | ||||
| ;   HL:IX - Sector + Sector counter | ||||
| ;      DE - Address + (Sector counter *	Size sector) | ||||
| ;WRITE SECTOR(S) | ||||
| ATA_5x_WRITE: | ||||
| 	EX	AF,AF' | ||||
| 	 IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| ATA_5x_WRITE:	PUSH	IY | ||||
| 		LD	C,0		; ¯à¨§ ª short | ||||
| 		EX	AF,AF' | ||||
| 		 IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		JP	ATA_5x_LONG_WRITE.main | ||||
| ;[]================================================================[#53] | ||||
| ;Function: Long	Write Sectors | ||||
| ;	A - Disk | ||||
| @ -262,7 +271,8 @@ ATA_5x_WRITE: | ||||
| ;WRITE SECTOR(S) | ||||
| ATA_5x_LONG_WRITE: | ||||
| 		PUSH	IY | ||||
| 		SAFE_PORTY_2 | ||||
| 		LD	C,1		; ¯à¨§ ª long | ||||
| .main:		SAFE_PORTY_2 | ||||
| 		PUSH	BC | ||||
| 		PUSH	IX | ||||
| 		PUSH	HL | ||||
| @ -273,70 +283,19 @@ ATA_5x_LONG_WRITE: | ||||
| 		 CALL	RW_ATA_SECTORs | ||||
| 		; | ||||
| 		JP	ATA_5x_LONG_READ.shared | ||||
| /* | ||||
| 		EX	DE,HL | ||||
| 		JP	C,.error | ||||
| 		LD	A,XH | ||||
| 		EX	AF,AF' | ||||
| 		; | ||||
| 		POP	HL | ||||
| 		POP	IX | ||||
| 		POP	BC | ||||
| 		XOR	A | ||||
| 		CP	B | ||||
| 		LD	C,B | ||||
| 		LD	B,A | ||||
| 		JR	NZ,WNOT256 | ||||
| 		; | ||||
| 		INC	B | ||||
| 		ADD	IX,BC | ||||
| 		LD	B,C | ||||
| 		ADC	HL,BC | ||||
| 		;EX	AF,AF' | ||||
| 		JR	RST8WRR | ||||
| 		; | ||||
| WNOT256	ADD	IX,BC | ||||
| 	LD	C,B | ||||
| 	ADC	HL,BC | ||||
| 	JR	RST8WRR | ||||
| 
 | ||||
| .error:	LD	B,A | ||||
| 	LD	C,XL | ||||
| 	LD	A,XH | ||||
| 	EX	AF,AF' | ||||
| 	POP	HL | ||||
| 	POP	IX | ||||
| 	PUSH	BC | ||||
| 	LD	B,0 | ||||
| 	ADD	IX,BC | ||||
| 	LD	C,B | ||||
| 	ADC	HL,BC | ||||
| 	POP	BC | ||||
| 	POP	AF | ||||
| 	SUB	C | ||||
| 	LD	C,A | ||||
| 	LD	A,B | ||||
| 	LD	B,C | ||||
| 	;R03 | ||||
| 	 SCF		;R03 | ||||
| 	 ;EX	AF,AF'	;R03	;!FIXIT  ¬ã¤à¨« ® çñâ ¢ í⮬ R03 | ||||
| 	; | ||||
| RST8WRR: RESTORE_PORTY | ||||
| 	POP	IY | ||||
| 	;EX	AF,AF' | ||||
| 	RET  | ||||
| */ | ||||
| 
 | ||||
| 
 | ||||
| ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ; | ||||
| ;	A - Disk | ||||
| ;   HL:IX - Sector | ||||
| ;      DE - Address | ||||
| ;	B - Sector counter | ||||
| ;	C - short/long | ||||
| ;	A'- Memory Page Number | ||||
| ;	CF'=1 - write, CF'=0 - read | ||||
| RW_ATA_SECTORs:	LD	C,IDE.Device.HDD | ||||
| RW_ATA_SECTORs:	PUSH	BC		; ¯à¨§ ª short/long ¢ C | ||||
| 		LD	C,IDE.Device.HDD | ||||
| 		CALL	SELECT_DRIVE | ||||
| 		POP	BC		; ¯à¨§ ª short/long ¢ C | ||||
| 		RET	C | ||||
| 		; | ||||
| 		EXX  | ||||
| @ -346,12 +305,16 @@ RW_ATA_SECTORs:	LD	C,IDE.Device.HDD | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		PUSH	AF		; memory page number | ||||
| 		PUSH	BC		; ¯à¨§ ª short/long ¢ C | ||||
| 		PUSH	DE		; Address | ||||
| 		CALL	PRESET | ||||
| 		; IY ¨§ SELECT_DRIVE ¡®«ìè¥ ¥ 㦥 | ||||
| 		; | ||||
| 		POP	HL		; Address | ||||
| 		POP	IY		; ¯à¨§ ª short/long ¢ YL | ||||
| 		POP	AF		; memory page number | ||||
| 		LD	XL,0 | ||||
| 		LD	XH,A | ||||
| 		LD	XH,A		; memory page number | ||||
| 		LD	BC,IDE.Write.Command | ||||
| 		LD	A,IDE.CMD.ATA.WriteSectorsWithRetry | ||||
| 		JR	C,.set_command			; CF = r/w | ||||
| @ -386,40 +349,43 @@ RW_ATA_SECTORs:	LD	C,IDE.Device.HDD | ||||
| 	; ; ; ; ; | ||||
| 		; CF=0 | ||||
| .return_rw:	EX	AF,AF'		;<-----------< / | ||||
| 		INC	XL				;INC LOADED SECTORS | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	A,H | ||||
| 		OR	L | ||||
| 		JR	NZ,.W44 | ||||
| 		JR	NZ,.end_pass | ||||
| 		; short/long | ||||
| 		; A = 0 | ||||
| 		SUB	YL | ||||
| 		JR	NC,.END_BUFFER | ||||
| 		; next page in mem block | ||||
| 		; ᤥ« âì ¥á«¨ ¥ RW_LONG, ⮠宫®áâë¥ ç⥨¥/§ ¯¨áì ¨ ¢ë室 á ®è¨¡ª®© | ||||
| 		LD	HL,#C000 | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	D,high SYS_PAGE.RAM_TABLE | ||||
| 		 LD	E,XH | ||||
| 		 LD	A,(DE) | ||||
| 		 LD	XH,A | ||||
| 		EX	AF,AF'		;<-----------< / | ||||
| 		OUT	(SLOT3),A | ||||
| 		CALL	CHANGE_MEM_BLK | ||||
| 		; LD	HL,#C000 | ||||
| 		; IN	A,(SLOT3) | ||||
| 		; EX	AF,AF'		;>-----------> \ | ||||
| 		;  LD	A,SYS_PAGE | ||||
| 		;  OUT	(SLOT3),A | ||||
| 		;  LD	D,high SYS_PAGE.RAM_TABLE | ||||
| 		;  LD	E,XH | ||||
| 		;  LD	A,(DE) | ||||
| 		;  LD	XH,A | ||||
| 		; EX	AF,AF'		;<-----------< / | ||||
| 		; OUT	(SLOT3),A | ||||
| 		; | ||||
| .W44:		INC	XL		;INC LOADED SECTORS | ||||
| .end_pass:	;INC	XL				;INC LOADED SECTORS | ||||
| 		EXX  | ||||
| 		 CALL	WAITPRT | ||||
| 		EXX  | ||||
| 		RET	C | ||||
| 		; | ||||
| 		;INC	XL				;INC LOADED SECTORS | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		BIT	IDE.CtrlBit.DataRequest,A | ||||
| 		RET	Z | ||||
| 		; | ||||
| 		 RET	Z | ||||
| 		 JP	.big_loop | ||||
| 		 ;JP	NZ,.big_loop | ||||
| 		 ;XOR	A | ||||
| 		 ;RET  | ||||
| 		; | ||||
| 		JP	.big_loop | ||||
| 	; | ||||
| .write_sector:	; WRITE SECTOR 512 bytes		;!HARDCODE sector size | ||||
| 		INC	B ; LD	BC,IDE.Write.Data | ||||
| @ -431,9 +397,49 @@ RW_ATA_SECTORs:	LD	C,IDE.Device.HDD | ||||
| 		JR	NZ,.loop | ||||
| 		SCF | ||||
| 		JP	.return_rw | ||||
| 	; ; ; ; ; | ||||
| 
 | ||||
| 	;ENDIF | ||||
| 	;	; | ||||
| .END_BUFFER:	CALL	ATA_IdlePasses.CHECK_DRV | ||||
| 		JR	NZ,ATA_IdlePasses.Enter | ||||
| 		RET | ||||
| ;;;;;;;;;;;;;;;;; | ||||
| ATA_IdlePasses:	CALL	.CHECK_DRV | ||||
| 		JR	NZ,.Enter | ||||
| 		; | ||||
| 		RET	C | ||||
| 		LD	A,BIOS.Error.Failure | ||||
| 		SCF | ||||
| 		RET | ||||
| 		; | ||||
| .Enter:		XOR	A				; áçñâ稪 ¤«ï READ_ZEROS, ¤ ë¥ ¤«ï .WrZeros | ||||
| 		EX	AF,AF' | ||||
| 		LD	BC,IDE.Read.Data | ||||
| 		JR	C,.WrZeros | ||||
| 	; READ > /dev/null | ||||
| 		EX	AF,AF' | ||||
| .RdLoop:	IN	F,(C)	; ç¨â ¥¬ ¯® 1 à §ã á çñ⮣®  ¤à¥á , ç¨â ¥âáï WORD | ||||
| 		DEC	A | ||||
| 		JR	NZ,.RdLoop | ||||
| 		JR	ATA_IdlePasses | ||||
| 	; WRITE ZEROS | ||||
| .WrZeros:	EX	AF,AF' | ||||
| 		; | ||||
| .WrLoop:	OUT	(C),A | ||||
| 		DJNZ	.WrLoop | ||||
| 		; | ||||
| .WrLoop2:	OUT	(C),A | ||||
| 		DJNZ	.WrLoop2 | ||||
| 		JR	ATA_IdlePasses | ||||
| 		; | ||||
| .CHECK_DRV:	EXX  | ||||
| 		 CALL	WAITPRT | ||||
| 		EXX  | ||||
| 		RET	C | ||||
| 		; | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		BIT	IDE.CtrlBit.DataRequest,A | ||||
| 		RET | ||||
| ;!TODO	¤®¤¥« âì íâã ¦¥ åãà¬ã ¤«ï ¤à㣨å ãáâனá⢠| ||||
| ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ; | ||||
| /* | ||||
| 	IFN OPTIMIZE_RW_PROCEDURE | ||||
| @ -523,7 +529,7 @@ WRITE_ATA_SECTORs: | ||||
| ;	A - Disk | ||||
| ;   HL:IX - Sector | ||||
| ;	B - Sector counter | ||||
| ;Return: None | ||||
| ;Return: CF - error | ||||
| ;VERIFY	SECTOR(S) | ||||
| ATA_5x_VERIFY:	PUSH	IY | ||||
| 		 SAFE_PORTY_2 | ||||
| @ -543,105 +549,119 @@ ATA_5x_VERIFY:	PUSH	IY | ||||
| 		 CALL	WAITPRT | ||||
| 		EXX  | ||||
| 		RET	C | ||||
| 		PUSH	DE | ||||
| 		;PUSH	DE | ||||
| 	;	IN	A,(SLOT3) | ||||
| 	;	PUSH	AF | ||||
| 		CALL	PRESET | ||||
| 		POP	HL | ||||
| 	;	POP	AF | ||||
| 	;	OUT	(SLOT3),A | ||||
| 		;POP	HL | ||||
| 		LD	BC,IDE.Write.Command | ||||
| 		LD	A,IDE.CMD.ATA.ReadVerifySectorsWithRetry | ||||
| 		OUT	(C),A | ||||
| 		LD	BC,IDE.Read.Status | ||||
| 		IN	A,(C) | ||||
| 		;BIT	IDE.CtrlBit.Error,A | ||||
| 		RRA				;BIT IDE.CtrlBit.Error,A : SCF : RET NZ | ||||
| 		RET	C | ||||
| 		; | ||||
| 		CALL	WAITPRT | ||||
| 		RET	C | ||||
| 		XOR	A | ||||
| 		RET | ||||
| 		JP	WAITPRT | ||||
| 		;RET	C | ||||
| 		;XOR	A | ||||
| 		;RET | ||||
| ;[]================================================================[#54] | ||||
| 
 | ||||
| 
 | ||||
| ; HL:IX	- LBA SECTOR | ||||
| ;     B	- SECTOR COUNTER | ||||
| PRESET:	LD	A,B | ||||
| 	LD	BC,IDE.Write.Counter | ||||
| 	OUT	(C),A | ||||
| 	; | ||||
| 	IN	A,(SLOT3) | ||||
| 	EX	AF,AF' | ||||
| 	 LD	A,SYS_PAGE | ||||
| 	 OUT	(SLOT3),A | ||||
| 	 LD	A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 	 LD	BC,IDE.Write.DeviceHead | ||||
| 	 OUT	(C),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 | ||||
| 	 ; | ||||
| 	 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.DeviceHead | ||||
| 	 ; | ||||
| 	 OUT	(C),A | ||||
| 	EX	AF,AF' | ||||
| 	OUT	(SLOT3),A | ||||
| 	AND	A | ||||
| 	RET  | ||||
| ; ¢ë室: SLOT3 = SYS_PAGE  | ||||
| PRESET:		LD	A,B | ||||
| 		LD	BC,IDE.Write.Counter | ||||
| 		OUT	(C),A | ||||
| 		; | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) | ||||
| 		 LD	BC,IDE.Write.DeviceHead | ||||
| 		 OUT	(C),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 | ||||
| 		 ; | ||||
| 		 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.DeviceHead | ||||
| 		 ; | ||||
| 		 OUT	(C),A | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		;AND	A | ||||
| 		RET  | ||||
| ;PRESET ; | ||||
| 
 | ||||
| 
 | ||||
| ; HL:DE	- SECTOR OFFSET | ||||
| LBA_CHS: | ||||
| 	LD	C,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow) | ||||
| 	LD	B,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh) | ||||
| ;	HL:DE /	BC => DE:IX HL-OSTATOK | ||||
| DIV32X:	LD	XH,D | ||||
| 	LD	XL,E | ||||
| 	EX	DE,HL | ||||
| 	LD	HL,0 | ||||
| 	LD	A,#20 | ||||
| DIV011:	ADD	IX,IX | ||||
| 	EX	DE,HL | ||||
| 	ADC	HL,HL | ||||
| 	EX	DE,HL | ||||
| 	ADC	HL,HL | ||||
| 	SBC	HL,BC | ||||
| 	JR	NC,DIV012 | ||||
| 	ADD	HL,BC | ||||
| 	DEC	A | ||||
| 	JR	NZ,DIV011 | ||||
| 	JR	DIV014 | ||||
| DIV012:	INC	IX | ||||
| 	DEC	A | ||||
| 	JR	NZ,DIV011 | ||||
| DIV014:	LD	E,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) | ||||
| 	LD	D,0 | ||||
| 	XOR	A | ||||
| CHS005:	INC	A | ||||
| 	SBC	HL,DE | ||||
| 	JR	NC,CHS005 | ||||
| 	ADD	HL,DE | ||||
| 	DEC	A | ||||
| 	LD	H,A | ||||
| 	LD	E,L | ||||
| 	INC	E | ||||
| 	LD	D,XL | ||||
| 	LD	A,XH | ||||
| 	LD	L,A | ||||
| 	RET  | ||||
| LBA_CHS:	LD	C,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderLow) | ||||
| 		LD	B,(IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh) | ||||
| 		; | ||||
| DIV32X:	;HL:DE / BC => DE:IX HL-OSTATOK | ||||
| 		LD	XH,D | ||||
| 		LD	XL,E | ||||
| 		EX	DE,HL | ||||
| 		LD	HL,0 | ||||
| 		LD	A,#20 | ||||
| 		; | ||||
| .loop:		ADD	IX,IX | ||||
| 		EX	DE,HL | ||||
| 		ADC	HL,HL | ||||
| 		EX	DE,HL | ||||
| 		ADC	HL,HL | ||||
| 		SBC	HL,BC | ||||
| 		JR	NC,.DIV012 | ||||
| 		; | ||||
| 		ADD	HL,BC | ||||
| 		DEC	A | ||||
| 		JR	NZ,.loop | ||||
| 		; | ||||
| 		JR	.DIV014 | ||||
| 		; | ||||
| .DIV012:	INC	IX | ||||
| 		DEC	A | ||||
| 		JR	NZ,.loop | ||||
| 		; | ||||
| .DIV014:	LD	E,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) | ||||
| 		LD	D,0 | ||||
| 		XOR	A | ||||
| 		; | ||||
| .loop2:		INC	A | ||||
| 		SBC	HL,DE | ||||
| 		JR	NC,.loop2 | ||||
| 		; | ||||
| 		ADD	HL,DE | ||||
| 		DEC	A | ||||
| 		LD	H,A | ||||
| 		LD	E,L | ||||
| 		INC	E | ||||
| 		LD	D,XL | ||||
| 		LD	A,XH | ||||
| 		LD	L,A | ||||
| 		RET  | ||||
| 
 | ||||
| ;----------------------------------------------------------------------; | ||||
| ; D - MASK | ||||
| ; E - PATTERN | ||||
| ; !!! ¥ª®â®àë¥ äãªæ¨¨  ¤¥îâáï, çâ®   ¢ë室¥ ¢á¥£¤  ZF | ||||
| WAITPRT:	LD	DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE.CtrlByte.Ready | ||||
| .custom:	LD	BC,IDE.Read.Status | ||||
| 		LD	HL,#0000		; § ¤¥à¦ª  ;!HARDCODE | ||||
| @ -663,7 +683,8 @@ WAITPRT:	LD	DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE | ||||
| 		; | ||||
| .error:		LD	A,BIOS.Error.NotReady | ||||
| 		SCF | ||||
| 		RET  | ||||
| 		RET | ||||
| 		;  | ||||
| .ok:		POP	HL | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
|  | ||||
| @ -68,6 +68,23 @@ SELECT_DRIVE:	AND	#0F | ||||
| ;======================================================================= | ||||
| 
 | ||||
| 
 | ||||
| ;======================================================================= | ||||
| ; next page in mem block | ||||
| CHANGE_MEM_BLK:	LD	HL,#C000 | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF'		;>-----------> \ | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	D,high SYS_PAGE.RAM_TABLE | ||||
| 		 LD	E,XH | ||||
| 		 LD	A,(DE) | ||||
| 		 LD	XH,A | ||||
| 		EX	AF,AF'		;<-----------< / | ||||
| 		OUT	(SLOT3),A | ||||
| 		RET | ||||
| ;======================================================================= | ||||
| 
 | ||||
| 
 | ||||
| ;======================================================================= | ||||
| ;Function: Detect Disk | ||||
| ;	   A - Disk | ||||
|  | ||||
| @ -1659,28 +1659,27 @@ LP_PR_LINE_DIR: | ||||
| ;  CF - XY-mode | ||||
| ;  DE - ¬¥á⮠ᨬ¢®«  ¢ ®ª¥, ¥á«¨ CF=1 | ||||
| ;  HL -  ¤à¥á á ¢ë¢®¤¨¬®© áâப®© | ||||
| ;   B - à §¤¥«¨â¥«ì | ||||
| ;   B - 梥⠪®á®«¨ (¨á¯®«ì§ã¥âáï ¯à¨ áªà®««¥ ¨ ®ç¨á⪥ ®ª ) | ||||
| ;  IY - ¤¢  ᯥæ.ᨬ¢®«  ¤«ï ¢ë室  á CF=1. „®«¦ë ¡ëâì à ¢ë B, ¥á«¨ ¥ ã¦ë | ||||
| ;  A' - 梥⠪®á®«¨ (¨á¯®«ì§ã¥âáï ¯à¨ áªà®««¥ ¨ ®ç¨á⪥ ®ª ) | ||||
| ; CF' - ¢ë¢®¤¨âì ᨬ¢®« á  âਡãâ ¬¨ | ||||
| ;;;;;;;;;;;;;;;;; | ||||
| .START:		PUSH	IX | ||||
| 		LD	XL,A			;  âਡãâë ¢ë¢®¤¨¬®£® ᨬ¢®«  | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		 PUSH	AF			; 梥⠪®á®«¨, attr-mode | ||||
| 		 PUSH	AF			; attr-mode | ||||
| 		EX	AF,AF' | ||||
| 		; | ||||
| 		IN	A,(SLOT3) | ||||
| 		LD	C,A | ||||
| 		CALL	LP_BEG_P | ||||
| 		CALL	C,LP_SET_CUR		; mode for DE | ||||
| 		POP	AF			; 梥⠪®á®«¨, attr-mode | ||||
| 		POP	AF			; attr-mode | ||||
| 		LD	A,B | ||||
| 	; ¤ «¥¥ ॣ B ᢮¡®¤¥, ¬®¦® § ¤¥©á⢮¢ âì | ||||
| 		LD	(SYS_PAGE.SYS_WORK2),A	; 梥⠪®á®«¨ | ||||
| 		EXX | ||||
| 		 LD	C,0 | ||||
| 		 JR	NC,.loop | ||||
| 		 INC	C			; C' - attr flag. ¢ë¢®¤¨âì  âਡãâ | ||||
| 		 RL	C			; C' - attr-mode. ¢ë¢®¤¨âì  âਡãâ | ||||
| .loop:		 LD	A,D | ||||
| 		 OUT	(PORT_Y),A | ||||
| 		EXX | ||||
| @ -1690,7 +1689,7 @@ LP_PR_LINE_DIR: | ||||
| 		LD	A,(HL) | ||||
| 		LD	XH,A | ||||
| 		INC	HL | ||||
| 		CP	B | ||||
| 		AND	A | ||||
| 		JR	Z,.EXIT | ||||
| 		CP	YH | ||||
| 		JR	Z,.EXIT_SpecSymbol | ||||
|  | ||||
| @ -17,6 +17,7 @@ BETA_RC		EQU			0			; | ||||
|  DEFINE		LOGO_DELAY_NORM		100			; | ||||
|  DEFINE		LOGO_DELAY_MAX		130			; | ||||
| ;----------------------------[ TEST ]---------------------------; | ||||
|  DEFINE		ERROR_POST_5		0			; ¢¨áãâì   ®è¨¡ª¥ ¢ POST 5 | ||||
|  DEFINE		TEST_INT		1			; ’¥áâ®¢ë© ®¡à ¡®â稪 ¯®«ì§®¢ â¥«ì᪮£® INT | ||||
|  DEFINE		NEW_FEATURE		0			; !TODO ¯ãªâë ¢ á¥â ¯ | ||||
| ;DEFINE		HDDwriteProtect		0			; áâ à ï ä¨èª  ¤«ï äãªæ¨© 5x | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik