****************
* P.O.V. 45    *
****************

	bsr	set_super

wait_for_drive
	move.w	$ffff8604.w,d0
	btst	#7,d0
	bne.s	wait_for_drive

	move.b	#$12,$fffffc02.w
	bsr	save_pal
	bsr	get_base
	bsr	calc_screen
	move.l	screen_base,a0	;screen_base
	bsr	set_low_rez
	bsr	clear_below_screen
	move.b	$484,old484
	clr.b	$484

;Music from INNER CIRCLE menu
; Ripped by MAC SYS DATA
	move.l	#1,D0
	jsr	tune
	bsr	set_palette
	bsr	set_for_border
	bsr	vsync
	bsr	show_pic
	bsr	vsync
	move.b	#0,$fffffc02.w
main_loop
	bsr	vsync
;	move.w	#$123,$ffff8240.w
	bsr	scroll
;	move.w	pic+2,$ffff8240.w
	move.b	$fffffc02.w,d0

	cmp.b	#01,d0		;escape
	beq	exit

	cmp.b	#$b,d0		;0 key
	bne.s	not_zero
	tst.w	zero_counter
	bne.s	aa
	eor.w	#$123,bor+2
	eor.w	#$ffff,hertz_switch
	move.w	#10,zero_counter
	bra.s	main_loop

not_zero
	tst.w	zero_counter
	beq.s	car
aa	sub.w	#1,zero_counter

car	cmp.b	#$53,d0
	beq	do_reset
	cmp.b	#2,d0		;1 key
	blt.s	main_loop
	cmp.b	#5,d0		;4 key
	bge	main_loop	

	move.l	d0,-(sp)
	bsr	isr_off
	move.l	old_base,a0	;screen_base
	bsr	set_low_rez
	lea	$ffff8240.w,a1
	clr.l	(a1)+
	clr.l	(a1)+
	clr.l	(a1)+
	clr.l	(a1)+
	clr.l	(a1)+
	clr.l	(a1)+
	clr.l	(a1)+
	clr.l	(a1)+

	move.l	(sp)+,d0
	and.l	#$ff,d0
	lea	filenames,a6
	sub.b	#2,d0
	mulu	#14,d0
	add.w	d0,a6
	move.l	old_base,a0
	move.l	(a6)+,(a0)+
	move.l	(a6)+,(a0)+
	move.l	(a6)+,(a0)+
	move.w	(a6)+,(a0)

	tst.w	hertz_switch
	beq.s	hz50
	eor.b	#2,$ffff820a.w
hz50:
	bsr	user_mode
	clr.w	-(sp)
	trap	#1

do_reset
	move.l	4,a0
	jmp	(a0)
exit:
	bsr	isr_off
	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
	addq.l	#4,sp
	rts

***************
* Subroutines *
***************
scroll:	move.l	screen_base,a1
	add.w	#160*204+2,a1
	lea	font_offsets,a2
	lea	font,a3
	move.l	scroll_pointer,a4
	move.l	a4,a5

	moveq	#0,d4
	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	#120,d0		;30
	add.w	d0,a0
	move.w	d6,d0
	mulu	#30,d0		;char depth 4 bytes * 30 deep
	add.w	d0,a0

.column
OFF	set	0
	REPT	30
	move.b	(a0)+,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	#$ffff,vsync_flag
vs:	tst.w	vsync_flag
	bne.s	vs
	rts

set_super:
	clr.l	-(sp)		;set supervisor mode
	move.w	#32,-(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,a1
	lea	$ffff8240,a0
	move.w	#16-1,d0
save_p:
	move.w	(a0)+,(a1)+
	dbf	d0,save_p
	rts

restore_pal:
	lea	old_pal,a0
	bra.s	set_p

set_palette:
	lea	pic+2,a0
set_p:	lea	$ffff8240.w,a1
	movem.l	(a0),d0-d7
	movem.l	d0-d7,(a1)
	rts

get_base:
	move.w	#3,-(sp)
	trap	#14
	addq.l	#2,sp
	move.l	d0,old_base
	rts

calc_screen:
	lea	screen,a0
	move.l	a0,d0
	clr.b	d0
	move.l	d0,screen_base
	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	(sp),-(sp)
	move.w	#5,-(sp)
	trap	#14
	add.l	#12,sp
	rts

show_pic:
	lea	position_table,a2
	move.w	#500/4-1,d0
.loop
	movem.l	d0/a0-a1,-(sp)
	bsr	v_sync
	bsr	print
	bsr	print
	bsr	print
	bsr	print
	movem.l	(sp)+,d0/a0-a1
	dbf	d0,.loop
	rts

print
	lea	pic+34,a0
	move.l	screen_base,a1
	moveq	#0,d0
	moveq	#0,d1
	move.b	(a2)+,d1
	move.b	(a2)+,d0
	mulu	#160*8,d0
	mulu	#8,d1
	add.w	d1,d0
	add.w	d0,a0
	add.w	d0,a1
	REPT	8
	move.w	(a0),(a1)
	move.w	2(a0),2(a1)
	move.w	4(a0),4(a1)
	move.w	6(a0),6(a1)
	add.w	#160,a0
	add.w	#160,a1
	ENDR
	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

clear_below_screen:
	move.l	screen_base,a0
	add.w	#32000,a0
	move.w	#20,d0
clr1:	move.w	#8*40-1,d1
clr2:	clr.l	(a0)+
	dbf	d1,clr2
	dbf	d0,clr1
	rts

set_for_border:
	ori.w	#$700,sr
	move.l	$70,old70
	move.l	$120,old120
	move.b	$fffffa07,olda07
	move.b	$fffffa09,olda09
 	move.b	$fffffa17,olda17
	move.b	$fffffa1b,olda1b
	move.b	$fffffa21,olda21

	MOVE.L	#vert_isr,$70.W
	MOVE.L	#horiz_isr,$120.W

	MOVE.B	#1,$FFFFFA07.W
	CLR.B	$FFFFFA09.W
	BCLR	#0,$FFFFFA0F.W
	BSET	#0,$FFFFFA13.W
	BCLR	#3,$FFFFFA17.W
	CLR.B	$FFFFFA1B.W
	CLR.B	$FFFFFA21.W
	MOVE.W	#$2300,SR
	rts


isr_off:
	bsr	vsync
	move.w	#$2700,sr
	move.l	old120,$120
	move.l	old70,$70

	MOVE.B	olda07,$FFFFFA07
	MOVE.B	olda09,$FFFFFA09
	MOVE.B	olda17,$FFFFFA17
	move.b	olda1b,$fffffa1b
	move.b	olda21,$fffffa21
	MOVE.W	#$2300,SR

endmusic:
	lea	$ff8800,a0
	move.l	#$8080000,(a0)
	move.l	#$9090000,(a0)
	move.l	#$a0a0000,(a0)
	rts

*********
* ISRs  *
*********
vert_isr:
	movem.l	d0-d7/a0-a6,-(sp)	;preserve regs
	movem.l	pic+2,d0-d7
	movem.l	d0-d7,$ffff8240.w
	move.b	#49,counter	;49 lines at 4 pixels each ISR
	move.l	#horiz_isr,$120.W
	bsr	tune+6
	clr.w	vsync_flag
	movem.l	(sp)+,d0-d7/a0-a6
	move.b	#8,$fffffa1b.w
	move.b	#3,$fffffa21.w
	rte

horiz_isr:
	move.b	#4,$fffffa21.w	;4 lines per isr 
	move.l	#go_border,$120.w
	rte

go_border:
	subq.b	#1,counter
	beq.s	extended_scan
	rte

extended_scan:
	REPT	98
	nop
	ENDR
	clr.b	$ffff820a.w	;60 hertz
	REPT	31
	nop
	ENDR
	move.b	#2,$ffff820a.w	;back to 50 hertz
	move.l	#lower_border,$120.w
	rte

lower_border:
	clr.b	$fffffa1b.w	;DI all other interrupts
bor	move.w	#$000,$ffff8240.w
	lea	colours,a0
	move.w	#30-1,d0
.loop	move.w	(a0)+,$ffff8244.w
	REPT	121
	nop
	ENDR
	dbf	d0,.loop
	bclr	#0,$fffffa0f.w
	rte


********
* Data *
********
	SECTION DATA
colours
	dc.w	$200,$300,$400,$500,$600,$700,$710
	dc.w	$720,$730,$740,$750,$760,$770,$670
	dc.w	$570,$470,$370,$271,$172,$073,$074
	dc.w	$075,$076,$077,$067,$057,$047,$037
	dc.w	$027,$017
	dc.w	$0

screen_base:	dc.l	0
old484:	dc.w	0
stack_save:	dc.l	0
vsync_flag:	dc.w	0
old70:	dc.l	0
old120:	dc.l	0
olda07:	dc.b	0
olda09:	dc.b	0
olda17:	dc.b	0
olda1b:	dc.b	0
olda21:	dc.b	0
	even
old_base:	dc.l	0
counter:	dc.w	0
hertz_switch	dc.w	0
zero_counter	dc.w	0

scroll_pointer:	dc.l	scroll_text+7
scroll_text:
 DC.B "                    "
 dc.b "PERSISTENCE OF VISION PACKED DEMO DISC 45.          "
 dc.b "ALL CODING BY MAC SYS DATA, GRAFIX BY OZ AND MUSIC BY THE "
 dc.b "EXCELLENT COUNT ZERO RIPPED FROM THE INNER CIRCLE DECADE DEMO MENU BY "
 dc.b "ME (MAC SYS DATA).      HA-HA, IT'S DISC 45 AND THE SECOND DISC TONIGHT! "
 dc.b "   I MAY NOT COMPLETE THIS DISC TONIGHT AS I'M ABOUT TO GO TO THE "
 dc.b "PUB 'CAUSE IT'S A SATURDAY (1-12-90). IN FACT I'M GOING NOW!   BYE.            "
 DC.B "                                                                   "
 DC.B "HELLO AGAIN, WELL IT IS NOW SUNDAY THE 2-12-90 AND IT'S 11:30 IN THE "
 DC.B "MORNING.     OH I'VE GOT A HEADACHE!        I'VE JUST REALISED THAT "
 DC.B "I HAVE ABOUT 150 DISCS PILED ON AND AROUND MY STE.    I DON'T "
 DC.B "KNOW WHERE THEY APPEAR FROM BUT IT'S A BLOODY HARD JOB TRYING "
 DC.B "TO PUT THEM IN BOXES.     WHAT'S THIS?      OH, YEH - P.O.V. 43 WAITING "
 DC.B "TO BE TESTED!       TO MY RIGHT I HAVE A SMALL PILE OF DISCS THAT "
 DC.B "ARE WAITING FOR A HOME, THEY CONTAIN DEMOS THAT I'VE PACKED - HERE ARE "
 DC.B "A FEW TITLES.. (I KNOW I'VE DONE THIS BEFORE BUT THERE ARE A COUPLE OF EXTRA "
 DC.B "DEMOS IN THE PILE).....  MILLI VANILLA (1 MEG),     ZOOLOOK (1 MEG),     "
 DC.B "PREDATOR (1 MEG),     SLEDGE HAMMER (1 MEG),     VIC DEMO 1,     "
 DC.B "ODU (CRAP),     MR SPOONS,     JUNGLE STE,     "
 DC.B "ABC DEMO 2,     MOTLEY CREW DEMO,     "
 DC.B "TWINS 7,     CHARLIE CHAPLIN DEMO (CRAP),     "
 DC.B "ANTI-SOCIALS     AND     ABC DEMO 8.      IF "
 DC.B "YOU COUNTED THERE ARE 14 DEMOS WAITING BUT AS THE MENUS SEEM TO HAVE "
 DC.B "TAKEN A BIT OF A DIVE IN THE QUALITY DEPARTMENT I THINK I BETTER "
 DC.B "CODE UP A DECENT MENU FOR DISC 46!    THE REASON FOR THE LACK "
 DC.B "OF MOVEMENT ON THE LAST 6 DISCS IS THAT I LOOKED THROUGH MY "
 DC.B "PILE OF DEMOS AND ADDED THE FILE SIZES UP TO EQUAL 750K WHICH "
 DC.B "LEFT ABOUT 50K FOR A MENU.   IF I WANT TO MOVE THINGS AROUND "
 DC.B "IT TAKES MORE DISC SPACE UP, I HAD CODED A BRILLIANT MENU FOR "
 DC.B "THIS DISC BUT IT WOULD ONLY PACK TO 56K AND SO IT WOULDN'T FIT ON. "
 DC.B "    I FANCY DOING A VECTOR BOBS MENU WITH 3D BOBS BUT I DON'T THINK "
 DC.B "ONE WILL APPEAR FOR A WHILE 'CAUSE I WANT TO GET TO DISC 50 BY "
 DC.B "XMAS!               A COUPLE OF DAYS AGO I HAD A PROBLEM WITH "
 DC.B "GENST 2 AGAIN - THIS TIME IT KEPT WRITING THE OBJECT CODE (PRG) "
 DC.B "FILE TO ANY FOLDER ON THE HARD DISC SO I COPIED PARTITION 'E' "
 DC.B "TO 'D' AND WIPED 'E' (OKAY?).   I THEN COPIED 'D' TO 'E' SO THAT "
 DC.B "'E' WOULD BE IN CONSECUTIVE SECTORS.  I THOUGHT THAT IT MAY HELP "
 DC.B "WITH GENST AS IT DOES SEEM TO GO WONKY WHEN I'VE LOADS OF "
 DC.B "FOLDERS AND THINGS DELETED AND MOVED AROUND.    WELL AS I "
 DC.B "MOVED FILES (COPIED AND DELETED ON AN STE) I GOT THE MESSAGE "
 DC.B "THAT FILE EXISTS OVERWRITE?   I ANSWERED YES BUT THOUGHT IT STRANGE. "
 DC.B "HALF WAY THROUGH THE MOVES I THOUGHT I'D BETTER REBOOT THE MACHINE "
 DC.B "SO WHEN THE HARD DISC HAD STOPPED I SWITCHED OFF AND ON.   ONCE "
 DC.B "MY STE HAD BOOTED UP I FOUND TO MY HORROR THAT ALL THE PROGRAMS "
 DC.B "I HAD COPIED TO 'E' HAD VANISHED.   I HAVE LOST APPROX 2 MEG OF "
 DC.B "CUSTOM PROGRAMS THAT I HAD WRITTEN THAT ALLOW ME TO PACK "
 DC.B "DEMOS.  I QUICKLY FOUND THE BACKUP DISCS THAT I HAVE AND REALISED "
 DC.B "THAT THE LAST BACKUP I HAD DONE WAS IN APRIL - ONLY 7 MONTHS AGO!  "
 DC.B "    AFTER A COUPLE OF HOURS LOOKING THROUGH DISC BOXES AND OTHER "
 DC.B "PARTITIONS I HAVE RECOVERED ABOUT 1.7 MEG WHICH LEAVES A COUPLE "
 DC.B "OF DEMOS AND ALL MY HACKING AND PACKING UTILITIES WHICH I'LL "
 DC.B "NOW HAVE TO WRITE AGAIN.    I HAD THE IDEA THAT AS I HAVE TO "
 DC.B "WRITE THEM AGAIN I WOULD TRY TO DO IT IN 'C' SO I COULD "
 DC.B "USE GEM AND SO MAKE A USER FRIENDLY VERSION. AS THE IDEA "
 DC.B "GREW I THOUGHT I'D MAKE A DEMO PACKING UTILITY THAT I COULD "
 DC.B "RELEASE ONTO THE PD CIRCUIT.  THE UTILITY WOULD ALLOW "
 DC.B "YOU TO PACK MASTERSOUND DEMOS BECAUSE THEY ARE ALWAYS THE "
 DC.B "SAME AND ARE VERY EASY TO PACK, I'LL START CODING AFTER XMAS "
 DC.B "AND HOPEFULLY LEARN 'C' AT THE SAME TIME!        I HAVE "
 DC.B "BEEN GIVEN A COPY OF THE MEDWAY BOYS VIRUS PROTECTOR 3 SO "
 DC.B "I'LL PUT THAT ON THE NEXT MENU (IF IT FITS).     "
 DC.B "I WAS GOING TO DO A UTILITY COMPILATION BUT A LOT OF PROGRAMS "
 DC.B "USE GEM SO I'D HAVE TO PUT AN AUTOGEM ON THE DISC AND AS "
 DC.B "ALL THE PRESENT AUTOGEM PROGRAMS BUGGER UP ON AN STE I'M NOW "
 DC.B "STUCK.         BORIS, WHERE'S YOUR AUTOGEM PROGRAM?       "
 DC.B "      RIGHT THERE ARE MENUS TO BE CODED AND DEMOS TO BE PACKED "
 DC.B "SO I'M GOING - UNTIL NEXT TIME IT'S MAC SYS DATA SIGNING OFF "
 DC.B "..... BYE!                              "
 DC.B "                             "
 dc.b $ff
	even
char_offset	dc.w	0
font:	dcb.b	120,0
	incbin	"1plane.fnt"
font_offsets:
 dc.b	0,41,43,0,0,0,0,46,44,45,0,0,38,42,39,48
 dc.b	27,28,29,30,31,32,33,34,35,36,40,0,0,0,0,47,0
 dc.b	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
 dc.b	41,0,42,0,0
	even
scroll_colour
	dc.w	$700,$600,$500,$400,$300,$200,$100
	dc.w	$100,$200,$300,$400,$500,$600,$700
	dc.w	$100,$200,$300,$400,$500,$600,$700

******* show pic data *********
position_table
	incbin	fill.dat
;*************************
tune:	incbin	menu.img
	even
pic	incbin	pov45.PI1
	even

filenames:
	dc.b	"ABC3.DEM",0,0,0,0,0,0
	dc.b	"LOTG.DEM",0,0,0,0,0,0
	dc.b	"COPIER.POV",0
	even
	SECTION BSS
old_pal:	ds.b	32
	ds.b	256
screen:	ds.b	32000
