********************************************
** PROTECTED REPLAY EXAMPLE		  **
**					  **
** (C) 1992 DAVID COUNTER (MATRIX/LSD)	  **
********************************************

********************************************
** SYSTEM EQUATES AND CHIP RAM ASSIGNMENT **
********************************************

	SECTION	Matrix1,CODE_C

execbase	= 4
trap0		= $80
openlibrary	= -552
closelibrary	= -414

********************************************
** INITIALISATION AND START ROUTINES      **
********************************************

start	movem.l	d0-d7/a0-a6,-(sp)
	move.l	#start2,trap0
	trap	#0
	movem.l	(sp)+,d0-d7/a0-a6
	moveq.l	#0,d0
	rts

start2	bsr.s	systemsetup
	bsr	pt_init
	bsr	initcopper
	bsr	mainloop
	bsr	restoreos
	bsr	pt_end
	rte

********************************************
** STORE REGISTERS AND SET NEW CONTENTS   **
********************************************

systemsetup
	move.l	(execbase).w,a6
	lea	gfxname,a1
	moveq.l	#0,d0
	jsr	openlibrary(a6)
	move.l	d0,gfxbase
	lea	$dff000,a6
	bset	#1,$bfe001
	clr.l	$0
	move.w	$1c(a6),intesave
	or.w	#$8000,intesave
	move.w	$1e(a6),intrsave
	or.w	#$8000,intrsave
	move.w	$2(a6),dmasave
	or.w	#$8000,dmasave
	move.w	$10(a6),adksave
	or.w	#$8000,adksave
sswbeam	move.l	$4(a6),d0
	and.l	#$1ff00,d0
	lsr.l	#8,d0
	cmpi.w	#305,d0
	bne.s	sswbeam
	move.w	#$7fff,$96(a6)
	move.w	#$87e0,$96(a6)
	move.w	#$7fff,$9a(a6)
	move.w	#$c000,$9a(a6)
	rts

********************************************
** SWITCH ON THE COPPER START ADDRESS     **
********************************************

initcopper
	move.l	#newcopper,$80(a6)
	move.w	$88(a6),d0
	rts

********************************************
** RESTORE THE SAVED DMA/INTERRUPT        **
** REGISTERS AND THE STANDARD COPPER LIST **
********************************************

restoreos
	move.w	intesave,$9a(a6)
	move.w	intrsave,$9c(a6)
	move.w	dmasave,$96(a6)
	move.w	adksave,$9e(a6)
	move.l	gfxbase,a0
	move.l	38(a0),$80(a6)
	move.w	$88(a6),d0
	move.l	(execbase).w,a6
	move.l	gfxbase,a1
	jsr	closelibrary(a6)
	rts

********************************************
** THE MAIN PROGRAM LOOP                  **
********************************************

wait macro
waitlp\@
	move.l	$4(a6),d0
	and.l	#$1ff00,d0
	lsr.l	#8,d0
	cmpi.w	#\1,d0
	bne.s	waitlp\@
 endm

mainloop
	move.l	$4(a6),d0
	and.l	#$1ff00,d0
	lsr.l	#8,d0
	cmpi.w	#$50,d0
	bne.s	mainloop

 move.w #$f00,$180(a6)
	bsr	pt_music
	lea	$dff000,a6
 move.w #$f0f,$180(a6)

	wait	256
	btst	#6,$bfe001
	bne.s	mainloop
	rts

	include "module-protectorv1.0:source-codes/replayers/protected_replay.s"
	even

********************************************
** THE PROGRAMS USER-DEFINED COPPERLIST   **
********************************************

newcopper
	dc.w $120,$0,$122,$0,$124,$0,$126,$0
	dc.w $128,$0,$12a,$0,$12c,$0,$12e,$0
	dc.w $130,$0,$132,$0,$134,$0,$136,$0
	dc.w $138,$0,$13a,$0,$13c,$0,$13e,$0
	dc.w $108,$0,$10a,$0
	dc.w $92,$38,$94,$d0
	dc.w $8e,$1a64,$90,$39d1
	dc.w $180,$0,$102,$0,$104,$0
	dc.w $100,$0
	dc.w $5001,$fffe,$180,$fff
	dc.w $5101,$fffe,$180,$0
	dc.w $6001,$fffe,$180,$fff
	dc.w $6101,$fffe,$180,$0
	dc.w $7001,$fffe,$180,$fff
	dc.w $7101,$fffe,$180,$0
	dc.w $8001,$fffe,$180,$fff
	dc.w $8101,$fffe,$180,$0
	dc.w $9001,$fffe,$180,$fff
	dc.w $9101,$fffe,$180,$0
	dc.w $a001,$fffe,$180,$fff
	dc.w $a101,$fffe,$180,$0
	dc.w $b001,$fffe,$180,$fff
	dc.w $b101,$fffe,$180,$0
	dc.w $c001,$fffe,$180,$fff
	dc.w $c101,$fffe,$180,$0
	dc.w $d001,$fffe,$180,$fff
	dc.w $d101,$fffe,$180,$0
	dc.w $e001,$fffe,$180,$fff
	dc.w $e101,$fffe,$180,$0
	dc.w $ffff,$fffe

********************************************
** PROGRAM STORAGE AREA, USED FOR STORES  **
** FLAGS, COUNTERS ETC			  **
** AND ANY INCLUDE BINARY DIRECTIVES      **
********************************************

gfxname		dc.b	"graphics.library",0
gfxbase		dc.l	0
intesave	dc.w	0
intrsave	dc.w	0
dmasave		dc.w	0
adksave		dc.w	0
	even
pt_data 	incbin  ;** Put the name of you module here **

	end
