;org $60000
;load $60000
dram = $50000
custom = $dff000
ls = $7                  ;number of scrolled lines
scroll1 = 46*4*15         ;place of first scrolling
scroll2 = 46*4*15         ;place of second scrolling
height = $01            ;height of scrolled text
pattern = %00000      ;pattern of scrolled text
co = 1
per = 350
en = $ff00
c = $180
c2 = $182
bplcon0= $100
bplcon1= $102
bplcon2= $104
bpl1mod= $108
ddfstrt= $092
ddfstop= $094
diwstrt= $08e
diwstop= $090
vposr  = $004
color00= $180
color01= $182
color02= $184
color03= $186
dmacon = $096
cop1lch= $080
copjmp1= $088
beg:
movem.l a0-a6/d0-d7,-(a7)


id = $d1  ;idenify byte
;----------- repacker -----------
lea packed,a0 ;source
lea $70000,a1 ;destination
clr.l d0
;
clr.l d1
clr.l d2
clr.l d7
loop:
clr.l d1
clr.l d2
move.b (a0)+,d0
cmpi.b #id,d0          ;zeichen zum entpacken vorhanden?
beq repack             ;wenn ja, zur entpack-routine springen
move.b d0,(a1)+        ;ansonsten byte in speicher schreiben
return:
cmpa.l #packed+$e96+$156d,a0
bls loop               ;wenn nicht, weiter entpacken
;rts
jmp beg2

repack:
cmpi.b #0,(a0)         ;ist $d1 kein id-byte?
beq vol1
move.b (a0)+,d1        ;anzahl in d1 holen
move.b (a0)+,d2        ;byte selbst in d2 holen
rloop:
move.b d2,(a1)+ 
dbra d1,rloop
jmp return 
vol1:
add.l #1,a0
move.b #id,(a1)+
jmp return

beg2:
lea text,a0
lea copperl,a1
clr.l d0
aloop:
add.b (a0)+,d0
cmp.l a0,a1
bne aloop
;rts
cmp.l #$6c,d0
;bne suende

move.l $04,a6
jsr -132(a6)          ;forbid
move.l #$5000,d7
lea dram,a0
clrl:
clr.l (a0)+
dbra d7,clrl

cmp.b #"2",$fecece
beq vw1
move.l $25c0,savecop
jmp vww
vw1:
move.l $2230,savecop
vww:
move.l $6c,saveint

move.l #390,d7
lea dram+$502e,a0
lea $70000,a1
bsr copy 

lea dram+$5000+$730,a0
lea $747d4,a1
move.l #280,d7
bsr copy

clr.w flag
clr.w flag2
clr.w flag3
bsr set
jmp rw0
set:
lea xwave4(pc),a0
move.l a0,$dff0a0   ;1. stimme
move.l a0,$dff0b0   ;2. stimme
move.l a0,$dff0c0
move.l a0,$dff0d0

move.w #xwend4-xwave4/2,$dff0a4
move.w #xwend4-xwave4/2,$dff0b4
move.w #xwend4-xwave4/2,$dff0c4
move.w #xwend4-xwave4/2,$dff0d4

move.w #64,$dff0a8
move.w #64,$dff0b8
move.w #64,$dff0c8
move.w #64,$dff0d8
move.w #per,$dff0a6
move.w #per,$dff0b6
move.w #per,$dff0c6
move.w #per,$dff0d6
move.w #$820f,$dff096
rts

rw0:
move.l #dram,a1
move.w #2300,d1
dloop:
clr.l (a1)+
dbra d1,dloop

;lea dram+16+920+920+184,a1
;lea graphic,a2
;move.l #$bf8,d0
;hqcl:
;move.w (a2)+,(a1)+
;dbra d0,hqcl


continue:
cmp.b #"2",$fecece
beq vw2
move.l #copperl,$25c0
jmp vww2
vw2:
move.l #copperl,$2230
vww2:
lea custom,a0

;jsr initgr

jmp startprg

txwrite:
clr.l d1
move.b (a6)+,d1
cmpi.b #$20,d1
bne nl1
move.b #$61+26,d1
nl1:
subi.b #$61,d1
mulu #16,d1
add.l #chars,d1
move.l d1,a0
move.l a5,a4
move.l #$07,d0
char1:
move.b (a0)+,(a4)+
move.b (a0)+,(a4)
add.l #45,a4
dbra d0,char1
add.w #$02,a5
dbra d7,txwrite
rts

startprg:
lea text,a6
move.l a6,storet1
;                     scrolling
scroll:
jmp scrwei

size2:
move.l #124,d6
move.l #$1,d7
size22:
jsr up
move.l d7,d0
size2t:
sub.l #1,d0
bne size2t
add.l #$14,d7
add.l #10,d6
move.w d6,$dff0a6
add.l #10,d6
move.w d6,$dff0b6
add.l #10,d6
move.w d6,$dff0c6
add.l #10,d6
move.l d6,$dff0d6
sub.l #30,d6
cmp.w #$5000,mi+2
bne size22
rts

size3:
move.l #1924,d6
move.l #$e11,d7
size32:
bsr down
move.l d7,d0
size3t:
sub.l #1,d0
bne size3t
sub.l #$14,d7
sub.l #10,d6
move.w d6,$dff0a6
sub.l #10,d6
move.w d6,$dff0b6
sub.l #10,d6
move.w d6,$dff0c6
sub.l #10,d6
move.w d6,$dff0d6
add.l #30,d6
cmp.w #$d160,mi+2
bne size32
rts

scrwei:
bsr size2
clr.w flag
bsr on
move.l #$0f,storet
move.w #co,counter
move.l #mweit2,$6c

wait:
cmp.b #$70,$dff006
bne wait
bsr color
bsr abc
bsr select
bsr mouse
bmi wait
;
bsr off
bsr set
bsr size3
move.w #$f,$dff096
bsr end                     ;reset music,interrupt,graphic
movem.l (a7)+,a0-a6/d0-d7
rts

mweit2:
movem.l d0-d7/a0-a6,-(a7)
clr.l d0
move.b #ls,d0               ; number of lines scrolled
lea store1,a1
lea dram+scroll1,a0
lea dram+scroll2,a3
label1:
move.l a0,a2
roxl.w (a1)+
move sr,d6
move.l #height,d2  ;   height of text

label:
move.l #22,d1
move d6,ccr

scrolli:
roxl.w -(a2)
dbra d1,scrolli
;move.l a3,a2
;move.l #22,d1
;move d6,ccr

;scrollj:
;roxl.w -(a2)
;roxl.w -(a2)
;roxl.w -(a2)
;dbra d1,scrollj

adda.w #$b8,a0      ;change add to sub to display text mirrored
suba.w #$b8,a3
move.l a0,a2
move.b #pattern,d6   ;remove this move when no patter is wanted
move #0,ccr
dbra d2,label
dbra d0,label1

lea storet,a5
move.l (a5),d7
dbmi d7,thescroll

move.l storet1,a6
clr.l d7
move.b (a6)+,d7
bne contv1
lea text,a6
move.b (a6)+,d7

contv1:
clr.l d0
lea tab1,a0
cont1:
cmp.b (a0)+,d7
beq cont1x
add.b #$01,d0
cmp.b #$14,d0
bne cont1
bra cont2

cont1x:
add.b #$61+26,d0
move.l d0,d7
cont2:
sub.b #$61,d7
asl.w #4,d7
lea store1,a5
lea chars,a0
adda.l a0,d7
move.l d7,a4
move.l #$07,d1
charloop1:
move.w (a4)+,(a5)+
dbra d1,charloop1
move.l a6,storet1
move.l #$0f,d7

thescroll:
move.l d7,storet
chrabc:
jsr mscroll
movem.l (a7)+,a0-a6/d0-d7
tst.w flag3
beq begin
jmp xbegin

color:
not.w flag2
;bne clende
lea color1+6,a0
move.w (a0),-(a7)        ;oberste Farbe retten
move.l a0,a1
add.l #8,a0
move.l #5,d7
colorll:
move.w (a0),(a1)
add.l #8,a0
add.l #8,a1
dbra d7,colorll
move.w (a7)+,color1e-2

lea color2e-2,a0
move.w (a0),-(a7)
move.l a0,a1
sub.l #8,a0
move.l #5,d7
colorrll:
move.w (a0),(a1)
sub.l #8,a0
sub.l #8,a1
dbra d7,colorrll
move.w (a7)+,color2+6
clende:
rts

abc:
lea dram+$502e,a0
lea dram+$50e6,a1
lea dram+$508a,a2
lea dram+$5142,a3

lea dram+$bcb6+5520+3680,a4
lea dram+$bd12+5520+3680,a5
move.l #$22,d6
mfne:
move.w (a0)+,(a4)+
move.w (a2)+,(a5)+
dbra d6,mfne

lea dram+$502e,a0
lea dram+$508a,a2

move.l #200,d7
abc1:
move.l #22,d6
abc2:
move.w (a1)+,(a0)+
move.w (a3)+,(a2)+
dbra d6,abc2
add.l #$8a,a0
add.l #$8a,a1
add.l #$8a,a2
add.l #$8a,a3
dbra d7,abc1
abcend:
rts

mscroll:
sub.w #1,counter
bne msee
ms:
tst.w flag
bne up
down:
move.w #co,counter
move.w mi+2,d1
add.w #$b8,d1
cmp.w #$572e+2,d1
bne mse
not.w flag
mse:
move.w d1,mi+2      ; Erster Bitplanepointer
add.w #$5c+2,d1
move.w d1,mi+6      ; Zweiter Bitplanepointer
msee:
rts
up:
move.w #co,counter
move.w mi+2,d1
sub.w #$b8,d1
cmp.w #$5000,d1
bne mse2
not.w flag
mse2:
move.w d1,mi+2
add.w #$5c+2,d1
move.w d1,mi+6
rts

select:
clr.l d0
move.b $bfec01,d0
cmp.b #$fd,d0
beq mus1
cmp.b #$fb,d0
beq mus2
rts
mus1:
clr.w flag3
rts
mus2:
move.w #$ffff,flag3
rts

suende:
alertnum      = $80000000
alerthei      = $2d


move.l $00000004,a6
jsr -$84(a6)

starta:
lea libnam,a1
clr.l d0
jsr -$228(a6)

cmp.l #0,d0
beq starta

move.l d0,a6

again:
move.l #alertnum,d0
move.l #alertstr,a0
move.l #alerthei,d1
jsr -$5a(a6)
kick:
move.l $fc0004,a0
sub.l #$40000,a0
jmp (a0) 


libnam:
dc.b "intuition.library"
dc.b 0

even
alertstr:
dc.w 10
dc.b 14
dc.b "  You changed our program."
dc.b " I think you won't do it again, because"
dc.b " some rams  "
dc.b 0
dc.b 1
dc.w 10
dc.b 23
dc.b "  have been destroyed ..."
dc.b 0
dc.b 1
dc.w 10
dc.b 34
dc.b "               Guru Meditation # H Q C (your friends !?!)"
dc.b 0
dc.b 0

         ; mouseclick: needs d0
mouse:
clr.l d0
move.b $bfe201,d0
and.b #191,d0
move.b d0,$bfe201
move.b $bfe001,d0
asl.b #1,d0
rts

copy:    
cl1:
move.l #22,d6
cl2:
move.w (a1)+,(a0)+
dbra d6,cl2
add.l #46,a0
dbra d7,cl1
rts

end:
move.l saveint,$6c
cmp.b #"2",$fecece
beq vw3
move.l savecop,$25c0
jmp vww3
vw3:
move.l savecop,$2230
vww3:
move.l $04,a6
jsr -138(a6)           ;permit
move.w #$000f,$dff096  ;audio-dma off
rts
storet:
dc.w $0000,$0000
storet1:
dc.w $0000,$0000


even

store1:
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000
even
store:
dc.w $0000,$0000
even

chars:
dc.w $03c0,$0ff0,$3c3c,$3ffc,$3c3c,$3c3c,$3c3c,$0000
dc.w $3ff0,$3c3c,$3c3c,$3ff0,$3c3c,$3c3c,$3ff0,$0000
dc.w $0ff0,$3c3c,$3c00,$3c00,$3c00,$3c3c,$0ff0,$0000
dc.w $3fc0,$3cf0,$3c3c,$3c3c,$3c3c,$3cf0,$3fc0,$0000
dc.w $3ffc,$3c00,$3c00,$3fc0,$3c00,$3c00,$3ffc,$0000
dc.w $3ffc,$3c00,$3c00,$3fc0,$3c00,$3c00,$3c00,$0000
dc.w $0ff0,$3c3c,$3c00,$3cfc,$3c3c,$3c3c,$0ff0,$0000
dc.w $3c3c,$3c3c,$3c3c,$3ffc,$3c3c,$3c3c,$3c3c,$0000
dc.w $0ff0,$03c0,$03c0,$03c0,$03c0,$03c0,$0ff0,$0000
dc.w $03fc,$00f0,$00f0,$00f0,$00f0,$3cf0,$0fc0,$0000
dc.w $3c3c,$3cf0,$3fc0,$3f00,$3fc0,$3cf0,$3c3c,$0000
dc.w $3c00,$3c00,$3c00,$3c00,$3c00,$3c00,$3ffc,$0000
dc.w $3c0f,$3f3f,$3fff,$3ccf,$3c0f,$3c0f,$3c0f,$0000
dc.w $3c3c,$3f3c,$3ffc,$3ffc,$3cfc,$3c3c,$3c3c,$0000
dc.w $0ff0,$3c3c,$3c3c,$3c3c,$3c3c,$3c3c,$0ff0,$0000
dc.w $3ff0,$3c3c,$3c3c,$3ff0,$3c00,$3c00,$3c00,$0000
dc.w $0ff0,$3c3c,$3c3c,$3c3c,$3c3c,$0ff0,$00fc,$0000
dc.w $3ff0,$3c3c,$3c3c,$3ff0,$3fc0,$3cf0,$3c3c,$0000
dc.w $0ff0,$3c3c,$3c00,$0ff0,$003c,$3c3c,$0ff0,$0000
dc.w $3ffc,$03c0,$03c0,$03c0,$03c0,$03c0,$03c0,$0000
dc.w $3c3c,$3c3c,$3c3c,$3c3c,$3c3c,$3c3c,$0ff0,$0000
dc.w $3c3c,$3c3c,$3c3c,$3c3c,$3c3c,$0ff0,$03c0,$0000
dc.w $3c0f,$3c0f,$3c0f,$3ccf,$3fff,$3fbf,$3c0f,$0000
dc.w $3c3c,$3c3c,$0ff0,$03c0,$0ff0,$3c3c,$3c3c,$0000
dc.w $3c3c,$3c3c,$3c3c,$0ff0,$03c0,$03c0,$03c0,$0000
dc.w $3ffc,$003c,$00f0,$03c0,$0f00,$3c00,$3ffc,$0000

dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $00f0,$03c0,$0f00,$0f00,$0f00,$03c0,$00f0,$0000
dc.w $0f00,$03c0,$00f0,$00f0,$00f0,$03c0,$0f00,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$03c0,$03c0,$0f00
dc.w $0000,$0000,$03c0,$0000,$0000,$03c0,$0000,$0000
dc.w $0ff0,$3c3c,$003c,$00f0,$03c0,$0000,$03c0,$0000
dc.w $0000,$0000,$0000,$3ffc,$0000,$0000,$0000,$0000
dc.w $03c0,$03c0,$0fc0,$03c0,$03c0,$03c0,$3ffc,$0000
dc.w $0ff0,$3c3c,$003c,$03c0,$0f00,$3c00,$3ffc,$0000
dc.w $0ff0,$3c3c,$003c,$03f0,$003c,$3c3c,$0ff0,$0000
dc.w $003c,$00fc,$03fc,$3c3c,$3fff,$003c,$003c,$0000
dc.w $3ffc,$3c00,$3c00,$3ff0,$003c,$3c3c,$0ff0,$0000
dc.w $0ff0,$3c3c,$3c00,$3ff0,$3c3c,$3c3c,$0ff0,$0000
dc.w $3ffc,$3c3c,$00f0,$03c0,$03c0,$03c0,$03c0,$0000
dc.w $0ff0,$3c3c,$3c3c,$0ff0,$3c3c,$3c3c,$0ff0,$0000
dc.w $0ff0,$3c3c,$3c3c,$0ffc,$003c,$3c3c,$0ff0,$0000
dc.w $0ff0,$3c3c,$3cfc,$3f3c,$3c3c,$3c3c,$0ff0,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$03c0,$03c0,$0000
dc.w $03c0,$03c0,$03c0,$03c0,$0000,$0000,$03c0,$0000
dc.w $003c,$00f0,$03c0,$0000,$0000,$0000,$0000,$0000

tab1:
dc.b " (),:?-1234567890.!'"
tabend:

text:
dc.b "hqc proudly presents: 'defenders of the crown'"
dc.b "    special greetings to the wizards"
dc.b ", dcs, yeti, the hoppers and to datafox.  "
dc.b "also greetings to headbanger, dynamic duo, error-soft and eca."
dc.b "      look out for wintergames and dpaint ii!!!"
dc.b "                      ",0
even

copperl:
dc.w $0180,$0000
dc.w $00e0,$0005,$00e2,$0564
dc.w $00e8,$0005,$00ea,$0592
dc.w $00e4,$0005,$00e6,$502e
dc.w $00ec,$0005,$00ee,$508a
dc.w $0100,$4400,$0102,$0000
dc.w $0108,$8a,$010a,$8a
dc.w $0092,$0028
dc.w $0094,$00d8,$008e,$2c71
dc.w $0090,$f4c9
dc.w $0120,$0000,$0122,$0000

color1:
dc.w $3201,$ff00,$0184,$f00
dc.w $3401,$ff00,$0184,$f80
dc.w $3601,$ff00,$0184,$ff0
dc.w $3801,$ff00,$0184,$0f0
dc.w $3a01,$ff00,$0184,$00f
dc.w $3c01,$ff00,$0184,$80f
dc.w $3e01,$ff00,$0184,$c0f
color1e:

dc.w $4401,$ff00
dc.w $0100,%0100010000000000      ; Mittelteil
dc.w $0104,$0
dc.w $0108,$008a,$010a,$008a
dc.w $00e8,$0005,$00e0,$0005
dc.w $0180,$0000,$0180,$0000
dc.w $0180,$0000,$0180,$0000
mi:
dc.w $00e2,$d160,$00ea,$d218 
dc.w $0180,$0000,$0182,$0f0a
dc.w $0184,$0c38,$0186,$0847
dc.w $0192,$059f,$0194,$025f     ; Farben des zweiten Playfields
dc.w $0196,$022a

dc.w $da01,$ff00
dc.w $00e0,$0005,$00e8,$0005
dc.w $00e2,$0e60,$00ea,$0592

color2:
dc.w $e101,$ff00,$0184,$c0f
dc.w $e301,$ff00,$0184,$80f
dc.w $e501,$ff00,$0184,$00f
dc.w $e701,$ff00,$0184,$0f0
dc.w $e901,$ff00,$0184,$ff0
dc.w $eb01,$ff00,$0184,$f80
dc.w $ed01,$ff00,$0184,$f00
color2e:

dc.w $ffff,$fffe


;         The Final Comic Bakery Music
;
;              completed 11/29/86

intvec         = $6c
audxlch        = $000
audxlcl        = $002
audxlen        = $004
audxper        = $006
audxvol        = $008
v1bas          = $dff0a0
v2bas          = $dff0b0
v3bas          = $dff0c0
v4bas          = $dff0d0


on:
jmp start

off:
jmp stop


oldintvec:
dc.l 0

v1opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w -5
dc.w 0
dc.w 0

v2opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w -2
dc.w 1
dc.w 0

v3opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w -100
dc.w 0
dc.w 0

v4opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0


enve1:
dc.b 2,62,31,-4,0,0

enve2:
dc.b 1,90,9,-10,0,0

enve3:
dc.b 1,112,14,-8,0,0

enve4:
dc.b 1,110,13,-2,84,-1,0,0


wave1:
dc.b -127,-127,-127,127,127,127,-127,-127
dc.b 127,127,127,127,127,127,127,127
wend1:

wave2:
dc.b 127,127,127,127,-127,-127,-127,-127
wend2:

wave3:
dc.b 127,127,127,127,-127,-127,-127,-127
wend3:

wave4:
dc.b 127,127,-128,-128,127,127,127,127,127,127,127,127
dc.b -128,-128,-128,-128
wend4:


even
start:
jsr init
move.w #$820f,$dff096
move.l intvec,oldintvec
move.l #begin,intvec
rts

stop:
move.w #$000f,$dff096
move.l oldintvec,intvec
rts


init:
lea s1dat,a1
lea s2dat,a2
lea s3dat,a3
lea s4dat,a4
move.l a1,v1opt+4
move.l a2,v2opt+4
move.l a3,v3opt+4
move.l a4,v4opt+4

lea enve1,a1
lea enve2,a2
lea enve3,a3
lea enve4,a4
move.l a1,v1opt
move.l a2,v2opt
move.l a3,v3opt
move.l a4,v4opt

clr.w v1opt+10
clr.w v2opt+10
clr.w v3opt+10
clr.w v4opt+10

clr.w v1opt+8
clr.w v2opt+8
clr.w v3opt+8
clr.w v4opt+8

clr.w v1opt+12
clr.w v2opt+12
clr.w v3opt+12
clr.w v4opt+12

lea wave1,a1
lea wave2,a2
lea wave3,a3
lea wave4,a4
move.l a1,v1bas+audxlch
move.l a2,v2bas+audxlch
move.l a3,v3bas+audxlch
move.l a4,v4bas+audxlch

move.l #wend1-wave1/2,d1
move.l #wend2-wave2/2,d2
move.l #wend3-wave3/2,d3
move.l #wend4-wave4/2,d4
move.w d1,v1bas+audxlen
move.w d2,v2bas+audxlen
move.w d3,v3bas+audxlen
move.w d4,v4bas+audxlen

rts


begin:
movem.l d0-d7/a0-a6,-(a7)


lea v1bas,a2
lea v1opt,a0
jsr envupd

lea enve1,a4
lea v1opt+12,a5
lea s1dat,a3
lea v1bas,a2
lea v1opt,a0
jsr sndupd

lea v1opt,a0
lea v1bas,a1
jsr fxupd


lea v2bas,a2
lea v2opt,a0
jsr envupd

lea enve2,a4
lea v2opt+12,a5
lea s2dat,a3
lea v2bas,a2
lea v2opt,a0
jsr sndupd

lea v2opt,a0
lea v2bas,a1
jsr fxupd

lea v3bas,a2
lea v3opt,a0
jsr envupd

lea enve3,a4
lea v3opt+12,a5
lea s3dat,a3
lea v3bas,a2
lea v3opt,a0
jsr sndupd

lea v3opt,a0
lea v3bas,a1
jsr fxupd

lea v4bas,a2
lea v4opt,a0
jsr envupd

lea enve4,a4
lea v4opt+12,a5
lea s4dat,a3
lea v4bas,a2
lea v4opt,a0
jsr sndupd

lea v4opt,a0
lea v4bas,a1
jsr fxupd



movem.l (a7)+,d0-d7/a0-a6
movem.l d0/d1/a0/a1/a5/a6,-(a7)
move.l oldintvec,a0
jmp 4(a0)

envupd:
move.l (a0),a1
subq.b #1,12(a0)
bpl ok1

move.b (a1),12(a0)
move.b 1(a1),14(a0)
bne ok2

rts

ok2:
addi.l #2,(a0)
jmp envupd

ok1:
move.b 14(a0),d0
bpl ok3

neg.b d0
subi.b d0,8(a0)
bra setlaut

ok3:
addi.b d0,8(a0)

setlaut:
move.b 8(a0),d0
asr.b #1,d0
and.b #$3f,d0
move.b d0,audxvol(a2)
rts


sndupd:
subi.w #1,10(a0)
beq setnew
bmi setnew

rts

setnew:
move.l 4(a0),a1
tst.w (a1)
bne ok10

move.l a3,4(a0)
bra setnew


ok10:
move.w (a1),d6
divu #4,d6
mulu #3,d6
move.w d6,10(a0)

move.w 2(a1),d6
cmp.l #v4opt,a0
bne jfg

asr.w #1,d6

jfg:
move.w d6,16(a0)
move.w d6,audxper(a2)

move.b #0,22(a0)
move.l a4,(a0)
move.w #0,12(a0)
move.w #0,8(a0)
addi.l #4,4(a0)
rts

fxupd:
move.w 20(a0),d0
bne ok20

bra porta
 
ok20:
move.b 22(a0),d0
bmi doppel

move.w 16(a0),d0
asr.w #1,d0
move.w d0,16(a0)
move.w d0,audxper(a1)

jmp confx

doppel:
move.w 16(a0),d0
asl.w #1,d0
move.w d0,16(a0)
move.w d0,audxper(a1)

confx:
eor.b #$ff,22(a0)

porta:
clr.l d0
move.w 18(a0),d0
beq exitfx
neg.w d0

bpl uport

neg.w d0
sub.w d0,16(a0)
move.w 16(a0),audxper(a1)
bra exitfx

uport:
add.w d0,16(a0)
move.w 16(a0),audxper(a1)

exitfx:
rts





s1dat:
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2560,8,2560,8,2560,8,1440,8,1280,8,2560,8,2560

dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2560,8,2560,8,2560,8,1440,8,1280,8,2560,8,2560

dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2560,8,2560,8,2560,8,1440,8,1280,8,2560,8,2560

dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840
dc.w 16,3624,8,3624,8,3624,8,1920,8,1808,8,3624,8,3624
dc.w 16,3624,8,3624,8,3624,8,1920,8,1808,8,3624,8,3624
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,4304,8,4304,8,4304,8,2288,8,2160,8,4304,8,4304
dc.w 16,4560,8,4560,8,4560,8,2416,8,2288,8,4560,8,4560

dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840
dc.w 16,3624,8,3624,8,3624,8,1920,8,1808,8,3624,8,3624
dc.w 16,3624,8,3624,8,3624,8,1920,8,1808,8,3624,8,3624
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,4304,8,4304,8,4304,8,2288,8,2160,8,4304,8,4304
dc.w 16,4560,8,4560,8,4560,8,2416,8,2288,8,4560,8,4560

dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,3424,8,3424,8,3424,8,1920,8,1712,8,3424,8,3424
dc.w 16,2880,8,2880,8,2880,8,1520,8,1440,8,2880,8,2880
dc.w 16,3840,8,3840,8,3840,8,2032,8,1920,8,3840,8,3840

dc.w 0,0




s2dat:
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1280,8,640,8,640,16,1280,8,640,8,640

dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1280,8,640,8,640,16,1280,8,640,8,640

dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1280,8,640,8,640,16,1280,8,640,8,640

dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960
dc.w 16,1812,8,904,8,904,16,1812,8,904,8,904
dc.w 16,1812,8,904,8,904,16,1812,8,904,8,904
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,2152,8,1076,8,1076,16,2152,8,1076,8,1076
dc.w 16,2280,8,1140,8,1140,16,2280,8,1140,8,1140

dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960
dc.w 16,1812,8,906,8,906,16,1812,8,906,8,906
dc.w 16,1812,8,906,8,906,16,1812,8,906,8,906
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,2152,8,1076,8,1076,16,2152,8,1076,8,1076
dc.w 16,2280,8,1140,8,1140,16,2280,8,1140,8,1140


dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1712,8,856,8,856,16,1712,8,856,8,856
dc.w 16,1440,8,720,8,720,16,1440,8,720,8,720
dc.w 16,1920,8,960,8,960,16,1920,8,960,8,960

dc.w 0,0



s3dat:
dc.w 32,3000,32,1500
dc.w 32,3000,32,1500
dc.w 32,3000,32,1500
dc.w 16,3000,16,1500,16,2000,16,2500

dc.w 0,0


s4dat:
dc.w 16,1712,16,1712,16,1920,32,1712
dc.w 16,2280,16,1712,16,1520,16,1440
dc.w 16,1280,16,1440,16,1520,16,1440
dc.w 16,1520,16,1712,16,1920
dc.w 16,1712,16,1712,16,1920,32,1712
dc.w 16,2280,16,1920,16,1712,16,1920
dc.w 16,1920,16,1712,16,1920,16,2032
dc.w 16,2560,8,2152,8,2032,8,1920
dc.w 8,1808
dc.w 16,1712,16,1712,16,1920,32,1712
dc.w 16,2280,16,1712,16,1520,16,1440
dc.w 16,1280,16,1440,16,1520,16,1440
dc.w 16,1520,16,1712,16,1920
dc.w 16,1712,16,1712,16,1920,32,1712
dc.w 16,2280,16,1712,16,1440,16,1144
dc.w 16,1280,16,1440,16,1712
dc.w 16,2288,16,2560,8,2880,8,2560
dc.w 8,2880,8,3040,512,3424

dc.w 16,1712,16,1712,16,1712,16,1712,128,1712
dc.w 64,1712,208,1920,16,2280,16,1920,16,1712
dc.w 160,1520,16,1520,16,1440,16,1280,16,1440
dc.w 16,1520,16,1440,128,1712,64,1712,32,1712,32,1808


dc.w 16,1712,16,1712,16,1712,16,1712
dc.w 128,1712
dc.w 16,1712,16,1524,16,1440
dc.w 16,1280,24,1140,24,1280,16,1440,128,1140
dc.w 16,1140,16,1076,16,1140,16,1440,176,1280
dc.w 16,1140,16,1280,16,1440,16,1524,16,1440
dc.w 128,1712,64,1712,32,1712,32,1808,256,1712


dc.w 0,0



xv1bas          = $dff0a0
xv2bas          = $dff0b0
xv3bas          = $dff0c0
xv4bas          = $dff0d0

xon:
jmp xstart

xoff:
jmp xstop

xv1opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 1
dc.w 0

xv2opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0

xv3opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w -100
dc.w 0
dc.w 0

xv4opt:
dc.l 0
dc.l 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0
dc.w 0


xenve1:
dc.b 2,60,40,-3,0,0

xenve2:
dc.b 2,55,55,-2,0,0

xenve3:
dc.b 1,100,50,-2,0,0

xenve4:
dc.b 4,31,31,-2,0,0 


xwave1:
dc.b -127,-127,-127,127,127,127,-127,-127
dc.b 127,127,127,127,127,127,127,127
xwend1:

xwave2:
dc.b 127,127,127,-128,127,-128,-128,-128,127,127,127
dc.b -128,-128,127,-128,127
xwend2:

xwave3:
dc.b 127,127,127,127,-127,-127,-127,-127
xwend3:

xwave4:
dc.b 127,127,-128,-128,127,127,127,127,127,127,127,127
dc.b -128,-128,-128,-128
xwend4:


even
xstart:
jsr xinit
move.w #$820f,$dff096
move.l intvec,oldintvec
move.l #xbegin,intvec
rts

xstop:
move.w #$000f,$dff096
move.l oldintvec,intvec
rts


xinit:
lea xs1dat,a1
lea xs2dat,a2
lea xs3dat,a3
lea xs4dat,a4
move.l a1,xv1opt+4
move.l a2,xv2opt+4
move.l a3,xv3opt+4
move.l a4,xv4opt+4

lea xenve1,a1
lea xenve2,a2
lea xenve3,a3
lea xenve4,a4
move.l a1,xv1opt
move.l a2,xv2opt
move.l a3,xv3opt
move.l a4,xv4opt

clr.w xv1opt+10
clr.w xv2opt+10
clr.w xv3opt+10
clr.w xv4opt+10

clr.w xv1opt+8
clr.w xv2opt+8
clr.w xv3opt+8
clr.w xv4opt+8

clr.w xv1opt+12
clr.w xv2opt+12
clr.w xv3opt+12
clr.w xv4opt+12

lea xwave1,a1
lea xwave2,a2
lea xwave3,a3
lea xwave4,a4
move.l a1,xv1bas+audxlch
move.l a2,xv2bas+audxlch
move.l a3,xv3bas+audxlch
move.l a4,xv4bas+audxlch

move.l #xwend1-xwave1/2,d1
move.l #xwend2-xwave2/2,d2
move.l #xwend3-xwave3/2,d3
move.l #xwend4-xwave4/2,d4
move.w d1,xv1bas+audxlen
move.w d2,xv2bas+audxlen
move.w d3,xv3bas+audxlen
move.w d4,xv4bas+audxlen

rts


xbegin:
movem.l d0-d7/a0-a6,-(a7)


lea xv1bas,a2
lea xv1opt,a0
jsr xenvupd

lea xenve1,a4
lea xv1opt+12,a5
lea xs1dat,a3
lea xv1bas,a2
lea xv1opt,a0
jsr xsndupd

lea xv1opt,a0
lea xv1bas,a1
jsr xfxupd


lea xv2bas,a2
lea xv2opt,a0
jsr xenvupd

lea xenve2,a4
lea xv2opt+12,a5
lea xs2dat,a3
lea xv2bas,a2
lea xv2opt,a0
jsr xsndupd

lea xv2opt,a0
lea xv2bas,a1
jsr xfxupd

lea xv3bas,a2
lea xv3opt,a0
jsr xenvupd

lea xenve3,a4
lea xv3opt+12,a5
lea xs3dat,a3
lea xv3bas,a2
lea xv3opt,a0
jsr xsndupd

lea xv3opt,a0
lea xv3bas,a1
jsr xfxupd

lea xv4bas,a2
lea xv4opt,a0
jsr xenvupd

lea xenve4,a4
lea xv4opt+12,a5
lea xs4dat,a3
lea xv4bas,a2
lea xv4opt,a0
jsr xsndupd

lea xv4opt,a0
lea xv4bas,a1
jsr xfxupd



movem.l (a7)+,d0-d7/a0-a6
movem.l d0/d1/a0/a1/a5/a6,-(a7)
move.l oldintvec,a0
jmp 4(a0)

xenvupd:
move.l (a0),a1
subq.b #1,12(a0)
bpl.S xok1

move.b (a1),12(a0)
move.b 1(a1),14(a0)
bne xok2

rts

xok2:
addi.l #2,(a0)
jmp xenvupd

xok1:
move.b 14(a0),d0
bpl xok3

neg.b d0
subi.b d0,8(a0)
bra xsetlaut

xok3:
addi.b d0,8(a0)

xsetlaut:
move.b 8(a0),d0
asr.b #1,d0
and.b #$3f,d0
move.b d0,audxvol(a2)
rts


xsndupd:
subi.w #1,10(a0)
beq xsetnew
bmi xsetnew

rts

xsetnew:
move.l 4(a0),a1
tst.w (a1)
bne xok10

move.l a3,4(a0)
bra xsetnew


xok10:
move.w (a1),10(a0)
move.w 2(a1),audxper(a2)
move.w 2(a1),16(a0)
move.b #0,22(a0)
move.l a4,(a0)
move.w #0,12(a0)
move.w #0,8(a0)
addi.l #4,4(a0)
rts

xfxupd:
move.w 20(a0),d0
bne xok20

bra xporta
 
xok20:
move.b 22(a0),d0
bmi xdoppel

move.w 16(a0),d0
asr.w #1,d0
move.w d0,16(a0)
move.w d0,audxper(a1)

jmp xconfx

xdoppel:
move.w 16(a0),d0
asl.w #1,d0
move.w d0,16(a0)
move.w d0,audxper(a1)

xconfx:
eor.b #$ff,22(a0)

xporta:
clr.l d0
move.w 18(a0),d0
beq xexitfx
neg.w d0

bpl xuport

neg.w d0
sub.w d0,16(a0)
move.w 16(a0),audxper(a1)
bra xexitfx

xuport:
add.w d0,16(a0)
move.w 16(a0),audxper(a1)

xexitfx:
rts





xs1dat:
dc.w 16,678,16,856,16,678,16,570
dc.w 16,906,16,762,16,570,16,906
dc.w 16,1016,16,1280,16,1016,16,856
dc.w 16,1356,16,1140,16,856,16,1140
dc.w 16,856,16,1016,16,856,16,640
dc.w 16,604,16,762,16,604,16,508
dc.w 16,570,16,762,16,906,16,762
dc.w 16,640,16,856,16,1016,16,856

dc.w 0,0




xs2dat:
dc.w 48,3424,16,3424
dc.w 48,3624,16,3624
dc.w 48,4064,16,4064
dc.w 48,4560,16,4560
dc.w 48,5120,16,5120
dc.w 48,4832,16,4832
dc.w 48,4560,16,4560
dc.w 48,5120,16,5120

dc.w 0,0

xs3dat:
dc.w 32,2000,16,1000
dc.w 16,2000,32,2000,32,1000
dc.w 0,0

xs4dat:
dc.w 64,428,64,452,64,508,64,570,64,640,64,604,64,570,32,640
dc.w 16,856,16,762
dc.w 16,678,16,762,16,856,8,762,56,856
dc.w 16,762,8,678,24,762,16,856,8,762,40,856
dc.w 16,856,16,1016,16,856,16,856,16,856
dc.w 8,1016,24,856,16,856,16,856
dc.w 112,762,16,856,16,762
dc.w 8,678,8,570,16,570,16,570,8,570,32,570
dc.w 14,570,10,508,16,570
dc.w 32,508,16,428,12,508,36,570
dc.w 16,678,16,570,32,508,8,508
dc.w 8,452,16,428,32,428,8,428,8,380,16,428
dc.w 24,452,24,508,16,570
dc.w 24,762,24,906,16,762

dc.w 0,0


saveint:
dc.l 0
savecop:
dc.l 0
counter:
dc.w 0
flag:
dc.w 0
flag2:
dc.w 0
flag3:
dc.w 0
even
packed:
blk $e96,0
packed2:
blk $156d,0
