-bug FDD_RW_SECTOR: размер сектора больше, чем установлено в FDD_INIT_TABLE.FDD_0.BytesPerSector вызовет ошибку
This commit is contained in:
		
							parent
							
								
									df27d443e2
								
							
						
					
					
						commit
						55a1020dd6
					
				| @ -1 +1 @@ | ||||
| Subproject commit a9f5915a3275f5ffbafa0994bb97c5846aab826c | ||||
| Subproject commit bd4546a854905998edab6144547b79aa673404f6 | ||||
| @ -109,7 +109,7 @@ FDD_5x_SET_PAR:	;!TEST FDD 720/1440 | ||||
| 		ENDIF | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		 OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		; | ||||
| 		;!TEST FDD 720/1440 | ||||
| @ -127,6 +127,7 @@ FDD_5x_SET_PAR:	;!TEST FDD 720/1440 | ||||
| ;	A - Disk | ||||
| ;Return: | ||||
| ;	A - Flag D7 - "1" - High Density, "0" -	Double Density | ||||
| ;	B - bit0=1 removable | ||||
| ;[]===========================================================[] | ||||
| FDD_5x_DETECT:	CALL	SAVE_INTERRUPTS.switch_off | ||||
| 		CALL	SET_DOS_ON | ||||
| @ -147,7 +148,19 @@ FDD_5x_RESET:	CALL	SAVE_INTERRUPTS.switch_off | ||||
| 		CALL	SET_DOS_ON | ||||
| 		CALL	S_FDD | ||||
| 		CALL	DISK_ID | ||||
| 		CALL	SAVE_INTERRUPTS.restore | ||||
| 		JR	C,.int | ||||
| 		; [ ] à §¬¥à  ᥪâ®à  | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 LD	H,B | ||||
| 		 LD	L,0 | ||||
| 		 LD	(FDD_INIT_TABLE.FDD_0.BytesPerSector),HL | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| .int:		CALL	SAVE_INTERRUPTS.restore | ||||
| 		JR	C,.MOTOR_OFF | ||||
| 		; | ||||
| 		CALL	RESWG | ||||
| @ -240,8 +253,7 @@ FDD_5x_LONG_READ: | ||||
| 		PUSH	DE | ||||
| 		PUSH	BC | ||||
| 		PUSH	HL | ||||
| 	;CALL	READ_SECTOR | ||||
| 	CALL	FDD_RW_SECTOR | ||||
| 		CALL	FDD_RW_SECTOR | ||||
| 		JR	C,ERRDOS | ||||
| 		; à §¬¥à ᥪâ®à  | ||||
| 		 LD	D,YH | ||||
| @ -252,22 +264,7 @@ FDD_5x_LONG_READ: | ||||
| 		ADD	HL,DE | ||||
| 		; | ||||
| 		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 | ||||
| @ -366,205 +363,12 @@ FDD_5x_LONG_WRITE: | ||||
| 		 LD	B,#A0		;COMMAND WRITE | ||||
| 		EXX | ||||
| 		JP	FDD_5x_LONG_READ.RW_Shared | ||||
| 
 | ||||
| /* | ||||
| 		CALL	SAVE_INTERRUPTS.switch_off | ||||
| 		CALL	.Start | ||||
| 		JP	SAVE_INTERRUPTS.restore | ||||
| 		; | ||||
| .Start:		PUSH	IY | ||||
| 		PUSH	BC | ||||
| 		PUSH	HL | ||||
| 		PUSH	IX | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		 LD	C,A | ||||
| 		EX	AF,AF' | ||||
| 		PUSH	BC | ||||
| 		CALL	SET_DOS_ON | ||||
| 		CALL	S_FDD | ||||
| 		CALL	SET_SPEED | ||||
| 		CALL	NTRACK | ||||
| 		POP	BC | ||||
| 		EX	DE,HL | ||||
| 		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	A,(FDD_INIT_TABLE.FDD_0.SECTORS) | ||||
| 		LD	C,A | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| .DSK_LP2:	LD	A,D | ||||
| 		EXX | ||||
| 		 PUSH	BC | ||||
| 		 CALL	SEEK | ||||
| 		 POP	BC | ||||
| 		EXX  | ||||
| 		PUSH	DE | ||||
| 		PUSH	BC | ||||
| 		PUSH	HL | ||||
| 	CALL	WR_SEC | ||||
| 		JR	C,ERRDOS | ||||
| 		; à §¬¥à ᥪâ®à  | ||||
| 		 LD	D,YH | ||||
| 		 LD	E,YL | ||||
| 		; | ||||
| 		POP	HL | ||||
| 		POP	BC | ||||
| 		ADD	HL,DE | ||||
| 		; | ||||
| 		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 | ||||
| 		CP	E | ||||
| 		JR	NZ,.NINC_T2 | ||||
| 		LD	E,0 | ||||
| 		INC	D | ||||
| .NINC_T2:	DJNZ	.DSK_LP2 | ||||
| 		CALL	SET_DOS_OFF | ||||
| 		LD	A,XH | ||||
| 		EX	AF,AF' | ||||
| 		EX	DE,HL | ||||
| 		POP	IX | ||||
| 		POP	HL | ||||
| 		POP	BC | ||||
| 		POP	IY | ||||
| 		LD	A,B | ||||
| 		LD	C,B | ||||
| 		INC	B | ||||
| 		DEC	B | ||||
| 		LD	B,0 | ||||
| 		JR	NZ,.ADW8BIT | ||||
| 		INC	B | ||||
| .ADW8BIT:	ADD	IX,BC | ||||
| 		;!TEST | ||||
| 		 ;LD	BC,0 | ||||
| 		 ;ADC	HL,BC | ||||
| 		 ;LD	B,A | ||||
| 		 ;XOR	A | ||||
| 		 ;RET  | ||||
| 		 ; | ||||
| 		 LD	B,A | ||||
| 		 RET	NC | ||||
| 		 INC	HL | ||||
| 		 XOR	A | ||||
| 		 RET | ||||
| 		; | ||||
| */ | ||||
| 
 | ||||
| /* | ||||
| ; | ||||
| ;------------------------------- | ||||
| ;READ SECTOR | ||||
| ;------------------------------- | ||||
| READ_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| .HL_RETRY:	;DI  | ||||
| 		PUSH	HL | ||||
| 		PUSH	DE | ||||
| 		LD	A,E | ||||
| 		INC	A | ||||
| 		OUT	(FDC_93.Sector),A | ||||
| .FDREAD:	IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		LD	A,XH | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| 		LD	B,4			; áçñâ稪 | ||||
| 		LD	C,FDC_93.Data | ||||
| 	LD	A,#80				; COMMAND READ | ||||
| 		OUT	(FDC_93.Command),A | ||||
| 		; | ||||
| .FDR001:	IN	A,(FDC_93.DrvCTRL)	;WAIT INTRQ or DRQ | ||||
| 		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" | ||||
| 		; | ||||
| .FDR005:	EX	AF,AF' | ||||
| 		 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 | ||||
| 		AND	#7F | ||||
| 		RET	Z			; ‚ë室 ¡¥§ ®è¨¡®ª | ||||
| 		; | ||||
| 		BIT	2,C | ||||
| 		JR	NZ,.ERDATA | ||||
| 		; | ||||
| 		LD	A,BIOS.Error.Seek | ||||
| .ERR_XRD:	DEC	D | ||||
| 		JR	Z,.RSTOP | ||||
| 		; | ||||
| 		PUSH	DE | ||||
| 		PUSH	HL | ||||
| 		CALL	RESWG			; RESET_WG | ||||
| 		LD	A,XL | ||||
| 		CALL	SEEK	  		; !!!!!  ¯®á¬®âà¥âì | ||||
| 		POP	HL | ||||
| 		POP	DE | ||||
| 		JR	.HL_RETRY | ||||
| 		; | ||||
| .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 | ||||
| 		EX	AF,AF' | ||||
| 		BIT	0,C | ||||
| 		SCF  | ||||
| 		RET	Z | ||||
| 		LD	A,BIOS.Error.SectorNotFound | ||||
| 		RET | ||||
| ;	;	; | ||||
| */ | ||||
| 
 | ||||
| ; | ||||
| ;------------------------------- | ||||
| ;WRITE SECTOR | ||||
| ;------------------------------- | ||||
| FDD_RW_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| .RETRY:		DI  | ||||
| .RETRY:		;DI  | ||||
| 		PUSH	HL | ||||
| 		PUSH	DE | ||||
| 		LD	A,E | ||||
| @ -596,9 +400,19 @@ FDD_RW_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| .RW_PROC:	EXX | ||||
| 		 BIT	5,B | ||||
| 		EXX | ||||
| 		; [ ] 15/04/25 à §¬¥à ᥪâ®à  ¡®«ìè¥, 祬 ãáâ ®¢«¥® ¢ FDD_INIT_TABLE.FDD_0.BytesPerSector ¢ë§®¢¥â ®è¨¡ªã | ||||
| 		LD	D,YH | ||||
| 		LD	E,YL | ||||
| 		INC	DE | ||||
| 		; | ||||
| 		JR	NZ,.write_loop | ||||
| 		;READ BYTE | ||||
| .read_loop:	INI | ||||
| .read_loop:	DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	Z,.SectorSizeError | ||||
| 		; | ||||
| 		INI | ||||
| .wait_data_r:	IN	A,(FDC_93.DrvCTRL) | ||||
| 		AND	%1100'0000		;b6: DRQ (§ ¯à®á ¤ ëå = 1). b7: INTRQ (¢ë¯®«ï¥âáï ª®¬ ¤  = 0). | ||||
| 		JR	Z,.wait_data_r | ||||
| @ -610,12 +424,7 @@ FDD_RW_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| 		; | ||||
| 		POP	DE | ||||
| 		POP	HL | ||||
| 		; ¯à¥à뢠¨ï | ||||
| 		LD	A,R | ||||
| 		AND	%1000'0000 | ||||
| 		JR	Z,.no_EI | ||||
| 		EI | ||||
| .no_EI:		; | ||||
| 		;EI | ||||
| 		LD	A,BIOS.Error.NotReady | ||||
| 		JR	C,.CMD_ERROR | ||||
| 		; | ||||
| @ -655,6 +464,7 @@ FDD_RW_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| 		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 | ||||
| @ -666,12 +476,29 @@ FDD_RW_SECTOR:	LD	D,5			;RETRY COUNT | ||||
| 		RET | ||||
| 		; | ||||
| 	;WRITE BYTE | ||||
| .write_loop:	OUTI | ||||
| .write_loop:	DEC	DE | ||||
| 		LD	A,D | ||||
| 		OR	E | ||||
| 		JR	Z,.SectorSizeError | ||||
| 		; | ||||
| 		OUTI	; !FIXIT à §¬¥à ᥪâ®à  ¬®¦¥â ¡ëâì ¯« ¢ î騬 ¨ ¯à¨¡¨âì ¡ãä¥à | ||||
| .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 | ||||
| 		; | ||||
| .SectorSizeError: | ||||
| 		EX	AF,AF' | ||||
| 		 OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		POP	DE | ||||
| 		POP	HL | ||||
| 		;EI | ||||
| 		; A = 0 | ||||
| 		LD	C,A | ||||
| 		LD	A,BIOS.Error.UnknownDevice | ||||
| 		JR	.error_exit | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @ -757,7 +584,9 @@ FDD.SET720:	LD	A,FDD_Density.SET_720 | ||||
|         	OUT	(FDD_Density),A | ||||
|         	RET | ||||
| 
 | ||||
| 
 | ||||
| ; ¯à¥à뢠¨ï ¤®«¦ë ¡ëâì ®âª«îç¥ë | ||||
| ; ¢ë室: A - FDD_INIT_TABLE.F144, B - sector size high byte | ||||
| DISK_ID:	EXX  | ||||
| 		 CALL	SET_SPEED | ||||
| 		 IN	A,(FDC_93.Track) | ||||
| @ -770,24 +599,7 @@ DISK_ID:	EXX | ||||
| 		 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) | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		AND	#80 | ||||
| 		RET | ||||
| 		 JR	NZ,.Read_Index | ||||
| 		; | ||||
| .ID_LP4:	 DEC	HL | ||||
| 		 LD	A,H | ||||
| @ -799,7 +611,43 @@ DISK_ID:	EXX | ||||
| 		EXX  | ||||
| 		SCF  | ||||
| 		RET | ||||
| ; | ||||
| 		; | ||||
| .Read_Index:	 ; | ||||
| 		 ; „ ë¥ FDC_93.Data: | ||||
| 		 ; ®¬¥à 樫¨¤à 	BYTE | ||||
| 		 ; ®¬¥à £®«®¢ª¨		BYTE | ||||
| 		 ; ®¬¥à ᥪâ®à 		BYTE | ||||
| 		 ; ¤«¨  ᥪâ®à 		BYTE | ||||
| 		 ; ª®â஫ì ï á㬬 	WORD | ||||
| 		 LD	H,4	; !HARDCODE áçñâ稪 ¤® ¡ ©â  à §¬¥à  ᥪâ®à  | ||||
| .ID_LP2:	 IN	A,(FDC_93.Data) | ||||
| 		 DEC	H | ||||
| 		 JR	NZ,.ID_LP3 | ||||
| 		 LD	L,A			; [ ] à §¬¥à  ᥪâ®à  (áâ à訩 ¡ ©â) | ||||
| .ID_LP3:	 IN	A,(FDC_93.DrvCTRL) | ||||
| 		 AND	%1100'0000 | ||||
| 		 JR	Z,.ID_LP3 | ||||
| 		 JP	P,.ID_LP2 | ||||
| 		 LD	A,L | ||||
| 		EXX | ||||
| 		LD	B,A			; [ ] à §¬¥à  ᥪâ®à  (áâ à訩 ¡ ©â) | ||||
| 		IN	A,(SLOT3) | ||||
| 		EX	AF,AF' | ||||
| 		 LD	A,SYS_PAGE | ||||
| 		 OUT	(SLOT3),A | ||||
| 		 ;LD	A,L | ||||
| 		 ;LD	(FDD_INIT_TABLE.FDD_0.BytesPerSector + 1),A | ||||
| 		 LD	A,(FDD_INIT_TABLE.FDD_0.F144) | ||||
| 		EX	AF,AF' | ||||
| 		OUT	(SLOT3),A | ||||
| 		EX	AF,AF' | ||||
| 		AND	#80 | ||||
| 		RET | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 		 | ||||
| 
 | ||||
| 
 | ||||
| ; | ||||
| SEEK:		LD	XL,A | ||||
|  | ||||
| @ -803,66 +803,59 @@ RAMD_CLEAR: | ||||
| ;	º ** NOT USED TR-DOS VARS **			 º\ | ||||
| ;	ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\ | ||||
| ;	 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ | ||||
| BLK_RD_WR: | ||||
| 		AND	A | ||||
| BLK_RD_WR:	AND	A | ||||
| 		SCF | ||||
| 		RET	Z | ||||
| 	; | ||||
| 		; | ||||
| 		AND	A | ||||
| 		INC	B | ||||
| 		DEC	B | ||||
| 		RET	Z | ||||
| 	; | ||||
| 	; á®åà ï¥¬ á®áâ®ï¨¥ ¯à¥à뢠¨© | ||||
| 		; á®åà ï¥¬ á®áâ®ï¨¥ ¯à¥à뢠¨© | ||||
| 		LD	C,A | ||||
| 		LD	A,R | ||||
| 		PUSH	AF | ||||
| 	; á®åà ï¥¬ PORT_Y | ||||
| 		; á®åà ï¥¬ PORT_Y | ||||
| 		IN	A,(PORT_Y) | ||||
| 		PUSH	AF | ||||
| 		LD	A,#C0 | ||||
| 		OUT	(PORT_Y),A | ||||
| 	; | ||||
| 		; | ||||
| 		LD	A,C | ||||
| 		DI | ||||
| 		CALL	.start | ||||
| 		EX	AF,AF' | ||||
| 	; ¢®ááâ  ¢«¨¢ ¥¬ PORT_Y | ||||
| 		; ¢®ááâ  ¢«¨¢ ¥¬ PORT_Y | ||||
| 		POP	AF | ||||
| 		OUT	(PORT_Y),A | ||||
| 	; ¢®ááâ  ¢«¨¢ ¥¬ á®áâ®ï¨¥ ¯à¥à뢠¨© | ||||
| 		; ¢®ááâ  ¢«¨¢ ¥¬ á®áâ®ï¨¥ ¯à¥à뢠¨© | ||||
| 		POP	AF | ||||
| 		JP	PO,.noInterrupts | ||||
| 		EI | ||||
| .noInterrupts: | ||||
| 		EX	AF,AF' | ||||
| .noInterrupts:	EX	AF,AF' | ||||
| 		RET | ||||
| 	; | ||||
| 
 | ||||
| ;		; | ||||
| .start:		EX	AF,AF' | ||||
| 		AND	A		   ; 0 - read | ||||
| 		AND	A		; 0 - read | ||||
| 		JR	Z,.reset_Z | ||||
| 		CP	#FF		  ; write | ||||
| 		CP	#FF		; write | ||||
| 		JR	Z,.keep_Z | ||||
| 
 | ||||
| 		CP	5		    ; old read  | ||||
| 		; | ||||
| 		CP	5		; old read  | ||||
| 		JR	Z,.reset_Z | ||||
| 		CP	6		    ; old write  | ||||
| 		CP	6		; old write  | ||||
| 		JR	Z,.keep_Z | ||||
| 
 | ||||
| 		; | ||||
| 		CP	#46 | ||||
| 		JP	Z,ROM_DISK | ||||
| 
 | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		SCF | ||||
| 		RET | ||||
| 
 | ||||
| .reset_Z: | ||||
| 		INC	A		   ; set Z for WRITE | ||||
| .keep_Z: | ||||
| 		EX	AF,AF' | ||||
| 	; | ||||
| 
 | ||||
| 		; | ||||
| .reset_Z:	INC	A		; set Z for WRITE | ||||
| .keep_Z:	EX	AF,AF' | ||||
| 		; | ||||
| 		PUSH	HL | ||||
| 		PUSH	BC | ||||
| 		LD	C,SLOT1 | ||||
| @ -871,89 +864,73 @@ BLK_RD_WR: | ||||
| 		LD	A,SYS_PAGE | ||||
| 		OUT	(SLOT1),A | ||||
| 		LD	A,H | ||||
| 
 | ||||
| 		; | ||||
| 		LD	H,high +(SYS_PAGE.RAM_TABLE-#4000-#4000) | ||||
| 		LD	L,A | ||||
| 
 | ||||
| 		INC	D | ||||
| .RAMD_LOOP_D: | ||||
| 		DEC	D | ||||
| .RAMD_LOOP_D:	DEC	D | ||||
| 		JR	Z,.NOT_FOUR_BLK | ||||
| 		LD	L,(HL) | ||||
| 		LD	L,(HL) | ||||
| 		LD	L,(HL) | ||||
| 		LD	L,(HL) | ||||
| 		JP	.RAMD_LOOP_D | ||||
| 
 | ||||
| .NOT_FOUR_BLK: | ||||
| 		LD	A,E | ||||
| 		; | ||||
| .NOT_FOUR_BLK:	LD	A,E | ||||
| .loop:		SUB	#40 | ||||
| 		JR	C,.NOT_ONE_BLK | ||||
| 		LD	L,(HL) | ||||
| 		JP	.loop | ||||
| 
 | ||||
| .NOT_ONE_BLK: | ||||
| 		AND	#3F | ||||
| 		; | ||||
| .NOT_ONE_BLK:	AND	#3F | ||||
| 		LD	D,A			; DE - ADRESS in RAM-Disk | ||||
| 		LD	E,0 | ||||
| 
 | ||||
| 		LD	A,L			; L - ⥪ã騩 ¡ ª RAM-Disk | ||||
| 
 | ||||
| 		OUT	(C),B		; ¢®ááâ ®¢¨âì áâà ¨æã | ||||
| 
 | ||||
| 		OUT	(C),B			; ¢®ááâ ®¢¨âì áâà ¨æã | ||||
| 		POP	BC			; ¤«¨  ¤ ëå | ||||
| 		POP	HL			;  ¤à¥á ¡ãä¥à  | ||||
| 
 | ||||
| 		BIT	7,H | ||||
| 		JR	NZ,.BLK_PAGE1 | ||||
| 
 | ||||
| 		; | ||||
| 		LD	C,SLOT3 | ||||
| 		IN	C,(C) | ||||
| 		OUT	(SLOT3),A | ||||
| 		SET	7,D | ||||
| 		SET	6,D | ||||
| 		JP	.BLK_CONT1 | ||||
| 
 | ||||
| .BLK_PAGE1: | ||||
| 		LD	C,SLOT1 | ||||
| 		; | ||||
| .BLK_PAGE1:	LD	C,SLOT1 | ||||
| 		IN	C,(C) | ||||
| 		OUT	(SLOT1),A | ||||
| 		RES	7,D | ||||
| 		SET	6,D | ||||
| 
 | ||||
| .BLK_CONT1:			; DE - RamDisk, HL - data | ||||
| 		EX	AF,AF' | ||||
| 		; DE - RamDisk, HL - data | ||||
| .BLK_CONT1:	EX	AF,AF' | ||||
| 		JR	Z,.NO_EX_RW1		; WRITE | ||||
| 		EX	DE,HL		; for READ | ||||
| .NO_EX_RW1: | ||||
| 		EX	AF,AF' | ||||
| 
 | ||||
| 		EX	DE,HL			; for READ | ||||
| .NO_EX_RW1:	EX	AF,AF' | ||||
| 		LD	A,16 | ||||
| .BLK_LL1: | ||||
| 	DUP	16 | ||||
| 		LDI | ||||
| 	EDUP | ||||
| 
 | ||||
| 		; | ||||
| .BLK_LL1:	DUP	16 | ||||
| 		 LDI | ||||
| 		EDUP | ||||
| 		DEC	A | ||||
| 		JR	NZ,.BLK_LL1 | ||||
| 
 | ||||
| 		; | ||||
| 		EX	AF,AF' | ||||
| 		JR	Z,.NO_EX_RW2		; WRITE | ||||
| 		EX	DE,HL		; for READ | ||||
| .NO_EX_RW2: | ||||
| 		EX	AF,AF'		; DEC C ¯à®ªàã⨫áï 256 à § ¨ ¢¥àã«áï | ||||
| 	; A = 0 | ||||
| 	;INC B			; B 㦥 㬥ì訫áï   1, | ||||
| 	;DEC B | ||||
| 		EX	DE,HL			; for READ | ||||
| .NO_EX_RW2:	EX	AF,AF'			; DEC C ¯à®ªàã⨫áï 256 à § ¨ ¢¥àã«áï | ||||
| 		; A = 0 | ||||
| 		CP	B | ||||
| 		JP	Z,.BLK_EXIT_1 | ||||
| 
 | ||||
| 		; | ||||
| 		BIT	6,D | ||||
| 		JP	NZ,.BLK_CONT1 | ||||
| 
 | ||||
| 		; | ||||
| 		BIT	7,D | ||||
| 		JR	Z,.BLK_PAGE3_X | ||||
| 
 | ||||
| 		; | ||||
| 		IN	A,(SLOT1) | ||||
| 		LD	E,A | ||||
| 		LD	D,high +(SYS_PAGE.RAM_TABLE-#4000-#4000) | ||||
| @ -963,9 +940,8 @@ BLK_RD_WR: | ||||
| 		OUT	(SLOT1),A | ||||
| 		LD	DE,#4000 | ||||
| 		JP	.BLK_CONT1 | ||||
| 
 | ||||
| .BLK_PAGE3_X: | ||||
| 		IN	A,(SLOT3) | ||||
| 		; | ||||
| .BLK_PAGE3_X:	IN	A,(SLOT3) | ||||
| 		LD	E,A | ||||
| 		LD	D,high SYS_PAGE.RAM_TABLE | ||||
| 		LD	A,SYS_PAGE | ||||
| @ -973,10 +949,10 @@ BLK_RD_WR: | ||||
| 		LD	A,(DE) | ||||
| 		OUT	(SLOT3),A | ||||
| 		LD	DE,#C000 | ||||
| 
 | ||||
| 		; | ||||
| 		BIT	7,H | ||||
| 		JP	Z,.BLK_CONT1 | ||||
| 
 | ||||
| 		; | ||||
| 		LD	E,A | ||||
| 		LD	A,C | ||||
| 		OUT	(SLOT3),A | ||||
| @ -986,17 +962,16 @@ BLK_RD_WR: | ||||
| 		OUT	(SLOT1),A | ||||
| 		LD	DE,#4000 | ||||
| 		JP	.BLK_CONT1 | ||||
| 
 | ||||
| .BLK_EXIT_1: | ||||
| 		LD	A,D | ||||
| 		; | ||||
| .BLK_EXIT_1:	LD	A,D | ||||
| 		DEC	A | ||||
| 		RLCA | ||||
| 		LD	A,C | ||||
| 		JR	C,.BLK_EXIT_2 | ||||
| 		OUT	(SLOT1),A | ||||
| 		RET | ||||
| .BLK_EXIT_2: | ||||
| 		OUT	(SLOT3),A | ||||
| 		; | ||||
| .BLK_EXIT_2:	OUT	(SLOT3),A | ||||
| 		AND	A | ||||
| 		RET | ||||
| ;----------------------------------------------------------------------; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Tolik
						Tolik