>EXTERN	"MirPic2",MirrorPic
>EXTERN	"MirrorSIN",MirrorSIN
>EXTERN	"FontA",Font
>EXTERN	"Negat",Negat

		move.l	#$70000,a0
ClrMirrorArea:	clr.l	(a0)+
		cmp.l	#$79780,a0
		blt.s	ClrMirrorArea

		move.l	$4.w,a6
		jsr	-$84(a6)
		jsr	-$78(a6)

Wait:		cmp.b	#$00,$dff006
		bne.s	Wait
		tst.b	$dff005
		bne.s	Wait
		bsr.s	Routine
		cmp.w	#-88,WaitEnd
		bne.s	Wait

		move.l	#AddEnd,JumpWay+2
		clr.w	Coladd
		clr.w	Coladd2
		add.l	#40,TextAddr

		move.l	$4.w,a6
		jsr	-$8a(a6)
		jsr	-$7e(a6)
		move.w	#$8020,$dff096
		rts

Routine:	lea	$dff000,a6
		move.l	#CoList,$84(a6)
		move.w	$8a(a6),d0
		move.w	#$20,$96(a6)

		btst	#0,WaitEnd+1
		bne.s	Lamirror
		cmp.w	#-46,WaitEnd
		bgt.s	LaMirror

		lea 	colist+2(pc),a0
		lea 	mircols(pc),a1
		add.w	coladd(pc),a1
		moveq	#7,d2

		ll:
		move.w	(a1)+,d1
		move.w (a0),d0
		bsr spread
		move.w d0,(a0)
		addq.w	#4,a0
		dbf d2,ll

		lea	PalkitPos(pc),a2
		lea	PalkCols(pc),a1
		add.w	Coladd2(pc),a1
		moveq	#11,d2

ll2:		move.l	(a2)+,a0
		move.w	(a1)+,d1
		move.w	(a0),d0
		bsr	Spread
		move.w	d0,(a0)
		move.l	44(a2),a0
		move.w	d0,(a0)
		dbf	d2,ll2

LaMirror:	lea	MirrorSIN,a1
		lea	MirrorSIN,a2
		move.w	MirrorPos+2,d0
		add.w	d0,a1
		add.w	#100,d0
		cmp.w	#200,d0
		blt.s	AddyPos2
		sub.w	#200,d0
AddyPos2:	add.w	d0,a2

		move.w	(a1),d0
		bsr	SetShift
		move.l	d1,Mask1+2
		move.w	d2,Mint1+2
		move.w	d3,XPos1+2
		move.w	(a2),d0
		bsr	SetShift
		move.l	d1,Mask2+2
		move.w	d2,Mint2+2
		move.w	d3,XPos2+2

		lea	MirrorSIN,a1
		add.w	MirrorPos,a1
		move.w	(a1),d0
		sub.w	#$f,d0
		mulu	#10,d0
		add.w	#2,MirrorPos
		add.w	#2,MirrorPos+2
		cmp.w	#200,MirrorPos
		blt.s	TestMir2
		sub.w	#200,MirrorPos
TestMir2:	cmp.w	#200,MirrorPos+2
		blt.s	SetMirModulo
		sub.w	#200,MirrorPos+2

SetMirModulo:	move.l	#$40026,$64(a6)
		move.w	#[32*64]+[3],Size+2
		
		move.l	#MirrorPic+640,a0
		add.w	d0,a0
XPos1:		add.w	#0,a0
Mint1:		move.w	#0,$40(a6)
Mask1:		move.l	#0,$44(a6)
		move.l	#$70006,a1
		moveq	#2,d4
		bsr	MirLoop

		move.l	#MirrorPic+0,a0
		add.w	d0,a0
XPos2:		add.w	#0,a0
Mint2:		move.w	#0,$40(a6)
Mask2:		move.l	#0,$44(a6)
		move.l	#$70002,a1
		moveq	#2,d4
		bsr	MirLoop

CopyBlocks:	move.l	#$70004,a0
		move.l	#$7000c,a1
		move.l	#$ffffffff,$44(a6)
		move.w	#$9f0,$40(a6)
		move.l	#$240024,$64(a6)
		move.w	#[96*64]+[4],Size+2
		moveq	#3,d0
CopyLoop:	bsr	StartMirBlit
		addq.l	#8,a1
		dbf	d0,CopyLoop
		move.l	#$7000a,a0
		move.l	#$70002,a1
		move.l	#$2a002a,$64(a6)
		move.w	#[96*64]+[1],Size+2
		bsr	StartMirBlit
		move.l	#$70004,a0
		move.l	#$7002c,a1
		bsr	StartMirBlit

		cmp.w	#200,waitend
		bne.s	JumpWay
		move.l	#SubEnd,JumpWay+2
		move.w	#16,Coladd
		move.w	#24,Coladd2

JumpWay:	jmp	AddEnd
AddEnd:		addq.w	#1,waitend
		bra.s	StartTexty
SubEnd:		subq.w	#1,waitend

StartTexty:	btst	#14,$2(a6)
		bne.s	starttexty
		move.w	#$3c,$62(a6)
		move.l	#$740028,$64(a6)
		move.l	#$dc00000,$40(a6)

		moveq	#39,d7
		clr.w	d6
		clr.w	sarake
		clr.w	rivi

		lea	texti1(pc),a0
		add.l	textaddr(pc),a0

textyl1:	move.w	d6,d1
		sub.w	waitend(pc),d1
		cmp.w	#16,d1
		bcc.s	notexty

		lea	Font(pc),a1
		lea	$718c4,a2
		add.w	sarake(pc),a2
		add.w	rivi(pc),a2

		move.b	(a0),d0
		cmp.b	#$20,d0
		bne.s	Asc2
		add.w	#116,a1
		bra.s	Drare
Asc2:		sub.b	#$61,d0
		and.w	#$ff,d0
		lsl.w	#2,d0
		add.w	d0,a1

		lsl.w	#2,d1
		ext.l	d1
		lea	negat(pc),a3
		add.l	d1,a3

Drare:		moveq	#2,d0

WaitBlitr:	btst	#14,$2(a6)
		bne.s	WaitBlitr
		move.l	a1,$50(a6)
		move.l	a3,$4c(a6)
		move.l	a2,$54(a6)
		move.w	#[32*64]+[2],$58(a6)
		add.w	#3840,a1
		add.w	#$2c00,a2
		dbf	d0,WaitBlitr

notexty:	add.w	#4,sarake
		cmp.w	#40,sarake
		bne.s	textyl2
		clr.w	sarake
		add.w	#1760,rivi

textyl2:	addq.l	#1,a0
		addq.w	#4,d6
		dbf	d7,textyl1

;		move.w	#$f,$180(a6)
		moveq	#1,d0
		rts

MirLoop:	bsr	StartMirBlit
		adda.l	#$500,a0
		adda.l	#$580,a1
		dbf	d4,MirLoop
		clr.w	d4
		rts
StartMirBlit:	move.l	a0,$50(a6)
		move.l	a1,$54(a6)
Size:		move.w	#0,$58(a6)
WaitMirBlit:	btst	#14,$2(a6)
		bne.s	WaitMirBlit
		rts

SetShift:	move.l	#$ffff,d1
		move.w	d0,d3
		lsr.w	#4,d3
		lsl.w	#1,d3
		not.w	d0
		and.w	#$f,d0		;Shift 0-F
		move.w	d0,d2
		ror.w	#4,d2
		or.w	#$9f0,d2
		btst	#3,d0
		beq.s	NoyHighBit
		lsl.l	#8,d1
NoyHighBit:	and.w	#$7,d0
		lsl.l	d0,d1
		rts

spread:	movem.w	d2-d7,-(a7)
	move.w	d0,d2
	move.w	d0,d3
	move.w	d0,d4
	move.w	d1,d5
	move.w	d1,d6
	move.w	d1,d7
	and.w	#$00f,d2
	and.w	#$0f0,d3
	and.w	#$f00,d4
	and.w	#$00f,d5
	and.w	#$0f0,d6
	and.w	#$f00,d7
	cmp.w	d2,d5
	bls.s	spr1
	add.w	#$001,d0
	spr1:
	cmp.w	d2,d5
	bcc.s	spr2
	sub.w	#$001,d0
	spr2:
	cmp.w	d3,d6
	bls.s	spr3
	add.w	#$010,d0
	spr3:
	cmp.w	d3,d6
	bcc.s	spr4
	sub.w	#$010,d0
	spr4:
	cmp.w	d4,d7
	bls.s	spr5
	add.w	#$100,d0
	spr5:
	cmp.w	d4,d7
	bcc.s	spr6
	sub.w	#$100,d0
	spr6:
	movem.w	(a7)+,d2-d7
	rts

Coladd:		dc.w	0
mircols:	dc.w	$000,$4ad,$39c,$28b,$17a,$069,$058,$047
		blk.w	8,0

CoList:		dc.l	$1800000,$1820000,$1840000,$1860000
		dc.l	$1880000,$18a0000,$18c0000,$18e0000
		dc.l	$190007f,$1920fb6,$1940ea4,$1960d93
		dc.l	$1980c82,$19a0b71,$19c0960,$19e0740
		dc.l	$08e2f70,$09028d0
Palkit1:	dc.l	$2307ff06,$1800000,$2407ff06,$1800000
		dc.l	$2507ff06,$1800000,$2607ff06,$1800000
		dc.l	$2707ff06,$1800000,$2807ff06,$1800000
		dc.l	$2907ff06,$1800000,$2a07ff06,$1800000
TextPlanes:	dc.l	$0e40007,$0e61082,$0ec0007,$0ee3c82
		dc.l	$0f40007,$0f66882,$1040040
		dc.l	$2b07ff06
MirrorPlanes:	dc.l	$0e00007,$0e20002,$0e80007,$0ea0582
Palk2:		dc.l	$0f00007,$0f20b02,$1800000
		dc.l	$2c07ff06,$1006600,$0920030,$09400d8
Palkit2:	dc.l	$1080000,$10a0000,$1800000
		dc.l	$2d07ff06,$1800000
		dc.l	$2e07ff06,$1800000,$2f07ff06,$1800000
		dc.l	$4e07ff06,$108ffa8,$6d07ff06,$1080000
		dc.l	$8c07ff06,$108ffa8,$ab07ff06,$1080000
		dc.l	$ca07ff06,$108ffa8,$e907ff06,$1080000
		dc.l	$ffdfffde
		dc.l	$807ff06,$108ffa8
Palkit3:	dc.l	$2807ff06,$1800244,$1000000
		dc.l	$2907ff06,$1800466,$2a07ff06,$1800244
		dc.l	$2b07ff06,$1800234,$2c07ff06,$1800444
		dc.l	$2d07ff06,$1800666,$2e07ff06,$1800999
		dc.l	$2f07ff06,$1800bbb,$3007ff06,$1800888
		dc.l	$3107ff06,$1800666,$3207ff06,$1800444
		dc.l	$3307ff06,$1800222,$3407ff06,$1800000
		dc.l	$fffffffe

ColAdd2:	dc.w	0
PalkCols:	dc.w	$222,$444,$666,$888,$bbb,$999,$666,$444
		dc.w	$234,$344,$466,$244
		blk.w	12,0

PalkitPos:	dc.l	Palkit1+6,Palkit1+14,Palkit1+22,Palkit1+30
		dc.l	Palkit1+38,Palkit1+46,Palkit1+54,Palkit1+62
		dc.l	Palk2+10,Palkit2+10,Palkit2+18,Palkit2+26

		dc.l	Palkit3+98,Palkit3+90,Palkit3+82,Palkit3+74
		dc.l	Palkit3+66,Palkit3+58,Palkit3+50,Palkit3+42
		dc.l	Palkit3+34,Palkit3+26,Palkit3+18,Palkit3+6

Textaddr:	dc.l	0
Sarake:		dc.w	0
Rivi:		dc.w	0
WaitEnd:	dc.w	-88

Texti1:			 ;	   ;	     ;	       ;
		dc.b	'fipi  on  hullu jokamaukas ja suolainen '
		dc.b	'olli mita kuuluu dille duupi  wessi     '
		dc.b	'sammakko  lammentie i a       kuopio    '
		even

MirrorPos:	dc.w	0,50
MirrorPic:	blk.w	1920,0
MirrorSIN:	blk.w	128,0
Font:		blk.w	5760,0
Negat:		blk.w	1024,0
