*******************************************************************************
* BOOT MENU V2.0
*******************************************************************************
	OPT C-
	INCLUDE	source:include/LIBOFFSETS.I
*******************************************************************************
MAIN:
	JSR	OPENLIBRARYS		* OPEN VARIOUS SYSTEM LIBRARYS
	MOVE.L	ERRORFLAG,D6		* COPY ERROR FLAG TO D6
	TST.L	D6			* TEST ERROR FLAG
	BEQ	QUIT			* ZERO = ERROR 1 = O.K
	JSR	ALLOCATEMEM		* RESERVE MEMORY FOR BMAP
	MOVE.L	ERRORFLAG,D6		* SEE ABOVE FOR DETAILS
	TST.L	D6			
	BEQ	LIBCLOSE
	JSR	SETUPBITMAP		* INTIALIZE A BITMAP
	JSR	OPENNEWSCREEN		* OPEN UP A CUSTOM SCREEN
	MOVE.L	ERRORFLAG,D6		* SEE ABOVE FOR DETAILS
	TST.L	D6
	BEQ	NOSCREEN
	JSR	COPYCOLORS		* COPY BMAP COLORS INTO H/WARE REGISTERS
WAIT:	BTST	#$7,$BFE001		* TEST JOYSTICK FIRE BUTTON
	BNE	WAIT			* BRANCH TILL PRESSED
	JSR	CLOSENEWSCREEN		* CLOSE SCREEN
NOSCREEN:
	JSR	DEALLOCATEMEM		* FREE RESERVED MEMORY
LIBCLOSE:	
	JSR	CLOSELIBRARYS		* CLOSE SYSTEM LIBRARIES
QUIT:
	RTS				* RETURN TO CLI
*******************************************************************************
OPENLIBRARYS:
	MOVE.L  $4,A6		* EXECBASE ADRESS
	LEA     DOS(PC),A1	* POINTER TO DOS.LIBRARY
        MOVEQ   #$0,D0		* ANY VERSION WILL DO
	JSR	OPENLIBS(A6)	* OPENLIBRARY
	TST.L	D0		* IF ERROR NO LIBRARY RETURN TO VLI
	BEQ	RETURNTOCLI
	MOVE.L  D0,DOSBASE	* STORE DOS.LIBRARY BASE ADRESS

	LEA	GRAPH(PC),A1	* OPEN GRAPHICS.LIBRARY
	MOVEQ	#$0,D0		* SAME AS ABOVE
	JSR	OPENLIBS(A6)
	TST.L   D0
	BEQ	DOSCLOSE
	MOVE.L  D0,GRAPHBASE

	LEA	INT(PC),A1	* OPEN INTUITION.LIBRARY
	MOVEQ	#$0,D0		* SAME AS ABOVE
	JSR	OPENLIBS(A6)
	TST.L   D0
	BEQ	GRAPHCLOSE
	MOVE.L  D0,INTBASE
ALLLIBSOPEN:
	MOVE.L	#1,ERRORFLAG	* NO ERROS EVERYTHING OPENEND O.K
	RTS			
*******************************************************************************
CLOSELIBRARYS:
INTCLOSE:
	MOVE.L  $4,A6		* EXECBASE
	MOVE.L  INTBASE,A1	* INTUITION.LIBRARY POINTER TO LIB
	JSR	CLOSELIBS(A6)	* SYSTEM CALL TO CLOSE LIB

GRAPHCLOSE:
	MOVE.L  $4,A6		
	MOVE.L  GRAPHBASE,A1	* GRAPHICS.LIBRARY POINTER TO LIB
	JSR	CLOSELIBS(A6)	* SAME AS ABOVE
	
DOSCLOSE:
	MOVE.L  $4,A6
	MOVE.L	DOSBASE,A1	* DOS.LIBRARY BASE POINTER TO LIB
	JSR	CLOSELIBS(A6)	* SAME AS ABOVE

RETURNTOCLI:
	MOVE.L	#0,ERRORFLAG	* UNKNOWN ERROR QUIT FAST
	RTS
*******************************************************************************
*OPENSCREEN AND MENU ROUTINE
*******************************************************************************
OPENNEWSCREEN:
	MOVE.L  INTBASE,A6		* INTUITION LIBRARY BASE ADRESS
	LEA	SCREEN,A0		* SCREEN START ADRESS
	JSR	OPENSCREEN(A6)		* LIBRARY CALL TO OPEN SCREEN
	MOVE.L	D0,SCREENADRESS		* STORE SCREEN START ADRESS
	BEQ	CLEARMEM        	* WAS THERE A ERROR IF SO CLOSE DOWN
	MOVE.L	#1,ERRORFLAG		* SCREEN O.K NO ERRORS
	RTS
CLEARMEM:
	MOVE.L	#0,ERRORFLAG		* UNKNOWN ERROR OCURED
	RTS				* FREEMEM CLOSE LIBS AND QUIT

*******************************************************************************
CLOSENEWSCREEN:
	MOVE.L  INTBASE,A6		* INTUITION BASE ADRESS
	MOVE.L  SCREENADRESS,A0		* CUSTOM SCREEN START ADRESS
	JSR	CLOSESCREEN(A6)		* LIBRARY CALL TO CLOSE SCREEN
	RTS
*******************************************************************************
* SET UP A BITMAP SCREEN
*******************************************************************************
SETUPBITMAP:	MOVE.L		BITMAP,A0	*A0->UNINITIALISED BM STRUCT
		MOVE.L		A0,A3		*STORE A COPY FOR LATER
		MOVEQ.L		#2,D0		*D0=SCREEN DEPTH
		MOVE.L		#320,D1		*D1=SCREEN WIDTH
		MOVE.L		#256,D2		*D2=SCREEN HEIGHT
		MOVE.L		GRAPHBASE,A6    *GRAPHICSBASE ADRESS
		JSR		INITBITMAP(A6)  *LIBRARY CALL TO MAKE BITMAP

		MOVE.L		A3,A0		*A0->BITMAP STRUCTURE
		ADD.L		#$8,A0		*A0->ADDR OF PLANE POINTERS
		MOVE.L		BITMAP,D0	*D0=ADDR OF PICTURE
		MOVE.L		#(320/8)*256,D1	*D1=SIZE OF EACH PLANE
		MOVEQ.L		#1,D2		*D2=NUM OF PLANES - 1
LOOP:		MOVE.L		D0,(A0)+	*ADDR OF NEXT PLANE INTO STRUCT
		ADD.L		D1,D0		*D0=ADDR OF NEXT PLANE
		DBRA		D2,LOOP 	*FOR ALL PLANES
		MOVE.L		D0,A3		*A3->COLOURS
		RTS

COPYCOLORS:	
		MOVE.L		SCREENADRESS,A0	*A0->SCREEN STRUCTURE
		ADD.L		#$2C,A0 	*A0->SCREENS VIEWPORT STRUCT
		LEA		COLORS,A1	*A1->COLOURS
		MOVEQ.L		#4,D0		*D0=NUMBER OF COLOURS
		MOVE.L		GRAPHBASE,A6	*GRAPHICSBASEADRESS
		JSR		LOADRGB4(A6)	*LOAD COLORS INTO COL REG
		RTS
*******************************************************************************
*MEMORY ALLOCATION ROUTINE FOR THE BOOT BUFFER
*******************************************************************************
ALLOCATEMEM:
	MOVE.L  $4,A6				* ABSOLOTE EXECBASE ADRESS
	MOVE.L 	#30780,D0			* NUMBER OF BYTES TO RESERVE
	MOVE.L	#MEMF_CHIP!MEMF_CLEAR,D1	* TYPE OF RAM CHIP
	JSR	ALLOCMEM(A6)			* EXEC LIBRARY CALL
	MOVE.L  D0,BITMAP			* START ADRESS OF RESERVED MEMORY
	MOVE.L	D0,SBITMAP			* STORE START IN SCREEN STRUC
	TST.L	D0				* NON ZERO MEM START ADRESS
	BEQ	NOMEM				* NO MEMORY AVAILABLE
	MOVE.L  #1,ERRORFLAG			* EVERYTHING O.K
	RTS
NOMEM::
	MOVE.L	#0,ERRORFLAG			* UNKNOWN ERROR CLOSE LIBS
	RTS
*******************************************************************************
DEALLOCATEMEM:
	MOVE.L	$4,A6		* RETURN MEMORY BACK TO THE SYSTEM POOL
	MOVE.L  #30780,D0	* NUMBER OF BYTES TO RETERN
	MOVE.L  BITMAP,A1	* START OF RESERVED MEMORY
	JSR	FREEMEM(A6)	* EXEC LIBRARY CALL TO FREE MEM
	RTS
*******************************************************************************
*LIBRARY NAMES POINTERS ECT
*******************************************************************************
LIBRARYS:
DOS:  	DC.B "dos.library",0		* NAME OF THE LIBRARIES TO
      	EVEN				
GRAPH: 	DC.B "graphics.library",0	* OPEN DOS INTUITION AND
	EVEN
INT:   	DC.B "intuition.library",0	* GRAPHICS
	EVEN
DOSBASE:   	DC.L 0		* STORE FOR DOS.LIBRARY BASE ADRESS
GRAPHBASE: 	DC.L 0		* STORE FOR GRAPHICS.LIBRARY BASE ADRESS
INTBASE:   	DC.L 0		* STORE FOR INTUTION.LIBRARY BASE ADRESS
BITMAP:	   	DC.L 0		* POINTER TO RESERVED BMAP MEMORY
ERRORFLAG: 	DC.L 0		* POINTER TO ERROR FLAG
SCREENADRESS:   DC.L 0  	* POINTER TO CUSTOM SCREEN
*******************************************************************************
*SCREEN DEFINICION AND SCREEN POINTERS
*******************************************************************************
TITLESCREEN:   DC.B "BOOT MENU VERSION 2 (ENHANCED)",0	* SCREEN NAME
	       EVEN
SCREEN:
X_POSITION: 	DC.W 0				*X STARTING POSITION
Y_POSITION:  	DC.W 0				*Y STARTING POSITION
SCWIDTH:	DC.W 320			*SCREEN WIDTH
SCHEIGHT:	DC.W 256			*DCREEN HEIGHT
DEPTH:		DC.W 2				*NUMBER OF PLANES
DETAIL_PEN:	DC.B 1				*FOREGROUND PEN COLOR
BLOCKPEN:	DC.B 3				*BACKGROUND PEN COLOR
VIEW_MODES:	DC.W 2				*VIEWING MODES (NORMAL)
SCREEN_TYPE:    DC.W CUSTOMSCREEN!CUSTOMBITMAP  *SCREENTYPE
FONT:		DC.L 0				*POINTER TO FONT
TITLE:		DC.L TITLESCREEN		*POINTER TO TITLE
GADGETS:	DC.L 0				*CUSTOM GADGETS
SBITMAP:	DC.L 0				*POINTER TO BITMAP
		EVEN
COLORS		DC.W	$000,$FFF,$AAA,$BBB	* BMAP COLORS 1 TO 4 
********************************************************************************

