1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837 |
- ; Watch out! It's The ATOMS game on the Amiga!!!! Done by Tom. Excellent.
- openlibrary = -552
- allocmem = -198
- freemem = -210
- logosize = 40*44*3
- memsize = 40*200*4+logosize
- bplcon0 = $100
- bplcon1 = $102
- bplcon2 = $104
- bpl1mod = $108
- bpl2mod = $10a
- ddfstrt = $92
- ddfstop = $94
- diwstrt = $8e
- diwstop = $90
- bpl1pth = $e0
- bpl1ptl = $e2
- bpl2pth = $e4
- bpl2ptl = $e6
- bpl3pth = $e8
- bpl3ptl = $ea
- bpl4pth = $ec
- bpl4ptl = $ee
- col00 = $180
- col01 = $182
- col02 = $184
- col03 = $186
- col04 = $188
- col05 = $18a
- col06 = $18c
- col07 = $18e
- col08 = $190
- col09 = $192
- col10 = $194
- col11 = $196
- col12 = $198
- col13 = $19a
- col14 = $19c
- col15 = $19e
- col16 = $1a0
- col17 = $1a2
- col18 = $1a4
- col19 = $1a6
- spr0pth = $120
- spr0ptl = $122
- spr1pth = $124
- spr1ptl = $126
- spr2pth = $128
- spr2ptl = $12a
- spr3pth = $12c
- spr3ptl = $12e
- spr4pth = $130
- spr4ptl = $132
- spr5pth = $134
- spr5ptl = $136
- spr6pth = $138
- spr6ptl = $13a
- spr7pth = $13c
- spr7ptl = $13e
- section Atoms+++++++++,CODE_C
-
- start:
- lea $dff000,a5
- bsr killsystem
- bsr waitblit
- bsr allocate
- tst.l d0
- beq.s error
- bsr initvars2
- bsr newcopper
- playagain:
- jsr mt_init
- bsr initvariables
- bsr askplayers
- bsr initcolours
- st musicflag
- bsr startscreen
- bsr mainloop
- tst.b d4
- beq.s playagain
- bsr waitblit
- bsr oldcopper
- bsr free
- jsr mt_end
- error:
- bsr freesystem
- clr.l d0
- rts
- waitblit:
- btst #14,2(a5)
- bne.s waitblit
- rts
- blankplane:
- btst #14,2(a5)
- bne.s blankplane
- move.l planeaddr,$54(a5)
- clr.w $42(a5)
- clr.w $66(a5)
- move.l #-1,$44(a5)
- move.w #%100000000,$40(a5)
- move.w #200*64+20,$58(a5)
- rts
- blankplane2:
- btst #14,2(a5)
- bne.s blankplane2
- move.l planeaddr,$54(a5)
- clr.w $42(a5)
- clr.w $66(a5)
- move.l #-1,$44(a5)
- move.w #%100000000,$40(a5)
- move.w #800*64+20,$58(a5)
- rts
- askplayers:
- bsr blankplane2
- bsr waitblit
- lea text1,a0
- move.w #40*20,d0
- bsr textoutput
- lea text2,a0
- move.w #40*50+16,d0
- bsr textoutput
- wb:
- btst #6,$bfe001
- bne.s wb
- move.w mousex,d0
- move.w mousey,d1
- cmp.w #45,d1
- blt.s wb
- cmp.w #60,d1
- bgt.s wb
- cmp.w #118,d0
- blt.s wb
- moveq #2,d4
- cmp.w #145,d0
- blt.s hit
- moveq #3,d4
- cmp.w #178,d0
- blt.s hit
- moveq #4,d4
- cmp.w #208,d0
- bgt.s wb
- hit:
- subq #1,d4
- move.w d4,players
- move.w d4,playerno
- rts
-
- textoutput:
- lea font,a2
- move.l planeaddr,a1
- add.w d0,a1
- nextchar:
- clr.w d0
- move.b (a0)+,d0
- blt.s endtext
- sub.b #'a',d0
- blt.s space
- add.w d0,d0
- moveq #15,d7
- move.l a1,a3
- textloop:
- move.w 0(a2,d0.w),(a3)
- add.w #480/8,d0
- lea 40(a3),a3
- dbf d7,textloop
- space:
- lea 2(a1),a1
- bra.s nextchar
- endtext:
- rts
-
- startscreen:
- cmp.w #1,framecount
- blt.s startscreen
- clr.w framecount
- move.w #1590,d0
- sub.w distance,d0
- move.w d0,rot
- bsr rotateaxis
- bsr blankplane
- bsr drawgrid
- add.w #20,distance
- cmp.w #1610,distance
- ble.s startscreen
- bsr initscreen
- rts
- rotateaxis:
- move.w rot,d0
- add.w d0,d0
- lea sinewave,a0
- lea 1800(a0),a1
- move.w 0(a1,d0.w),d1
- move.w 0(a0,d0.w),d0
- move.w d0,sin1+2
- move.w d0,sin2+2
- move.w d1,cos1+2
- move.w d1,cos2+2
- rts
-
- rotate:
- movem.w d0-1,-(sp)
- move.w d2,d0
- move.w d3,d1
- sin1 muls #0,d2
- cos1 muls #0,d3
- add.l d2,d3
- asr.l #7,d3
- sin2 muls #0,d1
- cos2 muls #0,d0
- sub.l d1,d0
- asr.l #7,d0
- move.w d0,d2
- movem.w (sp)+,d0-1
- rts
-
- drawgrid:
- lea coords,a0
- move.w (a0)+,d7
- nextline:
- move.w (a0)+,d2
- move.w (a0)+,d3
- bsr rotate
- move.w distance,d4
- move.w d2,d0
- move.w d3,d1
- ext.l d0
- ext.l d1
- asl.l #8,d0
- asl.l #8,d1
- divs d4,d0
- divs d4,d1
- add.w #160,d0
- add.w #96,d1
- move.w (a0)+,d2
- move.w (a0)+,d3
- bsr rotate
- move.w distance,d4
- ext.l d2
- ext.l d3
- asl.l #8,d2
- asl.l #8,d3
- divs d4,d2
- divs d4,d3
- add.w #160,d2
- add.w #96,d3
- bsr drawline
- dbf d7,nextline
- rts
- initvars2:
- clr.w musicflag
- clr.w colours+6
- st fadeflag
- clr.w slider
- clr.w framecount
- move.w #-16,slider2
- clr.w mousex
- clr.w mousey
- clr.w oldmousex
- clr.w oldmousey
- rts
-
- initvariables:
- clr.w xrot
- move.w #650,yrot
- clr.w rot
- clr.w explosion
- move.w #-1,winner
- move.w #20,distance
- clr.w quitflag
- clr.w player
- lea playersin,a0
- move.l #$01010101,(a0)
- lea startdata,a0
- lea enddata,a1
- loop10:
- clr.b (a0)+
- cmp.l a0,a1
- bne.s loop10
- lea blocklookup,a0
- lea tiles+32,a1
- move.w #255,d7
- clr.l d2
- loop13:
- move.l d2,d3
- divu #19,d3
- move.l d3,d4
- swap d4
- add.w d4,d4
- mulu #38*16,d3
- add.w d4,d3
- lea 0(a1,d3.w),a2
- move.l a2,(a0)+
- add.w #1,d2
- dbf d7,loop13
- rts
- drawline:
- movem.l d0-7/a0-6,-(sp)
- bsr clipping
- tst.w d5
- bne noline
- moveq #40,d4
- muls d1,d4
- moveq #-$10,d5
- and.w d0,d5
- asr.w #3,d5
- add.w d5,d4
- add.l planeaddr,d4
- clr.l d5
- sub.w d1,d3
- roxl.b #1,d5
- tst.w d3
- bge.s y2gy1
- neg.w d3
- y2gy1:
- sub.w d0,d2
- roxl.b #1,d5
- tst.w d2
- bge.s x2gx1
- neg.w d2
- x2gx1:
- move.w d3,d1
- sub.w d2,d1
- bge.s dygdx
- exg d2,d3
- dygdx:
- roxl.b #1,d5
- tst.w d3
- beq noline
- wblit:
- btst #14,2(a5)
- bne.s wblit
- move.b octant_table(pc,d5.w),d5
- add.w d2,d2
- move.w d2,$62(a5)
- sub.w d3,d2
- bgt.s signn1
- or.b #$40,d5
- signn1:
- move.w d2,$52(a5)
- sub.w d3,d2
- move.w d2,$64(a5)
- move.w #$8000,$74(a5)
- move.w #$ffff,$72(a5)
- move.w #$ffff,$44(a5)
- and.w #$f,d0
- ror.w #4,d0
- or.w #$bca,d0
- move.w d0,$40(a5)
- move.w d5,$42(a5)
- move.l d4,$54(a5)
- move.l d4,$48(a5)
- move.w #40,$66(a5)
- move.w #40,$60(a5)
- lsl.w #6,d3
- addq #2,d3
- move.w d3,$58(a5)
- noline:
- movem.l (sp)+,d0-7/a0-6
- rts
- octant_table dc.b 1,17,9,21,5,25,13,29
- initscreen:
- lea blocksequ,a0
- move.w #59,d7
- nextblock6:
- cmp.w #1,framecount
- blt.s nextblock6
- clr.w framecount
- move.w (a0)+,d0
- ext.l d0
- divu #10,d0
- move.l d0,d1
- swap d0
- move.w #19*12,d2
- bsr drawblock
- dbf d7,nextblock6
- lea playersin,a0
- move.w #19*12+2,d2
- clr.w d0
- moveq #6,d1
- move.w players,d7
- playerloop:
- bsr drawblock
- addq #1,d0
- addq #1,d2
- dbf d7,playerloop
- rts
-
- mainloop:
- cmp.w #1,framecount
- blt.s mainloop
- clr.w framecount
- bsr morphhandle
- bsr leftclick
- bsr playerhandler
- btst #10,$16(a5)
- beq nowinn
- add.w #1,toggler
- and.w #1,toggler
- tst.w quitflag
- beq.s mainloop
- sf musicflag
- jsr mt_end
- lea text3,a0
- move.w #40*8+12,d0
- bsr textoutput
- lea text4,a0
- move.w #40*26+6,d0
- bsr textoutput
- wb2:
- btst #6,$bfe001
- bne.s wb2
- cmp.w #25,mousey
- blt.s wb2
- cmp.w #40,mousey
- bgt.s wb2
- cmp.w #230,mousex
- blt.s wb2
- clr.w d4
- cmp.w #260,mousex
- blt.s exit
- st d4
- cmp.w #290,mousex
- bgt.s wb2
- exit:
- rts
- nowinn:
- st d4
- rts
-
- playerhandler:
- move.w player,d0
- lea collook,a0
- add.w d0,d0
- move.w 0(a0,d0.w),pointercol
- rts
-
- morphhandle:
- lea sequences,a1
- lea datatable,a2
- lea inusetable,a4
- lea morphtable,a0
- tst.w (a0)
- beq.s nomorphs
- move.w 2(a0),d0
- move.w 4(a0),d1
- move.w d0,d4
- move.w d1,d5
- mulu #10,d5
- add.w d5,d4
- clr.l d5
- move.b 0(a2,d4.w),d5
- add.w d5,d5
- add.w d5,d5
- move.l 0(a1,d5.w),a3
- add.w 6(a0),a3
- add.w #2,6(a0)
- move.w (a3),d2
- blt.s endmorph
- move.w 8(a0),d3
- mulu #19*3,d3
- add.w d3,d2
- bsr drawblock
- nomorphs:
- rts
- endmorph:
- add.b #1,0(a2,d4.w)
- clr.w (a0)
- clr.b 0(a4,d4.w)
- bsr checkreactions
- bsr rubexplosion
- lea playersin,a0
- playerout:
- add.w #1,player
- move.w players,d6
- cmp.w player,d6
- bge.s firstplayer
- clr.w player
- firstplayer:
- move.w player,d0
- tst.b 0(a0,d0.w)
- beq.s playerout
- rts
-
- noreact:
- rts
- checkreactions:
- tst.w quitflag
- bne.s noreact
- movem.l d0-7/a0-6,-(sp)
- move.w d0,d2
- move.w d1,d3
- mulu #10,d3
- add.w d2,d3
- move.w d3,d4
- move.w d0,d2
- move.w d1,d3
- ext.l d2
- ext.l d3
- divu #10,d2
- divu #6,d3
- swap d2
- swap d3
- tst.w d2
- beq.s edge1
- cmp.w #9,d2
- beq.s edge1
- tst.w d3
- beq.s edge2
- cmp.w #5,d3
- beq.s edge2
- centre:
- move.w #4,d3
- bra.s checkexplode
- edge1:
- tst.w d3
- beq.s corner
- cmp.w #5,d3
- beq.s corner
- bra.s edge3
- edge2:
- tst.w d2
- beq.s corner
- cmp.w #9,d2
- beq.s corner
- edge3:
- move.w #3,d3
- bra.s checkexplode
- corner:
- move.w #2,d3
- checkexplode:
- lea datatable,a2
- cmp.b 0(a2,d4.w),d3
- ble.s explode
- movem.l (sp)+,d0-7/a0-6
- rts
- explode:
- bsr rubexplosion
- lea ownertable,a3
- lea inusetable,a4
- clr.b 0(a2,d4.w)
- clr.b 0(a4,d4.w)
- clr.b 0(a3,d4.w)
- move.w #19*12+1,d2
- move.w #1,explosion
- move.w d0,explosion+2
- move.w d1,explosion+4
- bsr drawblock
- waitframe:
- cmp.w #5,framecount
- blt.s waitframe
- clr.w framecount
- move.w d1,-(sp)
- addq #1,d1
- bsr spread
- subq #2,d1
- bsr spread
- move.w (sp)+,d1
- addq #1,d0
- bsr spread
- subq #2,d0
- bsr spread
- bsr checkforwinner
- movem.l (sp)+,d0-7/a0-6
- rts
-
- rubexplosion:
- tst.w explosion
- beq.s oldexplosion
- movem.w d0-2,-(sp)
- move.w explosion+2,d0
- move.w explosion+4,d1
- move.w #19*12,d2
- clr.w explosion
- bsr drawblock
- movem.w (sp)+,d0-2
- oldexplosion:
- rts
-
- checkforwinner:
- movem.l d3-4/d7/a0,-(sp)
- lea flags,a1
- clr.l (a1)
- lea ownertable,a0
- move.w #10*6-1,d7
- loop19:
- clr.w d4
- move.b (a0)+,d4
- subq #1,d4
- blt.s emptysquare2
- add.b #1,0(a1,d4.w)
- emptysquare2:
- dbf d7,loop19
- lea playersin,a0
- move.w players,d7
- clr.w d2
- loop21:
- tst.b (a0)
- beq.s stillthere
- tst.b (a1)
- bne.s stillthere
- movem.w d0-2,-(sp)
- move.w d2,d0
- add.w #19*12+6,d2
- moveq #6,d1
- bsr drawblock
- movem.w (sp)+,d0-2
- clr.b (a0)
- sub.w #1,playerno
- bne.s stillthere
- st quitflag
- lea playersin,a0
- clr.w d2
- testnext:
- move.w d2,winner
- tst.b (a0)+
- bne.s gameover
- addq #1,d2
- bra.s testnext
- stillthere:
- add.l #1,a0
- add.l #1,a1
- addq #1,d2
- dbf d7,loop21
- gameover:
- movem.l (sp)+,d3-4/d7/a0
- rts
-
- spread:
- movem.w d0-7/a0-2,-(sp)
- tst.w d0
- blt.s nospread
- tst.w d1
- blt.s nospread
- cmp.w #5,d1
- bgt.s nospread
- cmp.w #9,d0
- bgt.s nospread
- move.w d0,d2
- move.w d1,d3
- mulu #10,d3
- add.w d2,d3
- lea ownertable,a0
- lea datatable,a1
- lea sequ,a2
- move.w player,d4
- move.w d4,d5
- addq #1,d4
- move.b d4,0(a0,d3.w)
- add.b #1,0(a1,d3.w)
- clr.w d2
- move.b 0(a1,d3.w),d2
- add.w d2,d2
- move.w 0(a2,d2.w),d2
- mulu #19*3,d5
- add.w d5,d2
- bsr drawblock
- bsr checkreactions
- nospread:
- movem.w (sp)+,d0-7/a0-2
- rts
-
-
-
- drawblock:
- movem.l d0-7/a0-6,-(sp)
- mulu #40*16,d1
- add.w d0,d0
- add.w d0,d1
- move.l planeaddr,a0
- add.w d1,a0
- add.l #10+48*40,a0
- lea blocklookup,a1
- add.w d2,d2
- add.w d2,d2
- move.l 0(a1,d2.w),a1
- move.w #15,d7
- loop12:
- move.w (a1),(a0)
- move.w 208*38(a1),200*40(a0)
- move.w 2*208*38(a1),2*200*40(a0)
- move.w 3*208*38(a1),3*200*40(a0)
- lea 38(a1),a1
- lea 40(a0),a0
- dbf d7,loop12
- movem.l (sp)+,d0-7/a0-6
- rts
-
- leftclick:
- btst #6,$bfe001
- beq.s buttondown
- clr.w buttonflag
- rts
- buttondown:
- tst.w buttonflag
- bne.s nohit
- st buttonflag
- move.w mousex,d0
- move.w mousey,d1
- lsr.w #4,d0
- lsr.w #4,d1
- sub.w #5,d0
- blt.s nohit
- sub.w #3,d1
- blt.s nohit
- cmp.w #10,d0
- bge.s nohit
- cmp.w #6,d1
- bge.s nohit
- bsr startmorph
- nohit:
- rts
-
- startmorph:
- move.w d0,d4
- move.w d1,d5
- mulu #10,d5
- add.w d5,d4
- lea inusetable,a1
- lea datatable,a2
- lea ownertable,a3
- move.w player,d3
- addq.w #1,d3
- move.b 0(a3,d4.w),d2
- beq.s emptysquare
- cmp.b d3,d2
- bne.s inusemate
- emptysquare:
- cmp.b #4,0(a2,d4.w)
- beq.s inusemate
- tst.b 0(a1,d4.w)
- bne.s inusemate
- lea morphtable,a0
- tst.w (a0)
- beq.s foundspace
- rts
- foundspace:
- move.b #1,0(a1,d4.w)
- move.w #1,(a0)
- move.w d0,2(a0)
- move.w d1,4(a0)
- clr.w 6(a0)
- move.w player,8(a0)
- move.b d3,0(a3,d4.w)
- inusemate:
- rts
-
- allocate:
- move.l #$10002,d1
- move.l #memsize,d0
- move.l 4,a6
- jsr allocmem(a6)
- move.l d0,planeaddr
- move.l d0,d1
- add.l #40*200*4,d1
- move.l d1,logoaddr
- rts
- free:
- move.l planeaddr,a1
- move.l #memsize,d0
- move.l 4,a6
- jsr freemem(a6)
- rts
-
- newcopper:
- bsr initplanes
- bsr initcolours2
- bsr initsprites
- move.l #copperlist,$80(a5)
- clr.w $88(a5)
- move.w #$83e0,$96(a5)
- move.w #$c010,$9a(a5)
- rts
-
- initsprites:
- lea sprites,a0
- move.l #mousepointer,d0
- move.w d0,2(a0)
- swap d0
- move.w d0,6(a0)
- lea 8(a0),a0
- move.l #blanksprite,d0
- move.w #6,d7
- loop7:
- move.w d0,2(a0)
- swap d0
- move.w d0,6(a0)
- swap d0
- lea 8(a0),a0
- dbf d7,loop7
- rts
-
- initcolours:
- lea colours,a0
- lea tiles,a1
- moveq #15,d7
- loop2:
- move.w (a1)+,2(a0)
- lea 4(a0),a0
- dbf d7,loop2
- rts
- initcolours2:
- lea colours2,a0
- moveq #7,d7
- loop91:
- clr.w 2(a0)
- lea 4(a0),a0
- dbf d7,loop91
- rts
-
- initplanes:
- lea planes,a0
- move.l planeaddr,d0
- moveq #3,d7
- loop1:
- move.w d0,2(a0)
- swap d0
- move.w d0,6(a0)
- swap d0
- add.l #40*200,d0
- lea 8(a0),a0
- dbf d7,loop1
- lea planes2,a0
- move.l logoaddr,d0
- moveq #2,d7
- loop90:
- move.w d0,2(a0)
- swap d0
- move.w d0,6(a0)
- swap d0
- add.l #44*40,d0
- lea 8(a0),a0
- dbf d7,loop90
- rts
-
- oldcopper:
- clr.l d0
- lea grname,a1
- move.l 4,a6
- jsr openlibrary(a6)
- move.l d0,a1
- move.l 38(a1),$80(a5)
- clr.w $88(a5)
- rts
-
-
- killsystem:
- move.w 2(a5),d0
- or.w #$8000,d0
- move.w d0,dmasave+2
- move.w $1c(a5),d0
- or.w #$c000,d0
- move.w d0,intsave+2
- move.l $6c,vecsave+2
- move.w #$7fff,d0
- move.w d0,$96(a5)
- move.w d0,$9a(a5)
- move.l #inter,$6c
- rts
-
- freesystem:
- vecsave move.l #0,$6c
- dmasave move.w #0,$96(a5)
- intsave move.w #0,$9a(a5)
- rts
-
- inter:
- movem.l d0-7/a0-6,-(sp)
- lea $dff000,a5
- add.w #1,framecount
- bsr readmouse
- bsr drawlogo
- bsr fades
- move.w slider,colours+6
- cmp.w #$fff,slider
- beq.s white
- add.w #$111,slider
- white:
- tst.w musicflag
- beq.s nomusic
- jsr mt_music
- nomusic:
- lea $dff000,a5
- move.w #$10,$9c(a5)
- movem.l (sp)+,d0-7/a0-6
- rte
-
- drawlogo:
- btst #14,2(a5)
- bne.s drawlogo
- move.l logoaddr,d0
- add.l #10,d0
- move.l d0,$54(a5)
- clr.w $42(a5)
- move.w #%100000000,$40(a5)
- move.l #-1,$44(a5)
- move.w #40-20,$66(a5)
- move.w #44*3*64+10,$58(a5)
- lea sinewave,a0
- lea 1800(a0),a1
- move.w xrot,d0
- move.w yrot,d2
- add.w d0,d0
- add.w d2,d2
- move.w 0(a1,d0.w),d1
- move.w 0(a0,d0.w),d0
- move.w 0(a1,d2.w),d3
- move.w 0(a1,d2.w),d2
- move.l d2,-(sp)
- add.w #128,d2
- muls d0,d2
- blt.s behind
- move.l (sp)+,d2
- bsr blitlogo
- asr.w #3,d0
- asr.w #3,d1
- asr.w #3,d2
- muls d2,d0
- asr.w #4,d0
- add.w #154,d0
- add.w #16,d1
- bsr bob
- bra.s infront
- behind:
- move.l (sp)+,d2
- asr.w #3,d0
- asr.w #3,d1
- asr.w #3,d2
- muls d2,d0
- asr.w #4,d0
- add.w #154,d0
- add.w #16,d1
- bsr bob
- bsr blitlogo
- infront:
- sub.w #100,xrot
- bge.s nolim
- add.w #3600,xrot
- nolim:
- sub.w #5,yrot
- bge.s nolim2
- add.w #3600,yrot
- nolim2:
- rts
-
- blitlogo:
- movem.w d0-3,-(sp)
- move.l #logo+16,d3
- move.l #mask,d4
- wblit8:
- btst #14,2(a5)
- bne.s wblit8
- move.l logoaddr,d0
- add.l #10,d0
- move.l d3,$50(a5)
- move.w #40-20,$60(a5)
- clr.w $42(a5)
- move.w #40-20,$66(a5)
- move.w #4,$64(a5)
- move.w #4,$62(a5)
- move.l #-1,$44(a5)
- move.w #%111111110010,$40(a5)
- moveq #2,d7
- wblit7:
- btst #14,2(a5)
- bne.s wblit7
- move.l d0,$54(a5)
- move.l d0,$48(a5)
- move.l d4,$4c(a5)
- move.w #44*64+10,$58(a5)
- add.l #44*40,d0
- dbf d7,wblit7
- movem.w (sp)+,d0-3
- rts
-
- bob:
- movem.l d0-7/a0-6,-(sp)
- wblt9:
- btst #14,2(a5)
- bne.s wblt9
- mulu #40,d1
- move.l logoaddr,d2
- add.l d1,d2
- move.w d0,d3
- lsr.w #3,d0
- bclr #0,d0
- add.w d0,d2
- and.w #15,d3
- ror.w #4,d3
- move.w d3,$42(a5)
- or.w #%111111110010,d3
- move.w d3,$40(a5)
- move.l #$ffff0000,$44(a5)
- move.l #logo+16+20,d0
- move.l #mask+20,d1
- move.w #40-4,$66(a5)
- move.w #40-4,$60(a5)
- move.w #20,$64(a5)
- move.w #20,$62(a5)
- moveq #2,d7
- nextplane:
- btst #14,2(a5)
- bne.s nextplane
- move.l d0,$50(a5)
- move.l d1,$4c(a5)
- move.l d2,$54(a5)
- move.l d2,$48(a5)
- move.w #8*64+2,$58(a5)
- add.l #44*40,d2
- add.l #44*24,d0
- dbf d7,nextplane
- movem.l (sp)+,d0-7/a0-6
- rts
-
- fades:
- tst.w fadeflag
- beq.s nomorefades
- tst.w slider2
- beq.s nomorefades
- add.w #1,slider2
- move.w slider2,d4
- lea logo,a0
- lea colours2,a1
- moveq #7,d7
- loop901:
- move.w (a0)+,d0
- move.w d0,d1
- move.w d0,d2
- and.w #$f,d0
- and.w #$f0,d1
- and.w #$f00,d2
- lsr.w #4,d1
- lsr.w #8,d2
- add.w d4,d0
- bge.s norm1
- clr.w d0
- norm1:
- add.w d4,d1
- bge.s norm2
- clr.w d1
- norm2:
- add.w d4,d2
- bge.s norm3
- clr.w d2
- norm3:
- lsl.w #4,d1
- lsl.w #8,d2
- or.w d1,d0
- or.w d2,d0
- move.w d0,2(a1)
- lea 4(a1),a1
- dbf d7,loop901
- nomorefades:
- rts
-
- readmouse:
- move.w $a(a5),d0
- move.w d0,d1
- and.w #$ff,d0
- lsr.w #8,d1
- move.w oldmousex,d2
- move.w oldmousey,d3
- move.w d0,oldmousex
- move.w d1,oldmousey
- sub.w d2,d0
- sub.w d3,d1
- cmp.w #-127,d0
- bgt.s nounder1
- add.w #255,d0
- nounder1:
- cmp.w #-127,d1
- bgt.s nounder2
- add.w #255,d1
- nounder2:
- cmp.w #127,d0
- blt.s noover1
- sub.w #255,d0
- noover1:
- cmp.w #127,d1
- blt.s noover2
- sub.w #255,d1
- noover2:
- add.w mousex,d0
- bge.s border1
- clr.w d0
- border1:
- add.w mousey,d1
- bge.s border2
- clr.w d1
- border2:
- cmp.w #318,d0
- blt.s border3
- move.w #317,d0
- border3:
- cmp.w #148,d1
- blt.s border4
- move.w #147,d1
- border4:
- move.w d0,mousex
- move.w d1,mousey
- bsr setsprite
- rts
- clipping:
- movem.l d6-7,-(sp)
- move.w d6,d7
- clr.w d5
- cmp.w d1,d3
- blt.s greater
- exg d1,d3
- exg d0,d2
- greater:
- tst.w d1
- blt.s offscreen
- cmp.w #200,d3
- bge.s offscreen
- cmp.w #200,d1
- blt.s notd1down
- bsr clipd1down
- notd1down:
- tst.w d3
- bge.s notd3up
- bsr clipd3up
- notd3up:
- cmp.w d0,d2
- blt.s greater2
- exg d1,d3
- exg d0,d2
- greater2:
- tst.w d0
- blt.s offscreen
- cmp.w #320,d2
- bge.s offscreen
- tst.w d2
- bge.s notd2left
- bsr clipd2left
- notd2left:
- cmp.w #320,d0
- blt.s notd0right
- bsr clipd0right
- notd0right:
- movem.l (sp)+,d6-7
- rts
- offscreen:
- move.w #1,d5
- movem.l (sp)+,d6-7
- rts
- clipd1down:
- move.w d3,d4
- sub.w d1,d3
- beq.s vertical2
- sub.w #200,d1
- move.w d0,d6
- sub.w d2,d6
- muls d1,d6
- divs d3,d6
- add.w d6,d0
- vertical2:
- move.w #199,d1
- move.w d4,d3
- rts
- clipd0right:
- move.w d2,d4
- sub.w d0,d2
- beq.s vertical4
- sub.w #320,d0
- move.w d1,d6
- move.w d1,d7
- sub.w d3,d6
- muls d0,d6
- divs d2,d6
- add.w d6,d1
- vertical4:
- move.w #319,d0
- move.w d4,d2
- rts
- clipd3up:
- move.w d1,d4
- sub.w d3,d1
- beq.s vertical1
- move.w d2,d6
- sub.w d0,d6
- muls d3,d6
- divs d1,d6
- add.w d6,d2
- vertical1:
- clr.w d3
- move.w d4,d1
- rts
- clipd2left:
- move.w d0,d4
- sub.w d2,d0
- beq.s vertical3
- move.w d3,d6
- sub.w d1,d6
- muls d2,d6
- divs d0,d6
- add.w d6,d3
- vertical3:
- clr.w d2
- move.w d4,d0
- rts
-
- setsprite:
- add.w #$2c+3*16,d1
- add.w #$81,d0
- move.w d1,d3
- clr.w d2
- lsl.w #8,d1
- roxl.b #1,d2
- add.w #19,d3
- lsl.w #8,d3
- roxl.b #1,d2
- lsr.w #1,d0
- roxl.b #1,d2
- or.w d2,d3
- or.w d0,d1
- lea mousepointer,a0
- move.w d3,2(a0)
- move.w d1,(a0)
- rts
-
- copperlist:
- sprites:
- dc.w spr0ptl,0,spr0pth,0,spr1ptl,0,spr1pth,0,spr2ptl,0,spr2pth,0,spr3ptl,0,spr3pth,0,spr4ptl,0,spr4pth,0,spr5ptl,0,spr5pth,0,spr6ptl,0,spr6pth,0,spr7ptl,0,spr7pth,0
- dc.w ddfstrt,$38,ddfstop,$d0
- dc.w diwstrt,$3081,diwstop,$0ac1
- dc.w bplcon0,$3000,bplcon1,0,bplcon2,0,bpl1mod,0,bpl2mod,0
- planes2:
- dc.w bpl1ptl,0,bpl1pth,0,bpl2ptl,0,bpl2pth,0,bpl3ptl,0,bpl3pth,0
- colours2:
- dc.w col00,0,col01,0,col02,0,col03,0,col04,0,col05,0,col06,0,col07,0
- dc.w $5ad9,$fffe
- dc.w bplcon0,$4000,bplcon1,0,bplcon2,%100100,bpl1mod,0,bpl2mod,0
- planes:
- dc.w bpl1ptl,0,bpl1pth,0,bpl2ptl,0,bpl2pth,0,bpl3ptl,0,bpl3pth,0,bpl4ptl,0,bpl4pth,0
- colours:
- dc.w col00,0,col01,0,col02,0,col03,0,col04,0,col05,0,col06,0,col07,0,col08,0,col09,0,col10,0,col11,0,col12,0,col13,0,col14,0,col15,0
- dc.w col16,0,col17
- pointercol:
- dc.w $fff,col18,0,col19,0
- dc.w $d009,$fffe,$9c,$8010
- dc.w $ffff,$fffe
-
- blanksprite dc.w 0,0
- mousepointer dc.w 0,0
- dc.w %0000000000000000,%1100000000000000
- dc.w %0100000000000000,%1010000000000000
- dc.w %0110000000000000,%1001000000000000
- dc.w %0111000000000000,%1000100000000000
- dc.w %0111100000000000,%1000010000000000
- dc.w %0111110000000000,%1000001000000000
- dc.w %0111111000000000,%1000000100000000
- dc.w %0111111100000000,%1000000010000000
- dc.w %0111111110000000,%1000000001000000
- dc.w %0111111100000000,%1000000010000000
- dc.w %0111111000000000,%1000000100000000
- dc.w %0111111100000000,%1000000010000000
- dc.w %0111111100000000,%1000000010000000
- dc.w %0111011110000000,%1000100001000000
- dc.w %0110011110000000,%1001100001000000
- dc.w %0100001111000000,%1010010000100000
- dc.w %0000001110000000,%0100010001000000
- dc.w %0000000000000000,%0000001110000000
- dc.w 0,0
- grname dc.b 'graphics.library',0
- even
- planeaddr dc.l 0
- logoaddr dc.l 0
- musicflag dc.w 0
- player dc.w 0
- oldmousex dc.w 0
- slider dc.w 0
- players dc.w 0
- rot dc.w 0
- winner dc.w 0
- distance dc.w 0
- oldmousey dc.w 0
- slider2 dc.w 0
- fadeflag dc.w 0
- mousex dc.w 0
- mousey dc.w 0
- quitflag dc.w 0
- toggler dc.w 0
- buttonflag dc.w 0
- framecount dc.w 0
- xrot dc.w 0
- yrot dc.w 0
- startdata:
- datatable dcb.b 10*6,0
- inusetable dcb.b 10*6,0
- ownertable dcb.b 10*6,0
- morphtable dcb.w 1*10,0
- enddata:
- coords dc.w 17,-500,-300,500,-300,-500,-200,500,-200,-500,-100,500,-100,-500,0,500,0,-500,100,500,100,-500,200,500,200,-500,300,500,300
- dc.w -500,-300,-500,300,-400,-300,-400,300,-300,-300,-300,300,-200,-300,-200,300,-100,-300,-100,300,0,-300,0,300,100,-300,100,300,200,-300,200,300,300,-300,300,300,400,-300,400,300,500,-300,500,300
- blocksequ dc.w 59,58,49,57,48,39,56,47,38,29,55,46,37,28,19,54,45,36,27,18,09,53,44,35,26,17,08
- dc.w 52,43,34,25,16,07,51,42,33,24,15,06,50,41,32,23,14,05,40,31,22,13,04,30,21,12,03
- dc.w 20,11,02,10,01,00
- playersin dc.b 0,0,0,0
- flags dc.b 0,0,0,0
- playerno dc.w 0
- explosion dc.w 0,0,0
- collook dc.w $f00,$0f0,$f80,$00f
- sequences dc.l sequence1,sequence2,sequence3,sequence4
- sequence1 dc.w 0,-1
- sequence2 dc.w 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,-1
- sequence3 dc.w 19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,-1
- sequence4 dc.w 38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,-1
- sequ dc.w 0,0,18,37,56
- text1 dc.b ' how many players',-1
- text2 dc.b 124,0,125,0,126,-1
- text3 dc.b 'well done ',-1
- text4 dc.b 'play again y n',-1
- even
- blocklookup dcb.l 256,0
- tiles incbin "ram:atomtiles.bitmap"
- sinewave incbin "ram:sinewavetable2"
- logo incbin "ram:atomslogo.bitmap"
- mask incbin "ram:atomslogo.mask"
- font incbin "ram:atomfont.bitmap"
- mt_init:lea mt_data,a0
- lea $3b8(a0),a1
- moveq #$7f,d0
- moveq #0,d2
- moveq #0,d1
- mt_lop2:move.b (a1)+,d1
- cmp.b d2,d1
- ble.s mt_lop
- move.l d1,d2
- mt_lop: dbf d0,mt_lop2
- addq.b #1,d2
- asl.l #8,d2
- asl.l #2,d2
- lea 4(a1,d2.l),a2
- lea mt_samplestarts(pc),a1
- add.w #42,a0
- moveq #$1e,d0
- mt_lop3:clr.l (a2)
- move.l a2,(a1)+
- moveq #0,d1
- move.w (a0),d1
- clr.b 2(a0)
- 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
- moveq #0,d0
- lea $dff000,a0
- move.w d0,$a8(a0)
- move.w d0,$b8(a0)
- move.w d0,$c8(a0)
- move.w d0,$d8(a0)
- 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:
- lea mt_data,a0
- addq.b #1,mt_counter
- move.b mt_counter(pc),d0
- cmp.b mt_speed(pc),d0
- blt mt_nonew
- clr.b mt_counter
- lea mt_data,a0
- lea $c(a0),a3
- lea $3b8(a0),a2
- lea $43c(a0),a0
- moveq #0,d0
- moveq #0,d1
- move.b mt_songpos(pc),d0
- move.b (a2,d0.w),d1
- lsl.w #8,d1
- lsl.w #2,d1
- add.w mt_pattpos(pc),d1
- clr.w mt_dmacon
- lea $dff0a0,a5
- lea mt_voice1(pc),a4
- bsr mt_playvoice
- addq.l #4,d1
- lea $dff0b0,a5
- lea mt_voice2(pc),a4
- bsr mt_playvoice
- addq.l #4,d1
- lea $dff0c0,a5
- lea mt_voice3(pc),a4
- bsr mt_playvoice
- addq.l #4,d1
- lea $dff0d0,a5
- lea mt_voice4(pc),a4
- bsr mt_playvoice
- move.w mt_dmacon(pc),d0
- beq.s mt_nodma
- bsr mt_wait
- or.w #$8000,d0
- move.w d0,$dff096
- bsr mt_wait
- mt_nodma:
- lea mt_voice1(pc),a4
- lea $dff000,a3
- move.l $a(a4),$a0(a3)
- move.w $e(a4),$a4(a3)
- move.l $a+$1c(a4),$b0(a3)
- move.w $e+$1c(a4),$b4(a3)
- move.l $a+$38(a4),$c0(a3)
- move.w $e+$38(a4),$c4(a3)
- move.l $a+$54(a4),$d0(a3)
- move.w $e+$54(a4),$d4(a3)
- add.w #$10,mt_pattpos
- cmp.w #$400,mt_pattpos
- bne.s mt_exit
- mt_next:clr.w mt_pattpos
- clr.b mt_break
- addq.b #1,mt_songpos
- and.b #$7f,mt_songpos
- move.b -2(a2),d0
- cmp.b mt_songpos(pc),d0
- bne.s mt_exit
- move.b -1(a2),mt_songpos
- mt_exit:tst.b mt_break
- bne.s mt_next
- rts
- mt_wait:moveq #3,d3
- mt_wai2:move.b $dff006,d2
- mt_wai3:cmp.b $dff006,d2
- beq.s mt_wai3
- dbf d3,mt_wai2
- moveq #8,d2
- mt_wai4:dbf d2,mt_wai4
- rts
- mt_nonew:
- lea mt_voice1(pc),a4
- lea $dff0a0,a5
- bsr mt_com
- lea mt_voice2(pc),a4
- lea $dff0b0,a5
- bsr mt_com
- lea mt_voice3(pc),a4
- lea $dff0c0,a5
- bsr mt_com
- lea mt_voice4(pc),a4
- lea $dff0d0,a5
- bsr mt_com
- bra.s mt_exit
- mt_mulu:
- dc.w 0,$1e,$3c,$5a,$78,$96,$b4,$d2,$f0,$10e,$12c,$14a
- dc.w $168,$186,$1a4,$1c2,$1e0,$1fe,$21c,$23a,$258,$276
- dc.w $294,$2b2,$2d0,$2ee,$30c,$32a,$348,$366,$384,$3a2
- mt_playvoice:
- move.l (a0,d1.l),(a4)
- moveq #0,d2
- move.b 2(a4),d2
- lsr.b #4,d2
- move.b (a4),d0
- and.b #$f0,d0
- or.b d0,d2
- beq.s mt_oldinstr
- lea mt_samplestarts-4(pc),a1
- asl.w #2,d2
- move.l (a1,d2.l),4(a4)
- lsr.w #1,d2
- move.w mt_mulu(pc,d2.w),d2
- move.w (a3,d2.w),8(a4)
- move.w 2(a3,d2.w),$12(a4)
- moveq #0,d3
- move.w 4(a3,d2.w),d3
- tst.w d3
- beq.s mt_noloop
- move.l 4(a4),d0
- asl.w #1,d3
- add.l d3,d0
- move.l d0,$a(a4)
- move.w 4(a3,d2.w),d0
- add.w 6(a3,d2.w),d0
- move.w d0,8(a4)
- bra.s mt_hejaSverige
- mt_noloop:
- move.l 4(a4),d0
- add.l d3,d0
- move.l d0,$a(a4)
- mt_hejaSverige:
- move.w 6(a3,d2.w),$e(a4)
- moveq #0,d0
- move.b $13(a4),d0
- move.w d0,8(a5)
- mt_oldinstr:
- move.w (a4),d0
- and.w #$fff,d0
- beq mt_com2
- tst.w 8(a4)
- beq.s mt_stopsound
- tst.b $12(a4)
- bne.s mt_stopsound
- move.b 2(a4),d0
- and.b #$f,d0
- cmp.b #5,d0
- beq.s mt_setport
- cmp.b #3,d0
- beq.s mt_setport
- move.w (a4),$10(a4)
- and.w #$fff,$10(a4)
- move.w $1a(a4),$dff096
- clr.b $19(a4)
- move.l 4(a4),(a5)
- move.w 8(a4),4(a5)
- move.w $10(a4),6(a5)
- move.w $1a(a4),d0
- or.w d0,mt_dmacon
- bra mt_com2
- mt_stopsound:
- move.w $1a(a4),$dff096
- bra mt_com2
- mt_setport:
- move.w (a4),d2
- and.w #$fff,d2
- move.w d2,$16(a4)
- move.w $10(a4),d0
- clr.b $14(a4)
- cmp.w d0,d2
- beq.s mt_clrport
- bge mt_com2
- move.b #1,$14(a4)
- bra mt_com2
- mt_clrport:
- clr.w $16(a4)
- rts
- mt_port:move.b 3(a4),d0
- beq.s mt_port2
- move.b d0,$15(a4)
- clr.b 3(a4)
- mt_port2:
- tst.w $16(a4)
- beq.s mt_rts
- moveq #0,d0
- move.b $15(a4),d0
- tst.b $14(a4)
- bne.s mt_sub
- add.w d0,$10(a4)
- move.w $16(a4),d0
- cmp.w $10(a4),d0
- bgt.s mt_portok
- move.w $16(a4),$10(a4)
- clr.w $16(a4)
- mt_portok:
- move.w $10(a4),6(a5)
- mt_rts: rts
- mt_sub: sub.w d0,$10(a4)
- move.w $16(a4),d0
- cmp.w $10(a4),d0
- blt.s mt_portok
- move.w $16(a4),$10(a4)
- clr.w $16(a4)
- move.w $10(a4),6(a5)
- rts
- mt_sin:
- dc.b 0,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4
- dc.b $fa,$fd
- dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61
- dc.b $4a,$31,$18
- mt_vib: move.b $3(a4),d0
- beq.s mt_vib2
- move.b d0,$18(a4)
- mt_vib2:move.b $19(a4),d0
- lsr.w #2,d0
- and.w #$1f,d0
- moveq #0,d2
- move.b mt_sin(pc,d0.w),d2
- move.b $18(a4),d0
- and.w #$f,d0
- mulu d0,d2
- lsr.w #7,d2
- move.w $10(a4),d0
- tst.b $19(a4)
- bmi.s mt_vibsub
- add.w d2,d0
- bra.s mt_vib3
- mt_vibsub:
- sub.w d2,d0
- mt_vib3:move.w d0,6(a5)
- move.b $18(a4),d0
- lsr.w #2,d0
- and.w #$3c,d0
- add.b d0,$19(a4)
- rts
- mt_arplist:
- dc.b 0,1,2,0,1,2,0,1,2,0,1,2,0
- dc.b 1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
- mt_arp: moveq #0,d0
- move.b mt_counter(pc),d0
- move.b mt_arplist(pc,d0.w),d0
- beq.s mt_arp0
- cmp.b #2,d0
- beq.s mt_arp2
- mt_arp1:moveq #0,d0
- move.b 3(a4),d0
- lsr.b #4,d0
- bra.s mt_arpdo
- mt_arp2:moveq #0,d0
- move.b 3(a4),d0
- and.b #$f,d0
- mt_arpdo:
- asl.w #1,d0
- move.w $10(a4),d1
- and.w #$fff,d1
- lea mt_periods(pc),a0
- moveq #$24,d2
- mt_arp3:cmp.w (a0)+,d1
- bge.s mt_arpfound
- dbf d2,mt_arp3
- mt_arp0:move.w $10(a4),6(a5)
- rts
- mt_arpfound:
- move.w -2(a0,d0.w),6(a5)
- rts
- mt_normper:
- move.w $10(a4),6(a5)
- rts
- mt_com: move.w 2(a4),d0
- and.w #$fff,d0
- beq.s mt_normper
- move.b 2(a4),d0
- and.b #$f,d0
- tst.b d0
- beq.s mt_arp
- cmp.b #1,d0
- beq.s mt_portup
- cmp.b #2,d0
- beq.s mt_portdown
- cmp.b #3,d0
- beq mt_port
- cmp.b #4,d0
- beq mt_vib
- cmp.b #5,d0
- beq.s mt_volport
- cmp.b #6,d0
- beq.s mt_volvib
- move.w $10(a4),6(a5)
- cmp.b #$a,d0
- beq.s mt_volslide
- rts
- mt_portup:
- moveq #0,d0
- move.b 3(a4),d0
- sub.w d0,$10(a4)
- move.w $10(a4),d0
- cmp.w #$71,d0
- bpl.s mt_portup2
- move.w #$71,$10(a4)
- mt_portup2:
- move.w $10(a4),6(a5)
- rts
- mt_portdown:
- moveq #0,d0
- move.b 3(a4),d0
- add.w d0,$10(a4)
- move.w $10(a4),d0
- cmp.w #$358,d0
- bmi.s mt_portdown2
- move.w #$358,$10(a4)
- mt_portdown2:
- move.w $10(a4),6(a5)
- rts
- mt_volvib:
- bsr mt_vib2
- bra.s mt_volslide
- mt_volport:
- bsr mt_port2
- mt_volslide:
- moveq #0,d0
- move.b 3(a4),d0
- lsr.b #4,d0
- beq.s mt_vol3
- add.b d0,$13(a4)
- cmp.b #$40,$13(a4)
- bmi.s mt_vol2
- move.b #$40,$13(a4)
- mt_vol2:moveq #0,d0
- move.b $13(a4),d0
- move.w d0,8(a5)
- rts
- mt_vol3:move.b 3(a4),d0
- and.b #$f,d0
- sub.b d0,$13(a4)
- bpl.s mt_vol4
- clr.b $13(a4)
- mt_vol4:moveq #0,d0
- move.b $13(a4),d0
- move.w d0,8(a5)
- rts
- mt_com2:move.b $2(a4),d0
- and.b #$f,d0
- cmp.b #$e,d0
- beq.s mt_filter
- cmp.b #$d,d0
- beq.s mt_pattbreak
- cmp.b #$b,d0
- beq.s mt_songjmp
- cmp.b #$c,d0
- beq.s mt_setvol
- cmp.b #$f,d0
- beq.s mt_setspeed
- rts
- mt_filter:
- move.b 3(a4),d0
- and.b #1,d0
- asl.b #1,d0
- and.b #$fd,$bfe001
- or.b d0,$bfe001
- rts
- mt_pattbreak:
- move.b #1,mt_break
- rts
- mt_songjmp:
- move.b #1,mt_break
- move.b 3(a4),d0
- subq.b #1,d0
- move.b d0,mt_songpos
- rts
- mt_setvol:
- cmp.b #$40,3(a4)
- bls.s mt_sv2
- move.b #$40,3(a4)
- mt_sv2: moveq #0,d0
- move.b 3(a4),d0
- move.b d0,$13(a4)
- move.w d0,8(a5)
- rts
- mt_setspeed:
- moveq #0,d0
- move.b 3(a4),d0
- cmp.b #$1f,d0
- bls.s mt_sp2
- moveq #$1f,d0
- mt_sp2: tst.w d0
- bne.s mt_sp3
- moveq #1,d0
- mt_sp3: move.b d0,mt_speed
- rts
- mt_periods:
- dc.w $358,$328,$2fa,$2d0,$2a6,$280,$25c,$23a,$21a,$1fc,$1e0
- dc.w $1c5,$1ac,$194,$17d,$168,$153,$140,$12e,$11d,$10d,$fe
- dc.w $f0,$e2,$d6,$ca,$be,$b4,$aa,$a0,$97,$8f,$87
- dc.w $7f,$78,$71,0
- mt_speed: dc.b 6
- mt_counter: dc.b 0
- mt_pattpos: dc.w 0
- mt_songpos: dc.b 0
- mt_break: dc.b 0
- mt_dmacon: dc.w 0
- mt_samplestarts:dcb.l $1f,0
- mt_voice1: dcb.w 13,0
- dc.w 1
- mt_voice2: dcb.w 13,0
- dc.w 2
- mt_voice3: dcb.w 13,0
- dc.w 4
- mt_voice4: dcb.w 13,0
- dc.w 8
- mt_data incbin "df0:mod.mainmod"
- end:
|