home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilsa / asm / Demo / !VOOBars / Src / VUSrc < prev   
Encoding:
Text File  |  1996-03-17  |  12.8 KB  |  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,#0
  627. swi MenuUtil_Add
  628.  
  629. mov r0,#0
  630. adr r1,_sp4
  631. mov r2,#0
  632. swi MenuUtil_Add
  633.  
  634. mov r0,#0
  635. adr r1,_typetitle
  636. mov r2,#10
  637. swi MenuUtil_New
  638. str r0,typemenu
  639.  
  640. mov r0,#0
  641. adr r1,_type1
  642. mov r2,#0
  643. swi MenuUtil_Add
  644.  
  645. mov r0,#0
  646. adr r1,_type2
  647. mov r2,#0
  648. swi MenuUtil_Add
  649.  
  650. mov r0,#0
  651. adr r1,_type3
  652. mov r2,#0
  653. swi MenuUtil_Add
  654.  
  655. mov r0,#0
  656. adr r1,_maintitle
  657. mov r2,#10
  658. swi MenuUtil_New
  659. str r0,mainmenu
  660.  
  661. mov r0,#0
  662. adr r1,_typetitle
  663. mov r2,#0
  664. swi MenuUtil_Add
  665.  
  666. mov r0,#0
  667. ldr r1,typemenu
  668. swi MenuUtil_SubMenu
  669.  
  670. mov r0,#0
  671. adr r1,_speedtitle
  672. mov r2,#0
  673. swi MenuUtil_Add
  674.  
  675. mov r0,#0
  676. ldr r1,speedmenu
  677. swi MenuUtil_SubMenu
  678.  
  679. mov r0,#0
  680. adr r1,_quit
  681. mov r2,#0
  682. swi MenuUtil_Add
  683.  
  684. ldmfd r13!,{r0-r12,r15}
  685. ._maintitle dcb "VU Bars 2",0
  686. ._typetitle dcb "Type",0
  687. ._quit dcb "Quit",0
  688.  
  689. ._type1 dcb "VU-Bars",0
  690. ._type2 dcb "Speakers",0
  691. ._type3 dcb "Levelometer",0
  692.  
  693. ._speedtitle dcb "Decay",0
  694. ._sp1 dcb "Slow",0
  695. ._sp2 dcb "Medium",0
  696. ._sp3 dcb "Fast",0
  697. ._sp4 dcb "'Real'",0
  698. align
  699.  
  700. .mainmenu dcd 0
  701. .typemenu dcd 0
  702. .speedmenu dcd 0
  703.  
  704. .plotspeakers
  705. stmfd r13!,{r0-r12,r14}
  706.  
  707. ldr r9,mainsp
  708. ldr r10,vusp
  709. bl clearvu            ; get rid of vu bar
  710.  
  711. bl calcstereo
  712.  
  713. ldr r1,leftlev
  714. mov r1,r1,asr #8        ; calculate left postion
  715.  
  716. cmp r1,#3
  717. movge r1,#2
  718.  
  719. mov r1,r1,lsl #2
  720. adr r2,sp1sp
  721.  
  722. ldr r10,[r2,r1]            ; get the sprite
  723. bl drawspeak
  724.  
  725. add r9,r9,#16
  726. ldr r1,rightlev
  727. mov r1,r1,asr #8        ; calculate left postion
  728.  
  729. cmp r1,#3
  730. movge r1,#2
  731.  
  732. mov r1,r1,lsl #2
  733. adr r2,sp1sp
  734.  
  735. ldr r10,[r2,r1]            ; get the sprite
  736. bl drawspeak
  737.  
  738. ldmfd r13!,{r0-r12,r15}
  739. .sp1sp dcd 0
  740. .sp2sp dcd 0
  741. .sp3sp dcd 0
  742. .sp4sp dcd 0
  743.  
  744. .calcstereo
  745. stmfd r13!,{r0-r12,r14}
  746.  
  747. mov r10,#8        ; no of voices
  748. mov r9,#1        ; voice on
  749.  
  750. mov r7,#0        ; left level
  751. mov r8,#0        ; right level
  752.  
  753. ._calcloop
  754.  
  755. sub r0,r9,#1
  756. bl readvulevel
  757.  
  758. mov r3,r1
  759.  
  760. mov r0,r9
  761. mov r1,#-128
  762. swi XSound_Stereo
  763.  
  764. cmp r1,#-128
  765. movle r0,#1
  766. movle r1,#-128
  767. movle r9,#1
  768. swile XSound_Stereo
  769.  
  770. rsb r5,r1,#128        ; left level
  771. mul r4,r3,r5        ; level*stereo
  772. mov r4,r4,asr #8    ; 16-bit accuracy is a bit much
  773. add r7,r7,r4
  774.  
  775. add r5,r1,#128        ; right level
  776. mul r4,r3,r5        ; level*stereo
  777. mov r4,r4,asr #8    ; 16-bit accuracy is a bit much
  778. add r8,r8,r4
  779.  
  780. add r9,r9,#1
  781. subs r10,r10,#1
  782. bne _calcloop
  783.  
  784. cmp r7,#0
  785. mvnlt r7,r7
  786. str r7,leftlev
  787. cmp r8,#0
  788. mvnlt r8,r8
  789. str r8,rightlev
  790.  
  791. ldmfd r13!,{r0-r12,r15}
  792.  
  793. .leftlev dcd 0
  794. .rightlev dcd 0
  795.  
  796. .drawspeak
  797. ; r9 = pointer to main sprite (change address to change pos)
  798. ; r10 = pointer vu sprite
  799. stmfd r13!,{r0-r12,r14}
  800.  
  801. mov r0,#17
  802.  
  803. ._drawloop
  804. ldmia r10!,{r3-r6}        ; load it
  805. stmia r9,{r3-r6}        ; store it
  806.  
  807. add r9,r9,#32            ; next line
  808. subs r0,r0,#1            ; have we finished?
  809. bne _drawloop
  810.  
  811. ._fin
  812. ldmfd r13!,{r0-r12,r15}
  813.  
  814. .transtable
  815. dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  816. dcb 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255
  817. dcb 0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255
  818. dcb 1,255,1,255,1,255,1,255,1,254,1,254,1,254,1,254
  819. dcb 1,254,1,254,1,254,1,254,2,254,2,254,2,253,2,253
  820. dcb 2,253,2,253,2,253,2,253,3,253,3,253,3,252,3,252
  821. dcb 3,252,3,252,4,252,4,251,4,251,4,251,5,251,5,250
  822. dcb 5,250,5,250,6,250,6,249,6,249,6,249,7,249,7,248
  823. dcb 7,248,8,248,8,247,9,247,9,246,10,246,10,245,11,245
  824. dcb 11,244,12,244,12,243,13,243,13,242,14,242,14,241,15,241
  825. dcb 15,240,16,240,17,239,18,238,19,237,20,236,21,235,22,234
  826. dcb 23,233,24,232,25,231,26,230,27,229,28,228,29,227,30,226
  827. dcb 31,225,33,224,35,222,37,220,39,218,41,216,43,214,45,212
  828. dcb 47,210,49,208,51,206,53,204,55,202,57,200,59,198,61,196
  829. dcb 63,194,67,192,71,188,75,184,79,180,83,176,87,172,91,168
  830. dcb 95,164,99,160,103,156,107,152,111,148,115,144,119,140,127,136
  831. align
  832.  
  833. .click_de_menu
  834. stmfd r13!,{r0-r12,r14}
  835.  
  836. ldr r0,[r1,#0]
  837. cmp r0,#2            ; is it a quit option?
  838.  
  839. moveq r2,#1            ; then we must quit! Bogus!
  840. streq r2,exit
  841.  
  842. cmp r0,#0
  843. bne _nottype
  844.  
  845. ldr r2,[r1,#4]
  846. cmp r2,#-1
  847. ble _nottype
  848.  
  849. str r2,VuType
  850.  
  851. ._nottype
  852. cmp r0,#1
  853. bne _notdecay
  854.  
  855. ldr r2,[r1,#4]
  856. cmp r2,#-1
  857. ble _nottype
  858.  
  859. mov r3,#16
  860. cmp r2,#0
  861. moveq r3,#8
  862.  
  863. cmp r2,#1
  864. moveq r3,#16
  865.  
  866. cmp r2,#2
  867. moveq r3,#32
  868.  
  869. cmp r2,#3
  870. moveq r3,#0
  871.  
  872. str r3,decay
  873.  
  874. ._notdecay
  875. ldmfd r13!,{r0-r12,r15}
  876. .decay dcd 16
  877.  
  878. .plotlevel
  879. stmfd r13!,{r0-r12,r14}
  880.  
  881. ldr r9,mainsp
  882. ldr r10,vusp
  883.  
  884. ldr r0,_thing
  885. add r0,r0,#1
  886. cmp r0,#4
  887. movge r0,#0
  888. str r0,_thing
  889. blt _noskroll
  890.  
  891. ; skroll the icon
  892. add r0,r9,#1
  893. mov r1,r9
  894.  
  895. mov r7,#17
  896.  
  897. ._loop
  898. #rept 31
  899. ldrb r2,[r0],#1
  900. strb r2,[r1],#1
  901. #endr
  902.  
  903. mov r2,#119
  904. strb r2,[r1]
  905.  
  906. add r0,r0,#1
  907. add r1,r1,#1
  908.  
  909. subs r7,r7,#1
  910. bne _loop
  911.  
  912. ._noskroll
  913. bl calcstereo
  914.  
  915. ; left
  916. ldr r0,leftlev
  917. mov r0,r0,asr #7
  918. cmp r0,#8
  919. movge r0,#8
  920. rsb r0,r0,#8
  921.  
  922. ; calc ypos
  923. mov r1,#32
  924. mul r2,r1,r0
  925. add r2,r2,#31
  926.  
  927. mov r3,#187
  928. strb r3,[r9,r2]
  929.  
  930. ; right
  931. ldr r0,rightlev
  932. mov r0,r0,asr #7
  933. cmp r0,#8
  934. movge r0,#8
  935. rsb r0,r0,#8
  936.  
  937. ; calc ypos
  938. mov r1,#32
  939. mul r2,r1,r0
  940. add r2,r2,#31
  941. add r2,r2,#32*8
  942.  
  943. mov r3,#187
  944. strb r3,[r9,r2]
  945.  
  946. ldmfd r13!,{r0-r12,r15}
  947. ._thing dcd 0
  948.  
  949. dcb 10,"Well, that just about wraps it up..."
  950. dcb 10,"There should be nothing after this ---->"
  951. align
  952. ; and there shouldn't, too!
  953. ; wimp poll block
  954. .block
  955. ; and then there was a big pile of poo
  956. ; or bliss if you are a dung beatle
  957.