*	A	RI	>BOOTCR		>CRUNCH
;-------neu
ran_tab = $7fe00
ran2_tab = $7fc00
copperram = $7f004
t = copperram - 4
star = t - 20480 
scrollfield = star - 30720 
font = scrollfield - 2048
brush = font - 7320 
dat = brush
org $6000c
load $6000c
start:
move.l	4,a6
move.l	#10240,36(a1)
move.l	#$000,44(a1)
move.l	#$60000,40(a1)
move.w	#2,28(a1)
jsr	-456(a6)
jmp intro
intro:
	bra	trap
blk.b	122,0
dc.b	"This is not a VIRUS!!! It's a THRUST-BOOTER!!!"
blk.b	900,0
even
trap:
	movem.l d0-d7/a0-a6,-(sp)
	bsr	star_init

;-------floppystop-------
	bsr	s
	move.w	#$a0,mx
	move.w	#$80,my
;	loesch
	lea	scrollfield,a0
	lea	copperram,a1
cl_loop:
	clr.l	(a0)+
	cmp.l	a0,a1
	bge	cl_loop



	lea	bitplanes(pc),a0
	move.l	#scrollfield,d0
	move.w	#2,d1
loop:
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	move.w	d0,6(a0)
	add.l	#40,d0
	add.l	#8,a0
	dbra	d1,loop	

	lea	star_planes,a0
	move.l	#star,d0	
	move.w	#1,d1
st_loop:
	swap	d0
	move.w	d0,2(a0)
	swap	d0
	move.w	d0,6(a0)
	add.l	#$2800,d0
	add.l	#8,a0
	dbra	d1,st_loop
	move.l	#newcopper,a0
	move.l	#colcop,a1
	move.l	#copperram,a2
	sub.l	a0,a1
	add.l	a1,a2
	move.l	a2,colcop_ram
;move brush
br:
	btst	#14,$dff002
	bne	br
	move.l	#brush,$dff050
	move.l	#scrollfield,$dff054
	clr.l	$dff064
	move.l	#-1,$dff044
	clr.w	$dff042
	move.w	#$9f0,$dff040
	move.w	#%0000111101111100,$dff058
bsr text
add.l	#40,destadd
add.w	#$1000,shifter
bsr	text
add.l	#40,destadd
add.w	#$1000,shifter
bsr	text
bsr copy_copper
bsr	init_colcop	
	move.w #$80,$dff096
	move.l #copperram,$dff080
	clr.w $dff088
	move.w #$8080,$dff096
	move.w	#$4000,$dff09a
wait:
	bsr	stars
	btst	#10,$dff016
	beq	m_ok1
	bsr	zeile
m_ok1:
	bsr	stars
	bsr	maus
	bsr	col
	
	btst #6,$bfe001
	bne wait


copperinit:
	move.l	4,a6
	move.l	#gfxname,a1
	jsr	-408(a6)
	move.l	d0,a1
	move.w #$80,$dff096
	move.l	38(a1),$dff080
	clr.w $dff088
move.w	#$8080,$dff096	
	jsr	-414(a6)
	move.w	file,d0
	move.b	d0,$7f000	;file
	move.w	#-$4000,$dff09a
	move.w #$8020,$dff096	;mouse an
	movem.l (a7)+,d0-d7/a0-a6
	move.w	#$100,$dff096
;exit rout to jump out of a bootblockprog.
;need 'boot1'as initprog
lea	dos(pc),a1
move.l	4,a6
jsr	-96(a6)
tst.l	d0
beq	error
move.l	d0,a0
move.l	22(a0),a0
moveq	#0,d0
end:
rts
error:
move.w	#$ff,d0
bra	end
dos:	dc.b	"dos.library",0
even
gfxname:	dc.b	"graphics.library",0
even
;------copy_copper---------------------
copy_copper:
move.l #copperram,a0
move.l #newcopper,a1
move.l #copper_end,a2
copper_schleife:
move.l (a1)+,(a0)+
cmp.l a1,a2
bge copper_schleife
rts
newcopper:
dc.l	$0101fffe
dc.l	$008e2c81
dc.l	$00902cd1
dc.l	$00920038
dc.l	$009400d0
dc.l	$00960020
dc.l	$01020000
dc.l	$01040000
dc.l	$01080050
dc.l	$010a0000

dc.l	$01800000
dc.l	$01820040	
dc.l	$01840060
dc.l	$01860080	
dc.l	$018800a0	
dc.l	$018a00c0	
dc.l	$018c00e0
dc.l	$018e00f0

dc.l	$01900000
dc.l	$01920555
dc.l	$01940aaa
dc.l	$01960fff

dc.l	$01005600
bitplanes:	
dc.l	$00e00000
dc.l	$00e20000
dc.l	$00e80000
dc.l	$00ea0000
dc.l	$00f00000
dc.l	$00f20000
star_planes:
dc.l	$00e40000
dc.l	$00e60000
dc.l	$00ec0000
dc.l	$00ee0000
dc.l	$7807fffe
dc.l	$01800000
dc.l	$01820006	;erste
dc.l	$01840006	;erste
dc.l	$0186000a	;zweite
dc.l	$01880006	;rechts
dc.l	$018a000f	;
dc.l	$018c000a	;mitte
colcop:

copper_end:




L058248:	dc.b "dos.library",0

	

star_init:



;generiere random

 	MOVE.W #$45,D3
 	MOVE.L #ran_tab,A0
ran_loop:
	BSR get_ran		;get randomvalue
 	MOVE.W D0,(A0)+		;nach a0+
 	BSR get_ran		;noch eine
 	MOVE.W D0,(A0)+		;und save
 	BSR get_ran		;noch eine
 	ANDI.W #$1FF,D0		;kleiner 512
 	MOVE.W D0,(A0)+		;und save
 	DBRA D3,ran_loop
	rts		
	
stars:
	MOVE.L #ran_tab,A4	;randomtab nach a4	
 	MOVE.W #$45,D3		;70 mal
 	MOVE.L #ran2_tab,A5	;newtab nach a5
star_loop:
	MOVE.W (A4)+,D4		
 	MOVE.W (A4)+,D5
 	MOVE.W (A4),D6
 	SUBI.W #2,(A4)+		;erniedrige a4 um 2
 	TST.W D6		;6 = 0
 	BLE L0584BE		;kleiner
 	EXT.L D4		;d4 zu longword
	DIVS D6,D4		;dividiere d4/d6 horizontal
 	ADDI.W mx,D4		;+160 = mitte
	EXT.L D5		;erweitere d5
 	DIVS D6,D5		;divi vertical
 	ADDI.W my,D5		;+128 = mitte		
 	TST.W D4		; d4 = 0
 	BLT L0584BE		; ja neue randomwerte
 	TST.W D5		; d5 = 0
 	BLT L0584BE		; neue werte
 	CMPI.W #319,D4		; ende horizontal
 	BGT L0584BE		;neue werte
 	CMPI.W #255,D5		;ende vertical
 	BGT L0584BE		;neue werte
 	MOVE.W (A5),D0		;a5 nach d0
 	MOVE.W D4,(A5)+		;d4 rett
 	MOVE.W (A5),D1		;a5 nach d1
 	MOVE.W D5,(A5)+		;d5 rett
 	BSR loesch		;loesch star
 	MOVE.W D4,D0		;d4 nach d0 = x
 	MOVE.W D5,D1		;d5 nach d1 = y
 	MULU #$28,D1		;zeile
 	MOVE.W D0,D2		;d0 nach d2
 	ASR.W #3,D2		;durch 8
 	ADD.W D2,D1		;add zur zeile die spalte
 	ASL.W #3,D2		;mal 8
	SUB.W D0,D2		;?
	SUBQ.B #1,D2		;minus 1
 	CMPI.W #350,D6		; d6 = 400		
 	BGT.S L058428		;groesser > 58428
 	CMPI.W #250,D6		;d6 = 300		
 	BGT.S L058434		; groesser = 58434 
 	BRA.S L058440		;ansonnsten 58440
L058428:
	MOVE.L #star,A1
 	ADDA.L D1,A1
 	BSET D2,(A1)
 	BRA.S L058454
L058434:
	MOVE.L #star+$2800,A1
 	ADDA.L D1,A1
 	BSET D2,(A1)
 	BRA.S L058454
L058440:
	MOVE.L #star,A1
 	ADDA.L D1,A1
 	BSET D2,(A1)
 	MOVE.L #star+$2800,A1
 	ADDA.L D1,A1
 	BSET D2,(A1)
L058454:
	DBRA D3,star_loop

 	RTS
	ran_pointer:	dc.w	0
get_ran:
	move.w	$dff006,d0
 	LEA l058604,A3
 	MULS (A3),D0
 	ADDI.W #$1249,D0
 	EXT.L D0
 	LEA L058604(PC),A3
 	MOVE.W D0,(A3)
 RTS
L0584BE:
	SUBA.L #6,A4
	BSR get_ran
 	MOVE.W D0,(A4)+
 	BSR get_ran
 	MOVE.W D0,(A4)+
 	BSR get_ran
	and.w	#600,d0	 
	MOVE.W d0,(A4)+
 	BRA L058454
loesch:
	MULU #$28,D1
 	MOVE.W D0,D2
 	ASR.W #3,D2
 	ADD.W D2,D1
 	ASL.W #3,D2
 	SUB.W D0,D2
 	SUBQ.B #1,D2
 	MOVE.L #star,A1
 	ADDA.L D1,A1
 	BCLR D2,(A1)
 	MOVE.L #star+$2800,A1
 	ADDA.L D1,A1
 	BCLR D2,(A1)
 	RTS

L058602:DC.W $1388 ;".ˆ"
l058604:dc.w	0
dc.w	0
maus:
clr.l		d0	;loesche d0
jsr		maus_get;hole werte
move.w		mx,d1	
and.w		#$8000,d1
beq		nr
clr.l		mx
nr:
move.w		my,d1
and.w		#$8000,d1
beq		nu
clr.l		my
nu:
cmp.w		#320,mx	;max x
ble		nl
move.w		#319,mx
nl:
cmp.w		#250,my	;max y
ble		nn
move.w		#249,my
nn:
rts

even
mx:
dc.l	0
my:
dc.l	0
mcx:
dc.l		0
mcy:
dc.l		0
mcox:
dc.l		0
mcoy:
dc.l		0
maus_get:
move.w		$dff00a,d1
move.w		d1,d2
lsr.w		#8,d2
and		#$ff,d1
move.w		d1,mcx
move.w		d2,mcy
clr.l		d7
move.w		mcx,d1
sub.w		mcox,d1
beq		mux
btst		#7,d1
bne		mux1
lsr.w		#1,d1
add.w		d1,mx
add.w		#1,mx
bset		#1,d7
jmp		mux
mux1:
and.w		#$fe,d1
eor.w		#$fe,d1
lsr.w		#1,d1
sub.w		d1,mx
sub.w		#1,mx
bset		#0,d7
mux:
move.w		mcy,d1
sub.w		mcoy,d1
beq		mux2
btst		#7,d1
bne		mux3
lsr.w		#1,d1
add.w		d1,my
add.w		#1,my
bset		#3,d7
jmp		mux2
mux3:
and.w		#$fe,d1
eor.w		#$fe,d1
lsr.w		#1,d1
sub.w		d1,my
sub.w		#1,my
bset		#2,d7
mux2:
move.w		#0,$dff036
move.w		$dff00a,mcox
and.w		#$ff,mcox
move.w		$dff00a,d0
lsr.w		#8,d0
move.w		d0,mcoy
rts


; init name




; col
coltab_pointer:
coltab:
dc.w	$0fd2,$0db0,$0b90,$0970,$0750,$0530
dc.w	$055f,$077f,$099f,$0bbf,$0ddf,$0fff
dc.w	$0dbf,$0caf,$0b9f,$0a8f,$097f,$086f
dc.w	$075f,$064f,$053f,$042f,$053f,$075f
dc.w	$097f,$0b9f,$0dbf,$0fdf,$0fff,$0eee
dc.w	$0ddd,$0ccc,$0bbb,$0aaa,$0999,$0888
dc.w	$0777,$0666,$0555,$0444,$0854,$0965
dc.w	$0a76,$0b87,$0c98,$0da9,$0eba,$0fcb
dc.w	$0fdc,$0bcf,$0abf,$09af,$089f,$078f
dc.w	$067f,$056f,$045f,$0642,$0753,$0864
dc.w	$0975,$0a86,$0b97,$0ca8,$0db9,$0eca


init_colcop:
	
	move.l	colcop_ram,a0
	move.l	#$8007fffe,d0
	move.l	#$018e000f,d1
	move.w	#119,d3
colcop_loop:
	move.l	d0,(a0)+
	move.l	d1,(a0)+
	add.l	#$1000000,d0
	cmp.l	#$0007fffe,d0
	bne	no_ff
	move.l	#$ffe1fffe,(a0)+
no_ff:
	dbra	d3,colcop_loop
	move.l	#$ffe1fffe,(a0)+
	move.l	#$0007fffe,(a0)+
	move.l	#$01800000,(a0)+
	move.l	#$fffffffe,(a0)+
rts
colcop_ram:	dc.l	0
col1_test:	dc.w	0
col2_test:	dc.w	0
col:
	move.w	col1_test,d0
	move.w	col2_test,d1
	cmp.w	d0,d1
	beq	m_ok
	bsr	init_colcop
m_ok:
	move.w	d0,col2_test
	move.w	col1_test,d6
	asl.w	#3,d6
	ext.l	d6	
	move.w	coltab_pointer,d0	;hole zeiger
	add.w	#2,d0		;erhoehe
	cmp.w	#112,d0		;ende ?
	ble	col_kleiner	; nein
	move.w	#0,d0		;ja
col_kleiner:
	move.w	d0,coltab_pointer ;save ponter

	move.w	#15,d1		;zaehler
	lea	coltab,a0	;farbe
	move.l	colcop_ram,a1	;copperlist
	add.l	d6,a1
	cmp.w	#$ffe1,(a1)
	bne	ncol_loop
	add.l	#4,a1
ncol_loop:
	move.w	0(a0,d0.w),6(a1)
	add.w	#2,d0		;erhoehe pointer
	cmp.w	#112,d0		;ende tab ?
	blt	no_end_ncol	;nein
	moveq	#0,d0
no_end_ncol:
	add.l	#8,a1
	cmp.w	#$ffe1,(a1)	;pal ?
	bne	no_ff1		;nein
	add.l	#4,a1
no_ff1:
	dbra	d1,ncol_loop
rts	
file:	dc.w	0
zeile:
	move.w	#0,d0	;schleife
	move.w	#20,d1	;cmpwert
m_loop:
	move.w	my,d2
	cmp.w	d1,d2
	ble	fer
	add.w	#20,d1
	add.w	#1,d0
	cmp.w	#5,d0
	bne	m_loop

fer:
	sub.w	#20,d1
	move.w	d1,col1_test
	move.w	d0,file
	rts	
rts
text:
	move.w	#8,d0	;loop
	move.l	#tdata,a0	;text
	move.l	destadd,a1	;dest
	add.l	#10080,a1	
t1_loop:
	move.w	#0,d4
t_loop:
	move.l	#font,d2
	moveq	#0,d1
	move.b	0(a0,d4.w),d1		;hole char
	sub.l	#$20,d1		;erniedige um 32 zeichen
	cmp.l	#$20,d1		;naechste zeile ?
	ble	no_zeile	;nein
	add.l	#1024,d2	;naechste zeile
no_zeile:
	asl.l	#1,d1		;* 2	
	add.l	d1,d2
no_blit:
	btst	#14,$dff002
	bne	no_blit
	move.l	d2,$dff050
	move.l	a1,$dff054
	move.w	#$3e,$dff064
	move.w	#$76,$dff066
	move.l	#$ffffffff,$dff044
	clr.w	$dff042
	move.w	shifter,$dff040
	move.w	#%00000001111000001,$dff058		
	add.l	#2,a1
	add.w	#1,d4
	cmp.w	#20,d4
	bne	t_loop
	add.l	#20,a0
	add.l	#2360,a1
	dbra	d0,t1_loop
	rts
destadd:	dc.l	scrollfield
shifter:	dc.w	$9f0
tdata:	;	01234567890123456789
scrolltext:	;nicht wichtiges label !
	dc.b	"     AFTERBURNER    "
	dc.b	"    SPACE HARRIER   "
	dc.b	"    THUNDERBLADE    "
	dc.b	"        ELITE       "
	dc.b	"  CALIFORNIA GAMES  "
	dc.b	"       R TYPE       "

	dc.b	" THE REALLY LEADING "
	dc.b	" THREE ARE   THRUST "
	dc.b	" RSI DEFJAM TRILOGY "
s:
move.l #crunch_end,a0
move.l #dat,a1		
move.l -(a0),a2		
add.l a1,a2		
move.l -(a0),d5		
move.l -(a0),d0		
eor.l d0,d5		

notfinished:
lsr.l #1,d0
bne.S notempty1
bsr getnextlwd
notempty1:
bcs.S bigone		

moveq #8,d1	
moveq #1,d3	
lsr.l #1,d0
bne.S notempty2
bsr getnextlwd
notempty2:
bcs.S dodupl	

moveq #3,d1	
clr.w d4	

dojmp:		
		
bsr rdd1bits	
move.w d2,d3	
add.w d4,d3	

getd3chr:

moveq #7,d1	
get8bits:
lsr.l #1,d0
bne.S notempty3
bsr getnextlwd
notempty3:
roxl.l #1,d2
dbf d1,get8bits	

move.b d2,-(a2)
dbf d3,getd3chr	
bra nextcmd

bigjmp:
moveq #8,d1	
moveq #8,d4	

bra dojmp

bigone:
moveq #2,d1	
bsr rdd1bits
cmp.b #2,d2	
blt.S midjumps	
cmp.b #3,d2	
beq.S bigjmp	

moveq #8,d1	
bsr rdd1bits	
move.w d2,d3	
move.w #12,d1	
bra dodupl	

midjumps:
move.w #9,d1	
add.w d2,d1
addq #2,d2
move.w d2,d3	

dodupl:
bsr rdd1bits	

copyd3bytes:
subq #1,a2

move.b (a2,d2.w),(a2)

dbf d3,copyd3bytes

nextcmd:
cmp.l a2,a1
blt.L notfinished
rts

getnextlwd:
move.l -(a0),d0
eor.l d0,d5
move.w #$10,ccr
roxr.l #1,d0
rts

rdd1bits:	
subq.w #1,d1
clr.w d2

getbits:
lsr.l #1,d0
bne.S notempty
move.l -(a0),d0
eor.l d0,d5
move.w #$10,ccr
roxr.l #1,d0

notempty:
roxl.l #1,d2
dbf d1,getbits
rts
crunch:
blk.b	3040,0
crunch_end:
ende:
