


;*--------------T-----------T-------------------------------T------------T-----
;* RickDangerous2
;* ~~~~~~~~~~~~~~
;*
;* Copyright © 1997 by Sunbeam/Shelter.
;*
;* Date: 23.06.97
;*
;* Assembler: SNMA 2.04, PhxAss 4.35
;* Includes: 40.16
;*-----------------------------------------------------------------------------


BARCNT	EQU	1	;copperbar delay
STOP	EQU	1	;scroll flag
SCROLLCNT	EQU	1	;scroll blit delay
SCROLLSTOP	EQU	70	;scroll stop delay


	INCLUDE	"hardinc.i"
	INCLUDE	"exec/execbase.i"
	INCLUDE	"dos/dosextens.i"
	INCLUDE	"hardware/dmabits.i"
	INCLUDE	"hardware/intbits.i"
	INCLUDE	"graphics/gfxbase.i"
	INCLUDE	"lvo/exec.i"
	INCLUDE	"lvo/graphics.i"


;*-----------------------------------------------------------------------------
;* Startup Code
;*-----------------------------------------------------------------------------


Main	lea	VBase(pc),a5	;handle workbench/shell startup
	move.l	SysBase.w,a6
	move.l	ThisTask(a6),a4
	tst.l	pr_CLI(a4)
	bne.s	ShellStart

	lea	pr_MsgPort(a4),a0
	CALL	WaitPort
	lea	pr_MsgPort(a4),a0
	CALL	GetMsg
	move.l	d0,WBStartup-VBase(a5)

ShellStart	moveq	#OS204,d0	;check os version
	cmp.w	LIB_VERSION(a6),d0
	bgt	WrongOS

	move.l	a5,-(sp)	;get vectorbase
	lea	VBRCode-VBase(a5),a5
	CALL	Supervisor
	move.l	(sp)+,a5
	move.l	d0,VectorBase-VBase(a5)

	lea	GraphicsName-VBase(a5),a1	;open graphics.library
	CALL	OldOpenLibrary
	move.l	d0,d7
	beq	NoGfxLib

	move.l	d0,a6
	move.l	gb_ActiView(a6),viewSave-VBase(a5)
	move.l	gb_copinit(a6),copperSave-VBase(a5)

	move.l	Main-4-VBase(a5),a3	;init bpl ptr's
	add.l	a3,a3
	add.l	a3,a3
	addq.w	#4,a3	;a3=data section
	lea	BitplanePtr-CopperList(a3),a0
	lea	Bitplane-CopperList(a3),a1
	move.l	a1,d6
	move.l	a1,d0
	moveq	#5-1,d1
	move.l	#640*256/8,d2
InitBplLoop	move.w	d0,6(a0)
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	add.l	d2,d0
	addq.w	#2*4,a0
	dbra	d1,InitBplLoop

	sub.l	a1,a1	;reset display
	CALL	LoadView
	CALL	WaitTOF
	CALL	WaitTOF
	CALL	OwnBlitter

	lea	custom,a4
	move.l	SysBase.w,a6
	moveq	#VBF_PAL,d0
	cmp.b	VBlankFrequency(a6),d0	;is ntsc?
	beq.s	IsPAL
	move.w	#%0000000000100000,beamcon0(a4)	;make pal display

IsPAL	addq.b	#1,TDNestCnt(a6)	;stop multitasking
	bset	#6,SysFlags(a6)
	CALL	Disable

	move.w	deniseid(a4),d0	;check aga
	and.w	#$00FF,d0
	cmp.b	#$F8,d0
	bne.s	NotAGA

	clr.w	fmode(a4)	;fix memory bandwith (cas32bit)
	move.w	#%0000000000010001,bplcon4(a4)	;fix sprites (esprm/osprm)
NotAGA	move.w	dmaconr(a4),d0	;init custom chips&irq
	or.w	#DMAF_SETCLR,d0
	move.w	d0,dmaconSave-VBase(a5)
	move.w	intenar(a4),d0
	or.w	#INTF_SETCLR,d0
	move.w	d0,intenaSave-VBase(a5)
	move.l	#$7fff7fff,d0
	move.w	d0,dmacon(a4)
	move.l	d0,intena(a4)

	move.l	VectorBase-VBase(a5),a0
	move.l	tp_AutoLevel3(a0),oldLevel3-VBase(a5)
	lea	Level3IRQ-VBase(a5),a1
	move.l	a1,tp_AutoLevel3(a0)

	move.w	#DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER!DMAF_AUDIO!DMAF_BLITTER,dmacon(a4)
	move.w	#INTF_SETCLR!INTF_INTEN!INTF_VERTB,intena(a4)
	move.l	a3,cop1lc(a4)
	clr.w	copjmp1(a4)

	lea	mt_data-CopperList(a3),a0
	bsr	mt_init
	lea	MainString-VBase(a5),a0
	bsr	Print

Wait	cmp.b	#255,vhposr(a4)
	bne.s	Wait
	btst	#CIAB_GAMEPORT0,ciaa
	bne.s	Wait


;*-----------------------------------------------------------------------------
;* Quit (System)
;*-----------------------------------------------------------------------------


Quit	move.w	#$7fff,intena(a4)
	move.l	VectorBase-VBase(a5),a0
	move.l	oldLevel3-VBase(a5),tp_AutoLevel3(a0)
	bsr	mt_end
	move.l	copperSave-VBase(a5),cop1lc(a4)
	move.w	dmaconSave-VBase(a5),dmacon(a4)
	move.w	intenaSave-VBase(a5),intena(a4)
	move.l	d7,a6
	move.l	viewSave-VBase(a5),a1
	CALL	LoadView
	CALL	DisownBlitter
	move.l	a6,a1
	move.l	SysBase.w,a6
	CALL	CloseLibrary
	subq.b	#1,TDNestCnt(a6)
	bclr	#6,SysFlags(a6)
	CALL	Enable
WrongOS
NoGfxLib	move.l	WBStartup-VBase(a5),d0
	beq.s	ShellExit
	move.l	d0,a1
	addq.b	#1,IDNestCnt(a6)
	JUMP	ReplyMsg
ShellExit	moveq	#0,d0
	rts


;*-----------------------------------------------------------------------------
;* Misc Routines
;*-----------------------------------------------------------------------------


Print	movem.l	d0-d3/a0-a2,-(sp)	;a0=strptr
	move.l	d6,a1
	lea	7*(80*7)-40(a1),a1	;-fixed pos (low-res)
	moveq	#0,d2
PrintLoop	moveq	#0,d1
	move.b	(a0)+,d1
	beq.s	PrintDone
	moveq	#10,d3
	sub.b	d3,d1
	bne.s	NoLineFeed
	lea	80*7(a1),a1
	moveq	#80,d3
	sub.w	d2,d3
	add.w	d3,a1
	moveq	#0,d2
	bra.s	PrintLoop
NoLineFeed	moveq	#32-10,d3
	sub.b	d3,d1
	beq.s	PrintDelay
	lsl.l	#3,d1
PDelayGoon	lea	Font-VBase(a5),a2
	add.l	d1,a2
	move.b	(a2)+,(a1)+
	move.b	(a2)+,80*1-1(a1)
	move.b	(a2)+,80*2-1(a1)
	move.b	(a2)+,80*3-1(a1)
	move.b	(a2)+,80*4-1(a1)
	move.b	(a2)+,80*5-1(a1)
	move.b	(a2)+,80*6-1(a1)
	move.b	(a2),80*7-1(a1)
	addq.w	#1,d2
	bra.s	PrintLoop
PrintDone	movem.l	(sp)+,d0-d3/a0-a2
	rts
PrintDelay	cmp.b	#" ",(a0)
	beq.s	PDelayGoon
	moveq	#50-1,d0
pwdl	cmp.b	#255,vhposr(a4)
	bne.s	pwdl
	dbra	d0,pwdl
	bra.s	PDelayGoon


Level3IRQ	move.w	#INTF_VERTB,intreq(a4)
	bsr	mt_music
	bsr	ScrollBars
	bsr	ScrollText
	rte


VBRCode	moveq	#0,d0
	btst	#AFB_68010,AttnFlags+1(a6)
	beq.s	1$
	movec	VBR,d0
1$	rte


	INCLUDE	"TEMP:Fixes/.GlobIncludes/ptreplay.asm"


;*-----------------------------------------------------------------------------
;* Scroll CopperBars
;*-----------------------------------------------------------------------------


ScrollBars	movem.l	d0-d3/a0-a2,-(sp)
	subq.b	#1,BarCount-VBase(a5)
	bne.s	2$
	move.b	#BARCNT,BarCount-VBase(a5)
	lea	Bar1Col+2-CopperList(a3),a0
	lea	Bar2Col+2-CopperList(a3),a1
	lea	Bar3Col+2-CopperList(a3),a2
	moveq	#56-2,d0
	move.w	(a0),d1
	move.w	(a1),d2
	move.w	(a2),d3
1$	move.w	4(a0),(a0)	;move colors
	move.w	4(a2),(a2)
	move.w	-4(a1),(a1)
	addq.w	#4,a0
	addq.w	#4,a2
	subq.w	#4,a1
	dbra	d0,1$
	move.w	d1,(a0)
	move.w	d2,(a1)
	move.w	d3,(a2)
2$	movem.l	(sp)+,d0-d3/a0-a2
	rts


;*-----------------------------------------------------------------------------
;* Text Scroller
;*-----------------------------------------------------------------------------


ScrollText	movem.l	d0-d1/a0-a1,-(sp)
	tst.w	ScrollDelay-VBase(a5)	;scroller stopped?
	beq.s	NoScrollDelay
	subq.w	#1,ScrollDelay-VBase(a5)
	bra	ScrollDone

NoScrollDelay	subq.b	#1,ScrollCount-VBase(a5)	;blitted?
	bne.s	WaitBlit
	move.b	#SCROLLCNT,ScrollCount-VBase(a5)

GetChar	lea	ScrollString-VBase(a5),a0
	add.w	ScrollPos-VBase(a5),a0
	moveq	#0,d0
	move.b	(a0)+,d0
	bne.s	CheckStop
	clr.w	ScrollPos-VBase(a5)
	bra.s	GetChar

CheckStop	addq.w	#1,ScrollPos-VBase(a5)
	subq.b	#STOP,d0	;stop scroller?
	bne.s	PrintChar
	move.w	#SCROLLSTOP,ScrollDelay-VBase(a5)
	bra.s	ScrollDone

PrintChar	moveq	#32-STOP,d1
	sub.b	d1,d0
	move.l	d6,a1
	lea	31*(80*7)-1(a1),a1
	lea	ScrollFont-VBase(a5),a0
	lsl.l	#3,d0
	add.l	d0,a0
	move.b	(a0)+,(a1)
	move.b	(a0)+,80*1(a1)
	move.b	(a0)+,80*2(a1)
	move.b	(a0)+,80*3(a1)
	move.b	(a0)+,80*4(a1)
	move.b	(a0)+,80*5(a1)
	move.b	(a0)+,80*6(a1)
	move.b	(a0),80*7(a1)

WaitBlit	btst	#DMAB_BLITTER,dmaconr(a4)
	bne.s	WaitBlit

	clr.l	bltamod(a4)	;+bltdmod
	move.w	#%1000100111110000,bltcon0(a4)
	clr.w	bltcon1(a4)
	moveq	#-1,d0
	move.l	d0,bltafwm(a4)	;+bltafwm
	move.l	d6,a0
	lea	36*(80*6)(a0),a0
	move.l	a0,bltapt(a4)
	subq.w	#1,a0
	move.l	a0,bltdpt(a4)
	move.w	#6*64,bltsize(a4)
ScrollDone	movem.l	(sp)+,d0-d1/a0-a1
	rts


;*-----------------------------------------------------------------------------
;* Data Section
;*-----------------------------------------------------------------------------


dmaconSave	dc.w	0
intenaSave	dc.w	0
viewSave	dc.l	0
copperSave	dc.l	0
WBStartup	dc.l	0
VectorBase	dc.l	0
oldLevel3	dc.l	0
BarCount	dc.b	BARCNT
ScrollCount	dc.b	SCROLLCNT
ScrollPos	dc.w	0
ScrollDelay	dc.w	0
GraphicsName	dc.b	"graphics.library",0
Font	INCBIN	"TEMP:Asm-Work/.Fonts/melon.fnt"
ScrollFont	INCBIN	"TEMP:Asm-Work/.Fonts/sunflex.fnt"
MainString	INCBIN	"rd2.txt"
	dc.b	0
ScrollString	dc.b	"               Welcome to our latest Amiga Classic Game Fix ...                ",STOP
	dc.b	"                         ... YES, we did it again! :)                          ",STOP
	dc.b	"                 Most stuff done by Sunbeam, great work mate!                  ",STOP
	dc.b	"               For joining and additional infos contacts us now!               ",STOP
	dc.b	"         Email: join.slt@usa.net / Homepage: www.lib.hel.fi/~mleh/slt          ",STOP
	dc.b	"               And don`t forget to support our worldwide boards!               ",STOP
	dc.b	"                        ",0
VBase	ds.l	0


	SECTION	COPPER,DATA_C

CopperList	dc.w	bplcon0,%1100000000000000
	dc.w	bplcon1,0
	dc.w	bplcon2,0
	dc.w	bplcon3,0
	dc.w	ddfstrt,$003c
	dc.w	ddfstop,$00d4
	dc.w	bpl1mod,0
	dc.w	bpl2mod,0
	dc.w	diwstrt,$2c81
	dc.w	diwstop,$2cbb

BitplanePtr	dc.w	bplpt+00,0
	dc.w	bplpt+02,0
	dc.w	bplpt+04,0
	dc.w	bplpt+06,0
	dc.w	bplpt+08,0
	dc.w	bplpt+10,0
	dc.w	bplpt+12,0
	dc.w	bplpt+14,0
	dc.w	bplpt+16,0
	dc.w	bplpt+18,0

;insert here iffmaster copperlist
;cut --

	dc.w	color+00,$000
	dc.w	color+02,$fdb
	dc.w	color+04,$def
	dc.w	color+06,$bdf
	dc.w	color+08,$acf
	dc.w	color+10,$9be
	dc.w	color+12,$8ad
	dc.w	color+14,$69c
	dc.w	color+16,$58b
	dc.w	color+18,$47a
	dc.w	color+20,$069
	dc.w	color+22,$058
	dc.w	color+24,$047
	dc.w	color+26,$025
	dc.w	color+28,$023
	dc.w	color+30,$000
	dc.w	color+32,$fc9
	dc.w	color+34,$fb6
	dc.w	color+36,$fa4
	dc.w	color+38,$e93
	dc.w	color+40,$d81
	dc.w	color+42,$c70
	dc.w	color+44,$b60
	dc.w	color+46,$a50
	dc.w	color+48,$940
	dc.w	color+50,$830
	dc.w	color+52,$720
	dc.w	color+54,$610
	dc.w	color+56,$500
	dc.w	color+58,$400
	dc.w	color+60,$300
	dc.w	color+62,$200

;cut -- end

	CWAIT	90,0
	dc.w	bplcon0,%0100000000000000
Bar1Col	dc.w	color,$666
	dc.w	color,$777
	dc.w	color,$888
	dc.w	color,$999
	dc.w	color,$aaa
	dc.w	color,$aaa
	dc.w	color,$bbb
	dc.w	color,$bbb
	dc.w	color,$ccc
	dc.w	color,$ccc
	dc.w	color,$ddd
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$fff
	dc.w	color,$fff
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$ddd
	dc.w	color,$ccc
	dc.w	color,$bbb
	dc.w	color,$aaa
	dc.w	color,$aaa
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$888
	dc.w	color,$888
	dc.w	color,$777
	dc.w	color,$666
	dc.w	color,$666
	dc.w	color,$777
	dc.w	color,$888
	dc.w	color,$888
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$aaa
	dc.w	color,$bbb
	dc.w	color,$ccc
	dc.w	color,$ddd
	dc.w	color,$eee
	dc.w	color,$fff
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$ddd
	dc.w	color,$ccc
	dc.w	color,$ccc
	dc.w	color,$bbb
	dc.w	color,$bbb
	dc.w	color,$aaa
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$888
	dc.w	color,$777
	dc.w	color,$777
	dc.w	color,$666
	dc.w	color,$555
	dc.w	color,$444
	dc.w	color,$555
	dc.w	color,$555
	CWAIT	91,0
	dc.w	bplcon0,%1100000000000000
	dc.w	color+00,$123
	dc.w	color+02,$fff


	CWAIT	254,0
	dc.w	bplcon0,%0100000000000000
	dc.w	color,$666
	dc.w	color,$777
	dc.w	color,$888
	dc.w	color,$999
	dc.w	color,$aaa
	dc.w	color,$aaa
	dc.w	color,$bbb
	dc.w	color,$bbb
	dc.w	color,$ccc
	dc.w	color,$ccc
	dc.w	color,$ddd
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$fff
	dc.w	color,$fff
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$ddd
	dc.w	color,$ccc
	dc.w	color,$bbb
	dc.w	color,$aaa
	dc.w	color,$aaa
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$888
	dc.w	color,$888
	dc.w	color,$777
	dc.w	color,$666
	dc.w	color,$666
	dc.w	color,$777
	dc.w	color,$888
	dc.w	color,$888
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$aaa
	dc.w	color,$bbb
	dc.w	color,$ccc
	dc.w	color,$ddd
	dc.w	color,$eee
	dc.w	color,$fff
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$ddd
	dc.w	color,$ccc
	dc.w	color,$ccc
	dc.w	color,$bbb
	dc.w	color,$bbb
	dc.w	color,$aaa
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$888
	dc.w	color,$777
	dc.w	color,$777
	dc.w	color,$666
	dc.w	color,$555
	dc.w	color,$444
	dc.w	color,$555
Bar2Col	dc.w	color,$555
	CWAIT	255,0
	dc.w	bplcon0,%1100000000000000
	dc.w	color+00,$112
	dc.w	color+02,$ccc
	dc.w	$ffdf,$fffe

	CWAIT	19,0
	dc.w	bplcon0,%0100000000000000
Bar3Col	dc.w	color,$444
	dc.w	color,$555
	dc.w	color,$555
	dc.w	color,$666
	dc.w	color,$777
	dc.w	color,$888
	dc.w	color,$999
	dc.w	color,$aaa
	dc.w	color,$aaa
	dc.w	color,$bbb
	dc.w	color,$bbb
	dc.w	color,$ccc
	dc.w	color,$ccc
	dc.w	color,$ddd
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$fff
	dc.w	color,$fff
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$ddd
	dc.w	color,$ccc
	dc.w	color,$bbb
	dc.w	color,$aaa
	dc.w	color,$aaa
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$888
	dc.w	color,$888
	dc.w	color,$777
	dc.w	color,$666
	dc.w	color,$666
	dc.w	color,$777
	dc.w	color,$888
	dc.w	color,$888
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$aaa
	dc.w	color,$bbb
	dc.w	color,$ccc
	dc.w	color,$ddd
	dc.w	color,$eee
	dc.w	color,$fff
	dc.w	color,$eee
	dc.w	color,$eee
	dc.w	color,$ddd
	dc.w	color,$ccc
	dc.w	color,$ccc
	dc.w	color,$bbb
	dc.w	color,$bbb
	dc.w	color,$aaa
	dc.w	color,$999
	dc.w	color,$999
	dc.w	color,$888
	dc.w	color,$777
	dc.w	color,$777
	dc.w	color,$666
	dc.w	color,$555
	CWAIT	20,0
	dc.w	bplcon0,%1100000000000000
	dc.w	color,$000
	CEND


mt_data	INCBIN	"TEMP:Fixes/.GlobIncludes/mod.mvschippy"
Bitplane	INCBIN	"TEMP:Fixes/.GlobIncludes/sltlogo.raw"
	END