	
SINGLE_PLANE	EQU 	((OVERSCROLL_OFFSET+SCROLL_HEIGHT)*BPR)		;did have *2 on overscroll offset
PLANE_INC	EQU	SINGLE_PLANE
SCROLL_MEMORY	EQU	SINGLE_PLANE*12


MAP_MEMORY	EQU	BIGGEST_MAP_X*BIGGEST_MAP_Y*3 ;main map word, alien map byte

GAME_MEMORY	EQU	SCROLL_MEMORY+OVERSCROLL_OFFSET*BPR	; allow for scroll into memory

COPY_STORE	EQU	SINGLE_PLANE

NUMBER_OF_BLOCKS	EQU	1180

BLOCKS_MEMORY	EQU	(2*16*4)*NUMBER_OF_BLOCKS

LOADER_PIC_SIZE	EQU	8116		;bytes

FAST_MEM_MEMORY	EQU	MAP_MEMORY+COPY_STORE+BLOCKS_MEMORY+LOADER_PIC_SIZE


MEM_CHIP	EQU 	$02
MEM_FAST 	EQU 	$04
MEM_PUBLIC	EQU	$01	;Chooses fast first, chip second
MEM_CLEAR 	EQU 	$10000

BIT_PLANE_DMA	EQU	$0100
SPRITE_DMA	EQU	$0020
BLITTER_NASTY	EQU	$0400

******************************************
*****        BLANK OUT WORKBENCH     *****
******************************************
Blank_Out_Workbench

*Display shareware message
	

**set up pointers and variables so decompression is super quick	

	move.l	#blank_data,d0
	move.w	d0,swsprite0l
	move.w	d0,swsprite1l
	move.w	d0,swsprite2l
	move.w	d0,swsprite3l
	move.w	d0,swsprite4l
	move.w	d0,swsprite5l
	move.w	d0,swsprite6l
	move.w	d0,swsprite7l
	swap	d0
	move.w	d0,swsprite0h
	move.w	d0,swsprite1h
	move.w	d0,swsprite2h
	move.w	d0,swsprite3h
	move.w	d0,swsprite4h
	move.w	d0,swsprite5h
	move.w	d0,swsprite6h
	move.w	d0,swsprite7h

	move.l	#plane_positions,a2
	
	move.l	memory_base,d0
	move.w	d0,SHPLane1_Lo
	swap	d0
	move.w	d0,SHPlane1_hi
	swap	d0
	move.l	d0,(a2)
	add.l	#80*256,d0
	move.w	d0,SHPLane2_Lo
	swap	d0
	move.w	d0,SHPlane2_hi
	swap	d0
	move.l	d0,4(a2)
	add.l	#80*256,d0
	move.l	d0,8(a2)
	move.w	d0,SHPLane3_Lo
	swap	d0
	move.w	d0,SHPlane3_hi


	move.l  #$dff000,a6
	move.l	#shareware_screen_copper,cop1lch(a6)
	clr.w	copjmp1(a6)


	move.w  #BIT_PLANE_DMA+$8000,dmacon(a6)
	move.w	#SPRITE_DMA,dmacon(a6)




		
	moveq	#0,d3		;index into plane table
	move.w	#640,d4		;screen x size
	
	move.w  #3*4,d7		;number of planes ( *4 cos compare d3 with it - will inc by 4)
	
	move.w	#640,d6     ; pixel count ( count down )
	
	move.w	#640,d5	; image loaded size
	
		
	move.l  (a2,d3),a4	;get first plane
	
	move.l	#shareware_pic+4,a1
	
	move.w	iff_cols(a1),num_of_cols
	move.l	a1,colour_map_ptr
	add.l	#size_of_iff_header,colour_map_ptr
	
	move.w	iff_cols(a1),d0
	move.l	pic_data_size(a1),size_of_pic
	ext.l	d0
	asl	d0
	add.l	#size_of_iff_header,a1
	add.l	d0,a1
	move.l	a1,picture_data
	
	moveq	#0,d0		;clear

	move.l	size_of_pic,d2

	jsr	compressed_data		;Display pic


	move.w	#80,text_bpr

*	bsr	Display_System_Setup

	bsr	Sync
	move.l	colour_map_ptr,a0
	move.l	#game_list,a1
	move.w	#16-1,d0
copy_share_cols
	move.w	(a0)+,(a1)+
	dbra	d0,copy_share_cols	

	move.l	#black_list,a0
	move.l	#game_list,a1
	move.l	#share_cols+2,a2
	move.w	#16-1,d7
	move.l	#store_text_nums,a3
	move.w	#3,fade_speed
	jsr	Fade_List_To_List

*clear black list for later
	move.w	#16-1,d0
	jsr	Clear_Black_Colours	
	rts

FadeAfterLoading
	dc.w	0
	

******************************************
*****   DISPLAY_SYSTEM_SETUP         *****
******************************************
Display_System_Setup

	move.l	memory_base,a3
	move.w	#1,default_colour
	tst.w	chip_type
	beq.s	bog_standard
	move.l	#chip_type_string2,a4
	bra.s	display_chip_string
bog_standard
	move.l	#chip_type_string1,a4
display_chip_string
	move.w	#230,d0
	move.w	#80,d1
	jsr	Display_Small_String_Skip

	move.l	memory_base,a3
	cmp.w	#ON,xtra_fx
	bne.s	bog_standard_fx
	move.l	#xfx_string2,a4
	bra.s	display_fx_string
bog_standard_fx
	move.l	#xfx_string1,a4
display_fx_string
	move.w	#230,d0
	move.w	#80+9,d1
	jsr	Display_Small_String_Skip

	move.l	memory_base,a3
	cmp.w	#ON,xtra_music
	bne.s	bog_standard_music
	move.l	#music_string1,a4
	bra.s	display_music_string
bog_standard_music
	move.l	#music_string2,a4
display_music_string
	move.w	#230,d0
	move.w	#80+18,d1
	jsr	Display_Small_String_Skip

*find out fast and chip for interest

	move.l	EXEC,a6
	move.l	#MEM_CHIP,d1	;chip 
	jsr	-$d8(a6)	;avail mem
	move.l	d0,chip_free

	move.l	EXEC,a6
	move.l	#MEM_FAST,d1	;chip 
	jsr	-$d8(a6)	;avail mem
	move.l	d0,fast_free

	move.l	#$dff000,a6	;reset

*hehe ready for some tacky code...
	clr.w	d7
	move.l	chip_free,score
	move.l	#free_mem_string+25,a5	
	jsr	Convert_Score_To_String
	move.l	fast_free,score
	move.l	#free_mem_string+8,a5	
	jsr	Convert_Score_To_String
	
	move.l	memory_base,a3
	move.l	#free_mem_string,a4
	move.w	#230,d0
	move.w	#80+27,d1
	jsr	Display_Small_String_Skip
	rts
	
chip_free	dc.l	0
fast_free	dc.l	0
chip_type	dc.w	0	

free_mem_string
	dc.b	"FAST : 00000000  CHIP : 00000000",0
	even
chip_type_string1
	dc.b	"SYSTEM TYPE : 1000, 500, 500+ or 600",0
	even
chip_type_string2
	dc.b	"SYSTEM TYPE : 1200 OR BETTER",0
	even
	
music_string1
	dc.b	"IN GAME MUSIC : OPTIONAL ( DEFAULT ON )",0
	even
music_string2
	dc.b	"IN GAME MUSIC : NONE",0
	even
xfx_string1
	dc.b	"EXTRA SOUND FX : NO",0
	even
xfx_string2
	dc.b	"EXTRA SOUND FX : YES",0
	even

******************************************
*****           STOP_SYSTEM          *****
******************************************
Stop_System
	movem.l	a0-a6/d0-d7,-(sp)
Ensure_Blit_Fin
	btst	#14,dmaconr+$dff000
	bne.s	Ensure_Blit_Fin
	move.l	EXEC,a6
	jsr	-132(A6)		;DISABLE tasking	
	movem.l	(sp)+,a0-a6/d0-d7
	rts

******************************************
*****     ALLOCATE_GAME_MEMORY       *****
******************************************
Allocate_Game_Memory	

	move.l	EXEC,a6
	move.l	#GAME_MEMORY,d0	
	move.l	#MEM_CHIP+MEM_CLEAR,d1	;chip and clear
	jsr	-198(a6)		;try
	tst.l	d0
	bne	allocated_mem
	rts			;otherwise quit
allocated_mem
	move.l	d0,Memory_Base
	add.l	#OVERSCROLL_OFFSET*BPR,d0
	move.l	d0,Plane1
	move.l	d0,resetp1
	move.l	d0,scroll_area
	add.l	#SINGLE_PLANE*4,d0
	move.l	d0,scroll_buff_area
	move.l	d0,buff_plane1
	move.l	d0,resetp2
	add.l	#SINGLE_PLANE*4,d0
	move.l	d0,copyback_area

	move.l	EXEC,a6
	move.l	#FAST_MEM_MEMORY,d0	
	move.l	#MEM_PUBLIC+MEM_CLEAR,d1	;chip and clear
	jsr	-198(a6)		;try
	tst.l	d0
	bne	allocated_fast_mem
	rts			;otherwise quit
allocated_fast_mem
	move.l	d0,Fast_Memory_Base
	move.l	d0,buffer_map_memory
	add.l	#(BIGGEST_MAP_X*BIGGEST_MAP_Y)*MAP_BLOCK_SIZE,d0
	move.l	d0,buffer_alien_memory
	add.l	#(BIGGEST_MAP_X*BIGGEST_MAP_Y),d0
	move.l	d0,copy_store_area
	add.l	#COPY_STORE,d0
	move.l	d0,background_block_graphics
	add.l	#BLOCKS_MEMORY,d0
	move.l	d0,loader_pic_data

	rts


******************************************
*****     SETUP_SYSTEM               *****
******************************************
Setup_System


	LEA	CUSTOM,A6
	bsr	Sync
	MOVE.W	#0,BPLCON1(A6)
	move.w	#$83a0,DMACON(a6)
	move.w	#$000f,DMACON(a6)
	
	MOVE.L	#COPPERL,COP1LCH(A6)
	MOVE.W	COPJMP1(A6),D0

	rts

******************************************
*****     SETUP_INT                  *****
******************************************
Setup_Int
	move.l	$6c,oldint
	move.l	#darkint,$6c	
	rts


*********************************************
*****         RELEASE_SYSTEM            *****
*********************************************
Release_System
	movem.l	a0-a6/d0-d7,-(sp)
	
Ensure_Release_Blit_Fin
	btst	#14,dmaconr+$dff000
	bne.s	Ensure_Release_Blit_Fin
	
	MOVE.L	EXEC,A6
	JSR	-138(A6)		;ENABLE tasking
	movem.l	(sp)+,a0-a6/d0-d7
	rts
	
Fast_Memory_Base
	dc.l	0	
*********************************************
*****        Replace_System             *****
*********************************************
Replace_System	
	move.l	oldint,$6c
	move.w	#$000f,dmacon(a6)
	move.w  #$8000+BIT_PLANE_DMA,dmacon(a6)
	move.l	EXEC,a6
	move.l	#GAME_MEMORY,d0
	move.l	Memory_Base,a1
	jsr	-210(a6)
	
	move.l	EXEC,a6
	move.l	#FAST_MEM_MEMORY,d0
	move.l	Fast_Memory_Base,a1
	jsr	-210(a6)

	tst.l	in_game_music
	beq.s	no_music_mem_allocated
	move.l	EXEC,a6
	move.l	#IN_GAME_MUSIC_BUFFER,d0
	move.l	in_game_music,a1
	jsr	-210(a6)	; free only if allocated
no_music_mem_allocated	

	move.l	EXEC,a6
	move.l	Sound_Fx_Buffer_Size,d0
	move.l	sfx_mem,a1
	jsr	-210(a6)	; free only if allocated
no_xtra_fx_allocated	


	MOVE.L	#graf_NAME,A1
	MOVEQ	#0,D0
	JSR	-552(A6)		;OPEN GRAPHICS LIBRARY
	MOVE.L	D0,a4

	MOVE.W	#$8020,DMACON+$dff000	; sprites back
	
	move.l	38(a4),$dff080
	clr.w	$dff088
	move.b	#$9b,$bfed01

	rts
graf_NAME	dc.b	"graphics.library",0
	even

	

******************************************
*****     SETUP_COLOURS              *****
******************************************

setup_colours
	
	rts
	
******************************************
*****     INSERT_COLOURS             *****
******************************************
Insert_Colours	
	move.w	#$180,d0
	move.w	#16-1,d1
col_loop
	move.w	d0,(a0)+
	move.w	(a1)+,(a0)+
	add.w	#$2,d0
	dbra	d1,col_loop
	rts

******************************************
*****     INSERT_32COLOURS           *****
******************************************
Insert_32Colours	
	move.w	#$180,d0
	move.w	#32-1,d1
col_loop32
	move.w	d0,(a0)+
	move.w	(a1)+,(a0)+
	add.w	#$2,d0
	dbra	d1,col_loop32
	rts

******************************************
*****     INSERT_SPRITE_COLOURS      *****
******************************************
Insert_Sprite_Colours	
	move.w	#$1A0,d0
	move.w	#16-1,d1
sp_col_loop
	move.w	d0,(a0)+
	move.w	(a1)+,(a0)+
	add.w	#$2,d0
	dbra	d1,sp_col_loop
	rts

******************************************
*****       LOAD GAME BASICS         *****
******************************************
Load_Game_Basics

	bsr	release_system
	
	jsr	Construct_Map_Pages	
	jsr	Load_Loader_Pic
	jsr	Load_Sound_Effects
	move.w	#1,FadeAfterLoading
		
	bsr	stop_system


	rts



background_block_graphics	dc.l	0