;Shadow of the beast demo
;	- scrolling differentiel sur 13 plans hardware sur STE
;	- overscan bas
;	- 12.5Khz soundtrack
; DATA 22/09/92

;	incdir	a:\macros\
	
	TEXT

	include	gemdos.s
	include	xbios.s
;	include	stk_play.s

	SETBLOCK	#pile
	tst.l	d0
	bne.s	error		
	MALLOC	#64000
	move.l	d0,img_alloc
	beq.s	error

	GETREZ
	move	d0,-(sp)
	LOGBASE
	move.l	d0,-(sp)
	move.l	d0,-(sp)
	move	#5,-(sp)
	SETSCREEN	#-1,#-1,#0
	SUPEXEC	#go
	VSYNC
	trap	#14
	lea	12(sp),sp

	MFREE	img_alloc
error	PTERM0
	
go	;SOUNDTRACK_INIT	#module,#1
	DEVCONNECT	#0,#4,#0,#7,#1

	move	#$2700,sr

	move	$ffff820a.w,-(sp)
	move.l	$120.w,-(sp)
	move.l	$70.w,-(sp)

	lea	$fffffa00.w,a0
	movem.l	(a0)+,d0-d7
	movem.l	d0-d7,-(sp)
	lea	$ffff8240.w,a0
	movem.l	(a0)+,d0-d7
	movem.l	d0-d7,-(sp)
	lea	$ffff8240.w,a0
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+
	clr.l	(a0)+

	move.b	#2,$ffff820a.w
	clr.l	$fffffa06.w

	lea	image+34,a1

	move.l	img_alloc,a0
	lea	$ffff8a20.w,a2
	move.l	#$00020000,(a2)+
	move.l	a1,(a2)+
	move.l	#$ffffffff,(a2)+
	clr	(a2)+
	move.l	#$000200a0,(a2)+
	move.l	a0,(a2)+
	move.l	#$005100c8,(a2)+
	move.l	#$0203c000,(a2)+

	lea	160(a0),a0
	lea	$ffff8a20.w,a2
	move.l	#$00020000,(a2)+
	move.l	a1,(a2)+
	move.l	#$ffffffff,(a2)+
	clr	(a2)+
	move.l	#$000200a0,(a2)+
	move.l	a0,(a2)+
	move.l	#$005100c8,(a2)+
	move.l	#$0203c000,(a2)+

	lea	-160(a0),a2
	lea	buffer,a0
	moveq	#12,d0
bcls	move.l	a2,a1	
	add.l	4(a0),a1
	move.l	a1,(a0)	
	add.l	#16,a0
	dbra	d0,bcls

	bset	#0,$fffffa0b.w
	bset	#0,$fffffa13.w
	move.b	#8,$fffffa1b.w
	move.b	#1,$fffffa21.w
	bclr	#0,$fffffa07.w

	move.l	#vbl2,$70.w
	move.l	#timerb,$120.w
	move.l	#text,texpos
	move.l	#font_buf,screx
	clr	hsc
	clr	lwd
	stop	#$2300

attente	cmp.b	#$39,$fffffc02.w
	bne.s	attente
	
	move	#$2700,sr
	lea	$ffff8260.w,a0
	movem.l	(sp)+,d0-d7
	movem.l	d0-d7,-(a0)
	lea	$fffffa20.w,a0
	movem.l	(sp)+,d0-d7
	movem.l	d0-d7,-(a0)

	move.l	(sp)+,$70.w
	move.l	(sp)+,$120.w
	move	(sp)+,$ffff820a.w
	
	clr	$ffff8900.w
	clr.b	$ffff820f.w
	clr.b	$ffff8265.w

vide	btst.b	#0,$fffffc00.w
	beq.s	fin
	move.b	$fffffc02.w,d0
	bra.s	vide
fin	rts

;	R‚glage timer B
		
vbl2	move	#198,d0
	bset	#0,$fffffa07.w
	rte

timerb	dbra	d0,fintb
	move.l	#vbl,$70.w
	bclr	#0,$fffffa07.w
fintb	bclr	#0,$fffffa0f.w
	rte

;	VBL

vbl	;move	#$642,$ffff8240.w

	lea	coul1,a0
	not	flag
	bne.s	coull1
	lea	coul2,a0

;	Scrolling	d0,d7,a5,a6

coull1	lea	buffer,a5
	moveq	#4,d0
scroll0	
	move	12(a5),d7
	sub	14(a5),d7
	bpl.s	suite10
	add	#320*16,d7
suite10	move	d7,12(a5)

	lsr	#5,d7
	and	#$fff8,d7
	move	d7,8(a5)
	
	move.b	#$4c,11(a5)
	move	12(a5),d7
	lsr	#4,d7
	and	#15,d7
	move.b	d7,10(a5)
	bne.s	suite20
	move.b	#$50,11(a5)
suite20
	move.l	img_alloc,a6	
	add	8(a5),a6
	add.l	4(a5),a6
	move.l	a6,(a5)
	add.l	#16,a5
	dbra	d0,scroll0

	cmp.b	#$4d,$fffffc02.w
	bne	gauche
	lea	buffer+5*16,a5
	moveq	#7,d0
scroll	
	move	12(a5),d7
	add	14(a5),d7
	cmp	#320*16,d7
	bcs.s	suite1
	sub	#320*16,d7
suite1	move	d7,12(a5)

	lsr	#5,d7
	and	#$fff8,d7
	move	d7,8(a5)
	
	move.b	#$4c,11(a5)
	move	12(a5),d7
	lsr	#4,d7
	and	#15,d7
	move.b	d7,10(a5)
	bne.s	suite2
	move.b	#$50,11(a5)
suite2
	move.l	img_alloc,a6	
	add	8(a5),a6
	add.l	4(a5),a6
	move.l	a6,(a5)
	add.l	#16,a5
	dbra	d0,scroll
	
gauche	cmp.b	#$4b,$fffffc02.w
	bne.s	go_ste
	lea	buffer+5*16,a5
	moveq	#7,d0
scroll1	
	move	12(a5),d7
	sub	14(a5),d7
	bpl.s	suite12
	add	#320*16,d7
suite12	move	d7,12(a5)

	lsr	#5,d7
	and	#$fff8,d7
	move	d7,8(a5)
	
	move.b	#$4c,11(a5)
	move	12(a5),d7
	lsr	#4,d7
	and	#15,d7
	move.b	d7,10(a5)
	bne.s	suite22
	move.b	#$50,11(a5)
suite22
	move.l	img_alloc,a6	
	add	8(a5),a6
	add.l	4(a5),a6
	move.l	a6,(a5)
	add.l	#16,a5
	dbra	d0,scroll1

;	Timer B start

go_ste	lea	buffer,a4
	move.l	#ro2,$120.w
	move.b	#4,$fffffa21.w
			
	lea	$ffff8200.w,a6
	move.l	#$0fff0777,$42(a6)
	move.l	#$0eee0666,$46(a6)
	move.l	#$0ddd0555,$4a(a6)
	move	(a0)+,$4e(a6)

	move.l	(a4),d7
	movep.l	d7,$03(a6)
	move.b	10(a4),$65(a6)
	move.b	11(a4),$0f(a6)
	moveq	#4,d0
	lea	16(a4),a1
	move.l	(a1),d1
	bset	#0,$fffffa07.w

	;SOUNDTRACK_PLAY	#2,#49,#250

;	Scrolltext

	lea	font_buf,a4
	move.l	a4,screx
	move	pos,d7

	addq	#4,d7
	cmp.b	#32,d7
	bcs.s	ne
	add	#1,texpos+2
	
ne	and	#31,d7
	move	d7,d3
	and	#$fff0,d3
	lsr	#1,d3
	add	d3,screx+2
	move	d7,d3
	move.b	#4,lwd
	and	#15,d3
	bne.s	ne2
	move.b	#8,lwd
ne2	move.b	d3,hsc

	move.l	texpos,a5
	move	d7,pos
	moveq	#10,d6
	
print	move.b	(a5),d7
	bne.s	suite
	lea	text,a5
	move.l	a5,texpos
	moveq	#32,d7
suite	sub	#32,d7
	lsl	#8,d7
	add	d7,d7
	lea	fonte,a2
	add	d7,a2
	
;	lea	$ffff8a20.w,a3
;	move.l	#$00020000,(a3)+
;	move.l	a2,(a3)+
;	move.l	#$ffffffff,(a3)+
;	clr	(a3)+
;	move.l	#$000200a0,(a3)+
;	move.l	a4,(a3)+
;	move.l	#$00090020,(a3)+
;	move	#$0203,(a3)+
;	move	#$8000,(a3)
;waitbltscrex	tas	(a3)
;	bmi.s	waitbltscrex
;	lea	16(a4),a4

	move.l	a4,a3
	moveq	#31,d5
blty	move.l	(a2)+,(a4)+
	move.l	(a2)+,(a4)+
	move.l	(a2)+,(a4)+
	move.l	(a2)+,(a4)+
	add	#160,a4
	dbra	d5,blty
	lea	16(a3),a4

	addq	#1,a5
	dbra	d6,print

	clr	$ffff8240.w

	rte

screx	dc.l	0
texpos	dc.l	0
pos	dc.w	0
lwd	dc.w	0
hsc	dc.w	0

text	dcb.b	10,32
	dc.b	"HELLO GUYS !!! IT IS DATA ON THE 6301, "
	dc.b	"AND I'M TYPING THIS FUCKING TEXT. YOU "
	dc.b	"MUST KNOW THAT EVEN IF I HAVEN'T DONE "
	dc.b	"A MEGADEMO, I KNOW CODING ON STE. "
	dc.b	"THE FALCON ARRIVES SOON, AND I'M "
	dc.b	"ANXIOUSLY WAITING FOR HIM. I'VE CODED "
	dc.b	"ON IT FOR SOME HOURS IN OUR CP, AND "
	dc.b	"THE FIRST THING I CAN SAY IS THAT THIS "
	dc.b	"MACHINE IS WELL FINISHED, AND HIS CAPABI"
	dc.b	"LITIES LOOK GREAT !!! I HOPE THIS MACHINE "
	dc.b	"WILL HAVE A SUCCESS, BECAUSE IT IS VERY "
	dc.b	"INTERESTING TO CODE ON A NEW MACHINE "
	dc.b	"THAT NOBODY KNOWS... FOR EXAMPLE, THE "
	dc.b	"SHIFTER CAN PRODUCE THE TYPE OF DISPLAY "
	dc.b	"YOU WANT, AS FULL OVERSCAN, INTERLACE, "
	dc.b	"TRUE COLOR 16 BITS, AND MUCH MORE THINGS "
	dc.b	"!!! HOPE TO SEE YOU SOON !       "
	dc.b	"LET'S WRAP NOW !!"
	
	dcb.b	10,32
	dc.w	0

;	1-19

ro2	move	(a0)+,$ffff824e.w
	dbra	d0,sro2
	move.l	a0,save
	move.l	#ro3,$120.w
sro2	bclr	#0,$fffffa0f.w
	rte

;	20

ro3	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	10(a1),$65(a0)
	move.b	11(a1),$0f(a0)
	move.l	save,a0
	move	(a0)+,$ffff824e.w
	move.l	#ro4,$120.w
	moveq	#8,d0
	lea	16(a1),a1
	move.l	(a1),d1
	bclr	#0,$fffffa0f.w
	rte

;	21-59

ro4	move	(a0)+,$ffff824e.w
	dbra	d0,sro4
	move.l	a0,save
	move.l	#ro5,$120.w
sro4	bclr	#0,$fffffa0f.w
	rte

;	60

ro5	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	10(a1),$65(a0)
	move.b	11(a1),$0f(a0)
	move.l	save,a0
	move	(a0)+,$ffff824e.w
	move.l	#ro6,$120.w
	moveq	#3,d0
	lea	16(a1),a1
	move.l	(a1),d1
	bclr	#0,$fffffa0f.w
	rte

;	61-79

ro6	move	(a0)+,$ffff824e.w
	dbra	d0,sro6
	move.l	a0,save
	move.l	#ro7,$120.w
sro6	bclr	#0,$fffffa0f.w
	rte

;	80

ro7	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	10(a1),$65(a0)
	move.b	11(a1),$0f(a0)
	move.l	save,a0
	move	(a0)+,$ffff824e.w
	move.l	#ro8,$120.w
	moveq	#1,d0
	lea	16(a1),a1
	move.l	(a1),d1
	bclr	#0,$fffffa0f.w
	rte

;	81-91

ro8	move	(a0)+,$ffff824e.w
	dbra	d0,sro8
	move.l	a0,save
	move.l	#ro9,$120.w
sro8	bclr	#0,$fffffa0f.w
	rte

;	92

ro9	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	10(a1),$65(a0)
	move.b	11(a1),$0f(a0)
	move.l	save,a0
	move	(a0)+,$ffff824e.w
	move.l	#ro10,$120.w
	moveq	#0,d0
	lea	16(a1),a1
	move.l	(a1),d1
	bclr	#0,$fffffa0f.w
	rte

;	93-99

ro10	move	(a0)+,$ffff824e.w
	dbra	d0,sro10
	move.l	a0,save
	move.l	#ro11,$120.w
sro10	bclr	#0,$fffffa0f.w
	rte

;	100

ro11	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	10(a1),$65(a0)
	move.b	11(a1),$0f(a0)
	move.l	#$0fed0765,$ffff8242.w
	move.l	#$0edc0654,$ffff8246.w
	move.l	#$0dcb0543,$ffff824a.w
	move.l	save,a0
	move	(a0)+,$ffff824e.w
	move.l	#ro12,$120.w
	moveq	#16,d0
	lea	16(a1),a1
	move.l	(a1),d1
	bclr	#0,$fffffa0f.w
	rte

;	101-171

ro12	move	(a0)+,$ffff824e.w
	dbra	d0,sro12
	move.l	#ro13,$120.w
sro12	bclr	#0,$fffffa0f.w
	rte

;	172

ro13	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	10(a1),$65(a0)
	move.b	11(a1),$0f(a0)
	move.l	#$005000d0,$ffff8242.w
	move.l	#$006000e0,$ffff8246.w
	move.l	#$007000f0,$ffff824a.w
	move.l	#ro14,$120.w
	lea	16(a1),a1
	move.l	(a1),d1
	bclr	#0,$fffffa0f.w
	moveq	#4,d0
	rte
		
;	176,180,184,188,192,196

ro14	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	10(a1),$65(a0)
	move.b	11(a1),$0f(a0)
	lea	16(a1),a1
	move.l	(a1),d1
	dbra	d0,fin_ro14
	move	#287,d0
bouclew	dbra	d0,bouclew
	clr.b	$0a(a0)
	dcb.w	8,$4e71
	move.b	#2,$0a(a0)
	move.l	#ro15,$120.w
	move.l	screx,d1
	move.b	#1,$fffffa21.w
	clr.b	$ffff8265.w
fin_ro14	bclr	#0,$fffffa0f.w
	rte

ro15	move.l	#$00000888,$ffff8240.w
	move.l	#$01230999,$ffff8244.w
	move.l	#$02220aaa,$ffff8248.w
	move.l	#$03330bbb,$ffff824c.w
	move.l	#$04440ccc,$ffff8250.w
	move.l	#$05550ddd,$ffff8254.w
	move.l	#$06660eee,$ffff8258.w
	move.l	#$07770fff,$ffff825c.w

	moveq	#5,d0
wait15	dbra	d0,wait15
	lea	$ffff8200.w,a0
	movep.l	d1,$03(a0)
	move.b	hsc,$65(a0)
	move.b	lwd,$0f(a0)
	add	#176,d1
	bclr	#0,$fffffa0f.w
	bclr	#0,$fffffa07.w
	rte

	DATA

	;include	stk_tabs.s

buffer	dc.l	$00000000,320*000,$00000050,$00000010
	dc.l	$00000000,320*021,$00000050,$00000008
	dc.l	$00000000,320*061,$00000050,$00000006
	dc.l	$00000000,320*081,$00000050,$00000004
	dc.l	$00000000,320*093,$00000050,$00000003

	dc.l	$00000000,320*101,$00000050,$00000010
	dc.l	$00000000,320*173,$00000050,$00000030
	dc.l	$00000000,320*177,$00000050,$00000040
	dc.l	$00000000,320*181,$00000050,$00000050
	dc.l	$00000000,320*185,$00000050,$00000060
	dc.l	$00000000,320*189,$00000050,$00000070
	dc.l	$00000000,320*193,$00000050,$00000080
	dc.l	$00000000,320*197,$00000050,$00000090
		
coul2	dc.w	$0ff
coul1	dc.w	$0ff,$8ff,$8ff,$1ff,$1ff,$9ff,$9ff,$2ff
	dc.w	$2ff,$aff,$aff,$3ff,$3ff,$bff,$bff,$4ff
	dc.w	$4ff,$cff,$cff,$5ff,$5ff,$dff,$dff,$6ff
	dc.w	$6ff,$eff,$eff,$7ff,$7ff,$fff,$fff,$f7f
	dc.w	$f7f,$fef,$fef,$f6f,$f6f,$fdf,$fdf,$f5f
	dc.w	$f5f,$fcf,$fcf,$f4f,$f4f

fonte	;incbin	fonte.bin
image	incbin	beast.pi1
module	;incbin	rebels.mod

	BSS
	
save	ds.l	1
img_alloc	ds.l	1
flag	ds.w	1
font_buf	ds.l	176*32

	ds.l	512
pile	ds.l	1