 	opt l-,d-,c+
******************************************
*Frostbyte v0.5                          *
*Started 7/3/88            so there..... *
******************************************

*	xref _protec

*tune_in:equ 1
*killo	equ 1
*copper	equ 1

screen1	equ $70000
scea21	equ $23000

start
	move.l a7,olstk
	bsr set_sys
zoop	bsr getkey
	cmp #"a",d0
	beq wobble
	sub #48,d0
	and #$ff,d0
	cmp #10,d0
	bgt zoop
	bsr note
*	bra zoop
	bsr game
wobble	bsr ret_sys
	move.l olstk,a7
	rts

convem
	move.l a0,-(sp)
	lea scea21,a1
	lea scea21+plane,a2
	lea scea21+plane*2,a3
	lea scea21+plane*3,a4

	move #plane/2-1,d0
loppy2	move (a0)+,(a1)+
	move (a0)+,(a2)+
	move (a0)+,(a3)+
	move (a0)+,(a4)+
	dbra d0,loppy2
	move #plane-1,d0
	lea scea21,a1
	move.l (sp)+,a0
loppy3	move.l (a1)+,(a0)+
	dbra d0,loppy3
	rts

olstk	dc.l 0

maxsc	equ 50
hoff	equ 140
boff	equ hoff+10
 
scea1	equ $70000
scea2	equ $78000
bsava1	equ $68000
bsava2	equ $6c000
blocks	equ $3f000-24080
blocks1	equ blocks-26120
blocks2	equ blocks1-15380

maps	equ $3f400
maps1	equ $3f800
maps2	equ $3fc00

btemp	ds.l 1
bsbuff1	ds.b 12*30  		allows 30 sprites
bsbuff2	ds.b 12*30

spfil1	equ $60000
spfil2	equ $58000
spfil4	equ $48000

worka	equ $40000
shapes	equ $50000
cols	equ spfil1-34
ldgsc	equ $78000
fcols	equ ldgsc-34
screen	ds 1

time1	equ $464
time2	equ $468
time3	equ $4bc

ldfile	
	clr temp
ldloop
	move temp,d6
	move.l #loada,a6
	move.l 0(a6,d6),a0
	cmp #-1,a0
	beq finito

	move temp,d6
	move.l #loada,a6
	move.l 0(a6,d6),a0
	move.l 4(a6,d6),d0
	move.l 8(a6,d6),d1
	add #12,temp
	bsr load
	bra ldloop

finito	
	lea spfil1,a0
	bsr convem
	lea spfil2,a0
	bsr convem
	lea worka,a0
	bsr convem
	lea shapes,a0
	bsr convem
	lea scea1,a0
	bsr convem
	rts
	

cltl	dc.b "                         ",13,0

bcopy:	move.l #worka,a0
	move.l #scea1+160*40,a1
	move.l #scea1+160*40,a2

bclp
	move plane(a0),plane(a1)
	move plane*2(a0),plane*2(a1)
	move plane*3(a0),plane*3(a1)
	move (a0),(a1)+
	move plane(a0),plane(a2)
	move plane*2(a0),plane*2(a2)
	move plane*3(a0),plane*3(a2)
	move (a0)+,(a2)+
	cmp.l #worka+40*40,a0
	bcs bclp
	rts

clscrs:
	move.l #scea1,a2
	move.l #scea2,a3
	move #160,d1

clslp1	move #4,d0
clslp	lea 0(a2,d0),a0
	lea 0(a3,d0),a1
	clr plane(a0)
	clr plane*2(a0)
	clr plane*3(a0)
	clr (a0)
	clr plane(a1)
	clr plane*2(a1)
	clr plane*3(a1)
	clr (a1)
	add #2,d0
	cmp #36,d0
	blt clslp

	add.l #40,a2
	add.l #40,a3
	sub #1,d1
	bne clslp1
	rts

fln1:	dc.b "sprites.pi1",0
fln2:	dc.b "backg.pi1",0
fln3:	dc.b "blocks.dat",0
fln4:	dc.b "map.map",0
fln5:	dc.b "hickey.pi1",0
fln6:	dc.b "shapes.pi1",0
fln7:	dc.b "fbsc.pi1",0
fln8:	dc.b "map2.map",0
fln9:	dc.b "blocks2.dat",0
fln10:	dc.b "blocks3.dat",0
fln11:	dc.b "map3.map",0

	even

loada	dc.l fln1,32034,spfil1-34
	dc.l fln2,32034,worka-34
	dc.l fln5,32034,spfil2-34
	dc.l fln3,24064,blocks
	dc.l fln4,808,maps
	dc.l fln6,32034,shapes-34
	dc.l fln7,32034,scea1-34
	dc.l fln8,808,maps1
	dc.l fln9,26112,blocks1
	dc.l fln10,15360,blocks2
	dc.l fln11,408,maps2

	dc.l -1


xshft	ds.l 1
door	ds 1
pawsam	ds 1
wspeed	ds 1
ldfsc	dc.b "lds",0
game:
*	move.l #$7fffe,a7

*	bsr colours
	move.l #ldgsc,dspst
	lea color,a0
clcols	clr.l (a0)+
	cmp.l #color+32,a0
	blt clcols

	lea ldfsc,a0
	move.l #ldgsc-34,d1
	move.l #32034,d0
	bsr load
	move.l #ldgsc,a0
	bsr convem

	lea color,a0
	lea ldgsc-32,a1
copycls	move (a1)+,d0
	lsl #1,d0
	move d0,(a0)+
	cmp.l #color+32,a0
	blt copycls

	ifd tune_in
	bsr digit
	endc

	bra passby
***

	ifd tune_in
length	equ 99000
splay	equ $28000
snd	equ splay+28				pass header
sound	equ splay+2708
uncom	equ $59050

speed	equ 1

digit
*	move.l #xxx,a0
*	move.l #splay,d1
*	move.l #2704,d0
*	bsr load

	move.l #xx1,a0
	move.l #uncom,d1
	move.l #length,d0
	bsr load

*uncompact
	lea uncom,a0
	lea sound,a1

uncomlp
	move.b (a0)+,d0
	move.b d0,d1
	and.b #$f0,d0
	move.b d0,(a1)+
	lsl.b #4,d1
	move.b d1,(a1)+

	cmp.l #uncom+length,a0
	blt uncomlp	
	
play
	lea custom,a6
	move #1,dmacon(a6)
	move #64,aud0vol(a6)
	move #500,aud0per(a6)
	move.l #sound,aud0lch(a6)
	move #length/2,aud0len(a6)
	bsr getkey
	rts
	move.l #sound,snd+2
	move.l #length/2,snd+6
	move.l #speed,snd+10
	jsr snd
	rts
***

xxx	dc.b "sp",0
xx1	dc.b "fbm.com",0

***
	endc			end of tune

passby	bsr ldfile

*	bsr protect
*	cmp.b #0,d0
*	bne knack2

	lea cols+2,a0
	lea color,a1
copcla	move (a0)+,d0
	lsl #1,d0
	move d0,(a1)+
	cmp.l #color+32,a1
	blt copcla

	
*	bsr joyon
	clr objam
	jsr clramo
	jsr bcopy
help
stgame
	clr door
	clr dem
*reload map from object buffer
	move objam,d0
	beq nobjs
	lea objbuff,a0

objlp
	sub #1,d0
	move d0,d3
	lsl #2,d3
	add d0,d3
	add d0,d3
	
	move.l 2(a0,d3),a6
	move.b 0(a0,d3),(a6)

	cmp #0,d0
	bne objlp
nobjs
	clr objam

	clr scrn
	jsr clrwor

	clr lev
	move #150,sptab+hoff+2
	clr sptab+hoff
	clr sptab+boff
	
	bsr demo
	clr lev
	clr bulls
	clr wspeed
	clr highj
	clr wspeed
	clr fallf
	move #24,maxh
	move #75,maxf

	jsr clramo
	bsr clscore
	bsr settime
	bsr bcopy

	bsr prscr
	move #4,lives
	move #5,worms				
	bsr dslives
	bsr prworms

	clr lev
	clr scrn
	move #$110,hkxs
	move #160-48,hkys

	clr held
	clr wspeed
	move #-1,newsc
	move #160,hkxs
	move #48,hkys

startup
	bsr preshky
scstart
	clr hitf1
	bsr setbul
	bsr clscrs

	bsr drawsc

	bsr setspr
	clr sptab+hoff+6
	clr jpreq
	bsr setbul
 	clr pawsam
	move #0,screen
	bsr bsave
	move #1,screen
	bsr bsave
	move hkxs,sptab+hoff+2
	move hkys,sptab+hoff+4
	bsr stset
	clr reset
*************************************


gamel:	
	bsr endsc
	move screen,d0
	jsr setdisp
	jsr dstars
	jsr bload

	jsr movspr
	jsr wor_mov
	jsr chkenlv
	cmp #0,d0
	bne nxlev

	jsr chkisnd
	jsr hvwd
	jsr dofire
	jsr setfire
	jsr pickup
	jsr delit

	jsr bsave
	jsr dospr
	jsr pstars
	jsr dotime
	jsr pause
	cmp #40,scrn
	bne dontce
	cmp #240,sptab+hoff+2
	bge complete
dontce

	eor #1,screen
*	jsr endsc
	jsr mvsct
	cmp #-1,newsc
	bne setnews

	cmp #0,hitf
	bne himded
	cmp #2,hitf1
	beq himded
	jsr drest

	bra gamel
dir	ds 1
hitf1	ds 1
chkisnd
	cmp #-1,adfrw
	beq chklfs
	cmp #1,adfrw
	beq chkrls
	rts
chklfs
	cmp #8,sptab+hoff+6
	beq setsnd
	rts
chkrls
	cmp #2,sptab+hoff+6
	beq setsnd
	rts
setsnd
	move #6,d0
	bsr note
	rts

setnews
	bsr bload
	eor #1,screen
	bsr bload
	move newsc,scrn
	move nxp,hkxs
	move nyp,hkys

	bra scstart
nxp	ds 1
nyp	ds 1
nxlev
	move d0,collb

	eor #1,screen 
	jsr bload
	addq #1,lev

*rotate
	move #3,d0
	bsr note

	move #16,d2
rotlp2b
	clr vblank
rotlp3b	cmp #0,vblank
	beq rotlp3b
	cmp.l #scea1,scrad
	beq set22b
	lea scea1+4,a0
	bra mistb
set22b	lea scea2+4,a0
mistb	move.l a0,a1
	add.l #40,a1
	move #80,d1
rotlp1b	move #16,d0
rotlpb	lsl plane(a0)
	lsl plane*2(a0)
	lsl plane*3(a0)
	lsl (a0)+
	lsr plane(a1)
	lsr plane*2(a1)
	lsr plane*3(a1)
	lsr (a1)+
	sub #1,d0
	bne rotlpb
	add.l #40+8,a0
	add.l #40+8,a1
	sub #1,d1
	bne rotlp1b
	sub #1,d2
	bne rotlp2b

	lea levtab,a0
	clr d0

getlvlp
	move 0(a0,d0),d1
	cmp lev,d1
	beq gotlv

	add #8,d0
	cmp #32,d0
	blt getlvlp
gotlv
	move 2(a0,d0),hkxs
	move 4(a0,d0),hkys
	move 6(a0,d0),scrn
	jmp scstart


levtab
	dc 1,48,112,10
	dc 2,256,112,29
	dc 3,128,32,39
	dc 4,272,112,49

	
lev	ds 1
complete
	move.l #$40000,d0
comlp	sub.l #1,d0
	bne comlp
	bsr bload
	eor #1,screen
	bsr bload
	bsr gameover
	bra stgame

himded
	move #7,d0
	bsr note


	clr falld
	clr togg
	move #30,enfra
	move #6,sptab+hoff
	add #1,pawsam

	move screen,dir
	beq backw
	clr sptab+hoff+6
	bra palp1

backw	move #4,sptab+6+hoff
palp1	move screen,d0
	bsr setdisp
	bsr dstars
	bsr bload
	bsr movspr
	bsr ani_wd
	bsr dofire
	bsr bsave
	bsr dospr
	bsr pstars
	bsr pause
	eor #1,screen
	sub #1,enfra
	bne palp1

	bsr bload
	eor #1,screen
	bsr bload
	subq #1,lives
	bsr dslives
	cmp #0,lives
	bge startup
*game over
	bsr gameover
	bra stgame	


togg	ds.l 1
enfra	ds.l 1
ani_wd
	eor #1,togg
	bne prts
	cmp #0,dir
	bne forw

	sub #1,sptab+hoff+6
	bmi setsp0
prts	rts
forw
	add #1,sptab+hoff+6
	cmp #5,sptab+hoff+6
	bne prts
setsp0	clr sptab+hoff
	rts

REG	DS.L 1

error
ER1	bra ER1

	ifd cuts
colours	MOVE.L #fcols+2,a0
	move.l #color,a1
	move.l #colsva,a2
	move #16,d0
copcolp
	move (a1),(a2)+
	move (a0)+,(a1)+
	sub #1,d0
	bne copcolp
	rts

colbck
	move.l #color,a0
	move.l #colsva,a1
	move #16,d0
copcl1
	move (a1)+,(a0)+
	sub #1,d0
	bne copcl1
	rts
colsva	ds 16	
	endc


icnt	ds.l 1
icntop	equ 4

setscrnn:
	move.l a5,dspst
	move.l a5,scrst
	rts

doscrn	move #0,vblank
	move.l d1,dspst
vblp	cmp #$ffff,vblank
	bne vblp
	move #0,vblank
	rts


startsc:
	MOVE.L #$78000,dspst
	MOVE.L #$78000,scrst
	RTS
endsc
	tst.b keyq
	bne endit
	rts
endit
	bsr rotso
*	bsr colbck
	jmp wobble

***

setdisp	
	move.l #scrtab,a0
	LSL #2,d0
	and #7,d0
	move.l 0(a0,d0),d1
	eor #4,d0
	move.l 0(a0,d0),scrad
	bsr doscrn
	rts

scrtab	dc.l scea1,scea2 
scrad	ds.l 1

vblwedge:
doint	
*interrupt routines here
	move #$ffff,vblank
	subq #1,vblcoo
*	not zog
*	bne nozog
*	move zoog,color+28
*	not zoog
nozog	rts

*zoog:	dc.w 0
*zog:	dc.w 0
vblank	ds 1

*
spam	equ 16
sptab:	ds spam*5

*
dsntab	dc.l unused,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15
	dc.l s16,s17,s18,s19,s20,s21,s22,s23,s24

unused

s1	dc.l spfil1				green man
	dc 12,29
	dc.l spfil1+30*40
	dc 12,29

	
s2	dc.l spfil1+60*40			face 1
	dc 8,38

	dc.l spfil1+99*40
	dc 8,38
	dc.l spfil1+138*40
	dc 8,38

s3	dc.l spfil1+8					triangle
	dc 8,20

	dc.l spfil1+8+22*40
	dc 8,22

	dc.l spfil1+8+46*40
	dc 8,22

	dc.l spfil1+8+68*40
	dc 8,21

s4
	dc.l spfil1+8+91*40				face 2
	dc 8,31
	dc.l spfil1+8+123*40
	dc 8,31

	dc.l spfil1+8+155*40
	dc 8,31
s5
	dc.l spfil2					hickey
	dc 8,31
	dc.l spfil2+33*40
	dc 8,31
	dc.l spfil2+66*40
	dc 8,31
	dc.l spfil2+99*40
	dc 8,31
	dc.l spfil2+132*40
	dc 8,31
	dc.l spfil2+4
	dc 8,31
	dc.l spfil2+4+33*40
	dc 8,31
	dc.l spfil2+4+66*40
	dc 8,31
	dc.l spfil2+4+99*40
	dc 8,31
	dc.l spfil2+4+132*40
	dc 8,31
s6
*						explosion
	dc.l spfil2+8
	dc 8,31
	dc.l spfil2+8+33*40
	dc 8,31
	dc.l spfil2+8+66*40
	dc 8,31
	dc.l spfil2+8+99*40
	dc 8,31
	dc.l spfil2+8+134*40
	dc 8,31	

s7
	dc.l spfil1+181*40
	dc 4,4
	dc.l spfil1+185*40
	dc 4,4
	dc.l spfil1+189*40
	dc 4,4
	dc.l spfil1+193*40
	dc 4,4

s8
	dc.l spfil1+12				bullet explosion
	dc 4,5
	dc.l spfil1+12+7*40
	dc 4,7
	dc.l spfil1+12+14*40
	dc 4,10
	dc.l spfil1+12+25*40
	dc 4,11
	dc.l spfil1+12+38*40
	dc 4,17
s9
	dc.l spfil2+12
	dc 8,31
	dc.l spfil2+12+33*40
	dc 8,31
	dc.l spfil2+12+66*40
	dc 8,31
	dc.l spfil2+12+99*40
	dc 8,31
s10
*						icicle
	dc.l spfil1+12+57*40
	dc 4,22
	dc.l spfil1+12+81*40
	dc 4,22

s11
*							eye
	dc.l spfil1+16
	dc 8,27

	dc.l spfil1+16+29*40
	dc 8,27

	dc.l spfil1+16+58*40
	dc 8,27

	dc.l spfil1+16+87*40
	dc 8,27

	dc.l spfil1+16+116*40
	dc 8,27

	dc.l spfil1+12+106*40
	dc 8,27

s12
*							spinning head

	dc.l spfil1+4+126*40
	dc 8,34
	dc.l spfil1+28
	dc 8,34
	dc.l spfil1+28+35*40
	dc 8,34
	dc.l spfil1+28+70*40
	dc 8,34
	dc.l spfil1+28+106*40
	dc 8,34
	dc.l spfil1+28+141*40
	dc 8,34

s13
*							rising head
	dc.l spfil1+4+59*40
	dc 8,2
	dc.l spfil1+4+92*40
	dc 8,4
	dc.l spfil1+4+59*40
	dc 8,6
	dc.l spfil1+4+92*40
	dc 8,8
	dc.l spfil1+4+59*40
	dc 8,10
	dc.l spfil1+4+92*40
	dc 8,12
	dc.l spfil1+4+59*40
	dc 8,14
	dc.l spfil1+4+92*40
	dc 8,16
	dc.l spfil1+4+59*40
	dc 8,18
	dc.l spfil1+4+92*40
	dc 8,20
	dc.l spfil1+4+59*40
	dc 8,22
	dc.l spfil1+4+92*40
	dc 8,24
	dc.l spfil1+4+59*40
	dc 8,26
	dc.l spfil1+4+92*40
	dc 8,28
	dc.l spfil1+4+59*40
	dc 8,32
	dc.l spfil1+4+92*40
	dc 8,32

s14
*			airship
	dc.l spfil1+20+106*40
	dc 16,45
	dc.l spfil1+20+154*40
	dc 16,45

s15
*			u.f.o.
	dc.l spfil1+32
	dc 12,24
	dc.l spfil1+32+40*26
	dc 12,24
	dc.l spfil1+32+40*52
	dc 12,24

s16
*			creature from boot
	dc.l spfil2+16+87*40
	dc 8,20
	dc.l spfil2+16+85*40
	dc 8,20
	dc.l spfil2+16+63*40
	dc 8,20
	dc.l spfil2+16+41*40
	dc 8,20
	dc.l spfil2+16+19*40
	dc 8,20
	dc.l spfil2+16+151*40
	dc 8,20
	dc.l spfil2+16+129*40
	dc 8,20

s17
*collectable worm
	dc.l shapes+8+92*40
	dc 8,31
	dc.l shapes+8+126*40
	dc 8,31
	dc.l shapes+32
	dc 8,31
	dc.l shapes+36
	dc 8,31
	dc.l shapes+32+166*40
	dc 8,31

s18
*bird
	dc.l spfil1+32+166*40
	dc 12,31
	dc.l spfil2+24+80*40
	dc 16,30
	dc.l spfil2+34
	dc 12,30

s19
*eyeball
	dc.l spfil2+24+39*40
	dc 12,40
	dc.l spfil2+24+162*40
	dc 12,36
	dc.l spfil2+32+38*40
	dc 12,42

s20
*small face
	dc.l spfil2+32+82*40
	dc 8,25
	dc.l spfil2+32+110*40
	dc 8,24
	dc.l spfil2+32+137*40
	dc 8,24
	dc.l spfil2+32+164*40
	dc 8,25

s21
*jester
	dc.l spfil1+12+145*40
	dc 12,42
	dc.l spfil1+20
	dc 12,42
	dc.l spfil1+20+46*40
	dc 12,41

s22
*brain
	dc.l spfil1+32+79*40
	dc 16,24
	dc.l spfil1+32+106*40
	dc 16,27
	dc.l spfil1+32+135*40
	dc 16,28
s23
*bee
	dc.l shapes+24
	dc 16,43
s24
*well done
	dc.l worka+28+156*40
	dc 20,15
	dc.l worka+28+174*40
	dc 20,15


*

getspr:
	mulu #10,d0
	move.l #sptab,a6
	move 0(a6,d0),d4
	beq nospr
	cmp #200,4(a6,d0)
	bge nospr

	move 8(a6,d0),xshft

	lsl #2,d4
	move.l #dsntab,a1
	move.l 0(a1,d4),a2

	move 6(a6,d0),d4
	lsl #3,d4

	move.l 0(a2,d4),a1
	move 4(a2,d4),d1
	move 6(a2,d4),d2

	move 2(a6,d0),d4
	move 4(a6,d0),d5
	rts

nospr	move.l #-1,a0
	rts

dospr:
	move #0,cursp

dspl	
	move #0,a0
	move cursp,d0
	bsr getspr

	cmp.l #-1,a0
	beq donex

	bsr sprite

donex	add #1,cursp
	cmp #spam,cursp
	bne dspl

	rts
cursp	dc.l 0



bsave:
	move #0,cursp
	cmp #1,screen
	beq scrn2

	move.l #bsava1,btemp
	move.l #bsbuff1,a6
	bra nxbit

scrn2	move.l #bsava2,btemp
	move.l #bsbuff2,a6

nxbit
bslp1
	move.l #sptab,a0
	move cursp,d0
	move 0(a0,d0),d1
	beq donex2
	move.l btemp,(a6)+		put spdata address into buffer
***get x & y lengths,save to buffer

	lsl #2,d1
	move.l #dsntab,a1
	move.l 0(a1,d1),a2

	move 6(a0,d0),d3
	lsl #3,d3

	move 4(a2,d3),d4		d4=xlen
	add #4,d4
	subq #1,d4
	lsr #2,d4
	move 6(a2,d3),d5		d5=ylen
	move d4,(a6)+
 	move d5,(a6)+	
*calc screen address:

	move.l scrad,a2
	move 2(a0,d0),d1		d1=x coord
	lsr #3,d1
	and #$fffe,d1
	move 4(a0,d0),d2		d2=y coord

	mulu #40,d2
	add d1,d2
	and.l #$ffff,d2
	add.l d2,a2
	move.l a2,(a6)+			screen addr onto buffer
*save it:
	move.l btemp,a0

bslp2	move d4,d3
	move.l a2,a3
	
bslp3
	move plane*3(a3),(a0)+
	move plane*2(a3),(a0)+
	move plane(a3),(a0)+
	move (a3)+,(a0)+
	sub #1,d3
	bpl bslp3

	add.l #40,a2
	sub #1,d5
	bpl bslp2
	move.l a0,btemp


donex2	add #10,cursp
	cmp #spam*10,cursp
	blt bslp1
	move.l #-1,(a6)+			terminator
	rts

load1:
	move d2,d4
	move.l a3,a4

ldlp1
	move (a2)+,plane*3(a4)
	move (a2)+,plane*2(a4)
	move (a2)+,plane(a4)
	move (a2)+,(a4)+
	sub #1,d4
	bpl ldlp1
	add.l #40,a3
	sub #1,d3
	bpl load1
	rts

bload:
	cmp #1,screen
	beq scrn2a

	move.l #bsbuff1,a6
	bra nxbit1

scrn2a	move.l #bsbuff2,a6	

nxbit1
*find last 1
	move #0,d0
fnl1p	cmp.l #-1,(a6)
	beq gotlast
	add.l #12,a6
	add #1,d0
	bra fnl1p
gotlast	
	cmp #0,d0
	beq last_1
	sub.l #12,a6

pulp	move.l (a6)+,a2
	move (a6)+,d2
	move (a6)+,d3
	move.l (a6)+,a3
	bsr load1
	sub.l #24,a6
	sub #1,d0
	bne pulp
	rts

last_1	rts	

shift	ds.l 1
lshift	ds.l 1
temp	ds.l 1

pause
	tst vblcoo
	bpl pause
	move #1,vblcoo
	rts

vblcoo:	dc.w 1

	ifd cuts
	move pawsam,d1
	beq paret
palp01	move #$1000,d0
palp	sub #1,d0
	bne palp
	sub #1,d1
	bne palp01
paret	rts
	endc

movsp1	
*face1 scr1
	dc.l sk1
	dc 4,3
	dc.l fi1
	dc 1,0,1,4,1+b

movsp2
*face2 scr1
	dc.l sk2
	dc 5,3
	dc.l fi1
	dc 1,0,2,4,1

movsp3
*green man scr1
	dc.l sk3
	dc 3,2
	dc.l fi2
	dc 1,3,0,1,3
movsp4
*1st icicle scr2
	dc.l sk4
	dc 2,2
	dc.l fi1
	dc 1,0,2,10,3+b
movsp5
*2nd icicle scr2
	dc.l sk5
	dc 2,2
	dc.l fi1
	dc 1,0,3,10,1+b
movsp6
*face scr2
	dc.l sk6
	dc 4,3
	dc.l fi1
	dc 1,2,1,4,2
movsp7
*face screen 3
	dc.l sk7
	dc 3,4
	dc.l fi1
	dc 1,2,2,2,2

movsp8
*triangle scr3
	dc.l sk8
	dc 2,4
	dc.l fi3
	dc 1,2,0,3,2

movsp9
*spinning face scr4
	dc.l sk9
	dc 3,8
	dc.l fi4
	dc 1,2,2,12,2
movsp10
*drop scr4
	dc.l sk10
	dc 2,2
	dc.l fi1
	dc 1,0,2,10,3+b
movsp11
*face 1 scr5
	dc.l sk11
	dc 4,8
	dc.l fi4
	dc 2,0,1,12,1+b
movsp12
*face 2 scr5
	dc.l sk12
	dc 4,7
	dc.l fi6
	dc 1,0,1,12,1+b
movsp13
*triangle scr5
	dc.l sk13
	dc 3,4
	dc.l fi3
	dc 1,0,2,3,1+b
movsp14
*face 3 scr5
	dc.l sk14
	dc 4,4
	dc.l fi1
	dc 1,1,1,2,2
movsp15
*green man scr6
	dc.l sk15
	dc 2,2
	dc.l fi1
	dc 1,3,0,1,3
movsp16
*drop scr6
	dc.l sk16
	dc 2,2
	dc.l fi1
	dc 1,0,3,10,3+b
movsp17
*boot creature scr7
	dc.l sk17
	dc 10,10
	dc.l fi7
	dc 1,0,0,16,1

movsp18
*drop scr7
	dc.l sk18
	dc 3,2
	dc.l fi1
	dc 1,0,2,10,3+b

movsp19
*triangle scr7
	dc.l sk19
	dc 3,4
	dc.l fi3
	dc 1,2,0,3,2

m20
*face 1 scr8
	dc.l sk20
	dc 4,4
	dc.l fi1
	dc 1,0,2,2,1+b
m21
*boot creature scr8
	dc.l sk21
	dc 10,10
	dc.l fi7
	dc 1,0,0,16,1+b
m22
*face 2 scr8
	dc.l sk22
	dc 5,8
	dc.l fi4
	dc 1,3,1,12,2
m23
*face 1 scr9
	dc.l sk25
	dc 3,4
	dc.l fi1
	dc 1,3,1,2,2
m24
*face 2 scr9
	dc.l sk23
	dc 3,8
	dc.l fi4
	dc 1,2,2,12,2+b

m25
*triangle scr10
	dc.l sk24
	dc 3,4
	dc.l fi3
	dc 1,0,1,3,1+b

m26
*spinning face scr10
	dc.l sk22
	dc 3,8
	dc.l fi4
	dc 1,2,2,12,2

frwor	equ 27-1

m27
*worm 1 scr10
	dc.l sk26
	dc 2,8
	dc.l fi8
	dc 1,0,0,17,1+b

m28
*worm 2 scr20
	dc.l sk27
	dc 2,8
	dc.l fi8
	dc 1,0,0,17,1+b

m29
*worm 3 scr30
	dc.l sk28
	dc 2,8
	dc.l fi8
	dc 1,0,0,17,1+b

m30
*worm 4 scr40
	dc.l sk28
	dc 2,8
	dc.l fi8
	dc 1,0,0,17,1+b

m31
*worm 5 scr50
	dc.l sk29
	dc 2,8
	dc.l fi8
	dc 1,0,0,17,1+b
m32
*eye scr 10
	dc.l sk30
	dc 3,10
	dc.l fi9
	dc 1,0,2,11,1
m33
*airship scr 10
	dc.l sk31
	dc 2,2
	dc.l fi1
	dc 1,1,0,14,3+b
m34
*ufo 1 scr 11
	dc.l sk32
	dc 3,3
	dc.l fi1
	dc 1,1,0,15,2+b
m35
*ufo 2 scr 11
	dc.l sk33
	dc 3,3
	dc.l fi1
	dc 1,2,0,15,3+b
m36
*heli scr12
	dc.l sk34
	dc 2,6
	dc.l fi3
	dc 1,0,0,20,2+b
m37
*heli2 scr 12
	dc.l sk35
	dc 1,6
	dc.l fi3
	dc 1,0,0,20,2+b
m38
*face scr13
	dc.l sk36
	dc 1,1
	dc.l fi4
	dc 1,4,0,12,3
m39
*face 2 scr13
	dc.l sk37
	dc 4,4
	dc.l fi1
	dc 1,1,1,4,2
m40
*ufo 1 scr 15
	dc.l sk38
	dc 2,3
	dc.l fi1
	dc 1,0,1,15,2
m41
*ufo 2 scr 15
	dc.l sk39
	dc 2,3
	dc.l fi1
	dc 1,0,2,15,2
m42
*eye scr 14
	dc.l sk40
	dc 2,10
	dc.l fi9
	dc 1,2,2,11,2
m43
*rising thing scr 14
	dc.l sk41
	dc 2,2
	dc.l fi10
	dc 1,1,1,13,3

m44
*brain scr 20
	dc.l sk42
	dc 3,4
	dc.l fi1
	dc 1,1,2,22,2


m45
*brain scr 21
	dc.l sk43
	dc 3,4
	dc.l fi1
	dc 1,1,2,22,2
m46
*eye scr 22
	dc.l sk44
	dc 3,10
	dc.l fi9
	dc 1,0,2,11,1
	
m47
*face scr 22
	dc.l sk45
	dc 3,8
	dc.l fi4
	dc 1,1,1,12,3

m48
* face scr 23
	dc.l sk46
	dc 2,8
	dc.l fi4
	dc 1,1,1,12,3

m49
*face scr 23
	dc.l sk47
	dc 3,8
	dc.l fi4
	dc 1,1,1,12,3

m50
*drop scr 23
	dc.l sk48
	dc 3,2
	dc.l fi1
	dc 1,0,2,10,3+b

m51
*face scr 24
	dc.l sk49
	dc 3,4
	dc.l fi1
	dc 1,2,1,2,2

m52
*drop scr 25
	dc.l sk50
	dc 3,2
	dc.l fi1
	dc 1,0,2,10,3+b

m53
*face scr 25
	dc.l sk51
	dc 3,4
	dc.l fi1
	dc 1,1,1,2,2

m54
*face scr 26
	dc.l sk52
	dc 3,4
	dc.l fi1
	dc 1,1,1,2,2

m55
*face1 scr 26
	dc.l sk53
	dc 3,4
	dc.l fi1
	dc 1,1,1,2,2
m56
*face2 scr 26
	dc.l sk54
	dc 3,4
	dc.l fi1
	dc 1,2,2,2,2
m57
*drop scr 27
	dc.l sk55
	dc 3,2
	dc.l fi1
	dc 1,0,2,10,3+b
m58
*jester scr 27
	dc.l sk56
	dc 3,6
	dc.l fi11
	dc 1,1,1,21,2
m59
*face scr 28
	dc.l sk57
	dc 3,4
	dc.l fi1
	dc 1,2,1,2,2
m60
*eye scr 28
	dc.l sk58
	dc 3,10
	dc.l fi9
	dc 1,1,1,11,2
m61
*triangle scr 29
	dc.l sk59
	dc 3,4
	dc.l fi3
	dc 1,1,1,3,2
m62
*face scr 29
	dc.l sk60
	dc 3,4
	dc.l fi1
	dc 1,0,2,2,2
m63
*airship scr 30
	dc.l sk61
	dc 2,2
	dc.l fi1
	dc 1,1,1,14,2
m64
*eyeball sc30
	dc.l sk62
	dc 3,4
	dc.l fi1
	dc 1,1,1,19,2
m65
*ufo sc 31
	dc.l sk63
	dc 2,3
	dc.l fi1
	dc 1,1,2,15,2
m66
*helc sc 31
	dc.l sk64
	dc 1,6
	dc.l fi3
	dc 1,1,1,20,3
m67
*eye 1 sc 32
	dc.l sk65
	dc 3,10
	dc.l fi9
	dc 1,1,1,11,2

m68
*eye 2 sc 32
	dc.l sk66
	dc 3,10
	dc.l fi9
	dc 1,1,1,11,2
m69
*eyeball sc 33
	dc.l sk67
	dc 3,4
	dc.l fi1
	dc 1,1,1,19,2
m70
*eyeball2 sc 33
	dc.l sk68
	dc 2,4
	dc.l fi1
	dc 2,1,1,19,2
m71
*airship sc 34
	dc.l sk69
	dc 2,2
	dc.l fi1
	dc 1,1,1,14,2

m72
*eyeball sc 34
	dc.l sk62
	dc 3,4
	dc.l fi1
	dc 1,1,1,19,2

m73
*hel1 sc 35
	dc.l sk70
	dc 1,6
	dc.l fi3
	dc 1,1,1,20,3
m74
*hel2 sc 35
	dc.l sk71
	dc 2,6
	dc.l fi3
	dc 1,2,2,20,3
m75
*airship sc 36
	dc.l sk72
	dc 2,2
	dc.l fi1
	dc 1,2,1,14,2
m76
*jester sc 37
	dc.l sk73
	dc 3,6
	dc.l fi11
	dc 1,2,1,21,3
m77
*hel sc 37
	dc.l sk74
	dc 2,6
	dc.l fi3
	dc 1,2,2,20,3
m78
*bee sc 38
	dc.l sk75
	dc 1,1
	dc.l fi1
	dc 1,2,2,23,2+b
m79
*eyeball sc 39
	dc.l sk76
	dc 3,4
	dc.l fi1
	dc 1,1,1,19,3
m80
*bird
	dc.l sk78
	dc 3,4
	dc.l fi1
	dc 1,2,2,18,2
m81
*bird 1
	dc.l sk79
	dc 2,4
	dc.l fi1
	dc 1,2,2,18,2
m82
*bee 2
	dc.l sk77
	dc 1,1
	dc.l fi1
	dc 1,2,2,23,2+b
m83
*well done
	dc.l sk80 
	dc 1,2
	dc.l fi1
	dc 1,1,1,24,2+b


movstab:
	dc.l movsp1,movsp2,movsp3,movsp4,movsp5,movsp6,movsp7,movsp8
	dc.l movsp9,movsp10,movsp11,movsp12,movsp13,movsp14,movsp15
	dc.l movsp16,movsp17,movsp18,movsp19,m20,m21,m22,m23,m24
	dc.l m25,m26,m27,m28,m29,m30,m31,m32,m33,m34,m35,m36,m37
	dc.l m38,m39,m40,m41,m42,m43,m44,m45,m46,m47,m48,m49,m50
	dc.l m51,m52,m53,m54,m55,m56,m57,m58,m59,m60,m61,m62
	dc.l m63,m64,m65,m66,m67,m68,m69,m70,m71,m72,m73,m74,m75
	dc.l m76,m77,m78,m79,m80,m81,m82,m83

b	equ 32768
c	equ 16384

** x coord +b  =hyperspace to coord
**	c = x coord of hickey

sk1	dc 240,10,240,44,-1
sk2	dc 240,70,240,108,-1
sk3	dc 153,106,3+b,106,303,106,-1
sk4	dc 64,0,64+b,138,-1
sk5	dc 160,36,160+b,120,-1
sk6	dc 220,40,260,60,220,80,260,100,220,120,260,100,220,80,260,60,-1
sk7	dc c,40,c,50,-1
sk8	dc 240,116,66,116,-1
sk9	dc 34,40,54,60,34,80,54,100,34,80,54,60,-1
sk10	dc 80,0,80+b,136,-1
sk11	dc 16*14,64,16*14,110,-1
sk12 	dc 16*11,58,16*11,110,-1
sk13	dc 16*8,72,16*8,112,-1
sk14	dc 48,16,64,32,-1
sk15	dc 291,114,96+b,114,-1
sk16	dc 176,36,176+b,120,-1
sk17	dc 112,76,-1
sk18 	dc 16*9,0,16*9+b,88,-1
sk19	dc 260,88,140,88,-1
sk20	dc 64,50,64,100,-1
sk21	dc 112,107,-1
sk22	dc 80,20,170,40,80,60,170,40,-1
sk23	dc 48,100,120,40,-1
sk24	dc 48,80,48,120,-1
sk25	dc 72,10,72+90,20,-1
sk26	dc 224,48,-1
sk27	dc 64,63,-1
sk28	dc 240,112,-1
sk29	dc 64,64,-1
sk30	dc 164,20,164,100,-1
sk31	dc 0,50,280+b,50,-1
sk32 	dc 60,80,200,80,-1
sk33	dc 60,70,200,70,-1
sk34	dc 90,120,-1
sk35	dc 160,120,-1
sk36	dc 240,110,48+b,110,-1
sk37	dc c,50,-1
sk38	dc 240,70,240,120,-1
sk39	dc 160,70,160,120,-1
sk40	dc 48,48,230+b,48,-1
sk41	dc 190,70,200,80,-1
sk42	dc 240,50,100+b,50,-1
sk43	dc 240,60,48+b,60
sk44	dc 150,40,150,100,-1
sk45	dc 60,110,200,110,-1
sk46	dc 70,70,70,120,-1
sk47	dc 220,70,220,120,-1
sk48	dc 150,80,150+b,110,-1
sk49	dc 100,80,110,100,120,40,-1
sk50	dc 70,0,70+b,120,-1
sk51	dc 250,100,200,124,220,118,200,40,-1
sk52	dc 80,40,80,80,-1
sk53	dc 140,40,140,80,-1
sk54	dc 80,110,240,110,-1
sk55	dc 150,0,150+b,140,-1
sk56	dc 250,103,50+b,103,-1
sk57	dc 90,50,90,110,-1
sk58	dc 220,32,220,60,-1
sk59	dc 80,30,80,80,-1
sk60	dc 120,30,120,80,-1
sk61	dc 60,40,60,100,-1
sk62	dc 60,84,220,84,-1
sk63	dc 80,60,80,120,-1
sk64	dc 240,30,240,70,-1
sk65	dc 80,20,80,120,-1
sk66	dc 160,60,160,124,-1
sk67	dc 160,60,240,60,-1
sk68	dc 220,20,220,122,-1
sk69	dc 60,40,80,60,120,30,-1
sk70	dc 60,60,100,100,-1
sk71	dc 160,60,120,100,-1
sk72	dc 60,40,100,60,140,40,100,60,-1
sk73	dc 310,100,b+2,100,-1
sk74	dc 160,60,160,100,160,40,170,50,120,20,-1
sk75	dc c,40,c,60,c,80,c,100,c,80,c,60,-1
sk76	dc 150,20,150,120,-1
sk77	dc 130,60,200,90,130,100,50,70,-1
sk78	dc 50,50,70,70,70,50,90,70,90,50,-1
sk79	dc 160,30,130,60,90,90,200,30,40,120,-1
sk80	dc 135,22,135,24,-1



fi1	dc 0,1,2,1
fi2	dc 0,1
fi3	dc 0,1,2,3,2,1
fi4	dc 2,3,4,5,0,5,4,3
fi5	dc 0,1,2,3,4,5,5,4,3,2,1,0
fi6	dc 2,3,4,5,0,1,1
fi7	dc 1,0,2,3,4,5,6,3,2,0
fi8	dc 0,1,2,3,4,3,2,1
fi9	dc 0,1,2,3,4,5,4,3,2,1
fi10	dc 14,15
fi11	dc 0,0,0,0,1,2




nsptab	ds.b 32*spam
setspr:
	clr woron
	move.l #sptab,a0			clear spno.'s
	move #0,d0
clrlp	clr 0(a0,d0)
add10	add #10,d0
	cmp #spam*10,d0
	beq clrlp1

	cmp #hoff,d0
	beq add10
	cmp #boff,d0
	beq add10
	bra clrlp

clrlp1


	move scrn,d0
	lsl #2,d0
	move.l #sctab,a0
	move.l 0(a0,d0),a6
	move #0,d6
dolp	move d6,d1
	move (a6)+,d0
	cmp #-1,d0
	beq las_1
	btst #15,d0
	bne getwor

dowor	bsr spset
nowor	add #1,d6
	bra dolp
las_1	rts
getwor
	bclr #15,d0
	lsl #1,d0
	move d0,lljk
	lea worcolf,a0
	cmp #0,0(a0,d0)
	beq putwo
	jmp nowor
putwo
	lsr #1,d0
	add #frwor,d0
	move d1,d2
	mulu #10,d2
	move d2,woron
	jmp dowor


scrn	ds.l 1

sctab	dc.l scr1,scr2,scr3,scr4,scr5,scr6,scr7,scr8,scr9,scr10
	dc.l scr11,scr12,scr13,scr14,scr15,scr16,scr17,scr18,scr19,scr20
	dc.l scr21,scr22,scr23,scr24,scr25,scr26,scr27,scr28,scr29,scr30
	dc.l scr31,scr32,scr33,scr34,scr35,scr36,scr37,scr38,scr39,scr40
	dc.l scr41,scr42,scr43,scr44,scr45,scr46,scr47,scr48,scr49,scr50


scr1	dc 2,1,0,-1
scr2	dc 3,4,5,-1 
scr3	dc 6,7,-1
scr4	dc 8,9,-1
scr5	dc 10,11,12,13,-1
scr6	dc 14,15,-1
scr7	dc 16,17,18,-1
scr8	dc 19,20,21,-1
scr9	dc 22,23,-1
scr10	dc 24,25,b,-1
scr11	dc 31,32,-1
scr12	dc 33,34,-1
scr13	dc 35,36,-1
scr14	dc 37,38,-1
scr15	dc 25,21,-1
scr16	dc 41,25,-1
scr17	dc 39,40,-1
scr18	dc 42,b+1,0,-1
scr19	dc 32,21,-1
scr20	dc 1,21,-1

scr21	dc 43,35,-1
scr22	dc 44,b+2,-1
scr23	dc 45,46,-1
scr24	dc 47,48,49,-1
scr25	dc 50,33,-1
scr26	dc 51,52,-1
scr27	dc 53,54,55,-1
scr28	dc 56,57,-1
scr29	dc 58,59,-1
scr30	dc 60,61,-1

scr31	dc 62,63,-1
scr32	dc 64,65,-1
scr33	dc 66,67,b+3,-1
scr34	dc 68,69,-1
scr35	dc 70,71,-1
scr36	dc 72,73,-1
scr37	dc 74,33,-1
scr38	dc 75,76,-1
scr39	dc 77,-1
scr40	dc 78,44,-1


scr41	dc 77,79,82,-1
scr42	dc 77,80,-1
scr43	dc 79,80,-1
scr44	dc 58,59,-1
scr45	dc 59,55,-1
scr46	dc 77,b+4,-1
scr47	dc 79,75,-1
scr48	dc 80,58,-1
scr49	dc 76,72,-1
scr50	dc 81,74,-1





spset
*set up 1 sprite:
*on entry d0 contains movspr index & d1 contains sprite number

	lsl #2,d0			d0 contains movspr. index
	move d1,d2
	mulu #10,d1			d1 contains sptab index
	lsl #5,d2			d2 contains nsptab index

	move.l #movstab,a0
	move.l 0(a0,d0),a0

	move.l #sptab,a1
	move 20(a0),8(a1,d1)			put in sprite routine

	move.l #nsptab,a2
	and.l #$ffff,d2
	add.l d2,a2

	move.l (a0)+,a3				seek list address
	move.l a3,(a2)+
	clr (a2)+				seek index
	move (a0),(a2)+				frame change speed counter
	move (a0)+,(a2)+			  "     "      "   reset
	clr (a2)+				frame index
	move (a0)+,(a2)+			  "     "   maximum
	move.l (a0)+,(a2)+			frame address
	move (a0),(a2)+				movement speed counter
	move (a0)+,(a2)+			    "      "   maximum
	move (a0)+,(a2)+			x increment
	move (a0)+,(a2)+			y increment

	move (a0)+,0(a1,d1)			set starting dsn number
	clr 6(a1,d1)				clear frame

	move (a3),2(a1,d1)
	bclr #15,2(a1,d1)
	
	move 2(a3),4(a1,d1)

	cmp #c,2(a1,d1)
	bne nofnset
	move #32,2(a1,d1)

nofnset
*put x & y lengths into nsptab

	move 0(a1,d1),d5
	lsl #2,d5
	move.l #dsntab,a4
	move.l 0(a4,d5),a3
	move 6(a1,d1),d5
	lsl #3,d5
	move 4(a3,d5),d4
	lsl #2,d4
	move d4,(a2)+				xlen (/4planes*16pixels)
	move 6(a3,d5),(a2)+			y len

	rts
movspr:
	move #0,d6
	move.l #sptab,a0

	move.l #nsptab,a1

mvslp
	bsr mv1sp
	add #1,d6
	cmp #spam,d6
	blt mvslp
	rts

mv1sp
	move d6,d0
	move d0,d1
	mulu #10,d0
	cmp #hoff,d0
	beq retu
	cmp #hoff+10,d0
	beq retu
	lsl #5,d1

	move 0(a0,d0),d4
	beq retu

	cmp #6,d4				explosion sprite
	beq exp

	sub #1,6(a1,d1)
	bne oklt
	move 8(a1,d1),6(a1,d1)
	bra oknoex

exp
	add #1,6(a0,d0)
	cmp #5,6(a0,d0)
	blt bypass
	cmp #2,8(a0,d0)
	beq ad2
	cmp #3,8(a0,d0)
	beq ad2
	add #1,pawsam
	clr 0(a0,d0)
bypass	rts
ad2	add #3,pawsam
	clr 0(a0,d0)
	rts

oknoex
	add #1,10(a1,d1)
	move 10(a1,d1),d4

	cmp 12(a1,d1),d4

	blt oklt
	move #0,10(a1,d1)
oklt
	move.l 14(a1,d1),a3
	move 10(a1,d1),d3
	lsl #1,d3
	move 0(a3,d3),6(a0,d0)

*do left/right/up/down:

	move 4(a1,d1),d3
	move.l 0(a1,d1),a3

	move 0(a3,d3),xseek1
	cmp #c,xseek1
	bne nohksk
	move sptab+hoff+2,xseek1
nohksk
	move xseek1,xseek
	bclr #15,xseek

	move 2(a3,d3),yseek

	move 2(a0,d0),d7
	cmp xseek,d7
	bne noteq1

	move 4(a0,d0),d7
	cmp yseek,d7
	bne noteq1

	btst #15,xseek1
	beq nozap
	add #4,4(a1,d1)
	move 4(a1,d1),d3
	cmp #-1,0(a3,d3)
	bne ok9
	move #0,d3
	move #0,4(a1,d1)

ok9
	move 0(a3,d3),2(a0,d0)
	cmp #c,2(a0,d0)
	bne noskhk2
	move sptab+hoff+2,2(a0,d0)
noskhk2
	bclr #15,2(a0,d0)
	move 2(a3,d3),4(a0,d0)

nozap
	add #4,4(a1,d1)
	move 4(a1,d1),d3
	cmp #-1,0(a3,d3)
	bne noreset

	move #0,d3
	move #0,4(a1,d1)
noreset

noteq1
	sub #1,18(a1,d1)
	bne retu
	move 20(a1,d1),18(a1,d1)

	move 2(a0,d0),d4			x seek
	move 0(a3,d3),d5
	cmp #c,d5
	bne nohks1
	move sptab+hoff+2,d5
nohks1

	bclr #15,d5
	cmp d5,d4
	beq doupdw
	bgt mright
*left
	move 22(a1,d1),d5
	add d5,2(a0,d0)
	add d5,rand1
	bra doupdw
mright
	move 22(a1,d1),d5
	sub d5,2(a0,d0)
	add d5,rand1
doupdw
	move 4(a0,d0),d4
	cmp 2(a3,d3),d4
	beq nomor
	blt mdown
*up
	move 24(a1,d1),d5
	sub d5,4(a0,d0)
	bra nomor
mdown
	move 24(a1,d1),d5
	add d5,4(a0,d0)

nomor

retu	rts

xseek	ds.l 1
xseek1	ds.l 1
yseek	ds.l 1

drawsc:
	move #-1,newsc
	bsr clscrs
	move scrn,d0
	move lev,d1

	mulu #10,d1
	sub d1,d0
	mulu #40,d0
	and.l #$ffff,d0

	move lev,d1
	lsl #2,d1
	lea mapt,a0
	move.l 0(a0,d1),a0

	add.l d0,a0
	clr xp
	clr yp
	clr d7

next	bsr prblck

	add #1,d7

	add #1,xp
	cmp #8,xp
	blt next
	clr xp
	add #1,yp
	cmp #5,yp
	bne next

	bsr drshap

	cmp #0,dem
	beq bcop
	rts
	
bcop	move.l #scea1,a0
	move.l #scea2,a1
coplp	move.l (a0)+,(a1)+
	cmp.l #scea1+32000,a0
	blt coplp

	rts
dem 	ds 1
prblck
	move.l #scea1,a1
	move yp,d0
	mulu #32*40,d0
	move xp,d1
	add #1,d1
	lsl #2,d1			?
	add d1,d0
	and.l #$ffff,d0
	add.l d0,a1

	move d7,d6
	and #$fffe,d6
	move 0(a0,d6),d1
	btst #0,d7
	bne fbyte
	lsr #8,d1

fbyte	and #$ff,d1


	lsl.l #5,d1
	lsl.l #4,d1

	lea blockt,a3
	move lev,d2
	lsl #2,d2
	move.l 0(a3,d2),a3

	add.l d1,a3

*copy block
	move #32,d1
cplp
	move.l a1,a2
	move.l a2,a4
	add.l #plane,a4
	move.l a4,a5
	add.l #plane,a5
	move.l a5,a6
	add.l #plane,a6
	move #2,d0

cpline	move (a3)+,(a2)+
	move (a3)+,(a4)+
	move (a3)+,(a5)+
	move (a3)+,(a6)+
	subq #1,d0
	bne cpline

	add #40,a1
	subq #1,d1
	bne cplp
	rts
xp	ds.l 1
yp	ds.l 1
preshky
	move #5,sptab+hoff
	clr sptab+6+hoff
	move #-1,sptab+8+hoff	
	clr adfrw
	clr jump
	move hkxs,sptab+hoff+2
	move hkys,sptab+hoff+4
	rts
hkxs	ds 1
hkys	ds 1

setbul
	clr.l sptab+boff
	clr.l sptab+4+boff
	move #2,sptab+8+boff
	clr bullon
	rts

adfrw	ds.l 1

adfrw1	ds 1
xpos1	ds 1
ypos1	ds 1
fram1	ds 1

setwm
	move adfrw,adfrw1
	move sptab+2+hoff,xpos1
	move sptab+4+hoff,ypos1
	move sptab+6+hoff,fram1
	clr joydown

	move joydat,d0
	lsr #1,d0
	bcs wup
	lsr #1,d0
	bcs wdw
inbit	lsr #1,d0

	bcs wmlft
	lsr #1,d0
	bcs wmrght
	rts
wup	lsr #1,d0
	cmp #0,jump
	bne inbit
	not jpreq
	bra inbit
wdw	not joydown
	bra inbit

jpreq	ds 1

joydown	ds 1
wmlft
	cmp #0,jump
	bne lrrts
	move #-1,adfrw1
	clr wmlfri
	rts
wmrght	
	cmp #0,jump
	bne lrrts
	move #1,adfrw1
	move #-1,wmlfri
lrrts	rts
wor_mov
	bsr setwm
	bsr movw
*..check if standing on collectable:
	bsr getcord
	bsr hickc
	

	and #240,d6
	move d6,door
	cmp #$10,d6
	beq nowtunda
	cmp #$20,d6
	beq nowtunda

	move d6,collb

nowtunda
	cmp #16,xpos1
	beq missck
	cmp #$110,xpos1
	bge missck

*check left
	cmp #9,fram1
	bne chkrg
	cmp #-1,adfrw1
	bne chkrg

	add #30,ypos1
	bsr getcord
	bsr bullc
	sub #30,ypos1
	cmp #0,d0
	bne nomov1
	add #4,ypos1
	bsr getcord
	bsr hickc
	sub #4,ypos1
	cmp #0,d0
	bne nomov1
** right detect:
chkrg
	cmp #1,adfrw1
	bne missck
	add #30,ypos1
	add #16,xpos1
	bsr getcord
	bsr bullc
	sub #30,ypos1
	sub #16,xpos1

	cmp #0,d0
	bne nomov1
	add #16,xpos1
	add #4,ypos1
	bsr getcord
	bsr hickc
	sub #16,xpos1
	sub #4,ypos1
	cmp #0,d0
	bne nomov1
	
	
missck	move adfrw1,adfrw
	move xpos1,sptab+hoff+2
	move ypos1,sptab+hoff+4
	move fram1,sptab+hoff+6
nomov1

worud
*check underside

	cmp #0,jump
	bne dojump

	move sptab+4+hoff,ypos1
	add #32,ypos1
	move sptab+2+hoff,xpos1

	bsr getcord
	bsr hickc
	cmp #$20,door
	beq ooky
	move d6,door
	and #240,door

ooky

	cmp #0,d6
	beq nochsp
	cmp #130,ypos1
	bge nochsp
	move ypos1,d7
	and #31,d7
	cmp #3,d7
	bgt nspring

	btst #4,d6
	beq nspring

	move #66,maxh
	move #95,maxf
	clr height
	bra nochsp

nspring
	move #24,maxh
	move #75,maxf
	clr height
	cmp #1,highj
	bne nochsp
	move #52,maxh
	move #110,maxf
nochsp
	cmp #1,sptab+hoff+6
	bge chnx16
	cmp #0,d0
	beq addit
	bra nomov2
	

chnx16	move d0,dum
	add #16,xpos1
	bsr getcord
	bsr hickc

	add dum,d0
	bne nomov2
addit	
	cmp #0,jump
	bne dojump
	cmp #0,fallf
	beq nobf
	move #200,maxf
nobf
	add #2,sptab+4+hoff
	add #1,falld
	move falld,d0
	cmp maxf,d0
	blt dnki

	move #1,hitf1
dnki

	clr jpreq
	move #24,maxh
	move #75,maxf
	cmp #0,highj
	beq retp
	move #52,maxh
	move #110,maxf
retp	cmp #0,fallf
	beq ret
	move #200,maxf
	move #26,maxh
	rts
nomov2	
	clr falld
	cmp #1,hitf1
	bne nset22
	move #2,hitf1
nset22
	cmp #0,jpreq
	beq nojr
	bsr setjp
	clr jpreq
nojr
	cmp #0,jump
	bne dojump
	rts

dum	ds 1

movw	cmp #0,adfrw1
	beq noidf
doitag	move adfrw1,d0
	add d0,fram1
	beq clrt
	cmp #10,fram1
	beq ad16
	cmp #5,fram1
	beq clrt
	cmp #-1,fram1
	beq set9
	cmp #0,wspeed
	bne fastm
	rts
fastm	move fram1,d7
	and #1,d7
	bne doitag
	rts
set9
	move #9,fram1
	sub #16,xpos1
	rts
ad16
	clr fram1
	add #16,xpos1

clrt	clr adfrw1
noidf	rts


hitf	ds.l 1
getcord

	move xpos1,d0
	lsr #5,d0
	sub #1,d0
	move ypos1,d1
	bmi movc
	
	lsr #2,d1
	and #%111000,d1
	add d0,d1

	move scrn,d2
	move lev,d3
	mulu #10,d3
	sub d3,d2

	mulu #40,d2
	add d2,d1

	move lev,d3
	lsl #2,d3
	lea mapt,a0
	move.l 0(a0,d3),a0

	move.b 0(a0,d1),d0
fbyte1	and #$ff,d0
	lsl #1,d0
	rts
movc	move #5,d0
	clr ypos1
	bra fbyte1
clok	clr d0
	rts
hickc
	lea bltabt,a0
	move lev,d1
	lsl #2,d1
	move.l 0(a0,d1),a0

	move 0(a0,d0),d6
	move d6,d0
	and #15,d0
	bne chkfne
	rts
chkfne
	move d0,d1
	sub #1,d1
	lsl #2,d1
	move.l #jptm1,a0
	move.l 0(a0,d1),vec+2
vec	jmp $ffeeddcc


jptm1	dc.l nobot,notop,noleft,norght,cfrts,brb1,blb1,trc1
	dc.l tlc1,trb1,blc1,trco1,tlco1,cfrts,cfrts
cfrts	rts


trb1	bsr brb1
	bra chd0
blc1	bsr blb1
	bra chd0

trco1	bsr trc1
	bra chd0
tlco1	bsr tlc1
	bsr chd0
	
notop
	move ypos1,d1
	and #31,d1
	cmp #18,d1
	bgt fall
	cmp #14,d1
	bge cfrts
fall	clr d0
	rts
nobot
	move ypos1,d1
	and #31,d1
	cmp #3,d1
	ble cfrts
	clr d0
	rts

norght
	move xpos1,d1
	and #31,d1
	cmp #16,d1
	bge fall
	rts
noleft
	move xpos1,d1
	and #31,d1
	cmp #15,d1
	ble fall
	rts



brb1
	move xpos1,d1
	and #31,d1
	cmp #16,d1
	blt fall
	move ypos1,d1
	and #31,d1
	cmp #18,d1
	bge fall
	cmp #14,d1
	bge cfrts
	bra fall
blb1
	move xpos1,d1
	and #31,d1
	cmp #16,d1
	bge fall
	move ypos1,d1
	and #31,d1
	cmp #18,d1
	bge fall
	cmp #14,d1
	bge cfrts
	bra fall
trc1	move xpos1,d1
	and #31,d1
	cmp #15,d1
	ble cfrts
	move ypos1,d1
	and #31,d1
	cmp #18,d1
	bge fall
	cmp #14,d1
	bge cfrts
	bra fall
tlc1	move xpos1,d1
	and #31,d1
	cmp #16,d1
	bge cfrts
	move ypos1,d1
	and #31,d1
	cmp #18,d1
	bge fall
	cmp #14,d1
	bge cfrts
	bra fall


bltab	dc 0,1,1,2,$15,$19,$18,4,3,9,8,$15,11,10,6,7,2,$15,$22,7,6
	dc $30,$40,$50,$60,$70,4,3,1,10,11,1,12,13,1,1,1,2,8,$23,$22
	dc 9,13,12,7,6,9,0,0,0,0

bltab1
	dc 0,1,1,3,4,9,8,10,11,2,$22,13,7,12,6,11,1,13,12,1,1,$30,$40
	dc $50,$60,$70,3,1,1,2,8,9,4,10,11,2,2,7,6,2,2,7,2,8,9,$22,$22
	dc 12,6,13,7

bltab2
	dc 0,1,1,2,4,3,8,9,11,10,$22,2,2,2,6,7,1,1,1,13,12,$30,$40,$50
	dc $60,$70,11,10,13,6


	
bullc
	lea bltabt,a0
	move lev,d2
	lsl #2,d2
	move.l 0(a0,d2),a0

	move 0(a0,d0),d6
	move d6,d0
	and #15,d0
	bne chkfn1
	rts
chkfn1
	move d0,d1
	sub #1,d1
	lsl #2,d1
	move.l #jptm2,a0
	move.l 0(a0,d1),vec1+2
vec1	jmp $10101010

jptm2	dc.l nobotb,notopb,noleftb,norghtb,cfrts,brb2,blb2,trc2
	dc.l tlc2,trb2,blc2,trco2,tlco2,cfrts,cfrts

trb2	bsr brb2
	bra chd0
blc2	bsr blb2
	bra chd0
trco2	bsr trc2
	bra chd0
tlco2	bsr tlc2
	bra chd0

chd0
	cmp #0,d0
	beq setd0
	clr d0
	rts
setd0	move #5,d0
	rts
tlc2	move xpos1,d1
	and #31,d1
	cmp #16,d1
	bge cfrts
	move ypos1,d1
	and #31,d1
	cmp #18,d1
	bge cfrts
	bra fall

trc2	move xpos1,d1
	and #31,d1
	cmp #15,d1
	ble cfrts
	move ypos1,d1
	and #31,d1
	cmp #18,d1
	bge cfrts
	bra fall

notopb
	move ypos1,d1
	and #31,d1
	cmp #16,d1
	bge cfrts
	clr d0
	rts
nobotb
	move ypos1,d1
	and #31,d1
	cmp #16,d1
	blt cfrts
	clr d0
	rts

norghtb
	move xpos1,d1
	and #31,d1
	cmp #16,d1
	bge fall
	bra cfrts
noleftb
	move xpos1,d1
	and #31,d1
	cmp #16,d1
	blt fall
	bra cfrts

brb2
	move xpos1,d1
	and #31,d1
	cmp #16,d1
	blt fall
	move ypos1,d1
	and #31,d1
	cmp #16,d1
	bge cfrts
	bra fall
blb2
	move xpos1,d1
	and #31,d1
	cmp #16,d1
	bge fall
	move ypos1,d1
	and #31,d1
	cmp #16,d1
	bge cfrts
	bra fall

bullon	dc 0	
wmlfri	dc 0

setfire
	btst #7,joydat+1
	beq nofire
	cmp #0,bullon
	bne nofire
	cmp #0,bulls
	beq nofire
	move #5,d0
	bsr note

	subq #1,bulls	
	move bulls,d0
	and #3,d0
	bne nodecg

	move #%1000000000111111,d0
	lea scea1+28+168*40,a0
	lea scea2+28+168*40,a1		
	move #60,d1
	sub bulls,d1
	lsr #2,d1
	mulu #40,d1
	
	and d0,0(a0,d1)
	and d0,0(a1,d1)
	

nodecg

	move #7,sptab+boff
	clr sptab+boff+6
	move sptab+hoff+2,sptab+boff+2
	move sptab+hoff+4,sptab+boff+4
	move #2,sptab+boff+8

	cmp #0,sptab+hoff+6
	beq frup
	cmp #9,sptab+hoff
	beq frup
	btst #0,wmlfri
	beq frleft
*set up fire right......bullon:1=up,2=left,3=right.

	move #3,bullon
	clr bulyi
	move #6,bulxi
	add #32,sptab+boff+2
	add #20,sptab+boff+4
nofire	rts
frleft
	move #2,bullon
	clr bulyi
	move #-6,bulxi
	sub #4,sptab+boff+2
	add #20,sptab+boff+4
	rts
frup
	move #1,bullon
	move #-6,bulyi
	clr bulxi
	add #4,sptab+boff+2
	cmp #4,sptab+boff+4
	blt ret
	sub #4,sptab+boff+4
	rts

bulxi	dc 0
bulyi	dc 0


dofire
	cmp #0,bullon
	beq nofire
	cmp #8,sptab+boff
	bne nobexp

	cmp #2,sptab+boff+4
	blt nosub0
	sub #2,sptab+boff+4
	bge nosub0
	clr sptab+boff+4

nosub0	cmp #4,sptab+boff+6
	beq stopb
	add #1,sptab+boff+6
	rts

nobexp
	add #1,sptab+boff+6
	cmp #4,sptab+boff+6
	bne norsf
	clr sptab+boff+6
norsf
	move bulxi,d1
	add d1,sptab+boff+2
	move sptab+boff+2,d0
	cmp #32,d0
	blt stopb1
	cmp #288,d0
	bge stopb1

	move bulyi,d1
	add d1,sptab+boff+4
	move sptab+boff+4,d0
	cmp #6,d0
	blt stopb1
	move sptab+2+boff,xpos1
	move sptab+4+boff,ypos1
	bsr getcord
	bsr bullc
	cmp #0,d0
	bne stopb1


*bullet vs alien detection
	clr scorf
	clr d0
	clr d3
	move.l #sptab,a0
	move.l #nsptab,a1
	move sptab+boff+2,d1
	move sptab+boff+4,d2

bvalp
	cmp #0,0(a0,d0)
	beq bvanex
	cmp #6,0(a0,d0)				already hit ?
	beq bvanex			
	move 2(a0,d0),d4
	cmp d1,d4
	bgt bvanex
	add 26(a1,d3),d4
	cmp d1,d4

	blt bvanex

	move 4(a0,d0),d4
	cmp d2,d4
	bgt bvanex
	add 28(a1,d3),d4
	cmp d2,d4
	blt bvanex

	cmp #32768,8(a0,d0)
	bcc stopb1

	clr 6(a0,d0)

	move 0(a0,d0),scorf
	move #6,0(a0,d0)
	move #1,8(a0,d0)

	move #4,d0
	bsr note

	bra stopb1	
sptemp	ds 1
sptemp1	ds 1
scorf	ds 1
bvanex
	add #32,d3
	add #10,d0
	cmp #140,d0
	blt bvalp
	move.b scorf+1,d7
	clr scorf
	jmp addscore

stopb1	move #8,sptab+boff
	clr sptab+boff+6
	sub #4,sptab+boff+2
	move.b scorf+1,d7
	clr scorf
	jmp addscore
stopb
	clr bullon
	clr sptab+boff
	move.b scorf+1,d7
	clr scorf
	jmp addscore 


dojump
	cmp #9,sptab+hoff
	bne noshrk
	cmp #0,wspeed
	bne misslow
	eor #1,jptog
	bne rout
misslow
	add #1,sptab+hoff+6
	cmp #4,sptab+hoff+6
rout	beq dojp
	rts
jptog	ds 1
dojp
	clr sptab+hoff+6
	move #5,sptab+hoff 

noshrk
	move sptab+hoff+4,ypos1
	sub #2,ypos1	
	move sptab+hoff+2,xpos1	
	bsr getcord
	bsr bullc
	cmp #0,d0
	bne setdrop
	move wspeed,d0
	add #1,d0
	add height,d0
	cmp maxh,d0
	bge setdrop
	move d0,height
	move wspeed,d0
	lsl #1,d0
	add wspeed,d0
	add #3,d0
	sub d0,sptab+hoff+4
	clr sptab+hoff+6
	rts
setdrop
	clr jump
	rts
jump	ds 1
height	ds 1
maxh	dc 24
maxf	dc 75
setjp
	move sptab+hoff+2,xpos1
	move sptab+hoff+4,ypos1
	sub #2,ypos1
	bsr getcord
	bsr bullc
	cmp #0,d0
	bne nojp1
	cmp #0,sptab+hoff+6
	bne mwtjp
	not jump
	clr height
	move #9,sptab+hoff
	clr sptab+hoff+6
	clr jptog
	move #1,d0
	bsr note


nojp1	rts
mwtjp	cmp #5,sptab+hoff+6
	bgt wmri
	move #-1,adfrw
	clr wmlfri
	rts
wmri	move #1,adfrw
	move #-1,wmlfri
	rts
	
msctab
*	left,right,up,down			screen number

	dc $ff,1,$ff,$ff				0
	dc 0,2,$ff,$ff					1
	dc 1,$ff,3,$ff					2
	dc 4,$ff,$ff,2					3
	dc 5,3,$ff,$ff					4
	dc $ff,4,6,$ff					5
	dc $ff,7,$ff,5					6
	dc 6,8,$ff,$ff					7
	dc 7,$ff,9,$ff					8
	dc $ff,$ff,$ff,8				9

	dc $ff,$ff,$ff,11				10
	dc $ff,13,10,12					11
	dc $ff,$ff,11,$ff				12
	dc 11,$ff,14,$ff				13
	dc $ff,$ff,15,13				14
	dc 16,$ff,$ff,14				15
	dc $ff,15,17,$ff				16
	dc $ff,18,$ff,16				17
	dc 17,$ff,19,$ff				18
	dc $ff,$ff,$ff,18				19

	dc $ff,25,$ff,24				20
	dc 24,$ff,$ff,$ff				21
	dc $ff,23,$ff,$ff				22
	dc 22,24,$ff,27					23
	dc 23,21,20,$ff					24
	dc 20,$ff,$ff,$ff				25
	dc $ff,27,$ff,$ff				26
	dc 26,28,23,$ff					27
	dc 27,29,$ff,$ff				28
	dc 28,$ff,$ff,$ff				29

	dc $ff,31,$ff,$ff				30
	dc 30,$ff,$ff,32				31
	dc 33,$ff,31,$ff				32
	dc $ff,32,$ff,34				33
	dc $ff,36,33,35					34
	dc $ff,$ff,34,$ff				35
	dc 34,37,$ff,$ff				36
	dc 36,$ff,38,$ff				37
	dc $ff,$ff,39,37				38
	dc $ff,$ff,$ff,38				39

	dc 41,$ff,$ff,$ff				40
	dc 42,40,$ff,$ff				41
	dc $ff,41,$ff,43				42
	dc 45,44,42,$ff					43
	dc 43,47,$ff,48					44
	dc $ff,43,$ff,46				45
	dc $ff,49,45,$ff				46
	dc 44,$ff,$ff,$ff				47
	dc 49,$ff,44,$ff				48
	dc 46,48,$ff,$ff				49


mvsct
	move scrn,d0
	lsl #3,d0
	move.l #msctab,a0

	cmp #$110,sptab+hoff+2
	bge pright
	cmp #16,sptab+hoff+2
	ble pleft
	cmp #6,sptab+hoff+4
	ble pup
	cmp #160-32,sptab+hoff+4
	bge pdown
	rts

pleft
	move 0(a0,d0),d1
	cmp #$ff,d1
	beq ret
	move d1,newsc
	move #$110,nxp
	move sptab+hoff+4,nyp
ret	rts
pright
	cmp #9,sptab+hoff
	beq ret
	cmp #0,sptab+hoff+6
	beq ret
	move 2(a0,d0),d1
	cmp #$ff,d1
	beq ret
	move d1,newsc
	move #32,nxp
	move sptab+hoff+4,nyp
	rts
pup	move 4(a0,d0),d1
	cmp #$ff,d1
	beq ret
	move d1,newsc
	move #129,nyp
	move sptab+hoff+2,nxp
	rts
pdown	move 6(a0,d0),d1
	cmp #$ff,d1
	beq ret
	move d1,newsc
	move #7,nyp
	move sptab+hoff+2,nxp
	rts
newsc	ds 1
rand	ds 1
rand1	ds 1

svreg
	movem.l d0-d7/a0-a6,-(sp)
	rts

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

drshap:
	clr d0
	move.l #scea1,scrad
drslp
	move.l #shapt,a0
	move.l #shapl,a2
	move 0(a0,d0),d1
	cmp #-1,d1
	beq ret
	cmp scrn,d1
	bne adder
	move 2(a0,d0),d3
	mulu #14,d3

	move.l 0(a2,d3),a1
	move 4(a2,d3),d4
	move 6(a2,d3),d5
	move 10(a2,d3),d2
	move 8(a2,d3),d1
	move 12(a2,d3),xshft
	move d0,atemp

	bsr sprite
	move atemp,d0
adder
	addq #4,d0
	bra drslp
atemp	ds 1

shapt	dc 0,0,1,2,1,3,1,4,1,5,2,6,2,7,3,8,5,9,6,10,6,11,7,12,7,13
	dc 8,14,9,1,999,15,1000,16,1001,17,1002,18,1003,19,1004,20
	dc 1005,21,1006,22,1007,23,1008,24,1009,25,1010,26
	dc 12,27,13,28,16,29,17,30,18,31
	dc 21,32,24,33,25,34,25,35,27,36,27,37,28,38
	dc 30,39,31,40,31,41,31,42,31,43,32,44,32,45,32,46,32,47
	dc 35,48,35,49,35,50,36,51,37,52,39,53,39,54
	dc 40,55,40,56,40,57,40,58,40,59,40,60,40,61,40,62,40,63
	dc 41,64,41,65,41,66,41,67,41,68,41,69,41,70
	dc 42,71,42,72,42,73,42,74,42,75,42,76,42,77,42,78,42,79
	dc 42,80,42,81,42,82,43,83,43,84,43,85,44,86,44,87
	dc 45,88,46,89,46,90,47,91,49,92
	dc -1

shapl	
*data address.l,x coord,y coord,x len,y len.
*0cage scr1	
	dc.l shapes
	dc 86,26,28,52,3
*1cage scr10
	dc.l shapes
	dc 176,26,28,52,3
*2spaceman scr2
	dc.l shapes+91*40
	dc 80,70,16,72,3
*3igloo scr2
	dc.l shapes+14
	dc 169,94,20,54,3
*4icicle scr2
	dc.l shapes+16+56*40
	dc 52,0,8,48,3
*5icicle 2 scr2
	dc.l shapes+16+56*40
	dc 147,1,8,48,3
*6worm scr3
	dc.l shapes+12+40*107
	dc 114,73,20,69,3
*7icicle scr3
	dc.l shapes+16+56*40
	dc 64,1,8,48,3
*8icicle scr4
	dc.l shapes+16+56*40
	dc 68,0,8,48,3
*9icicle scr 5
	dc.l shapes+16+56*40
	dc 163,1,8,48,3
*10icicle scr6
	dc.l shapes+16+56*40
	dc 16*8+4,0,8,48,3
*11 boot scr6
	dc.l spfil2+16
	dc 120,94,8,17,1
*12 boot scr7
	dc.l spfil2+16
	dc 112,125,8,17,1
*13 igloo scr7
	dc.l shapes+14
	dc 200,94,20,54,3
*14iceman scr8
	dc.l shapes+91*40
	dc 200,70,16,72,3
*15 Game Over
	dc.l spfil2+24
	dc 125,46,20,37,2
*16press fire
	dc.l spfil2+24+40*111
	dc 135,46,16,48,2
*17 sc0
	dc.l spfil2+20
	dc 260,169,4,26,2
*18 sc1
	dc.l spfil2+20+27*40
	dc 260,169,4,26,2
*19 sc2
	dc.l spfil2+20+54*40
	dc 260,169,4,26,2
*20 sc3
	dc.l spfil2+20+81*40
	dc 260,169,4,26,2
*21 sc4
	dc.l spfil2+20+108*40
	dc 260,169,4,26,2
*22 sc5
	dc.l spfil2+20+136*40
	dc 260,169,4,26,2
*23 sc6
	dc.l spfil2+20+162*40
	dc 260,169,4,26,2
*24 sc7
	dc.l spfil2+22
	dc 260,169,4,26,2
*25 sc8
	dc.l spfil2+22+27*40
	dc 260,169,4,26,2
*26 sc9
	dc.l spfil2+22+54*40
	dc 260,169,4,26,2


*27 sc12 creature
	dc.l shapes+12+40*107
	dc 200,75,20,69,3
*28 sc13 face
	dc.l shapes+54*40
	dc 130,108,20,36,3
*29sc16 face
	dc.l shapes+54*40
	dc 140,108,20,36,3
*30sc17 cage
	dc.l shapes
	dc 48,44,28,52,3
*31sc18 worm cret.
	dc.l shapes+12+107*40
	dc 196,78,20,69,3


*32sc21 cage
	dc.l shapes
	dc 150,93,28,52,3
*33sc 24 jd
	dc.l shapes+22+54*40
	dc 96,65,16,80,2
*34sc 25 icicle
	dc.l shapes+16+56*40
	dc 60,8,8,48,3
*35,25 face
	dc.l shapes+54*40
	dc 140,109,20,36,3
*36,27 igloo
	dc.l shapes+14
	dc 70,96,20,54,3
*37,27 spaceman
	dc.l shapes+91*40
	dc 208,73,16,72,3
*38,28 jd
	dc.l shapes+22+54*40
	dc 116,65,16,80,2
 

*39,30 plant
	dc.l worka+142*40
	dc 140,90,16,57,3
*40,31 rock
	dc.l worka+44*40
	dc 60,2,12,25,3
*41,31 rock
	dc.l worka+44*40
	dc 180,2,12,25,3
*42,31 rock
	dc.l worka+44*40
	dc 224,83,12,25,3
*43,31 foot
	dc.l shapes+32+33*40
	dc 68,92,16,56,3
*44,32 foot
	dc.l shapes+32+33*40
	dc 60,90,16,56,3
*45,32 foot
	dc.l shapes+32+33*40
	dc 120,90,16,56,3
*46,32 cage
	dc.l shapes
	dc 184,93,28,52,3
*47,32 plant
	dc.l worka+142*40
	dc 210,38,16,57,2
*48,35 foot
	dc.l shapes+32+33*40
	dc 64,25,16,56,3
*49,35 plant
	dc.l worka+142*40
	dc 120,92,16,57,3
*50,35 plant
	dc.l worka+142*40
	dc 212,92,16,57,3
*51,36 hand
	dc.l shapes+34+93*40
	dc 60,90,12,69,3
*52,37 plant
	dc.l worka+142*40
	dc 200,86+2,16,57,3
*53,39 rock
	dc.l worka+44*40
	dc 64,88,12,25,2
*54,39 rock
	dc.l worka+44*40
	dc 224,88,12,25,2


*55,40 house 1
	dc.l worka+16+45*40 
	dc 200,52,20,95,3
*56,40 house 2
	dc.l worka+8+114*40
	dc 90,62,16,87,3
*57,40 treetop
	dc.l shapes+22+138*40
	dc 145,51,20,51,3
*58,40 tree s1
	dc.l shapes+165*40
	dc 181,100,4,14,2
*59,40 tree s2
	dc.l shapes+181*40
	dc 181,114,4,14,2
*60,40 tree base
	dc.l shapes+2+184*40
	dc 168,128,12,16,2
*61,40 rock1
	dc.l shapes+10+59*40
	dc 40,113,12,31,3
*62,40 cloud 1
	dc.l shapes+4+164*40
	dc 60,20,16,18,2
*63,40 cloud 2
	dc.l shapes+8+184*40
	dc 130,40,16,16,2
*64,41 house 1
	dc.l worka+16+45*40 
	dc 180,52,20,95,3
*65,41 cloud 1
	dc.l shapes+4+164*40
	dc 200,26,16,18,2
*66,41 cloud 2
	dc.l shapes+8+184*40
	dc 50,10,16,16,2	
*67,41 treetop
	dc.l shapes+22+138*40
	dc 85,51,20,51,3
*68,41 tree s1
	dc.l shapes+165*40
	dc 121,100,4,14,2
*69,41 tree s2
	dc.l shapes+181*40
	dc 121,114,4,14,2
*70,41 tree base
	dc.l shapes+2+184*40
	dc 108,128,12,16,2

*71,42 rock1
	dc.l shapes+10+59*40
	dc 240,113,12,31,3
*72,42 treetop
	dc.l shapes+22+138*40
	dc 175,51,20,51,3
*73,42 tree s1
	dc.l shapes+165*40
	dc 211,100,4,14,2
*74,42 tree s2
	dc.l shapes+181*40
	dc 211,114,4,14,2
*75,42 tree base
	dc.l shapes+2+184*40
	dc 198,128,12,16,2
*76,42 treetop
	dc.l shapes+22+138*40
	dc 73,51,20,51,3
*77,42 tree s1
	dc.l shapes+165*40
	dc 109,100,4,14,2
*78,42 tree s2
	dc.l shapes+181*40
	dc 109,114,4,14,2
*79,42 tree base
	dc.l shapes+2+184*40
	dc 96,128,12,16,2
*80,42 cloud 1
	dc.l shapes+4+164*40
	dc 160,20,16,18,2
*81,42 cloud 2
	dc.l shapes+8+184*40
	dc 80,30,16,16,2
*82,42 rock2
	dc.l shapes+10+59*40
	dc 132,113,12,31,3
*83,43 mushroom
	dc.l worka+8+44*40
	dc 220,80,16,67,2
*84,43 plant2
	dc.l worka+28+58*40
	dc 130,53,16,95,2
*85,43 mushroom
	dc.l worka+8+44*40
	dc 38,80,16,67,2
*86,44 hand
	dc.l shapes+34+93*40
	dc 60,88,12,69,3
*87,44 hand
	dc.l shapes+34+93*40
	dc 90,88,12,69,3
*88,45 cage
	dc.l shapes
	dc 48,46,28,52,3
*89,46 mushroom
	dc.l worka+8+44*40
	dc 50,80,16,67,2
*90,46 mushroom
	dc.l worka+8+44*40
	dc 160,80,16,67,2
*91,47 jd
	dc.l shapes+22+54*40
	dc 120,65,16,80,2
*92,49 mushroom
	dc.l worka+8+44*40
	dc 220,80,16,67,2

rotso
	move #16,d2
rotlp2
	clr vblank
rotlp3	cmp #0,vblank
	beq rotlp3
	cmp.l #scea1,scrad
	beq set22
	move.l #scea1,a0
	bra mist
set22	move.l #scea2,a0
mist	move.l a0,a1
	add.l #160,a1
	move #100,d1
rotlp1	move #80,d0
rotlp	lsl (a0)+
	lsr (a1)+
	sub #1,d0
	bne rotlp
	add.l #160,a0
	add.l #160,a1
	sub #1,d1
	bne rotlp1
	sub #1,d2
	bne rotlp2
	rts

pstars	
	clr d0
	clr d0
	move screen,d1
	lsl #2,d1
	move.l #stl,a0
	move.l 0(a0,d1),a0

psloop	move 2(a0,d0),d1
	mulu #40,d1
	add 0(a0,d0),d1
	and.l #$fffc,d1
	add.l scrad,d1
	move.l d1,a1

	clr 6(a0,d0)
	btst #8,0(a1)
	bne nosetf
	btst #8,plane*2(a1)
	bne nosetf
	btst #8,plane*3(a1)
	bne nosetf
	bset #8,plane(a1)
	bne nosetf
	not 6(a0,d0)
nosetf

	add #8,d0
	cmp #8*stam,d0
	blt psloop
	rts
stl	dc.l stlist,stlist1
dstars	
	clr d0
	move screen,d1
	lsl #2,d1
	move.l #stl,a0
	move.l 0(a0,d1),a0

psloop1	move 2(a0,d0),d1
	mulu #40,d1
	add 0(a0,d0),d1
	and.l #$fffc,d1
	add.l scrad,d1
	move.l d1,a1	

	cmp #0,6(a0,d0)
	beq nostar
	bclr #8,plane(a1)
nostar	move 4(a0,d0),d2
	add d2,2(a0,d0)
	cmp #160,2(a0,d0)
	blt noms
	clr 2(a0,d0)
noms
	add #8,d0
	cmp #8*stam,d0
	blt psloop1
	rts

stset
	move.l #stlist,a0
	move.l #stlist1,a1
	clr d0
coplp9	move 2(a0,d0),2(a1,d0)
	add #8,d0
	cmp #8*stam,d0
	blt coplp9
	rts

stlist	
	dc 2*3,100,1,0
	dc 2*4,30,2,0
	dc 2*5,120,1,0
	dc 2*6,20,1,0
	dc 2*7,30,2,0
	dc 2*8,70,1,0
	dc 2*9,10,3,0
	dc 2*11,100,1,0
	dc 2*13,50,2,0
	dc 2*14,130,3,0
	dc 2*15,40,1,0
	dc 2*17,80,2,0

stlist1
	dc 2*3,100,1,0
	dc 2*4,30,2,0
	dc 2*5,120,1,0
	dc 2*6,20,1,0
	dc 2*7,30,2,0
	dc 2*8,70,1,0
	dc 2*9,10,3,0
	dc 2*11,100,1,0
	dc 2*13,50,2,0
	dc 2*14,130,3,0
	dc 2*15,40,1,0
	dc 2*17,80,2,0


stam	equ 12


sidem	ds.l 1
ebuff2	ds.l 2
offm	ds.l 1
ylines	ds.l 1


collb	ds 1
held	ds 1

pickup
	cmp #0,held
	bne holding1
	cmp #0,screen
	beq ret

	cmp #0,clb
	bne ret
	cmp #0,joydown
	beq ret
	cmp #0,collb
	beq ret
	bsr getcofb

*put object into buffer

	move objam,d0
	lsl #2,d0
	add objam,d0
	add objam,d0

	lea objbuff,a6
	move.b 0(a0,d4),0(a6,d0)
	move d4,d7
	and.l #$ffff,d7
	add.l a0,d7
	move.l d7,2(a6,d0)	

	addq #1,objam

	clr.b 0(a0,d4)
	move #2,clb

*do sweet functions
	move #1,jhdow

	move.b collb+1,d7
	lsr #4,d7
	jsr addscore


	cmp #$30,collb
	beq extralf

	move #2,d0
	bsr note

	cmp #$40,collb
	beq jph
	cmp #$50,collb
	beq run
	cmp #$60,collb
	beq fallf1
	cmp #$70,collb
	beq am1

	rts
jhdow	ds 1

extralf
	clr d0
	bsr note

	addq #1,lives
	bsr dslives
	clr highj
	clr wspeed
	clr fallf
	rts
holding1
	jsr testit
	cmp #0,d0
	beq ret

	move #8,d0
	bsr note
	
	move held,d0
	clr held
	cmp #$40,d0
	beq jphghr
	cmp #$50,d0
	beq runfast
	cmp #$60,d0
	beq fallfur
	cmp #$70,d0
	beq ammo
	rts

testit	cmp #0,jhdow
	bne testup
	cmp #0,joydown
	bne okdot
	clr d0
	rts
okdot	move #-1,d0
	rts
testup
	move joydown,jhdow
	clr d0
	rts

jph
	move collb,held
	lea spfil2+164*40,a0
	jmp sweetp

jphghr
	move #1,highj
	move #52,maxh
	move #95,maxf
	clr wspeed
	clr fallf
	lea spfil2+182*40+8,a0
	jmp sweetp

run
	move collb,held
	lea spfil2+182*40,a0
	jmp sweetp

runfast
	clr highj
	move #24,maxh
	move #75,maxf
	move #1,wspeed
	clr fallf
	lea spfil2+182*40+8,a0
	jmp sweetp

falld	ds 1

fallf1
	move collb,held
	lea spfil2+4+40*164,a0
	jmp sweetp
fallfur
	move #24,maxh
	move #200,maxf
	clr highj
	clr wspeed
	move #1,fallf
	lea spfil2+8+40*182,a0
	jmp sweetp

am1
	move collb,held
	lea spfil2+4+182*40,a0
	jmp sweetp

ammo
	move #60,bulls
	jsr setamo

	lea spfil2+8+182*40,a0
	jmp sweetp
highj	ds 1
fallf	ds 1
clb	ds 1
delx	ds 1
dely	ds 1
bulls	ds 1

delit:
	cmp #0,clb
	beq ret
	sub #1,clb

	move.l scrad,a1
	move dely,d0
	mulu #32*40,d0
	move delx,d1
	add #1,d1
	lsl #2,d1
	add d1,d0
	and.l #$ffff,d0
	add.l d0,a1

	move #32,d0
dlelp
	clr.l (a1)
	clr.l plane(a1)
	clr.l plane*2(a1)
	clr.l plane*3(a1)

	add.l #40,a1
	subq #1,d0
	bne dlelp
	rts

getcofb
	move sptab+hoff+2,d0
	lsr #5,d0
	sub #1,d0
	move sptab+hoff+4,d1
	lsr #5,d1
	move d1,dely
	lsl #3,d1
	move d0,delx
	add d0,d1
	move scrn,d4
	move lev,d0
	mulu #10,d0
	sub d0,d4

	mulu #40,d4
	add d1,d4

	move lev,d1
	lsl #2,d1
	lea mapt,a1
	move.l 0(a1,d1),a0

	rts
objam	ds 1
objbuff ds 50*3					50 screens
lives	ds 1

dslives
	bsr prsworm
	move lives,d0
	cmp #10,d0
	blt okdl
	move #9,d0
okdl
	bsr prsnum
	rts

gameover
	move #999,scrn
	bsr drshap
	bsr bcop

	move.l #$100000,d0
paulp
	sub.l #1,d0
	bne paulp
	rts	

adum	ds 1

demo
	bsr stset
	move #-1,dem

	bsr drawsc
	bsr setspr
	move scrn,adum
	move #1000,scrn
	bsr drshap
	move adum,scrn
	bsr bcop
	clr dem

	move #0,screen
	bsr bsave
	move #1,screen
	bsr bsave

	clr togg
	move #180,enfra
	move #1,pawsam

palp1b	move screen,d0
	bsr setdisp
	bsr dstars
	bsr bload
	bsr movspr
	btst #7,joydat+1
	bne retet	

	sub #1,enfra
	beq out
	bsr negin
	cmp.b #13,d0
	beq out

	bsr bsave
	bsr dospr
	bsr pstars
	bsr pause
	eor #1,screen

	bra palp1b

out
	eor #1,screen
	bsr bload
	addq #1,scrn
	cmp #10,scrn
	beq add1tl
	cmp #20,scrn
	beq add1tl
	cmp #30,scrn
	beq add1tl
	cmp #40,scrn
	beq add1tl

	bra hehe
add1tl
	addq #1,lev
hehe
	cmp #maxsc,scrn
	blt oknclr
	clr scrn
	clr lev
oknclr
	bra demo
retet
	eor #1,screen
	bsr bload
	rts
prsworm
	move #31,d0
	lea spfil2+12+132*40,a0
	lea scea1+32+168*40,a1
	lea scea2+32+168*40,a2

ylp	move #2,d1
ylp1
	move plane(a0),plane(a1)
	move plane(a0),plane(a2)
	move plane*2(a0),plane*2(a1)
	move plane*2(a0),plane*2(a2)
	move plane*3(a0),plane*3(a1)
	move plane*3(a0),plane*3(a2)
	move (a0),(a1)+
	move (a0)+,(a2)+
	subq #1,d1
	bne ylp1
	add.l #36,a1
	add.l #36,a2
	add.l #36,a0
	subq #1,d0
	bne ylp
	rts
prsnum
	add #1001,d0
	cmp #1000,d0
	ble ret
	move scrn,adum
	move d0,scrn
	jsr drshap
	move adum,scrn

	lea scea1+32+169*40,a0
	lea scea2+32+169*40,a1
	move #26,d0
cplplp	move.l (a0),(a1)
	move.l plane(a0),plane(a1)
	move.l plane*2(a0),plane*2(a1)
	move.l plane*3(a0),plane*3(a1)
	add.l #40,a0
	add.l #40,a1

	subq #1,d0
	bne cplplp
	rts


shftd	ds 1
score	ds 3
clscore
	clr.l score
	clr score+4
	rts

addscore:
	and.b #7,d7
	beq ret

	move #3,d0
	lea score,a0
sclp1	move.b 0(a0,d0),d1
	add.b d7,d1
	cmp.b #10,d1
	blt pokinp
	sub.b #10,d1
	move.b d1,0(a0,d0)
	sub #1,d0
	bmi outit
	move.b #1,d7
	bra sclp1
pokinp
	move.b d1,0(a0,d0)
outit	

prscr

	clr shftd
	clr d0
	lea score,a0
prslpn
	move.b 0(a0,d0),d1
	and #$ff,d1
	lea yrdsc,a1
	move.b 0(a1,d1),d3
	and #$ff,d3

	mulu #40,d3
	add #22,d3
	and.l #$ffff,d3
	move.l d3,a2
	add.l #spfil2,a2				read from a2
*screen addresses
	lea scea1+171*40+10,a3				write to a3
	lea scea2+171*40+10,a4				write to a4
	move d0,d7
	and #%11110,d7
*	lsl #2,d7
	and.l #$ffff,d7
	add.l d7,a3
	add.l d7,a4

	cmp #0,shftd
	bne rhgtsd
	move.l #%11111110000000001111111000000000,d7
	bra pton
rhgtsd
	move.l #%11111110000000011111110,d7
pton
	move #11,d6
ptolp
	move plane(a2),d5
	swap d5
	move (a2),d5
	and.l d7,d5
	cmp #0,shftd
	bne oron
	move d5,plane(a3)
	move d5,plane(a4)
	swap d5
	move d5,(a3)
	move d5,(a4)
	jmp misbt
oron	or d5,plane(a3)
	or d5,plane(a4)
	swap d5
	or d5,(a3)
	or d5,(a4)

misbt
	move plane*3(a2),d5
	swap d5
	move plane*2(a2),d5
	and.l d7,d5
	cmp #0,shftd
	bne oron1
	move d5,plane*3(a3)
	move d5,plane*3(a4)
	swap d5
	move d5,plane*2(a3)
	move d5,plane*2(a4)
	jmp outolp
oron1
	or d5,plane*3(a3)
	or d5,plane*3(a4)
	swap d5
	or d5,plane*2(a3)
	or d5,plane*2(a4)
outolp
	add.l #40,a2
	add.l #40,a3
	add.l #40,a4
	subq #1,d6
	bne ptolp

	add #1,d0
	eor #1,shftd
	cmp #5,d0
	blt prslpn

	rts

yrdsc
	dc.b 81,93,105,117,129,141,153,165,177,189

worms	ds 1
clrworms
	lea scea1+171*40+16,a0
	lea scea2+171*40+16,a1

	move #13,d1
wclp2
	move #5,d0
wclp1
	clr plane(a0)
	clr plane(a1)
	clr plane*2(a0)
	clr plane*2(a1)
	clr plane*3(a0)
	clr plane*3(a1)
	clr (a0)+
	clr (a1)+
	subq #1,d0
	bne wclp1

	add.l #30,a0
	add.l #30,a1
	subq #1,d1
	bne wclp2
	rts

praw
prawl1
	move plane(a0),plane(a1)
	move plane(a0),plane(a2)
	move plane*2(a0),plane*2(a1)
	move plane*2(a0),plane*2(a2)
	move plane*3(a0),plane*3(a1)
	move plane*3(a0),plane*3(a2)
	move (a0),(a1)
	move (a0),(a2)

	add.l #40,a0
	add.l #40,a1
	add.l #40,a2 
	subq #1,d7
	bne prawl1
	rts
prworms
	bsr clrworms
	move worms,d0
	beq ret
	clr d1
prwlp
	lea spfil1+2+179*40,a0
	lea scea1+16+171*40,a1
	lea scea2+16+171*40,a2

	move d1,d2
	lsl #1,d2
	and.l #$ffff,d2
	add.l d2,a1
	add.l d2,a2

	move #13,d7
	jsr praw

	addq #1,d1
	subq #1,d0
	bne prwlp
	rts
sweetp
	move #16,d7
	lea scea1+4+40*174,a1
	lea scea2+4+40*174,a2
prawl1a
	move.l (a0),(a1)
	move.l (a0),(a2)
	move.l plane(a0),plane(a1)
	move.l plane(a0),plane(a2)
	move.l plane*2(a0),plane*2(a1)
	move.l plane*2(a0),plane*2(a2)
	move.l plane*3(a0),plane*3(a1)
	move.l plane*3(a0),plane*3(a2)

	add.l #40,a0
	add.l #40,a1
	add.l #40,a2 
	subq #1,d7
	bne prawl1a
	rts

clramo
	lea scea1+28+169*40,a0
	lea scea2+28+169*40,a1
	move #%1000000000111111,d0
	move #15,d1
clalp1
	and d0,(a0)
	and d0,(a1)
	add.l #40,a0
	add.l #40,a1
	subq #1,d1
	bne clalp1
	rts
setamo
	lea scea1+28+169*40,a0
	lea scea2+28+169*40,a1	
	move #%0010101010000000,d0
	move #%0101010101000000,d5
	move #15,d1
salp1
	or d0,(a0)
	or d5,(a1)
	add.l #40,a0
	add.l #40,a1
	subq #1,d1
	bne salp1
	rts

settime
	move #12,btime
	move #50,stime
	move #-1,tmask
	rts
dotime
	subq #1,stime
	bne ret
	move #50,stime
	lea scea1+14+186*40,a0
	lea scea2+14+186*40,a1
	move btime,d1
	move tmask,d0
	lsl #1,d0
	move d0,tmask

	move #10,d3
motmlp
	lea 0(a0,d1),a2
	lea 0(a1,d1),a3
	and d0,(a2)
	and d0,plane(a2)
	and d0,plane*2(a2)
	and d0,plane*3(a2)
	and d0,(a3)
	and d0,plane(a3)
	and d0,plane*2(a3)
	and d0,plane*3(a3)
	add.l #40,a0
	add.l #40,a1
	subq #1,d3
	bne motmlp

	cmp #4,btime
	bge nosnd1

	move #9,d0
	bsr note

nosnd1
	cmp #0,tmask
	beq nxback
	rts	
nxback
	sub #2,btime
	beq dead
	move #-1,tmask
	rts	
dead	clr lives
	move #-1,hitf
	rts
tmask	ds 1
btime	ds 1
stime	ds 1



worcolf	ds 5

clrwor
	clr.l worcolf
	clr.l worcolf+4
	clr worcolf+8
	rts

*hickey vs worm detection
woron	ds 1

hvwd
	move woron,d0
	beq ret

	lea sptab,a0

	move sptab+hoff+2,d1
	cmp 2(a0,d0),d1
	bne ret

	move sptab+hoff+4,d1
	move 4(a0,d0),d2
	sub #4,d2
	cmp d2,d1
	blt ret
	add #28,d2
	cmp d2,d1
	bge ret
	move #6,0(a0,d0)
	clr 6(a0,d0)
	clr woron
	move lljk,d1
	lea worcolf,a1
	move #-1,0(a1,d1)
	move #-1,reset
	rts
reset	ds 1
drest	cmp #-1,reset
	bne ret
	clr reset

	jsr settime

	lea worka+40*26,a0
	lea scea1+186*40,a1
	lea scea2+186*40,a2
cplplp2
	move plane(a0),plane(a1)
	move plane(a0),plane(a2)
	move plane*2(a0),plane*2(a1)
	move plane*2(a0),plane*2(a2)
	move plane*3(a0),plane*3(a1)
	move plane*3(a0),plane*3(a2)
	move (a0),(a1)+
	move (a0)+,(a2)+
	cmp.l #worka+39*40,a0
	blt cplplp2

	jsr dslives
	sub #1,worms
	jsr prworms
	move #3,d0
	bsr note
 	move.b #7,d7
	jsr addscore
	move.b #7,d7
	jsr addscore
	
	rts		

lljk	ds 1

chkenlv
	clr d0
	cmp #$20,door
	bne ret

	cmp #9,scrn
	beq serit
	cmp #19,scrn
	beq serit
	cmp #25,scrn
	beq serit
	cmp #30,scrn
	beq serit
	cmp #40,scrn
	beq engme
	rts
serit	not d0
	rts
engme
	move #1,d0
	rts

mapt
	dc.l maps+8,maps+408,maps1+8,maps1+408,maps2+8

blockt
	dc.l blocks,blocks,blocks1,blocks1,blocks2

bltabt
	dc.l bltab,bltab,bltab1,bltab1,bltab2


*** system bits ***
*** 12/5/87	***

	ifd cuts
gtsssc:
	lea plntab,a2
	move.l _gfxbase,a0
	add.l #$32,a0
	move.l (a0),a1
nxtinst	move (a1),d0
	move 2(a1),d1
	cmp.l #$fffffffe,(a1)+
	beq fincop
	move d0,d2
	and #$fff1,d2
	cmp #$00e0,d2
	bne nxtinst
	and #$f,d0
	move d1,0(a2,d0)
	bra nxtinst
fincop	rts
	
plntab:	ds.l 8
	endc			end of cut

	include	include/libraries/dos_lib.i	
	include	include/libraries/dos.i
	include	include/exec/exec_lib.i
	include	include/graphics/graphics_lib.i

os_up	move.l #dosnam,a1
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq quitfst
	move.l d0,_DOSBase
	nop
	move.l #grafnam,a1
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq quitfst
	move.l d0,_gfxbase

quitfst	rts


_DOSBase
	dc.l 0
_ExcBase
	dc.l 0			space for pointer
_gfxbase
	dc.l 0

dosnam	DOSNAME
grafnam	GRAFNAME

os_down:
	move.l _DOSBase,a1
	CALLEXEC CloseLibrary
	move.l _gfxbase,a1
	CALLEXEC CloseLibrary
	rts

set_sys	bsr os_up
	beq enditt
	bsr clrboth
	bsr takesys
	bsr setscrn
	move.l dspst,scrad
	bsr set_audio
	bsr setsond
enditt	rts

ret_sys	bsr givesys
	bsr os_down
	rts

clrboth:
	move #$1f3f,d0
	lea $78000,a0
	lea $70000,a1
clllop	clr.l (a0)+
	clr.l (a1)+
	dbra d0,clllop
	rts

takesys	lea custom,a6
*	move.l $70,oaudsto
*	move.l #audint,$70
	move.l $68,okeysto
	move.l #keyint,$68
	move.l $6c,ovblsto			wedge vbl interrupt
	move.l #vblint,$6c
	clr spr0ctl(a6)
*	move #$8080,intena(a6)
*	move #$0700,intena(a6)
	move #$00a0,dmacon(a6)
	rts

givesys	lea custom,a6
*	move.l oaudsto,$70
	move.l okeysto,$68
	move.l ovblsto,$6c
	move #$80a0,dmacon(a6)
	rts

okeysto	ds.l 1
ovblsto	ds.l 1

dub	dc.l 0

custom	equ $dff000
dmacon	equ $96
dmaconr	equ $2
intena	equ $9a
intenar	equ $1c
intreq	equ $9c
intreqr	equ $1e
cop1lch	equ $80
copjmp1	equ $88
bpl1pth	equ $e0
bpl2pth	equ $e4
bpl3pth	equ $e8
bpl4pth	equ $ec
bpl5pth	equ $f0
bpl6pth	equ $f4
bplcon0	equ $100
diwstrt	equ $8e
diwstop	equ $90
ddfstrt	equ $92
ddfstop	equ $94
color00	equ $180
bltapth	equ $50
bltbpth	equ $4c
bltcpth	equ $48
bltdpth	equ $54
bltamod	equ $64
bltbmod	equ $62
bltcmod	equ $60
bltdmod	equ $66
bltafwm	equ $44
bltalwm	equ $46
bltadat	equ $74
bltbdat	equ $72
bltcon0	equ $40
bltcon1	equ $42
bltsize	equ $58
joy1dat	equ $0c
aud0lch	equ $a0
aud0len	equ $a4
aud0per	equ $a6
aud0vol	equ $a8
adkcon	equ $9e
spr0ctl	equ $142


icre	equ $bfdd00
icro	equ $bfed01
sro	equ $bfec01
pra	equ $bfe001
Addra	equ $bfe301
Bddra	equ $bfd300
Aprb	equ $bfe101
Bprb	equ $bfd100
Apra	equ $bfe001
Bpra	equ $bfd000


negin:
	clr.l d0
	move.b ascii,d0
	beq enneg
	clr.l key
enneg:	rts

*	ifd cuts
getkey:
	bsr negin
	tst.l d0
	beq getkey
	rts
*	endc

keyint	movem.l d0-d7/a0-a6,-(a7)
	move.b sro,d0
	bsr keybrd
	move.b #$4c,sro
finkint	movem.l (a7)+,d0-d7/a0-a6
	move.l okeysto,-(a7)
	rts

	ifd cuts
audint	movem.l d0-d7/a0-a6,-(a7)
	lea custom,a6
	move #$0080,intreq(a6)
	subq #1,wakflg
	bpl finaint
	tst crowdflg
	bne finaint
**	move #$000f,dmacon(a6)
*	clr aud0vol(a6)
**	move #$0080,intena(a6)
finaint	movem.l (a7)+,d0-d7/a0-a6
	rte

wakflg:	dc.w -1
oaudsto:dc.l 0
crowdflg dc.w 0

coplst:	dc.w $ff01,$ff00

	dc.w $00e0,$0007
	dc.w $00e2,$0000

	dc.w $00e4,$0007
	dc.w $00e6,$1f40

	dc.w $00e8,$0007
	dc.w $00ea,$3e80

	dc.w $00ec,$0007
	dc.w $00ee,$5dc0

*	dc.w $009c,$8010
	dc.w $ffff,$fffe

copmem: equ $7fd28				$20000-$80

	endc			end of cuts

vblint	movem.l d0-d7/a0-a6,-(a7)
	lea custom,a6
	move intenar(a6),d0
	and intreqr(a6),d0
notcop	btst #5,d0
	beq finint
	addq #1,vblcou
	move.l dspst,d0
	move.l d0,bpl1pth(a6)
	add.l #plane,d0
	move.l d0,bpl2pth(a6)
	add.l #plane,d0
	move.l d0,bpl3pth(a6)
	add.l #plane,d0
	move.l d0,bpl4pth(a6)
	bsr vblwedge
	bsr souint
	bsr joyread
finint	movem.l (a7)+,d0-d7/a0-a6
	move.l ovblsto,-(a7)
	rts

vblcou	dc.w 0
dspst	dc.l $78000
*dspst2	dc.l $70000

waisinc:
	clr vblcou
wailop:	tst vblcou
	beq wailop
	rts

	ifd cuts
degcol	move #15,d6
	add.l #$22,a0
scollop	move -(a0),d0
	move d6,d1
	bsr setcol
	dbra d6,scollop
	rts
	endc

setscrn	lea custom,a6
	move #%0100001000000000,bplcon0(a6)
	move #$2c81,diwstrt(a6)
	move #$f4c1,diwstop(a6)
	move #$0038,ddfstrt(a6)
	move #$00d0,ddfstop(a6)
	move.l #screen1,scrst
	rts

setcol	
	movem.l d0-d1/a0/a6,-(sp)
	lea custom,a6			colour in d0,reg.no. in d1
	and #$f,d1
	lsl #1,d1
	lea coltabb,a0
	move d0,0(a0,d1)
	lsl #1,d0
	add #color00,d1
	move d0,0(a6,d1)
	movem.l (sp)+,d0-d1/a0/a6
	rts

coltabb:dc.l 16

	ifd cuts
swapo:
	move.l scrst,d4
	bchg #15,d4
	move.l scrst,dspst
	move.l d4,scrst
	bsr waisinc
	rts
	endc

waiblit	btst #14,dmaconr(a6)
	bne waiblit
	rts

joyread
	lea custom,a6
	clr d1
	move.b pra,d0			test button1
	btst #7,d0
	bne nobut
	bset #7,d1
nobut	move joy1dat(a6),d0		get raw joystick data
	btst #9,d0			left set?
	beq nolefj			no
	bset #2,d1			set left flag
	bchg #8,d0			(up = bit8 eor bit9 ) 
nolefj	btst #1,d0
	beq norigj
	bset #3,d1
	bchg #0,d0
norigj	btst #8,d0
	beq noupj
	bset #0,d1
noupj	btst #0,d0
	beq nodwnj
	bset #1,d1
nodwnj	move.b d1,joystk1
	rts

keybrd	ror.b #1,d0
	eor #$ff,d0
	lea kybrd,a5
	lea kytab,a4
	and #$ff,d0
	move.b d0,key+1
	btst #7,d0
	bne reld
	move.b #-1,0(a5,d0)
	move.b 0(a4,d0),ascii

noshft:	rts

reld	clr.l key
	and.b #$7f,d0
	clr.b 0(a5,d0)
	rts

key	dc.w 0
	dc.b 0
ascii	dc.b 0
	even
joydat	dc.b 0
joystk1	dc.b 0

j_up:	equ 0
j_down:	equ 1
j_left:	equ 2
j_right:equ 3

kytab	dc.b "~1234567890-=\",0,"0"
	dc.b "qwertyuiop[]",0,"123"
	dc.b "asdfghjkl;#",0,0,"456"
	dc.b 0,"zxcvbnm,./",0,0,"789"
	dc.b 32,8,0,13,13,27,127,0,0,0,0,0,0,0,0,0
	ds.b $40

kybrd	ds.b $80
keycurl	equ kybrd+$4e
keycurr	equ kybrd+$4f
shiftl	equ kybrd+$60
keyp	equ kybrd+$19
keyq	equ kybrd+$10
keyx	equ kybrd+$32
keyz	equ kybrd+$31
space	equ kybrd+$40
shiftr	equ kybrd+$61

load:
	move.l a6,tema6
	move.l a0,filenam		
	move.l d1,filepos
	move.l d0,filelen

	bsr open
	tst.l d0			error?
	beq lo_err1			yes
	bsr read
	bsr close
	move.l tema6,a6
	clr d0
	rts
lo_err:	bsr close
lo_err1: 
*	bsr dsk_err
	rts

tema6:	dc.l 0

open:
	move.l #1005,d2
open1:	move.l filenam,d1
	CALLDOS Open
	move.l d0,handel
	rts

read:
	move.l handel,d1
	move.l filepos,d2
	move.l filelen,d3
	CALLDOS Read
	rts

close:
	move.l handel,d1		'close' dos call	
	CALLDOS Close
	rts


filenam	ds.l 1
filepos	ds.l 1
filelen	ds.l 1
handel	ds.l 1
diskerr	ds.l 1


*** proto sprite with VSW ***
*** 14/5/87               ***

**vars	xpos,ypos
*    	wdth,heit
*	sprst,bacst,mskst

**How tis done

*  get bizz routine address
*1 get screen address
*2 get width+height+other addresses
*3 calc yadd

* input  d0=xcoord d1=ycoord
* d2=xlen   d3=ylen
* d4=control
* d5=sprlen
* a1=sprite address
* a2=background address

*output  none
*uses d0-d7,a0-a3/a5


sprite:
	add #4,d1
	move d2,d3
	move d1,d2
	move d4,d0
	move d5,d1
	sub a2,a2
	move d3,d5
	mulu d4,d5
	lsr #1,d5
	lsl #2,d2
	subq #1,d2
	move #0,d4
	move xshft,d7
	and #$7,d7
	cmp #3,d7
	bne nodb
	move #1,d4
nodb	cmp #1,d7
	bne nodb2
	and #$fff0,d0
nodb2
	move #$ffff,blitfwm
	move #$0,blitlwm
	move #0,spradd
	
	move d4,sprcont			save control word
	lsl #2,d4			calc jump to bizz routine
	move.l #bizz,a3
	and.l #$3f,d4
	add.l d4,a3
	move.l (a3),a3
	addq #1,d3

	move d3,-(a7)			get screen addr.
	bsr point
	move d1,shif
*	lea lwmasks,a5
*	lsl #1,d1
*	move 0(a5,d1),d1
*	and d1,blitlwm
	move (a7)+,d3

*	clr.l d6
*	move a2,d6
*	lsl #4,d6			get background position
*	add.l #bakgnd,d6
*	move.l d6,a2

	add #$10,d2
	lsr #3,d2			adjust xlen from pix to 2*long
	move #$29,d1			calc xadd
	sub d2,d1
	lsr #1,d2
	ext.l d5			convert sprlen
	lsl.l #1,d5

	lea custom,a6
	bsr waiblit
	jsr (a3)			here's the biz

ensprit	rts

	ifd cuts
blit_slide:
	lea custom,a6
	bsr waiblit 
	clr bltcon1(a6)
	move #%100111110000,bltcon0(a6)		D=A
	move #$ffff,bltafwm(a6)
	move #$ffff,bltalwm(a6)
	clr bltamod(a6)
	clr bltdmod(a6)
	lsl #6,d0
	or #$28,d0	
	move #3,d3
bsldlop:move.l a0,bltapth(a6)
	move.l a1,bltdpth(a6)
	move d0,bltsize(a6)
	add.l #plane,a0
	add.l #plane,a1
	bsr waiblit
	dbra d3,bsldlop
	rts
	endc

**bizz routines

nxpln1	bsr waiblit			*standard next plane
	add.l #plane,a0			move to next plane
	add.l #plane,a1			get next sprite plane
	move.l a1,bltbpth(a6)		set blitter
	move.l #maskbuf,bltapth(a6)
	move.l a0,bltdpth(a6)
	move.l a0,bltcpth(a6)
	move d3,bltsize(a6)		go!
	rts

nxpln2	bsr waiblit			*standard next plane
	add.l #plane,a0			move to next plane
	add.l #plane,a1			get next sprite plane
	move.l a1,bltapth(a6)		set blitter
	move.l #maskbuf,bltbpth(a6)
	move.l a0,bltdpth(a6)
	move.l a0,bltcpth(a6)
	move d3,bltsize(a6)		go!
	rts

blit_s1

*d1= screen mod
*d2= width  (words)
*d3= height (pixels)
*d6= 
*a0= screen addr
*a1= sprite addr

	move blitfwm,bltafwm(a6)
	move blitlwm,bltalwm(a6)
	move.l a1,bltbpth(a6)		A= mask
	move.l #maskbuf,bltapth(a6)	B= sprite
	move.l a0,bltcpth(a6)		C= screen
	move.l a0,bltdpth(a6)		D= screen
	move d1,bltdmod(a6)
	move d1,bltcmod(a6)			
	move d1,bltbmod(a6)
	clr bltamod(a6)
	clr bltcon1(a6)
	move shif,d0
	lsl #8,d0
	lsl #4,d0
	lsl #6,d3
	or d2,d3			returns Ashif   in d0
	rts				returns bltsize in d3



s_bkgnd
	move #$ffff,bltafwm(a6)
	move #$ffff,bltalwm(a6)
	move.l a0,bltapth(a6)		A=screen
	move.l a2,bltdpth(a6)		D=backg buffer
	move d1,bltamod(a6)		Amod=screen mod
	move d1,bltdmod(a6)		Dmod=sprite mod
	clr bltcon1(a6)
	move #%100111110000,bltcon0(a6)	D=A
	lsl #6,d3
	or d2,d3
*	move d3,bltsize(a6)		go!
*	bsr nxpln2
*	bsr nxpln2
*	bsr nxpln2
*	move.l a2,lstpln
	rts


maskon:
	movem.l d0-d7/a0-a6,-(a7)
	bsr s_bkgnd
	movem.l (a7)+,d0-d7/a0-a6
maskon1:movem.l d0-d7/a0-a6,-(a7)
	bsr waiblit
	bsr makfmsk
	movem.l (a7)+,d0-d7/a0-a6
	cmp #-1,xshft
	bne notest
	bsr tesshit                                                                                                                                                                                                                               
notest	bsr waiblit
	bsr blit_s1
	move d0,bltcon1(a6)
	or #%111111001010,d0		D=BandAorCand(notA)
	move d0,bltcon0(a6)
	move d3,bltsize(a6)		go!
	bsr nxpln1
	bsr nxpln1
	bsr nxpln1
	rts

makfmsk:
	move.l a1,d0
	move.l #maskbuf,bltdpth(a6)
	move.l d0,bltapth(a6)
	add.l #plane,d0
	move.l d0,bltbpth(a6)
	add.l #plane,d0
	move.l d0,bltcpth(a6)
	move d1,bltamod(a6)
	move d1,bltbmod(a6)
	move d1,bltcmod(a6)
	clr bltdmod(a6)
	clr bltcon1(a6)
	move #%0000111111111110,bltcon0(a6)	D=AorBorC
	move #$ffff,bltafwm(a6)
	move #$0,bltalwm(a6)
	lsl #6,d3
	or d2,d3
	move d3,bltsize(a6)

	bsr waiblit
	add.l #plane,d0
	move.l d0,bltapth(a6)
	move.l #maskbuf,bltbpth(a6)
	clr bltbmod(a6)
	move.l #maskbuf,bltdpth(a6)
	move #%0000110111111100,bltcon0(a6)	D=AorB
	move d3,bltsize(a6)
	rts

tesshit:
	clr hitf
	movem.l d0-d7/a0-a6,-(a7)
	move #%0000110111000000,d7
	move #%0000111100001000,d6
	lea maskbuf+$200,a5
	bsr waiblit
	clr bltalwm(a6)
	bsr mkbmsk1
	bsr waiblit
	clr bltamod(a6)
	clr bltbmod(a6)
	move.l #maskbuf,bltapth(a6)
	move.l #maskbuf+$200,bltbpth(a6)
	move #%110011000000,bltcon0(a6)
	move d3,bltsize(a6)
	bsr waiblit
	move dmaconr(a6),d0
	btst #13,d0
	ifd killo
	seq hitf
	endc
	movem.l (a7)+,d0-d7/a0-a6     
	rts                                                                                                                                                                                                                          

maskbk:
	movem.l d0-d7/a0-a6,-(a7)
	bsr s_bkgnd
	movem.l (a7)+,d0-d7/a0-a6
	movem.l d0-d7/a0-a6,-(a7)
	bsr waiblit
	bsr makbmsk
	movem.l (a7)+,d0-d7/a0-a6                                                                                                                                                                                                                               
	bsr waiblit

	move blitfwm,bltafwm(a6)
	move blitlwm,bltalwm(a6)
	move.l a1,bltapth(a6)		b= mask
	move.l #maskbuf,bltbpth(a6)	a= sprite
	move.l a0,bltcpth(a6)		C= screen
	move.l a0,bltdpth(a6)		D= screen
	move d1,bltdmod(a6)
	move d1,bltcmod(a6)			
	move d1,bltamod(a6)
	clr bltbmod(a6)
	clr bltcon1(a6)
	move shif,d0
	lsl #8,d0
	lsl #4,d0
	lsl #6,d3
	or d2,d3

	clr bltalwm(a6)
	clr bltcon1(a6)
	or #%111110111000,d0		D=(notB)andAorCandB
	move d0,bltcon0(a6)
	move d3,bltsize(a6)		go!
	bsr nxpln2
	bsr nxpln2
	bsr nxpln2
	rts

makbmsk:
	move #%0000110111111100,d7
	move #%0000111111111110,d6
	lea maskbuf,a5
	move #$ffff,bltalwm(a6)
mkbmsk1:move.l a0,d0
	move.l a5,bltdpth(a6)
	move.l d0,bltapth(a6)
	add.l #plane,d0
	move.l d0,bltbpth(a6)
	add.l #plane,d0
	move.l d0,bltcpth(a6)
	move d1,bltamod(a6)
	move d1,bltbmod(a6)
	move d1,bltcmod(a6)
	clr bltdmod(a6)
	clr bltcon1(a6)
	move d6,bltcon0(a6)			D=AorBorC
	move #$ffff,bltafwm(a6)
	lsl #6,d3
	or d2,d3
	move d3,bltsize(a6)

	bsr waiblit
	add.l #plane,d0
	move.l d0,bltapth(a6)
	move.l a5,bltbpth(a6)
	clr bltbmod(a6)
	move.l a5,bltdpth(a6)
	move d7,bltcon0(a6)			D=not(AorB)
	move d3,bltsize(a6)
	rts


spradd	ds.w 1
shif	ds.w 1

blitfwm	dc.w $ffff
blitlwm	dc.w $ffff

sprcont ds.w 1

bizz	dc.l maskon
	dc.l maskbk
	dc.l maskbk
	dc.l maskbk
	dc.l maskbk
	dc.l maskbk

*bakgnd	equ $24000

maskbuf	equ $20000				*$43000

point	clr.l d3
	move d1,d3
	lsl #2,d3
	add d1,d3
	lsl #3,d3
	move.l d3,a0
	move d0,d1
	and #$f,d1
	lsr #3,d0
	and #$fffe,d0
	add d0,a0
	add.l scrad,a0
	rts

scrst	dc.l $78000
plane	equ $1f40

color	equ custom+color00

set_audio:
	move #$40,d0			put data in DMA memory
	lea s_wavepos,a0
	lea sinedata,a1
smovlop	move (a1)+,(a0)+
	dbra d0,smovlop

	move #2,d7			set channels 0-2 to sine wave
	lea custom,a6
saudlop	move.l #s_wavepos,aud0lch(a6)
	move #s_wavelen,aud0len(a6)
	clr aud0vol(a6)
	add.l #$10,a6
	dbra d7,saudlop

	move.l #n_wavepos,aud0lch(a6)	set channel 3 to white noise
	move #n_wavelen,aud0len(a6)
	clr aud0vol(a6)

	lea custom,a6
	move #$00ff,adkcon(a6)		turn off modulation
	move #$800f,dmacon(a6)		turn on audio DMA
	rts

s_wavepos equ $1ff00
n_wavepos equ s_wavepos+8
s_wavelen equ 4
n_wavelen equ $30

sinedata
	dc.b 0,90,127,90,0,-90,-127,-90

noisedata
	dc.l $5e276ab5,$d426b919,$1b91bbba,$c77841b9
	dc.l $26ac7834,$285d341b,$ad5c8340,$d785f1a1
	dc.l $af1af0f0,$e3427af2,$850e4287,$936d87af
	dc.l $0e5f286b,$e5e436ca,$1a1ca1cb,$cbd87941
	dc.l $c936bd79,$34285e34,$1cbd6c93,$50d6d785
	dc.l $f1a1af1a,$f0f0e342,$7af2850e,$4287936d

*** sound routines ***
*** 18/5/87	   ***

soufile	dc.b "soudata.bin",0
showlen	equ 384

setsond:
	lea soufile,a0
	move.l #soutab,d1
	move.l #$2D0,d0
	bsr load
	rts

souint	movem.l d0-d7/a0-a6,-(a7)
	move #6,d1
	lea soudat,a0
intlop	tst 0(a0,d1)
	beq nosou
	bmi  intenv
	subq #1,0(a0,d1)
	bne nosou
souoff	move d1,d0
	lsr #1,d0
	clr am_vol
	bsr am_sou

nosou
	subq #2,d1
	bpl intlop
	bsr rotem
	movem.l (a7)+,d0-d7/a0-a6
	rts

rotem:
	lea n_wavepos,a0
	moveq #$2f,d0
rotlop:	ror (a0)
	add #$1480,(a0)+
	dbra d0,rotlop
	rts


intenv	move d1,d2
	lsl #3,d2
	lea envtab,a1
	move 18(a0,d2),d3
	lea 0(a1,d3),a1
	move 16(a0,d2),d3

	move 16(a1,d3),d0			adj freq
	add d0,22(a0,d2)
	btst #1,(a1)
	beq nostep
	move.b 6(a1),d0
	and.b #$f,22(a0,d2)
	or.b d0,22(a0,d2)
nostep	move 22(a0,d2),d0
	move d0,am_freq

	move 24(a1,d3),d0			adj vol
	add 24(a0,d2),d0
	bpl volok
	btst #0,(a1)
	beq volok
	btst #15,24(a1,d3)
	seq d0
	ext.w d0
	and #$7fff,d0
volok	move d0,24(a0,d2)
	lsr #8,d0
	lsr #3,d0
	and #$f,d0
	move d0,am_vol
	move d1,d0
	lsr #1,d0
	bsr am_sou

	subq #1,20(a0,d2)			do timer
	bne nosou
	addq #2,16(a0,d2)
	move 10(a1,d3),20(a0,d2)
	cmp #6,d3
	bne nosou
	clr 0(a0,d1)
	bra souoff

note:
	move.b #2,soutab+53
	lsl #3,d0
	lea soutab,a0
	lea soudat,a1
	move 0(a0,d0),d1
	move d1,d2
	lsl #1,d1
	move 6(a0,d0),0(a1,d1)			timer

	move 2(a0,d0),am_freq			frequency

	move.b 5(a0,d0),d3			volume
	ext.w d3
	move d3,am_vol
	tst.b 4(a0,d0)
	beq ensou

setenv	lea envtab,a3
*	subq #1,d1
	clr d3
	move #$8000,0(a1,d1)
	lsl #3,d1
	move.b 4(a0,d0),d3
	subq #1,d3
	lsl #5,d3
	clr 16(a1,d1)
	move d3,18(a1,d1)
	move 8(a3,d3),20(a1,d1)
	move 2(a0,d0),d4
	lsl #4,d4
	move d4,22(a1,d1)
	move 6(a0,d0),12(a3,d3)
	move.b 2(a0,d0),d4
	lsl.b #4,d4
	move.b d4,6(a3,d3)			set permanent step

	clr 24(a1,d1)
	move.b 5(a0,d0),d0
	lsl #3,d0
	move.b d0,24(a1,d1)

ensou	move d2,d0
	bsr am_sou
	rts

am_sou:
	tst.b d0			noise on channel 3
	bne chan_ok
	move am_freq,d0
	lsr #4,d0
	move d0,am_freq
	moveq #3,d0
chan_ok:
	lsl #4,d0
	and #$30,d0
	lea custom,a6
	lea (a6,d0),a6
	move am_vol,d0
	sub #7,d0
	bpl zott
	clr d0
zott	lsl #3,d0
	move d0,aud0vol(a6)
	move am_freq,d0
	and #$7fff,d0
	lsr #2,d0
	move d0,aud0per(a6)
	rts

am_vol	dc.w 0
am_freq	dc.w 0


soudat	dc.w 0,0,0,0				timers

	dc.w 0,0,0,0				unused

envproc	dc.w 0,0,0,0,0,0,0,0			envelope data
	dc.w 0,0,0,0,0,0,0,0
	dc.w 0,0,0,0,0,0,0,0
	dc.w 0,0,0,0,0,0,0,0

soutab:	ds.b $300
envtab:	equ soutab+10*8

***eof

