home *** CD-ROM | disk | FTP | other *** search
-
- ; Source code for !VUBars
- ; ***** extASM format *****
- ; © Andrew Hunter, 1995
-
- #speed 128
- ; #type &ffa
- #base 0
- #name ^.!RunImage
- #smile
- TEMP r11
-
- ; lets go!
- B start
-
- ; bitsa text
- dcb 10,"This is "
- .wimpname dcb "VU Bars",0
- align
- dcb 10,"Oi! Hacker! Bugger off. This code is MINE, got it? If you want some"
- dcb " of your own, write it yerself!",10
- align
-
- .start
-
- ; set up a stack (full descending, from top of memory)
- ; Wow, dudes. Far out.
-
- swi XOS_GetEnv
- mov r13,r1
- sub r13,r13,#32
-
- ; get the Wimp going!
- mov r0,#200
- mov r1,#&4b534154 ; extASM allows this... EXCELLENT!
- adr r2,wimpname
- swi XWimp_Initialise
- swivs XOS_Exit ; if there is an error, DIEEE!!!! (Bogus)
-
- bl make_de_menu
-
- bl maincode
-
- swi XOS_Exit
-
- .ibarike dcd -1
- dcd 0
- dcd 0
- dcd 128
- dcd 68
- dcd &311a
- .spname dcd 0
- .spaddr dcd 0
- dcd 8
-
- .name dcb "vbars",0
- align
-
- .mainsp dcd 0
- .vusp dcd 0
- .smvusp dcd 0
- .loadqtm dcd 0
- .nosong dcd 0
- .back dcd 0
-
- .backsp dcd 0
-
- .setblock dcd -1
- .ihandle dcd 0
- dcd 0
- dcd 0
-
- .menu dcb "VU-Bars",0 ; 8 char title
- dcd 0
- dcb 7,2,7,0
- dcd 92,44
- dcd 0
- dcd 1<<7 ; menu flags
- dcd 0 ; submenu pointer
- dcd &7000021 ; flags
- dcb "Quit",0,0,0,0
- dcd 0
-
- .maincode
- stmfd r13!,{r0-r12,r14}
-
- ; deal with indirected garbage.
- adr r0,sprs
- str r0,spaddr
- adr r0,name
- str r0,spname
-
- ; work out address of sprites...
- mov r0,#0
- adr r1,sprs
- bl findsprite
- str r0,mainsp
-
- mov r0,#1
- bl findsprite
- str r0,vusp
-
- mov r0,#5
- bl findsprite
- str r0,smvusp
-
- mov r0,#6
- bl findsprite
- str r0,sp1sp
-
- mov r0,#7
- bl findsprite
- str r0,sp2sp
-
- mov r0,#8
- bl findsprite
- str r0,sp3sp
-
- mov r0,#9
- bl findsprite
- str r0,sp4sp
-
- mov r0,#4
- bl findsprite
- str r0,back
- str r0,backsp
-
- mov r0,#3
- bl findsprite
- str r0,loadqtm
-
- mov r0,#2
- bl findsprite
- str r0,nosong
- ;adr r0,sprs+&3C
- ;str r0,mainsp
- ;adr r0,sprs+&288
- ;str r0,vusp
-
- mov r0,#0
- adr r1,ibarike
- swi XWimp_CreateIcon
- str r0,ihandle
-
- mov r0,#0
- str r0,exit
-
- ._pollloop
- mov r0,#0
- adr r1,block
- swi Wimp_Poll ; NOT XWimp_Poll... we want to dieeee
-
- ; check reason code
- cmp r0,#6
- bleq click
-
- cmp r0,#9 ; is it a menu? BONUS!
- bleq click_de_menu
-
- cmp r0,#17 ; is it a message?
- cmpne r0,#18
- bleq message ; Far out, dudes!
-
- bl update ; time to update dem sprites
-
- ; do we exit?
- ldr r1,exit
- cmp r1,#0
- beq _pollloop
-
- ldmfd r13!,{r0-r12,r15}
-
- .exit dcd 0
-
- .VuType dcd 0
-
- .update
- stmfd r13!,{r0-r12,r14}
-
- ldr r4,VuType
- cmp r4,#0
-
- beq ahem ; PARTY ON DUDES!
-
- cmp r4,#1
- bleq plotspeakers
-
- cmp r4,#2
- bleq plotlevel
-
- ; update sprite
- mov r0,#0
- adr r1,setblock
- swi XWimp_SetIconState
-
- ldmfd r13!,{r0-r12,r15}
-
- mov r0,#0
- swi XQTM_ReadVULevels
- bvs _noqtm
-
- swi XQTM_Info
- bvs _nosong
- ldr r0,back
- str r0,backsp
- mov r0,#1
- str r0,_songpres
- str r0,_qtmpres
-
- adr r8,old
- sub r8,r8,#1
-
- ; get sprite addresses
- ldr r9,mainsp
- ldr r10,vusp
- bl clearvu ; get rid of vu bar
-
- mov r1,#4
- add r9,r9,#24
-
- ._uploop
- mov r0,r1 ; read VU level
- swi QTM_ReadVULevels
- mov r2,r0,asr #2
- strb r2,[r8,r1]
-
- bl drawvu ; draw it
- ; next vu bar
- sub r9,r9,#8 ; next position
- subs r1,r1,#1
- bne _uploop
-
- ldr r8,old
- ldr r9,new
- cmp r8,r9
- ; update sprite
- movne r0,#0
- adrne r1,setblock
- swine XWimp_SetIconState
-
- str r8,new
-
- ldmfd r13!,{r0-r12,r15}
-
- ._songpres dcd 1
- ._nosong
-
- bl checkdsym
-
- ldr r0,nosong
- str r0,backsp
- ldr r9,mainsp
- ldr r10,vusp
- bl clearvu ; get rid of vu bar
-
- ldr r0,_songpres
- cmp r0,#0
-
- ; update sprite
- movne r0,#0
- adrne r1,setblock
- swine XWimp_SetIconState
-
- mov r0,#0
- str r0,_songpres
-
- ldmfd r13!,{r0-r12,r15}
-
- ._qtmpres dcd 1
- ._noqtm
-
- bl checkdsym
-
- ldr r0,loadqtm
- str r0,backsp
- ldr r9,mainsp
- ldr r10,vusp
- bl clearvu ; get rid of vu bar
-
- ldr r0,_qtmpres
- cmp r0,#0
-
- ; update sprite
- movne r0,#0
- adrne r1,setblock
- swine XWimp_SetIconState
-
- mov r0,#0
- str r0,_qtmpres
-
- ldmfd r13!,{r0-r12,r15}
-
- .checkdsym
- stmfd r13!,{r0-r12,r14}
-
- mov r0,#0
- str r0,dsym
-
- swi XQTM_Info
- bvc _fin
-
- mov r0,#0
- ;swi XDSym_VuBar
- bvs _fin
-
- mov r0,#1
- str r0,dsym
-
- ;mov r0,#5
- ;swi DSym_VuGravity
- ;swi DSym_Configure
-
- ._fin
- ldmfd r13!,{r0-r12,r15}
-
- .old dcd 0
- .new dcd 0
-
- .drawvu
- ; r0 = height (0-64)
- ; r9 = pointer to main sprite (change address to change pos)
- ; r10 = pointer vu sprite
- stmfd r13!,{r0-r12,r14}
-
- mov r0,r0,asr #2 ; adjust height
- cmp r0,#0 ; do we need to bother plotting this one?
- ble _fin
-
- rsb r1,r0,#16 ; no of lines to skip
- mov r2,#32
- mul r3,r2,r1 ; no of bytes to skip!
- add r9,r9,r3
- ; do same to vu sprite
- mov r2,#8
- mul r3,r2,r1
- add r10,r10,r3
-
- ._drawloop
- ldmia r10!,{r3-r4} ; load it
- stmia r9,{r3-r4} ; store it
-
- add r9,r9,#32 ; next line
- subs r0,r0,#1 ; have we finished?
- bne _drawloop
-
- ._fin
- ldmfd r13!,{r0-r12,r15}
-
- .drawsvu
- ; r0 = height (0-64)
- ; r9 = pointer to main sprite (change address to change pos)
- ; r10 = pointer vu sprite
- stmfd r13!,{r0-r12,r14}
-
- mov r0,r0,asr #2 ; adjust height
- cmp r0,#0 ; do we need to bother plotting this one?
- ble _fin
-
- rsb r1,r0,#16 ; no of lines to skip
- mov r2,#32
- mul r3,r2,r1 ; no of bytes to skip!
- add r9,r9,r3
- ; do same to vu sprite
- mov r2,#4
- mul r3,r2,r1
- add r10,r10,r3
-
- ._drawloop
- ldmia r10!,{r3} ; load it
- stmia r9,{r3} ; store it
-
- add r9,r9,#32 ; next line
- subs r0,r0,#1 ; have we finished?
- bne _drawloop
-
- ._fin
- ldmfd r13!,{r0-r12,r15}
-
- .clearvu
- ; r9 = pointer to main sprite
- stmfd r13!,{r0-r12,r14}
-
- mov r0,#17
-
- ldr r10,backsp ; pointer to background
-
- ._drawloop
- #rept 4
- ldmia r10!,{r3-r4}
- stmia r9!,{r3-r4} ; store it
- #endr
-
- subs r0,r0,#1 ; have we finished?
- bne _drawloop
-
- ._fin
- ldmfd r13!,{r0-r12,r15}
-
- .message
- stmfd r13!,{r0-r12,r14}
-
- ldr r0,[r1,#16] ; get message no.
- cmp r0,#0 ; shall we quit?
- moveq r2,#1 ; yup
- streq r2,exit
-
- ldmfd r13!,{r0-r12,r15}
-
- .click
- stmfd r13!,{r0-r12,r14}
-
- ldr r0,[r1,#8]
- cmp r0,#2
- bne _fin
-
- mov r10,r1
-
- ldr r0,mainmenu
- swi MenuUtil_Show
-
- ;adr r1,menu ; menu addr
- ;ldr r2,[r10] ; x
- ;sub r2,r2,#64
- ;mov r3,#(192-44)
-
- ;swi XWimp_CreateMenu
-
- ._fin
- ldmfd r13!,{r0-r12,r15}
-
- .findsprite
- ; r0 - sprite number
- ; r1 - ptr to area
- stmfd r13!,{r1-r12,r14}
-
- ldr r2,[r1,#8] ; offset to first sprite
- add r1,r1,r2
-
- ._findloop
- cmp r0,#0
- ble _exitloop
-
- ldr r2,[r1] ; offset to next sprite
- add r1,r1,r2
-
- sub r0,r0,#1
- b _findloop
-
- ._exitloop
- ldr r2,[r1,#32] ; offset to image
- add r0,r1,r2
-
- ldmfd r13!,{r1-r12,r15}
-
- .ahem
-
- ;mov r0,#0
- ;swi XDSym_VuBar
- ;movvs r0,#0
- ;strvs r0,dsym
- ;ldmvsfd r13!,{r0-r12,r15}
-
- ldr r0,back
- str r0,backsp
- ;mov r0,#1
- ;str r0,_songpres
-
- ; get sprite addresses
- ldr r9,mainsp
- ldr r10,smvusp
- bl clearvu ; get rid of vu bar
-
- ;mov r0,#-1
- ;swi XDSym_Voices
- ;cmp r0,#4
- mov r0,#0
- mov r1,#0
- mov r2,#0
- mov r3,#0
- mov r4,#0
- swi Sound_Configure
- cmp r0,#4
- ble _up4voice
-
- mov r12,#7
- add r9,r9,#28
-
- ._uploop
- mov r0,r12 ; read VU level
- bl readvulevel
- mov r2,r1,asr #2
- ;strb r2,[r8,r12]
-
- mov r0,r2
- bl drawsvu ; draw it
- ; next vu bar
- sub r9,r9,#4 ; next position
- sub r12,r12,#1
- cmp r12,#0
- bge _uploop
-
- ; update sprite
- mov r0,#0
- adr r1,setblock
- swi XWimp_SetIconState
-
- ldmfd r13!,{r0-r12,r15}
-
- ._up4voice
- ldr r10,vusp
-
- mov r12,#3
- add r9,r9,#24
-
- ._uploop2
- mov r0,r12 ; read VU level
- bl readvulevel
- ;swi DSym_VuBar
- mov r1,r1,asr #2
- ;strb r2,[r8,r12]
-
- mov r0,r1
- bl drawvu ; draw it
- ; next vu bar
- sub r9,r9,#8 ; next position
- sub r12,r12,#1
- cmp r12,#0
- bge _uploop2
-
- ; update sprite
- mov r0,#0
- adr r1,setblock
- swi XWimp_SetIconState
-
- ldmfd r13!,{r0-r12,r15}
-
- .dsym dcd 0
- .dsvoic dcd 0
-
- .sprs dcd 2660
- incbin <tmp$path>.Sprites
- align
-
- .readvulevel
- ; r0 = channel to read
- stmfd r13!,{r0,r2-r12,r14}
-
- cmp r0,#7
- adrgt r0,_erm
- swigt OS_GenerateError
-
- cmp r0,#0
- adrlt r0,_erm2
- swilt OS_GenerateError
-
- mov r12,#32534536
- ldrb r1,[r12,r0]
-
- adr r3,transtable
- ldrb r4,[r3,r1]
- mov r1,r4
- tst r1,#128
- subne r1,r1,#256
-
- cmp r1,#0
- mvnlt r1,r1
- addlt r1,r1,#1
-
- mov r1,r1,lsl #1
- cmp r1,#256
- movge r1,#0
-
- adr r10,_olblock
- ldrb r2,[r10,r0]
-
- ldr r3,decay
- cmp r3,#0
- ble _nope
-
- cmp r2,r1
- movge r1,r2
- subge r1,r1,r3
-
- ._nope
- cmp r1,#0
- movle r1,#0
-
- adr r10,_olblock
- strb r1,[r10,r0]
-
- ldmfd r13!,{r0,r2-r12,r15}
- ._olblock
- dbb 16
- ._erm dcd 1
- dcb "Er, I canne read from dat channel!",0
- align
- ._erm2 dcd 1
- dcb "Don't do dat to me again! BUG!",0
- align
-
- .make_de_menu
- stmfd r13!,{r0-r12,r14}
-
- mov r0,#012
- mov r1,#0
- swi MenuUtil_Initialise
-
- mov r0,#0
- adr r1,_speedtitle
- mov r2,#10
- swi MenuUtil_New
- str r0,speedmenu
-
- mov r0,#0
- adr r1,_sp1
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- adr r1,_sp2
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- adr r1,_sp3
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- adr r1,_sp4
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- adr r1,_typetitle
- mov r2,#10
- swi MenuUtil_New
- str r0,typemenu
-
- mov r0,#0
- adr r1,_type1
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- adr r1,_type2
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- adr r1,_type3
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- adr r1,_maintitle
- mov r2,#10
- swi MenuUtil_New
- str r0,mainmenu
-
- mov r0,#0
- adr r1,_typetitle
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- ldr r1,typemenu
- swi MenuUtil_SubMenu
-
- mov r0,#0
- adr r1,_speedtitle
- mov r2,#0
- swi MenuUtil_Add
-
- mov r0,#0
- ldr r1,speedmenu
- swi MenuUtil_SubMenu
-
- mov r0,#0
- adr r1,_quit
- mov r2,#0
- swi MenuUtil_Add
-
- ldmfd r13!,{r0-r12,r15}
- ._maintitle dcb "VU Bars 2",0
- ._typetitle dcb "Type",0
- ._quit dcb "Quit",0
-
- ._type1 dcb "VU-Bars",0
- ._type2 dcb "Speakers",0
- ._type3 dcb "Levelometer",0
-
- ._speedtitle dcb "Decay",0
- ._sp1 dcb "Slow",0
- ._sp2 dcb "Medium",0
- ._sp3 dcb "Fast",0
- ._sp4 dcb "'Real'",0
- align
-
- .mainmenu dcd 0
- .typemenu dcd 0
- .speedmenu dcd 0
-
- .plotspeakers
- stmfd r13!,{r0-r12,r14}
-
- ldr r9,mainsp
- ldr r10,vusp
- bl clearvu ; get rid of vu bar
-
- bl calcstereo
-
- ldr r1,leftlev
- mov r1,r1,asr #8 ; calculate left postion
-
- cmp r1,#3
- movge r1,#2
-
- mov r1,r1,lsl #2
- adr r2,sp1sp
-
- ldr r10,[r2,r1] ; get the sprite
- bl drawspeak
-
- add r9,r9,#16
- ldr r1,rightlev
- mov r1,r1,asr #8 ; calculate left postion
-
- cmp r1,#3
- movge r1,#2
-
- mov r1,r1,lsl #2
- adr r2,sp1sp
-
- ldr r10,[r2,r1] ; get the sprite
- bl drawspeak
-
- ldmfd r13!,{r0-r12,r15}
- .sp1sp dcd 0
- .sp2sp dcd 0
- .sp3sp dcd 0
- .sp4sp dcd 0
-
- .calcstereo
- stmfd r13!,{r0-r12,r14}
-
- mov r10,#8 ; no of voices
- mov r9,#1 ; voice on
-
- mov r7,#0 ; left level
- mov r8,#0 ; right level
-
- ._calcloop
-
- sub r0,r9,#1
- bl readvulevel
-
- mov r3,r1
-
- mov r0,r9
- mov r1,#-128
- swi XSound_Stereo
-
- cmp r1,#-128
- movle r0,#1
- movle r1,#-128
- movle r9,#1
- swile XSound_Stereo
-
- rsb r5,r1,#128 ; left level
- mul r4,r3,r5 ; level*stereo
- mov r4,r4,asr #8 ; 16-bit accuracy is a bit much
- add r7,r7,r4
-
- add r5,r1,#128 ; right level
- mul r4,r3,r5 ; level*stereo
- mov r4,r4,asr #8 ; 16-bit accuracy is a bit much
- add r8,r8,r4
-
- add r9,r9,#1
- subs r10,r10,#1
- bne _calcloop
-
- cmp r7,#0
- mvnlt r7,r7
- str r7,leftlev
- cmp r8,#0
- mvnlt r8,r8
- str r8,rightlev
-
- ldmfd r13!,{r0-r12,r15}
-
- .leftlev dcd 0
- .rightlev dcd 0
-
- .drawspeak
- ; r9 = pointer to main sprite (change address to change pos)
- ; r10 = pointer vu sprite
- stmfd r13!,{r0-r12,r14}
-
- mov r0,#17
-
- ._drawloop
- ldmia r10!,{r3-r6} ; load it
- stmia r9,{r3-r6} ; store it
-
- add r9,r9,#32 ; next line
- subs r0,r0,#1 ; have we finished?
- bne _drawloop
-
- ._fin
- ldmfd r13!,{r0-r12,r15}
-
- .transtable
- dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- dcb 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255
- dcb 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255
- dcb 1,255,1,255,1,255,1,255,1,254,1,254,1,254,1,254
- dcb 1,254,1,254,1,254,1,254,2,254,2,254,2,253,2,253
- dcb 2,253,2,253,2,253,2,253,3,253,3,253,3,252,3,252
- dcb 3,252,3,252,4,252,4,251,4,251,4,251,5,251,5,250
- dcb 5,250,5,250,6,250,6,249,6,249,6,249,7,249,7,248
- dcb 7,248,8,248,8,247,9,247,9,246,10,246,10,245,11,245
- dcb 11,244,12,244,12,243,13,243,13,242,14,242,14,241,15,241
- dcb 15,240,16,240,17,239,18,238,19,237,20,236,21,235,22,234
- dcb 23,233,24,232,25,231,26,230,27,229,28,228,29,227,30,226
- dcb 31,225,33,224,35,222,37,220,39,218,41,216,43,214,45,212
- dcb 47,210,49,208,51,206,53,204,55,202,57,200,59,198,61,196
- dcb 63,194,67,192,71,188,75,184,79,180,83,176,87,172,91,168
- dcb 95,164,99,160,103,156,107,152,111,148,115,144,119,140,127,136
- align
-
- .click_de_menu
- stmfd r13!,{r0-r12,r14}
-
- ldr r0,[r1,#0]
- cmp r0,#2 ; is it a quit option?
-
- moveq r2,#1 ; then we must quit! Bogus!
- streq r2,exit
-
- cmp r0,#0
- bne _nottype
-
- ldr r2,[r1,#4]
- cmp r2,#-1
- ble _nottype
-
- str r2,VuType
-
- ._nottype
- cmp r0,#1
- bne _notdecay
-
- ldr r2,[r1,#4]
- cmp r2,#-1
- ble _nottype
-
- mov r3,#16
- cmp r2,#0
- moveq r3,#8
-
- cmp r2,#1
- moveq r3,#16
-
- cmp r2,#2
- moveq r3,#32
-
- cmp r2,#3
- moveq r3,#0
-
- str r3,decay
-
- ._notdecay
- ldmfd r13!,{r0-r12,r15}
- .decay dcd 16
-
- .plotlevel
- stmfd r13!,{r0-r12,r14}
-
- ldr r9,mainsp
- ldr r10,vusp
-
- ldr r0,_thing
- add r0,r0,#1
- cmp r0,#4
- movge r0,#0
- str r0,_thing
- blt _noskroll
-
- ; skroll the icon
- add r0,r9,#1
- mov r1,r9
-
- mov r7,#17
-
- ._loop
- #rept 31
- ldrb r2,[r0],#1
- strb r2,[r1],#1
- #endr
-
- mov r2,#119
- strb r2,[r1]
-
- add r0,r0,#1
- add r1,r1,#1
-
- subs r7,r7,#1
- bne _loop
-
- ._noskroll
- bl calcstereo
-
- ; left
- ldr r0,leftlev
- mov r0,r0,asr #7
- cmp r0,#8
- movge r0,#8
- rsb r0,r0,#8
-
- ; calc ypos
- mov r1,#32
- mul r2,r1,r0
- add r2,r2,#31
-
- mov r3,#187
- strb r3,[r9,r2]
-
- ; right
- ldr r0,rightlev
- mov r0,r0,asr #7
- cmp r0,#8
- movge r0,#8
- rsb r0,r0,#8
-
- ; calc ypos
- mov r1,#32
- mul r2,r1,r0
- add r2,r2,#31
- add r2,r2,#32*8
-
- mov r3,#187
- strb r3,[r9,r2]
-
- ldmfd r13!,{r0-r12,r15}
- ._thing dcd 0
-
- dcb 10,"Well, that just about wraps it up..."
- dcb 10,"There should be nothing after this ---->"
- align
- ; and there shouldn't, too!
- ; wimp poll block
- .block
- ; and then there was a big pile of poo
- ; or bliss if you are a dung beatle
-