*****************************************************************
*			P.O.V. 106				*
*			---------				*
* WRITTEN BY MAC SYS DATA					*
*****************************************************************
;* Screen flipping menu
;* Present screen pointed to label PRESENT SCREEN
;


FINAL		equ	0	;0=no   1=yes
RASTER_TIMINGS	equ	0


SPRITE_WIDTH	equ	5
SPRITE_DEPTH	equ	22


	bsr	set_super
	clr.w	$200.w
	IFNE	FINAL
	move.l	#msd,$24.w
	ENDC

msd	move.b	#$12,$fffffc02.w

;clear BSS
	lea	stopper,a0
.loop	clr.l	-(a0)
	cmp.l	#old70,a0
	bgt.s	.loop

	bsr	save_pal
	bsr	get_base
	bsr	calc_screen
	bsr	black_out

	move.l	scr_now,a0
	move.l	a0,screen_base
	bsr	set_low_rez
	bsr	shift_pov
	move.b	$484,old484
	clr.b	$484
	bsr	intro

*** ATOMINO music ripped by MUG UK.

	move.l	#1,D0
	jsr	tune

	bsr	cls
	bsr	set_for_border
	bsr	show_pic
	bsr	set_bounce_count
	bsr	flush
	bsr	disc_number

main_loop
	bsr	vsync
	bsr	set_screen		;screen flip

	IFNE	RASTER_TIMINGS	;only show rasters if wanted and <>FINAL copy
	IFEQ	FINAL
	move.w	#$123,$ffff8240.w
	ENDC
	ENDC

	bsr	scroll

	IFNE	RASTER_TIMINGS
	IFEQ	FINAL
	move.w	#$007,$ffff8240.w
	ENDC
	ENDC
	bsr	return_screen

	IFNE	RASTER_TIMINGS
	IFEQ	FINAL
	move.w	#$040,$ffff8240.w
	ENDC
	ENDC

	bsr	disc_number

	IFNE	RASTER_TIMINGS
	IFEQ	FINAL
	move.w	picture_pal,$ffff8240.w
	ENDC
	ENDC

	move.b	$fffffc02.w,d0

	IFNE	FINAL
	cmp.b	#01,d0		;escape
	beq	exit
	ENDC

	cmp.b	#$b,d0		;0 key
	beq.s	zero

	cmp.b	#$70,d0		;0 keypad
	beq.s	zero

car	cmp.b	#$53,d0
	beq	do_reset

	lea	key_codes,a0
.loop	cmp.b	#$ff,(a0)
	beq.s	main_loop
	cmp.b	(a0)+,d0
	beq.s	load
	move.b	(a0)+,d1
	bra.s	.loop

zero	tst.w	zero_counter
	bne.s	car
	eor.w	#$002,fontpal
	eor.w	#$ffff,hertz_switch
	move.w	#10,zero_counter
	bra	main_loop

load	move.b	(a0),d0
	move.l	d0,-(sp)
	bsr	isr_off
	move.l	(sp)+,d0
	and.l	#$ff,d0
	lea	filenames,a6
	lsl.w	#2,d0
	add.w	d0,a6
	move.l	(a6),a6
	lea	$200,a0
	movem.l	(a6),d0-d3
	movem.l	d0-d3,(a0)
	tst.w	hertz_switch
	beq.s	hz50
	eor.b	#2,$ffff820a.w
hz50	move.b	#$8,$fffffc02.w
	move.b	old484,$484
	bsr	black_out
	move.l	old_base,a0
	bsr	set_low_rez
	bsr	user_mode
	clr.w	-(sp)
	trap	#1

do_reset
	move.l	4.w,-(sp)
	rts


exit	bsr	isr_off
	bsr	flush
	move.l	old_base,a0
	bsr	set_med_rez
	bsr	restore_pal
	move.b	#8,$fffffc02.w
	move.b	old484,$484.w
	bsr	user_mode
	clr.w	-(sp)
	trap	#1



***************
* Subroutines *
***************
shift_pov
	lea	pov_pic+34,a0
	move.l	screen_base,a1
	move.w	#32000/4-1,d0
.loop	move.l	(a0)+,(a1)+
	dbf	d0,.loop

	lea	pov,a1
	move.w	#16-1,d7
shift_loop
	move.l	screen_base,a0
	move.l	a0,a6
	add.w	#8,a0
	move.w	#SPRITE_DEPTH-1,d2
repeat
OFF	set	0
	REPT	SPRITE_WIDTH
	move.l	OFF(a0),(a1)+
;	move.l	#-1,OFF(a0)
OFF	SET OFF+4
	move.l	OFF(a0),(a1)+
;	move.l	#-1,OFF(a0)
OFF	SET OFF+4
	ENDR
	add.w	#160,a0
	dbf	d2,repeat

	add.w	#160*6,a0
	move.w	#SPRITE_DEPTH-1,d2
repeat2
OFF	set	0
	REPT	SPRITE_WIDTH
	move.l	OFF(a0),(a1)+
;	move.l	#-1,OFF(a0)
OFF	SET OFF+4
	move.l	OFF(a0),(a1)+
;	move.l	#-1,OFF(a0)
OFF	SET OFF+4
	ENDR
	add.w	#160,a0
	dbf	d2,repeat2
	move.l	a6,a0
	move.w	#(SPRITE_DEPTH*2)+8-1,d6
.loop	sub.w	d4,d4
	roxr.w	(a0)
	roxr.w	8(a0)
	roxr.w	16(a0)
	roxr.w	24(a0)
	roxr.w	32(a0)
	roxr.w	40(a0)
	roxr.w	48(a0)
	roxr.w	56(a0)
	add.w	#2,a0
	sub.w	d4,d4
	roxr.w	(a0)
	roxr.w	8(a0)
	roxr.w	16(a0)
	roxr.w	24(a0)
	roxr.w	32(a0)
	roxr.w	40(a0)
	roxr.w	48(a0)
	roxr.w	56(a0)
	add.w	#2,a0
	sub.w	d4,d4
	roxr.w	(a0)
	roxr.w	8(a0)
	roxr.w	16(a0)
	roxr.w	24(a0)
	roxr.w	32(a0)
	roxr.w	40(a0)
	roxr.w	48(a0)
	roxr.w	56(a0)
	add.w	#2,a0
	sub.w	d4,d4
	roxr.w	(a0)
	roxr.w	8(a0)
	roxr.w	16(a0)
	roxr.w	24(a0)
	roxr.w	32(a0)
	roxr.w	40(a0)
	roxr.w	48(a0)
	roxr.w	56(a0)
	add.w	#2,a0
	sub.w	#8,a0
	add.w	#160,a0
	dbf	d6,.loop
	dbf	d7,shift_loop
	rts

return_screen
	move.l	buffered,d0
	move.l	scr_now,a0
	add.l	d0,a0
	lea	logo+34,a1
	add.l	d0,a1
	REPT	SPRITE_DEPTH
	movem.l	(a1),d0-d7/a2-a3
	movem.l	d0-d7/a2-a3,(a0)
	lea	160(a0),a0
	lea	160(a1),a1
	ENDR
	rts

disc_number
	move.l	table_pos,a0
	cmp.w	#-1,(a0)
	bne.s	.no_reset
	lea	sine,a0
	move.l	a0,table_pos
.no_reset
	moveq	#0,d0
	move.l	d0,d1
	move.l	d0,d2
	move.w	(a0)+,d0	;word/offset
	move.w	(a0)+,d1	;y offset (post*160)
	move.l	a0,table_pos
	move.b	d0,d2
	lsr.w	#4,d0		;word offset 
	lsl.w	#3,d0		;*8
	add.w	d1,d0
	move.l	last_position,buffered
	move.l	d0,last_position

	move.l	scr_now,a0
	add.l	d0,a0
	lea	pov,a1		;grafix
	and.w	#$f,d2
	mulu	#(8*SPRITE_WIDTH*SPRITE_DEPTH),d2
	add.l	d2,a1		;grafix
	add.l	d2,a1		;mask
	lea	8*SPRITE_WIDTH*SPRITE_DEPTH(a1),a2	;masks
	move.w	#SPRITE_DEPTH-1,d7
.loop
	REPT	SPRITE_WIDTH
	move.l	(a2)+,d1	;mask data
	move.l	(a0),d0		;screen data
	and.l	d1,d0
	or.l	(a1)+,d0
	move.l	d0,(a0)+

	move.l	(a2)+,d1
	move.l	(a0),d0
	and.l	d1,d0
	or.l	(a1)+,d0
	move.l	d0,(a0)+
	ENDR
	add.w	#160-(SPRITE_WIDTH*8),a0
	dbf	d7,.loop
	rts


scroll	move.l	scr_now,a6
	add.l	#160*230,a6
	movem.l	black,d0-d7/a0-a5
OFF	set 0
	REPT	120
	movem.l	d0-d7/a0-a5,OFF(a6)
OFF	set	OFF+56
	ENDR

	move.w	sine_number,d0
	cmp.w	sine_count,d0
	blt.s	.no_reset
	moveq	#0,d0
	move.w	d0,sine_number
.no_reset
	add.w	d0,d0
	lea	sine_table,a1
	add.w	d0,a1
	move.w	(a1),d0
	lsl.l	#5,d0
	move.w	d0,d1
	lsl.l	#2,d0
	add.l	d1,d0
	add.w	#1,sine_number
	move.l	scr_now,a1
	add.l	#160*230,a1
	add.w	d0,a1
	move.l	a1,last_scroll
	lea	font_offsets,a2
	lea	font,a3
	move.l	scroll_pointer,a4
	move.l	a4,a5
	moveq	#40,d5
	move.w	char_offset,d6
next_char
	move.b	(a5),d7		;get a letter
	sub.b	#32,d7		;rid of ASCII
	ext.w	d7

	moveq	#0,d0
	move.l	a3,a0
	move.b	(a2,d7),d0
	mulu	#31*4*4,d0	;char depth * 4 *4
	add.w	d0,a0
	move.w	d6,d0
	mulu	#31*4,d0		;character depth * 4 (31*4)
	add.w	d0,a0
.column
OFF	set	0
	REPT	31
	move.l	(a0)+,d0
	movep.l	d0,OFF(a1)
OFF	set	OFF+160
	ENDR

	subq.w	#1,d5
	beq.s	.finish

	add.w	#1,a1		;lower byte of word
	tst.w	d4
	beq.s	.skip		;if D4=0 then do next word
	add.w	#6,a1		;else goto next word on screen
.skip	not.w	d4
	addq.w	#1,d6		;character offset
	and.w	#3,d6
	bne	.column

	addq.w	#1,a5		;scroll pointer
	tst.b	(a5)		;is end of text?
	bpl	next_char	;NO!
	lea	scroll_text,a5	;do reset scrolline
	bra	next_char
.finish
	addq.w	#1,char_offset
	and.w	#3,char_offset
	bne.s	.end
	addq.w	#1,a4
	tst.b	(a4)
	bpl.s	.end
	lea	scroll_text,a4
.end	move.l	a4,scroll_pointer
	rts

vsync	move.w	#-1,vsync_flag
vs	tst.w	vsync_flag
	bne.s	vs
	rts


flush	btst.b	#0,$fffffC00.w	;flush keyboard
	beq.s	flush2
	move.b	$fffffc02.w,d0
	bra.s	flush
flush2	rts

set_super:
	clr.l	-(sp)
	move.w	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
	move.l	d0,stack_save
	rts

user_mode:
	move.l	stack_save,-(sp)
	move.w	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
	rts

save_pal
	lea	old_pal,a0
	lea	$ffff8240,a1
set_p	movem.l	(a1),d0-d7
	movem.l	d0-d7,(a0)
	rts

restore_pal
	lea	old_pal,a1
	lea	$ffff8240.w,a0
	bra.s	set_p

get_base:
	move.w	#3,-(sp)
	trap	#14
	addq.l	#2,sp
	move.l	d0,old_base
	rts

calc_screen
	move.l	#screens,d0
	clr.b	d0
	move.l	d0,scr_now
	move.l	d0,d1
	add.l	#49152,d1
	eor.l	d0,d1
	move.l	d1,scr_xor


set_screen
	move.l	scr_now,d6
	move.l	scr_xor,d7
	eor.l	d7,d6
	move.l	d6,scr_now
	lsr.l	#8,d6
	lea	$ffff8201.w,a6
	movep.w	d6,(a6)
	rts


set_med_rez
	move.w	#1,-(sp)
	bra.s	set_rez

set_low_rez:
	clr.w	-(sp)
set_rez:
	move.l	a0,-(sp)
	move.l	a0,-(sp)
	move.w	#5,-(sp)
	trap	#14
	add.l	#12,sp
	rts

cls	move.l	screen_base,a0
	move.w	#32000/4-1,d0
.cls	clr.l	(a0)+
	dbf	d0,.cls
	rts

show_pic
;move pic pal into storage
	movem.l	pic+2,d0-d7
	movem.l	d0-d7,picture_pal

;move logo on top of pic
	lea	pic+34,a1
	REPT	(160/4)
	clr.l	-(a1)
	ENDR

	lea	logo+(160*27)+68,a0
	move.w	#27-1,d0	;logo depth
.loop	REPT	(160/4)
	move.l	-(a1),-(a0)
	ENDR
	dbf	d0,.loop

	move.l	scr_now,d6
	move.l	d6,a1
	move.l	scr_xor,d7
	eor.l	d7,d6
	move.l	d6,a2

	lea	logo+34,a0
	move.w	#(32000+(160*27))/4-1,d0
sho	move.l	(a0),(a1)+
	move.l	(a0)+,(a2)+
	dbf	d0,sho

	movem.l	picture_pal,d0-d7		;recover pal and set new colours
	movem.l	d0-d7,$ffff8240.w
	rts


v_sync	movem.l	d0-d3/a0-a3,-(sp)
	move.w	#$25,-(sp)
	trap	#14
	addq.l	#2,sp
	movem.l	(sp)+,d0-d3/a0-a3
	rts


black_out
	movem.l	black,d0-d7
	movem.l	d0-d7,$ffff8240.w
	rts

set_for_border
	ori.w	#$700,sr
	move.l	$70,old70
	move.l	$120,old120
	move.l	$118.w,old118
	move.b	$fffffa11.w,save1
	move.b	$fffffa21.w,save2
	move.b	$fffffa07.w,save3
	move.b	$fffffa09.w,save4
	move.b	$fffffa0f.w,save5
	move.b	$fffffa13.w,save6
	move.b	$fffffa1b.w,save7
	move.b	$fffffa1d.w,save8

	clr.l	$4da
	MOVE.L	#new70,$70.W
	MOVE.L	#null,$120.W

	clr.b	$fffffa1d.w
	andi.b	#$df,$fffffa09.w
	andi.b	#$fe,$fffffa07.w
	bclr	#3,$fffffa17.w
	move.l	#new120,$120.w
	move.l	#new70,$70.w
	move.l	#new118,$118.w
	ori.b	#1,$fffffa07.w
	ori.b	#1,$fffffa13.w
	MOVE.W	#$2300,SR
	rts


isr_off	bsr	vsync
	move.w	#$2700,sr
	move.l	old120,$120.w
	move.l	old118,$118.w
	move.l	old70,$70.w
	move.b	save3,$fffffa07.w
	move.b	save6,$fffffa13.w
	move.b	save4,$fffffa09.w
	move.b	save7,$fffffa1b.w
	move.b	save8,$fffffa1d.w
	move.b	save2,$fffffa21.w
	move.b	save1,$fffffa11.w
	move.b	save5,$fffffa0f.w
	lea	$ffff8800.w,a0
	move.b	#7,(a0)
	move.b	(a0),d1
	ori.b	#$3f,d1
	moveq.w	#$c,d0
.loop	move.b	d0,(a0)
	clr.b	2(a0)
	dbf	d0,.loop
	move.b	#7,(a0)
	move.b	d1,2(a0)
	move.w	#$2300,sr
	rts

set_bounce_count
	lea	sine_table,a0
	moveq.l	#0,d0
.loop	add.w	#1,d0
	cmp.w	#-1,(a0)+
	bne.s	.loop
	sub.w	#1,d0
	move.w	d0,sine_count
	rts

get_key	move.w	#7,-(sp)
	trap	#1
	addq.l	#2,sp
	rts


intro	lea	intro_pic+34,a0
	move.l	screen_base,a1
	move.w	#32000/4-1,d0
.loop	move.l	(a0)+,(a1)+
	dbf	d0,.loop
	lea	intro_pic+2,a1
	bsr	fadein
	move.w	#5000,d7
.pau	move.w	#11,-(sp)
	trap	#1
	addq.l	#2,sp
	tst.l	d0
	bmi.s	.ex
	dbf	d7,.pau
.ex	lea	black,a1
	bsr	fadein
	rts

;A0=SOURCE PALETTE 	A1=TARGET PALETTE
fadein	MOVE #7,D6
	MOVE.L A1,A2
FADEIN1	LEA	PALREG,A0	;LEA PALREG+2,A0; TARGET IN A1
	move.w	#16-1,d7
FADEIN2	BSR	MODIFY
	addq.w	#2,a0
	addq	#2,a1
	dbf	d7,FADEIN2
	move.w	#4,d0
	BSR	WAIT
	MOVE.L A2,A1
	DBRA	D6,FADEIN1
	RTS

WAIT:	bsr	v_sync
	DBRA D0,WAIT
	RTS

PALREG:	EQU $FF8240

MODIFY:	MOVE (A0),D0 ;PALREG
	MOVE (A1),D1 ;TARGET
	MOVE D0,D4 ;NEW COL
	MOVE D0,D2
	MOVE D1,D3
	AND #$7,D2
	AND #$7,D3
	CMP D2,D3
	BEQ.S MOK1
	BMI.S MDN1
	ADDQ #1,D4
	BRA.S MOK1
 MDN1:	SUBQ #1,D4
 MOK1:	MOVE D0,D2
	MOVE D1,D3
	AND #$70,D2
	AND #$70,D3
	CMP D2,D3
	BEQ.S MOK2
	BMI.S MDN2
	ADD #$10,D4
	BRA.S MOK2
 MDN2:	SUB #$10,D4
 MOK2:	MOVE D0,D2
	MOVE D1,D3
	AND #$700,D2
	AND #$700,D3
	CMP D2,D3
	BEQ.S MOK3
	BMI.S MDN3
	ADD #$100,D4
	BRA.S MOK3
 MDN3:	SUB #$100,D4
 MOK3:	MOVE D4,(A0)
	RTS




*********************************
*		ISRs		*
*********************************
new120	clr.b	$fffffa1b.w
	move.l	d0,-(sp)
	moveq	#$26,d0
.aaa	dbf	d0,.aaa
	move.b	#0,$ffff820a.w
	moveq	#1,d0
.bbb	dbf	d0,.bbb
	move.b	#2,$ffff820a.w
	move.l	fontpal,$ffff8240.w
	move.l	fontpal+4,$ffff8240+4.w
	move.l	fontpal+8,$ffff8240+8.w
	move.l	fontpal+12,$ffff8240+12.w
	move.l	fontpal+16,$ffff8240+16.w
	move.l	fontpal+20,$ffff8240+20.w
	move.l	fontpal+24,$ffff8240+24.w
	move.l	fontpal+28,$ffff8240+28.w
	move.l	(sp)+,d0
null	rte

new70	move.w	#$2700,sr
	movem.l	d0-d7,-(sp)
	movem.l	picture_pal,d0-d7
	movem.l	d0-d7,$ffff8240.w
	movem.l	(sp)+,d0-d7
	move.w	d0,-(sp)
	move.w	#$57e,d0
.aaa	dbf	d0,.aaa
	clr.b	$ffff820a.w
	moveq	#1,d0
.bbb	dbf	d0,.bbb
	move.b	#2,$ffff820a.w
	move.w	(sp)+,d0
	movem.l	d0-d7/a0-a6,-(sp)
	clr.w	vsync_flag
	tst.w	zero_counter
	beq.s	.not_z
	sub.w	#1,zero_counter
.not_z	clr.b	$fffffa1b.w
	move.b	#228,$fffffa21.w
	move.b	#8,$fffffa1b.w
	jsr	tune+8
	movem.l	(sp)+,d0-d7/a0-a6
	rte

new118	move.w	#$2500,sr
	move.b	$fffffc02.w,key
	bclr	#6,$fffffa11.w
	rte



********
* Data *
********
	SECTION DATA
fontpal	incbin	font.col


scroll_pointer	dc.l	scroll_text+7
scroll_text
 dc.b "                             "
 dc.b "PERSISTENCE OF VISION PACKED DEMO DISC 106.            "
 dc.b "ALL CODE BY abc, GRAFIX BY OZ AND MUSIC BY MAD MAX FROM ATOMINO "
 dc.b "RIPPED BY MUG UK.       RELEASE DATE 1ST MARCH 1992.        "
 DC.B "        BEFORE ALL THE USUAL WAFFLE I WOULD LIKE TO SAY THANKS "
 DC.B "TO A FEW PEOPLE....     BORIS FOR ALL HIS RECENT WORK,   OZ FOR "
 DC.B "YET ANOTHER DISC OF NEW PICTURES,   PROPHECY PD FOR ALL THE RECENT "
 DC.B "STUFF,   TOWER PD FOR HIS DISTRIBUTION AND COLLECTING,   "
 DC.B "KGB IN FRANCE FOR THE 'FILLER' SCREENS,  MUG UK FOR THE MUSIC "
 DC.B "AND OTHER BITS AND PIECES   AND FINALLY   A BIG "
 DC.B "THANKS TO LEO AT W.J.S. DESIGN FOR THE AMIGA DEVELOPMENT SYSTEM "
 DC.B "THAT BLEW MY AMIGA UP!!!!            WHAT IS THE PD SCENE COMING "
 DC.B "TO?      ONCE UPON A TIME IT WAS FUN TO WRITE STUFF BUT NOW IT "
 DC.B "SEEMS EVERYONE IS AGAINST HAVING FUN.   THIS RECENT CLAMP DOWN "
 DC.B "ON SAMPLE SOUND DEMOS, OKAY SO THE MATERIAL IS COPYRIGHT BUT "
 DC.B "DOES IT EFFECT THE RECORD SALES?      I DOUBT IT!      "
 DC.B "ALL THIS 'COPYRIGHT' IS A LOAD OF SHITE AS "
 DC.B "MATERIAL HAS BEEN STOLEN FROM PEOPLE FOR YEARS IN THE RECORD "
 DC.B "INDUSTRY.   IN A RECENT RAID ON A PD LIBRARY THERE WAS QUITE "
 DC.B "A FEW SAMPLED SOUND DEMOS TAKEN HOWEVER THEY WERE ALL CRAP ONES. "
 DC.B "  IT'S OBVIOUS THAT THE TRADING STANDARDS PEOPLE HAVEN'T A CLUE."
 DC.B "   WE HAVE DONE 3 OF THE BEST SAMPLE SOUND DEMOS EVER AND THEY "
 DC.B "WEREN'T TAKEN!       AS IT'S GETTING A BIT MORE RISKY TO "
 DC.B "PRODUCE SAMPLE SOUND DEMOS WE ARE NOW SEAKING WRITTEN PERMISSION "
 DC.B "FROM A CERTAIN WELL KNOWN 'INDIE' GROUP TO PRODUCE AS MANY "
 DC.B "SAMPLE SOUND DEMOS AS WE CAN.    THE PERMISSION SHOULD "
 DC.B "BE A FORMALITY AS I KNOW BOTH MEMBERS PERSONNALLY AND MY "
 DC.B "BROTHER WORKS FOR THEM (PLUS ONE BAND MEMBER HAS AN STE!).   "
 DC.B "                 THERE ARE NO GREETS HERE SO YOU CAN PRESS A KEY NOW!     "
 DC.B "        THIS IS DISC 106 IN OUR COLLECTION OF PACKED DEMOS AND AS "
 DC.B "THERE ARE 3 MAJOR CREWS PACKING DEMOS I WOULD LIKE TO TELL YOU "
 DC.B "WHAT OUR OBJECTIVES ARE;-     "
 DC.B "    THE IDEA WAS TO GET MORE DEMOS ONTO ONE DISC TO SAVE "
 DC.B "DISCS.    IT STARTED WELL AS MANY EARLY DEMOS WERE ON SINGLE SIDED "
 DC.B "DISCS BUT RECENTLY DEMOS ARE ON DOUBLE SIDED AND MANY DEMOS ARE "
 DC.B "NOW PACKED.  THE RESULT IS THAT WE CANNOT FIT MANY DEMOS ON "
 DC.B "ONE DISC AND SO WE USE 'FILLERS' TO COMPLETELY FILL THE DISC UP. "
 DC.B "   THE FILLERS ARE SMALL DEMOS OR INTROS THAT ONLY HAVE ONE "
 DC.B "SCREEN.     AS OUR DISC COLLECTION STARTED TO GROW I GOT "
 DC.B "LAZY AND STARTED THROWING ANY OLD DEMO ON WHICH MADE THE "
 DC.B "OVERALL QUALITY OF P.O.V. DISCS GO DOWN.     OVER A YEAR AGO "
 DC.B "I STARTED A NEW JOB WHICH LEFT LESS TIME TO DO MENUS BUT "
 DC.B "IT DID MAKE ME THINK MORE CAREFULLY WHAT MATERIAL TO PUT "
 DC.B "ON THE DISC.     YOU PROBABLY NOTICED THAT SINCE ABOUT DISC 80 THE "
 DC.B "MENUS HAVE GOT BETTER AND THE DEMOS WE PUT ON THEM HAVE GOT "
 DC.B "MORE INTERESTING.     I STILL HAVE QUITE A FEW OLD DEMOS "
 DC.B "TO PUT ON DISCS PLUS SOME NICE MEGADEMOS SO STICK WITH US. "
 DC.B "                OKAY GO AHEAD AND MAKE MY DAY, PRESS A KEY. "
 DC.B "                                                        "
 DC.B "                                                      WRAP   "
 dc.b $ff
	even

char_offset	dc.w	0
font		dcb.b	31*4*4,0
		incbin	font.fnt
font_offsets:
;          !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /
 dc.b	0,34,43,00,00,00,00,35,28,29,45,00,31,32,33,00

;        0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @
 dc.b	37,38,39,40,41,42,43,44,45,46,27,00,00,00,00,30,00

;        A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q
 dc.b	01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17

;        R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _  `  a  b  c
 dc.b	18,19,20,21,22,23,24,25,26,40,00,41,00,47,00,47,48,49

;        d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u
 dc.b	00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
	even
last_scroll	dc.l	0
sine_count	dc.w	0
sine_number	dc.w	0
sine_table
	dc.w	0,0,0,0,0,0
	dc.w	1,1,1,1,1
	dc.w	2,2,2,2
	dc.w	3,3,3
	dc.w	4,4
	dc.w	5
	dc.w	6
	dc.w	8
	dc.w	10
	dc.w	8
	dc.w	6,5
	dc.w	4,4
	dc.w	3,3,3
	dc.w	2,2,2,2
	dc.w	1,1,1,1,1
	dc.w	$ffff
black	dcb.b	64,0

key_codes
	dc.b	2,0	;key 1
	dc.b	3,1
	dc.b	4,2
	dc.b	5,3	;key 4
	dc.b	6,4	;key 5
	dc.b	7,4	;key 6

	dc.b	$6d,0	;keypad 1
	dc.b	$6e,1
	dc.b	$6f,2
	dc.b	$6a,3	;keypad 4
	dc.b	$6b,3	;keypad 5
	dc.b	$6c,3	;keypad 6
	dc.b	$ff
	even

******************** bob **************
last_position	dc.l	0
buffered	dc.l	0
table_pos	dc.l	sine
sine	incbin	sine1.dat
	dc.w	$ffff,$ffff
	even


filenames	dc.l	exec1,exec2,exec3,exec4,exec5,exec6
exec1	dc.b	"OMEGA",0
	even
exec2	dc.b	"SHTROUM",0
	even
exec3	dc.b	"BIG_BLU",0
	even
exec4	dc.b	"PARADISE",0
	even
exec5	dc.b	"AGGRES_2",0
	even
exec6	dc.b	"COPIER.POV",0
	even

;*************************
tune	incbin	atomino2.mus
intro_pic
	incbin	intro.pi1
pov_pic	incbin	pov.pi1

logo	incbin	pov_cool.dat
pic	incbin	pov106.PI1

	even


	SECTION BSS

old70	ds.l	1
old120	ds.l	1
old118	ds.l	1

picture_pal	ds.b	32

screen_base	ds.l	1

scr_now		ds.l	1
scr_xor		ds.l	1

old484		ds.w	1
stack_save	ds.l	1

vsync_flag	ds.w	1

old_base	ds.l	1
hertz_switch	ds.w	1

zero_counter	ds.w	1



save1	ds.b	1
save2	ds.b	1
save3	ds.b	1
save4	ds.b	1
save5	ds.b	1
save6	ds.b	1
save7	ds.b	1
save8	ds.b	1
	even
key	ds.b	1
	even
pov	ds.b	(SPRITE_DEPTH*(SPRITE_WIDTH*8)*16)*2
old_pal	ds.b	32
	ds.b	256
screens	ds.b	49152
	ds.b	49152
stopper