; ##################################################################
; ##                                                              ##
; ##      SINUS-SCROLLER DEMO-SOURCE BY SNOOPY OF LEVEL FOUR      ##
; ##                                                              ##
; ##   ONLY ASSEMBLE AND START WITH `J`, THE FONT IS IMPLEMENTED  ##
; ##                                                              ##
; ##               THIS IS A PRODUCTION FOR D.I.S.C.              ##
; ##                                                              ##
; ##################################################################
	org	$60000
	load	$60000
a:
	move.l	#Fun,$80.w		;Everything into trap
	trap	#0
	clr.l	d0
	rts

Fun:	MOVE.L	#Plane3-46,D0		;Write Address of BitPlane
	MOVE.W	D0,PL1LO		;into copper to show. 
	SWAP	D0
	MOVE.W	D0,PL1HI

	MOVE.L	#Text,TextyPointer	;Set TextPointer
	MOVE.L	#SinS,SinePointer	;Set SinePointer

	move.l	#Copper,$dff080		;Init Copper
	clr.w	$dff088

	move.l	$6c,oldirq		; Init Interrupt
	move.l	#vbi,$6c
	move.w	#$8010,$dff09a

	move.w	#$0020,$dff096		;Sprites off

wait:	btst	#6,$bfe001
	bne.s	wait

	move.w	#$8020,$dff096		;Sprites on

	move.l	$4,a6
	move.l	#gfxname,a1
	clr.l	d0
	jsr	-552(a6)
	move.l	d0,a0
	move.l	38(a0),$dff080		;Restore Copper
	clr.w	$dff088
	move.w	#$10,$dff09a
	move.l	OldIRQ,$6c		;Restore Interrupt
	rte				;Back from trap

vbi:	move.w	$dff01e,d0		;My Interrupt ?
	btst	#4,d0
	bne.s	copirq
	move.l	oldirq,a0
	jmp	(a0)

copirq:	move.w	#$0010,$dff09c
	bsr.L	scrolly			; Scroll the normal scroller
	bsr.L	sineclr			; Clear Sinus-Plane
	bsr.l	waitblit		; Wait for Clearblit 
	bsr.L	sine			; Sine the Scroller
	move.w	#$222,$dff180		; Used Rastertime is black !
	rte

sineclr:bsr.L	WaitBlit
	MOVE.L	#Plane3,$DFF054	        	; Dest.
	MOVE.W	#%0000100100000000,$DFF040	; Miniterm 
	CLR.W	$DFF066				; Modulo Dest.
	CLR.W	$DFF064	 			; Modulo Source A
	MOVE.W	#4248,$DFF058			; Size
rts2:	rts

sine:	MOVE.W	#%0000110111111100,$DFF040	; Miniterm: OR
	MOVE.W	#46,$DFF066			; Modulo Dest.
	MOVE.W	#46,$DFF062			; Modulo Source B
	MOVE.W	#46,$DFF064	 		; Modulo Source A
	lea	Plane1+48,a0			; From Plane
	lea	Plane3+48,a1			; To   Plane
	move.l	SinePointer,a2			; SineTabPointer
	move.b	#24,d0
OutL:	moveq	#3,d1
	move.b	#8,d2				; This routine is
InL:	move.l	a1,a3				; documented in
	cmpi.l	#$ffff,(a2)			; D.I.S.C
	bne.s	nowblit
	lea	SinS,a2
nowblit:add.l	(a2)+,a3
	bSR.L	WaitBlit
	MOVE.L	a0,$DFF050
	MOVE.L	a3,$DFF054
	MOVE.L	a3,$DFF04C
	MOVE.W	d1,$DFF044
	MOVE.W	d1,$DFF046
	MOVE.W	#1025,$DFF058
	LSL.W	#2,d1
	subq.b	#1,d2
	BNE.S	InL
	SUBQ.L	#2,A0
	SUBQ.L	#2,A1
	SUBQ.B	#1,d0
	BNE.S	OutL
	ADDQ.L	#4,SinePointer
	MOVE.L	SinePointer,a0
	cmpi.l	#$ffff,(a0)
	bne.S	rts1
	lea	SinS,a0
	move.l	a0,SinePointer
rts1:	RTS

Scrolly:bSR.L	WaitBlit
	MOVE.L	#Plane1,$DFF050
	MOVE.L	#Plane1-2,$DFF054
	MOVE.W	#%1111100111110000,$DFF040
	clr.W	$DFF042
	MOVE.W	#$FFFF,$DFF044			; Scroll one Pixel
	MOVE.W	#$FFFF,$DFF046			; left !
	clr.W	$DFF066
	clr.W	$DFF064
	MOVE.W	#920,$DFF058
	ADDQ.L	#1,PrintyZaehler
	CMPI.L	#16,PrintyZaehler
	BLO.s	NochNicht2
	CLR.L	PrintyZaehler
	bSR.s	Printy
NochNicht2:
	RTS
Printy:	CLR.L	CharyZaehler
	MOVE.L	#FontTabel2,A1	; Try to find the address of the
find2:	MOVE.B	(A1)+,D0	; ASCII standing in scrolltext !
	MOVE.L	TextyPointer,A2
	CMP.B	(A2),D0
	BEQ.S	gefunden2
	ADDQ.L	#1,CharyZaehler
	bra.s	find2
gefunden2:
	MOVE.L	CharyZaehler,D0
	CLR.L	CharyZaehler
	LSL.L	#1,D0 
	MOVE.L	#CharyPointers,A0
	ADD.L	D0,A0
	CLR.L	D0
	MOVE.W	(A0),D0
	bSR.L	WaitBlit
	MOVE.L	#MegaPL1,A1
	ADD.L	D0,A1
	MOVE.L	A1,$DFF050			; Now copy into
	MOVE.L	#Plane1+48,$DFF054		; scrolline !!!
	MOVE.W	#%0000100111110000,$DFF040
	MOVE.W	#$ffff,$DFF044
	MOVE.W	#$ffff,$DFF046
	MOVE.W	#46,$DFF066
	MOVE.W	#38,$DFF064
	MOVE.W	#897,$DFF058
	ADDQ.L	#1,TextyPointer
	MOVE.L	TextyPointer,A0
	MOVE.B	(A0),D0
	CMPi.B	#$FF,D0				; Textend ???
	BEQ.s	EndOfText
	RTS
EndOfText:
	MOVE.L	#Text,TextyPointer
	RTS

Waitblit:
	BTST	#14,$DFF002
	BNE.s	Waitblit
	RTS

copper:
	dc.w	$0100,$0200
	DC.W	$008E,$296b
	DC.W	$0090,$29c1
	DC.W	$0092,$0028
	DC.W	$0094,$00d0
	DC.W	$0108,$0004
	DC.W	$010A,$0004
	dc.w	$0182,$0fff
	DC.W	$00E0
PL1HI:	DC.W	$0000,$00E2
PL1LO:	DC.W	$0000
	DC.W	$b001,$fffe,$0100,$1000
	DC.W	$ff01,$fffe,$009C,$8010,$0180,$0000
	DC.W	$FFFF,$FFFE

Text:
DC.B " LEVEL FOUR      "      
DC.B "    ",$FF
even

FontTabel2:	DC.B	"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-./!^$%"
		DC.B	"&:;`()=*+?,ß "
CharyPointers:	DC.W	0000,0002,0004,0006,0008
		DC.W	0010,0012,0014,0016,0018
		DC.W	0020,0022,0024,0026,0028
		DC.W	0030,0032,0034,0036,0038
		DC.W	0600,0602,0604,0606,0608
		DC.W	0610,0612,0614,0616,0618
		DC.W	0620,0622,0624,0626,0628
		DC.W	0630,0632,0634,0636,0638
		DC.W	1200,1202,1204,1206,1208
		DC.W	1210,1212,1214,1216,1218
		DC.W	1220,1222,1224,1226,1228
		DC.W	1230,1232,1234,1236,1238

SinS:	;SinusTab
DC.L  1248, 1248, 1248, 1248, 1296, 1296, 1296
DC.L  1344, 1344, 1392, 1440, 1488
DC.L  1488, 1536, 1584, 1632, 1632, 1680, 1728, 1776, 1776, 1824
DC.L  1872, 1872, 1920, 1920, 1968, 2016, 2016, 2064, 2064, 2112
DC.L  2112, 2160, 2160, 2208, 2208, 2208, 2256, 2256, 2256, 2304
DC.L  2304, 2304, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352
DC.L  2352, 2400, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352
DC.L  2352, 2304, 2304, 2304, 2256, 2256, 2256, 2208, 2208, 2208
DC.L  2160, 2160, 2112, 2112, 2064, 2064, 2016, 2016, 1968, 1920
DC.L  1920, 1872, 1872, 1824, 1776, 1776, 1728, 1680, 1632, 1632
DC.L  1584, 1536, 1488, 1488, 1440, 1392, 1344, 1344, 1296, 1248
DC.L  1200, 1152, 1152, 1104, 1056, 1008, 1008, 960, 912, 864
DC.L  864, 816, 768, 720, 720, 672, 624, 576, 576, 528
DC.L  480, 480, 432, 432, 384, 336, 336, 288, 288, 240
DC.L  240, 192, 192, 144, 144, 144, 96, 96, 96, 48
DC.L  48, 48, 0, 0, 0, 0, 0, 0, 0, 0
DC.L  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DC.L  0, 48, 48, 48, 96, 96, 96, 144, 144, 144
DC.L  192, 192, 240, 240, 288, 288, 336
DC.L  336, 384, 432, 480, 528, 528, 576, 624, 624
DC.L  672, 672, 672, 672, 672, 672, 672, 672, 624, 624
DC.L  576, 528, 528, 480, 432, 384, 336, 288, 240, 192
DC.L  144, 144, 96, 48, 48, 0, 0, 0, 0, 0
DC.L  0, 0, 0, 48, 48, 96, 144, 144, 192, 240
DC.L  288, 336, 384, 432
DC.L  432, 480, 480, 528, 576, 576, 624, 672, 720, 720
DC.L  768, 816, 864, 864, 912, 960, 1008, 1008, 1056, 1104
DC.L  1152, 1200, 1200, 1248, 1296
DC.L  1344, 1344, 1392, 1440, 1488
DC.L  1488, 1536, 1584, 1632, 1632, 1680, 1728, 1776, 1776, 1824
DC.L  1872, 1872, 1920, 1920, 1968, 2016, 2016, 2064, 2064, 2112
DC.L  2112, 2160, 2160, 2208, 2208, 2208, 2256, 2256, 2256, 2304
DC.L  2304, 2304, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352
DC.L  2352, 2400, 2352, 2352, 2352, 2352, 2352, 2352, 2352, 2352
DC.L  2352, 2304, 2304, 2304, 2256, 2256, 2256, 2208, 2208, 2208
DC.L  2160, 2160, 2112, 2112, 2064, 2064, 2016, 2016, 1968, 1920
DC.L  1920, 1872, 1872, 1824, 1776, 1776, 1728, 1680, 1632, 1632
DC.L  1584, 1536, 1488, 1488, 1440, 1392, 1344, 1344, 1296, 1248
DC.L  1200, 1152, 1152, 1104, 1056, 1008, 1008, 960, 912, 864
DC.L  864, 816, 768, 720, 720, 672, 624, 576, 576, 528
DC.L  480, 480, 432, 432, 384, 336, 336, 288, 288, 240
DC.L  240, 192, 192, 144, 144, 144, 96, 96, 96, 48
DC.L  48, 48, 0, 0, 0, 0, 0, 0, 0, 0
DC.L  0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DC.L  0, 48, 48, 48, 96, 96, 96, 144, 144, 144
DC.L  192, 192, 240, 240, 288, 288, 336, 336, 384, 432
DC.L  432, 480, 480, 528, 576, 576, 624, 672, 720, 720
DC.L  768, 816, 864, 864, 912, 960, 1008, 1008, 1056, 1056
DC.L  1104,1104,1104,1152,1152,1152
DC.L  1152, 1152, 1200, 1200, 1200
DC.L  $ffff

gfxname:dc.b	"graphics.library",0
even
SinePointer:	dc.l  00
OldIRQ:		DC.L	0
TextyPointer:	DC.L	0
PrintyZaehler:	DC.L	0
CharyZaehler:	DC.L	0

MegaPL1:
DC.L	$1FE0FFE0,$1FE0FFE0,$1FFC1FFC,$1FE0F03C,$7FF8003C,$F03CF000
DC.L	$F87CFFE0,$1FE0FFE0,$1FE0FFE0,$1FFC7FF8,$7FF8FFF8,$7FF8FFF8
DC.L	$7FFC7FFC,$7FF8F03C,$7FF8003C,$F07CF000,$FCFCFFF8,$7FF8FFF8
DC.L	$7FF8FFF8,$7FFC7FF8,$7878F078,$7878F078,$78007800,$7878F03C
DC.L	$0780003C,$F0F8F000,$FFFCF078,$7878F078,$7878F078,$78000780
DC.L	$F03CF03C,$F03CF03C,$F000F000,$F03CF03C,$0780003C,$F1F0F000
DC.L	$F7BCF03C,$F03CF03C,$F03CF03C,$F0000780,$F03CF03C,$F03CF03C
DC.L	$F000F000,$F03CF03C,$0780003C,$F3E0F000,$F33CF03C,$F03CF03C
DC.L	$F03CF03C,$F0000780,$F03CF07C,$F03CF03C,$F000F000,$F000F03C
DC.L	$0780003C,$F7C0F000,$F03CF03C,$F03CF078,$F03CF078,$78000780
DC.L	$FFFCFFF8,$F800F83C,$FFC0FFC0,$F8FCFFFC,$0F80007C,$FFE0F800
DC.L	$F83CF83C,$F83CFFF8,$F83CFFF8,$7FE00F80,$FFFCFFF8,$FC00FC3C
DC.L	$FFC0FFC0,$FCFCFFFC,$1F8000FC,$FFE0FC00,$FC3CFC3C,$FC3CFFE0
DC.L	$FC3CFFF0,$1FF81F80,$FC3CFC3C,$FC3CFC3C,$FC00FC00,$FC3CFC3C
DC.L	$1F80F0FC,$FDF0FC00,$FC3CFC3C,$FC3CFC00,$FC3CFC78,$00781F80
DC.L	$FC3CFC3C,$FC7CFC7C,$FC00FC00,$FC7CFC3C,$1F80FCFC,$FDF0FC00
DC.L	$FC3CFC3C,$FC7CFC00,$FC7CFC3C,$007C1F80,$FC3CFFFC,$FFFCFFFC
DC.L	$FFFCFC00,$FFFCFC3C,$7FF8FFFC,$FCF8FFFC,$FC3CFC3C,$FFFCFC00
DC.L	$FFFCFC3C,$FFFC1F80,$FC3CFFF8,$7FF8FFF8,$7FFCFC00,$7FF8FC3C
DC.L	$7FF87FF8,$FCF87FFC,$FC3CFC3C,$7FF8FC00,$7FF0FC3C,$FFF81F80
DC.L	$FC3CFFF8,$7FF8FFF8,$7FFCFC00,$7FF8FC3C,$7FF87FF8,$FC7C7FFC
DC.L	$FC3CFC3C,$7FF8FC00,$7FFCFC3C,$FFF81F80,$FC3CFFE0,$1FE0FFE0
DC.L	$1FFCFC00,$1FE0FC3C,$7FF81FE0,$FC7C1FFC,$FC3CFC3C,$1FE0FC00
DC.L	$1FCCFC3C,$FFE01F80,$00000000,$00000000,$00000000,$00000000
DC.L	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
DC.L	$F03CF03C,$F03CF03C,$7878FFFC,$1FE00180,$1FE0FFE0,$F03CFFFC
DC.L	$1FE0FFE0,$1FE00FE0,$00000000,$001007C0,$F03CF03C,$F03CF03C
DC.L	$7878FFFC,$7FF80780,$7FF8FFF8,$F03CFFFC,$7FF8FFF8,$7FF87FF8
DC.L	$00000000,$003807C0,$F03CF03C,$F03CF87C,$7878003C,$78781F80
DC.L	$78780078,$F03CF000,$7878FFF8,$78787878,$00000000,$007C07C0
DC.L	$F03CF03C,$F03C7878,$7878003C,$F0FC0780,$F03C003C,$F03CF000
DC.L	$F03CFFFC,$F03CF03C,$00000000,$00FE07C0,$F03CF03C,$F03C7CF8
DC.L	$7878003C,$F1FC0780,$003C003C,$F03CF000,$F000007C,$F03CF03C
DC.L	$00000000,$01FC07C0,$F03CF03C,$F03C3FF0,$7CF80078,$F3BC0780
DC.L	$0078007C,$F03CF000,$F800003C,$F87C787C,$3FFC0000,$03F807C0
DC.L	$F83CF87C,$F33C1FE0,$3FF01FF8,$FF3C0780,$1FF80FF8,$FFFCFFE0
DC.L	$FFE0003C,$7FF87FFC,$3FFC0000,$07F007C0,$FC3C7CF8,$F7BC3FF0
DC.L	$3FF07FE0,$FE3C0780,$7FE00FF8,$FFFCFFF8,$FFF8007C,$7FF81FFC
DC.L	$3FFC0000,$0FE007C0,$FC3C7FF8,$FFFC7FF8,$1FE07C00,$FC3C0780
DC.L	$7C0000FC,$00FC00F8,$F07800FC,$F03C003C,$3FFC0000,$1FC007C0
DC.L	$FC7C3FF0,$FFFC7FF8,$0780F800,$FC7C0780,$F80000FC,$00FC007C
DC.L	$F07C00FC,$F03CF07C,$00000E00,$3F800000,$FFFC1FE0,$FFFCFCFC
DC.L	$0780FFFC,$FFFC7FF8,$FFFCFFFC,$00FCFFFC,$FFFC00FC,$FFFCFFFC
DC.L	$00001F00,$7F000380,$7FF80FC0,$FFFCFCFC,$0780FFFC,$7FF87FF8
DC.L	$FFFCFFF8,$00FCFFF8,$7FF800FC,$7FF87FF8,$00001F00,$FE0007C0
DC.L	$7FF80780,$FCFCF87C,$0780FFFC,$7FF87FF8,$FFFCFFF8,$00FCFFF8
DC.L	$7FF800FC,$7FF87FF8,$00001F00,$7C0007C0,$1FE00300,$F87CF87C
DC.L	$0780FFFC,$1FE07FF8,$FFFCFFE0,$00FCFFE0,$1FE000FC,$1FE01FE0
DC.L	$00000E00,$380007C0,$00000000,$00000000,$00000000,$00000000
DC.L	$00000000,$00000000,$00000000,$00000000,$00000000,$10000380
DC.L	$1C700700,$00081FE0,$00000000,$0E0003E0,$1F000000,$010003C0
DC.L	$1FE00000,$00000000,$00000000,$00000000,$3EF80700,$381C7FF8
DC.L	$00000000,$1F0007C0,$0F800000,$010003C0,$7FF80000,$00000000
DC.L	$00000000,$00000000,$3EF83FE0,$7C3E7878,$07000700,$1F000F80
DC.L	$07C00000,$038003C0,$7FF80000,$00000000,$00000000,$00000000
DC.L	$3EF87FF0,$7C7CF83C,$0F800F80,$1F000F80,$07C07FF8,$038003C0
DC.L	$FFFC0000,$00000000,$00000000,$00000000,$1E787FF0,$7CF8FC3C
DC.L	$0F800F80,$0F001F00,$03E07FF8,$07C003C0,$F07C0000,$00000000
DC.L	$00000000,$00000000,$0C307700,$39F0FE3C,$0F800F80,$06001F00
DC.L	$03E07FF8,$FFFE7FFE,$00780000,$00000000,$00000000,$00000000
DC.L	$18607FE0,$03E07FF8,$07000700,$0C001F00,$03E07FF8,$7FFC7FFE
DC.L	$00F80000,$00000000,$00000000,$00000000,$00007FF0,$07C03FF8
DC.L	$00000000,$00001F00,$03E00000,$3FF87FFE,$03F00000,$00000000
DC.L	$00000000,$00000000,$00003FF0,$0F807BF0,$07000700,$00001F00
DC.L	$03E07FF8,$1FF07FFE,$07C00380,$00000000,$00000000,$00000000
DC.L	$00000770,$1F38F1F8,$0F800F80,$00001F00,$03E07FF8,$1FF003C0
DC.L	$078007C0,$00000000,$00000000,$00000000,$00007FF0,$3E7CFFFC
DC.L	$0F800F80,$00001F00,$03E07FF8,$3FF803C0,$000007C0,$00000000
DC.L	$00000000,$00000000,$00007FF0,$7C7C7FFE,$0F800F80,$00000F80
DC.L	$07C07FF8,$3C7803C0,$030007C0,$00000000,$00000000,$00000000
DC.L	$00003FE0,$F87C7FFC,$07000780,$00000F80,$07C00000,$701C03C0
DC.L	$078003C0,$00000000,$00000000,$00000000,$00000700,$70381FE8
DC.L	$00000300,$000007C0,$0F800000,$400403C0,$07800180,$00000000
DC.L	$00000000,$00000000,$00000700,$20000000,$00000600,$000003E0
DC.L	$1F000000,$00000000,$03000300,$00000000,$00000000,$00000000
DC.L	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
DC.L	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
DC.L	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
DC.L	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000

Plane1:		BLK.B	1000,00
Plane3:		BLK.B	5000,00
