שתשת                                        
debug=		0
aika=		440
xsize=		24
ysize=		50
ysize2=		40
ysize3=		30
logoaika=	1*50

Wblit:	macro
.wb\@:	btst	#6,$2(a6)
	bne.s	.wb\@
	endm

RMB:	macro
.wb\@:	btst	#10,$16(a6)
	beq.s	.wb\@
	endm

j	lea	$dff000,a6
	ifeq	debug
	jsr	setupcopper
	jsr	setupinter
	endc

	lea	j(pc),a5	;PC-relative!

	move.w	#logoaika,d6
	move.w	#aika,d7
	move.w	d6,ltime+2-j(a5)
	move.w	d7,hola1+2-j(a5)
	add.w	#75,d7
	move.w	d7,hola2+2-j(a5)
	add.w	#100,d7
	move.w	d7,hola3+2-j(a5)
	add.w	#(265-16)-100-75,d7
	move.w	d7,hola4+2-j(a5)
	add.w	#32,d7
	move.w	d7,hola5+2-j(a5)


	moveq	#-1,d0
	Wblit
	move.l	#$01f00000,$40(a6)
	move.l	d0,$44(a6)
	move.w	#96-2*xsize,$66(a6)
	move.w	d0,$74(a6)
	move.l	#screen2+[(144-ysize/2)*96]+[(24-xsize)],$54(a6)
	move.w	#ysize*64+xsize,$58(a6)

	moveq	#0,d0
	Wblit
	move.l	#$01f00000,$40(a6)
	move.w	#96-2*xsize,$66(a6)
	move.w	d0,$74(a6)
	move.l	#screen2+[(144-ysize2/2)*96]+[(24-xsize)],$54(a6)
	move.w	#ysize2*64+xsize,$58(a6)

	moveq	#-1,d0
	Wblit
	move.l	#$01f00000,$40(a6)
	move.w	#96-2*xsize,$66(a6)
	move.w	d0,$74(a6)
	move.l	#screen2+[(144-ysize3/2)*96]+[(24-xsize)],$54(a6)
	move.w	#ysize3*64+xsize,$58(a6)

	Wblit
	move.l	#$002a002a,$64(a6)

;-----
	lea	screen2+[(144-ysize/2)*96],a0
	lea	destin,a1
	moveq	#50-1,d7
.lpy:	moveq	#48-1,d6
.lpx:	move.b	(a0)+,(a1)+
	dbf	d6,.lpx
	lea	48(a0),a0
	dbf	d7,.lpy	
;-----

	bsr.w	dechunky

	lea	logoplanes,a0
	move.l	#converted,d0
	moveq	#5-1,d7
.llp:	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.l	#50*48,d0
	addq.l	#8,a0
	dbf	d7,.llp

	move.l	#logocopper,$84(a6)
	move.w	d0,$8a(a6)

mlp:	cmp.b	#$40,$6(a6)
	bne.s	mlp
..	cmp.b	#$41,$6(a6)
	bne.s	..
	addq.w	#1,timer
ltime:	cmp.w	#logoaika,timer
	ble.s	mlp

.mlp2:	cmp.b	#$e0,$6(a6)
	bne.s	.mlp2
..2	cmp.b	#$e1,$6(a6)
	bne.s	..2
	bsr.w	morph
	RMB
	tst.w	d7
	beq.s	.endm
	bra.s	.mlp2
.endm:

	move.w	#0,timer
	ifeq	debug
	lea	copper(pc),a0
	move.l	a0,$84(a6)
	move.w	d0,$8a(a6)		;execute copper2
	endc

Mainlp:	ifeq	debug
	cmp.b	#$37,6(a6)
	bne.s	mainlp
	tst.b	5(a6)
	beq.s	mainlp

	endc

.rmb:	btst	#10,$16(a6)
	beq.s	.rmb

hola1:	cmp	#aika,timer-j(a5)
	ble.s	g1
	move.l	#places3,spin-j(a5)
	move.l	#spintab3,spin+4-j(a5)
hola2:	cmp	#aika+75,timer-j(a5)
	ble.s	g1
	move.l	#places2,spin-j(a5)
	move.l	#spintab2,spin+4-j(a5)
hola3:	cmp	#aika+75+100,timer-j(a5)
	ble.s	g1
	move.l	#places3,spin-j(a5)
	move.l	#spintab3,spin+4-j(a5)
hola4:	cmp	#aika+265-16,timer-j(a5)
	ble.s	g1
	lea	ee-2*4,a0
	lea	chaoscols+2(pc),a1
	moveq	#4-1,d0
	moveq	#4-1,d7
	bsr.w	fader
hola5:	cmp	#aika+265+16,timer-j(a5)
	bgt.s	quit

g1	bsr	show
	bsr	flex
	bsr	rotate
	addq	#1,timer-j(a5)

	lea	drawplane(pc),a0
	move.l	(a0),d0
	move.l	4(a0),(a0)
	move.l	d0,4(a0)

	btst	#6,$bfe001
	bne.w	Mainlp
;-----------------------------------

quit:	lea	$dff000,a6
	jsr	setoldinter
	jsr	setoldcop
	moveq	#0,d0
	rts

;------------------------------------------
interrupt:	btst	#5,$dff01f
		beq.s	interrupt
		move.w	#$0020,$dff09c

;		movem.l	d0-a6,-(sp)
;		movem.l	(sp)+,d0-a6
		rte
;------------------------------------------
;------------------------------------------
timer:		dc	0
npos:		dc.b	0
opos:		dc.b	0
;------------------------------------
;------------------------------------
dechunky:
	lea	logo(pc),a0
	lea	converted+2*48+2,a1
	move.l	a1,a2
	moveq	#0,d0
	moveq	#0,d1

	moveq	#44-1,d7
.lpx:	moveq	#8-1,d6
.lpb:	moveq	#47-1,d5
.lpy:	move.b	(a0)+,d0

	btst	#1,d0
	beq.s	.1
	bset	d6,(a1)
.1	btst	#2,d0
	beq.s	.2
	bset	d6,1*50*48(a1)
.2	btst	#3,d0
	beq.s	.3
	bset	d6,2*50*48(a1)
.3	btst	#4,d0
	beq.s	.4
	bset	d6,3*50*48(a1)
.4	btst	#5,d0
	beq.s	.5
	bset	d6,4*50*48(a1)
.5
	lea	48(a1),a1
	dbf	d5,.lpy
	lea	-47*48(a1),a1
	dbf	d6,.lpb
	addq.l	#1,a1
	dbf	d7,.lpx
	rts
;------------------------------------
;------------------------------------
morph:	not	at
	beq.s	.ok
	moveq	#1,d7
	rts

.ok	lea	destin,a0
	lea	converted,a1
	lea	motab(pc),a2

	moveq	#0,d0
	move.w	mpoint(pc),d0
	addq.w	#1,mpoint-j(a5)
	move.b	(a2,d0.w),d0
	bmi.s	.out
	add.l	d0,a0
	add.l	d0,a1

	move.w	#50*48/23-1,d7
.lp:	move.b	(a0),d0
	move.b	d0,(a1)
	move.b	d0,1*50*48(a1)
	move.b	d0,2*50*48(a1)
	move.b	d0,3*50*48(a1)
	move.b	d0,4*50*48(a1)
	lea	23(a0),a0
	lea	23(a1),a1
	dbf	d7,.lp
	rts

.out:	moveq	#0,d7
	rts

at:	dc.w	0
mpoint:	dc.w	0
motab:	dc.b	1,15,7,22,3,19,17,5,11,2,21,4,16,6,20
	dc.b	5,10,8,14,9,18,12,13,0
	dc.b	-1
	even
;------------------------------------
;------------------------------------
fadetest:	dc.w	0
fader:	addq.w	#1,fadetest
	cmp.w	fadetest,d0
	bge.w	.out
	move.w	#0,fadetest

.loop:	move.w	(a0)+,d0
	move.w	(a1),d1
	cmp.w	d0,d1
	beq.s	.next

	move.w	d0,d2
	move.w	d1,d4
	and.w	#$f00,d2
	and.w	#$f00,d4
	cmp.w	d2,d4
	beq.s	.1b
	bgt.s	.1
	add.w	#$200,d4
.1:	sub.w	#$100,d4
.1b:	move.w	d0,d2
	move.w	d1,d3
	and.w	#$0f0,d2
	and.w	#$0f0,d3
	cmp.w	d2,d3
	beq.s	.2b
	bgt.s	.2
	add.w	#$020,d3
.2:	sub.w	#$010,d3
.2b:	or.w	d3,d4
	move.w	d0,d2
	move.w	d1,d3
	and.w	#$00f,d2
	and.w	#$00f,d3
	cmp.w	d2,d3
	beq.s	.3b
	bgt.s	.3
	addq.w	#2,d3
.3:	subq.w	#1,d3
.3b:	or.w	d3,d4
	move.w	d4,(a1)
.next:	lea	4(a1),a1
	dbf	d7,.loop
.out:	rts
;------------------------------------
;------------------------------------
flex:	move.b	npos(pc),opos-j(a5)
	moveq	#$1f,d0
	and	timer(pc),d0
	move.b	mtab(pc,d0),npos-j(a5)
	rts

mtab:	dc.b	0,16
	dc.b	8,16+8
	dc.b	4,16+4
	dc.b	12,16+12
	dc.b	2,16+2
	dc.b	10,16+10
	dc.b	6,16+6
	dc.b	14,16+14
	dc.b	1,16+1
	dc.b	9,16+9
	dc.b	5,16+5
	dc.b	13,16+13
	dc.b	3,16+3
	dc.b	11,16+11
	dc.b	7,16+7
	dc.b	15,16+15
;--------------------------------------
;--------------------------------------
show:	moveq	#0,d0
	move.b	npos(pc),d0
	move.l	d0,d1
	asr	#3,d0
	muls	#96,d1
	add	d1,d0
	add	#14*96+2,d0
	add.l	showplane(pc),d0	;buf 2 = $58000

	lea	planes(pc),a0
	moveq	#2-1,d7
.lp:	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.l	#48,d0
	addq.l	#8,a0
	dbf	d7,.lp

	moveq	#$f,d1
	and.b	npos(pc),d1
	move.b	sfttab(pc,d1),$102(a6)	;shift value
	rts

sfttab:	dc.b	$ff,$ee,$dd,$cc,$bb,$aa,$99,$88
	dc.b	$77,$66,$55,$44,$33,$22,$11,$00
;-----------------------------------------------
rotate:	move.l  showplane(pc),a0	;s
	move.l	drawplane(pc),a4	;d
	move.l	#16*96+44,d0
	add.l	d0,a4
	add.l	d0,a0
	move.l	spin(pc),a1
	move.l	spin+4(pc),a2

	moveq	#0,d5
	move.b	opos(pc),d5
	sub.b	npos(pc),d5
	ext	d5
	muls	#8*96+1,d5
	add	#15,d5
	move	#$1003,d3	;size
	move.l	#32*96+12*4,d4

	moveq	#10-1,d7
.lp:	move	(a1)+,d1
	add	d5,d1
	moveq	#12-1,d6

.lp2:	move	(a2)+,d0
	add	d1,d0
	moveq	#$f,d2
	and	d0,d2
	add	d2,d2
	move	minterm(pc,d2),d2
	asr	#3,d0
	lea	(a0,d0),a3

	Wblit
	move	d2,$40(a6)
	movem.l	a3/a4,$50(a6)
	move	d3,$58(a6)
	subq.l	#4,a0
	subq.l	#4,a4
	dbf	d6,.lp2

	add.l	d4,a0
	add.l	d4,a4
	lea	-2*12(a2),a2
	dbf	d7,.lp
	rts
;-------------------------------------------------
minterm:	dc	$f9f0,$e9f0,$d9f0,$c9f0,$b9f0,$a9f0,$99f0,$89f0
		dc	$79f0,$69f0,$59f0,$49f0,$39f0,$29f0,$19f0,$09f0
;-------------------------------------------------
;-------------------------------------------------
SPIN:		dc.l	places1,spintab1

places1:	dc	32*96+4
		dc	24*96+3
		dc	16*96+2
		dc	8*96+1
		dc	0
		dc	-8*96+1
		dc	-16*96+2
		dc	-24*96+3
		dc	-32*96+4
		dc	-40*96+5

spintab1:	dc	-5*768+5
		dc	-4*768+4
		dc	-3*768+3
		dc	-2*768+2
		dc	-1*768+1
		dc	0
		dc	1*768+1
		dc	2*768+2
		dc	3*768+3
		dc	4*768+4
		dc	5*768+5
		dc	6*768+6
;----------------
places2:	dc	+32*96
		dc	+24*96
		dc	+16*96
		dc	+8*96
		dc	0
		dc	-8*96
		dc	-16*96
		dc	-24*96
		dc	-32*96
		dc	-40*96

spintab2:	dc	-5,-4,-3,-2,-1,0,1,2,3,4,5,6
;----------------
places3:	dc	32*96-4
		dc	24*96-3
		dc	16*96-2
		dc	8*96-1
		dc	0
		dc	-8*96+1
		dc	-16*96+2
		dc	-24*96+3
		dc	-32*96+4
		dc	-40*96+5

spintab3:	dc	-5*768-5
		dc	-4*768-4
		dc	-3*768-3
		dc	-2*768-2
		dc	-1*768-1
		dc	0
		dc	1*768+1
		dc	2*768+2
		dc	3*768+3
		dc	4*768+4
		dc	5*768+5
		dc	6*768+6
;------------------------------------------
;------------------------------------------
setupcopper:	moveq	#0,d0
		lea	$120(a6),a0
		moveq	#24-1,d7
.lp:		move.l	d0,(a0)+
		dbf	d7,.lp

		move.w	$2(a6),dmacon
		move.w	#$7fff,$96(a6)
		move.w	#$87c0,$96(a6)
		rts

setupinter:	move.l	$1c(a6),intena
		move.l	#$7fff7fff,$9a(a6)
		move.l	$6c,level3
		move.l	#interrupt,$6c
		move.w	#$c020,$9a(a6)
		rts

setoldinter:	move.l	level3(pc),$6c
		move.l	intena(pc),d0
		or.l	#$80008000,d0
		move.l	d0,$9a(a6)
		rts

setoldcop:	move.l	$4.w,a5
		move.l	156(a5),a4
		move.l	38(a4),$80(a6)
		move.w	#0,$2e(a6)
		move.w	dmacon(pc),d0
		or.w	#$8000,d0
		move.w	d0,$96(a6)
		rts
;------------------------------------------
dmacon:		dc.w	0
intena:		dc.l	0
level3:		dc.l	0
;-------------------------------------------
;-------------------------------------------
logocopper:	dc	$108,0,$10a,0
		dc	$1fc,0
		dc	$102,$ee
		dc	$8e,$8b71,$90,$bdd1
		dc	$92,$20,$94,$d8
		dc	$120,0,$122,0

logoplanes:	dc	$e0,0,$e2,0
		dc	$e4,0,$e6,0
		dc	$e8,0,$ea,0
		dc	$ec,0,$ee,0
		dc	$f0,0,$f2,0
		dc	$100,$5200

		dc	$180,$0123
		dc	$182,$0eef
		dc	$184,$0cce
		dc	$186,$0aad
		dc	$188,$099b
		dc	$18a,$087a
		dc	$18c,$0669
		dc	$18e,$0548
		dc	$190,$0437
		dc	$192,$0425
		dc	$194,$0324
		dc	$196,$0213
		dc	$198,$0ffe
		dc	$19a,$0edc
		dc	$19c,$0cca
		dc	$19e,$0ba9
		dc	$1a0,$0a87
		dc	$1a2,$0866
		dc	$1a4,$0755
		dc	$1a6,$0645
		dc	$1a8,$0534
		dc	$1aa,$0323
		dc	$1ac,$0eef
		dc	$1ae,$0dce
		dc	$1b0,$0bbd
		dc	$1b2,$0a9c
		dc	$1b4,$0a8a
		dc	$1b6,$0979
		dc	$1b8,$0868
		dc	$1ba,$0757
		dc	$1bc,$0645
		dc	$1be,$0446
		dc.l	-2
;-------------------------------------------
copper:		dc	$108,48+4,$10a,48+4
		dc	$8e,$2271,$90,$35c1
		dc	$92,$0028,$94,$d0
		dc	$120,0,$122,0

planes:		dc	$e0,0,$e2,0
		dc	$e4,0,$e6,0
		dc	$100,$2200

chaoscols:	dc	$180,$0123
		dc	$182,$0446
		dc	$184,$0545
		dc	$186,$0455
		dc.l	-2
;-------------------------------------

drawplane:	dc.l	screen1
showplane:	dc.l	screen2

		incdir	``
logo:		incbin	seka:src/system/vd.5plane.chunky
e


destin:		blk.b	48*51,0
		blk.b	32*96,0
screen1:	blk.b	288*96,0
screen2:	blk.b	288*96,0
		blk.b	32*96,0

converted:	blk.b	5*48*51,0
ee
