jmp run

Clsize= 36+[200*8]+12

AbsExecBase=	4

DMACON=	$dff096
INTENA= $dff09a

;----- exec.library
OpenLibrary=	-408
CloseLibrary=	-414

Forbid=		-132
Permit=		-138

AllocMem=	-198
FreeMem=	-210

;----- graphics.library
InitBitMap=	-390
InitRastPort=	-198
ClearScreen=	-48

ScrollRaster=	-396
Move=		-240
Text=		-60

Draw=		-246
SetRast=	-234

run:

movem.l	a0-a6/d0-d7,-(a7)

; Alloc CHIP RAM for CopperList

move.l	AbsExecBase,a6
move.l	#CLsize,d0
move.l	#2,d1		; CHIP RAM
jsr	AllocMem(a6)
move.l	d0,CLadr
beq	MAINEXIT

; CopperList -> CHIP RAM

move.l	CLadr,a1

move.l	#$00e00004,(a1)
move.l	#$00e20000,4(a1)

move.l	#$008e2c81,8(a1)
move.l	#$0090f4c1,12(a1)
move.l	#$00920038,16(a1)
move.l	#$009400d0,20(a1)
move.l	#$01020000,24(a1)
move.l	#$01080002,28(a1)
move.l	#$01001200,32(a1)


add.l	#36,a1

move.l	a1,d0
add.l	#1592,d0	;a2 bevat nu positie in CL waar color00list
move.l	d0,a2		; zijn laatste 8 color00 bytes staan
move.l	d0,a3

move.l	#100-1,d0
CLmake:
move.w	posyx,0(a1)
add.w	#$0100,posyx
move.w	#$fffe,2(a1)
move.w	#$0180,4(a1)
move.l	d0,d1
add.l	#$2f0,d1
mulu	#$0f,d1
andi	#$0f0f,d1
move.w	d1,6(a1)

move.w	posyxend,0(a2)
sub.w	#$0100,posyxend
move.w	#$fffe,2(a2)
move.w	#$0180,4(a2)
move.w	d1,6(a2)

add.l	#$08,a1
sub.l	#$08,a2

dbra	d0,CLmake

move.l	#$f409fffe,8(a3)
move.l	#$01800000,12(a3)
move.l	#$fffffffe,16(a3)


; De CopperList is nu klaar, nu volgen nog enkele register inits


move.l	AbsExecbase,a6
lea	GfxName,a1
jsr	OpenLibrary(a6)
move.l	d0,GfxBase

move.l	#$00,$dff120	;SPR1PTH
move.w	#$0020,DMACON

move.l	GfxBase,a6
lea	BitMap,a0
move.l	#1,d0
move.l	#336,d1
move.l	#200,d2
jsr	InitBitMap(a6)
move.l	#$40000,plane1
lea 	rp,a1
jsr	InitRastPort(a6)
move.l	#BitMap,rp_BitMap
lea 	rp,a1
jsr	ClearScreen(a6)
move.l	#scrolltext,scrolltextptr



lea	rp,a1
move.l	#0,d0
jsr	SetRast(a6)

move.l	AbsExecBase,a6
jsr	Forbid(a6)

move.w	#$0080,DMACON
move.l	GfxBase,a0
move.l	$32(a0),OldCLadr
move.l	CLadr,$32(a0)
move.w	#$8080,DMACON


move.w	#$4000,INTENA
move.l	$6c,oldirq+2
move.l	#newirq,$6c
move.w	#$c000,INTENA

wait:
btst	#6,$bfe001
bne	wait

move.w	#$4000,INTENA
move.l	oldirq+2,$6c
move.w	#$c000,INTENA

move.w	#$0080,DMACON
move.l	GfxBase,a0
move.l	OldCLadr,$32(a0)
move.w	#$80a0,DMACON

move.l	AbsExecBase,a6
jsr	Permit(a6)

move.l	GfxBase,a1
jsr	CloseLibrary(a6)

; Free the allocated memory

move.l	CLadr,a1
move.l	#CLsize,d0
jsr	Freemem(a6)

MAINEXIT:
clr.l	d0

movem.l	(a7)+,a0-a6/d0-d7
rts

newirq:
movem.l	d0-d7/a0-a6,-(sp)

add.l	#1,xpos		; 1
cmp.l	#30,xpos		; TRY HERE : 4, 8, 9, 11
bne	CONT1
move.l	#0,xpos

CONT1:

move.l	GfxBase,a6
lea	rp,a1
move.l	#2,d0
clr.l	d1
move.l	#0,d2
move.l	#73,d3
move.l	#335,d4
move.l	#127,d5
jsr	ScrollRaster(a6)


;move.l	GfxBase,a6
lea	rp,a1
move.l	#0,d0
move.l	#1,d1
;move.l	#0,d2
;move.l	#73,d3
move.l	#170,d4
sub.l	xpos,d4
;move.l	#127,d5
jsr	ScrollRaster(a6)

;move.l	GfxBase,a6
lea	rp,a1
move.l	#0,d0
move.l	#-1,d1
;move.l	#0,d2
;move.l	#73,d3
move.l	#150,d4
sub.l	xpos,d4
;move.l	#127,d5
jsr	ScrollRaster(a6)


sub.b	#$02,rows	; substract dx !
bne	IRQEXIT
move.b	#$08,rows

move.w	#$666,$dff182


lea	rp,a1
move.l	#320,d0
move.l	#113,d1
jsr	Move(a6)

lea	rp,a1
move.l	scrolltextptr,a0
move.l	#$01,d0
jsr	Text(a6)


addq.l	#$01,scrolltextptr
cmp.l	#scrolltextend,scrolltextptr
blt.s	IRQEXIT
move.l	#scrolltext,scrolltextptr
IRQEXIT:
movem.l	(sp)+,d0-d7/a0-a6
oldirq:
jmp	$00000000

even

; Variables

CLadr:		dc.l	0
even
OldCLadr:	dc.l	0
even
GfxBase:	dc.l	0
even
rows:		dc.b	$02
even
xpos:		dc.l	0
even
posyx:
dc.w	$2c09
even
posyxend:
dc.w	$f409
even
BitMap:
blk.w	4,0
plane1:
blk.l	20,0
rp:
dc.l	0
rp_BitMap:
blk.l	1,0
blk.b	96,0
even
scrolltextptr:
blk.l	1,0

; Constants

even
GfxName:
dc.b	'graphics.library',0
even
scrolltext:
dc.b	"THIS IS A TEST SCROLL WITH NON-CHANGING COPPERLIST."
dc.b	" PROGRAMMED BY AMY PRODUCTIONS FOR NUMERO UNO "
DC.B	"IN EUROPE ... BAMIGA SECTOR ONE !                 "
scrolltextend:
even
