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

  1.  
  2. ; Source code for !VUBars
  3. ; ***** extASM format *****
  4. ; © Andrew Hunter, 1995
  5.  
  6. #speed 128
  7. ; #type &ffa
  8. #base 0
  9. #name ^.!RunImage
  10. #smile
  11. TEMP r11
  12.  
  13. ; lets go!
  14. B start
  15.  
  16. ; bitsa text
  17. dcb 10,"This is "
  18. .wimpname dcb "VU Bars",0
  19. align
  20. dcb 10,"Oi! Hacker! Bugger off. This code is MINE, got it? If you want some"
  21. dcb " of your own, write it yerself!",10
  22. align
  23.  
  24. .start
  25.  
  26. ; set up a stack (full descending, from top of memory)
  27. ; Wow, dudes. Far out.
  28.  
  29. swi XOS_GetEnv
  30. mov r13,r1
  31. sub r13,r13,#32
  32.  
  33. ; get the Wimp going!
  34. mov r0,#200
  35. mov r1,#&4b534154        ; extASM allows this... EXCELLENT!
  36. adr r2,wimpname
  37. swi XWimp_Initialise
  38. swivs XOS_Exit            ; if there is an error, DIEEE!!!! (Bogus)
  39.  
  40. bl make_de_menu
  41.  
  42. bl maincode
  43.  
  44. swi XOS_Exit
  45.  
  46. .ibarike dcd -1
  47. dcd 0
  48. dcd 0
  49. dcd 128
  50. dcd 68
  51. dcd &311a
  52. .spname dcd 0
  53. .spaddr dcd 0
  54. dcd 8
  55.  
  56. .name dcb "vbars",0
  57. align
  58.  
  59. .mainsp dcd 0
  60. .vusp dcd 0
  61. .smvusp dcd 0
  62. .loadqtm dcd 0
  63. .nosong dcd 0
  64. .back dcd 0
  65.  
  66. .backsp dcd 0
  67.  
  68. .setblock dcd -1
  69. .ihandle dcd 0
  70. dcd 0
  71. dcd 0
  72.  
  73. .menu dcb "VU-Bars",0    ; 8 char title
  74. dcd 0
  75. dcb 7,2,7,0
  76. dcd 92,44
  77. dcd 0
  78. dcd 1<<7        ; menu flags
  79. dcd 0            ; submenu pointer
  80. dcd &7000021        ; flags
  81. dcb "Quit",0,0,0,0
  82. dcd 0
  83.  
  84. .maincode
  85. stmfd r13!,{r0-r12,r14}
  86.  
  87. ; deal with indirected garbage.
  88. adr r0,sprs
  89. str r0,spaddr
  90. adr r0,name
  91. str r0,spname
  92.  
  93. ; work out address of sprites...
  94. mov r0,#0
  95. adr r1,sprs
  96. bl findsprite
  97. str r0,mainsp
  98.  
  99. mov r0,#1
  100. bl findsprite
  101. str r0,vusp
  102.  
  103. mov r0,#5
  104. bl findsprite
  105. str r0,smvusp
  106.  
  107. mov r0,#6
  108. bl findsprite
  109. str r0,sp1sp
  110.  
  111. mov r0,#7
  112. bl findsprite
  113. str r0,sp2sp
  114.  
  115. mov r0,#8
  116. bl findsprite
  117. str r0,sp3sp
  118.  
  119. mov r0,#9
  120. bl findsprite
  121. str r0,sp4sp
  122.  
  123. mov r0,#4
  124. bl findsprite
  125. str r0,back
  126. str r0,backsp
  127.  
  128. mov r0,#3
  129. bl findsprite
  130. str r0,loadqtm
  131.  
  132. mov r0,#2
  133. bl findsprite
  134. str r0,nosong
  135. ;adr r0,sprs+&3C
  136. ;str r0,mainsp
  137. ;adr r0,sprs+&288
  138. ;str r0,vusp
  139.  
  140. mov r0,#0
  141. adr r1,ibarike
  142. swi XWimp_CreateIcon
  143. str r0,ihandle
  144.  
  145. mov r0,#0
  146. str r0,exit
  147.  
  148. ._pollloop
  149. mov r0,#0
  150. adr r1,block
  151. swi Wimp_Poll            ; NOT XWimp_Poll... we want to dieeee
  152.  
  153. ; check reason code
  154. cmp r0,#6
  155. bleq click
  156.  
  157. cmp r0,#9            ; is it a menu? BONUS!
  158. bleq click_de_menu
  159.  
  160. cmp r0,#17            ; is it a message?
  161. cmpne r0,#18
  162. bleq message            ; Far out, dudes!
  163.  
  164. bl update            ; time to update dem sprites
  165.  
  166. ; do we exit?
  167. ldr r1,exit
  168. cmp r1,#0
  169. beq _pollloop
  170.  
  171. ldmfd r13!,{r0-r12,r15}
  172.  
  173. .exit dcd 0
  174.  
  175. .VuType dcd 0
  176.  
  177. .update
  178. stmfd r13!,{r0-r12,r14}
  179.  
  180. ldr r4,VuType
  181. cmp r4,#0
  182.  
  183. beq ahem            ; PARTY ON DUDES!
  184.  
  185. cmp r4,#1
  186. bleq plotspeakers
  187.  
  188. cmp r4,#2
  189. bleq plotlevel
  190.  
  191. ; update sprite
  192. mov r0,#0
  193. adr r1,setblock
  194. swi XWimp_SetIconState
  195.  
  196. ldmfd r13!,{r0-r12,r15}
  197.  
  198. mov r0,#0
  199. swi XQTM_ReadVULevels
  200. bvs _noqtm
  201.  
  202. swi XQTM_Info
  203. bvs _nosong
  204. ldr r0,back
  205. str r0,backsp
  206. mov r0,#1
  207. str r0,_songpres
  208. str r0,_qtmpres
  209.  
  210. adr r8,old
  211. sub r8,r8,#1
  212.  
  213. ; get sprite addresses
  214. ldr r9,mainsp
  215. ldr r10,vusp
  216. bl clearvu            ; get rid of vu bar
  217.  
  218. mov r1,#4
  219. add r9,r9,#24
  220.  
  221. ._uploop
  222. mov r0,r1            ; read VU level
  223. swi QTM_ReadVULevels
  224. mov r2,r0,asr #2
  225. strb r2,[r8,r1]
  226.  
  227. bl drawvu            ; draw it
  228. ; next vu bar
  229. sub r9,r9,#8            ; next position
  230. subs r1,r1,#1
  231. bne _uploop
  232.  
  233. ldr r8,old
  234. ldr r9,new
  235. cmp r8,r9
  236. ; update sprite
  237. movne r0,#0
  238. adrne r1,setblock
  239. swine XWimp_SetIconState
  240.  
  241. str r8,new
  242.  
  243. ldmfd r13!,{r0-r12,r15}
  244.  
  245. ._songpres dcd 1
  246. ._nosong
  247.  
  248. bl checkdsym
  249.  
  250. ldr r0,nosong
  251. str r0,backsp
  252. ldr r9,mainsp
  253. ldr r10,vusp
  254. bl clearvu            ; get rid of vu bar
  255.  
  256. ldr r0,_songpres
  257. cmp r0,#0
  258.  
  259. ; update sprite
  260. movne r0,#0
  261. adrne r1,setblock
  262. swine XWimp_SetIconState
  263.  
  264. mov r0,#0
  265. str r0,_songpres
  266.  
  267. ldmfd r13!,{r0-r12,r15}
  268.  
  269. ._qtmpres dcd 1
  270. ._noqtm
  271.  
  272. bl checkdsym
  273.  
  274. ldr r0,loadqtm
  275. str r0,backsp
  276. ldr r9,mainsp
  277. ldr r10,vusp
  278. bl clearvu            ; get rid of vu bar
  279.  
  280. ldr r0,_qtmpres
  281. cmp r0,#0
  282.  
  283. ; update sprite
  284. movne r0,#0
  285. adrne r1,setblock
  286. swine XWimp_SetIconState
  287.  
  288. mov r0,#0
  289. str r0,_qtmpres
  290.  
  291. ldmfd r13!,{r0-r12,r15}
  292.  
  293. .checkdsym
  294. stmfd r13!,{r0-r12,r14}
  295.  
  296. mov r0,#0
  297. str r0,dsym
  298.  
  299. swi XQTM_Info
  300. bvc _fin
  301.  
  302. mov r0,#0
  303. ;swi XDSym_VuBar
  304. bvs _fin
  305.  
  306. mov r0,#1
  307. str r0,dsym
  308.  
  309. ;mov r0,#5
  310. ;swi DSym_VuGravity
  311. ;swi DSym_Configure
  312.  
  313. ._fin
  314. ldmfd r13!,{r0-r12,r15}
  315.  
  316. .old dcd 0
  317. .new dcd 0
  318.  
  319. .drawvu
  320. ; r0 = height (0-64)
  321. ; r9 = pointer to main sprite (change address to change pos)
  322. ; r10 = pointer vu sprite
  323. stmfd r13!,{r0-r12,r14}
  324.  
  325. mov r0,r0,asr #2        ; adjust height
  326. cmp r0,#0            ; do we need to bother plotting this one?
  327. ble _fin
  328.  
  329. rsb r1,r0,#16            ; no of lines to skip
  330. mov r2,#32
  331. mul r3,r2,r1            ; no of bytes to skip!
  332. add r9,r9,r3
  333. ; do same to vu sprite
  334. mov r2,#8
  335. mul r3,r2,r1
  336. add r10,r10,r3
  337.  
  338. ._drawloop
  339. ldmia r10!,{r3-r4}        ; load it
  340. stmia r9,{r3-r4}        ; store it
  341.  
  342. add r9,r9,#32            ; next line
  343. subs r0,r0,#1            ; have we finished?
  344. bne _drawloop
  345.  
  346. ._fin
  347. ldmfd r13!,{r0-r12,r15}
  348.  
  349. .drawsvu
  350. ; r0 = height (0-64)
  351. ; r9 = pointer to main sprite (change address to change pos)
  352. ; r10 = pointer vu sprite
  353. stmfd r13!,{r0-r12,r14}
  354.  
  355. mov r0,r0,asr #2        ; adjust height
  356. cmp r0,#0            ; do we need to bother plotting this one?
  357. ble _fin
  358.  
  359. rsb r1,r0,#16            ; no of lines to skip
  360. mov r2,#32
  361. mul r3,r2,r1            ; no of bytes to skip!
  362. add r9,r9,r3
  363. ; do same to vu sprite
  364. mov r2,#4
  365. mul r3,r2,r1
  366. add r10,r10,r3
  367.  
  368. ._drawloop
  369. ldmia r10!,{r3}            ; load it
  370. stmia r9,{r3}            ; store it
  371.  
  372. add r9,r9,#32            ; next line
  373. subs r0,r0,#1            ; have we finished?
  374. bne _drawloop
  375.  
  376. ._fin
  377. ldmfd r13!,{r0-r12,r15}
  378.  
  379. .clearvu
  380. ; r9 = pointer to main sprite
  381. stmfd r13!,{r0-r12,r14}
  382.  
  383. mov r0,#17
  384.  
  385. ldr r10,backsp            ; pointer to background
  386.  
  387. ._drawloop
  388. #rept 4
  389. ldmia r10!,{r3-r4}
  390. stmia r9!,{r3-r4}        ; store it
  391. #endr
  392.  
  393. subs r0,r0,#1            ; have we finished?
  394. bne _drawloop
  395.  
  396. ._fin
  397. ldmfd r13!,{r0-r12,r15}
  398.  
  399. .message
  400. stmfd r13!,{r0-r12,r14}
  401.  
  402. ldr r0,[r1,#16]            ; get message no.
  403. cmp r0,#0            ; shall we quit?
  404. moveq r2,#1            ; yup
  405. streq r2,exit
  406.  
  407. ldmfd r13!,{r0-r12,r15}
  408.  
  409. .click
  410. stmfd r13!,{r0-r12,r14}
  411.  
  412. ldr r0,[r1,#8]
  413. cmp r0,#2
  414. bne _fin
  415.  
  416. mov r10,r1
  417.  
  418. ldr r0,mainmenu
  419. swi MenuUtil_Show
  420.  
  421. ;adr r1,menu        ; menu addr
  422. ;ldr r2,[r10]        ; x
  423. ;sub r2,r2,#64
  424. ;mov r3,#(192-44)
  425.  
  426. ;swi XWimp_CreateMenu
  427.  
  428. ._fin
  429. ldmfd r13!,{r0-r12,r15}
  430.  
  431. .findsprite
  432. ; r0 - sprite number
  433. ; r1 - ptr to area
  434. stmfd r13!,{r1-r12,r14}
  435.  
  436. ldr r2,[r1,#8]            ; offset to first sprite
  437. add r1,r1,r2
  438.  
  439. ._findloop
  440. cmp r0,#0
  441. ble _exitloop
  442.  
  443. ldr r2,[r1]            ; offset to next sprite
  444. add r1,r1,r2
  445.  
  446. sub r0,r0,#1
  447. b _findloop
  448.  
  449. ._exitloop
  450. ldr r2,[r1,#32]            ; offset to image
  451. add r0,r1,r2
  452.  
  453. ldmfd r13!,{r1-r12,r15}
  454.  
  455. .ahem
  456.  
  457. ;mov r0,#0
  458. ;swi XDSym_VuBar
  459. ;movvs r0,#0
  460. ;strvs r0,dsym
  461. ;ldmvsfd r13!,{r0-r12,r15}
  462.  
  463. ldr r0,back
  464. str r0,backsp
  465. ;mov r0,#1
  466. ;str r0,_songpres
  467.  
  468. ; get sprite addresses
  469. ldr r9,mainsp
  470. ldr r10,smvusp
  471. bl clearvu            ; get rid of vu bar
  472.  
  473. ;mov r0,#-1
  474. ;swi XDSym_Voices
  475. ;cmp r0,#4
  476. mov r0,#0
  477. mov r1,#0
  478. mov r2,#0
  479. mov r3,#0
  480. mov r4,#0
  481. swi Sound_Configure
  482. cmp r0,#4
  483. ble _up4voice
  484.  
  485. mov r12,#7
  486. add r9,r9,#28
  487.  
  488. ._uploop
  489. mov r0,r12            ; read VU level
  490. bl readvulevel
  491. mov r2,r1,asr #2
  492. ;strb r2,[r8,r12]
  493.  
  494. mov r0,r2
  495. bl drawsvu            ; draw it
  496. ; next vu bar
  497. sub r9,r9,#4            ; next position
  498. sub r12,r12,#1
  499. cmp r12,#0
  500. bge _uploop
  501.  
  502. ; update sprite
  503. mov r0,#0
  504. adr r1,setblock
  505. swi XWimp_SetIconState
  506.  
  507. ldmfd r13!,{r0-r12,r15}
  508.  
  509. ._up4voice
  510. ldr r10,vusp
  511.  
  512. mov r12,#3
  513. add r9,r9,#24
  514.  
  515. ._uploop2
  516. mov r0,r12            ; read VU level
  517. bl readvulevel
  518. ;swi DSym_VuBar
  519. mov r1,r1,asr #2
  520. ;strb r2,[r8,r12]
  521.  
  522. mov r0,r1
  523. bl drawvu            ; draw it
  524. ; next vu bar
  525. sub r9,r9,#8            ; next position
  526. sub r12,r12,#1
  527. cmp r12,#0
  528. bge _uploop2
  529.  
  530. ; update sprite
  531. mov r0,#0
  532. adr r1,setblock
  533. swi XWimp_SetIconState
  534.  
  535. ldmfd r13!,{r0-r12,r15}
  536.  
  537. .dsym dcd 0
  538. .dsvoic dcd 0
  539.  
  540. .sprs dcd 2660
  541. incbin <tmp$path>.Sprites
  542. align
  543.  
  544. .readvulevel
  545. ; r0 = channel to read
  546. stmfd r13!,{r0,r2-r12,r14}
  547.  
  548. cmp r0,#7
  549. adrgt r0,_erm
  550. swigt OS_GenerateError
  551.  
  552. cmp r0,#0
  553. adrlt r0,_erm2
  554. swilt OS_GenerateError
  555.  
  556. mov r12,#32534536
  557. ldrb r1,[r12,r0]
  558.  
  559. adr r3,transtable
  560. ldrb r4,[r3,r1]
  561. mov r1,r4
  562. tst r1,#128
  563. subne r1,r1,#256
  564.  
  565. cmp r1,#0
  566. mvnlt r1,r1
  567. addlt r1,r1,#1
  568.  
  569. mov r1,r1,lsl #1
  570. cmp r1,#256
  571. movge r1,#0
  572.  
  573. adr r10,_olblock
  574. ldrb r2,[r10,r0]
  575.  
  576. ldr r3,decay
  577. cmp r3,#0
  578. ble _nope
  579.  
  580. cmp r2,r1
  581. movge r1,r2
  582. subge r1,r1,r3
  583.  
  584. ._nope
  585. cmp r1,#0
  586. movle r1,#0
  587.  
  588. adr r10,_olblock
  589. strb r1,[r10,r0]
  590.  
  591. ldmfd r13!,{r0,r2-r12,r15}
  592. ._olblock
  593. dbb 16
  594. ._erm dcd 1
  595. dcb "Er, I canne read from dat channel!",0
  596. align
  597. ._erm2 dcd 1
  598. dcb "Don't do dat to me again! BUG!",0
  599. align
  600.  
  601. .make_de_menu
  602. stmfd r13!,{r0-r12,r14}
  603.  
  604. mov r0,#012
  605. mov r1,#0
  606. swi MenuUtil_Initialise
  607.  
  608. mov r0,#0
  609. adr r1,_speedtitle
  610. mov r2,#10
  611. swi MenuUtil_New
  612. str r0,speedmenu
  613.  
  614. mov r0,#0
  615. adr r1,_sp1
  616. mov r2,#0
  617. swi MenuUtil_Add
  618.  
  619. mov r0,#0
  620. adr r1,_sp2
  621. mov r2,#0
  622. swi MenuUtil_Add
  623.  
  624. mov r0,#0
  625. adr r1,_sp3
  626. mov r2,#