*****************************************************************
* Persistence Of Vision menu 11
* ----------------------------
*
* Written by MAC SYS DATA 15-1-90 23:00 on my 1040 STE (new today)
*              Finished :
*****************************************************************

WIDTH:		equ	16	;pixels wide for letters
BUFFER_SIZE:	equ	128	;one character
NO_LINES:	equ	16
ROLLER_LENGTH:	equ	41
go:
	move.l	sp,a5
	move.l	4(a5),a5	;get basepage
	move.l	$C(a5),d0	;text segment
	add.l	$14(a5),d0	;data segment
	add.l	$1C(a5),d0	;unitialized
	add.l	#$100,d0	;basepage size
	move.l	d0,-(sp)
	move.l	a5,-(sp)
	move.w	d0,-(sp)
	move.w	#$4a,-(sp)
	trap	#1
	add.l	#12,sp		;okay that's it memory free & allocated

	bsr	super_mode
	dc.w	$a00a
	bsr	get_scr_base
	bsr	get_res
	bsr	save_palette
	bsr	low_res
	or.b	#$2,$ff820a	;go into 50Hz

wait_for_drive:
	tst.w	$43e
	bne.s	wait_for_drive

	bsr	hide_mouse

	clr.w	-(sp)
	move.w	#14,-(sp)
	trap	#14
	addq.l	#4,sp
	move.l	d0,a0
	move.w	#1,4(a0)
	bsr	set_palette
	bsr	clear_screen
	move.w	#$006,$ffff8240.w

	move.l	screen_base,a0
	move.l	a0,horiz_tab

	move.l	#ripple_table,position
	move.l	#roller,roller_position

;************************************************************************
;*                          GOLDRUNNER II                               *
;*                          -------------                               *
;* Stolen by: MAC SYS DATA of P.O.V. 08/01/90 22:30                     *
;*      From: AUTOMATION disc 152                                       *
;* Include files:-                                                      *
;*                 AUTO152.IMG into TUNE                                *
;************************************************************************
	move.b	$484,old484
	move.b	#0,$484		;off with keyclick/bell
	move.l	#isr,$4d2	;use VBL to play tune

;****************************************************************
; There is more than one tune in this code....
; 0=AUTOMATION disc 152
; 1=tune 0 @ half speed
; 2=tune 2

	move.l	#2,D0
	jsr	tune

clr_k:
	bsr	check_key
	tst.l	d0
	beq.s	starter
	move.w	#$ff,-(sp)
	move.w	#6,-(sp)
	trap	#1
	addq.l	#4,sp
	bra.s	clr_k

starter:
	bsr	print_credits
	move.l	#0,D0
	jsr	tune
	bsr	set_palette
	jsr	set_screen

	bsr	show_picture
clr_buf:
	bsr	check_key
	tst.l	d0
	beq.s	main_loop
	move.w	#$ff,-(sp)
	move.w	#6,-(sp)
	trap	#1
	addq.l	#4,sp
	bra.s	clr_buf

main_loop:
	bsr	vsync
;	move.w	#$123,$ff8240
	bsr	ripple_up
	bsr	roll
	bsr	scroll
	bsr	scroll
	bsr	scroll
; 	move.w	pic+2,$ff8240
	bsr	check_key
	tst.l	d0
	beq.s	main_loop

	move.w	#$ff,-(sp)
	move.w	#6,-(sp)
	trap	#1
	addq.l	#4,sp
	tst.l	d0
	beq.s	main_loop
	
	cmp.b	#$30,d0		;0 key
	bne.s	not_zero
	eor.b	#$2,$ff820a
	bra.s	main_loop
not_zero:
;	cmp.b	#27,d0
; 	beq.s	ex
	cmp.b	#$31,d0		;1 key
	blt.s	main_loop
	cmp.b	#$36,d0		;6 key
	bge.s	main_loop	
	jsr	endmus

;key is in D0.L
	lea	filenames,a6
	sub.b	#$31,d0
	cmp.b	#2,d0
	beq	mb
	cmp.b	#3,d0
	beq.s	ex
	mulu	#14,d0
	add.w	d0,a6

	bsr	fade
	bsr	user_mode

runaddr:
	pea	go
	pea	go
	move.l	a6,-(sp)
	clr.w	-(sp)
	move.w	#$4b,-(sp)
	trap	#1
	add.l	#16,sp
ert:
	move.w	#1,-(sp)
	move.w	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
	tst.l	d0
	bne.s	do
	bsr	super_mode
do:	move.l	4,a0
	jmp	(a0)

ex:
	jsr	endmus
	move.b	old484,$484

	bsr	restore_palette
	bsr	org_res
	bsr	show_mouse
	dc.w	$a009
	bsr	user_mode

	move.w	#0,-(sp)
	move.w	#$4c,-(sp)
	trap	#1
	addq.l	#4,sp

mb:	jmp	mb2
***************
* Subroutines *
***************

scroll:	move.l	line_ptr,a6	;need a new letter?
	cmp.b	#$ff,(a6)
	bne	loop3
	lea	scroll_line,a6	;restart message
	move.l	a6,line_ptr
loop3:	tst.w	scroll_number
	bne.s	loop2
	move.w	#WIDTH,scroll_number
	clr.l	d0
	move.b	(a6)+,d0
	move.l	a6,line_ptr
	sub.w	#32,d0
	lsl.w	#7,d0	;*128
	lea	font,a6
	add.l	d0,a6	;letter address is in a6
;transfer letter into buffer
	lea	buffer,a1
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6)+,(a1)+
	move.l	(a6),(a1)

loop2:	move.l	screen_base,a6
	add.l	#32000-(16*160),a6
	move.l	a6,a2
	add.w	#152,a2
	lea	buffer,a1
;scroll buffer into right pixel of screen ready for scrolling

	move.w	#16-1,d1
loop:	roxl.w	(a1)
	move.w	(a1),d0
	and.w	#1,d0
	or.w	d0,(a2)

	roxl.w	2(a1)
	move.w	2(a1),d0
	and.w	#1,d0
	or.w	d0,2(a2)

	roxl.w	4(a1)
	move.w	4(a1),d0
	and.w	#1,d0
	or.w	d0,4(a2)

	roxl.w	6(a1)
	move.w	6(a1),d0
	and.w	#1,d0
	or.w	d0,6(a2)

	addq.l	#8,a1
	add.l	#160,a2
	dbf	d1,loop

	move.w	#4-1,d1		;4 planes of screen.
shift:	move.w	#16-1,d0
loopy:	roxl.w	152(a6)
	roxl.w	144(a6)
	roxl.w	136(a6)
	roxl.w	128(a6)
	roxl.w	120(a6)
	roxl.w	112(a6)
	roxl.w	104(a6)
	roxl.w	96(a6)
	roxl.w	88(a6)
	roxl.w	80(a6)
	roxl.w	72(a6)
	roxl.w	64(a6)
	roxl.w	56(a6)
	roxl.w	48(a6)
	roxl.w	40(a6)
	roxl.w	32(a6)
	roxl.w	24(a6)
	roxl.w	16(a6)
	roxl.w	8(a6)
	move.w	(a6),d7
	and.w	#$7fff,d7
	roxl.w	#1,d7
	move.w	d7,(a6)
	add.w	#160,a6
	dbf	d0,loopy
	sub.w	#160*16,a6
	add.w	#2,a6
	dbf	d1,shift
	sub.w	#1,scroll_number
	rts

ripple_up:
	move.l	screen_base,a1
	add.w	#56,a1
	add.w	#4*160,a1

	clr.w	line_count
	move.l	position,a0
	add.w	#1,a0
	move.l	a0,position
	cmp.b	#$ff,16(a0)
	move.l	a0,temp

	move.w	#NO_LINES-1,d7
ripple_loop:
	move.l	temp,a0
	move.b	(a0)+,d1
	move.l	a0,temp
	and.l	#$ff,d1
	cmp.b	#$ff,d1
	bne.s	no_reset_ripple
	move.l	#rrt,position
	move.l	position,temp
no_reset_ripple:
	move.w	line_count,d2
	add.w	#1,line_count
	mulu	#56,d2
	mulu	#56*16,d1
	lea	logo,a0
	add.w	d1,a0	;address of ripple
	add.w	d2,a0
	bsr	print_grafic
	dbf	d7,ripple_loop
	rts

print_grafic:
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	move.l	(a0)+,(a1)+
	add.w	#160-56,a1
	rts

roll:	move.l	screen_base,a6
	add.w	#160*140,a6
	add.w	#56,a6
	move.l	roller_position,a5
	cmp.l	#roller_end,a5
	bne.s	no_roller_rst
	move.l	#r_restart,roller_position
no_roller_rst:
	lea	table,a4
	move.w	#ROLLER_LENGTH-1,d7
.loop:	move.w	(a4)+,d0
	add.w	d0,a5
	move.l	(a5),(a6)	;roller is 16 pixels wide
	move.l	4(a5),4(a6)
	move.l	8(a5),8(a6)
	move.l	12(a5),12(a6)
	move.l	16(a5),16(a6)
	move.l	20(a5),20(a6)
	move.l	24(a5),24(a6)
	move.l	28(a5),28(a6)
	move.l	32(a5),32(a6)
	move.l	36(a5),36(a6)
	move.l	40(a5),40(a6)
	move.l	44(a5),44(a6)

	add.l	#160,a6
	dbf	d7,.loop
	add.l	#48,roller_position
	rts


vsync:	movem.l	d0-d7/a0-a6,-(sp)
	move.w	#37,-(sp)
	trap	#14
	addq.l	#2,sp
	movem.l	(sp)+,d0-d7/a0-a6
	rts

check_key:
	move.w	#11,-(sp)
	trap	#1
	addq.l	#2,sp
	rts

show_picture:
	move.l	screen_base,a1
	lea	pic+34,a0
	move.w	#32000/4-1,d0
setup:	move.l	(a0)+,(a1)+
	dbf	d0,setup
	rts

wait_for_key:
	move.w	#7,-(sp)
	trap	#1
	addq.l	#2,sp
	rts

get_scr_base:
	move.w	#3,-(sp)
	trap	#14
	addq.l	#2,sp
	move.l	d0,screen_base
	rts

super_mode:
	clr.l	-(sp)
	move.w	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
	move.l	d0,save_stk
	rts

user_mode:
	move.l	save_stk,-(sp)
	move.w	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
	rts

save_palette:
	lea	$ff8240,a0
	lea	old_palette,a1
	bra.s	change_palette

restore_palette:
	lea	old_palette,a0
	lea	$ff8240,a1
	bra.s	change_palette

set_palette:
	lea	pic+2,a0
	lea	$ff8240,a1

change_palette:
	moveq	#15,d0
change_pal:
	move.w	(a0)+,(a1)+
	dbf	d0,change_pal
	rts

get_res:
	move.w	#4,-(sp)
	trap	#14
	addq.l	#2,sp
	move.w	d0,old_rez
	rts

low_res:
	clr.w	d0
	bra.s	change_res
med_res:
	moveq	#1,d0
	bra.s	change_res
org_res:
	move.w	old_rez,d0
change_res:
	move.w	d0,-(sp)
	move.l	#-1,-(sp)
	move.l	#-1,-(sp)
	move.w	#5,-(sp)
	trap	#14
	add.l	#12,sp
	rts

hide_mouse:
	pea	di_mouse
	move.w	#2-1,-(sp)
	move.w	#$19,-(sp)
	trap	#14
	addq.l	#8,sp
	rts

show_mouse:
	pea	ei_mouse
	move.w	#2-1,-(sp)
	move.w	#$19,-(sp)
	trap	#14
	addq.l	#8,sp
	rts

print_credits:
	lea	credits_mess,a6
p_c:	bsr	check_key
	tst.l	d0
	bne.s	fin_pc
	tst.b	(a6)
	bne.s	pc2
fin_pc:	rts
pc2:	clr.l	d0
	move.b	(a6)+,d0
	cmp.b	#13,d0
	bgt.s	not_cr
	beq.s	cr
	cmp.b	#10,d0
	beq.s	sync
	cmp.b	#11,d0	;home
	beq.s	home
	cmp.b	#12,d0	;cls & home
	beq.s	clear_s
	bra.s	p_c
sync:	jsr	pause
	bra.s	p_c
home:	
	move.l	screen_base,a0
	clr.l	vertical_tab
	move.l	a0,horiz_tab
	bra.s	p_c
clear_s:
	bsr.s	clear_screen
	bra.s	p_c
cr:	add.l	#18*160,vertical_tab
	move.l	screen_base,a0
	move.l	a0,horiz_tab
	bra.s	p_c
not_cr:
	lea	font+6,a0
	sub.b	#32,d0
	mulu	#16*8,d0
	add.w	d0,a0
	bsr	print_letter
	add.l	#8,horiz_tab
	bra	p_c

print_letter:
	jsr	vsync
	move.l	horiz_tab,a1
	add.l	vertical_tab,a1
	move.w	#16-1,d0
.loop:	move.l	(a0)+,(a1)
	move.l	(a0)+,4(a1)
	add.w	#160,a1
	dbf	d0,.loop
	rts

clear_screen:
	move.l	screen_base,a0
	clr.l	vertical_tab
	move.l	a0,horiz_tab
	move.w	#32000/4-1,d0
.loop:	clr.l	(a0)+
	dbf	d0,.loop
	rts

pause:	move.l	d0,-(sp)
	move.w	#100,d0
pau:	bsr	vsync
	dbf	d0,pau
	move.l	(sp)+,d0
	rts

set_screen:
	lea	pic+34,a0
	move.l	screen_base,a1
	move.w	#32000/4-1,d0
.loop:	move.l	(a0)+,(a1)+
	dbf	d0,.loop
	rts

isr:	movem.l	d0-d7/a0-a6,-(sp)
	jsr	tune+$10a
	movem.l	(sp)+,d0-d7/a0-a6
	rts

endmus:	clr.l	$4D2
	lea	$ff8800,A0
	move.l	#$8080000,(A0)
	move.l	#$9090000,(A0)
	move.l	#$a0a0000,(A0)
	rts

fade:	move.w	#$114,$ffff8240.w
	bsr	vsync
	bsr	vsync
	move.w	#$003,$ffff8240.w
	bsr	vsync
	bsr	vsync
	move.w	#$002,$ffff8240.w
	bsr	vsync
	bsr	vsync
	move.w	#$001,$ffff8240.w
	bsr	vsync
	bsr	vsync
	move.w	#$000,$ffff8240.w
cls:	pea	cls_mess
	move.w	#9,-(sp)
	trap	#1
	addq.l	#6,sp
	rts
cls_mess:
	dc.b	27,'E',0,0

********
* Data *
********
scroll_number:	dc.w	16
di_mouse:
	dc.b	$12,$1a
	even
ei_mouse:
	dc.b	$14,8
	even
line_ptr:	dc.l	scroll_line
	even
old_palette:
	ds.b	32
old_rez:
	dc.w	0

buffer:	dcb.b	0,BUFFER_SIZE

	even
screen_base:
	dc.l	0

	ds.l	25
save_stk:
	dc.l	0
	even

position:	dc.l	0
temp:		dc.l	0
line_count:	dc.w	0
roller_position:	dc.l	0

scroll_line:
 dc.b "WELCOME TO P.O.V. DISC 11.     RELEASED 7/2/90          "
 dc.b "P.O.V. ARE . . . .          "
 dc.b "MAC SYS DATA        BORIS        DR.SYNE"
 DC.B "        AND ALY              "
 dc.b "HELLO TO THE FOLLOWING ...       "
 dc.b "AUTOMATION, "
 dc.b "THE BLADERUNNERS, "
 dc.b "THE UNION, "
 dc.b "ALAN.R, "
 dc.b "GEORGE, "
 dc.b "TCB, "
 DC.B "BASHER, "
 DC.B "THE LOST BOYS "
 DC.B "AND "
 dc.b "THE REPLICANTS.           "
 dc.b "TODAYS DATE IS 15/1/90 AND I'M WRITTING THIS ON MY NEW 1040 STE.   "
 DC.B "I PICKED IT UP JUST 6 HOURS AGO AND IT'S GOING GREAT, I'VE HAD A "
 DC.B "GO AT THE HARWARE SCROLLING AND IT WORKS (SORT OF)!  UNFORTUNATELY "
 dc.b "BECAUSE THE STE ISN'T OFFICIALLY LAUNCHED UNTIL MARCH, I DID NOT "
 DC.B "RECEIVE THE SPECIAL CONTROL PANEL TO DEFINE THE PALETTE FROM 4096 "
 DC.B "COLOURS (BAH, HUMBUG)   BUT DON'T PANIC BECAUSE I'VE FIGURED OUT HOW THE COLOURS "
 dc.b "ARE STORED SO LOOK OUT FOR SOME STE ONLY SCREENS FROM P.O.V. REAL SOON  (HAVE A LOOK AT THE INFO FILE ON P.O.V. 10)! "
 dc.b "              IF YOU WISH TO CONTACT ANY MEMBER OF PERSISTENCE OF VISION, THEN GET DO SO VIA THE FOLLOWING SYSTEM ....... "
 DC.B "   GET ONTO THE NATIONAL 'JANET' SYSTEM AVAILABLE AT MOST POLYTECHNICS.   THE USER ID IS :- MOFFAT[AS      SITE:- LANCS P.P2.   "
 DC.B "THE MESSAGE WILL GO VIA LANCASHIRE POLYTECHNIC AT PRESTON AND WILL APPEAR ON ALY'S ACCOUNT.  WE WILL TRY TO ANSWER ALL "
 DC.B "MESSAGES, IF THERE IS A SPECIAL DEMO YOU WISH TO SEE ON A P.O.V. MENU THEN PLEASE TELL US, ALSO TELL US WHERE WE CAN GET A COPY. "
 DC.B "             WELL THE @ IS GETTING "
 DC.B "ON, SO I BETTER GET ON WITH DISC 12.                NOTE: STE OWNERS PLEASE LOOK AT THE DIRECTORY OF THIS DISC, THERE IS A SMALL "
 dc.b "DEMO FILE FOR YOU TO LOOK AT.           "
 DC.B "    WRAP IT-                                           "
	dc.b	$ff,$ff,$ff,$ff
	even
horiz_tab:	dc.l	0
vertical_tab:	dc.l	0
credits_mess:
	dc.b	10
	dc.b	13,13,13
	dc.b	"     PERSISTENCE",13
	dc.b	"         OF",13
	dc.b	"       VISION",13,10,12

	dc.b	13,13,13,13
	dc.b	"      PRESENTS",10,12

	dc.b	13,13,13
	dc.b	"        DEMO",13
	dc.b	"     COMPILATION",13,13
	dc.b	"      DISC 11",10,12

	dc.b	"      CREDITS",13
	dc.b	"      -------",13,13
	dc.b	"    PROGRAMMING:",13
	dc.b	"    MAC SYS DATA",13,13,10

	dc.b	"      ARTWORK:",13
	dc.b	"        ALY",10,13,13

	dc.b	"   DISTRIBUTION:",13
	dc.b	"      DR.SYNE",10,12

	dc.b	"  FURTHER CREDITS",13
	dc.b	"  ---------------",13,13
	dc.b	"   NO ADDITIONAL",13
	dc.b	"  PROGRAMMING BY:",13,13
	dc.b	"       BORIS",13,13,10
	dc.b	"ALL HACKS AND PACKS",13
	dc.b	"        BY:",13
	dc.b	"    MAC SYS DATA",13
	dc.b	10,12
	dc.b	0
	even
old484:	dc.w	0
pic:	incbin	"pov11.pi1"
	even

font:	dc.w	0,0,0
	incbin	"pov11set.dat"
	even

tune:	incbin	"GRUNNER.MUS"
logo:	incbin	"shift_11.dat"

ripple_table
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8

	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
rrt:	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8

	dc.b	7,7,7,6,6,6,5,5,5,4,4,4,3,3,3,2,2,2,1,1,1,0,0,0
	dc.b	1,1,2,2,3,3,4,4,5,5,6,6
	dc.b	7,7,6,6,5,5,4,4,3,3,2,2,1,1,0,0

	dc.b	1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11
	dc.b	12,12,13,13,14,14,15,15,14,14,13,13,12,12,11,11
	dc.b	10,10,9,9,8,8,7,7,6,6,5,5,4,4,3,3,2,2,1,1,0,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
	dc.b	14,13,12,11,10,9,8,7,6,5,4,3,2,1,0

	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
	dc.b	14,13,12,11,10,9,8,7,6,5,4,3,2,1,0

	dc.b	0,0,0,1,1,1,2,2,2,3,3,3,4,4,4
	dc.b	5,5,5,6,6,6,7,7,7,8,8,8,9,9,9
	dc.b	10,10,10,11,11,11,12,12,12,13,13,13
	dc.b	14,14,14,15,15,15,14,14,14,13,13,13
	dc.b	12,12,12,11,11,11,10,10,10,9,9,9
	dc.b	8,8,8,7,7,7,6,6,6,5,5,5,4,4,4,3,3,3,2,2,2,1,1,1

	dc.b	1,1,1,1,1
	dc.b	2,2,2,2,2
	dc.b	3,3,3,3,3
	dc.b	4,4,4,4,4
	dc.b	5,5,5,5,5
	dc.b	6,6,6,6,6
	dc.b	7,7,7,7,7
	dc.b	8,8,8,8,8
	dc.b	9,9,10,10,11,11,12,12,13,13,14,14,15,15
	dc.b	14,14,13,13,12,12,11,11,10,10
	dc.b	9,9,9,9,9
	dc.b	10,10,10,10,10
	dc.b	11,11,11,11,11
	dc.b	12,12,12,12,12
	dc.b	13,13,13,13,13
	dc.b	14,14,14,14,14
	dc.b	15,15,15,15,15
	dc.b	14,14,14,14,14
	dc.b	13,13,13,13,13
	dc.b	12,12,12,12,12
	dc.b	11,11,11,11,11
	dc.b	10,10,10,10,10
	dc.b	9,9,9,9,9
	dc.b	8,8,8,8,8
	dc.b	7,7,7,7,7
	dc.b	6,6,6,6,6
	dc.b	5,5,5,5,5
	dc.b	4,4,4,4,4
	dc.b	3,3,3,3,3
	dc.b	2,2,2,2,2
	dc.b	1,1,1,1,1

	dc.b	0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4
	dc.b	5,5,5,5,6,6,6,6,6,7,7,7,7
	dc.b	8,8,8,9,9,9,10,10,11,11,10,10,9,9,8,8,7,7,6,6,7,8,9,10,11,10,9
	dc.b	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
	dc.b	9,10,12,14,15,14,12,10,8,6,4,2,0
	dc.b	1,1,2,2,3,3,4,4,5,6,7,8,9,10,12,14,13,13,13,12,12,12,11,11,11
	dc.b	10,10,10,9,9,9

	dc.b	8,8,7,5,3,1,3,5,7,9,11,13,15
	dc.b	13,11,9,7,5,3,1,3,5,7,9,11,13,15

	dc.b	8,8,7,5,3,1,3,5,7,9,11,13,15
	dc.b	13,11,9,7,5,3,1,3,5,7,9,11,13,15

	dc.b	14,14,13,13,12,12,11,10,9,8,9,10,11,11,10,10,9,9

	dc.b	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8

	dc.b	6,6,5,5,4,4,3,3,5,7,9,11,13,15,13,11,9,7,5,3,2,2,1,1,0,0
	dc.b	1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13
	dc.b	14,14,15
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9
	dc.b	8,8,8,8,8,8,8,8
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9,7,5,3,1,3,5,7,9,11,13,15
	dc.b	15,13,11,9

	dc.b	8,7,6,5,4,3,2,1,0,0,0,1,1,1,2,2,2,3,3,3,4,4,4
	dc.b	5,6,7,8,9,10,9,8,9
	dc.b	10,10,10,11,12,13,12,11,11,11,12,12,12,13,13,13
	dc.b	14,15,14,14,14,15,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
 dc.b 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,14,14,13,13,12,12,11,11,10,10,9,9,8,8,7,7,6,6,5,5,4,4,3,3,2,2,1,1,0,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
 dc.b 1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,4,3,2,1,2,3,4,5,6,6,6,7,7,7,8,8,8,9,10,11,10,9,8,7,6,7,8,9,9,9,10,10,10,11,11,11,12,12,12,13,13,13,14,14,14,15,15,15,14,13,12,11,10,8,6,4,3,2,2,1,1,1,0,0,0
 dc.b 1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,4,3,2,1,2,3,4,5,6,6,6,7,7,7,8,8,8,9,10,11,10,9,8,7,6,7,8,9,9,9,10,10,10,11,11,11,12,12,12,13,13,13,14,14,14,15,15,15,14,13,12,11,10,8,6,4,3,2,2,1,1,1,0,0,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
	dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
	dc.b	14,12,10,8,6,4,2,0,2,4,6,8,10,12,14,13,13,12,12,11,10,8
	dc.b	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
	dc.b	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8


	dc.b	$ff,$ff
	even
roller:	dcb.w	0,(48*200)
r_restart:
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1

	incbin	"roller.dat"
roller_end:
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	dc.w	0,$8000,$8000,$8000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1
	even
table:
	dc.w	48+48+48+48
	dc.w	48+48+48+48
	dc.w	48+48+48
	dc.w	48+48
	dc.w	48+48
	dc.w	48+48
	dc.w	48
	dc.w	48+48
	dc.w	48
	dc.w	48
	dc.w	48+48
	dcb.w	48,21
	dc.w	48+48
	dc.w	48
	dc.w	48
	dc.w	48+48
	dc.w	48
	dc.w	48+48
	dc.w	48+48+48
	dc.w	48+48+48+48
	dc.w	48+48+48+48
filenames:
	dc.b	"FULLSCRN.MSD",0,0
	dc.b	"OUTRUN.PRG",0,0,0,0
	dc.b	"filename.ext",0,0	;Megabang 2
	dc.b	"filename.ext",0,0	;junk demo
	dc.b	"wave.xxx",0,0,0,0,0,0,0
	even
mb2:
****************************************************************
*                   TRAP 1 interception routine                *
*                   ---------------------------                *
*                                                              *
* Written by MAC SYS DATA  JAN '90                             *
* Version 2.1                                                  *
****************************************************************
	move.w	#0,$ffff8240.w
	pea	mess
	move.w	#9,-(sp)
	trap	#1
	addq.l	#6,sp

	move.w	#7,-(sp)
	trap	#1
	addq.l	#2,sp

	jsr	cls

	lea	do_jmp+2,a0
	move.l	$84,(a0)
	lea	new_trap1(pc),a0
	lea	$9000,a1
loopa:	move.b	(a0)+,(a1)+
	cmp.l	#laddr,a0
	blt.s	loopa

	move.l	#$9000,$84

	bra	loader

new_trap1:
	movem.l	d0-d7/a0-a6,$9000-100
	move.l	sp,a1
	addq.l	#6,a1
	move.w	(sp),d0
	btst	#13,d0
	bne.s	in_user

	move.l	USP,a1

in_user:
	cmp.w	#$3f,(a1)	;F_READ call.
	bne	go_jmp

	lea	store_sr(pc),a0
	move.w	(sp)+,(a0)+	;store SR
	move.l	(sp)+,(a0)	;and PC for return address

; simulate the load routine by putting all the bits back on the stack
; at the correct position.
	lea	$c(a1),a3
	move.l	-(a3),-(sp)	;address to load at
	move.l	-(a3),-(sp)	;number of bytes
	move.l	-(a3),-(sp)	;file handle and $3f for f_read

	pea	trap1_return(pc);push our return address to stack.
	move.w	#$2300,-(sp)	;put the SR back on the stack.

;return saved registers here........
go_jmp:	movem.l	$9000-100,d0-d7/a0-a6
do_jmp:	jmp	0		;and jump to ROM


; the read routine will return to here now... (depack)
trap1_return:
	movem.l	d0-d7/a0-a6,$9000-100

	lea	bytes_loaded(pc),a3
	move.l	d0,(a3)		;store number of bytes read

	move.l	8(sp),a1	;get where to load
	move.l	4(sp),a2	;how much to load
	add.l	#$c,sp

	move.l	a1,a3
	add.l	d0,a1	;get end of file?
	sub.w	#4,a1	;back up 4 bytes to start of ident long-word

	move.b	(a1),d1		;1st letter
	rol.l	#8,d1
	move.b	1(a1),d1	;2nd
	rol.l	#8,d1
	move.b	2(a1),d1	;3rd
	rol.l	#8,d1
	move.b	3(a1),d1	;4th
	cmp.l	#"MSD!",d1	;check ident long-word (if LSD pack then LSD!)
	bne.s	exit_trap1	;not packed	       (if JEK pack then JEK!)
;						       (if POV pack then MSD!)
; a0 must point to end of compacted code
; a1 must point to destination
	move.l	a1,a0
	move.l	a3,a1

	bsr	depak

exit_trap1:
	movem.l	$9000-100,d0-d7/a0-a6
	lea	bytes_loaded(pc),a0
	move.l	(a0),d0			; no. bytes loaded.
	lea	store_sr(pc),a0
	move.w	(a0)+,sr
	move.l	(a0),-(sp)
	rts

bytes_loaded:	dc.l	0

store_sr:	dc.w	0
store_pc:	dc.l	0

depak:	move.w	$ff8240,-(sp)
	move.l	-(a0),d1
	move.l	-(a0),d5
	move.l 	a1,a2
	adda.l 	d1,a2
	move.l 	-(a0),d0
	eor.l 	d0,d5
l1:	lsr.l 	#1,d0
	bne.s 	l2
	bsr 	l16
l2:	bcs.s 	l9
	moveq 	#8,d1
	moveq 	#1,d3
	lsr.l 	#1,d0
	bne.s 	l3
	bsr 	l16
l3:	bcs.s 	l11
	moveq 	#3,d1
	clr.w 	d4
l4:	bsr 	l17
	move.w 	d2,d3
	add.w 	d4,d3
l5:	moveq 	#7,d1
l6:	lsr.l 	#1,d0
	bne.s 	l7
	bsr 	l16
l7:	roxl.l 	#1,d2
	dbf 	d1,l6
	move.b 	d2,-(a2)
	dbf 	d3,l5
	bra.s 	l13
l8:	moveq 	#8,d1
	moveq 	#8,d4
	bra.s 	l4
l9:	moveq 	#2,d1
	bsr 	l17
	cmpi.b 	#2,d2
	blt.s 	l10
	cmpi.b 	#3,d2
	beq.s 	l8
	moveq 	#8,d1
	bsr.s 	l17
	move.w 	d2,d3
	move.w 	#12,d1
	bra.s 	l11
l10:	move.w 	#9,d1
	add.w 	d2,d1
	addq.w 	#2,d2
	move.w 	d2,d3
l11:	bsr.s 	l17
l12:	subq.w 	#1,a2
	move.b 	0(a2,d2.w),(a2)
	dbf 	d3,l12
l13:	move.w	d0,$ff8240
	cmpa.l 	a2,a1
	blt.s 	l1
	tst.l 	d5
	bne.s 	l14
fin	move.w	(sp)+,$ff8240
	rts
l14:	nop
l15:	moveq 	#1,d0
	rts
l16:	move.l 	-(a0),d0
	eor.l 	d0,d5
	move.b 	#$10,ccr
	roxr.l 	#1,d0
	rts
l17:	subq.w 	#1,d1
	clr.w	 d2
l18:	lsr.l 	#1,d0
	bne.s	 l19
	move.l 	-(a0),d0
	eor.l 	d0,d5
	move.w	d0,$ff8240
	move.b 	#$10,ccr
	roxr.l 	#1,d0
l19:	roxl.l 	#1,d2
	dbf 	d1,l18
	rts

	even
laddr:	dc.l	0

loader:
	lea	load(pc),a0
	move.l	#$60000,a1
move:	move.b	(a0)+,(a1)+
	cmp.l	#codeend,a0
	blt.s	move
	jmp	$60000

load:	clr.w	-(sp)
	move.l	#filename,-(sp)
	move.w	#$3d,-(sp)
	trap	#1
	addq.l	#8,sp
	move.l	d0,d7
	move.l	#$10000,-(sp)
	move.l	#56320,-(sp)
	move.w	d7,-(sp)
	move.w	#$3f,-(sp)
	trap	#1
	add.l	#12,sp
	move.w	d7,-(sp)
	move.w	#$3e,-(sp)
	trap	#1
	addq.l	#4,sp

start:	lea	patch(pc),a0
	move.l	#$100c6,a1
shif:	move.b	(a0)+,(a1)+
	cmp.l	#$1010c,a1
	blt.s	shif

	jmp	$10000

patch:	clr.w	-(sp)
	move.l	#sample,-(sp)
	move.w	#$3d,-(sp)
	trap	#1
	add.l	#8,sp
	move.l	d0,d7

	move.l	#$103a2,-(sp)
	move.l	#312321,-(sp)
	move.w	d7,-(sp)
	move.w	#$3f,-(sp)
	trap	#1
	add.l	#12,sp

	move.w	d7,-(sp)
	move.w	#$3e,-(sp)
	trap	#1
	addq.l	#4,sp
	jmp	$1010c
	
sample:	dc.b	"BANG.2",0
	dc.b	0,0
	even
filename:
	dc.b	"MEGA.",0
	even
codeend:

	even
mess:	dc.b	27,'E'
 dc.b	"        MEGABANG 2 - THE SEQUEL",13,10
 dc.b	"        -----------------------",13,10,10
 dc.b	"          Hacked and Packed by",13,10,10
 dc.b	"              MAC SYS DATA",13,10,10
 dc.b	"                10/1/90",13,10,10,10
 dc.b	"This demo was a bootsector loader, so I",13,10
 dc.b	"had to hack the loader, make the data",13,10
 dc.b	"into files then write a loader. Dead",13,10
 dc.b	"easy when you know how!",13,10,10
 dc.b	"Okay all you other demo packers, lets",13,10
 dc.b	"see what you're made of, try to hack",13,10
 dc.b	"and pack this one, and no stealing my",13,10
 dc.b	"hack of it.",13,10,10
 dc.b	"Be warned, you won't be using PAMPUK!",13,10,10
 dc.b	"        PRESS A KEY TO CONTINUE.",13,10,0
