numpics:	equ	10
iea:	equ	$fffa07
ieb:	equ	$fffa09
isra:	equ	$fffa0f
ima:	equ	$fffa13
tbcr:	equ	$fffa1b
tbdr:	equ	$fffa21
vbl_vec:	equ	$70
key_vec:	equ	$118
hbl_vec:	equ	$120
magic:		equ	1650
numstars:	equ	12
speed:		equ	350
zclip:		equ	100
*	sound stuff	*
soundstarth:	equ	2
soundstartm:	equ	4
soundstartl:	equ	6
soundendh:	equ	$e
soundendm:	equ	$10
soundendl:	equ	$12
soundmode:	equ	$20
sounddma:	equ	0


start:
	clr.l   -(SP)           ;Go into supervisor mode
        move.w  #$20,-(SP)
        trap    #1
        addq.l  #6,SP
        move.l  D0,savesup
	dc.w	$a00a

	lea	palsave,a0
	move.l	#$ff8240,a1
	rept	8
	move.l	(a1)+,(a0)+
	endr

	move.w	#4,-(sp)
	trap	#14
	addq.l	#2,sp
	move.w	d0,ressave

	move.w	#0,-(sp)	;set to low res
	move.l	#-1,-(sp)
	move.l	#-1,-(sp)
	move.w	#5,-(sp)
	trap	#14
	add.l	#12,sp
	jsr	getscrn

	bsr	putsounds
	move.l	#picstart,d0
	add.l	#512,d0
	and.w	#%1111111100000000,d0		;make sure of boundry
	move.l	d0,picadd

	lea	pic1,a0
	lea	palettes,a1
	moveq	#numpics-1,d7
	lea	pallist,a2
cpals:
	add.l	#32000,a0
	move.l	a1,(a2)+
	bsr	copypals
	dbf	d7,cpals

	move.l	picadd,a1
	lea	pic1,a0
	lea	piclist,a2
	moveq	#numpics-1,d7
cscl:
	move.l	a1,(a2)+
	bsr	copyscreen
	add.l	#19104,a0
	dbf	d7,cscl

mainloop:
	lea	piclist,a0
	lea	pallist,a1
	move.w	frcount,d0
	asl.w	#2,d0
	move.l	(a0,d0.w),d1	;get pic add
	move.l	(a1,d0.w),d2	;get pic add
	tst.l	d1
	bpl.s	picok
	move.w	#0,frcount
	bra	mainloop
picok:
	move.l	d1,picadd
	addq.w	#1,frcount
interlace:
	move.l	d2,-(sp)
	move.l	d1,-(sp)
	move.l	d2,-(sp)
	move.l	d1,-(sp)
	move.w	#1,-(sp)
	jsr	show512
	add.l	#18,sp
	jsr	keyboard
	bra	mainloop


frcount:	dc.w	0
picadd:		dc.l	0
copyscreen:
	move	#7999,d0
cspl:
	move.l	(a0)+,(a1)+
	dbf	d0,cspl
	rts
copypals:
	move	#4776-1,d0
cpal:
	move.l	(a0)+,(a1)+
	dbf	d0,cpal
	rts

*********************************************
putsounds:
	move.w	#$7ff,$ff8924
settreb:
	cmpi.w	#$7ff,$ff8924
	bne	settreb
	move.w	#%0000010010001100,d0		;010 for treb vol
	move.w	d0,$ff8922			;send data
setbass:
	cmpi.w	#$7ff,$ff8924
	bne	setbass
	move.w	#%0000010001000110,d0		;010 for treb vol
	move.w	d0,$ff8922			;send data
	move.l	#sound,d0
	move.l	#sounde,d1
*****************************************
*	new sound chip stuff		*
*	pass sound start in d0		*
*	and sound end in d1		*
*****************************************
dosound:
	lea	$ff8900,a0	;sound register base address
	move.w	#0,sounddma(a0)
	move.w	d0,soundstartl(a0)
	lsr.l	#8,d0
	move.w	d0,soundstartm(a0)
	lsr.l	#8,d0
	move.w	d0,soundstarth(a0)
	move.w	d1,soundendl(a0)
	lsr.l	#8,d1
	move.w	d1,soundendm(a0)
	lsr.l	#8,d1
	move.w	d1,soundendh(a0)
	move.w	#%0000000010000001,soundmode(a0)
	move.w	#%0000000000000011,sounddma(a0)
dsback:
	rts


show512:
	MOVEM.L D3-D7/A3-A6,-(A7)	;save regs
	LEA     thisis26a,A6
	ST      $0001(A6)		;set true
	TST.W   $0028(A7)		;was it turn off ?
	BEQ     restoreeverything	;yep

	TST.B   (A6)		;is the vbl and mouse already fixed
	BNE	alreadyin	;yep

	MOVE.W  #2,-(A7)		;get screen physical
	TRAP    #14
	ADDQ.L  #2,A7			;stack cleanup
	MOVE.L  D0,$000C(A6)		;save screen address
	PEA     mousecommand1		;turn mouse off $12
	CLR.W   -(A7)			;length-1
	MOVE.W  #$0019,-(A7)		;send string to int keyboard
	TRAP    #14
	ADDQ.L  #8,A7			;clean stack

	MOVE.B  43(A7),$0002(A6)
	MOVE.B  44(A7),$0003(A6)
	MOVE.L  46(A7),$0004(A6)
	MOVE.B  51(A7),otherscreen1
	MOVE.B  52(A7),otherscreen2
	move.l	54(a7),otherpalette

	PEA	setup512vbl
	MOVE.W  #$0026,-(A7)		;execute in supervisor mode
	TRAP    #$E
	ADDQ.L  #6,A7			;clean stack
	BRA.S   skipalready
alreadyin:
	MOVE.B  $002B(A7),$0002(A6)
	MOVE.B  $002C(A7),$0003(A6)
	MOVE.L  $002E(A7),$0004(A6)
	MOVE.B  51(A7),otherscreen1
	MOVE.B  52(A7),otherscreen2
	move.l	54(a7),otherpalette

skipalready:
	TST.B   $0001(A6)
	BNE.S   skipalready
	BRA	exit

*	Turn off 512 color display	*
restoreeverything:
	TST.B	(A6)		;hadn't been started so no restore
	BEQ	exit
	PEA	restorethings
	MOVE.W	#$0026,-(A7)		;execute in supervisor
	TRAP	#14
	ADDQ.L  #6,A7			;clean stack

restorescreen:
	MOVE.W	#-1,-(A7)		;ignore res
	MOVE.L	$000C(A6),-(A7)		;put saved physbase
	MOVE.L	#-1,-(A7)		;ignore logical
	MOVE.W	#5,-(A7)		;set screen
	TRAP	#14
	LEA	$000C(A7),A7

	PEA	mousecommand2		;08 re-enable mouse
	CLR.W   -(A7)			;length-1
	MOVE.W  #$0019,-(A7)		;int keyboard sen
	TRAP    #14
	ADDQ.L  #8,A7			;clean stack
	SF      (A6)			;back to original state
exit:
	MOVEM.L (A7)+,D3-D7/A3-A6	;restore regs and return
	RTS


setup512vbl:
	LEA	$00FF8240,A0		;color reg 0
	LEA	savecolors,A1
	MOVE.W  #$000F,D7
savecoloop:
	MOVE.W  (A0)+,(A1)+
	dbf	D7,savecoloop

	LEA     $FF8260,A0		;shift mode
	LEA	shiftsave,A1
	MOVE.B  (A0),(A1)		;save the shift mode
	CLR.B   (A0)			;set to low res

	LEA	vblsave,A0
	move.l  $000004CE,(A0)		;vbl que save
	move.b	$ff820a,d7
	btst	#1,d7
	bne	ispal
	LEA     my512vbl,A0
	MOVE.L  A0,$000004CE		;address of my vbl rout
	RTS
ispal:
	LEA     my512vblpal,A0
	MOVE.L  A0,$000004CE		;address of my vbl rout
	RTS

restorethings:
	MOVE.L	vblsave,$000004CE	;restore old vbl
	MOVE.B	shiftsave,$00FF8260	;restore old shift mode
	LEA	$00FF8240,A0		;color 0
	LEA	savecolors,A1
	MOVE.W	#$000F,D7
restorecoloop:
	MOVE.W	(A1)+,(A0)+
	DBF	D7,restorecoloop
	RTS
my512vblpal:
	TST.W   $0000043E	;do nothing if disk activity
	BNE     thisis268
	MOVE    SR,-(A7)	;save the sr
	ORI     #$0700,SR
	LEA     thisis26a,A0
	MOVE.B  $0002(A0),$00FF8201	;vidbasehi
	MOVE.B  $0003(A0),$00FF8203	;"   "  lo
	TST.B   (A0)
	BEQ     thisis246
	LEA     $00FF8240,A4	;color 0
	LEA     $00FF8209,A5	;vid address counter low
	LEA     thisis174p,A6
	MOVE.L	thisis272,A3
	LEA     $0020(A3),A3
	MOVE.W  #196,D7
	CLR.L   D0
waitloopp:
	TST.B   (A5)
	BEQ.S   waitloopp

	MOVE.B  (A5),D0
	adda.l	d0,a6
	JMP     (A6)
thisis174p:
	rept	120
	nop
	endr
colloop1p:
	nop
	NOP
	LEA     (A4),A0
	LEA     (A4),A1
	LEA     (A4),A2
	rept	8
	MOVE.L  (A3)+,(A0)+
	endr
	rept	8
	MOVE.L  (A3)+,(A1)+
	endr
	rept	8
	MOVE.L  (A3)+,(A2)+
	endr
	DBF     D7,colloop1p
	nop
	LEA     (A4),A0
	LEA     (A4),A1
	LEA     (A4),A2
	lea	4608(a3),a3
	rept	8
	MOVE.L  (A3)+,(A0)+
	endr
	rept	8
	MOVE.L  (A3)+,(A1)+
	endr
	rept	8
	MOVE.L  (A3)+,(A2)+
	endr
	LEA     (A4),A0
	LEA     (A4),A1
	LEA     (A4),A2
	lea	-$4a60(A3),A4
	NOP
	NOP
	nop
	rept	8
	MOVE.L  (A3)+,(A0)+
	endr
	rept	8
	MOVE.L  (A3)+,(A1)+
	endr
	rept	8
	MOVE.L  (A4)+,(A2)+
	endr
	LEA     thisis26a,A6
	ST      (A6)
	SF      $0001(A6)
	MOVE.L  $0004(A6),$0008(A6)
	MOVE    (A7)+,SR		;restore the sr
	RTS

my512vbl:
	TST.W   $0000043E	;flock, why I don't know
	BNE     thisis268
	MOVE    SR,-(A7)	;save the sr
	ORI     #$0700,SR
	LEA     thisis26a,A0
	MOVE.B  $0002(A0),$00FF8201	;vidbasehi
	MOVE.B  $0003(A0),$00FF8203	;"   "  lo
	TST.B   (A0)
	BEQ     thisis246
	LEA     $00FF8240,A4	;color 0
	LEA     $00FF8209,A5	;vid address counter low
	LEA     thisis174,A6
	MOVE.L thisis272,A3
	LEA     $0020(A3),A3
	move.w	#196,d7
	CLR.L   D0
waitloop:
	TST.B   (A5)
	BEQ.S   waitloop

	MOVE.B  (A5),D0
	CMP.B   #$18,D0
	BHI     thisis246
	ADDA.L  D0,A6
	JMP     (A6)
thisis174:
	rept	12
	NOP
	endr
	MOVE.W  #$0018,D0
waitloop2:
	NOP
	DBF     D0,waitloop2
colloop1:
	NOP
	LEA     (A4),A0
	LEA     (A4),A1
	LEA     (A4),A2
	rept	8
	MOVE.L  (A3)+,(A0)+
	endr
	rept	8
	MOVE.L  (A3)+,(A1)+
	endr
	rept	8
	MOVE.L  (A3)+,(A2)+
	endr
	DBF     D7,colloop1

	LEA     (A4),A0
	LEA     (A4),A1
	LEA     (A4),A2
	lea	4608(a3),a3
	rept	8
	MOVE.L  (A3)+,(A0)+
	endr
	rept	8
	MOVE.L  (A3)+,(A1)+
	endr
	rept	8
	MOVE.L  (A3)+,(A2)+
	endr
	LEA     (A4),A0
	LEA     (A4),A1
	LEA     (A4),A2
	lea	-$4a60(A3),A4
	NOP
	NOP
	rept	8
	MOVE.L  (A3)+,(A0)+
	endr
	rept	8
	MOVE.L  (A3)+,(A1)+
	endr
	rept	8
	MOVE.L  (A4)+,(A2)+
	endr
thisis246:
	LEA     thisis26a,A6
	ST      (A6)
	SF      $0001(A6)
	MOVE.L  $0004(A6),$0008(A6)

	MOVE    (A7)+,SR		;restore the sr
thisis268:
	RTS
save:	dc.l	0
thisis26a:
	ds.l	2
thisis272:
	ds.l	2
vblsave:
	ds.l	1
savecolors:
	ds.w	16
otherpalette:	dc.l	0
mousecommand1:
	dc.b    $12
mousecommand2:
	dc.b	08
shiftsave:
	dc.b	0
otherscreen1:	dc.b	0
otherscreen2:	dc.b	0
	even
delay:	dc.l	0
****************************************
keyboard:
        move.w  #$ff,-(sp)
        move.w  #6,-(sp)
        trap    #1
        addq.l  #4,sp
        tst.l   d0
        beq     keyback
        swap    d0
quit:   cmpi.w  #$10,d0
        bne     space
        bra     gem
space:
	cmpi.w	#$39,d0
	bne	keyback
	bra	pause
keyback:rts

cldelay:	dc.w	-1
rcldelay:	dc.w	-0
wx:		dc.w	0
wy:		dc.w	0
wz:		dc.w	0
proz:		dc.w	0
*****************************
pause:  
        move.w  #$ff,-(sp)
        move.w  #6,-(sp)
        trap    #1
        addq.l  #4,sp
        tst.l   d0
        beq     pause
        swap    d0
        cmpi.w  #$1e,d0
        bne     keyback 
        bsr     gkey
        cmpi.w  #$32,d0
        bne     keyback
        bsr     gkey
        cmpi.w  #$1e,d0
        bne     keyback
        bsr     gkey
        cmpi.w  #$31,d0
        bne     keyback
        bsr     gkey
        cmpi.w  #$20,d0
        bne     keyback
        bsr     gkey
        cmpi.w  #$1e,d0
        bne     keyback
*	move.w	#1,cheat
	rts

gkey:
        move.w  #$ff,-(sp)
        move.w  #6,-(sp)
        trap    #1
        addq.l  #4,sp
        tst.l   d0
        beq     gkey
        swap    d0
        rts

***********************************
mydocolors:
	move.l	#$ff8240,a1
	moveq	#15,d0
mdcloop:
	move.w	(a0)+,(a1)+
	dbf	d0,mdcloop
	rts

************get screen address***************
getscrn:move.w  #2,-(sp)
        trap    #14
        addq.l  #2,sp
        move.l  d0,screen
*	subi.l	#$9000,d0
        move.l  d0,screen1
        move.l  d0,screen2
        subi.l  #$8000,screen2
        move.l  screen1,seen
        move.l  screen2,hiden
	move.l	screen2,screen3
	subi.l	#$8000,screen3
	rts
screen1:	dc.l	0
screen2:	dc.l	0
screen3:	dc.l	0
seen:	dc.l	0
hiden:	dc.l	0
screen:	dc.l	0


beamer:
	move.l	#$ff8205,a0
	moveq	#0,d0
	move.b	(a0),d0
	asl.l	#8,d0
	adda.w	#2,a0
	move.b	(a0),d0
	asl.l	#8,d0
	adda.w	#2,a0
	move.b	(a0),d0
	move.l	d0,a0
	move.w	#0,(a0)
	rts
flip_scr:
	move.l	seen,d1
	move.l	d1,d2
	add.l	#4000,d1
	add.l	#18000,d2
skloop:
	move.l	#$ff8205,a0
	moveq	#0,d0
	move.b	(a0),d0
	asl.l	#8,d0
	addq.l	#2,a0
	move.b	(a0),d0
	asl.l	#8,d0
	addq.l	#2,a0
	move.b	(a0),d0
	cmp.l	d1,d0
	blt.s	skloop
	cmp.l	d2,d0
	bgt.s	skloop
        move.l  seen,A6
        move.l  hiden,seen
        move.l  A6,hiden
	move.b	seen+1,$ff8201
	move.b	seen+2,$ff8203
	rts

******************************************
*               RETURN TO GEM
gem:
	move.w	#0,$ff8900
	move.w	#0,-(sp)
	jsr	show512
	addq.w	#2,sp

*	move.b	#%11111110,$ff820a
	move.l	#$ff8240,a0
	lea	palsave,a1
	moveq	#15,d7
rspl:
	move.w	(a1)+,d0
	and.w	#$0777,d0
	move.w	d0,(a0)+
	dbf	d7,rspl


        move.w  ressave,-(sp)
        move.l  screen,-(sp)
        move.l  screen,-(sp)
        move.w  #5,-(sp)
        trap    #14
        add.l  #12,sp

	move.l  savesup,-(SP)    ;Back to user mode
        move.w  #$20,-(SP)
        trap    #1
        addq.l  #6,SP
illegal
	clr.w	-(sp)
	trap	#1

rvsave:	dc.l	0
resave:	dc.l	0

myreset:
	rts

	even
*mypal:
	dc.w	$0000,$000D,$0116,$0226,$033E,$0447,$0557,$0EEF
	dc.w	$0999,$0AAA,$0BBB,$0444,$0555,$0666,$0EEE,$0FFF



savesup:	dc.l	0
ressave:	dc.w	0
filename:	dc.l	0
bluepalette:
		ds.w	16
palsave:	ds.w	16
palsave2:	ds.w	16
piclist:	dc.l	pic1,pic2,pic3,pic4,pic5,pic6,pic7,pic8
		dc.l	pic9,pic10,-1
pallist:	ds.l	numpics
		dc.l	-1
sound:
*	incbin	'samp2.spl'
	ds.b	100
sounde:


picstart:
	ds.b	3000

pic1:
	incbin	'full1.spu'
pic2:
	incbin	'full2.spu'
pic3:
	incbin	'full3.spu'
pic4:
	incbin	'full4.spu'
pic5:
	incbin	'full5.spu'
pic6:
	incbin	'full6.spu'
pic7:
	incbin	'full7.spu'
pic8:
	incbin	'full8.spu'
pic9:
	incbin	'full9.spu'
pic10:
	incbin	'full10.spu'
	section	bss
palettes:
	ds.b	19104*numpics
