home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 4
/
DATAFILE_PDCD4.iso
/
utilities
/
utilsa
/
asm
/
Demo
/
!VOOBars
/
Src
/
VUSrc
< prev
Wrap
Text File
|
1996-03-17
|
13KB
|
957 lines
; 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,#