*************************************************************************
*									*
*	The Xtra Bit				by The 81st Track	*
*									*
*************************************************************************

		org	$20000		; right on top of the menu!

		incdir		"asrc:include/"

		include		"libraries/dos_lib.i"
		include		"exec/exec_lib.i"
		include		"hardware/custom.i"
		include		"hardware/blit.i"
		include		"81/my_macros.i"


Hardware	equ	$dff000
MemNeeded	equ	7520
Mem2Alloc	equ	9632
SystemCopper1	equ	$26
SystemCopper2	equ	$32
PortA		equ	$bfe001
ICRA		equ	$bfed01
LeftMouse	equ	6
a1save		equ	$7f400

*************************************************************************

start		move.l	#Hardware,a6
		move.w	#$7fff,intena(a6)
		bsr	KillSprDatBuff
		bsr	MainCode
		move.l	a1save,a1
		move.l	#$20000,40(a1)
		move.l	#$8fa00,44(a1)	; offset
		move.l	#$3fe00,36(a1)	; len
		move.l	_SysBase,a6
		jsr	_LVODoIO(a6)
		jmp	$20000

*************************************************************************

MainCode	bsr	SetupAll
MainCodeLoop	bsr	WaitForFrame
*		bsr	ClearMem
		jsr	bobmain
		jsr	do1616text
		jsr	Roller
*		move.w	#$0fd0,color(a6)
		jsr	mt_music
		jsr	crawlamiga
		btst	#LeftMouse,PortA
		bne	MainCodeLoop
		jsr	mt_end
		rts

*************************************************************************

ClearMem	move.l	MemBase,a0
		move.l	#MemNeeded/64-1,d0
ClearMemLoop	clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		clr.l	(a0)+
		dbf	d0,ClearMemLoop
		rts

SetupAll	bsr	ClearMem
		move.l	#3519,d0
		move.l	#TextBitmap,a0
ClrTextLoop	clr.l	(a0)+
		dbf	d0,ClrTextLoop
		move.l	MemBase,a0
		add.l	#7520,a0
		move.l	#527,d0
xyz1		clr.l	(a0)+
		dbf	d0,xyz1
		move.l	#RollScreenData,d0
		move.l	#CopRSD,a1
		move.w	d0,6(a1)
		swap	d0
		move.w	d0,2(a1)
		move.l	MemBase,d0
		move.l	#CopVSD,a1
		move.w	d0,6(a1)
		swap	d0
		move.w	d0,2(a1)
		move.l	#TextBitmap,d0
		move.l	#CopTextPlane,a1
		move.w	d0,6(a1)
		swap	d0
		move.w	d0,2(a1)
		swap	d0
		add.l	#7040,d0
		move.w	d0,14(a1)
		swap	d0
		move.w	d0,10(a1)
		move.l	#NewCopper,cop1lc(a6)
		move.w	#0,copjmp1(a6)
		move.w	#$0020,dmacon(a6)
		move.w	#$83c0,dmacon(a6)
		move.w	#$7fff,intreq(a6)
		jsr	mt_init
		jsr	crawlamigainit
		jsr	bobinit
		bsr	WaitForBlit
		rts

WaitForVBlank	btst	#5,intreqr+1(a6)
		beq	WaitForVBlank
		move.w	#$20,intreq(a6)
		rts

KillSprDatBuff	moveq.l	#0,d0
		move.l	d0,$144(a6)
		move.l	d0,$14c(a6)
		move.l	d0,$154(a6)
		move.l	d0,$15c(a6)
		move.l	d0,$164(a6)
		move.l	d0,$16c(a6)
		move.l	d0,$174(a6)
		move.l	d0,$17c(a6)
		rts

WaitForFrame	btst	#4,intreqr+1(a6)
		beq	WaitForFrame
		move.w	#$10,intreq(a6)
		rts

WaitForBlit	btst	#14,dmaconr(a6)
WFBLoop		btst	#14,dmaconr(a6)
		bne.s	WFBLoop
		rts

*************************************************************************

		even

NewCopper	cmove	$0200,bplcon0
		cmove	$0000,bplcon1
		cmove	$2c81,diwstrt
		cmove	$2cc1,diwstop
		cmove	$0038,ddfstrt
		cmove	$00d0,ddfstop
		cmove	$0000,bpl1mod
		cmove	$0000,bpl2mod
		cwait	$2c,$09
		cmove	$1200,bplcon0
CopRSD		cmove	$0000,bplpt
		cmove	$0000,bplpt+$02
		cmove	$0200,color
		cmove	$0220,color+$02
		cwait	$2d,$09
		cmove	$0001,bplcon1
		cmove	$0300,color
		cmove	$0330,color+$02
		cwait	$2e,$09
		cmove	$0002,bplcon1
		cmove	$0400,color
		cmove	$0440,color+$02
		cwait	$2f,$09
		cmove	$0003,bplcon1
		cmove	$0500,color
		cmove	$0550,color+$02
		cwait	$30,$09
		cmove	$0600,color
		cmove	$0660,color+$02
		cwait	$31,$09
		cmove	$0004,bplcon1
		cmove	$0700,color
		cmove	$0770,color+$02
		cwait	$32,$09
		cmove	$0800,color
		cmove	$0880,color+$02
		cwait	$33,$09
		cmove	$0900,color
		cmove	$0990,color+$02
		cwait	$34,$09
		cmove	$0005,bplcon1
		cmove	$0a00,color
		cmove	$0aa0,color+$02
		cwait	$36,$09
		cmove	$0b00,color
		cmove	$0bb0,color+$02
		cwait	$3a,$09
		cmove	$0a00,color
		cmove	$0aa0,color+$02
		cwait	$3c,$09
		cmove	$0004,bplcon1
		cmove	$0900,color
		cmove	$0990,color+$02
		cwait	$3d,$09
		cmove	$0800,color
		cmove	$0880,color+$02
		cwait	$3e,$09
		cmove	$0700,color
		cmove	$0770,color+$02
		cwait	$3f,$09
		cmove	$0003,bplcon1
		cmove	$0600,color
		cmove	$0660,color+$02
		cwait	$40,$09
		cmove	$0500,color
		cmove	$0550,color+$02
		cwait	$41,$09
		cmove	$0002,bplcon1
		cmove	$0400,color
		cmove	$0440,color+$02
		cwait	$42,$09
		cmove	$0001,bplcon1
		cmove	$0300,color
		cmove	$0330,color+$02
		cwait	$43,$09
		cmove	$0000,bplcon1
		cmove	$0200,color
		cmove	$0220,color+$02
		cwait	$44,$09
		cmove	$0000,color
		cmove	$0fff,color+$02
CopVSD		cmove	$0000,bplpt
		cmove	$0000,bplpt+$02
		cwait	$4c,$09
		cmove	$3200,bplcon0
CopTextPlane	cmove	$0000,bplpt+$04
		cmove	$0000,bplpt+$06
		cmove	$0000,bplpt+$08
		cmove	$0000,bplpt+$0a
		cmove	$0ed0,color+$04	; 01 0 - text colour 1
		cmove	$0ed0,color+$06	; 01 1 - bob plane behind text
		cmove	$0db0,color+$08 ; 10 0 - text colour 2
		cmove	$0db0,color+$0a ; 10 1 - bob plane behind text
		cmove	$0c90,color+$0c ; 11 0 - text colour 3
		cmove	$0c90,color+$0e	; 11 1 - bob plane behind text
		cwait	$da,$09
		cmove	$8010,intreq
		cwait	$fc,$09
		cmove	$1200,bplcon0
		cwait	$ff,$09
		cmove	$0000,color+$02
		dc.w	$ffdd,$fffe
		cwait	$00,$09
		cmove	$0001,bplcon1	; shift prop font crawler right a bit
		cmove	$0fff,color+$02
		cmove	$0008,bpl1mod
		cmove	$1200,bplcon0
		cend

*************************************************************************

Level2Vector	dc.l	0
Level3Vector	dc.l	0
SystemInts	dc.w	0
SystemDMA	dc.w	0
GraphicsBase	dc.l	0

GraphicsName	dc.b	'graphics.library',0

		even

*************************************************************************

mt_data		incbin	"sys:81mods/mod.z-space"

		include	"asrc:demo/common/nt20play.s"

		include	"roller.s"

		include	"crawlamiga.s"

		include	"asrc:font3.s"

		include	"bob.s"

		include	"1616text.s"

MemBase		dc.l	MemForData
MemForData	ds.b	Mem2Alloc

TextBitmap	ds.b	14080

		end