Preview
drfff COMPLEX PRESENTS ANOTHER DEMO CALLED r5d3'SPORTMAD' pppc THIS IS PROPABLY THE FIRST DEMO FEATURING ACTUAL SOURCE CODE OF THE DEMO ITSELF ! re52 USE CURSOR KEYS TO SCROLL AROUND SOURCE AND PRESS HELP TO r0afGET SOMEz EFFECTS... TRY ALSO YOUR MOUSE, RIGHT ONE FOR DEFAULT MOVEMENT. THIS IS A NEW VERSION OF THE OVERLOAD'S MOONLIGHTNING DEMO, zRELEASED AT MARCH 1988,BEFORE THE INFAMOUS LAHTI-PARTY. r999PARTYGREETINGS GO TO ALL COMPLEX MEMBERS,rec0 MEXICAN BOYS JA SIINAHAN NE SITTEN TARKEIMMAT OLIKIN . z SIGNED ARNOLD , WE ARE HUNGRY !
************************************
**** SportMad ****
* *
* Demo by Complex *
* *
* Code : Arska *
* Music : Walkman *
* Graf : Rubberbrain *
* Cockatrice *
* *
* Released at Scoopex & Byterapers *
* party at Iisalmi 10-13.08.1990 *
* *
**** use cursor keys to move ****
************************************
>extern"font",f1
>extern"sportmad.s",stext
>extern"runner",runner
>extern"newmoon.bmap",moon
>extern"newfont",newfont
>extern"mod.trash-collector",mt_data
OpenLibrary= -552
allocmem= -198
freemem= -210
disable= -120
enable= -126
sclines=15
*****************************************
* *
* Demo start *
* *
*****************************************
OpenLibs:
move.l 4.w,a6
jsr disable(a6) ;multitasking off
jsr mt_init
bsr doline
bsr dotausta
move.l #75000,d0 ;amount for planes
move.l #$10002,d1 ;chip & clear
jsr allocmem(a6)
move.l d0,display
beq memexit
move.l #14200,d0 ;scroll display
move.l #$10002,d1
jsr allocmem(a6)
move.l d0,newdisp
beq newmemexit
clr.l d0 ;get old copperpos
lea GfxLibName,a1
jsr OpenLibrary(a6)
move.l d0,a0
move.l $26(a0),oldcop
move.l #copperlist,$dff080
bsr initplanes
bsr initwater
bsr donewsini
bsr initmoon
bsr dosky
bsr initsprite
move.l newdisp(pc),a0
lea 2408(a0),a0
move.l a0,scdisplay
jsr tmakefonts
bsr tinitpointers
bsr initlist
move.l #text,textpointer
move.l display(pc),a0
add.l #59996,a0
move.l a0,start
lea 1152(a0),a0
move.l a0,textstart
move.b $dff00a,old
move.b $dff00b,xold
move.w #$8400,$dff096
move.w #-1,startfade
ffe: cmp.b #$80,$dff006
bne.s ffe
*****************************************
* *
* Main loop *
* *
*****************************************
WaitMouseButton:
move.w #$ef,d0
f: ;move.w #$f00,$dff180
cmp.b $dff006,d0
bcc f
bsr hscroll
bsr vmutka
bsr print
bsr stars
bsr mouse
bsr putmad
bsr keys
bsr tprint
bsr effects
bsr fade
jsr mt_music
btst #6,$bfe001
bne.s WaitMouseButton
*****************************************
* *
* Exit *
* *
*****************************************
Exit:
move.l oldcop(pc),$dff080
move.l 4.w,a6
move.l #14200,d0
move.l newdisp,a1
jsr freemem(a6)
newmemexit:
move.l 4.w,a6
move.l #75000,d0
move.l display,a1
jsr freemem(a6)
memexit:
move.w #$8020,$dff096
jsr mt_end
move.l 4.w,a6
jsr enable(a6)
moveq #0,d0
rts ;return to cli
;dont worry,
;-) ;be happy...
*****************************************
* *
* Fade sinus colors *
* *
*****************************************
fade:
tst.w startfade
bne.s monster
rts
monster:
moveq #15,d0
moveq #15,d1
and.w cend(pc),d0
and.w cstart(pc),d1
sub.w d1,d0
muls cn(pc),d0
divs cf(pc),d0
moveq #15,d1
and.w cstart(pc),d1
add.w d1,d0 ;b
move.w d0,b
move.w #$f0,d0
move.w d0,d1
and.w cend(pc),d0
and.w cstart(pc),d1
lsr.w #4,d0
lsr.w #4,d1
sub.w d1,d0
muls cn(pc),d0
divs cf(pc),d0
lsl.w #4,d0
move.w #$f0,d1
and.w cstart(pc),d1
add.w d1,d0 ;g
move.w d0,g
move.w #$f00,d0
move.w d0,d1
and.w cend(pc),d0
and.w cstart(pc),d1
lsr.w #8,d0
lsr.w #8,d1
sub.w d1,d0
muls cn(pc),d0
divs cf(pc),d0
lsl.w #8,d0
move.w #$f00,d1
and.w cstart(pc),d1
add.w d1,d0 ;r
move.w d0,r
;
move.w r(pc),d0
or.w g(pc),d0
or.w b(pc),d0
move.w d0,cnow
;
move.w cf(pc),d0
cmp.w cn(pc),d0
bne.s eehh
clr.w cn
clr.w startfade
eehh:
addq.w #1,cn
;
move.w cnow(pc),d1
lea fcolor+2(pc),a1
move.w d1,(a1)
move.w d1,4(a1)
move.w d1,8(a1)
move.w d1,12(a1)
move.w d1,16(a1)
move.w d1,20(a1)
move.w d1,24(a1)
move.w d1,28(a1)
move.w d1,32(a1)
move.w d1,36(a1)
rts
cn: dc.w 0
cf: dc.w 30
r: dc.w 0
g: dc.w 0
b: dc.w 0
cnow: dc.w 0
cstart: dc.w $f00
cend: dc.w $00f
*****************************************
* *
* Set source colors *
* *
*****************************************
effects:
move.w helpmode(pc),d0
beq.s nohell
move.w #$5000,scplane
subq.w #1,d0
beq.s col2
sourcecol=$ff
col1:
lea scol,a0
move.w #sourcecol,(a0)
move.w #$fff,4(a0)
move.w #$333,8(a0)
move.w #$555,12(a0)
move.w #$777,16(a0)
move.w #$aaa,20(a0)
move.w #$ccc,24(a0)
move.w #$fff,28(a0)
rts
col2:
lea scol,a0
move.w #sourcecol,(a0)
move.w #sourcecol,4(a0)
move.w #sourcecol,8(a0)
move.w #sourcecol,12(a0)
move.w #sourcecol,16(a0)
move.w #sourcecol,20(a0)
move.w #sourcecol,24(a0)
move.w #sourcecol,28(a0)
rts
nohell: move.w #-1,pressed
lea scol,a0
move.w #$f,(a0)
move.w #$fff,4(a0)
move.w #$333,8(a0)
move.w #$555,12(a0)
move.w #$777,16(a0)
move.w #$aaa,20(a0)
move.w #$ccc,24(a0)
move.w #$fff,28(a0)
move.w #$4000,scplane
rts
pressed:dc.w 0
*****************************************
* *
* Blit runner to screen *
* *
*****************************************
putmad:
tst.w waitrunner
beq.s doit
rts
doit:
lea runner,a0
move.l display(pc),a1
lea 5496(a1),a1
addq.w #2,rx
cmp.w #400,rx
bne.s no400
clr.w rx
move.w #-1,waitrunner
no400:
move.w rx(pc),d0
lsr.w #3,d0
add.w d0,a1
move.w rx(pc),d0
lsr.w #3,d0
and.w #7,d0
mulu #486,d0
add.w d0,a0
moveq #$f,d0
and.w rx(pc),d0
ror.w #4,d0
or.w #$09f0,d0
lea $dff000,a6
bsr waitblit
bsr waitblit
move.l a0,$50(a6) ;A
move.l a1,$54(a6) ;D
move.w d0,$40(a6) ;bltcon 0
move.w #00,$42(a6) ; 1
move.w #00,$64(a6) ;A mod
move.w #44,$66(a6) ;D mod
move.l #-1,$44(a6) ;F,L Mask
move.w #27*64+3,$58(a6);start
lea 14200(a1),a1
bsr waitblit
bsr waitblit
move.l a1,$54(a6) ;D
move.w #27*64+3,$58(a6);start
lea 14200(a1),a1
bsr waitblit
bsr waitblit
move.l a1,$54(a6) ;D
move.w #27*64+3,$58(a6);start
rts
waitblit:
btst #14,$dff002
bne.s waitblit
rts
newdisp: dc.l 0
scdisplay: dc.l 0
old: dc.w 0
xold: dc.w 0
holdx: dc.w $48
holdy: dc.w $ffb0
rx: dc.w 0
waitrunner: dc.w -1
*****************************************
* *
* Read mouse, vittu se on rotta ! *
* *
*****************************************
mouse:
move.b old(pc),d0
move.b $dff00a,d1
move.b d1,old
sub.b d0,d1
ext.w d1
add.w d1,holdx
move.w holdx(pc),d0
asr.w #3,d0
ext.l d0
move.l d0,tspeed
move.b xold(pc),d0
move.b $dff00b,d1
move.b d1,xold
sub.b d0,d1
ext.w d1
add.w d1,holdy
move.w holdy(pc),d0
asr.w #3,d0
ext.l d0
move.l d0,qspeed
btst #10,$dff016
bne.s normp
move.w #$48,holdx
move.w #$ffb4,holdy
move.l #9,tspeed
move.l #-10,qspeed
normp:
rts
*****************************************
* *
* Initialization *
* *
*****************************************
initmoon:
lea moon(pc),a0
move.l display(pc),a1
lea 380(a1),a1
moveq #2,d0
ml1: move.l a1,a2
moveq #98,d1
ml2: moveq #13,d2
ml3: move.b (a0)+,(a2)+
dbf d2,ml3
lea 36(a2),a2
dbf d1,ml2
lea 14200(a1),a1
dbf d0,ml1
rts
initwater:
lea sini(pc),a0
lea water(pc),a1
move.w #255,d7
iloop: move.b (a0)+,d0
ext.w d0
asr.w #3,d0
muls #50,d0
addq.w #4,d0
move.w d0,(a1)+
dbf d7,iloop
rts
donewsini:
lea sini(pc),a0
lea newsini(pc),a1
move.l #255,d7
siloop: move.b (a0)+,d0
ext.w d0
asr.w #2,d0
muls #50,d0
sub.w #11000,d0
move.w d0,(a1)+
dbf d7,siloop
rts
*****************************************
* *
* Water effect *
* *
*****************************************
;;
vmutka:
lea eka+6(pc),a3
move.l qspeed(pc),d0
add.l d0,alku
move.l alku(pc),d4
move.l tspeed(pc),d3
lea water(pc),a0
add.w d3,d3
move.l #16,a4
move.w #$1fe,d6;mask
moveq #0,d2 ;last
moveq #96,d7
moveq #64,d5
doloop:
add.w d3,d4
move.w d4,d0
and.w d6,d0 ;mask
move.w (a0,d0.w),d0
move.w d0,d1
sub.w d2,d0
move.w d0,(a3) ;modulo
move.w d0,4(a3);modulo
add.l a4,a3 ;next copperl pos
add.w d7,d1 ;next row
add.w d3,d4
move.w d4,d0
and.w d6,d0 ;mask
move.w (a0,d0.w),d0
move.w d0,d2
sub.w d1,d0
move.w d0,(a3) ;modulo
move.w d0,4(a3);modulo
add.l a4,a3 ;next copperl pos
add.w d7,d2 ;next row
dbf d5,doloop
add.w d3,d4 ;131. time
move.w d4,d0
and.w d6,d0 ;mask
move.w (a0,d0.w),d0
move.w d0,d1
sub.w d2,d0
move.w d0,(a3) ;modulo
move.w d0,4(a3);modulo
rts
water: blk.w 256,0
alku: dc.l 0
temp: dc.l 0
qspeed: dc.l -10
tspeed: dc.l 9
*****************************************
* *
* Initialization *
* *
*****************************************
doline:
lea eka(pc),a0
move.b #$af,d1
moveq #79,d0
late: move.b d1,(a0)
addq.b #1,d1
lea 16(a0),a0
dbf d0,late
rts
dotausta:
lea tausta(pc),a0
move.b #$9b,d7
moveq #19,d0
adjl: move.b d7,(a0)
addq.b #1,d7
lea 8(a0),a0
dbf d0,adjl
lea colors(pc),a0
lea tausta+6(pc),a1
moveq #19,d0
adj2: move.w (a0)+,(a1)
lea 8(a1),a1
dbf d0,adj2
lea eka+14,a1
move.w #130,d0
adj3: move.w (a0)+,(a1)
lea 16(a1),a1
dbf d0,adj3
move.w #$3000,planes
rts
*****************************************
* *
* Sinus scroller *
* *
*****************************************
;;
next: MACRO
subq.b #1,d3
move.w d3,d0
add.w d0,d0
move.w (a2,d0.w),d0
lea (a0,d0.w),a1
ENDM
blit0: MACRO
subq.b #1,d3
move.w d3,d0
add.w d0,d0
move.w (a2,d0.w),d0
lea (a0,d0.w),a1
move.l a0,d0
sub.l d4,d0
sub.l d4,a1
move.l d0,(a4) ;A
move.l a1,(a5) ;D
move.w #$09f0,-$10(a4) ;$40 bltcon 0
move.w #$c000,-$c(a4) ;$44 fmask
move.w #43*64+1,(a3) ;start
ENDM
blit1: MACRO
move.l a0,(a4) ;A
move.l a1,(a6) ;B
move.l a1,(a5) ;D
move.w d2,-$10(a4) ;$40 d=a or b
move.w #$3000,-$c(a4) ;$44 fmask
move.w d6,(a3) ;start
ENDM
blit2: MACRO
move.l a0,(a4) ;A
move.l a1,(a6) ;B
move.l a1,(a5) ;D
move.w #?1,-$c(a4) ;$44 fmask
move.w d6,(a3) ;start
ENDM
;;
hscroll: ;sinus scroll
lea $dff000,a6
move.w #-1,$46(a6) ;lmask
move.l #$300030,$64(a6);A&D mod
move.w #$30,$62(a6) ;B mod
move.w #$0dfc,d2 ;d=a or b
move.l #600,d4 ;cls area
move.w #0,$dff042 ;bltcon 1
addq.b #2,st
move.b st(pc),sin
move.b sin(pc),d3
and.w #$ff,d3
lea newsini(pc),a2
lea $58(a6),a3 ;blt size&start
lea $50(a6),a4 ;a prt
lea $54(a6),a5 ;d prt
lea $4c(a6),a6 ;b prt
move.l start(pc),a0 ;start
lea -46(a0),a0
move.w #24*64+1,d6 ;size
moveq #22,d5
hloop: blit0
next
blit1
next
blit2 $0c00
next
blit2 $0300
next
blit2 $00c0
next
blit2 $0030
next
blit2 $000c
next
blit2 $0003
addq.l #2,a0
dbf d5,hloop
rts
st: dc.l 0
hstart: dc.l 0
sin: dc.l 0
startfade: dc.w 0
*****************************************
* *
* Scroller from 1988 *
* *
*****************************************
print:
tst.b textpause
beq.s tcont
subq.b #1,textpause
tst.b textpause
bne.s tcont2
move.l textpointer(pc),a0
cmp.b #'p',(a0)
beq.s tcont2
move.l lastspeed(pc),d0
move.l d0,textspeed
tcont2:
rts
tcont:
move.l textpointer(pc),a0
cmp.b #'p',(a0)
bne.s jmcont1
move.b #50,textpause
clr.l textspeed
addq.l #1,textpointer
rts
jmcont1:
cmp.b #'r',(a0)
bne jmcont2
moveq #0,d0
moveq #0,d1
move.b 1(a0),d0
cmp.b #'9',d0
bhi.s hex
sub.b #'0',d0
bra.s nohex
hex: sub.b #87,d0
nohex: move.b d0,d1
lsl.l #8,d1
moveq #0,d0
move.b 2(a0),d0
cmp.b #'9',d0
bhi.s hex2
sub.b #'0',d0
bra.s nohex2
hex2: sub.b #87,d0
nohex2: lsl.l #4,d0
or.b d0,d1
clr.l d0
move.b 3(a0),d0
cmp.b #'9',d0
bhi.s hex3
sub.b #'0',d0
bra.s nohex3
hex3: sub.b #87,d0
nohex3: or.b d0,d1
move.w cend(pc),cstart
move.w d1,cend ;color end
move.w #-1,startfade
addq.l #4,textpointer
bra print
jmcont2:
cmp.b #'a',(a0)
bne.s jmconta
move.l #1,textspeed
move.l #1,lastspeed
addq.l #1,textpointer
bra print
jmconta:
cmp.b #'b',(a0)
bne.s jmcontb
move.l #2,textspeed
move.l #2,lastspeed
addq.l #1,textpointer
bra print
jmcontb:
cmp.b #'c',(a0)
bne.s jmcontc
move.l #3,textspeed
move.l #3,lastspeed
addq.l #1,textpointer
bra print
jmcontc:
cmp.b #'d',(a0)
bne.s jmcontd
move.l #4,textspeed
move.l #4,lastspeed
addq.l #1,textpointer
bra print
jmcontd:
cmp.b #'e',(a0)
bne.s jmconte
move.l #6,textspeed
move.l #6,lastspeed
addq.l #1,textpointer
bra print
jmconte:
cmp.b #'f',(a0)
bne.s jmcontf
move.l #12,textspeed
move.l #12,lastspeed
addq.l #1,textpointer
bra print
jmcontf:
cmp.b #'z',(a0)
bne.s jmcontz
clr.w waitrunner
addq.l #1,textpointer
bra print
jmcontz:
move.l textspeed(pc),d0
add.l d0,textcount
cmp.l #23,textcount
bls pexit
clr.l textcount
cmp.b #$ff,(a0)
bne.s noend
lea text(pc),a0
move.l a0,textpointer
noend:
moveq #0,d0
move.b (a0),d0
addq.l #1,textpointer
lea newfont(pc),a2
sub.w #32,d0
bgt.s tcont22
moveq #0,d0
tcont22:
mulu #96,d0
add.l d0,a2
move.l start(pc),a0
lea $dff000,a1
wb1: btst #14,2(a1)
bne.s wb1
move.l a2,$50(a1) ;A
move.l a0,$54(a1) ;D
move.w #$09f0,$40(a1) ;bltcon 0
move.w #00,$42(a1) ; 1
move.w #00,$64(a1) ;A mod
move.w #46,$66(a1) ;D mod
move.l #-1,$44(a1) ;F,L Mask
move.w #24*64+2,$58(a1);start
pexit:
move.l textspeed(pc),d0
ror.w #4,d0
or.w #$09f0,d0
move.l textstart(pc),a0
lea $dff000,a1
wb2: btst #14,2(a1)
bne.s wb2
move.l a0,$50(a1) ;A
move.l a0,$54(a1) ;D
move.w d0,$40(a1) ;bltcon 0
move.w #2,$42(a1) ; 1
move.l #0,$64(a1) ;A,D mod
move.l #$fff00fff,$44(a1);F,L Mask
move.w #24*64+25,$58(a1) ;start
rts
start: dc.l 0
textstart: dc.l 0
textpointer: dc.l 0
textpause: dc.l 0
textspeed: dc.l 2
lastspeed: dc.l 2
textcount: dc.l 0
;--------------------------------------
text:
DC.B " drfff "
DC.B " COMPLEX PRESENTS ANOTHER DEMO "
DC.B "CALLED r5d3'SPORTMAD' pppc "
DC.B "THIS IS PROPABLY THE FIRST DEMO "
DC.B "FEATURING ACTUAL SOURCE CODE OF "
DC.B "THE DEMO ITSELF ! re52 "
DC.B "USE CURSOR KEYS TO SCROLL AROUND "
DC.B " SOURCE AND PRESS HELP TO r0afGET "
DC.B "SOMEz EFFECTS... TRY ALSO YOUR "
DC.B "MOUSE, RIGHT ONE FOR DEFAULT "
DC.B "MOVEMENT. THIS IS A NEW VERSION "
DC.B "OF THE OVERLOAD'S MOONLIGHTNING "
DC.B "DEMO, zRELEASED AT MARCH 1988,"
DC.B "BEFORE THE INFAMOUS LAHTI-PARTY. r999"
DC.B "PARTYGREETINGS GO TO ALL COMPLEX "
DC.B "MEMBERS,rec0 MEXICAN BOYS "
DC.B " JA SIINAHAN NE SITTEN"
DC.B " TARKEIMMAT OLIKIN . z"
DC.B " SIGNED ARNOLD , WE ARE HUNGRY ! "
DC.B $ff
*****************************************
* *
* Pure sinus data! *
* *
*****************************************
even
sini:
dc.b 0,3,6,9,12,15,18,21,24
dc.b 27,30,34,37,39,42,45,48,51,54,57
dc.b 60,62,65,68,70,73,75,78,80
dc.b 83,85,87,90,92,94,96,98,100
dc.b 102,104,105,107,109,110,112
dc.b 113,115,116,117,118,119,120
dc.b 121,122,123,124,124,125,125
dc.b 126,126,126,126,126,126,126
dc.b 126,126,126,125,125,124,124
dc.b 123,122,122,121,120,119,118
dc.b 116,115,114,112,111,109,108
dc.b 106,104,103,101,99,97,95,93
dc.b 91,88,86,84,82,79,77,74,72
dc.b 69,66,64,61,58,55,53,50,47,44
dc.b 41,38,35,32,29,26,23,20,17,14
dc.b 10,7,4,1,-2,-5,-8,-11,-15,-18
dc.b -21,-24,-27,-30,-33,-36,-39
dc.b -42,-45,-48,-51,-54,-56,-59
dc.b -62,-65,-67,-70,-73,-75,-78
dc.b -80,-83,-85,-87,-89,-92,-94
dc.b -96,-98,-100,-102,-104,-105
dc.b -107,-109,-110,-112,-113
dc.b -115,-116,-117,-119,-120,-121
dc.b -122,-123,-123,-124,-125
dc.b -125,-126,-126,-127,-127,-127
dc.b -127,-127,-127,-127,-127
dc.b -127,-127,-127,-126,-126,-125
dc.b -125,-124,-123,-122,-121
dc.b -120,-119,-118,-117,-116,-114
dc.b -113,-111,-110,-108,-106
dc.b -105,-103,-101,-99,-97,-95,-93
dc.b -91,-88,-86,-84,-81,-79
dc.b -76,-74,-71,-69,-66,-63,-61
dc.b -58,-55,-52,-49,-46,-43,-41
dc.b -38,-35,-32,-28,-25,-22,-19
dc.b -16,-13,-10,-7,-4,-1
even
*****************************************
* *
* Initialize copperlist *
* *
*****************************************
initplanes:
lea hi1+2(pc),a0 ;clist
move.l display(pc),d7
move.w d7,4(a0)
swap d7
move.w d7,(a0)
swap d7
add.l #14200,d7
move.w d7,12(a0)
swap d7
move.w d7,8(a0)
swap d7
add.l #14200,d7
move.w d7,20(a0)
swap d7
move.w d7,16(a0)
swap d7
add.l #14200,d7
move.w d7,28(a0)
swap d7
move.w d7,24(a0)
move.l newdisp(pc),d7
add.l #2004,d7
move.w d7,36(a0)
swap d7
move.w d7,32(a0)
rts
*****************************************
* *
* Copperlist *
* *
*****************************************
l: MACRO ;copperlist macro
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
dc.w $4001,$ff00,$108,4,$10a,4,$180,0
ENDM
c: MACRO ;copperlist macro
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
dc.w $4001,$ff00,$180,$f0
ENDM
; R S M M M
; 5 4 3 2 1
; | | | | |
; 00 $180 0 0 0 0 0 M
; 01 $182 0 0 0 0 1 M
; 02 $184 0 0 0 1 0 M
; 03 $186 0 0 0 1 1 M
; 04 $188 0 0 1 0 0 M
; 05 $18a 0 0 1 0 1 M
; 06 $18c 0 0 1 1 0 M
; 07 $18e 0 0 1 1 1 M
; 5 4 3 2 1
; | | | | |
; 08 $190 0 1 0 0 0
; 09 $192 0 1 0 0 1
; 10 $194 0 1 0 1 0
; 11 $196 0 1 0 1 1
; 12 $198 0 1 1 0 0
; 13 $19a 0 1 1 0 1
; 14 $19c 0 1 1 1 0
; 15 $19e 0 1 1 1 1
; 5 4 3 2 1
; | | | | |
; 16 $1a0 1 0 0 0 0
; 17 $1a2 1 0 0 0 1
; 18 $1a4 1 0 0 1 0
; 19 $1a6 1 0 0 1 1
; 20 $1a8 1 0 1 0 0
; 21 $1aa 1 0 1 0 1
; 22 $1ac 1 0 1 1 0
; 23 $1ae 1 0 1 1 1
; 5 4 3 2 1
; | | | | |
; 24 $1b0 1 1 0 0 0
; 25 $1b2 1 1 0 0 1
; 26 $1b4 1 1 0 1 0
; 27 $1b6 1 1 0 1 1
; 28 $1b8 1 1 1 0 0
; 29 $1ba 1 1 1 0 1
; 30 $1bc 1 1 1 1 0
; 31 $1be 1 1 1 1 1
copperlist:
hi1: dc.w $e0,0,$e2,0,$e4,0,$e6,0
dc.w $e8,0,$ea,0,$ec,0,$ee,0
dc.w $f0,0,$f2,0
;bitplane
;pointers
shi0: 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
;sprite pointers
dc.w $008e,$1c81 ;diwstart
dc.w $0090,$37e1 ;diwstop
dc.w $0092,$0028 ;dffstart
dc.w $0094,$00e2 ;dffstop
dc.w $0108,$0004 ;modulos
dc.w $010a,$0004
dc.w $0100
scplane:dc.w $5000 ;bitplanes
dc.w $0104,$0000
dc.w $0180,$0000 ;colors
dc.w $0182,$0111
dc.w $0184,$0333
dc.w $0186,$0555
dc.w $0188,$0777
dc.w $018a,$0aaa
dc.w $018c,$0ccc
dc.w $018e,$0fff
dc.w $01a0,
scol: dc.w $0004 ;teksti
dc.w $01a2,$0fff ;stars
dc.w $01a4,$0333
dc.w $01a6,$0555
dc.w $01a8,$0777
dc.w $01aa,$0aaa
dc.w $01ac,$0ccc
dc.w $01ae,$0fff
dc.w $01b0,$0000
dc.w $01b2,$0111
dc.w $01b4,$0333
dc.w $01b6,$0555
dc.w $01b8,$0777
dc.w $01ba,$0aaa
dc.w $01bc,$0ccc
dc.w $01be,$0fff
dc.w $2401,$ff00
dc.w $01a0,$22
dc.w $2501,$ff00
dc.w $01a0,$44
dc.w $2601,$ff00
dc.w $01a0,$66
dc.w $2701,$ff00
dc.w $01a0,$88
dc.w $2801,$ff00
dc.w $01a0,$aa
dc.w $2901,$ff00
dc.w $01a0,$cc
dc.w $2a01,$ff00
dc.w $01a0,$ee
fcolor: dc.w $0190,$0ff0 ;yla
dc.w $0192,$0ff0 ;main
dc.w $0194,$0ff0
dc.w $0196,$0ff0
dc.w $0198,$0ff0
dc.w $019a,$0ff0
dc.w $019c,$0ff0
dc.w $019e,$0ff0
dc.w $01b0,$0ff0
dc.w $01b2,$0ff0
;reserved till here!
;awful grammar Arnie! - RB
dc.w $9601,$ff00
dc.w $01a0,$cc
dc.w $9701,$ff00
dc.w $01a0,$aa
dc.w $9801,$ff00
dc.w $01a0,$88
dc.w $9901,$ff00
dc.w $01a0,$66
dc.w $9a01,$ff00
dc.w $01a0,$44
dc.w $9b01,$ff00
dc.w $01a0,$22
dc.w $9c01,$ff00
dc.w $01a0,$00
dc.w $9b01,$ff00
tausta:
c
c
dc.w $0100,$4000 ;4 bitplanes
eka: l
l
l
l
l
l
l
l
dc.w $ff01,$ff00,$108,4,$10a,4,$180,0
dc.w $ffdd,$fffe,$108,4,$10a,4,$0100
planes: dc.w 4
dc.w $0101,$ff00,$108,4,$10a,4,$180,0
dc.w $0201,$ff00,$108,4,$10a,4,$180,0
dc.w $0301,$ff00,$108,4,$10a,4,$180,0
dc.w $0401,$ff00,$108,4,$10a,4,$180,0
dc.w $0501,$ff00,$108,4,$10a,4,$180,0
dc.w $0601,$ff00,$108,4,$10a,4,$180,0
dc.w $0701,$ff00,$108,4,$10a,4,$180,0
dc.w $0801,$ff00,$108,4,$10a,4,$180,0
dc.w $0901,$ff00,$108,4,$10a,4,$180,0
dc.w $0a01,$ff00,$108,4,$10a,4,$180,0
dc.w $0b01,$ff00,$108,4,$10a,4,$180,0
dc.w $0c01,$ff00,$108,4,$10a,4,$180,0
dc.w $0d01,$ff00,$108,4,$10a,4,$180,0
dc.w $0e01,$ff00,$108,4,$10a,4,$180,0
dc.w $0f01,$ff00,$108,4,$10a,4,$180,0
dc.w $1001,$ff00,$108,4,$10a,4,$180,0
dc.w $1101,$ff00,$108,4,$10a,4,$180,0
dc.w $1201,$ff00,$108,4,$10a,4,$180,0
dc.w $1301,$ff00,$108,4,$10a,4,$180,0
dc.w $1401,$ff00,$108,4,$10a,4,$180,0
dc.w $1501,$ff00,$108,4,$10a,4,$180,0
dc.w $1601,$ff00,$108,4,$10a,4,$180,0
dc.w $1701,$ff00,$108,4,$10a,4,$180,0
dc.w $1801,$ff00,$108,4,$10a,4,$180,0
dc.w $1901,$ff00,$108,4,$10a,4,$180,0
dc.w $1a01,$ff00,$108,4,$10a,4,$180,0
dc.w $1b01,$ff00,$108,4,$10a,4,$180,0
dc.w $1c01,$ff00,$108,4,$10a,4,$180,0
dc.w $1d01,$ff00,$108,4,$10a,4,$180,0
dc.w $1e01,$ff00,$108,4,$10a,4,$180,0
dc.w $1f01,$ff00,$108,4,$10a,4,$180,0
dc.w $2001,$ff00,$108,4,$10a,4,$180,0
dc.w $2101,$ff00,$108,4,$10a,4,$180,0
dc.w $2201,$ff00,$108,4,$10a,4,$180,0
dc.w $2301,$ff00,$108,4,$10a,4,$180,0
dc.w $2401,$ff00,$108,4,$10a,4,$180,0
dc.w $2501,$ff00,$108,4,$10a,4,$180,0
dc.w $2601,$ff00,$108,4,$10a,4,$180,0
dc.w $2701,$ff00,$108,4,$10a,4,$180,0
dc.w $2801,$ff00,$108,4,$10a,4,$180,0
dc.w $2901,$ff00,$108,4,$10a,4,$180,0
dc.w $2a01,$ff00,$108,4,$10a,4,$180,0
dc.w $2b01,$ff00,$108,4,$10a,4,$180,0
dc.w $2c01,$ff00,$108,4,$10a,4,$180,0
dc.w $2d01,$ff00,$108,4,$10a,4,$180,0
dc.w $2e01,$ff00,$108,4,$10a,4,$180,0
dc.w $2f01,$ff00,$108,4,$10a,4,$180,0
dc.w $3001,$ff00,$108,4,$10a,4,$180,0
dc.w $3101,$ff00,$108,4,$10a,4,$180,0
dc.w $0180,$f
dc.w $ffff,$fffe ;end clist
*****************************************
* *
* Variables and constants *
* *
*****************************************
GfxLibName:
dc.b 'graphics.library',0
even
oldcop: dc.l 0
display: dc.l 0
colors:
;blk.w 60,0 ;upper part (sky)
blk.w 02,$0000 ;lower part (horizon)
blk.w 1,$0101
blk.w 1,$0100
blk.w 03,$0101
blk.w 1,$0102
blk.w 1,$0101
blk.w 04,$0102
blk.w 1,$0103
blk.w 1,$0102
blk.w 05,$0103
blk.w 1,$0104
blk.w 1,$0103
blk.w 06,$0104
blk.w 1,$0105
blk.w 1,$0104
blk.w 07,$0105
blk.w 1,$0106
blk.w 1,$0105
blk.w 08,$0106
blk.w 1,$0007
blk.w 1,$0106
blk.w 09,$0007
blk.w 1,$0008
blk.w 1,$0007
blk.w 10,$0008
blk.w 1,$0009
blk.w 1,$0008
blk.w 11,$0009
blk.w 1,$000a
blk.w 1,$0009
blk.w 12,$000a
blk.w 1,$000b
blk.w 1,$000a
blk.w 13,$000b
blk.w 1,$000c
blk.w 1,$000b
blk.w 14,$000c
blk.w 1,$000d
blk.w 1,$000c
blk.w 15,$000d
blk.w 1,$000e
blk.w 1,$000d
blk.w 16,$000e
blk.w 1,$000f
blk.w 1,$000e
blk.w 17,$000f
blk.w 30,$f ;end of colors
newfont: blk.b 5800,0
moon: blk.b 4158,0
newsini: blk.w 256,1
*****************************************
* *
* Starfield *
* *
*****************************************
stars:
lea sprite0+1(pc),a0
subq.b #1,(a0)
subq.b #2,8(a0)
subq.b #3,16(a0)
subq.b #1,24(a0)
subq.b #2,32(a0)
subq.b #3,40(a0)
subq.b #1,48(a0)
subq.b #2,56(a0)
subq.b #3,64(a0)
subq.b #1,72(a0)
subq.b #2,80(a0)
subq.b #3,88(a0)
subq.b #1,96(a0)
subq.b #2,104(a0)
subq.b #3,112(a0)
subq.b #1,120(a0)
subq.b #2,128(a0)
subq.b #3,136(a0)
subq.b #1,144(a0)
subq.b #2,152(a0)
subq.b #3,160(a0)
subq.b #1,168(a0)
subq.b #2,176(a0)
subq.b #3,184(a0)
subq.b #1,192(a0)
subq.b #2,200(a0)
subq.b #3,208(a0)
subq.b #1,216(a0)
subq.b #2,224(a0)
subq.b #3,232(a0)
subq.b #1,240(a0)
subq.b #2,248(a0)
subq.b #3,256(a0)
subq.b #1,264(a0)
subq.b #2,272(a0)
subq.b #3,280(a0)
subq.b #1,288(a0)
subq.b #2,296(a0)
subq.b #3,304(a0)
subq.b #1,312(a0)
subq.b #2,320(a0)
subq.b #3,328(a0)
subq.b #1,336(a0)
subq.b #2,344(a0)
subq.b #3,352(a0)
subq.b #1,360(a0)
subq.b #2,368(a0)
subq.b #3,376(a0)
subq.b #1,384(a0)
subq.b #2,392(a0)
rts
*****************************************
* *
* Sprite initialization *
* *
*****************************************
dosky:
lea sprite0(pc),a0
moveq #0,d2
moveq #$36,d0 ;start y
moveq #49,d1 ;stars
dsl:
add.b $dff006,d2
addq.b #3,lask
add.b lask(pc),d2
move.b d0,(a0)+
move.b d2,(a0)+
addq.b #1,d0
move.b d0,(a0)+
addq.b #1,d0
move.b #$01,(a0)+
move.w #1,(a0)+
move.w #0,(a0)+
dbf d1,dsl
move.l #0,(a0)+
rts
lask: dc.w 0
;---------------------------------------------
sprite0:
blk.b 400,-1
dc.l 0 ;end data
;---------------------------------------------
initsprite:
move.w #$8020,$dff096 ;sprite dma on
lea shi0+2(pc),a0
move.l #sprite0,d7
move.w d7,4(a0)
swap d7
move.w d7,(a0)
addq.l #8,a0
move.l #dummy,d7
moveq #6,d0
spil: move.w d7,4(a0)
swap d7
move.w d7,(a0)
swap d7
addq.l #8,a0
dbf d0,spil
rts
dummy: dc.l 0
*****************************************
* *
* Routines to print source *
* *
*****************************************
x: dc.w 0
y: dc.w 0
prevy: dc.w 0
line: dc.w 0
dir: dc.w 0
yla: dc.l 0
ala: dc.l 0
tinitpointers:
lea stext(pc),a0
move.l a0,yla
moveq #sclines-2,d0
ipl: cmp.b #$0a,(a0)+
bne.s ipl
dbf d0,ipl
move.l a0,ala
rts
*****************************************
* *
* Read keyboard *
* *
*****************************************
repdelay=20
keys:
clr.w dir
btst #3,$dff01f
beq.L nopress
tst.w keydown
beq.s nodd
move.w #repdelay,repeat
nodd:
moveq #0,d0
move.b $bfed01,d0
move.b $bfec01,d0
move.b #$d0,$bfee01
moveq #100,d1
kbp: dbf d1,kbp
move.b #$90,$bfee01
move.w #$08,$dff09c
move.b d0,prevkey
bsr testkey
rts
nopress:
clr.w keyhit
tst.w keydown
beq.s nojee
tst.w repeat
beq.s nojeah
subq.w #1,repeat
rts
nojeah: ;begin repeating
move.w #-1,repon
move.b prevkey(pc),d0
bsr testkey
clr.w repon
nojee:
rts
repon: dc.w 0
prevkey:dc.w 0
repeat: dc.w 0
keydown:dc.w 0
keyhit: dc.w 0
helpmode:dc.w 2
testkey:
clr.w keydown
btst #0,d0
beq.s kkk
move.w #1,keydown
kkk: btst #0,d0
beq nokey
not.b d0
lsr.b #1,d0
;--------------------------
cmp.b #$4c,d0
bne.s no_up ;up
move.w #1,dir
no_up: cmp.b #$4d,d0 ;down
bne.s no_down
move.w #-1,dir
no_down:
;--------------------------
tst.w repon
bne.s nohelp ;no repeat
cmp.b #$5f,d0
bne.s nohelp ;help
addq.w #1,helpmode
cmp.w #3,helpmode
bne.s nohelp
clr.w helpmode
nohelp:
;--------------------------
move.w #-1,keyhit
nokey:
rts
*****************************************
* *
* Scroll source *
* *
*****************************************
tprint:
lea $dff000,a6
move.w #$8400,$96(a6)
move.w dir(pc),d0
bne.s siirto
rts
siirto: tst.w d0
bmi dwn
cmp.w #$9c5,line
blt.s mov_up
rts
mov_up:
move.l scdisplay(pc),a0
wbl: btst #14,2(a6)
bne.s wbl
scok: move.l a0,$54(a6) ;d
lea 400(a0),a0
move.l a0,$50(a6) ;a
move.w #$9f0,$40(a6)
move.w #0,$42(a6)
move.l #-1,$44(a6) ;masks
move.l #$a000a,$64(a6) ;ad mod
move.w #sclines+1*8*64+20,$58(a6);go
addq.w #1,line
move.l yla(pc),a0
l1: cmp.b #$0a,(a0)+
bne.s l1
move.l a0,yla
move.l ala(pc),a0
lff: cmp.b #$0a,(a0)+
bne.s lff
move.l a0,ala
move.l scdisplay(pc),a1
lea sclines*400(a1),a1
bsr cls
move.w #0,x
move.w #sclines-1,y
bsr prtline
rts
dwn: move.l scdisplay(pc),a0
lea sclines-1*400(a0),a0
lea -12(a0),a0
wbl2: btst #14,2(a6)
bne.s wbl2
tst.w line
bne.s dok
rts
dok: move.l a0,$50(a6) ;d
lea 400(a0),a0
move.l a0,$54(a6) ;a
move.w #$9f0,$40(a6)
move.w #2,$42(a6) ;pakki
move.l #-1,$44(a6) ;masks
move.l #$a000a,$64(a6) ;ad mod
move.w #sclines*8*64+20,$58(a6);go
subq.w #1,line
move.l ala(pc),a0
subq.l #1,a0
l2: cmp.b #$0a,-(a0)
bne.s l2
addq.l #1,a0
move.l a0,ala
move.l yla(pc),a0
subq.l #1,a0
l3: cmp.b #$0a,-(a0)
bne.s l3
addq.l #1,a0
move.l a0,yla
move.l scdisplay(pc),a1
lea 400(a1),a1
bsr cls
moveq #0,d0
move.w d0,x
move.w d0,y
bsr prtline
rts
;----------------------------------------
cls: ;clear print area
moveq #0,d0
move.l d0,d1
move.l d0,d2
move.l d0,d3
move.l d0,d4
move.l d0,d5
move.l d0,d6
move.l d0,d7
move.l d0,a2
move.l d0,a3
move.l d0,a4
move.l d0,a5
waitb: btst #14,2(a6)
bne.s waitb
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d7/a2-a5,-(a1)
movem.l d0-d3,-(a1)
rts
;---------------------------------------------
initlist: ;print first listing to screen
clr.w x
clr.w y
lea stext(pc),a0
moveq #sclines-1,d7
pll: bsr prtline
dbf d7,pll
rts
*****************************************
* *
* This prints one line source code *
* *
*****************************************
tempsc: dc.l 0
prtline:
move.l scdisplay(pc),a2
move.w #8*50,d1
mulu y(pc),d1
add.l d1,a2
move.l a2,tempsc ;line address
printline:
moveq #0,d0
move.b (a0)+,d0 ;get char
cmp.b #$0a,d0 ;enter ?
bne.s noent
move.w #0,x
addq.w #1,y
rts
noent: cmp.b #$09,d0 ;tab ?
bne.s notab
move.w x(pc),d1
addq.w #8,d1
and.w #$fff8,d1
move.w d1,x
bra.s printline
notab: sub.w #32,d0
lsl.w #3,d0 ;d0*8
move.l tempsc(pc),a2
move.w x(pc),d2
addq.w #1,x
move.w d2,d1
add.w d2,d2
add.w add_table(pc,d2.w),a2
and.w #3,d1
beq dozero
subq.w #1,d1
beq do_one
subq.w #1,d1
beq do_two
do_three:
lea f6(pc),a1
add.w d0,a1
bsr do_or
bra printline
add_table:
dc.w 00,00,01,02,03,03,04,05,06,06
dc.w 07,08,09,09,10,11,12,12,13,14
dc.w 15,15,16,17,18,18,19,20,21,21
dc.w 22,23,24,24,25,26,27,27,28,29
dc.w 30,30,31,32,33,33,34,35,36,36
dc.w 37,38,39,39,40,41,42,42,43,44
dc.w 45,45,46,47,48,48,49,50,51,51
dc.w 52,53,54,54,55,56,57,57,58,59
do_two:
lea f4(pc),a1
add.w d0,a1
bsr do_or
lea f5(pc),a1
add.w d0,a1
addq.l #1,a2
bsr do_move
bra printline
do_one:
lea f2(pc),a1
add.w d0,a1
bsr do_or
lea f3(pc),a1
add.w d0,a1
addq.l #1,a2
bsr do_move
bra printline
dozero:
lea f1(pc),a1
add.w d0,a1
bsr do_move
bra printline
do_move: ;put font to screen
move.b (a1)+,(a2)
move.b (a1)+,50(a2)
move.b (a1)+,100(a2)
move.b (a1)+,150(a2)
move.b (a1)+,200(a2)
move.b (a1)+,250(a2)
move.b (a1)+,300(a2)
move.b (a1)+,350(a2)
rts
do_or: move.b (a1)+,d1;put font to screen
or.b d1,(a2)
move.b (a1)+,d1
or.b d1,50(a2)
move.b (a1)+,d1
or.b d1,100(a2)
move.b (a1)+,d1
or.b d1,150(a2)
move.b (a1)+,d1
or.b d1,200(a2)
move.b (a1)+,d1
or.b d1,250(a2)
move.b (a1)+,d1
or.b d1,300(a2)
move.b (a1)+,d1
or.b d1,350(a2)
rts
;------------------------------------------------
f1: blk.b 960,0
f2: blk.b 960,0
f3: blk.b 960,0
f4: blk.b 960,0
f5: blk.b 960,0
f6: blk.b 960,0
;00000000 11111111 00000000 bytes
;11111100 00001111 11000000 fonts
;| | | | | |
;1 2 3 4 5 6 f123456
*****************************************
* *
* Shif 5 new fonts *
* *
*****************************************
tmakefonts:
lea f1(pc),a0 ;make font 6
lea f6(pc),a1
move.w #959,d7
mf6: move.b (a0)+,d0
lsr.b #2,d0
move.b d0,(a1)+
dbf d7,mf6
lea f1(pc),a0 ;make font 5
lea f5(pc),a1
move.w #959,d7
mf5: move.b (a0)+,d0
lsl.b #4,d0
move.b d0,(a1)+
dbf d7,mf5
lea f1(pc),a0 ;make font 4
lea f4(pc),a1
move.w #959,d7
mf4: move.b (a0)+,d0
lsr.b #4,d0
move.b d0,(a1)+
dbf d7,mf4
lea f1(pc),a0 ;make font 3
lea f3(pc),a1
move.w #959,d7
mf3: move.b (a0)+,d0
lsl.b #2,d0
move.b d0,(a1)+
dbf d7,mf3
lea f1(pc),a0 ;make font 2
lea f2(pc),a1
move.w #959,d7
mf2: move.b (a0)+,d0
lsr.b #6,d0
move.b d0,(a1)+
dbf d7,mf2
rts
dc.w $0a0a
stext: blk.b 39200,$0a
even
runner: blk.b 3888,$00
mt_init:lea mt_data,a0
move.l a0,a1
add.l #$3b8,a1
moveq #$7f,d0
moveq #0,d1
mt_loop:move.l d1,d2
subq.w #1,d0
mt_lop2:move.b (a1)+,d1
cmp.b d2,d1
bgt.s mt_loop
dbf d0,mt_lop2
addq.b #1,d2
lea mt_samplestarts(pc),a1
asl.l #8,d2
asl.l #2,d2
add.l #$43c,d2
add.l a0,d2
move.l d2,a2
moveq #$1e,d0
mt_lop3:clr.l (a2)
move.l a2,(a1)+
moveq #0,d1
move.w 42(a0),d1
asl.l #1,d1
add.l d1,a2
add.l #$1e,a0
dbf d0,mt_lop3
or.b #$2,$bfe001
move.b #$6,mt_speed
clr.w $dff0a8
clr.w $dff0b8
clr.w $dff0c8
clr.w $dff0d8
clr.b mt_songpos
clr.b mt_counter
clr.w mt_pattpos
rts
mt_end: clr.w $dff0a8
clr.w $dff0b8
clr.w $dff0c8
clr.w $dff0d8
move.w #$f,$dff096
rts
mt_music:
movem.l d0-d4/a0-a3/a5-a6,-(a7)
lea mt_data,a0
addq.b #$1,mt_counter
move.b mt_counter,D0
cmp.b mt_speed,D0
blt.s mt_nonew
clr.b mt_counter
bra mt_getnew
mt_nonew:
lea mt_voice1(pc),a6
lea $dff0a0,a5
bsr mt_checkcom
lea mt_voice2(pc),a6
lea $dff0b0,a5
bsr mt_checkcom
lea mt_voice3(pc),a6
lea $dff0c0,a5
bsr mt_checkcom
lea mt_voice4(pc),a6
lea $dff0d0,a5
bsr mt_checkcom
bra mt_endr
mt_arpeggio:
moveq #0,d0
move.b mt_counter,d0
divs #$3,d0
swap d0
cmp.w #$0,d0
beq.s mt_arp2
cmp.w #$2,d0
beq.s mt_arp1
moveq #0,d0
move.b $3(a6),d0
lsr.b #4,d0
bra.s mt_arp3
mt_arp1:moveq #0,d0
move.b $3(a6),d0
and.b #$f,d0
bra.s mt_arp3
mt_arp2:move.w $10(a6),d2
bra.s mt_arp4
mt_arp3:asl.w #1,d0
moveq #0,d1
move.w $10(a6),d1
lea mt_periods(pc),a0
moveq #$24,d7
mt_arploop:
move.w (a0,d0.w),d2
cmp.w (a0),d1
bge.s mt_arp4
addq.l #2,a0
dbf d7,mt_arploop
rts
mt_arp4:move.w d2,$6(a5)
rts
mt_getnew:
lea mt_data,a0
move.l a0,a3
move.l a0,a2
add.l #$c,a3
add.l #$3b8,a2
add.l #$43c,a0
moveq #0,d0
move.l d0,d1
move.b mt_songpos,d0
move.b (a2,d0.w),d1
asl.l #8,d1
asl.l #2,d1
add.w mt_pattpos,d1
clr.w mt_dmacon
lea $dff0a0,a5
lea mt_voice1(pc),a6
bsr.s mt_playvoice
lea $dff0b0,a5
lea mt_voice2(pc),a6
bsr.s mt_playvoice
lea $dff0c0,a5
lea mt_voice3(pc),a6
bsr.s mt_playvoice
lea $dff0d0,a5
lea mt_voice4(pc),a6
bsr.s mt_playvoice
bra mt_setdma
mt_playvoice:
move.l (a0,d1.l),(a6)
addq.l #4,d1
moveq #0,d2
move.b $2(a6),d2
and.b #$f0,d2
lsr.b #4,d2
move.b (a6),d0
and.b #$f0,d0
or.b d0,d2
tst.b d2
beq.s mt_setregs
moveq #0,d3
lea mt_samplestarts(pc),a1
move.l d2,d4
subq.l #$1,d2
asl.l #2,d2
mulu #$1e,d4
move.l (a1,d2.l),$4(a6)
move.w (a3,d4.l),$8(a6)
move.w $2(a3,d4.l),$12(a6)
move.w $4(a3,d4.l),d3
tst.w d3
beq.s mt_noloop
move.l $4(a6),d2
asl.w #1,d3
add.l d3,d2
move.l d2,$a(a6)
move.w $4(a3,d4.l),d0
add.w $6(a3,d4.l),d0
move.w d0,8(a6)
move.w $6(a3,d4.l),$e(a6)
move.w $12(a6),$8(a5)
bra.s mt_setregs
mt_noloop:
move.l $4(a6),d2
add.l d3,d2
move.l d2,$a(a6)
move.w $6(a3,d4.l),$e(a6)
move.w $12(a6),$8(a5)
mt_setregs:
move.w (a6),d0
and.w #$fff,d0
beq mt_checkcom2
move.b $2(a6),d0
and.b #$F,d0
cmp.b #$3,d0
bne.s mt_setperiod
bsr mt_setmyport
bra mt_checkcom2
mt_setperiod:
move.w (a6),$10(a6)
and.w #$fff,$10(a6)
move.w $14(a6),d0
move.w d0,$dff096
clr.b $1b(a6)
move.l $4(a6),(a5)
move.w $8(a6),$4(a5)
move.w $10(a6),d0
and.w #$fff,d0
move.w d0,$6(a5)
move.w $14(a6),d0
or.w d0,mt_dmacon
bra mt_checkcom2
mt_setdma:
move.w #$12c,d0
mt_wait:dbf d0,mt_wait
move.w mt_dmacon,d0
or.w #$8000,d0
move.w d0,$dff096
move.w #$12c,d0
mt_wai2:dbf d0,mt_wai2
lea $dff000,a5
lea mt_voice4(pc),a6
move.l $a(a6),$d0(a5)
move.w $e(a6),$d4(a5)
lea mt_voice3(pc),a6
move.l $a(a6),$c0(a5)
move.w $e(a6),$c4(a5)
lea mt_voice2(pc),a6
move.l $a(a6),$b0(a5)
move.w $e(a6),$b4(a5)
lea mt_voice1(pc),a6
move.l $a(a6),$a0(a5)
move.w $e(a6),$a4(a5)
add.w #$10,mt_pattpos
cmp.w #$400,mt_pattpos
bne.s mt_endr
mt_nex: clr.w mt_pattpos
clr.b mt_break
addq.b #1,mt_songpos
and.b #$7f,mt_songpos
move.b mt_songpos,d1
cmp.b mt_data+$3b6,d1
bne.s mt_endr
move.b mt_data+$3b7,mt_songpos
mt_endr:tst.b mt_break
bne.s mt_nex
movem.l (a7)+,d0-d4/a0-a3/a5-a6
rts
mt_setmyport:
move.w (a6),d2
and.w #$fff,d2
move.w d2,$18(a6)
move.w $10(a6),d0
clr.b $16(a6)
cmp.w d0,d2
beq.s mt_clrport
bge.s mt_rt
move.b #$1,$16(a6)
rts
mt_clrport:
clr.w $18(a6)
mt_rt: rts
mt_myport:
move.b $3(a6),d0
beq.s mt_myslide
move.b d0,$17(a6)
clr.b $3(a6)
mt_myslide:
tst.w $18(a6)
beq.s mt_rt
moveq #0,d0
move.b $17(a6),d0
tst.b $16(a6)
bne.s mt_mysub
add.w d0,$10(a6)
move.w $18(a6),d0
cmp.w $10(a6),d0
bgt.s mt_myok
move.w $18(a6),$10(a6)
clr.w $18(a6)
mt_myok:move.w $10(a6),$6(a5)
rts
mt_mysub:
sub.w d0,$10(a6)
move.w $18(a6),d0
cmp.w $10(a6),d0
blt.s mt_myok
move.w $18(a6),$10(a6)
clr.w $18(a6)
move.w $10(a6),$6(a5)
rts
mt_vib: move.b $3(a6),d0
beq.s mt_vi
move.b d0,$1a(a6)
mt_vi: move.b $1b(a6),d0
lea mt_sin(pc),a4
lsr.w #$2,d0
and.w #$1f,d0
moveq #0,d2
move.b (a4,d0.w),d2
move.b $1a(a6),d0
and.w #$f,d0
mulu d0,d2
lsr.w #$6,d2
move.w $10(a6),d0
tst.b $1b(a6)
bmi.s mt_vibmin
add.w d2,d0
bra.s mt_vib2
mt_vibmin:
sub.w d2,d0
mt_vib2:move.w d0,$6(a5)
move.b $1a(a6),d0
lsr.w #$2,d0
and.w #$3c,d0
add.b d0,$1b(a6)
rts
mt_nop: move.w $10(a6),$6(a5)
rts
mt_checkcom:
move.w $2(a6),d0
and.w #$fff,d0
beq.s mt_nop
move.b $2(a6),d0
and.b #$f,d0
tst.b d0
beq mt_arpeggio
cmp.b #$1,d0
beq.s mt_portup
cmp.b #$2,d0
beq mt_portdown
cmp.b #$3,d0
beq mt_myport
cmp.b #$4,d0
beq mt_vib
move.w $10(a6),$6(a5)
cmp.b #$a,d0
beq.s mt_volslide
rts
mt_volslide:
moveq #0,d0
move.b $3(a6),d0
lsr.b #4,d0
tst.b d0
beq.s mt_voldown
add.w d0,$12(a6)
cmp.w #$40,$12(a6)
bmi.s mt_vol2
move.w #$40,$12(a6)
mt_vol2:move.w $12(a6),$8(a5)
rts
mt_voldown:
moveq #0,d0
move.b $3(a6),d0
and.b #$f,d0
sub.w d0,$12(a6)
bpl.s mt_vol3
clr.w $12(a6)
mt_vol3:move.w $12(a6),$8(a5)
rts
mt_portup:
moveq #0,d0
move.b $3(a6),d0
sub.w d0,$10(a6)
move.w $10(a6),d0
and.w #$fff,d0
cmp.w #$71,d0
bpl.s mt_por2
and.w #$f000,$10(a6)
or.w #$71,$10(a6)
mt_por2:move.w $10(a6),d0
and.w #$fff,d0
move.w d0,$6(a5)
rts
mt_portdown:
clr.w d0
move.b $3(a6),d0
add.w d0,$10(a6)
move.w $10(a6),d0
and.w #$fff,d0
cmp.w #$358,d0
bmi.s mt_por3
and.w #$f000,$10(a6)
or.w #$358,$10(a6)
mt_por3:move.w $10(a6),d0
and.w #$fff,d0
move.w d0,$6(a5)
rts
mt_checkcom2:
move.b $2(a6),d0
and.b #$f,d0
cmp.b #$e,d0
beq.s mt_setfilt
cmp.b #$d,d0
beq.s mt_pattbreak
cmp.b #$b,d0
beq.s mt_posjmp
cmp.b #$c,d0
beq.s mt_setvol
cmp.b #$f,d0
beq.s mt_setspeed
rts
mt_setfilt:
move.b $3(a6),d0
and.b #$1,d0
asl.b #$1,d0
and.b #$fd,$bfe001
or.b d0,$bfe001
rts
mt_pattbreak:
not.b mt_break
rts
mt_posjmp:
move.b $3(a6),d0
subq.b #$1,d0
move.b d0,mt_songpos
not.b mt_break
rts
mt_setvol:
cmp.b #$40,$3(a6)
ble.s mt_vol4
move.b #$40,$3(a6)
mt_vol4:move.b $3(a6),$8(a5)
rts
mt_setspeed:
cmp.b #$1f,$3(a6)
ble.s mt_sets
move.b #$1f,$3(a6)
mt_sets:move.b $3(a6),d0
beq.s mt_rts2
move.b d0,mt_speed
clr.b mt_counter
mt_rts2:rts
mt_sin:
dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
mt_periods:
dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
dc.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
dc.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
dc.w $007f,$0078,$0071,$0000,$0000
mt_speed: dc.b $6
mt_songpos: dc.b $0
mt_pattpos: dc.w $0
mt_counter: dc.b $0
mt_break: dc.b $0
mt_dmacon: dc.w $0
mt_samplestarts:blk.l $1f,0
mt_voice1: blk.w 10,0
dc.w $1
blk.w 3,0
mt_voice2: blk.w 10,0
dc.w $2
blk.w 3,0
mt_voice3: blk.w 10,0
dc.w $4
blk.w 3,0
mt_voice4: blk.w 10,0
dc.w $8
blk.w 3,0
mt_data:
blk.b 88308,0
************************* end