;LIBRARY QUIG.G9K.INTERRUPT.ON
;******************************
.Quig_g9k_Interrupt_On
		inclib	QUIG.G9K.SCROLL.A
		inclib	QUIG.G9K.SCROLL.B
;		ld		hl,Quig_g9k_Interrupt
;		ld		(#39),hl
		
;		ld		a,G9K_INT_ENABLE		;Set Int Enable
;		out		(g9k_REG_SELECT),a		;Set Register
;		ld		a,1						;3 - IEH/IEV set
;		out     (g9k_REG_DATA),a
;		
;		ld		a,G9K_INT_V_LINE_LO		;Set Int Enable
;		out		(g9k_REG_SELECT),a		;Set Register		
;		ld		a,80					;Vertical Line Interrupt
;		out     (g9k_REG_DATA),a		
;		
;		ld		a,G9K_INT_V_LINE_HI		;Set Int Enable
;		out		(g9k_REG_SELECT),a		;Set Register	
;		ld		a,0						;Null IEHM
;;		out		(g9k_Reg_Data),a

;	ld		a,1						;Put Bit0/1 HI/VI Set
;		out		(G9K_INT_FLAG),a		;Sent to Interrupt Port

;LIBRARY QUIG.G9K_CONTROL_LOOP
;*****************************
.Quig_G9K_Control_Loop
		ld		bc,CG9K_Status
.Quig_G9K_Control_Loop_x
		in		a,(c)
		and		g9k_STATUS_VR
		jr		nz,Quig_G9K_Control_Loop_x
.Quig_G9K_Control_Loop_z
		in		a,(c)
		and		g9k_STATUS_VR
		jr		z,Quig_G9K_Control_Loop_z
		xor		a
		ld		(Quig_g9k_Screen_top),a
		
;		;Do 	Scrolls
;		ld		de,(Quig_g9k_Fore_Camera_x)
;		ld		hl,(Quig_g9k_Fore_Camera_y)
;		call	Quig_G9K_SCROLL_A
;		ld		de,(Quig_g9k_Back_Camera_x)
;		ld		hl,(Quig_g9k_Back_Camera_y)
;		call	Quig_G9K_SCROLL_B		
		
		;Main Program
		call	qfunc_main	
		jp		Quig_Control_Loop_Check
.Quig_g9k_Screen_top:	db	1

;;**** Jump here every interrupt
;.Quig_g9k_Interrupt
;		di
;.ajfjrrrr
;		in		a,(g9k_Status)
;		and		g9k_STATUS_VR
;		jr		nz,ajfjrrrr
;.ajfjfaggg
;		in		a,(g9k_Status)
;		and		g9k_STATUS_VR
;		jr		z,ajfjfaggg
;		xor		a
;		ld		(Quig_g9k_Screen_top),a
;		ld		hl,(var_wrd_g)
;		ex		de,hl
;		ld		hl,0
;		call	Quig_G9K_SCROLL_A
;		ei
;		reti



;LIBRARY QUIG.G9K.INK.SET
;************************
;IN		InkNo=ST2
;		R=ST1
;		G=DE
;		B=HL
.Quig_g9k_Ink_Set:
		pop		iy
		ld		a,l
		call	Quig_g9k_Max32
		ld		a,b
		ld		(Quig_g9k_Ink_Set_x9+1),a
		ld		a,e
		call	Quig_g9k_Max32
		ld		a,b		
		ld		(Quig_g9k_Ink_Set_x8+1),a		
		pop		de
		ld		a,e
		call	Quig_g9k_Max32
		ld		a,b
		ld		(Quig_g9k_Ink_Set_x7+1),a	
		pop		hl
		ld		e,l
		ld		d,h
		add		hl,hl
		add		hl,de
		ld		de,Quig_g9k_Ink_Data
		add		hl,de
.Quig_g9k_Ink_Set_x7:			;Red			
		ld		a,0
		ld		(hl),a
		inc		hl
.Quig_g9k_Ink_Set_x8:			;Green				
		ld		a,0
		ld		(hl),a
		inc		hl		
.Quig_g9k_Ink_Set_x9:			;Blue				
		ld		a,0
		ld		(hl),a
		inc		hl
		jp		(iy)
.Quig_g9k_Max32:
		ld		b,a
		and		%11100000
		ret		z
		and		%10000000
		jr		z,Quig_g9k_Max32_1
		ld		b,0
		ret
.Quig_g9k_Max32_1		
		ld		b,31
		ret
	
.Quig_g9k_Ink_Data
	ds	256*3
;LIBRARY QUIG.G9K.INK.GET
;************************
;IN 	HL=Ink Number
.Quig_g9k_Ink_Get_R:
		inclib	QUIG.G9K.INK.SET
		ld		bc,Quig_g9k_Ink_Data
		jr		Quig_g9k_Ink_Get
.Quig_g9k_Ink_Get_G
		ld		bc,Quig_g9k_Ink_Data+1
		jr		Quig_g9k_Ink_Get
.Quig_g9k_Ink_Get_B
		ld		bc,Quig_g9k_Ink_Data+2
.Quig_g9k_Ink_Get:
		ld		e,l
		add		hl,hl		;*2
		add		hl,de		;*3
		add		hl,bc
		ld		l,(hl)
		ld		h,0
		ret
;LIBRARY QUIG.G9K.INK.PALETTE.SET
;**********************************
;IN  	Palette  = DE 0-3
;IN		InkSet=HL			(0-255)

.Quig_G9K_Ink_Palette_Set:
		ld		a,e
		and		%11
		rla		;2
		rla		;4
		rla		;8
		rla		;16
		rla		;32
		rla		;64
		ld		e,a	
		inclib	QUIG.G9K.INK.SET
		ld		c,l
		ld		b,h
		add		hl,hl		;*32
		add		hl,bc		;*48
		ld		bc,Quig_g9k_Ink_Data
		add		hl,bc
		ld		a,g9k_PALETTE_PTR
		
		ld		bc,CG9K_REG_SELECT
		out 	(c),a
		ld		a,e
		ld		bc,CG9K_REG_DATA
		out		(c),a		
		ld		bc,CG9K_palette
		inclib 	QUIG.G9K.48OUTI
		jp		Quig_g9k_48outi
;LIBRARY QUIG.G9K.48OUTI
.Quig_g9k_48outi:
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi
.Quig_g9k_20outi:			
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi		
		ret
;LIBRARY QUIG.G9K.32OUTI
.Quig_g9k_32outi:
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		ret		
		
;LIBRARY QUIG.G9K.PALETTE.PALETTETOINK
;**********************************
;IN		PaletteSet=DE			(0-3)
;		InkSet=HL		(0-15)
.Quig_G9K_Palette_PaletteToInk:
		inclib	QUIG.G9K.INK.SET
		add		hl,hl		;*2
		add		hl,hl		;*4
		add		hl,hl		;*8
		add		hl,hl		;*16
		ld		c,l
		ld		b,h
		add		hl,hl		;*32
		add		hl,bc		;*48
		ld		bc,Quig_g9k_Ink_Data
		add		hl,bc		
		ld		a,g9k_PALETTE_PTR
		out 	(g9k_REG_SELECT),a
		ld		a,e
;		rla		;*2
;		rla		;*4
;		rla		;*8
;		rla		;*16
;		rla		;*32
;		rla		;*64
		out		(g9k_REG_DATA),a		
		ld		c,G9k_palette
		ld		b,48
		inir		
		ret
		

;LIBRARY QUIG.G9K.PRINT.FONT
;***************************
;In HL = Font Start Pattern
		INCLIB QUIG.STRING.STACK.CLEAR
.Quig_g9k_Fore_Font:
		ld		(Quig_g9k_Fore_Font_Patt),hl
		ret
.Quig_g9k_Back_Font:
		ld		(Quig_g9k_Back_Font_Patt),hl
		ret		
.Quig_g9k_Fore_Pos:
;In HL = Y
;	DE = X
		call	Quig_g9k_Fore_Pos2
		ld		bc,#c000
		add		hl,bc
		ld		(Quig_g9k_Fore_Font_PosXY),hl
		ret
.Quig_g9k_Back_Pos:
;In HL = Y
;	DE = X
		call	Quig_g9k_Fore_Pos2
		ld		bc,#e000
		add		hl,bc
		ld		(Quig_g9k_Back_Font_PosXY),hl
		ret	
.Quig_g9k_Fore_Pos2:
		ld		a,l
		and		%00111111
		ld		l,a
		add		hl,hl	;*2
		add		hl,hl	;*4
		add		hl,hl	;*8
		add		hl,hl	;*16
		add		hl,hl	;*32
		add		hl,hl	;*64
		ld		a,e
		and		%00111111
		ld		e,a
		add		hl,de
		add		hl,hl
		ret
.Quig_g9k_Fore_String:
;In HL=String Pos
		ld		a,(hl)
		cp		0
		jp		z,Quig_g9k_Fore_String_end
		inc		hl
		push	hl
		ld		l,a
		ld		h,0
		ld		de,-32
		add		hl,de
		ld		de,(Quig_g9k_Fore_Font_Patt)
		add		hl,de
		push	hl
		ld		hl,(Quig_g9k_Fore_Font_PosXY)
		ld		e,7
		;SetVramWrite
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		inc		hl
		inc		hl
		ld		(Quig_g9k_Fore_Font_PosXY),hl
		out		(c),e
		pop		hl
		ld		bc,CG9K_VRAM
		out		(c),l
		out		(c),h
		pop		hl
		jp		Quig_g9k_Fore_String
.Quig_g9k_Fore_String_end:
		ret
.Quig_g9k_Back_String:
;In HL=String Pos
		ld		a,(hl)
		cp		0
		jp		z,Quig_g9k_Back_String_end
		inc		hl
		push	hl
		ld		l,a
		ld		h,0
		ld		de,-32
		add		hl,de
		ld		de,(Quig_g9k_Back_Font_Patt)
		add		hl,de
		push	hl
		ld		hl,(Quig_g9k_Back_Font_PosXY)
		ld		e,7
		;SetVramWrite
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		inc		hl
		inc		hl
		ld		(Quig_g9k_Back_Font_PosXY),hl
		out		(c),e
		pop		hl
		ld		bc,CG9K_VRAM
		out		(c),l
		out		(c),h
		pop		hl
		jp		Quig_g9k_Back_String
.Quig_g9k_Back_String_end:
		ret		


.Quig_g9k_Fore_Font_Patt:	dw	0
.Quig_g9k_Fore_Font_PosXY:	dw	0
.Quig_g9k_Back_Font_Patt:	dw	0
.Quig_g9k_Back_Font_PosXY:	dw	0

;LIBRARY QUIG.G9K.INK.FADE
.Quig_g9k_Ink_Fade:
;IN HL = Levl
;   DE = Ink 2
;   ST = Ink 1	
		pop		iy
		ld		a,h
		and		%1111111
		ld		h,a
		ld		(Quig_g9k_Ink_Div_Level),hl
		ld		(Quig_g9k_Ink_Div_Ink2),de
		pop		hl
		ld		(Quig_g9k_Ink_Div_Ink1),hl
.Quig_g9k_Ink_Div:
;Out 	hl=ink 3
		inclib 	QUIG.MUL16
		ld		(Quig_g9k_Ink_Div_Ink1),hl
		ld		(Quig_g9k_Ink_Div_Ink2),de		
		xor		a
		sbc		hl,de
		jp		c,Quig_g9k_Ink_Div_x2
		;hl 	= Diff
		ld		de,(Quig_g9k_Ink_Div_Level)
		call	Quig_Mul16
		ld 		a,h:rl l:rla:ld l,a:ld a,h:rlca:and 1:ld h,a
		ld		de,(Quig_g9k_Ink_Div_Ink2)
		add		hl,de
		jp		(iy)
.Quig_g9k_Ink_Div_x2:		
		ld		(Quig_g9k_Ink_Div_Ink1),de
		ld		(Quig_g9k_Ink_Div_Ink2),hl		
		xor		a
		sbc		hl,de
		;hl 	= Diff
		ld		de,(Quig_g9k_Ink_Div_Level)
		call	Quig_Mul16
		ld 		a,h:rl l:rla:ld l,a:ld a,h:rlca:and 1:ld h,a
		ld		de,(Quig_g9k_Ink_Div_Ink1)
		add		hl,de
		jp		(iy)
.Quig_g9k_Ink_Div_Ink1:	dw	0	
.Quig_g9k_Ink_Div_Ink2:	dw	0
.Quig_g9k_Ink_Div_Level:dw	0		
		
;LIBRARY QUIG.G9K.INK.R.GET
;IN 	InkNo=HL
.Quig_g9k_ink_R_Get:
		inclib	QUIG.G9K.INK.SET
		ld		e,l
		ld		d,h
		add		hl,hl
		add		hl,de
		ld		de,Quig_g9k_Ink_Data		
		add		hl,de
		ld		l,(hl)
		ld		h,0
		ret
;LIBRARY QUIG.G9K.INK.G.GET
;IN 	InkNo=HL
.Quig_g9k_ink_G_Get:
		inclib	QUIG.G9K.INK.SET
		ld		e,l
		ld		d,h
		add		hl,hl
		add		hl,de
		ld		de,Quig_g9k_Ink_Data+1
		add		hl,de
		ld		l,(hl)
		ld		h,0
		ret	
;LIBRARY QUIG.G9K.INK.B.GET
;IN 	InkNo=HL
.Quig_g9k_ink_B_Get:
		inclib	QUIG.G9K.INK.SET
		ld		e,l
		ld		d,h
		add		hl,hl
		add		hl,de
		ld		de,Quig_g9k_Ink_Data+2
		add		hl,de
		ld		l,(hl)
		ld		h,0
		ret	


		
;LIBRARY QUIG.G9K.SPRITE.SET.DISPLAY
;***********************************
;HL = Display
;DE = Sprite
.Quig_G9k_Sprite_Set_Display:
		ex		de,hl
		add		hl,hl
		add		hl,hl
		ld		bc,Quig_Sprite_Attributes+3
		add		hl,bc							;Point to strite attribute
		ld		a,(hl)
		and		%11000011
		ld		d,a
		ld		a,e
		and		%11
		rla
		rla
		rla
		rla
		or 		d
		ld		(hl),a
		ret
		
;LIBRARY QUIG.G9K.SPRITE.SET.POSITION2
;*************************************
;HL = Height
;DE = Width
;Stack1 = Y
;Stack2 = X
;Stack3 = Sprite no (0-124)	
.Quig_G9k_Sprite_Set_Position3:
		ld		a,-16
		ld		(Quig_G9k_Sprite_Set_Pos60+1),a
		jr		Quig_G9k_Sprite_Set_Position4
.Quig_G9k_Sprite_Set_Position2:
		ld		a,16
		ld		(Quig_G9k_Sprite_Set_Pos60+1),a
.Quig_G9k_Sprite_Set_Position4:
		pop		iy								;IY=Return Address
		ld		a,l
		and		%11111
		ld		(Quig_G9k_Sprite_Pos_Set_Height),a		;Store Height to draw
		ld		a,e
		and		%111111
		ld		(Quig_G9k_Sprite_Pos_Set_Width1),a		;Store Static width to draw
		ld		(Quig_G9k_Sprite_Pos_Set_Width2),a		;Store Change width to draw
		pop		hl
		ld		a,l
		ld		(Quig_G9k_Sprite_PosY),a
		pop		hl
		ld		(Quig_G9k_Sprite_PosX1),hl
		ld		(Quig_G9k_Sprite_PosX2),hl				;Store Change Pos X to draw		
		
		;Sprite Get
		pop		hl										;Get Start sprite
		ld		a,l
		and		%1111111
		ld		l,a
		ld		h,0
		add		hl,hl
		add		hl,hl
		ld		bc,Quig_Sprite_Attributes		
		add		hl,bc									;Get to Start of SpriteY address
		ld		(Quig_G9K_SpriteY_Address),hl
		
.Quig_G9k_Sprite_Set_Pos33:		
		ld		hl,(Quig_G9K_SpriteY_Address)			;Sprite Address
		ld		a,(Quig_G9k_Sprite_PosY)
		ld		(hl),a									;Y
		inc		hl										;Skip Pat no		
		inc		hl
		ld		de,(Quig_G9k_Sprite_PosX2)
		ld		(hl),e									;X
		inc		hl
		ld		a,d
		and		%11
		ld		d,a
		ld		a,(hl)
		and		%11111100
		or		d
		ld		(hl),a
		inc		hl										;Set to next sprite
		ld		(Quig_G9K_SpriteY_Address),hl			;Sprite Address
		
		

		ld		a,(Quig_G9k_Sprite_Pos_Set_Width2)		;Get Width
		dec		a
		;If Width = 0 then Do the next line code
		jr		nz,Quig_G9k_Sprite_Set_Pos35
		ld		a,(Quig_G9k_Sprite_Pos_Set_Width1)		;Get Original Width
		ld		(Quig_G9k_Sprite_Pos_Set_Width2),a		;Store it
		;If Height = 0 then 
		ld		a,(Quig_G9k_Sprite_Pos_Set_Height)
		dec		a
		jr		nz,Quig_G9k_Sprite_Set_Pos34
		jp		(iy)

.Quig_G9k_Sprite_Set_Pos34:	
		ld		(Quig_G9k_Sprite_Pos_Set_Height),a		;Store new Height
		ld		hl,(Quig_G9k_Sprite_PosX1)				;Get Original X
		ld		(Quig_G9k_Sprite_PosX2),hl				;Store
		ld		a,(Quig_G9k_Sprite_PosY)
.Quig_G9k_Sprite_Set_Pos60:	
		add		16
		ld		(Quig_G9k_Sprite_PosY),a
		jp		Quig_G9k_Sprite_Set_Pos33
		
.Quig_G9k_Sprite_Set_Pos35:
		ld		(Quig_G9k_Sprite_Pos_Set_Width2),a
		ld		hl,(Quig_G9k_Sprite_PosX2)
		ld		de,16
		add		hl,de
		ld		(Quig_G9k_Sprite_PosX2),hl
		jp		Quig_G9k_Sprite_Set_Pos33

		
		
		
		
		
		
.Quig_G9k_Sprite_Pos_Set_Height:	db 			0
.Quig_G9k_Sprite_Pos_Set_Width1:	db 			0
.Quig_G9k_Sprite_Pos_Set_Width2:	db 			0
.Quig_G9k_Sprite_PosY:				db			0
.Quig_G9k_Sprite_PosX1:				dw			0
.Quig_G9k_Sprite_PosX2:				dw			0
.Quig_G9K_SpriteY_Address:			dw			0

		
;LIBRARY QUIG.G9K.SPRITE.SET.POSITION
;*********************************		
;HL = Y
;DE = X
;Stack = Sprite number (0-124)
.Quig_G9k_Sprite_Set_Position:
		pop		iy								;IY=Return Address
		pop		bc								;BC=Sprite Number
		push	hl								;Store Y
		ld		a,c								;Copy Sprite number too A
		and		%1111111						;Filter 0-127
		ld		l,a								;HL=A
		ld		h,0				
		add		hl,hl							;*2
		add		hl,hl							;*4
		ld		bc,Quig_Sprite_Attributes		
		add		hl,bc							;Sprite Attribute Y
		pop		bc
		ld		(hl),c							;Y
		inc		hl								;Skip Pat no		
		inc		hl
		ld		(hl),e							;X
		inc		hl
		ld		a,d
		and		%11
		ld		d,a
		ld		a,(hl)
		and		%11111100
		or		d
		ld		(hl),a
		jp		(iy)

;LIBRARY QUIG.G9K.SPRITE.SET.PATTERN
;*********************************		
;HL = Pattern Number (0-255)
;DE = Sprite number (0-127)
.Quig_G9k_Sprite_Set_Pattern:
		ex		de,hl
		ld		a,l
		and		%1111111
		ld		l,a
		ld		h,0
		add		hl,hl							;*4
		add		hl,hl							;*4
		ld		bc,Quig_Sprite_Attributes+1
		add		hl,bc							;Sprite Attribute Y
		ld		(hl),e
		ret
;LIBRARY QUIG.G9K.SPRITE.SET.PALETTE
;*********************************		
;HL = Palette (0-3)
;DE = Sprite number (0-127)
.Quig_G9k_Sprite_Set_Palette:
		ex		de,hl
		ld		a,l
		and		%1111111
		ld		l,a
		ld		h,0
		add		hl,hl							;*4
		add		hl,hl							;*4
		ld		bc,Quig_Sprite_Attributes+3
		add		hl,bc							;Sprite Attribute Y
		
		ld		a,(hl)
		and		%111111
		ld		d,a
		ld		a,e
		rla
		rla
		rla
		rla
		rla
		rla
		and		%11000000
		or		d
		ld		(hl),a
		ret		
		
;LIBRARY QUIG.G9K.SPRITES.ON
;***************************
.Quig_G9k_Sprites_On:
		;g9kReadReg
		ld		a,G9K_CTRL+G9K_DIS_INC_READ
		ld		bc,CG9K_REG_SELECT
		out 	(c),a
		ld		bc,CG9K_REG_DATA
		in		a,(c)
		and		255-g9k_CTRL_DIS_SPD
		out		(c),a
		ret
;LIBRARY QUIG.G9K.SPRITES.OFF		
;****************************
.Quig_G9k_Sprites_Off:
		;g9kReadReg
		ld		a,G9K_CTRL+G9K_DIS_INC_READ
		ld		bc,CG9K_REG_SELECT
		out 	(c),a
		ld		bc,CG9K_REG_DATA
		in		a,(c)
		or		g9k_CTRL_DIS_SPD
		out		(c),a
		ret

;LIBRARY QUIG.G9K.SPRITE.REFRESH
;*******************************
.Quig_g9k_Sprite_Refresh:
		ld		hl,#FE00
		ld		e,3
.Quig_g9k_Sprite_Refresh_999
		ld		bc,CG9K_STATUS
		in		a,(c)
		rra
		jr		c,Quig_g9k_Sprite_Refresh_999
		;SetVramWrite
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		out		(c),e
	
		ld		hl,Quig_Sprite_Attributes
		
		ld 		bc,CG9K_VRAM
		call	Quig_g9k_48outi
		call	Quig_g9k_48outi
		call	Quig_g9k_48outi
		call	Quig_g9k_48outi
		call	Quig_g9k_48outi
		call	Quig_g9k_48outi		
		call	Quig_g9k_48outi
		call	Quig_g9k_48outi				
		call	Quig_g9k_48outi
		call	Quig_g9k_48outi		
		call	Quig_g9k_20outi			;Last 20
		
;		ld		bc,500
;		ld		a,b
;		ld		b,c
;		ld		c,g9k_VRAM
;		inc		b
;		dec		b
;		jr		z,Quig_g9k_Sprite_Refresh_Loop	
;		inc		a
;.Quig_g9k_Sprite_Refresh_Loop:
;		otir
;		dec		a
;		jp		nz,Quig_g9k_Sprite_Refresh_Loop	
		ret

;LIBRARY QUIG.G9K.MAPA.GET
;**************************
;IN HL = Map Position		
;OUT HL = Met Address
.Quig_g9k_MapA_Get:
		add		hl,hl
		;Offset = 0 so no Add
		ld		a,g9k_READ_ADDR
		ld		bc,CG9K_REG_SELECT
		di
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		ld		a,7
		out		(c),a
		ld		bc,CG9K_VRAM
		in		a,(c)
		ld		l,a
		in		a,(c)
		ld		h,a
		ei
		ret
;LIBRARY QUIG.G9K.MAPB.GET
;**************************
;IN HL = Map Position		
;OUT HL = Met Address
.Quig_g9k_MapB_Get:
		add		hl,hl
		ld		de,#3000
		add		hl,de
		;Offset = 0 so no Add
		ld		a,g9k_READ_ADDR
		ld		bc,CG9K_REG_SELECT
		di
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		ld		a,7
		out		(c),a
		ld		bc,CG9K_VRAM
		in		a,(c)
		ld		l,a
		in		a,(c)
		ld		h,a
		ei
		ret		


;LIBRARY QUIG.G9K.MAPA.META
;*************************
;IN ST = Y
;IN DE = X
;IN HL = Addr
;Plots a 32x32pixel (16 patterns) onto the 512x512 Pattern Map at 32x32 blocks or x:0..15 y:0..15 
.Quig_g9k_MapB_Meta:
		ld		a,112
		ld		(Quig_g9k_MapA_Meta2+1),a
		jr		Quig_g9k_MapA_Meta1
.Quig_g9k_MapA_Meta:
		ld		a,96
		ld		(Quig_g9k_MapA_Meta2+1),a
.Quig_g9k_MapA_Meta1:		
		pop		iy
		ld		a,g9k_READ_ADDR
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		ld		a,6
		out		(c),a
		ld		hl,Quig_g9k_MetaTile_Data
		ld		bc,CG9K_VRAM
		ini		:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b
		ini		:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b
		ini		:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b
		ini		:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b:ini:inc b
		;Finished copying too MetaTile_Data
		ex		de,hl
		pop		de
		
		ld		a,l
		and		%1111
.Quig_g9k_MapA_Meta2:		
		add		96      		;112 Draw to Map B
		ld		h,a
		ld		a,e
		rla		
		rla
		and		%111100
		ld		l,a
		add		hl,hl			;hl=hl*2 (or 32)
		
		ld		de,Quig_g9k_MetaTile_Data
		call	Quig_g9k_MapA_Meta_Loop
		call	Quig_g9k_MapA_Meta_Loop
		call	Quig_g9k_MapA_Meta_Loop
		call	Quig_g9k_MapA_Meta_Loop
		jp		(iy)
	
.Quig_g9k_MapA_Meta_Loop
		;SetVramWrite
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		ld		a,7
		out		(c),a
		ld		bc,CG9k_VRAM
		ex		de,hl
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi	
		ex		de,hl
		ld		bc,128
		add		hl,bc
		ret
.Quig_g9k_Meta2MapA_Reg:	dw	0			
.Quig_g9k_MetaTile_Data:
		dw		100,100,100,100,10,15,16,13,10,29,20,21,34,22,22,22,0,0,0,0,0,0,0,0		

;LIBRARY QUIG.G9K.META.INT.SET
;*****************************
;DE=Addr
;HL=Data		
.Quig_G9k_Meta_Int_Set:		
		ex		de,hl
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		ld		a,6
		out		(c),a
		ld		bc,CG9k_VRAM		
		ex		de,hl
		out		(c),l
		out		(c),h
		ret
		
;LIBRARY QUIG.G9K.SCROLL.A
;**************************
.Quig_G9K_SCROLL_A	
		;Y
		ld		hl,(Quig_G9K_ScrollA_YPos)
		srl 	h:rr l:srl h:rr l				;Divide by 4 - 32k>8k
		ld		a,g9k_SCROLL_LOW_Y
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		a,l
		ld		bc,CG9K_REG_DATA
		out		(c),a		
		ld		a,2
		rrca
		rrca
		or		h
		out		(c),a
		;x
		;ex		de,hl
		ld		hl,(Quig_G9K_ScrollA_XPos)
		srl 	h:rr l:srl h:rr l				;Divide by 4 - 32k>8k
		ld		a,g9k_SCROLL_LOW_X
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		a,l
		and		7
		ld		bc,CG9K_REG_DATA
		out		(c),a
		ld		a,l
		srl		h
		rra
		srl		h
		rra		
		srl		h
		rra
		out		(c),a
		ret
;DE=X
;HL=Y		
.Quig_g9k_Scroll_A_Set:
		ld		(Quig_G9K_ScrollA_XPos),de
		ld		(Quig_G9K_ScrollA_YPos),hl
		ret
.Quig_g9k_Scroll_AX_Set:
		ld		(Quig_G9K_ScrollA_XPos),hl
		ret
.Quig_g9k_Scroll_AY_Set:
		ld		(Quig_G9K_ScrollA_YPos),hl
		ret			
		
;LIBRARY QUIG.G9K.SCROLL.B
;**************************
;DE=X
;HL=Y
.Quig_G9k_Scroll_B	
		;Y
		ld		hl,(Quig_G9K_ScrollB_YPos)
		srl 	h:rr l:srl h:rr l				;Divide by 4 - 32k>8k
		ld		a,g9k_SCROLL_LOW_Y_B
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		a,l
		ld		bc,CG9K_REG_DATA
		out		(c),a		
		ld 		a,h
		and		%1
		out		(c),a

		;x
		;ex		de,hl
		ld		hl,(Quig_G9K_ScrollB_XPos)
		srl 	h:rr l:srl h:rr l				;Divide by 4 - 32k>8k
		
		ld		a,g9k_SCROLL_LOW_X_B
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		a,l
		and		7
		ld		bc,CG9K_REG_DATA
		out		(c),a
		ld		a,l
		srl		h
		rra
		srl		h
		rra		
		srl		h
		rra
		out		(c),a
		ret	
;DE=X
;HL=Y
.Quig_g9k_Scroll_B_Set:
		ld		(Quig_G9K_ScrollB_XPos),de
		ld		(Quig_G9K_ScrollB_YPos),hl
		ret	
.Quig_g9k_Scroll_BX_Set:
		ld		(Quig_G9K_ScrollB_XPos),hl
		ret
.Quig_g9k_Scroll_BY_Set:
		ld		(Quig_G9K_ScrollB_YPos),hl
		ret			

		
;.Quig_g9k_x0
;		ld		hl,0
;		ret
;.Quig_g9k_x1
;		ret
;.Quig_g9k_x2
;		add		hl,hl		;*2
;		ret
;.Quig_g9k_x3
;		ld		e,l
;		ld		d,h
;		add		hl,hl		;*2
;		add		hl,de		;*3
;		ret	
;.Quig_g9k_x4
;		add		hl,hl		;*2
;		add		hl,hl		;*4
;		ret	
;.Quig_g9k_x5
;		ld		e,l
;		ld		d,h
;		add		hl,hl		;*2
;		add		hl,hl		;*4
;		add		hl,de		;*5
;		ret	
;.Quig_g9k_x6
;		add		hl,hl		;*2
;		ld		e,l
;		ld		d,h
;		add		hl,hl		;*4
;		add		hl,de		;*6
;		ret
;.Quig_g9k_x7
;		ld		c,l
;		ld		b,h
;		add		hl,hl		;*2
;		ld		e,l
;		ld		d,h
;		add		hl,hl		;*4
;		add		hl,de		;*6
;		add		hl,bc		;*7
;		ret	
;.Quig_g9k_x8
;		add		hl,hl		;*2
;		add		hl,hl		;*4
;		add		hl,hl		;*8
;		ret	
;.Quig_g9k_x9
;		ld		e,l
;		ld		d,h
;		add		hl,hl		;*2
;		add		hl,hl		;*4
;		add		hl,hl		;*8
;		add		hl,de		;*9
;		ret
;.Quig_g9k_x10
;		ld		e,l
;		ld		d,h
;		add		hl,hl		;*2
;		add		hl,hl		;*4
;		add		hl,de		;*5
;		add		hl,hl		;*10
;		ret
;.Quig_g9k_x11
;		ld		e,l
;		ld		d,h
;		add		hl,hl		;*2
;		add		hl,hl		;*4
;		add		hl,de		;*5
;		add		hl,hl		;*10
;		add		hl,de		;*11
;		ret			
		
;LIBRARY QUIG.G9K.BACKCOLOUR.SET
;HL=Palette 0-63
.Quig_g9k_BackColour_Set:
		ld		a,CG9K_BACK_DROP_COLOR
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		ret		

;LIBRARY QUIG.G9K.PATTERN.COPY
;

; HL = Pointer to data  (format: SourceX,SourceY,DestX,DestY,Width,height) struct G9K_COPY_XY_XY
.Quig_g9k_Pattern_Copy:

		;Cmndwait
.Quig_g9k_Pattern_Copy_x:		
		in		a,(CG9K_STATUS)
		rra
		jr		C,Quig_g9k_Pattern_Copy_x

		ld		hl,Quig_g9k_Pattern_Copy_Data		
		
		ld		a,g9k_WRITE_MASK
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA
		ld		a,255
		out		(c),a		
		
		ld		a,g9k_sc_X
		ld		bc,CG9K_REG_SELECT
		out		(c),a
		ld		bc,CG9K_REG_DATA

		;Our 12 times
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi:inc b:outi
		inc 	b:outi:inc b:outi:inc b:outi:inc b:outi		
		ld		bc,CG9K_REG_SELECT
		ld		a,G9K_OPCODE
		out		(c),a
		ld		bc,CG9K_REG_DATA
		ld		a,G9K_OPCODE_LMMM
		out		(c),a
		
		ret
.Quig_g9k_Pattern_Copy_Data:
		dw		72,176
		dw		0,0
		dw		16,64
	
;LIBRARY QUIG.G9K.FORE.PALETTE.SET
;HL = Pallete 0 - 3
.Quig_g9k_Fore_Palette_Set
		ld		a,l
		and		%11
		ld		l,a

		ld		a,(Quig_g9k_ForeBack_Palette)
		and		%1100
		or		l
		ld		(Quig_g9k_ForeBack_Palette),a
		jp		Quig_g9k_ForeBack_Palette_Set
.Quig_g9k_Back_Palette_Set
		ld		a,l
		rla
		rla	
		and		%1100
		ld		l,a
		ld		a,(Quig_g9k_ForeBack_Palette)
		and		%11
		or		l
		ld		(Quig_g9k_ForeBack_Palette),a
.Quig_g9k_ForeBack_Palette_Set
		;Set Palettes
		ld		a,g9k_PALETTE_CTRL
		ld		bc,CG9K_REG_SELECT
		out 	(c),a
		ld		a,(Quig_g9k_ForeBack_Palette)
		ld		bc,CG9K_REG_DATA
		out		(c),a
		ret
.Quig_g9k_ForeBack_Palette:	db	%0100
		
		
;LIBRARY QUIG.G9K.PALETTE.SET
;ST2 =Palette
;ST1 = R
;DE = G
;HL = B
.Quig_g9k_Palette_set
		pop		iy
		ld		a,l
		ld		(Quig_g9k_palette_set_data+2),a				;B
		ld		a,e
		ld		(Quig_g9k_palette_set_data+1),a				;G	
		pop		hl
		ld		a,l
		ld		(Quig_g9k_palette_set_data+0),a				;R	
		pop		hl
		;G9KWriteReg
		ld		a,g9k_PALETTE_PTR
		ld 		bc,CG9K_REG_SELECT
		out 	(c),a
		
		ld		a,l						;Offset
		add		a
		add		a
		ld 		bc,CG9K_REG_DATA
		out		(c),a		
		;Push the palettes
		ld		hl,Quig_g9k_palette_set_data
		ld		bc,CG9K_palette
		inc 	b:outi:inc b:outi:inc b:outi		
		jp		(iy)
.Quig_g9k_palette_set_data
		db		0,0,0,0	
;
;LIBRARY QUIG.G9K.VWAIT
;
.Quig_g9k_VWait
.Quig_g9k_Vwait_1
		ld		bc,CG9K_Status
		in		a,(c)
		and		g9k_STATUS_VR
		jr		nz,Quig_g9k_Vwait_1
.Quig_g9k_Vwait_2
		ld		bc,CG9K_Status
		in		a,(c)
		and		g9k_STATUS_VR
		jr		z,Quig_g9k_Vwait_2		
		ret		

;LIBRARY QUIG.G9K.METALOAD
;**************************
;IN HL = File address
;OUT HL = 0-Fail / 1 Success		


.Quig_g9k_MetaLoad:
		ld		a,(appBnkNum)					;Filename Bank
		db		#DD,#67
		call 	SySystem_CallFunction
        db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILOPN					;Open File		
		jp		c,Quig_G9K_MetaLoad_Fail
			
		ld		(Quig_MetaLoad_Handle),a		;Store our File Handle Number	
		;*** File is open and ready to read
		ld		a,(appBnkNum)
		ld		e,a
		ld		hl,(Quig_String_Buffer_Pos)
		ld		bc,5							;Header,5 Bytes Pass/Count & Size
		ld		a,(Quig_MetaLoad_Handle)		
		call 	SySystem_CallFunction
		db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILINP	
	
		ld		hl,(Quig_String_Buffer_Pos)
		ld		a,(hl)		
		cp		180								;Read header byte
		jp		nz,Quig_G9K_MetaLoad_FailClose	;If not 180 then fail
		inc		hl
		ld		e,(hl)							;Read The MetaTile count
		inc		hl
		ld		d,(hl)
		inc		hl
		ld		(Quig_G9k_Meta_Count),de		;Store
		ld		e,(hl)							;Read The MetaTile Size
		inc		hl
		ld		d,(hl)
		inc		hl							
		ld		(Quig_G9k_Meta_Size),de					
		;File now points at start of MetaData - Copy it to 64k VRAM at 6 00000 
		ld		(Quig_LoadSize),de
		ld		hl,0							;HL =6 00000
		ld		(Quig_MetaLoad_VAddr),hl		;Where to copy too
		ld		a,6								;VRAM HI
		ld		(Quig_g9k_MetaLoad_Copy256+1),a
		jp		Quig_g9k_MetaLoad_Loop1
		
.Quig_g9k_MapALoad:
		ld		a,(appBnkNum)					;Filename Bank
		db		#DD,#67
		call 	SySystem_CallFunction
        db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILOPN					;Open File		
		jp		c,Quig_G9K_MetaLoad_Fail
			
		ld		(Quig_MetaLoad_Handle),a		;Store our File Handle Number	
		;*** File is open and ready to read
		ld		a,(appBnkNum)
		ld		e,a
		ld		hl,(Quig_String_Buffer_Pos)
		ld		bc,13							;Header,5 Bytes Pass/Count & Size
		ld		a,(Quig_MetaLoad_Handle)		
		call 	SySystem_CallFunction
		db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILINP	
	
		ld		hl,(Quig_String_Buffer_Pos)
		ld		a,(hl)		
		cp		181								;Read header byte
		jp		nz,Quig_G9K_MetaLoad_FailClose	;If not 180 then fail
		inc		hl
		ld		de,Quig_G9k_MapA_Width
		ld		bc,10
		ldir	
		ld		de,(Quig_G9k_MapA_Size)
		;File now points at start of MetaData - Copy it to 64k VRAM at 6 00000 
		ld		(Quig_LoadSize),de
		ld		hl,0							;HL =7 0000
		ld		(Quig_MetaLoad_VAddr),hl		;Where to copy too
		ld		a,7								;VRAM HI
		ld		(Quig_g9k_MetaLoad_Copy256+1),a
		jp		Quig_g9k_MetaLoad_Loop1
		
.Quig_g9k_MapBLoad:
		ld		a,(appBnkNum)					;Filename Bank
		db		#DD,#67
		call 	SySystem_CallFunction
        db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILOPN					;Open File		
		jp		c,Quig_G9K_MetaLoad_Fail
			
		ld		(Quig_MetaLoad_Handle),a		;Store our File Handle Number	
		;*** File is open and ready to read
		ld		a,(appBnkNum)
		ld		e,a
		ld		hl,(Quig_String_Buffer_Pos)
		ld		bc,13							;Header,5 Bytes Pass/Count & Size
		ld		a,(Quig_MetaLoad_Handle)		
		call 	SySystem_CallFunction
		db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILINP	
	
		ld		hl,(Quig_String_Buffer_Pos)
		ld		a,(hl)		
		cp		181								;Read header byte
		jp		nz,Quig_G9K_MetaLoad_FailClose	;If not 180 then fail
		inc		hl
		ld		de,Quig_G9k_MapB_Width
		ld		bc,10
		ldir	
		ld		de,(Quig_G9k_MapB_Size)
		;File now points at start of MetaData - Copy it to 64k VRAM at 6 00000 
		ld		(Quig_LoadSize),de
		ld		hl,#3000						;HL =7 3000
		ld		(Quig_MetaLoad_VAddr),hl		;Where to copy too
		ld		a,7								;VRAM HI
		ld		(Quig_g9k_MetaLoad_Copy256+1),a
		jp		Quig_g9k_MetaLoad_Loop1		
		
.Quig_g9k_MetaLoad_Loop1:		
		ld		a,(appBnkNum)
		ld		e,a
		ld		hl,(Quig_String_Buffer_Pos)
		ld		(Quig_LoadMeta_Buffer),hl		
		ld		bc,1024							;32*48
		ld		a,(Quig_MetaLoad_Handle)		
		call 	SySystem_CallFunction
		db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILINP
		ld		hl,(Quig_LoadSize)
		xor		a
		sbc		hl,bc
		jp		c,Quig_g9k_MetaLoad_Loop2
		jp		z,Quig_g9k_MetaLoad_Loop2		
		ld		(Quig_LoadSize),hl
		;****** Work Stuff into VDP	
		call	Quig_g9k_MetaLoad_Copy256
		call	Quig_g9k_MetaLoad_Copy256
		call	Quig_g9k_MetaLoad_Copy256
		call	Quig_g9k_MetaLoad_Copy256		
		jp		Quig_g9k_MetaLoad_Loop1
		
.Quig_g9k_MetaLoad_Loop2:		
		;Close & Return
		ld		a,(Quig_MetaLoad_Handle)
		call 	SySystem_CallFunction
        db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILCLO
		ld		hl,1
		ret
	
.Quig_g9k_MetaLoad_Copy256:
		ld		e,0
		ld		hl,(Quig_MetaLoad_VAddr)
		;SetVramWrite
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		di
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		out		(c),e
		ld		hl,(Quig_LoadMeta_Buffer)
		ld		bc,CG9k_VRAM
		INCLIB 	QUIG.G9K.32OUTI
		call	Quig_g9k_32outi
		call	Quig_g9k_32outi
		call	Quig_g9k_32outi	
		call	Quig_g9k_32outi
		call	Quig_g9k_32outi
		call	Quig_g9k_32outi
		call	Quig_g9k_32outi	
		call	Quig_g9k_32outi			
		ei
		ld		(Quig_LoadMeta_Buffer),hl
		;		
		ld		hl,(Quig_MetaLoad_VAddr)
		ld		de,256
		ld		a,h
		cp		0
		jp		nz,Quig_g9k_MetaLoad_Copy256_22
		ld		a,(Quig_g9k_MetaLoad_Copy256+1)
		inc		a
		ld		(Quig_g9k_MetaLoad_Copy256+1),a		
		
.Quig_g9k_MetaLoad_Copy256_22:		
		add		hl,de
		ld		(Quig_MetaLoad_VAddr),hl
		ret
.Quig_G9K_MetaLoad_FailClose:
		ld		a,(Quig_LoadTile_Handle)
		call 	SySystem_CallFunction
        db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILCLO
.Quig_G9K_MetaLoad_Fail:
		ld		hl,0
		ret
		
		
;LIBRARY QUIG.G9K.TILELOAD
;**************************
;IN HL = Palette Offset (0 - 64)  -1=Don't import Palette
;   DE = Tile Offset
;   ST1 = File Address
;OUT HL = Tiles Loaded 
		inclib QUIG.G9K.INK.SET

.Quig_LoadPal_Offset:	db	0
.Quig_LoadTile_Offset:	dw	0
.Quig_LoadTile_Handle:	db	0
.Quig_LoadTile_Count:	dw	0
.Quig_LoadTile_Buffer:	dw	0

.Quig_G9K_TileALoad:
		pop		iy
		ld		a,l
		ld		(Quig_LoadTile_Offset),de
		jr		Quig_G9K_TileLoadX
.Quig_G9K_TileBLoad:
		pop		iy
		ld		a,l
		ld		hl,8192
		add		hl,de
		ld		(Quig_LoadTile_Offset),hl		
.Quig_G9K_TileLoadX:

		ld		l,a
		ld		h,0
		ld		c,l
		ld		b,h
		add		hl,hl		;*32
		add		hl,bc		;*48
		ld		bc,Quig_g9k_Ink_Data
		add		hl,bc	
		ld		(Quig_g9k_TileStuff),hl

		pop		hl								;Get File address
		push	iy
		ld		a,(appBnkNum)					;Filename Bank
		db		#DD,#67
		call 	SySystem_CallFunction
        db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILOPN					;Open File		
		jp		c,Quig_G9K_TileLoadFail
		ld		(Quig_LoadTile_Handle),a		;Store our File Handle Number	
		
		;*** File is open and ready to read
		ld		a,(appBnkNum)
		ld		e,a
		ld		hl,(Quig_String_Buffer_Pos)
		ld		bc,60							;Header,Tile Cuunt & 16 Palettes
		ld		a,(Quig_LoadTile_Handle)		
		call 	SySystem_CallFunction
		db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILINP	
	
		ld		hl,(Quig_String_Buffer_Pos)
		ld		a,(hl)		
		cp		178
		jp		nz,Quig_G9K_TileLoadFail_Close
		inc		hl
		ld		e,(hl)
		inc		hl
		ld		d,(hl)
		ld		(Quig_LoadTile_Count),de
		inc		hl
		ld		de,(Quig_g9k_TileStuff)
		ld		bc,48
		ldir
		
		ld		hl,0
		ld		(Quig_LoadTile_Offset),hl		
		
.Quig_LoadTileLoop_N1:
		;*** File Read Tile Data
		ld		a,(appBnkNum)
		ld		e,a
		ld		hl,(Quig_String_Buffer_Pos)
		ld		(Quig_LoadTile_Buffer),hl		
		ld		bc,1024							;1024 Bytes of tile data
		ld		a,(Quig_LoadTile_Handle)		
		call 	SySystem_CallFunction
		db 		MSC_SYS_SYSFIL
		db 		FNC_FIL_FILINP

		ld		b,32
.Quig_LoadTileLoop_N2:		
		push	bc
		;****** Work Stuff into VDP
		ld		hl,(Quig_LoadTile_Offset)
		ld		a,h
		rra		
		rra	
		rra
		and		%111
		ld		e,a
		add		hl,hl							;*2
		add		hl,hl							;*4
		add		hl,hl							;*8
		add		hl,hl							;*16
		add		hl,hl							;*32		
		;SetVramWrite
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		di
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		out		(c),e
		ld		hl,(Quig_LoadTile_Buffer)
		ld		bc,CG9k_VRAM
		INCLIB 	QUIG.G9K.32OUTI
		call	Quig_g9k_32outi		
		ei
		ld		hl,(Quig_LoadTile_Offset)
		inc		hl
		ld		(Quig_LoadTile_Offset),hl
		ld		hl,(Quig_LoadTile_Buffer)
		ld		de,32
		add		hl,de
		ld		(Quig_LoadTile_Buffer),hl
		pop		bc
		djnz	Quig_LoadTileLoop_N2
		
		ld		hl,(Quig_LoadTile_Count)		;Tile Count
		ld		de,32
		xor		a
		sbc		hl,de
		ld		(Quig_LoadTile_Count),hl
		jp		c,Quig_G9K_TileLoadFail_Close
		jp		nz,Quig_LoadTileLoop_N1
		jp		Quig_G9K_TileLoadFail_Close		
		

.Quig_LoadTileLoop_1		
		;*** File Read Tile Data
		ld		a,(appBnkNum)
		ld		e,a
		ld		hl,(Quig_String_Buffer_Pos)
		ld		(Quig_LoadTile_Buffer),hl		
		ld		bc,2048							;1024 Bytes of tile data
		ld		a,(Quig_LoadTile_Handle)		
		call 	SySystem_CallFunction
		db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILINP
		;****** Work Stuff into VDP
		ld		hl,(Quig_LoadTile_Offset)
		ld		a,h
		rra		
		rra	
		rra
		and		%111
		ld		e,a
		add		hl,hl							;*2
		add		hl,hl							;*4
		add		hl,hl							;*8
		add		hl,hl							;*16
		add		hl,hl							;*32
		ld		b,16
.fajeee		
		push	bc
		push	de
		push	hl
		;SetVramWrite
		ld		a,g9k_WRITE_ADDR
		ld		bc,CG9K_REG_SELECT
		di
		out		(c),a
		ld		bc,CG9K_REG_DATA
		out		(c),l
		out		(c),h
		out		(c),e
		ld		hl,(Quig_LoadTile_Buffer)
		ld		bc,CG9k_VRAM
		INCLIB 	QUIG.G9K.32OUTI
		call	Quig_g9k_32outi
		call	Quig_g9k_32outi
		call	Quig_g9k_32outi	
		call	Quig_g9k_32outi		
		ei
		ld		(Quig_LoadTile_Buffer),hl
		pop		hl
		ld		de,128
		add		hl,de
		pop		de
		pop		bc
		djnz	fajeee
		
		;Increment the count
		ld		hl,(Quig_LoadTile_Offset)		
		ld		de,64
		add		hl,de
		ld		(Quig_LoadTile_Offset),hl

		ld		a,(Quig_LoadTile_Count)
		dec		a
		ld		(Quig_LoadTile_Count),a
		jr		nz,Quig_LoadTileLoop_1

.Quig_G9K_TileLoadFail_Close:		
		ld		a,(Quig_LoadTile_Handle)
		call 	SySystem_CallFunction
        db 		MSC_SYS_SYSFIL
        db 		FNC_FIL_FILCLO		
.Quig_G9K_TileLoadFail:
		ld		hl,0
		ret		
.Quig_g9k_TileStuff:Dw	0			
		