
; No escape !!!!!

	SECTION		chipmemory,data_c	
							;BY BLAINE EVANS
							;1 ERITH WAY
							;PONTYBODKIN
							;NR MOLD
							;CLWYD
							;CH7 4TR
							;TEL O352-771673
	opt	c-,d+

Height			equ	256
Width			equ	40
Depth			equ	5
ScreenSize		equ	Height*Width
BlitHeight		equ	16
BlitWidth		equ	1

	move.l	4.w,a6			;FIND EXEC BASE
	lea	gfxlib(pc),a1		;LOAD GRAPHICS LIBRARY IN A1
	moveq	#$00,d0			;VERSION 0
	jsr	-552(a6)		;OPEN LIBRARY
	move.l	d0,_gfxbase		;STORE D0 (GFX ADDRESS )
	beq	nolib_exit		;ELSE EXIT
	bsr	Foreground_addresses	;BRANCH TO FOREGROUND ADDRESSES
	bsr	Init
	lea	$dff000,a6
	move.l	_gfxbase,a0		;LOAD ADDRESS OF GRAPHICS LIB IN A0
	move.l	50(a0),Oldcop		;STORE CURRENT COPPER,ETC TO RETRIEVE LATER
S
	move.l	#Newcop,50(a0)		;POINT TO OUR COPPERLIST

Wait					;WAIT LOOP
	cmp.b	#255,$dff006		;VERTICAL BLANKING GAP 
	bne.s	wait			;
;	move.w	#$fff,$180(a6)		;REMOVE TO MEASURE RASTER TIME
	bsr	Position
;	move.w	#$000,$180(a6)		;REMOVE TO MEASURE RASTER TIME
	btst	#$6,$bfe001		;QUIT LEFT MOUSE PRESSED
	bne.s	Wait
ended					;ELSE LOOP TO WAIT
	move.l	_gfxbase,a0		;LOAD GRAPHICS LIB ADDRESS IN A0
	move.l	oldcop,50(a0)		;RESTORE OLD COPPER TO RETURN TO EDITTER
nomem_exit	
	move.l	4.w,a6			;FIND EXEC BASE
	move.l	_gfxbase,a1		;LOAD GRAPHICS BASE IN A1
	jsr	-414(a6)		;CLOSE LIBRARY
nolib_exit
	rts				;RETURN TO EDITER
Foreground_addresses			;START OF FOREGROUND DATA
	move.l	#Foreground,d0
	move.w	d0,Bpl0ptl		;LOW WORD IN BIT PLANE 0 LOW
	swap	d0				
	move.w	d0,Bpl0pth		;HIGH WORD IN BIT PLANE 0 HIGH
	swap	d0
	add.l	#ScreenSize,d0
	move.w	d0,Bpl1ptl		;LOW WORD IN BIT PLANE 1 LOW
	swap	d0				
	move.w	d0,Bpl1pth		;HIGH WORD IN BIT PLANE 1 HIGH
	swap	d0
	add.l	#ScreenSize,d0
	move.w	d0,Bpl2ptl		;LOW WORD IN BIT PLANE 2 LOW
	swap	d0				
	move.w	d0,Bpl2pth		;HIGH WORD IN BIT PLANE 2 HIGH
	swap	d0
	add.l	#ScreenSize,d0
	move.w	d0,Bpl3ptl		;LOW WORD IN BIT PLANE 3 LOW
	swap	d0				
	move.w	d0,Bpl3pth		;HIGH WORD IN BIT PLANE 3 HIGH
	swap	d0
	add.l	#ScreenSize,d0
	move.w	d0,Bpl4ptl		;LOW WORD IN BIT PLANE 4 LOW
	swap	d0				
	move.w	d0,Bpl4pth		;HIGH WORD IN BIT PLANE 4 HIGH
	swap	d0
	rts
Init
	move.l	#Foreground,d0		; initialse 
	move.l	d0,Address
	move.l	#Graphics,d1
	move.l	d1,Graph_Address
	move.l	#Map_X,a1
	move.l	a1,MapAddress_X
	move.l	#Map_Y,a1
	move.l	a1,MapAddress_Y
	move.w	#0,Count
	rts
Position
	;ILLEGAL
	moveq.l	#0,d0
	moveq.l	#0,d1
	move.l	#Foreground,a3
	move.l	#Graphics,a2
	move.l	MapAddress_X,a1
	move.w	(a1)+,d0
	cmp.w	#$ffff,d0
	beq	ResetMap
	move.l	a1,MapAddress_X
	move.l	MapAddress_Y,a0
	move.w	(a0)+,d1
	move.l	a0,MapAddress_Y
	mulu	#2,d0
	mulu	#16,d1
	mulu.w	#40,d1			* find screen address
	add.w	d0,d1			* add X to Y
	add.l	d1,a2
	add.l	d1,a3	
	move.l	a2,Graph_Address
	move.l	a3,Address
	bsr	DoBob
	rts
ResetMap
	ILLEGAL
	move.l	#Map_X,a1
	move.l	a1,MapAddress_X
	move.l	#Map_Y,a1
	move.l	a1,MapAddress_Y
	rts	
DoBob
	move.w	#(Depth)-1,d7		* no of planes -1
	lea	$dff000,a6		* custom base
	move.l	Address,a3		* mem address
	move.l	Graph_Address,a2	* graph address
Bob_loop
	bsr	Blit_Bob		
	lea	ScreenSize(a2),a2	*find next plane
	lea	ScreenSize(a3),a3
	dbra	d7,Bob_loop
	rts
Blit_Bob				* LOAD BLITTER WITH VALUES
	bsr	Wfblit
	move.l	a2,$50(a6)		* bltapt   * Source
	move.l	a3,$54(a6)		* bltdpt   * Designation
	move.w	#Width-(BlitWidth*2),$64(a6)	* bltamod  * Source Modula
	move.w	#Width-(BlitWidth*2),$66(a6)	* bltdmod  * Designation Modula
	move.l	#$09f00000,$40(a6)	* bltcon0  * Bplcon0
	move.l	#00,$42(a6)		* bltcon1  * Bplcon1
	move.w	#$ffff,$44(a6)		* bltafwm  * first word mask
	move.w	#$ffff,$46(a6)		* bltalwm  * last word mask
	move.w	#(BlitHeight*64)+(BlitWidth),$58(a6)	* bltsize  * Bltsize
	rts
Wfblit
	btst	#14,2(a6)		* dmaconr
	bne.s	Wfblit			* Test Blitter State
	rts	
ClearScreen
	move.l	#Foreground,a0		* load address
	move.l	#$0,d0			* blanks
	move.l	#((ScreenSize/4)*Depth)-1,d1	
Clear
	move.l	d0,(a0)+		
	dbra	d1,Clear
	rts	
	
gfxlib	dc.b	"graphics.library",0	
	even
_gfxbase	dc.l	0			;LONG WORD TO STORE GFX ADDRESS
oldcop		dc.l	0			;OLD COPPERLIST ADDRESS
Address		dc.l	0
Graph_Address	dc.l	0
MapAddress_X	dc.l	0
MapAddress_Y	dc.l	0
Count		dc.w	0
	even


Newcop
	dc.w	$0100,%0101001000000000		
	dc.w	$0102
Scroll	dc.w	$0000				;SCROLL VALUE
	dc.w	$0104,%0000000000000001		;NO PRIORITIES
	dc.w	$0108,$0000,$010a,$0000		;MODULAS
	dc.w	$0092,$0038,$0094,$00d0		;256*40 SCREEN
	dc.w	$008e,$2c81,$0090,$2cc1		;VISIBLE AREA
						
Planes
	dc.w	$00e0
Bpl0pth	dc.w	$0000,$00e2
Bpl0ptl	dc.w	$0000,$00e4
Bpl1pth	dc.w	$0000,$00e6
Bpl1ptl	dc.w	$0000,$00e8
Bpl2pth	dc.w	$0000,$00ea
Bpl2ptl	dc.w	$0000,$00ec
Bpl3pth	dc.w	$0000,$00ee
Bpl3ptl	dc.w	$0000,$00f0
Bpl4pth	dc.w	$0000,$00f2
Bpl4ptl	dc.w	$0000,$00f4
Bpl5pth	dc.w	$0000,$00f6
Bpl5ptl	dc.w	$0000

Sprites						;SPRITES
	dc.w	$0120
Spl0pth	dc.w	$0000,$0122
Spl0ptl	dc.w	$0000,$0124
Spl1pth	dc.w	$0000,$0126
Spl1ptl	dc.w	$0000
	dc.w	$0128,$0000,$012a,$0000
	dc.w	$012c,$0000,$012e,$0000
	dc.w	$0130,$0000,$0132,$0000
	dc.w	$0134,$0000,$0136,$0000
	dc.w	$0138,$0000,$013a,$0000
	dc.w	$013c,$0000,$013e,$0000

	dc.w	$0180,$0000,$0182,$0fbb,$0184,$0ddd,$0186,$0faa
	dc.w	$0188,$0999,$018a,$0777,$018c,$0555,$018e,$0333
	dc.w	$0190,$0069,$0192,$0222,$0194,$008c,$0196,$0111
	dc.w	$0198,$00f8,$019a,$0f77,$019c,$0f55,$019e,$0f33
	dc.w	$01a0,$0046,$01a2,$0f30,$01a4,$0e00,$01a6,$0c00
	dc.w	$01a8,$0a00,$01aa,$0800,$01ac,$0600,$01ae,$0400
	dc.w	$01b0,$0200,$01b2,$0444,$01b4,$0888,$01b6,$0c66
	dc.w	$01b8,$0666,$01ba,$0aaa,$01bc,$0000,$01be,$0fff

	dc.w	$ffff,$fffe			;END OF COPPERLIST
Map_X

	dc.w	00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19
	dc.w	19,19,19,19,19,19,19,19,19,19,19,19,19,19,19
	dc.w	18,17,16,15,14,13,12,11,10,09,08,07,06,05,04,03,02,01,00
	dc.w	00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
	dc.w	01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18
	dc.w	18,18,18,18,18,18,18,18,18,18,18,18,18
	dc.w	17,16,15,14,13,12,11,10,09,08,07,06,05,04,03,02,01
	dc.w	01,01,01,01,01,01,01,01,01,01,01,01
	dc.w	01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18
	dc.w	17,17,17,17,17,17,17,17,17,17,17,17
	dc.w	16,15,14,13,12,11,10,09,08,07,06,05,04,03,02,01
	dc.w	02,02,02,02,02,02,02,02,02,02,02,02
	dc.w	02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17
	dc.w	16,16,16,16,16,16,16,16,16,16,16
	dc.w	15,14,13,12,11,10,09,08,07,06,05,04,03,02
	dc.w	03,03,03,03,03,03,03,03,03
	dc.w	04,05,06,07,08,09,10,11,12,13,14,15,16
	dc.w	15,15,15,15,15,15,15,15
	dc.w	14,13,12,11,10,09,08,07,06,05,04,03
	dc.w	04,04,04,04,04,04,04,04
	dc.w	05,06,07,08,09,10,11,12,13,14,15
	dc.w	14,14,14,14,14,14
	dc.w	14,13,12,11,10,09,08,07,06,05,04
	dc.w	05,05,05,05,05
	dc.w	06,07,08,09,10,11,12,13,14
	dc.w	13,13,13,13
	dc.w	13,12,11,10,09,08,07,06,05
	dc.w	06,06,06
	dc.w	06,07,08,09,10,11,12,13
	dc.w	12,12,12
	dc.w	12,11,10,09,08,07,06

	dc.w	$ffff				; end marker
Map_Y	
	dc.w	00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
	dc.w	01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
	dc.w	15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
	dc.w	14,13,12,11,10,09,08,07,06,05,04,03,02,01,00
	dc.w	01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01
	dc.w	02,03,04,05,06,07,08,09,10,11,12,13,14
	dc.w	14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14
	dc.w	13,12,11,10,09,08,07,06,05,04,03,02
	dc.w	02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02
	dc.w	02,03,04,05,06,07,08,09,10,11,12,13
	dc.w	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13
	dc.w	13,12,11,10,09,08,07,06,05,04,03,02
	dc.w	03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03
	dc.w	03,04,05,06,07,08,09,10,11,12,13
	dc.w	12,12,12,12,12,12,12,12,12,12,12,12,12,12
	dc.w	12,11,10,09,08,07,06,05,04
	dc.w	04,04,04,04,04,04,04,04,04,04,04,04,04
	dc.w	04,05,06,07,08,09,10,11
	dc.w	11,11,11,11,11,11,11,11,11,11,11,11
	dc.w	11,10,09,08,07,06,05,04
	dc.w	05,05,05,05,05,05,05,05,05,05,05
	dc.w	05,06,07,08,09,10
	dc.w	10,10,10,10,10,10,10,10,10,10,10
	dc.w	10,09,08,07,06
	dc.w	06,06,06,06,06,06,06,06,06
	dc.w	06,07,08,09
	dc.w	09,09,09,09,09,09,09,09,09
	dc.w	09,08,07
	dc.w	07,07,07,07,07,07,07,07
	dc.w	07,08,09
	dc.w	08,08,08,08,08,08,08


Foreground
		dcb.b	ScreenSize*1,$00
		dcb.b	ScreenSize*1,$00
		dcb.b	ScreenSize*1,$00
		dcb.b	ScreenSize*1,$00
		dcb.b	ScreenSize*1,$00

Graphics	
	incbin	Owl.raw

