//======================================================== FX_HEADER
EFF_INI		JP	EFF_INI_
EFF_RUN		JP	EFF_RUN_
//======================================================== FX_CONST
//======================================================== FX_INIT
EFF_INI_
	LD	HL,TBLDEC + 1
	XOR	A
INI1	LD	(HL),A
	INC	A
	INC	L
	JP	NZ,INI1
	;------------ rand
	LD	HL,BUFF
	LD	B,59
INI3	CALL	GET_RANDOM
	CALL	GET_RANDOM
	XOR	L
	AND	31
	ADD	A,16
	LD	(HL),A
	INC	L
	DJNZ	INI3
	RET
;-----------------
GET_RANDOM
	LD  A,137
SEED	EQU	$-1
	LD	C,A
	ADD	A,A
	XOR	C
	LD	C,A
	SRL	A
	XOR	C
	LD	C,A
	ADD	A,A
	ADD	A,A
	XOR	C
	LD	(SEED),A
	RET
//======================================================== FX_MAINLOOP
EFF_RUN_
	EI
	HALT
	LD	A,1
	OUT	(#FE),A



		IF SHOW_FRAMES=1
		LD	A,(FRAMES_QTY)
		PUSH	AF
		XOR	A
		LD	(FRAMES_QTY),A
		ENDIF
	EI
	HALT
	LD	A,0
BORDER	EQU	$-1
	OUT	(#FE),A
	;---
	LD	A,#17
FPG	EQU	$-1
	XOR	#02 + 08
	LD	(FPG),A
	CALL	PAGER
	;---
		IF SHOW_FRAMES=1
		POP AF:OUT (#FE),A
		ENDIF
	CALL	SYNC
	CALL	SYNC_FADE
	CALL	ATTROUT
	CALL	ROMBOUT
	;CALL	GREETZ
		IF SHOW_FRAMES=1
		XOR A:OUT (#FE),A
		ENDIF
	RET
//======================================================== FX_PROCEDURES
SYNC_VAL_INI	EQU	1
SYNC_VAL	EQU	13	;52/4
SYNC
	XOR	A
	LD	(BORDER),A
	;---
	LD	A,SYNC_VAL_INI
SYNC_A	EQU	$-1
	DEC	A
	LD	(SYNC_A),A
	JR	NZ,SYNC_NO_BLNK
	LD	A,SYNC_VAL
	LD	(SYNC_A),A
	;--
	LD	A,7
BORDER_NEXT EQU $-1
	LD	(BORDER),A
	LD	A,1
	LD	(BORDER_NEXT),A
	;--
	LD	HL,(GRTBLHL)
	LD	A,(HL)
	INC	HL
	OR	(HL)
	RET	Z
	;--
	INC	HL
	LD	(GRTBLHL),HL
	RET
SYNC_NO_BLNK ;------
	LD	C,0
	CP	7	;plusminus 7 8
	JR	NC,SYNC_DY
	CP	5	;plusminus 5 6
	JR	C,SYNC_DY
	;---
	LD	C,32
	BIT	0,A
	JR	Z,SYNC_DY
	LD	C,0-32
SYNC_DY	;---
	LD	A,C
	LD	(GR_DY),A
	RET
;------------------------	
SYNC_FADE
	LD	HL,(MUSPOS)
	LD	BC,1612
	AND	A
	SBC	HL,BC
	RET	C
	LD	A,15
	LD	(TBLDEC+15),A
	RET

;------------------------
ATTROUT
	LD	A,(SYNC_A)
	CP	6
	LD	HL,#0101
	JP	NZ,ATTROUT2
	;include "debug_getstat.asm"
	LD	HL,#4141
ATTROUT2
	LD	DE,#0000
	LD	A,(BORDER)
	OR	A
	JR	Z,ATTROUT3
	LD	HL,#0B0B
	LD	DE,#0909
	CP	1
	JR	Z,ATTROUT3
	LD	HL,#3F3F
	LD	DE,#3F3F
ATTROUT3 ;--
	LD	(ATTROUT_SP),SP
	;--
	LD	SP,#DB00
	LD	A,3
	;-
	DUP	16
	PUSH	DE
	EDUP
	JR	ATTROUT1+16
ATTROUT1 ;-
	DUP	128
	PUSH	HL
	EDUP
	;-
	DEC	A
	JP	NZ,ATTROUT1
	;--
	LD	SP,0
ATTROUT_SP	EQU $-2
	RET
;-------------------------------------
ROMBOUT	

	LD	(SOHRSP1),SP

	LD	A,4:OUT (#FE),A
	LD	IX,
	
	LD	HL,#C243
	include "bg.asm"
ROMBRET
	
	LD	A,0:OUT (#FE),A

	LD	SP,0
SOHRSP1	EQU	$-2
	RET


	LD	H,SPRTBL/256
	LD	DE,#C000
	EXX
	LD	HL,BUFF
	LD	D,TBLDEC/256
	;----
	DUP	8
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUT0
	;----
	EDUP
	;----
		EXX
		LD	DE,#C240
		INC	H
		EXX
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUTL0
	;----
	DUP	7
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUT1
	;----
	EDUP
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUTR0
	;----

		EXX
		LD	DE,#C6A0
		EXX
	;----
	DUP	8
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUT2
	;----
	EDUP
	;----
		EXX
		LD	DE,#CA20
		EXX
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUTL0
	;----
	DUP	7
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUT1
	;----
	EDUP
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUTR0
	;----
		EXX
		LD	DE,#CE80
		EXX
	;----
	DUP	8
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUT2
	;----
	EDUP
	;----
		EXX
		LD	DE,#D200
		EXX
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUTL0
	;----
	DUP	7
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUT1
	;----
	EDUP
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUTR0
	;----
		EXX
		LD	DE,#D660
		EXX
	;----
	DUP	8
	;----
	LD	E,(HL)
	LD	A,(DE)
	LD	(HL),A
	INC	HL
	CALL	ROUT3
	;----
	EDUP
	;----
	RET
	

;-----------------------
ROUTL0	
	LD	LX,2
	EXX
	PUSH	DE
	ADD	A,A
	LD	L,A
	LD	C,(HL)
	INC	L
	LD	B,(HL)
	EX	DE,HL
	;---
	DUP	6
	;---
	INC C:INC C
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC	BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	CALL	DOWNHL
	;---
	DUP	2
	;---
	INC C:INC C
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC	BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	DUP	6
	;---
	INC C:INC C
	LD	A,(BC)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	LD	(HL),A
	INC	BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	CALL	DOWNHL
ROL0	;---
	DUP	8
	;---
	INC C:INC C
	LD	A,(BC)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	LD	(HL),A
	INC	BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	CALL	DOWNHL
	;---
	DEC	LX
	JP	NZ,ROL0
	;---
	DUP	6
	;---
	INC C:INC C
	LD	A,(BC)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	LD	(HL),A
	INC	BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	EX	DE,HL
	POP	DE
	INC E:INC E
	EXX
	RET
;-----------------------
ROUTR0	
	LD	LX,2
	EXX
	ADD	A,A
	LD	L,A
	LD	C,(HL)
	INC	L
	LD	B,(HL)
	EX	DE,HL
	;---
	DUP	6
	;---
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC C:INC C:INC BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	CALL	DOWNHL
	;---
	DUP	2
	;---
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	OR	(HL)
	LD	(HL),A
	INC C:INC C:INC BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	DUP	6
	;---
	LD	A,(BC)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	LD	(HL),A
	INC C:INC C:INC BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	CALL	DOWNHL
ROR0	;---
	DUP	8
	;---
	LD	A,(BC)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	LD	(HL),A
	INC C:INC C:INC BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	CALL	DOWNHL
	;---
	DEC	LX
	JP	NZ,ROR0
	;---
	DUP	6
	;---
	LD	A,(BC)
	LD	(HL),A
	INC	C
	INC	L
	LD	A,(BC)
	LD	(HL),A
	INC C:INC C:INC BC
	DEC	L
	INC	H
	;---
	EDUP
	;---
	EX	DE,HL
	EXX
	RET
;-----------------------
ROUT0	LD	LX,3
	EXX
	PUSH	DE
	ADD	A,A
	LD	L,A
	LD	C,(HL)
	INC	L
	LD	B,(HL)
RO0	;---
	DUP	8
	;---
	LD	L,E
	;---
	DUP	3
	;---
	LD	A,(BC)
	LD	(DE),A
	INC	C
	INC	E
	;---
	EDUP
	;---
	LD	A,(BC)
	LD	(DE),A
	INC	BC
	LD	E,L
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
	DEC	LX
	JP	NZ,RO0
	;---
	DUP	2
	;---
	LD	L,E
	;---
	DUP	3
	;---
	LD	A,(BC)
	LD	(DE),A
	INC	C
	INC	E
	;---
	EDUP
	;---
	LD	A,(BC)
	LD	(DE),A
	INC	BC
	LD	E,L
	INC	D
	;---
	EDUP
	;---
	POP	DE
	LD	A,E
	ADD	A,4
	LD	E,A
	EXX	
	RET
;-----------------------
ROUT1
	LD	LX,2
	EXX
	PUSH	DE
	ADD	A,A
	LD	L,A
	LD	C,(HL)
	INC	L
	LD	B,(HL)
	PUSH	HL
	LD	HL,BC
	;---
	DUP	6
	;---
	DUP	3
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	E
	INC	L
	;---
	EDUP
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	HL
	DEC E:DEC E:DEC E
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
	;---
	DUP	2
	;---
	DUP	3
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	E
	INC	L
	;---
	EDUP
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	HL
	DEC E:DEC E:DEC E
	INC	D
	;---
	EDUP
	LD	A,E
	;---
	DUP	6
	;---
	LDI:LDI:LDI:LDI
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
RO1	LD	A,E
	;---
	DUP	8
	;---
	LDI:LDI:LDI:LDI
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
	;---
	DEC	LX
	JP	NZ,RO1
	LD	A,E
	;---
	DUP	6
	;---
	LDI:LDI:LDI:LDI
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	POP	HL
	POP	DE
	LD	A,E
	ADD	A,4
	LD	E,A
	EXX
	RET
;-----------------------
ROUT2
	LD	LX,3
	EXX
	PUSH	DE
	ADD	A,A
	LD	L,A
	LD	C,(HL)
	INC	L
	LD	B,(HL)
	PUSH	HL
	LD	HL,BC
	;---
	DUP	2
	;---
	DUP	3
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	E
	INC	L
	;---
	EDUP
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	HL
	DEC E:DEC E:DEC E
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
	;---
	DUP	6
	;---
	DUP	3
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	E
	INC	L
	;---
	EDUP
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	HL
	DEC E:DEC E:DEC E
	INC	D
	;---
	EDUP
	;---
	LD	A,E
	;---
	DUP	2
	;---
	LDI:LDI:LDI:LDI
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
RO2	LD	A,E
	;---
	DUP	8
	;---
	LDI:LDI:LDI:LDI
	DEC	DE
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
	;---
	DEC	LX
	JP	NZ,RO2
	LD	A,E
	;---
	DUP	2
	;---
	LDI:LDI:LDI:LDI
	DEC	DE
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	POP	HL
	POP	DE
	LD	A,E
	ADD	A,4
	LD	E,A
	EXX
	RET
;-----------------------
ROUT3
	LD	LX,2
	EXX
	PUSH	DE
	ADD	A,A
	LD	L,A
	LD	C,(HL)
	INC	L
	LD	B,(HL)
	PUSH	HL
	LD	HL,BC
	;---
	DUP	2
	;---
	DUP	3
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	E
	INC	L
	;---
	EDUP
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	HL
	DEC E:DEC E:DEC E
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
	;---
	DUP	6
	;---
	DUP	3
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	E
	INC	L
	;---
	EDUP
	;---
	LD	A,(DE)
	OR	(HL)
	LD	(DE),A
	INC	HL
	DEC E:DEC E:DEC E
	INC	D
	;---
	EDUP
	;---
	LD	A,E
	;---
	DUP	2
	;---
	LDI:LDI:LDI:LDI
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
RO3	LD	A,E
	;---
	DUP	8
	;---
	LDI:LDI:LDI:LDI
	LD	E,A
	INC	D
	;---
	EDUP
	;---
	CALL	DOWNDE
	;---
	DEC	LX
	JP	NZ,RO3
	;--
	POP	HL
	POP	DE
	LD	A,E
	ADD	A,4
	LD	E,A
	EXX
	RET
;-----------------------
DOWNDE4	LD	A,D
	AND	7
	RET	NZ
DOWNDE	LD	A,E
	ADD	A,#20
	LD	E,A
	RET	C
	LD	A,D
	SUB	8
	LD	D,A
	RET
;------------
DOWNHL	LD	A,L
	ADD	A,#20
	LD	L,A
	RET	C
	LD	A,H
	SUB	8
	LD	H,A
	RET
;----------------------------	
GRTBL
	DW	GREETZ_0

	DW	GREETZ_0
	DW	GREETZ_1
	DW	GREETZ_2
	DW	GREETZ_3
	
	DW	GREETZ_4
	DW	GREETZ_5
	DW	GREETZ_6
	DW	GREETZ_7
	
	DW	GREETZ_8
	DW	GREETZ_9
	DW	GREETZ_10
	DW	GREETZ_11
	
	DW	GREETZ_12
	DW	GREETZ_13
	DW	GREETZ_14
	DW	0
;----------------------------
GREETZ	LD	HL,GRTBL
GRTBLHL	EQU $-2
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	A,D
	OR	E
	RET	Z
	;----------
	LD	C,0
GR_DY	EQU	$-1
	LD	A,(DE)
	ADD	A,C
	LD	L,A
	INC	DE
	LD	A,(DE)
	LD	H,A
	INC	DE
	LD	(GR_SCR),HL
	;--
	LD	A,(DE)
	ADD	A,C
	LD	L,A
	INC	DE
	LD	A,(DE)
	LD	H,A
	INC	DE
	LD	(GR_ATTR),HL
	;--
	EXX
	LD	HL,#2121
GR_SCR	EQU $-2
	LD	DE,#1111
GR_ATTR	EQU $-2

	LD	A,1
IS_FIRST_FRAME EQU $-1
	OR	A
	JP	Z,GR_NOFF
	XOR	A
	LD	(IS_FIRST_FRAME),A
	LD	DE,#1111 ;rom adr
GR_NOFF	EXX
	;---
	LD	H,high GR_PROCEDURES
	LD	A,(DE)	;7
	LD	L,A	;4
	INC	DE	;6
	LD	A,(DE)	;7
	INC	DE	;6
	JP	(HL)	;8
;-----------------------------
	ALIGN	256
GR_PROCEDURES
;--------
GR_00_00
	EXX
	LD	BC,#0000
	JR	GR_OUT
GR_00_0F
	EXX
	LD	BC,#000F
	JR	GR_OUT
GR_00_F0
	EXX
	LD	BC,#00F0
	JR	GR_OUT
GR_00_FF
	EXX
	LD	BC,#00FF
	JR	GR_OUT
;--------
GR_0F_00
	EXX
	LD	BC,#0F00
	JR	GR_OUT
GR_0F_0F
	EXX
	LD	BC,#0F0F
	JR	GR_OUT
GR_0F_F0
	EXX
	LD	BC,#0FF0
	JR	GR_OUT
GR_0F_FF
	EXX
	LD	BC,#0FFF
	JR	GR_OUT
;-----
GR_F0_00
	EXX
	LD	BC,#F000
	JR	GR_OUT
GR_F0_0F
	EXX
	LD	BC,#F00F
	JR	GR_OUT
GR_F0_F0
	EXX
	LD	BC,#F0F0
	JR	GR_OUT
GR_F0_FF
	EXX
	LD	BC,#F0FF
	JR	GR_OUT
;-----
GR_FF_00
	EXX
	LD	BC,#FF00
	JR	GR_OUT
GR_FF_0F
	EXX
	LD	BC,#FF0F
	JR	GR_OUT
GR_FF_F0
	EXX
	LD	BC,#FFF0
	JR	GR_OUT
GR_FF_FF
	EXX
	LD	BC,#FFFF
GR_OUT	;-- set attr
	LD (DE),A:INC E
	;-- set pix
	DUP	4
	LD (HL),B:INC H
	EDUP
	DUP	3
	LD (HL),C:INC H
	EDUP
	LD (HL),C
	;--
	LD A,H:SUB 7:LD H,A:INC L
	;---
	EXX
	LD	A,(DE)	;7
	LD	L,A	;4
	INC	DE	;6
	LD	A,(DE)	;7
	INC	DE	;6
	JP	(HL)	;8
;-------------
GR_LN	
GR_DX	EXX
	ADD	A,L
	LD	L,A
	LD	E,A
	EXX
	LD	A,(DE)	;7
	LD	L,A	;4
	INC	DE	;6
	LD	A,(DE)	;7
	INC	DE	;6
	JP	(HL)	;8
;-------------
GR_MASK
	EXX
	LD	C,A
	DUP	4
	LD A,(HL):AND C:LD (HL),A:INC H
	EDUP
	EXX
	LD A,(DE):INC DE
	EXX
	LD	C,A
	DUP	3
	LD A,(HL):AND C:LD (HL),A:INC H
	EDUP
	LD A,(HL):AND C:LD (HL),A
	;--
	LD A,H:SUB 7:LD H,A:INC L
	;--
	;LD	A,(DE)
	;AND	#47
	;LD	(DE),A
	INC	E
	;---
	EXX
	LD	A,(DE)	;7
	LD	L,A	;4
	INC	DE	;6
	LD	A,(DE)	;7
	INC	DE	;6
	JP	(HL)	;8
;-------------
GR_RET	RET
;-------------
	DISPLAY "PROC SIZE ", /A, $ - GR_PROCEDURES
	include "bin/greetz_data.asm"
//======================================================== FX_INCLUDE_DATA
	ALIGN	256
ROMBS_SPR
	INCLUDE "bin/rombs_spr.asm"
	DISPLAY "ROMBS_SPR SIZE ", /A, $-ROMBS_SPR
//======================================================== FX_TABLES
	ALIGN	256
;-------------------------------------
ROMB_TBL
	DW	ROMB_0
	DW	ROMB_1
	DW	ROMB_2
	DW	ROMB_3
	DW	ROMB_4
	DW	ROMB_5
	DW	ROMB_6
	DW	ROMB_7
	DW	ROMB_8
	DW	ROMB_9
	DW	ROMB_10
	DW	ROMB_11
	DW	ROMB_12
	DW	ROMB_13
	DW	ROMB_14
	DW	ROMB_15
;---------------------
	ALIGN	256
SPRTBL	
	DW	ROMB0+40
	DW	ROMB1+40
	DW	ROMB2+40
	DW	ROMB3+40
	DW	ROMB4+40
	DW	ROMB5+40
	DW	ROMB6+40
	DW	ROMB7+40
	DW	ROMB8+40
	DW	ROMB9+40
	DW	ROMB10+40
	DW	ROMB11+40
	DW	ROMB12+40
	DW	ROMB13+40
	DW	ROMB14+40
	DW	ROMB15+40
	DUP	16*3
	DW	ROMB15+40
	EDUP
	
;---------------------
	ALIGN	256
	DW	ROMB0
	DW	ROMB1
	DW	ROMB2
	DW	ROMB3
	DW	ROMB4
	DW	ROMB5
	DW	ROMB6
	DW	ROMB7
	DW	ROMB8
	DW	ROMB9
	DW	ROMB10
	DW	ROMB11
	DW	ROMB12
	DW	ROMB13
	DW	ROMB14
	DW	ROMB15
	DUP	16*3
	DW	ROMB15
	EDUP
;---------------------
	ALIGN	256
TBLDEC	DB	15

BUFF	EQU	TBLDEC+256
