; RESET TECsoft'S demo by WILD COPPER  in 1988

RESET=$6a000
waittof=-$10e
OpenLib=-$228
Read=-42
Open=-30
Close=-36
O_RDONLY=$3ed
MEMF_CHIP=$2
AllocMem=-$0c6
zizicsize=30674
palette=$40000		;adresse des couleurs.
palette1=$41000
nb=1                    ;nbr. de VB avant de schtroumpfer.	
funzel=17		;nb de VB avant clignotement.
ecdebpl1=$20d20
ecdebpl2=$23520
lgbitmap=4600-40
ecfin=ecdebpl1+lgbitmap
ecfin2=ecdebpl2+lgbitmap
adrcopper=$43000
L1=$30
L2=L1+80
max=480
min=320


start:
         move.l   4,a6
         clr	d0
         lea      gfxlib,a1
         jsr      OpenLib(a6)
        move.l	d0,gfxbase
	 move.l   d0,a6

         move.l   4,a6
         clr	d0
         lea      doslib,a1
         jsr      OpenLib(a6)
        move.l	d0,dosbase
	 move.l   d0,a6
	
**** 
pr_MsgPort=92
sm_ArgList=36
wa_Lock=0

	sub.l	a1,a1	
;callsys findtask
	move.l	4.w,a6
	jsr	-$126(a6)
	move.l	d0,a4
	
	lea	pr_MsgPort(a4),a0
;callsys waitport
	move.l	4.w,a6
	jsr	-$180(a6)

	lea	pr_MsgPort(a4),a0
;callsys GetMsg
	move.l	4.w,a6
	jsr	-$174(a6)
	
	move.l	d0,a2
	move.l	sm_ArgList(a2),d0
	
	move.l	d0,a0
	move.l	wa_Lock(a0),d1	
;	callsys	currentdir			
	move.l	dosbase,a6
	jsr	-$60(a6)			

*******
	move.l	dosbase,a6

         move.l   #zizicname,d1
         move.l   #O_RDONLY,d2
         jsr      Open(a6)
         move.l   d0,d1
         move.l   d0,d4   
         move.l   zizicptr,d2
         move.l   #zizicsize,d3
         jsr      Read(a6)
         move.l   d4,d1
         jsr      Close(a6)

         move.l   #picname,d1
         move.l   #O_RDONLY,d2
         jsr      Open(a6)
         move.l   d0,d1
         move.l   d0,d4
         move.l   picptr,d2
         move.l   #108,d3
         jsr      Read(a6)
         move.l   d4,d1
         move.l   picptr,d2
         move.l   #10240,d3
         jsr      Read(a6)
         move.l   d4,d1
         move.l   picptr,d2
         add.l	  #10240,d2	
         move.l   #10240,d3
         jsr      Read(a6)
         move.l   d4,d1
         jsr      Close(a6)
	
	move.l	#vecteur,$80
	trap	#0	
vecteur:
	move	#$7fff,$dff09a	

         move.l   4,a6       ;pt exex.lib
         move.l   #RESET,a0   ;adresse de MON reset
         move.l   a0,$2a(a6)   ;COLDCAPTURE
   
         lea      $22(a6),a1   ;ChkSum (uword) des 24 mots precedents
         clr.w    d0      ;utilise pour le cheksum
         move.w   #$17,d1      ;compteur (->24 fois)
chksum:  add.w    (a1)+,d0   
         dbf      d1,chksum
         not.w    d0      ;on inverse tout!
         move.w   d0,(a1)      ; d0==>ChkSum

         lea      prg,a0
         lea      RESET,a1
   
         move.w   #prgsize/2-1,d0   
zoupla:  move.w   (a0)+,(a1)+
         dbf      d0,zoupla

	move.l	gfxbase,a0
	move.l	34(a0),a0
	move.l	(a0),a0
	move.l	36(a0),a0
	move.l	4(a0),a0
	move.l	8(a0),WBmap1
	move.l	12(a0),WBmap2
	
	move.l	WBmap1,a1
	move.l	picptr,a0	
	add.l	#197*40,a0
	move	#[20*[256-197]]-1,d0
ooloop:	move	(a0)+,(a1)+		
	dbf	d0,ooloop

	move.l	WBmap2,a1
	move.l	picptr,a0	
	add.l	#[256+197]*40,a0
	move	#[20*[256-197]]-1,d0
ooloop1:
	move	(a0)+,(a1)+		
	dbf	d0,ooloop1

	move.l	WBmap2,a0
	add.l	#128*40,a0
	move.l	a0,WBmap3
	move.l	#$0001fffe,(A0)+
	move.l	#$00960020,(a0)+
	move.l	#$01040024,(A0)+
	move.l	#$01020000,(A0)+
	move.l	#$01080000,(A0)+
	move.l	#$010a0000,(A0)+
	move.l	#$01002200,(A0)+
	move.l	#$008e2c81,(A0)+
	move.l	#$0090f4c1,(A0)+
	move.l	#$00920038,(A0)+
	move.l	#$009400d0,(A0)+
	move.l	#$01800000,(A0)+
	move.l	a0,chg_color
	move.l	#$01820f00,(A0)+
	move.l	#$01840f00,(A0)+
	move.l	#$01860000,(A0)+
	move.l	#$01880000,(A0)+
	move.l	#$2c01fffe,(A0)+

	move.l	WBmap1,d0
	swap	d0
	move	#$00e0,(A0)+
	move	d0,(A0)+
	swap	d0
	move	#$00e2,(A0)+
	move	d0,(A0)+
	
	move.l	WBmap2,d0
	swap	d0
	move	#$00e4,(A0)+
	move	d0,(A0)+
	swap	d0
	move	#$00e6,(A0)+
	move	d0,(A0)+	

	move.l	#$6701fffe,(A0)+
	move.l	#$01000200,(A0)+
	move.l	#$fffffffe,(A0)+	

	move.l	WBMAP3,$dff080
	move	#1,$dff084

	move.l	#bouclesanfin,$6c	
	move	#$c020,$dff09a
	move	#$000f,$dff096
la_oui:	bra.s	la_oui

bouclesanfin:
		
	move.l	a0,-(sp)
	sub	#1,compt_irq
	bne.s	av_old_irq	

	move	#25,compt_irq
	move.l	chg_color,a0
	tst	2(a0)
	bne.s	red
	move	#$0f00,2(A0)
	bra.s	av_old_irq	
red:
	move	#$0000,2(A0)
av_old_irq:
	move.l	(sp)+,a0
old_irq:
	move	#$20,$dff09c
	rte

compt_irq:	dc.w	25		
chg_color:	dc.l	0
WBmap1:		dc.l	0
WBmap2:		dc.l	0
WBmap3:		dc.l	0

prg:     move.w	  #$7a0,$dff096
         movem.l  d0-d7/a0-a6,-(sp)  
         move.l   4,a6       ;pt exex.lib
         move.l   #RESET,a0   ;adresse de MON reset
         move.l   a0,$2a(a6)   ;COLDCAPTURE
   
         lea      $22(a6),a1   ;ChkSum (uword) des 24 mots precedents
         clr.w    d0      ;utilise pour le cheksum
         move.w   #$17,d1      ;compteur (->24 fois)
toto:    add.w    (a1)+,d0   
         dbf      d1,toto
         not.w    d0      ;on inverse tout!
         move.w   d0,(a1)      ; d0==>ChkSum
   
      move.l   picptr(pc),a0
      move.l   a0,a1
      add.l    #10240,a1
      lea      $20000,a2
      lea      $22800,a3
      move.w   #5119,d0
rvb:  move.w   (a0)+,(a2)+
      move.w   (a1)+,(a3)+
      dbf      d0,rvb

	move.w	#150,d0
	lea	$50000,a0
jklp:	
	move.w	#$7fff,(a0)+
	move.w	#37,d1
notclear:
	move.w	#$ffff,(a0)+
	dbf	d1,notclear
	move.w	#$fffe,(a0)+
	dbf	d0,jklp
	
        lea      palette1,a0
	move.l	a0,a1	
	lea	palette,a2	
	lea	add(pc),a5
	
continue:
	move.w	(a5)+,d0
	cmp.w	#$ffff,d0
	beq	c_est_fini
	
	move.w	d0,d1
	sub.w   d1,d1
	
	move.w	#12,d2
re:	add.w	d0,d1
	move.w	d1,(a0)+
	move.w	d1,(a2)+
	move.w	d1,(a2)+
	dbf	d2,re

	move.w	#12,d2
re1:	sub.w	d0,d1
	move.w	d1,(a0)+
	move.w	d1,(a2)+
	move.w	d1,(a2)+
	dbf	d2,re1

	bra	continue
	
add:	dc.w	$001,$101,$100,$110,$010,$011,$111,$ffff

c_est_fini:

   	sub.l	a1,a0
	lea	long1(pc),a1
	lea	long(pc),a3
	sub.l	#2,a0
	move.l	a0,(a1)
	move.l	a0,d0
	lsl.l	#1,d0
	move.l	d0,(a3)	

	jsr	make_copper(pc)
         move.l  #adrcopper,$dff080

         lea      prgfin(pc),a0
         move.l   a0,$dff0a0
         move.w   #zizicsize/2,$dff0a4
         move.w   #min,$dff0a6
         move.w   #127,$dff0a8
         move.l   a0,$dff0b0      
         move.w   #zizicsize/2,$dff0b4
         move.w   #min,$dff0b6
         move.w   #127,$dff0b8
         move.l   a0,$dff0c0      
         move.w   #zizicsize/2,$dff0c4
         move.w   #min,$dff0c6
         move.w   #127,$dff0c8
         move.l   a0,$dff0d0      
         move.w   #zizicsize/2,$dff0d4
         move.w   #min,$dff0d6
         move.w   #127,$dff0d8

         move.w   #$838f,$dff096      ;audio + copper + bitmap enable
	 move.w	  #$0020,$dff096      ;sprites disable	
    	 move.w	  #$dff088,d0         ;copjmp1	


	 lea	saved1(pc),a5	
	 lea	saved0(pc),a4	

         move.w   #min,(a4)
	 move.w	  #1,(a5)	

	 lea	 savea6(pc),a0
	 lea	 zig(pc),a1
         move.l	 a1,(a0)
	 lea	 compt(pc),a0
	 move.w	 #funzel,(a0)	

ici:     lea	saved1(pc),a5	
	 lea	saved0(pc),a4	

         move.w   saved0(pc),d0
	 move.w	  saved1(pc),d1

         move.w   d0,$dff0a6
         move.w   d0,$dff0b6
         move.w   d0,$dff0c6
         move.w   d0,$dff0d6   

         add.w    d1,d0
   
         cmp.w    #max,d0
         bne      hop
         neg      d1
hop:     cmp.w    #min,d0
         bne      zoup
         neg      d1
zoup:    move.w   d0,(a4)
         move.w   d1,(a5)

Enc:
      move.l  data(pc),a0
      move.w  #2,d2
      move.w  #L2-L1-1,d7
      move.l  long(pc),d0		
      move.l  long1(pc),d5
      add.l   #palette1,d5 				
      lea     palette,a1
      add.l   d0,a1

	move.l	savea2(pc),a2
	move.l	savea3(pc),a3
	move.l	savea4(pc),a4
	move.l	savea5(pc),a5
        move.l	savea6(pc),a6	


rolcolor:
      
      move.w   (a2)+,0(a0,d2.w)
      addq.w    #4,d2
      move.w   (a3)+,0(a0,d2.w)
      addq.w    #4,d2
      move.w   (a4)+,0(a0,d2.w)
      addq.w    #4,d2
      move.w   (a5)+,0(a0,d2.w)
      addq.w    #4,d2
	move.w	(a6)+,d3
	move.w	d3,d4
	lsl.w	#4,d4
	add.w	d4,d3
      move.w   d3,0(a0,d2.w)	
      add.w    #8,d2

      move.l	a0,-(sp)	
      lea	zigend(pc),a0	
      cmp.l	a0,a6
      bls	ok
      lea	zig(pc),a6			 		
ok:   move.l	(sp)+,a0
       cmp.l	a1,a2
      bls	ok1
      lea       palette,a2   
ok1:  cmp.l	a1,a3
      bls	ok2
      lea       palette,a3   
ok2:  cmp.l	d5,a4
      bls	ok3
      lea       palette1,a4   
ok3:  cmp.l	a1,a5
      bls	ok4
      lea       palette,a5   

ok4:   dbf      d7,rolcolor

	move.l	savea6(pc),a6
	move.l	savea2(pc),a2
	move.l	savea3(pc),a3
	move.l	savea4(pc),a4
	move.l	savea5(pc),a5

	move.w	ral(pc),d6
	subq.w	#1,d6
	bne	cont
	move.w	#nb,d6

	add.l	#2,a6
cont:   lea	ral(pc),a0
	move.w	d6,(a0)
        sub.l	#2,a2
	add.l	#2,a3
	add.l	#4,a4
	add.l	#2,a5	      

      lea	zigend(pc),a0	
      cmp.l	a0,a6
      bls	okw
      lea	zig(pc),a6			 		
okw:  cmp.l	a1,a3
      bls	okw1
      lea       palette,a3   
okw1: cmp.l	d5,a4
      bls	okw2
      lea       palette1,a4   
okw2: cmp.l	#palette,a2
      bhi	okw3
      move.l    a1,a2   
okw3: cmp.l	a1,a5
      bls	okw4
      lea      palette,a5   

okw4: lea	savea2(pc),a0		
      move.l	a2,(a0)
      lea	savea3(pc),a0		
      move.l	a3,(a0)
      lea	savea4(pc),a0		
      move.l	a4,(a0)
      lea	savea5(pc),a0		
      move.l	a5,(a0)
      lea	savea6(pc),a0
      move.l	a6,(a0)		


	move.l 	bitpl1(pc),a0
	move.l	bitpl2(pc),a1

	move.l	rouleau(pc),a2
	lea	tableau(pc),a3

	move.w	#265,d0	;nombre de lignes-1
	
coca:	move.w	(a3)+,d1
	ext.l	d1
	add.l	d1,a0
	add.l	d1,a1
	cmp.l	#ecfin,a0
	blt	ok_mec
    	move.l	a0,a5
	sub.l	#ecfin,a5	
        lea	ecdebpl1,a0
	lea	ecdebpl2,a1
	add.l	a5,a0
	add.l	a5,a1

ok_mec:	cmp.l	#ecdebpl1,a0
	bge	tadelachance 
	move.l	a0,a5
	sub.l	#ecdebpl1,a5	
	lea	ecfin,a0
	lea	ecfin2,a1
	add.l	a5,a0
	add.l	a5,a1

tadelachance:
	move.l	a0,d6
	move.l	a1,d7
	swap	d6
	move.w	d6,(a2)
	add.l	#4,a2
	swap	d6
	move.w	d6,(a2)
	add.l	#4,a2
	swap	d7
	move.w	d7,(a2)
	add.l	#4,a2
	swap	d7
	move.w	d7,(a2)		
	add.l	#16,a2	

	dbf	d0,coca

	lea	bitpl1(pc),a3
	lea	bitpl2(pc),a4
	
	move.l	bitpl1(pc),a0
	move.l	bitpl2(pc),a1			

	add.l	#40,a0
	add.l	#40,a1
	cmp.l	#ecfin,a0
	blt	voukonaissezcelledubelgekirantredanunekremerie
	lea	ecdebpl1,a0
	lea	ecdebpl2,a1
voukonaissezcelledubelgekirantredanunekremerie:
	move.l	a0,(a3)
	move.l	a1,(a4)

gleurk: 

	move.w	compt(pc),d7
	subq.w	#1,d7
	bne	ouiii
;	bchg	#1,$bfe001
	move.w	saved0(pc),d7
	lsr.w	#6,d7
ouiii:	lea	compt(pc),a0
	move.w	d7,(a0)
	
	btst	#6,$bfe001
	bne	retst

	movem.l	(sp)+,d0-d7/a0-a6
	move.w	#$7fff,$dff096
	jmp	(a5)

retst: btst #5,$dff01f
      beq	 retst		 
      move.w	 #$20,$dff09c   ;reset le bit 5(vbr)		

      bra      ici

;****************** make_copper *************************

make_copper:
	lea	copper(pc),a0
	lea	adrcopper,a1
	lea	copperend(pc),a2

vas_y_toto:
	move.w	(a0)+,(a1)+
	cmp.l	a2,a0
	bne	vas_y_toto

	move.l	a1,a2
	add.l	#4,a2
	lea	data(pc),a3
	move.l	a2,(a3)

	move.w	#L1,d0
ding_dong:
	move.w	d0,d1
	lsl.w	#8,d1
	addq.w	#1,d1
	move.w	d1,(a1)+
	move.l	#$fffe0182,(a1)+
	move.l	#$00000184,(a1)+
	move.l	#$00000186,(a1)+
	move.l	#$00000180,(a1)+
	move.l	#$00000102,(a1)+
	move.w	#$0000,(a1)+
	addq.w	#1,d0
	cmp.w	#L2+1,d0
	bne	ding_dong

	move.w	d0,d1	
	addq.w	#1,d0
	lsl.w	#8,d1
	addq.w	#1,d1	
        move.w	d1,(a1)+
	move.l	#$fffe018a,(a1)+
	move.l	#$050c018c,(a1)+
	move.l	#$09ef018e,(a1)+
	move.l	#$0e700188,(a1)+
	move.l	#$00000102,(a1)+
	move.w	#$0000,(a1)+
	move.l	#$01003200,(a1)+
	move.l	#$00e80005,(a1)+
	move.l	#$00ea0000,(a1)+

	lea	rouleau(pc),a2
	move.l	a1,a3
	add.l	#10,a3
	move.l	a3,(a2)

	lea	decal(pc),a2	
	lea	decalfin(pc),a3

ouarf:	move.w	d0,d1
	bne	sprotz
	move.w	#$ffdf,d1
	bra	piou
sprotz:	andi.w	#$00ff,d1
	lsl.w	#8,d1
	addq.w	#1,d1
piou:	move.w	d1,(a1)+
	move.l	#$fffe0102,(a1)+
	move.w	(a2),(a1)+
	move.l	#$00e00000,(a1)+
	move.l	#$00e20000,(a1)+
	move.l	#$00e40000,(a1)+
	move.l	#$00e60000,(a1)+
	move.w	#$180,(a1)+
	move.w	(a2)+,d7
	move.w	d7,d6
	lsl.w	#4,d6
	andi.w	#$f00,d6
	ori.w	d6,d7
	move.w	d7,(a1)+	
	addq.b	#1,d0
	cmp.b	#$3e,d0
	bne	ouarf

	move.l	#$fffffffe,(a1)+
	RTS
	
rouleau:	dc.l	0
data:		dc.l	0			

copper:     dc.w  $0001,$fffe
            dc.w  $e0,2,$e2,$2800,$e4,2,$e6,0
            dc.w  $104,$24,$102,0,$108,0,$10a,0

            dc.w  $100,$2200
            dc.w  $8e,$2c70,$90,$40c1,$92,$30,$94,$c8
            dc.w  $0101,$fffe   ; on commence a la ligne $38
            dc.w  $184,$000,$180,0,$186,0    
            dc.w  $182,$000     

	    dc.b  L1-1,$01			
	    dc.w  $fffe
            dc.w  $e0,2,$e2,$2800,$e4,2,$e6,0
            dc.w  $104,$24,$102,0,$108,0,$10a,0

            dc.w  $182,0,$184,0,$186,0
copperend:    nop		
            
decal:	dc.w 	$ff,$ff,$ff,$ff,$ff,$ff
	dc.w	$ff,$ff,$ee,$ee,$dd,$dd,$cc,$cc,$bb,$bb,$aa,$aa
	dc.w	$99,$99,$88,$88,$77,$77,$66,$66,$55,$55,$44,$44
	dc.w	$33,$33,$22,$22,$11,$11
	blk.w	25,0
	dc.w	0,$44,$77,$99,$aa,$bb,$cc,$dd,$dd,$ee,$ee,$ee
	dc.w	$ff,$ff,$ff,$ff,$ff,$ff,$ee,$ee,$ee,$dd,$dd,$cc,$bb
	dc.w	$aa,$99,$77,$44,$00
	dc.w	0,$44,$77,$99,$aa,$bb,$cc,$dd,$dd,$ee,$ee,$ee
	dc.w	$ff,$ff,$ff,$ff,$ff,$ff,$ee,$ee,$ee,$dd,$dd,$cc,$bb
	dc.w	$aa,$99,$77,$44,$00

	dc.w	0,$44,$77,$99,$aa,$bb,$cc,$dd,$dd,$ee,$ee,$ee
	dc.w	$ff,$ff,$ff
	blk.w	50,$ff

decalfin: nop		 	    

zizicptr:   dc.l  RESET+prgsize
zizicname:  dc    'WILD:zizic',0
even
picptr:     dc.l  RESET+prgsize+zizicsize
picname:    dc    'WILD:pic',0
doslib:     dc    'dos.library',0
gfxlib:	    dc	  'graphics.library',0	
even
gfxbase:    dc.l  0	
DosBase:    dc.l  0
saved0:     dc.l  0
saved1:     dc.l  0
compt:	    dc.l  0	
long:	    dc.l  0	
long1:	    dc.l  0	
savea2:     dc.l  palette
savea3:     dc.l  palette+$104-2*13
savea4:     dc.l  palette1+$410
savea5:     dc.l  palette+$28a
savea6:     dc.l  0
zig:        
	    dc.w  15,15,15,15
	    dc.w  14,14,14,13,13,12,11,10,9,7
	    dc.w  5,4,3,2,2,1,1,1,0,0,0,0
	    dc.w  0,0,0,0,1,1,1,2,2,3,4
            dc.w  5,7,9,10,11,12,13,13,14,14,14,15,15,15
zigend:	    dc.w  15

ral:	    dc.w  nb	
bitpl1:		dc.l	ecdebpl1
bitpl2:		dc.l	ecdebpl2

tableau:	dc.w	40,40,40,40,40,40,40
		blk.w	32,80
	 	blk.w	23,40			
		dc.w	240,120,120,120
		blk.w	22,40
		dc.w	120,120,120,240
  		dc.w	-240,-120,-120,-120
		blk.w	22,-40
		dc.w	-120,-120,-120,-240
		dc.w	240,120,120,120
		blk.w	11,40
		blk.w	50,40


prgfin:     nop

prgsize=prgfin-prg

