- плагин доделан, описание/history в cdplayer.txt рядом с плагином. FE 1.09 - исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение клавиша Enter теперь работает как подтверждение сохранения. FN 1.16 - встроенный editor переехал в плагин откуда и запускается по F4, из FN удален. - встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален. - встроенный help переехал в плагин откуда и запускается при нажатии F1, из FN удален. - загрузка плагина отделена от запуска, теперь можно запускать плагины не только из панели FN. - добавлен макрос формирования заголовка для плагинов. - добавлена поддержка работы плагинов в адреса 0x4000-0x7FFF (окно 1) в дополнение к старым 0xC000-0xBFFF (окно 3), пока используется в плагине cdplayer. - в окнах с ошибкой переделан на 2 типа окон вместо многих под каждую ошибку. - исправлена потеря цвета при печати текста по указанному адресу. - текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8.
		
			
				
	
	
		
			499 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			499 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | ||
| ; LAST UPDATE: 25.07.2025 savelij
 | ||
| 
 | ||
| ;[]----------------------------------------------------------[]
 | ||
| ResFire:	LD	A,(MouseFlag)
 | ||
| 		OR	A
 | ||
| 		RET	Z
 | ||
| RsFire1		CALL	TestCMOS
 | ||
| 	SPMOUSE MOUSEF.READ_STATE
 | ||
| 		OR	A
 | ||
| 		RET	Z
 | ||
| 		JR	RsFire1
 | ||
| 
 | ||
| ;[]----------------------------------------------------------[]
 | ||
| ; <20>஢¥àª  ª®®à¤¨ â ¬ëè¨ ¯® â ¡«¨æ¥
 | ||
| ; <20>  ¢å®¤:
 | ||
| ;	  IX - €¤à¥á â ¡«¨æë
 | ||
| TestCoords:	CALL	TestCMOS
 | ||
| 	SPMOUSE MOUSEF.READ_STATE
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	BC,0x0000
 | ||
| .PrvTabl	EQU $-2
 | ||
| 		LD	A,IXL
 | ||
| 		CP	C
 | ||
| 		JR	NZ,.L2
 | ||
| 		LD	A,IXH
 | ||
| 		CP	B
 | ||
| 		JR	Z,.L3
 | ||
| .L2		LD	(.PrvTabl),IX
 | ||
| 		CALL	ResMInvert
 | ||
| 		LD	BC,ResFire
 | ||
| 		PUSH	BC
 | ||
| 		SUB	A
 | ||
| 		LD	(RunFlag),A
 | ||
| 		JR	.L4
 | ||
| 
 | ||
| .L3		LD	A,0x01
 | ||
| 		LD	(RunFlag),A
 | ||
| 		EX	AF,AF'
 | ||
| 		OR	A
 | ||
| 		JR	NZ,.L4
 | ||
| 		PUSH	HL
 | ||
| 		LD	BC,0x0000
 | ||
| .PrMousX	EQU $-2
 | ||
| 		OR	A
 | ||
| 		SBC	HL,BC
 | ||
| 		POP	HL
 | ||
| 		JR	NZ,.L4
 | ||
| 		EX	DE,HL
 | ||
| 		PUSH	HL
 | ||
| 		LD	BC,0x0000
 | ||
| .PrMousY	EQU $-2
 | ||
| 		OR	A
 | ||
| 		SBC	HL,BC
 | ||
| 		POP	HL
 | ||
| 		EX	DE,HL
 | ||
| 		RET	Z
 | ||
| .L4		LD	(.PrMousX),HL
 | ||
| 		LD	(.PrMousY),DE
 | ||
| CoordLp		LD	C,(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	B,(IX+FORMTABL.X_MIN + 1)	; 01
 | ||
| 		OR	A
 | ||
| 		SBC	HL,BC
 | ||
| 		ADD	HL,BC
 | ||
| 		JP	C,NxtCrds
 | ||
| 		LD	C,(IX+FORMTABL.X_MAX)	; 02
 | ||
| 		LD	B,(IX+FORMTABL.X_MAX + 1)	; 03
 | ||
| 		SBC	HL,BC
 | ||
| 		ADD	HL,BC
 | ||
| 		JP	NC,NxtCrds
 | ||
| 		LD	C,(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	B,(IX+FORMTABL.Y_MIN + 1)	; 05
 | ||
| 		OR	A
 | ||
| 		EX	DE,HL
 | ||
| 		SBC	HL,BC
 | ||
| 		ADD	HL,BC
 | ||
| 		EX	DE,HL
 | ||
| 		JP	C,NxtCrds
 | ||
| 		LD	C,(IX+FORMTABL.Y_MAX)		; 06
 | ||
| 		LD	B,(IX+FORMTABL.Y_MAX + 1)	; 07
 | ||
| 		EX	DE,HL
 | ||
| 		SBC	HL,BC
 | ||
| 		ADD	HL,BC
 | ||
| 		EX	DE,HL
 | ||
| 		JP	NC,NxtCrds
 | ||
| 		LD	C,A
 | ||
| 		LD	A,(MouseFlag)
 | ||
| 		OR	A
 | ||
| 		LD	A,C
 | ||
| 		JR	Z,CoordL1
 | ||
| 		BIT	FORMTABL.B_INV1,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,SetSelect1
 | ||
| CoordL1		BIT	FORMTABL.B_STATICINV,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,SetSelect2
 | ||
| 		LD	C,0x00
 | ||
| RunFlag		EQU $-1
 | ||
| 		DEC	C
 | ||
| 		JP	NZ,NxtCrds1
 | ||
| 		LD	C,A
 | ||
| 		LD	A,(MouseFlag)
 | ||
| 		OR	A
 | ||
| 		RET	Z
 | ||
| 		LD	A,C
 | ||
| 		OR	A			; ¥â ®£ï
 | ||
| 		JR	Z,Execute1
 | ||
| 		BIT	0,A
 | ||
| 		JR	Z,Execute2
 | ||
| 		BIT	FORMTABL.B_BUTTON,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,PushButton
 | ||
| 		CCF 
 | ||
| 		RET	NC
 | ||
| 		OR	A
 | ||
| 		BIT	FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAG)	; 08 ; à ¡®ç ï ª®¯ª 
 | ||
| 		RET	NZ
 | ||
| 		LD	C,(IX+FORMTABL.FIRE_LEFT)	; 0C ; § ¯ã᪠¯® «¥¢®© ª®¯ª¥
 | ||
| 		LD	B,(IX+FORMTABL.FIRE_LEFT + 1)	; 0D
 | ||
| 		LD	A,B
 | ||
| 		OR	C
 | ||
| 		JP	Z,NxtCrds1
 | ||
| 		BIT	FORMTABL.B_EXECNORETLMB,(IX+FORMTABL.FLAG)	; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â 
 | ||
| 		JR	Z,.L1
 | ||
| 		POP	AF
 | ||
| .L1		PUSH	BC
 | ||
| 		BIT	FORMTABL.B_INV1,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,ResSelect1
 | ||
| 		CALL	ResSelect2
 | ||
| 		OR	A
 | ||
| 		BIT	FORMTABL.B_CLOSEWIN,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		RET	Z
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 | ||
| 
 | ||
| Execute1	LD	C,(IX+FORMTABL.FIRE_NOFIRE)	; 0A ; § ¯ã᪠¡¥§ ®£ï
 | ||
| 		LD	B,(IX+FORMTABL.FIRE_NOFIRE + 1)	; 0B
 | ||
| 		LD	A,B
 | ||
| 		OR	C
 | ||
| 		JR	Z,NxtCrds1
 | ||
| 		BIT	FORMTABL.B_EXECONLY,(IX+FORMTABL.FLAG)	; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â 
 | ||
| 		JR	Z,.L1
 | ||
| 		POP	AF
 | ||
| .L1		PUSH	BC
 | ||
| 		BIT	FORMTABL.B_INV1,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,ResSelect1
 | ||
| 		CALL	ResSelect2
 | ||
| 		OR	A
 | ||
| 		BIT	FORMTABL.B_EXECNOPRESS,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		RET	Z
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 | ||
| 
 | ||
| Execute2	LD	C,(IX+FORMTABL.FIRE_RIGHT)	; 0E ; § ¯ã᪠¯® ¯à ¢®© ª®¯ª¥
 | ||
| 		LD	B,(IX+FORMTABL.FIRE_RIGHT + 1)	; 0F
 | ||
| 		LD	A,B
 | ||
| 		OR	C
 | ||
| 		JR	Z,NxtCrds1
 | ||
| 		BIT	FORMTABL.B_EXECNORETRMB,(IX+FORMTABL.FLAG)	; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â 
 | ||
| 		JR	Z,.L1
 | ||
| 		POP	AF
 | ||
| .L1		PUSH	BC
 | ||
| 		BIT	FORMTABL.B_INV1,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,ResSelect1
 | ||
| 		CALL	ResSelect2
 | ||
| 		OR	A
 | ||
| 		BIT	FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		RET	Z
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 | ||
| 
 | ||
| NxtCrds		LD	C,A
 | ||
| 		LD	A,(MouseFlag)
 | ||
| 		OR	A
 | ||
| 		LD	A,C
 | ||
| 		JR	Z,NxtCrds0
 | ||
| 		BIT	FORMTABL.B_INV1,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,ResSelect1
 | ||
| NxtCrds0	BIT	FORMTABL.B_STATICINV,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,SetSelect2
 | ||
| NxtCrds1	LD	BC,FORMTABL.SIZE;0x0010
 | ||
| 		ADD	IX,BC
 | ||
| 		BIT	FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1)	; ª®¥æ â ¡«¨æë?
 | ||
| 		JP	Z,CoordLp
 | ||
| 		OR	A
 | ||
| 		RET 
 | ||
| 
 | ||
| ResMInvert	PUSH	IX
 | ||
| 		PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	AF
 | ||
| 		LD	BC,FORMTABL.SIZE;0x0010
 | ||
| ResCrds		RES	FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		RES	FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		ADD	IX,BC
 | ||
| 		BIT	FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1)
 | ||
| 		JR	Z,ResCrds
 | ||
| 		POP	AF
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		POP	IX
 | ||
| 		RET 
 | ||
| 
 | ||
| SetSelect1	BIT	FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		RET	NZ
 | ||
| 		SET	FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		PUSH	AF
 | ||
| 		PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	IX
 | ||
| 		LD	L,(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	H,(IX+FORMTABL.X_MIN + 1)	; 01
 | ||
| 		LD	C,(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	B,(IX+FORMTABL.Y_MIN + 1)	; 05
 | ||
| 		LD	A,(IX+FORMTABL.X_MAX)	; 02
 | ||
| 		SUB	(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	A,(IX+FORMTABL.Y_MAX)	; 06
 | ||
| 		SUB	(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	IXH,A
 | ||
| 		EX	AF,AF'
 | ||
| 		SRL	A
 | ||
| 		LD	IXL,A
 | ||
| 		LD	DE,(COLORP.HIGHGRAY + COLORI.BLACK) << 8 | (COLORP.BLUE + COLORI.WHITE);0x804F
 | ||
| 		CALL	InvertRectan
 | ||
| 		POP	IX
 | ||
| 		PUSH	IX
 | ||
| NxCrds1		LD	BC,FORMTABL.SIZE;0x0010
 | ||
| 		ADD	IX,BC
 | ||
| 		BIT	FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1)	; 01 ; ¯à®¢¥àª  ª®æ  â ¡«¨æë?
 | ||
| 		JR	NZ,NxCrds2
 | ||
| 		BIT	FORMTABL.B_INV1,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		CALL	NZ,ResSelect1
 | ||
| 		JR	NxCrds1
 | ||
| 
 | ||
| NxCrds2		POP	IX
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		POP	AF
 | ||
| 		RET 
 | ||
| 
 | ||
| ResSelect1	BIT	FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		RET	Z
 | ||
| 		RES	FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		PUSH	IX
 | ||
| 		PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		LD	L,(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	H,(IX+FORMTABL.X_MIN + 1)	; 01
 | ||
| 		LD	C,(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	B,(IX+FORMTABL.Y_MIN + 1)	; 05
 | ||
| 		LD	A,(IX+FORMTABL.X_MAX)	; 02
 | ||
| 		SUB	(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	A,(IX+FORMTABL.Y_MAX)	; 06
 | ||
| 		SUB	(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	IXH,A
 | ||
| 		EX	AF,AF'
 | ||
| 		SRL	A
 | ||
| 		LD	IXL,A
 | ||
| 		LD	DE,(COLORP.BLUE + COLORI.WHITE) << 8 | (COLORP.HIGHGRAY + COLORI.BLACK);0x4F80
 | ||
| 		CALL	InvertRectan
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		POP	IX
 | ||
| 		RET 
 | ||
| 
 | ||
| SetSelect2	BIT	FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		RET	NZ
 | ||
| 		SET	FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		PUSH	IX
 | ||
| 		PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	AF
 | ||
| 		LD	L,(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	H,(IX+FORMTABL.X_MIN + 1)	; 01
 | ||
| 		LD	C,(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	B,(IX+FORMTABL.Y_MIN + 1)	; 05
 | ||
| 		LD	A,(IX+FORMTABL.X_MAX)	; 02
 | ||
| 		SUB	(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	A,(IX+FORMTABL.Y_MAX)	; 06
 | ||
| 		SUB	(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	IXH,A
 | ||
| 		EX	AF,AF'
 | ||
| 		SRL	A
 | ||
| 		LD	IXL,A
 | ||
| 		LD	DE,(COLORP.HIGHGRAY + COLORI.BLACK) << 8 | (COLORP.BLUE + COLORI.WHITE);0x804F
 | ||
| 		CALL	InvertRectan
 | ||
| 		POP	AF
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		POP	IX
 | ||
| 		RET 
 | ||
| 
 | ||
| ResSelect2	PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	IX
 | ||
| 		LD	IX,(TestCoords.PrvTabl)
 | ||
| 		LD	BC,FORMTABL.SIZE;0x0010
 | ||
| NxCrds3		BIT	FORMTABL.B_STATICINV,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		JR	NZ,ResSel22
 | ||
| 		ADD	IX,BC
 | ||
| 		BIT	FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1)	; 01 ; ¯à®¢¥àª  ª®æ  â ¡«¨æë?
 | ||
| 		JR	NZ,ResSel2E
 | ||
| 		JR	NxCrds3
 | ||
| 
 | ||
| ResSel22	BIT	FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		JR	Z,ResSel2E
 | ||
| 		RES	FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1)	; 09
 | ||
| 		LD	L,(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	H,(IX+FORMTABL.X_MIN + 1)	; 01
 | ||
| 		LD	C,(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	B,(IX+FORMTABL.Y_MIN + 1)	; 05
 | ||
| 		LD	A,(IX+FORMTABL.X_MAX)	; 02
 | ||
| 		SUB	(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	A,(IX+FORMTABL.Y_MAX)	; 06
 | ||
| 		SUB	(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	IXH,A
 | ||
| 		EX	AF,AF'
 | ||
| 		SRL	A
 | ||
| 		LD	IXL,A
 | ||
| 		LD	DE,(COLORP.BLUE + COLORI.WHITE) << 8 | (COLORP.HIGHGRAY + COLORI.BLACK);0x4F80
 | ||
| 		CALL	InvertRectan
 | ||
| ResSel2E	POP	IX
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		RET 
 | ||
| 
 | ||
| PushButton	PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		LD	L,(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	H,(IX+FORMTABL.X_MIN + 1)	; 01
 | ||
| 		LD	E,(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	D,(IX+FORMTABL.Y_MIN + 1)	; 05
 | ||
| 		LD	A,(IX+FORMTABL.X_MAX)	; 02
 | ||
| 		SUB	(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	C,A
 | ||
| 		LD	A,(IX+FORMTABL.Y_MAX)	; 06
 | ||
| 		SUB	(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	B,A
 | ||
| 		PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	BC
 | ||
| 		CALL	PutPushBut
 | ||
| 		LD	A,0x0A
 | ||
| 		LD	(PausePh+1),A
 | ||
| PushLp		PUSH	IX
 | ||
| 		CALL	TestRun
 | ||
| 		POP	IX
 | ||
| PushLp1
 | ||
| 	SPMOUSE MOUSEF.READ_STATE
 | ||
| 		OR	A
 | ||
| 		JR	Z,PushButtEx
 | ||
| 		BIT	0,A
 | ||
| 		JR	Z,PushButtEx
 | ||
| 		LD	C,(IX+FORMTABL.X_MIN)	; 00
 | ||
| 		LD	B,(IX+FORMTABL.X_MIN + 1)	; 01
 | ||
| 		OR	A
 | ||
| 		SBC	HL,BC
 | ||
| 		ADD	HL,BC
 | ||
| 		JR	C,PushButtEx
 | ||
| 		LD	C,(IX+FORMTABL.X_MAX)	; 02
 | ||
| 		LD	B,(IX+FORMTABL.X_MAX + 1)	; 03
 | ||
| 		SBC	HL,BC
 | ||
| 		ADD	HL,BC
 | ||
| 		CCF 
 | ||
| 		JR	C,PushButtEx
 | ||
| 		EX	DE,HL
 | ||
| 		LD	C,(IX+FORMTABL.Y_MIN)	; 04
 | ||
| 		LD	B,(IX+FORMTABL.Y_MIN + 1)	; 05
 | ||
| 		OR	A
 | ||
| 		SBC	HL,BC
 | ||
| 		ADD	HL,BC
 | ||
| 		JR	C,PushButtEx
 | ||
| 		LD	C,(IX+FORMTABL.Y_MAX)	; 06
 | ||
| 		LD	B,(IX+FORMTABL.Y_MAX + 1)	; 07
 | ||
| 		SBC	HL,BC
 | ||
| 		CCF 
 | ||
| 		JR	C,PushButtEx
 | ||
| PausePh		LD	A,0x00
 | ||
| 		OR	A
 | ||
| 		JR	Z,PushLp
 | ||
| 		DEC	A
 | ||
| 		LD	(PausePh+1),A
 | ||
| 		HALT 
 | ||
| 		JR	PushLp1
 | ||
| 
 | ||
| PushButtEx	POP	BC
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		PUSH	AF
 | ||
| 		CALL	PutPopBut
 | ||
| 		POP	AF
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		RET 
 | ||
| 
 | ||
| TestRun		BIT	FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAG)	; 08
 | ||
| 		RET	Z
 | ||
| 		LD	C,(IX+FORMTABL.FIRE_LEFT)	; 0C
 | ||
| 		LD	B,(IX+FORMTABL.FIRE_LEFT + 1)	; 0D
 | ||
| 		PUSH	BC
 | ||
| 		RET 
 | ||
| 
 | ||
| PutPushBut	LD	A,COLORP.WHITE | COLORI.BLACKGRAY;0xF7
 | ||
| 		JR	PutButt
 | ||
| 
 | ||
| PutPopBut	LD	A,COLORP.BLACKGRAY | COLORI.WHITE;0x7F
 | ||
| PutButt		PUSH	IY
 | ||
| 		EX	AF,AF'
 | ||
| 	GETPORT WINSP.CPU1
 | ||
| 		PUSH	AF
 | ||
| 	SETPORT WINSP.CPU1,0x50
 | ||
| 	GETPORT WINSP.Y_PORT
 | ||
| 		PUSH	AF
 | ||
| 		SRL	H
 | ||
| 		RR	L
 | ||
| 		SET	6,H
 | ||
| 		LD	IYL,E
 | ||
| 		SRL	C
 | ||
| 		DEC	C
 | ||
| 		DEC	C
 | ||
| 		LD	A,C
 | ||
| 		LD	(ButLen3),A
 | ||
| 		LD	A,B
 | ||
| 		SUB	0x02
 | ||
| 		LD	(ButLen1),A
 | ||
| 		LD	(ButLen2),A
 | ||
| 		ADD	A,IYL
 | ||
| 		INC	A
 | ||
| 		LD	IYH,A
 | ||
| 		EX	AF,AF'
 | ||
| 		PUSH	AF
 | ||
| 		AND	0xF0
 | ||
| 		LD	E,A
 | ||
| 		RRCA 
 | ||
| 		RRCA 
 | ||
| 		RRCA 
 | ||
| 		RRCA 
 | ||
| 		OR	E
 | ||
| 		LD	D,A
 | ||
| 		POP	AF
 | ||
| 		AND	0x0F
 | ||
| 		LD	E,A
 | ||
| 		RLCA 
 | ||
| 		RLCA 
 | ||
| 		RLCA 
 | ||
| 		RLCA 
 | ||
| 		OR	E
 | ||
| 		LD	E,A
 | ||
| 		DI 
 | ||
| 		LD	A,IYL
 | ||
| 	SETPORT WINSP.Y_PORT,,0
 | ||
| 		LD	(HL),E
 | ||
| 		INC	A
 | ||
| 	SETPORT WINSP.Y_PORT,,0
 | ||
| 	ACCEL ACCELCMD.SET_BUFFER
 | ||
| 		LD	A,0x00
 | ||
| ButLen1		EQU $-1
 | ||
| 	ACCEL ACCELCMD.FILL_VERT
 | ||
| 		LD	(HL),E
 | ||
| 	ACCEL ACCELCMD.OFF
 | ||
| 		LD	(HL),E
 | ||
| 		INC	HL
 | ||
| 	ACCEL ACCELCMD.SET_BUFFER
 | ||
| 		LD	A,0x00
 | ||
| ButLen3		EQU $-1
 | ||
| 	ACCEL ACCELCMD.OFF
 | ||
| 		LD	A,IYL
 | ||
| 	SETPORT WINSP.Y_PORT,,0
 | ||
| 	ACCEL ACCELCMD.FILL
 | ||
| 		LD	(HL),E
 | ||
| 	ACCEL ACCELCMD.OFF
 | ||
| 		LD	A,IYH
 | ||
| 	SETPORT WINSP.Y_PORT,,0
 | ||
| 	ACCEL ACCELCMD.FILL
 | ||
| 		LD	(HL),D
 | ||
| 	ACCEL ACCELCMD.OFF
 | ||
| 		LD	B,0x00
 | ||
| 		ADD	HL,BC
 | ||
| 		LD	A,IYL
 | ||
| 	SETPORT WINSP.Y_PORT,,0
 | ||
| 		LD	(HL),D
 | ||
| 		INC	A
 | ||
| 	SETPORT WINSP.Y_PORT,,0
 | ||
| 	ACCEL ACCELCMD.SET_BUFFER
 | ||
| 		LD	A,0x00
 | ||
| ButLen2		EQU $-1
 | ||
| 	ACCEL ACCELCMD.FILL_VERT
 | ||
| 		LD	(HL),D
 | ||
| 	ACCEL ACCELCMD.OFF
 | ||
| 		LD	(HL),D
 | ||
| 		EI 
 | ||
| 		POP	AF
 | ||
| 	SETPORT WINSP.Y_PORT,,0
 | ||
| 		POP	AF
 | ||
| 	SETPORT WINSP.CPU1,,0
 | ||
| 		POP	IY
 | ||
| 		RET 
 |