*************************************************************************
*				P.O.V. 105				*
*				----------				*
*									*
* Written by: MAC SYS DATA						*
* 	Date: 23-12-91							*
* Assemble with GENST2 version 2.08 or higher				*
*									*
* Amiga tracker menu with lower border code (STE compatable as well!)	*
*									*
* Files needed:								*
*		KGB15.MOD						*
*		10_KHZ.FRQ						*
*		348.FNT 						*
*		PRE_POV1.PI1						*
*		POV105.PI1						*
*									*
*************************************************************************


	SECTION	TEXT

	bsr	menu
	move.b	#$8,$fffffc02.w
	move.b	old484,$484.w
	tst.w	hertz_flag
	beq.s	hz50
	and.b	#%11111101,$ffff820a.w	;60Hz
hz50	move.l	old_base,a0
	bsr	set_org_rez
	bsr	set_old_pal

	cmp.b	#-1,file_offset
	beq.s	exit

	moveq.l	#0,d0
	move.b	file_offset,d0
	lsl.w	#2,d0
	lea	filenames,a6
	add.w	d0,a6
	move.l	(a6),a6
	lea	$200.w,a0
	movem.l	(a6),d0-d3
	movem.l	d0-d3,(a0)

exit
	bsr	set_user
	clr.w	-(sp)
	trap	#1
*********** Valid keys for demos, disable any not used **********
key_codes
	dc.b	2,0	;key 1
	dc.b	3,1	;key 2
	dc.b	4,2	;key 3
;	dc.b	5,3	;key 4
;	dc.b	6,4	;key 5

	dc.b	$6d,0	;keypad 1
	dc.b	$6e,1	;keypad 2
	dc.b	$6f,2	;keypad 3
;	dc.b	$6a,3	;keypad 4
;	dc.b	$6b,3	;keypad 5
	dc.b	$ff
	even

filenames	dc.l	exec1,exec2,exec3

exec1	dc.b	"hackers.",0	;key 1
	even
exec2	dc.b	"$$filename.ext",0	;key 2
	even
exec3	dc.b	"COPIER.POV",0	;key 3
	even

menu	clr.l	-(sp)
	move.w	#$20,-(sp)
	trap	#1
	lea	6(sp),sp
	move.l	d0,stack_save
	move.b	#2,$ffff820a.w	;50Hz
	move.b	#$12,$fffffc02.w

	move.b	$484.w,old484
	and.b	#$fe,$484.w
	bsr	get_old_pal
	bsr	get_screen_base
	bsr	get_org_rez
	bsr	set_low_rez
	bsr	do_intro
	bsr	set_up

	move.l	#font_offsets,store_a2

	lea	pic+2,a1
	bsr	fadein

	jsr	SAVE_INTERRUPTS(PC)
	jsr	main

* return to here from module when exit

	move.b	#$8,$fffffC02.w
	jsr	REINSTALL_INTERRUPTS
	rts

set_user
	move.l	stack_save,-(sp)
	move.w	#$20,-(sp)
	trap	#1
	addq.l	#6,sp
	rts

SAVE_INTERRUPTS
	MOVE	#$2700,SR
	move.b	$fffffa15.w,olda15
	move.b	$fffffa09.w,olda09
	LEA	SAVE_INT(PC),A1
	LEA	TIMERA(PC),A2
	LEA	$FFFFFA00.W,A0
	MOVEP	$7(A0),D0
	MOVE	D0,(A1)
	MOVE.B	$13(A0),(A2)
	MOVE.B	$19(A0),1(A2)
	MOVE.B	#0,$19(A0)
	MOVE.B	$1F(A0),2(A2)
	MOVE.B	1(A2),$19(A0)
	MOVE.B	$17(A0),3(A2)
	LEA	$FFFF8200.W,A0
	MOVEP	$1(A0),D0
	MOVE	D0,4(A1)
	MOVE.B	$A(A0),6(A1)
	MOVE.B	$60(A0),7(A1)
	MOVEM.L	$40(A0),D0-D7
	MOVEM.L	D0-D7,8(A1)
	MOVE.L	$68.W,40(A1)
	MOVE.L	$70.W,44(A1)
	MOVE.L	$114.W,48(A1)
	MOVE.L	$118.W,52(A1)
	MOVE.L	$11C.W,56(A1)
	MOVE.L	$120.W,60(A1)
	MOVE.L	$134.W,64(A1)
	MOVE	#$2300,SR
	RTS

REINSTALL_INTERRUPTS
	MOVE	#$2700,SR
	move.b	olda09,$fffffa09.w
	move.b	olda15,$fffffa15.w
	LEA	SAVE_INT(PC),A1
	LEA	TIMERA(PC),A2
	MOVE.L	40(A1),$68.W
	MOVE.L	44(A1),$70.W
	MOVE.L	48(A1),$114.W
	MOVE.L	52(A1),$118.W
	MOVE.L	56(A1),$11C.W
	MOVE.L	60(A1),$120.W
	MOVE.L	64(A1),$134.W
	LEA	$FFFFFA00.W,A0
	MOVE.B	3(A2),$17(A0)
	MOVE	(A1),D0
	MOVEP	D0,$7(A0)
	MOVE.B	#0,$19(A0)
	MOVE.B	2(A2),$1F(A0)
	MOVE.B	1(A2),$19(A0)
	MOVE.B	(A2),$13(A0)
	LEA	$FFFF8200.W,A0
	MOVE	4(A1),D0
	MOVEP	D0,$1(A0)
	MOVE.B	6(A1),d7		;preserve Hz when exit...
	and.b	#%11111101,d7
	or.b	d7,$A(A0)
	MOVE.B	7(A1),$60(A0)
	MOVEM.L	8(A1),D0-D7
	MOVEM.L	D0-D7,$40(A0)
	MOVE	#$2300,SR
	RTS

main	MOVE	#$2700,SR
	JSR	INIT_module(PC)
	JSR	PLAY_module(PC)
	JSR	REINSTALL_INTERRUPTS(PC)
	rts

INIT_module
	LEA	SEQ(PC),A0
	LEA	PAT(PC),A1
	LEA	NBR_INS(PC),A2
;	LEA	module,A3
	MOVE	#$1D8,(A0)
	MOVE	#$258,(A1)
	MOVE	#15,(A2)
;	CMP.L	#'M.K.',$438(A3)    ;don't need this as it is a M.K. mod
;	BNE.s	REAL_DOCs_MODULE
	MOVE	#$3B8,(A0)
	MOVE	#$43C,(A1)
	MOVE	#31,(A2)
REAL_DOCs_MODULE
	LEA	module,A0
	ADD	SEQ(PC),A0
	MOVE.L	#$80,D0
	MOVEQ	#0,D1
INIT_module1
	MOVE.L	D1,D2
	SUBQ	#1,D0
INIT_module2
	MOVE.B	(A0)+,D1
	CMP.B	D2,D1
	BGT.S	INIT_module1
	DBF	D0,INIT_module2
	ADDQ.B	#1,D2
	SWAP	D2
	LSR.L	#6,D2
	LEA	module,A0
	ADD	PAT,A0
	ADD.L	D2,A0
	LEA	20+module,A1
	LEA	16+INS(PC),A2
	MOVE	NBR_INS(PC),D0
	SUBQ	#1,D0
INIT_module3
	MOVE.L	A0,4(A2)
	MOVEQ	#0,D1
	MOVE	22(A1),D1
	LSL.L	#1,D1
	MOVE.L	D1,(A2)
	ADD.L	D1,A0
	MOVEQ	#0,D1
	MOVE	24(A1),D1
	BEQ.s	INIT_module4
	SUBQ	#1,D1
INIT_module4
	MOVE	D1,12(A2)
	MOVEQ	#0,D1
	MOVE	28(A1),D1
	LSL.L	#1,D1
	CMP.L	#2,D1
	BNE.s	INIT_module5
	MOVEQ	#0,D1
INIT_module5
	SWAP	D1
	MOVE.L	D1,8(A2)
	LEA	30(A1),A1
	LEA	16(A2),A2
	DBRA	D0,INIT_module3

	LEA	16+INS(PC),A0
	MOVEQ	#0,D0
	MOVE	4+SAVE_INT(PC),D0
	LSL.L	#8,D0
	SUB.L	#$8000,D0
	MOVE.L	D0,A2
	MOVE	NBR_INS(PC),D0
	SUBQ	#1,D0
REVERSE
	MOVE.L	(A0),D1
	BEQ.s	END_REVERSE_THIS_INS
	SUBQ.L	#1,D1
	MOVE.L	D1,D2
	MOVE.L	4(A0),A3
REV_1
	MOVE.B	(A3)+,(A2)+
	DBRA	D1,REV_1
	MOVE.L	4(A0),A3
REV_2
	MOVE.B	-(A2),(A3)+
	DBRA	D2,REV_2
END_REVERSE_THIS_INS
	LEA		16(A0),A0
	DBRA	D0,REVERSE
	RTS

PLAY_module
MFP_RESET
	MOVE.B	#0,$FFFFFA07.W
	MOVE.B	#0,$FFFFFA09.W
YAMAHA_RESET
	MOVE.B	#0,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#1,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#2,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#3,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#4,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#5,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#7,$FFFF8800.W
	MOVE.B	#$FF,$FFFF8802.W
	MOVE.B	#8,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#9,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
	MOVE.B	#10,$FFFF8800.W
	MOVE.B	#0,$FFFF8802.W
ON	MOVE	#$2700,SR
	MOVE.b	#6,SPD+2
	MOVE.B	#6,SPEED
	MOVE.B	#1,POS
	LEA	module,A0
	ADD	SEQ(PC),A0
	LEA	-2(A0),A0
	MOVE.B	(A0)+,TRK
	MOVE.L	A0,MUS+2
	LEA	OFF2(PC),A0
	LEA	OFF2(PC),A1
	LEA	OFF2(PC),A2
	LEA	OFF2(PC),A3
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVEQ	#0,D2
	MOVEQ	#0,D3
	CLR.L	V0+2
	CLR.L	V1+2
	CLR.L	V2+2
	CLR.L	V3+2
	CLR.L	F0+2
	CLR.L	F1+2
	CLR.L	F2+2
	CLR.L	F3+2

	BCLR	#3,$FFFFFA17.W
	move.B	#$21,$FFFFFA07.W
	move.b	#0,$fffa09
	move.B	#$21,$FFFFFA13.W
	move.b	#0,$FFFFFA15.W
	move.b	#$11,$FFFFFA19.W
	move.b	#$3c,$FFFFFA1f.W

	MOVE.L	#AMIGA,$134.W
	MOVE.L	#VBL,$70.W
	move.l	#new120,$120.w

	MOVE	#$2300,SR
	CLR.B	KEY_PRESS

* REGISTERS LEFT ARE D4-D5-D6-D7/A4-A5-A6
main_loop
	jsr	vsync
raster	move.w	#$0,$ffff8240.w
	bsr	scroll
	tst.w	raster+2
	beq.s	.no_raster
	move.w	font_pal,$ffff8240.w	;code to stop hertz indicator
.no_raster				;bar from flickering when raster
	tst.w	zero_counter		;is shown
	beq.s	.check
	subq.w	#1,zero_counter
.check
	tst.w	help_counter
	beq.s	.check2
	subq.w	#1,help_counter

.check2
	move.b	$fffffc02.w,d7

	cmp.b	#01,d7		;escape
	beq.s	set_exit

	cmp.b	#$b,d7		;0 key
	beq.s	zero

	cmp.b	#$70,d7		;0 keypad
	beq.s	zero

car	cmp.b	#$53,d7
	beq.s	do_reset

	cmp.b	#$62,d7
	beq.s	help

not_help
	lea	key_codes,a6
.loop	cmp.b	#$ff,(a6)
	beq.s	main_loop
	cmp.b	(a6)+,d7
	beq.s	load
	move.b	(a6)+,d6
	bra.s	.loop
	bra.s	main_loop

zero	tst.w	zero_counter
	bne.s	car
	eor.w	#$3,font_pal
	eor.w	#-1,hertz_flag
	move.w	#10,zero_counter
	bra	main_loop

help	tst.w	help_counter
	bne.s	not_help
	eor.w	#$200,raster+2
	move.w	#10,help_counter
	bra	main_loop

set_exit
	move.b	#-1,file_offset
	bra	end_of_musix
load
	move.b	(a6),file_offset
	bra	end_of_musix


do_reset
	move.l	4.w,a0
	jmp	(a0)

scroll	move.l	scr_now,a6
	add.l	#160*201,a6
	move.l	scroll_pointer,a4
	move.l	a4,a5

	move.w	#0,byte_toggle
	moveq	#40,d5
	move.w	char_offset,d6
next_char
	move.b	(a5),d7		;get a letter
	sub.b	#32,d7

	ext.w	d7

	move.l	d5,tmp1
	move.l	#font,store_a0

	move.l	a5,tmp2
	move.l	store_a2,a5
	move.b	(a5,d7),d5
	move.l	a5,store_a2
	move.l	tmp2,a5

	and.l	#$ff,d5
	mulu	#(31*4)*4,d5		;30 * 4 (4 planes)
	add.l	d5,store_a0

	move.w	d6,d5
	mulu	#(31*4),d5		;character depth * 4 (30*4)
	add.l	d5,store_a0
	move.l	tmp1,d5

	move.l	a4,tmp4
	move.l	store_a0,a4
.column
OFF	set	0
	REPT	31
	move.l	(a4)+,d4
	movep.l	d4,OFF(a6)
OFF	set	OFF+160
	ENDR
	subq.w	#1,d5
	beq.s	.finish

	addq.w	#1,a6		;lower byte of word
	tst.w	byte_toggle
	beq.s	.skip		;if byte_toggle=0 then do next word
	addq.w	#6,a6		;else goto next word on screen
.skip	not.w	byte_toggle
	addq.w	#1,d6		;character offset
	and.w	#3,d6
	bne	.column

	move.l	tmp4,a4

	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
	move.l	tmp4,a4
	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

get_old_pal
	lea	$ffff8240.w,a0
	lea	old_palette,a1
	movem.l	(a0),d0-d7
	movem.l	d0-d7,(a1)
	rts

set_new_pal
	lea	pic+2,a0
	bra.s	set_pal
set_old_pal
	lea	old_palette,a0
set_pal	lea	$ffff8240.w,a1
	movem.l	(a0),d0-d7
	movem.l	d0-d7,(a1)
	rts

get_screen_base:
	move.w	#3,-(sp)
	trap	#14
	addq.l	#2,sp
	move.l	d0,old_base
	rts

get_org_rez:
	move.w	#4,-(sp)
	trap	#14
	addq.l	#2,sp
	move.w	d0,org_rez
	rts

set_org_rez
	move.w	org_rez,-(sp)
	bra.s	set_rez
set_low_rez
	clr.w	-(sp)
	bra.s	set_rez
set_med_rez
	move.w	#1,-(sp)
set_rez:
	move.l	old_base,-(sp)
	move.l	(sp),-(sp)
	move.w	#5,-(sp)
	trap	#14
	add.l	#12,sp
t	rts

set_up	move.l	#screens,d0
	clr.b	d0
	move.l	d0,scr_now
	move.l	d0,d1
	add.l	#39680,d1
	eor.l	d0,d1
	move.l	d1,scr_xor

	lea	pic+34,a0
	move.l	scr_now,a1
	move.l	a1,a2
	add.l	#39680,a2
	move.w	#32000/4-1,d0
sho	move.l	(a0),(a1)+
	move.l	(a0)+,(a2)+
	dbf	d0,sho

	move.l	scr_now,a0
	add.w	#32000,a0
	move.l	a0,a1
	add.l	#39680,a1
	moveq	#0,d1
	move.w	#(160*45)/4,d0
.loop	move.l	d1,(a0)+
	move.l	d1,(a1)+
	dbf	d0,.loop
	bsr.s	set_screen
	nop

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

do_intro
	movem.l	black,d0-d7
	movem.l	d0-d7,$ffff8240.w

	lea	intro_pic+34,a0
	move.l	old_base,a1
	move.w	#32000/4-1,d0
.loop	move.l	(a0)+,(a1)+
	dbf	d0,.loop
	lea	intro_pic+2,a1
	bsr.s	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.s	fadein

	lea	pic+34,a0
	move.l	old_base,a1
	move.w	#32000/4-1,d0
.sho	move.l	(a0)+,(a1)+
	dbf	d0,.sho
	rts

;A0=SOURCE PALETTE 	A1=TARGET PALETTE
fadein	move.w	#8-1,d6
	move.l	a1,a2
FADEIN1	lea	$ffff8240.w,a0	; TARGET IN A1
	move.w	#16-1,d7
FADEIN2	BSR.s	MODIFY
	addq.w	#2,a0
	addq	#2,a1
	dbf	d7,FADEIN2
	move.w	#4,d0
	BSR.s	WAIT
	move.l	a2,a1
	dbf	d6,FADEIN1
	rts

WAIT	bsr.s	v_sync
	DBRA D0,WAIT
	RTS

MODIFY	MOVE (A0),D0
	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

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

L0	MOVE.L	#0,D0
F0	MOVE.L	#0,V0+2
	BRA.s	V1
L1	MOVE.L	#0,D1
F1	MOVE.L	#0,V1+2
	BRA.s	V2
L2	MOVE.L	#0,D2
F2	MOVE.L	#0,V2+2
	BRA.s	V3
L3	MOVE.L	#0,D3
F3	MOVE.L	#0,V3+2
	BRA.s	OUT
;AMIGA SOUND CHIP
AMIGA					;44(5/3)
	MOVEM.L	D4-D5/A4,-(SP)		;8+3*8
	SWAP	D0			;4(1/0)
	SWAP	D1			;4(1/0)
	SWAP	D2			;4(1/0)
	SWAP	D3			;4(1/0)
V0	SUB.L	#0,D0			;16(3/0)
	BMI.S	L0			;8(1/0)10
V1	SUB.L	#0,D1			;16(3/0)
	BMI.S	L1			;8(1/0)10
V2	SUB.L	#0,D2			;16(3/0)
	BMI.S	L2			;8(1/0)10
V3	SUB.L	#0,D3			;16(3/0)
	BMI.S	L3			;8(1/0)10
OUT	SWAP	D0			;4(1/0)
	SWAP	D1			;4(1/0)
	SWAP	D2			;4(1/0)
	SWAP	D3			;4(1/0)
	MOVE.B	0(A0,D0),D4		;14(3/0)
	EXT.W	D4			;4(1/0)
	MOVE.B	0(A1,D1),D5		;14(3/0)
	EXT.W	D5			;4(1/0)
	ADD.W	D5,D4			;4(1/0)
	MOVE.B	0(A2,D2),D5		;14(3/0)
	EXT.W	D5			;4(1/0)
	ADD.W	D5,D4			;4(1/0)
	MOVE.B	0(A3,D3),D5		;14(3/0)
	EXT.W	D5			;4(1/0)
	ADD.W	D5,D4			;4(1/0)
	ADD.W	D4,D4			;4(1/0)
	AND.W	#$7F8,D4		;8(2/0)
	MOVE.L	SOUND(PC,D4),D5		;18(4/0)
	MOVE.W	SOUND+4(PC,D4),D4	;14(3/0)
	LEA	$FFFF8800.W,A4		;8(2/0)
	MOVEP.L	D5,(A4)			;24(2/4)
	MOVEP.W	D4,(A4)			;16(2/2)
	MOVEM.L	(SP)+,D4-D5/A4		;12+3*8
WB	RTE				;20(5/0)

SOUND	DC.W	$80C,$90B,$A09,0,$80C,$90B,$A09,0
	DC.W	$80D,$908,$A08,0,$80B,$90B,$A0B,0
	DC.W	$80D,$909,$A05,0,$80C,$90B,$A08,0
	DC.W	$80D,$909,$A02,0,$80D,$908,$A06,0
	DC.W	$80C,$90B,$A07,0,$80D,$907,$A07,0
	DC.W	$80C,$90B,$A06,0,$80C,$90A,$A09,0
	DC.W	$80B,$90B,$A0A,0,$80C,$90B,$A02,0
	DC.W	$80C,$90B,$A00,0,$80C,$90A,$A08,0
	DC.W	$80D,$906,$A04,0,$80D,$905,$A05,0
	DC.W	$80D,$905,$A04,0,$80C,$909,$A09,0
	DC.W	$80D,$904,$A03,0,$80B,$90B,$A09,0
	DC.W	$80C,$90A,$A05,0,$80B,$90A,$A0A,0
	DC.W	$80C,$909,$A08,0,$80B,$90B,$A08,0
	DC.W	$80C,$90A,$A00,0,$80C,$90A,$A00,0
	DC.W	$80C,$909,$A07,0,$80B,$90B,$A07,0
	DC.W	$80C,$909,$A06,0,$80B,$90B,$A06,0
	DC.W	$80B,$90A,$A09,0,$80B,$90B,$A05,0
	DC.W	$80A,$90A,$A0A,0,$80B,$90B,$A02,0
	DC.W	$80B,$90A,$A08,0,$80C,$907,$A07,0
	DC.W	$80C,$908,$A04,0,$80C,$907,$A06,0
	DC.W	$80B,$909,$A09,0,$80C,$906,$A06,0
	DC.W	$80A,$90A,$A09,0,$80C,$907,$A03,0
	DC.W	$80B,$90A,$A05,0,$80B,$909,$A08,0
	DC.W	$80B,$90A,$A03,0,$80A,$90A,$A08,0
	DC.W	$80B,$90A,$A00,0,$80B,$909,$A07,0
	DC.W	$80B,$908,$A08,0,$80A,$90A,$A07,0
	DC.W	$80A,$909,$A09,0,$80C,$901,$A01,0
	DC.W	$80A,$90A,$A06,0,$80B,$908,$A07,0
	DC.W	$80A,$90A,$A05,0,$80A,$909,$A08,0
	DC.W	$80A,$90A,$A02,0,$80A,$90A,$A01,0
	DC.W	$80A,$90A,$A00,0,$809,$909,$A09,0
	DC.W	$80A,$908,$A08,0,$80B,$908,$A01,0
	DC.W	$80A,$909,$A06,0,$80B,$907,$A04,0
	DC.W	$80A,$909,$A05,0,$809,$909,$A08,0
	DC.W	$80A,$909,$A03,0,$80A,$908,$A06,0
	DC.W	$80A,$909,$A00,0,$809,$909,$A07,0
	DC.W	$809,$908,$A08,0,$80A,$908,$A04,0
	DC.W	$809,$909,$A06,0,$80A,$908,$A01,0
	DC.W	$809,$909,$A05,0,$809,$908,$A07,0
	DC.W	$808,$908,$A08,0,$809,$909,$A02,0
	DC.W	$809,$908,$A06,0,$809,$909,$A00,0
	DC.W	$809,$907,$A07,0,$808,$908,$A07,0
	DC.W	$809,$907,$A06,0,$809,$908,$A02,0
	DC.W	$808,$908,$A06,0,$809,$906,$A06,0
	DC.W	$808,$907,$A07,0,$808,$908,$A04,0
	DC.W	$808,$907,$A06,0,$808,$908,$A02,0
	DC.W	$807,$907,$A07,0,$808,$906,$A06,0
	DC.W	$808,$907,$A04,0,$807,$907,$A06,0
	DC.W	$808,$906,$A05,0,$808,$906,$A04,0
	DC.W	$807,$906,$A06,0,$807,$907,$A04,0
	DC.W	$808,$905,$A04,0,$806,$906,$A06,0
	DC.W	$807,$906,$A04,0,$807,$905,$A05,0
	DC.W	$806,$906,$A05,0,$806,$906,$A04,0
	DC.W	$806,$905,$A05,0,$806,$906,$A02,0
	DC.W	$806,$905,$A04,0,$805,$905,$A05,0
	DC.W	$806,$905,$A02,0,$805,$905,$A04,0
	DC.W	$805,$904,$A04,0,$805,$905,$A02,0
	DC.W	$804,$904,$A04,0,$804,$904,$A03,0
	DC.W	$804,$904,$A02,0,$804,$903,$A03,0
	DC.W	$803,$903,$A03,0,$803,$903,$A02,0
	DC.W	$803,$902,$A02,0,$802,$902,$A02,0
	DC.W	$802,$902,$A01,0,$801,$901,$A01,0
	DC.W	$802,$901,$A00,0,$801,$901,$A00,0
	DC.W	$801,$900,$A00,0,$800,$900,$A00,0
	DC.W	$80E,$90D,$A0C,0,$80F,$903,$A00,0
	DC.W	$80F,$903,$A00,0,$80F,$903,$A00,0
	DC.W	$80F,$903,$A00,0,$80F,$903,$A00,0
	DC.W	$80F,$903,$A00,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0B,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0B,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0B,0,$80E,$90D,$A0B,0
	DC.W	$80E,$90D,$A0A,0,$80E,$90D,$A0A,0
	DC.W	$80E,$90D,$A0A,0,$80E,$90D,$A0A,0
	DC.W	$80E,$90C,$A0C,0,$80E,$90D,$A00,0
	DC.W	$80D,$90D,$A0D,0,$80D,$90D,$A0D,0
	DC.W	$80D,$90D,$A0D,0,$80D,$90D,$A0D,0
	DC.W	$80D,$90D,$A0D,0,$80D,$90D,$A0D,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0B,0,$80E,$90C,$A0B,0
	DC.W	$80E,$90C,$A0A,0,$80E,$90C,$A0A,0
	DC.W	$80E,$90C,$A0A,0,$80E,$90C,$A0A,0
	DC.W	$80D,$90D,$A0C,0,$80D,$90D,$A0C,0
	DC.W	$80E,$90C,$A09,0,$80E,$90C,$A09,0
	DC.W	$80E,$90C,$A05,0,$80E,$90C,$A00,0
	DC.W	$80E,$90C,$A00,0,$80E,$90B,$A0B,0
	DC.W	$80E,$90B,$A0B,0,$80E,$90B,$A0B,0
	DC.W	$80E,$90B,$A0B,0,$80E,$90B,$A0A,0
	DC.W	$80E,$90B,$A0A,0,$80E,$90B,$A0A,0
	DC.W	$80D,$90D,$A0B,0,$80D,$90D,$A0B,0
	DC.W	$80D,$90D,$A0B,0,$80E,$90B,$A09,0
	DC.W	$80E,$90B,$A09,0,$80E,$90B,$A09,0
	DC.W	$80D,$90C,$A0C,0,$80D,$90D,$A0A,0
	DC.W	$80E,$90B,$A07,0,$80E,$90B,$A00,0
	DC.W	$80E,$90B,$A00,0,$80D,$90D,$A09,0
	DC.W	$80D,$90D,$A09,0,$80E,$90A,$A09,0
	DC.W	$80D,$90D,$A08,0,$80D,$90D,$A07,0
	DC.W	$80D,$90D,$A04,0,$80D,$90D,$A00,0
	DC.W	$80E,$90A,$A04,0,$80E,$909,$A09,0
	DC.W	$80E,$909,$A09,0,$80D,$90C,$A0B,0
	DC.W	$80E,$909,$A08,0,$80E,$909,$A08,0
	DC.W	$80E,$909,$A07,0,$80E,$908,$A08,0
	DC.W	$80E,$909,$A01,0,$80C,$90C,$A0C,0
	DC.W	$80D,$90C,$A0A,0,$80E,$908,$A06,0
	DC.W	$80E,$907,$A07,0,$80E,$908,$A00,0
	DC.W	$80E,$907,$A05,0,$80E,$906,$A06,0
	DC.W	$80D,$90C,$A09,0,$80E,$905,$A05,0
	DC.W	$80E,$904,$A04,0,$80D,$90C,$A08,0
	DC.W	$80D,$90B,$A0B,0,$80E,$900,$A00,0
	DC.W	$80D,$90C,$A06,0,$80D,$90C,$A05,0
	DC.W	$80D,$90C,$A02,0,$80C,$90C,$A0B,0
	DC.W	$80C,$90C,$A0B,0,$80D,$90B,$A0A,0
	DC.W	$80D,$90B,$A0A,0,$80D,$90B,$A0A,0
	DC.W	$80D,$90B,$A0A,0,$80C,$90C,$A0A,0
	DC.W	$80C,$90C,$A0A,0,$80C,$90C,$A0A,0
	DC.W	$80D,$90B,$A09,0,$80D,$90B,$A09,0
	DC.W	$80D,$90A,$A0A,0,$80D,$90A,$A0A,0
	DC.W	$80D,$90A,$A0A,0,$80C,$90C,$A09,0
	DC.W	$80C,$90C,$A09,0,$80C,$90C,$A09,0
	DC.W	$80D,$90B,$A06,0,$80C,$90B,$A0B,0
	DC.W	$80C,$90C,$A08,0,$80D,$90B,$A00,0
	DC.W	$80D,$90B,$A00,0,$80C,$90C,$A07,0
	DC.W	$80C,$90C,$A06,0,$80C,$90C,$A05,0
	DC.W	$80C,$90C,$A03,0,$80C,$90C,$A01,0
	DC.W	$80C,$90B,$A0A,0,$80D,$90A,$A05,0
	DC.W	$80D,$90A,$A04,0,$80D,$90A,$A02,0
	DC.W	$80D,$909,$A08,0,$80D,$909,$A08,0


new120	clr.b	$fffffa1b.w	;stop another interrupt
	REPT	60
	nop
	ENDR
.not	tst.b	$ffff8209.w	;wait for raster to get to right hand side
	bne.s	.not

	clr.b	$ffff820a.w
	REPT	22
	nop
	ENDR
	move.b	#2,$ffff820a.w
	move.w	font_pal,$ffff8240.w

	movem.l	a0/a1,-(sp)
	lea	font_pal+2,a0
	lea	$ffff8242.w,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.w	(a0)+,(a1)+
	movem.l	(sp)+,a0/a1
	rte

VBL	MOVE	#$2700,SR
	clr.b	$fffffa1b.w
	SUBQ.B	#1,SPEED
	BEQ.S	PLAY
	JSR	EFFECT
END_VBL	ST	SWITCH
	lea	pic+2,a5
	lea	$ffff8240.w,a6
	move.l	(a5)+,(a6)+
	move.l	(a5)+,(a6)+
	move.l	(a5)+,(a6)+
	move.l	(a5)+,(a6)+
	move.l	(a5)+,(a6)+
	move.l	(a5)+,(a6)+
	move.l	(a5)+,(a6)+
	move.l	(a5)+,(a6)+
	move.b	#198,$fffffa21.w
	move.b	#8,$fffffa1b.w
	rte

PLAY	BTST	#7,$FFFFFC00.W
	BEQ.S	NO_KEYBOARD1
	MOVE.L	D7,-(SP)
	MOVEQ	#0,D7
	move.b	$fffffc02.w,d7
	BTST	#7,D7
	BEQ.S	NO_KEYBOARD2
	AND	#$7F,D7
	MOVE.B	D7,KEY_PRESS
	MOVE.L	#AMIGA,$134.W
NO_KEYBOARD2
	MOVE.L	(SP)+,D7
NO_KEYBOARD1
	MOVEM.L	D0-D1/A0-A5,-(SP)
SPD	MOVE.B	#6,SPEED
	SUBQ.B	#1,POS
	BNE.s	NO_NEW_PATTERN
	MOVE.B	#64,POS
	ADDQ.L	#1,MUS+2
	SUBQ.B	#1,TRK
	BMI	RESTART
	MOVEQ	#0,D0
MUS	MOVE.B	$0,D0
	SWAP	D0
	LSR.L	#6,D0
	LEA	module,A0
	ADD	PAT(PC),A0
	ADD.L	D0,A0
	MOVE.L	A0,ADD_IN_PAT
NO_NEW_PATTERN
	MOVE.L	ADD_IN_PAT(PC),A0
	LEA	FRQ(PC),A1
	LEA	INS(PC),A2
	LEA	COMMAND(PC),A3
	LEA	VOICE0(PC),A4
	BSR	LOAD_VOICE
	LEA	VOICE1(PC),A4
	BSR	LOAD_VOICE
	LEA	VOICE2(PC),A4
	BSR	LOAD_VOICE
	LEA	VOICE3(PC),A4
	BSR	LOAD_VOICE
	MOVE.L	A0,ADD_IN_PAT
	MOVEM.L	(SP)+,D0-D1/A0-A5
* ADDRESS ALL 4 VOICES
	MOVEM.L	D4/A5,-(SP)
	LEA	VOICE0(PC),A5
	TST.B	20(A5)
	BEQ.S	CONT0
	MOVE.L	(A5),D0
	MOVE.L	4(A5),A0
	MOVE.L	8(A5),D4
	MOVE.L	D4,L0+2
	MOVE.L	12(A5),D4
	MOVE.L	D4,V0+2
	MOVE.L	16(A5),D4
CONT0
	CLR.B	20(A5)
	LEA	VOICE1(PC),A5
	TST.B	20(A5)
	BEQ.S	CONT1
	MOVE.L	(A5),D1
	MOVE.L	4(A5),A1
	MOVE.L	8(A5),D4
	MOVE.L	D4,L1+2
	MOVE.L	12(A5),D4
	MOVE.L	D4,V1+2
	MOVE.L	16(A5),D4
	MOVE.L	D4,F1+2
CONT1
	CLR.B	20(A5)
	LEA	VOICE2(PC),A5
	TST.B	20(A5)
	BEQ.S	CONT2
	MOVE.L	(A5),D2
	MOVE.L	4(A5),A2
	MOVE.L	8(A5),D4
	MOVE.L	D4,L2+2
	MOVE.L	12(A5),D4
	MOVE.L	D4,V2+2
	MOVE.L	16(A5),D4
	MOVE.L	D4,F2+2
CONT2
	CLR.B	20(A5)
	LEA	VOICE3(PC),A5
	TST.B	20(A5)
	BEQ.S	CONT3
	MOVE.L	(A5),D3
	MOVE.L	4(A5),A3
	MOVE.L	8(A5),D4
	MOVE.L	D4,L3+2
	MOVE.L	12(A5),D4
	MOVE.L	D4,V3+2
	MOVE.L	16(A5),D4
	MOVE.L	D4,F3+2
CONT3
	CLR.B	20(A5)
	MOVEM.L	(SP)+,D4/A5

	BRA	END_VBL

LOAD_VOICE
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVE	D0,30(A4)
	MOVE	(A0)+,D0
	BEQ.S	COMMAND?
	BTST	#12,D0
	BEQ.S	CONT_FRQ
	AND	#$FFF,D0
	MOVE	#$100,D1
CONT_FRQ
	MOVE.B	#1,20(A4)
	MOVE	D0,24(A4)
	ADD	D0,D0
	ADD	D0,D0
	MOVE.L	(A1,D0.W),D0
	MOVE.L	D0,12(A4)
	TST.L	16(A4)
	BEQ.S	CONT_LOAD_FRQ
	MOVE.L	D0,16(A4)
CONT_LOAD_FRQ
	OR.B	(A0),D1
	AND	#$FF0,D1
	BEQ.S	COMMAND?
	MOVE.L	12(A4),16(A4)
	MOVE.L	0(A2,D1.W),(A4)
	MOVE.L	4(A2,D1.W),4(A4)
	MOVE.L	8(A2,D1.W),8(A4)
	BNE.S	REPEAT
	CLR.L	16(A4)
REPEAT
COMMAND?
	MOVE	(A0)+,D0
	MOVE.B	D0,D1
	AND	#$F00,D0
	LSR	#6,D0
	MOVE.L	(A3,D0.W),A5
	JMP	(A5)

NO_COMMAND
	RTS

ARPEGGIO
	TST.B	D1
	BEQ.S	NO_ARPEGGIO
	MOVE.B	#0,22(A4)
	MOVE.B	D1,23(A4)
	MOVE.B	#1,21(A4)		*ARPEGGIO COUNTER
	MOVE	#1,30(A4)
NO_ARPEGGIO
	RTS

PORTAMENTO_UP
	MOVE.B	#1,22(A4)
	MOVE.B	D1,23(A4)
	MOVE	#1,30(A4)
	RTS

PORTAMENTO_DOWN
	MOVE.B	#2,22(A4)
	MOVE.B	D1,23(A4)
	MOVE	#1,30(A4)
	RTS

POSITION_JUMP
	LEA	module,A5
	ADD	SEQ(PC),A5
	LEA	-1(A5),A5
	MOVE.B	#1,POS
	MOVE.L	A5,D0
	ADD.L	D1,D0
	MOVE.L	D0,MUS+2
	MOVE.B	-1(A5),D0
	SUB	D1,D0
	MOVE.B	D0,TRK
	RTS

SET_VOLUME
	TST.B	D1
	BNE.S	NO_CHANGE		*NO REAL TIME VOLUME VARIATION
	CLR.L	12(A4)			*IN THIS VERSION! MAYBE
	MOVE.B	#1,20(A4)		*SOME OTHER DAY...
NO_CHANGE
	RTS

PATTERN_BREAK
	MOVE.B	#1,POS
	RTS

SET_FILTER
	RTS

SET_SPEED
	MOVE.B	D1,SPD+3
	MOVE.B	D1,SPEED
	RTS

COMMAND		DC.L	ARPEGGIO,PORTAMENTO_UP,PORTAMENTO_DOWN,NO_COMMAND
		DC.L	NO_COMMAND,NO_COMMAND,NO_COMMAND,NO_COMMAND
		DC.L	NO_COMMAND,NO_COMMAND,NO_COMMAND,POSITION_JUMP
		DC.L	SET_VOLUME,PATTERN_BREAK,SET_FILTER,SET_SPEED

EFFECT	MOVEM.L	D4-D6/A4-A6,-(SP)
	LEA	FRQ(PC),A5
	LEA	VOICE0(PC),A6
	TST	30(A6)
	BEQ.S	CONT_EFFECT1
	BSR	DO_EFFECT
	MOVE.L	26(A6),V0+2
	TST.L	F0+2
	BEQ.S	CONT_EFFECT1
	MOVE.L	26(A6),F0+2
CONT_EFFECT1
	LEA	VOICE1(PC),A6
	TST.w	30(A6)
	BEQ.S	CONT_EFFECT2
	BSR.s	DO_EFFECT
	MOVE.L	26(A6),V1+2
	TST.L	F1+2
	BEQ.S	CONT_EFFECT2
	MOVE.L	26(A6),F1+2
CONT_EFFECT2
	LEA	VOICE2(PC),A6
	TST	30(A6)
	BEQ.S	CONT_EFFECT3
	BSR.s	DO_EFFECT
	MOVE.L	26(A6),V2+2
	TST.L	F2+2
	BEQ.S	CONT_EFFECT3
	MOVE.L	26(A6),F2+2
CONT_EFFECT3
	LEA	VOICE3(PC),A6
	TST	30(A6)
	BEQ.S	CONT_EFFECT4
	BSR.s	DO_EFFECT
	MOVE.L	26(A6),V3+2
	TST.L	F3+2
	BEQ.S	CONT_EFFECT4
	MOVE.L	26(A6),F3+2
CONT_EFFECT4
	MOVEM.L	(SP)+,D4-D6/A4-A6
	RTS

DO_EFFECT
	MOVE.B	22(A6),D4
	BEQ.S	ARPEGGIO_ROUT
	CMP.B	#1,D4
	BEQ.S	PORTUP
	CMP.B	#2,D4
	BEQ.S	PORTDOWN
	RTS

PORTUP
	MOVEQ	#0,D4
	MOVE.B	23(A6),D4
	MOVE	24(A6),D5
	SUB	D4,D5
	CMP	#$71,D5
	BPL.S	OK_PORTUP
	MOVEQ	#$71,D5
OK_PORTUP
	MOVE	D5,24(A6)
	ADD	D5,D5
	ADD	D5,D5
	MOVE.L	(A5,D5),26(A6)
	RTS

PORTDOWN
	MOVEQ	#0,D4
	MOVE.B	23(A6),D4
	MOVE	24(A6),D5
	ADD	D4,D5
	CMP	#$358,D5
	BMI.S	OK_PORTDOWN
	MOVE	#$358,D5
OK_PORTDOWN
	MOVE	D5,24(A6)
	ADD.w	D5,D5
	ADD.w	D5,D5
	MOVE.L	(A5,D5),26(A6)
	RTS

ARPEGGIO_ROUT
	MOVE.B	21(A6),D4
	CMP.B	#1,D4
	BEQ.S	ARP_ROUT1
	CMP.B	#2,D4
	BEQ.S	ARP_ROUT2
	CMP.B	#3,D4
	BEQ.S	ARP_ROUT3
	CMP.B	#4,D4
	BEQ.S	ARP_ROUT1
	CMP.B	#5,D4
	BEQ.S	ARP_ROUT2
	RTS

ARP_ROUT1
	MOVEQ	#0,D4
	MOVE.B	23(A6),D4
	LSR.B	#4,D4
	BRA.S	ARP_ROUT
ARP_ROUT2
	MOVEQ	#0,D4
	MOVE.B	23(A6),D4
	AND.B	#$0F,D4
	BRA.S	ARP_ROUT
ARP_ROUT3
	MOVE	24(A6),D6
	BRA.S	END_ARP_ROUT2
ARP_ROUT
	ADD	D4,D4
	MOVE	24(A6),D5
	LEA	ARPEGGIO_DATA(PC),A4
ARP_LOOP
	CMP	(A4),D5
	BEQ.S	END_ARP_ROUT1
	LEA	2(A4),A4
	BRA.S	ARP_LOOP
END_ARP_ROUT1
	MOVE	(A4,D4),D6
END_ARP_ROUT2
	ADD	D6,D6
	ADD	D6,D6
	MOVE.L	(A5,D6),26(A6)
	ADDQ.B	#1,21(A6)
	RTS

RESTART
	MOVEM.L	(SP)+,D0-D1/A0-A5
	MOVE.b	#6,SPD+2 
	MOVE.B	#6,SPEED
	MOVE.B	#1,POS
	LEA	module,A0
	ADD	SEQ,A0
	LEA	-2(A0),A0
	MOVE.B	(A0)+,TRK
	MOVE.L	A0,MUS+2
	LEA	OFF2,A0
	LEA	OFF2,A1
	LEA	OFF2,A2
	LEA	OFF2,A3
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVEQ	#0,D2
	MOVEQ	#0,D3
	CLR.L	V0+2
	CLR.L	V1+2
	CLR.L	V2+2
	CLR.L	V3+2
	CLR.L	F0+2
	CLR.L	F1+2
	CLR.L	F2+2
	CLR.L	F3+2
	BRA	PLAY

end_of_musix
	MOVE	#$2700,SR
	RTS

vsync	SF	SWITCH
WAIT_VBL
	TST.B	SWITCH
	BEQ.S	WAIT_VBL
	bsr	set_screen
	RTS


****************
* DATA SECTION *
****************

	SECTION	DATA

OFF2		DC.L	0
SPEED		DC.B	0
POS		DC.B	0
TRK		DC.B	0
SEQ		DS.W	1
PAT		DS.W	1
NBR_INS		DS.W	1
FRQ		INCBIN	10_KHZ.FRQ
ARPEGGIO_DATA	DC.W	$0358,$0328,$02FA,$02D0,$02A6,$0280,$025C
		DC.W	$023A,$021A,$01FC,$01E0,$01C5,$01AC,$0194,$017D
		DC.W	$0168,$0153,$0140,$012E,$011D,$010D,$00FE,$00F0
		DC.W	$00E2,$00D6,$00CA,$00BE,$00B4,$00AA,$00A0,$0097
		DC.W	$008F,$0087,$007F,$0078,$0071,$0000,$0000,$0000


SAVE_INT	DS.L	17
TIMERA		DS.L	1
SWITCH		DS.W	1
KEY_PRESS	DS.W	1
VOICE0		DS.L	8
VOICE1		DS.L	8
VOICE2		DS.L	8
VOICE3		DS.L	8
ADD_IN_PAT	DS.L	1
INS		DS.L	32*4

olda09	dc.b	0
olda15	dc.b	0
hertz_flag	dc.w	0
old484		dc.w	0
old_base	dc.l	0
stack_save	dc.l	0
old_palette	ds.w	16
zero_counter	dc.w	10
help_counter	dc.w	10
file_offset	dc.w	0
byte_toggle	dc.w	0
tmp1		dc.l	0
tmp2		dc.l	0
tmp4		dc.l	0
store_a0	dc.l	0
store_a2	dc.l	0
org_rez		dc.w	0
scroll_pointer	dc.l	scroll_text
scroll_text
 dc.b "                    "
 dc.b "PERSISTENCE OF VISION DEMO COMPILATION 105.               "
 DC.B "CODING - M.S.D,          "
 DC.B "GRAFIX - OZYMANDIAS,          "
 DC.B "MUSIC - RED MERCURY OF KGB (FRANCE),          "
 DC.B "THIS DISC WAS RELEASED ON 30-1-92.          "
 DC.B " PLEASE NOTE... THERE ARE SEVERAL CREWS NOW USING MENUS CODED "
 DC.B "BY MYSELF (MAC SYS DATA).  I HAVE SENT MENUS TO THE FOLLOWING "
 DC.B "CREWS.... NOW 5,  THE SOURCE,  ADRENALIN,  THE FORCE  AND  ELECTRONIC.   "
 DC.B "IF YOU SEE MENUS BY ME ON ANY OTHER CREWS DISCS THEN THEY HAVE "
 DC.B "BEEN PASSED MY CODE BY SOMEONE ELSE.   THE MENUS SENT OUT LOOK LIKE "
 DC.B "THIS (A PICTURE, LOWER BORDER AND NOISETRACKER MOD) THE OTHER MENU "
 DC.B "LOOKS LIKE POV 55 BUT WAS IN FACT COMPLETELY REWRITTEN.      IF YOU "
 DC.B "SEE ANY LAMERS CLAIMING TO HAVE WRITTEN THE MENU THEN TRASH "
 DC.B "THEIR DISCS AS THEY ARE OBVIOUSLY MEGA LAMERS.        "
 DC.B "    GREETINGS TO......       ABC CREW,      BBC,      "
 DC.B "BLACK CATS,      BLIND BASTARD,      DR. SYNE,      DEL,      "
 DC.B "ERIK PLANKTON,      EMPIRE,      "
 DC.B "EQUINOX,      GEORGE TOWER PD (BART!),      INNER CIRCLE,      "
 DC.B "KGB,     LOST BOYS,      MARTIAN,      MEDWAY BOYS,     OBERJE,      "
 DC.B "OVERLANDERS,      POMPEY PIRATES,      REPLICANTS,      SEWER SOFTWARE,      "
 DC.B "SLAYTANIC CULTS,      SOURCE,      ST CNX,      TEX,      "
 DC.B "TCB,     ELECTRONIC    AND    WATCHMEN      MEGA GREETINGS TO....... "
 DC.B "RIPPED OFF (BILBO AND STICK),      ADRENALIN,      BORIS,      "
 DC.B "PIXEL TWINS,      ROB POVEY,      "
 DC.B "AND    ALY.                                               "
 DC.B "                         RIGHT HERE ARE VIEWS BY MYSELF ABOUT THE "
 DC.B "'PD CONFEDERACY'....      "
 DC.B "WHY DO WE NEED THE 'PD CONFEDERATION?'      WHAT THE HELL IS IT "
 DC.B "MEANT TO BE?       IT APPEARS THAT IT IS A COUPLE OF LIBRARIES "
 DC.B "TRYING TO CLAIM THEY ARE THE BEST AND THAT ANY LIBRARY NOT IN "
 DC.B "THE FED IS CRAP.   WELL TELL ME, WHY IS SOUTH WEST SOFTWARE LIBRARY "
 DC.B "NOT IN 'CAUSE HE IS SHIT HOT?     WHAT ABOUT PDOM AND SOFTVILLE?   "
 DC.B "    IF PD LIBRARIES ARE FAST, EFFICIENT AND SUPPLY GOOD PD AT "
 DC.B "LOW PROCES THEN THEY WILL GET A GOOD REPUTATION AND LOTS OF TRADE. "
 DC.B "     SO TO ALL PEOPLE CLAIMING 'WE ARE IN THE FED SO WE MUST GOOD' I HAVE "
 DC.B "ONE MESSAGE 'F*** *** AND ..'    (DELETED AS IT MAY OFFEND).      "
 DC.B "           PLEASE CONTACT ME "
 DC.B "AND TELL ME WHAT THE AIM IS OF THE 'FED AND WHY IS ST-FORMAT NOW BIAS TOWARDS "
 DC.B "PD LIBRARIES IN THE 'FED.         "
 DC.B "MY PERSONAL FAVE PD LIBRARIES ARE -     SOUTH WEST SOFTWARE LIBRARY,     "
 DC.B "PDOM,     D.W. STABLES,   PROPHECY   AND   TOWER PD.   NOTE THAT THESE ARE "
 DC.B "MY CHOICE OF LIBRARIES AND NOT ALL POV MEMBERS (MSD).   "
 DC.B "    RIGHT THAT'S ENOUGH FOR NOW, I EXPECT TO BE BANNED FROM "
 DC.B "THE KEYBOARD FOR THE NEXT 6 MONTHS!     BYE.               "
 DC.B "                                                           "
 DC.B "                                                           "
 dc.b	$ff
	even
font_pal
	incbin	font.col


char_offset	dc.w	0
font		dcb.b	(31*4)*4,0
		incbin	ripp_off.fnt
font_offsets
;          !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /
 dc.b	0,01,07,00,00,00,00,07,08,09,00,00,12,13,14,00

;        0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @
 dc.b	16,17,18,19,20,21,22,23,24,25,26,27,00,00,00,31,00

;        A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q
 dc.b	33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49

;        R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _  `  a  b  c
 dc.b	50,51,52,53,54,55,56,57,58,40,00,00,00,00,00,33,34,35

;        d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u
 dc.b	36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53

;        v  w  x  y  z
 dc.b	54,55,56,57,58

	even

intro_pic
	incbin	pov_pre1.pi1
pic	incbin	pov105.pi1
black	dcb.b	34,0
	even
scr_now	dc.l	0
scr_xor	dc.l	0

	ds.b	1024
screens	ds.b	39680
	ds.b	39680

module	incbin	kgb15.mod	;mod must be last thing in menu

	END