Advertisement
MegaLoler

Untitled

Dec 19th, 2012
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; sound generation:
  2. ; two output channels buffers
  3. ; four software channels
  4. ; first two hard-panned to left, second two hard-panned to right
  5. ; each channel switchable between either pulse, triangle, saw, and noise
  6. ; 16-bit oscilators and frequencies for each channel
  7. ; 4-bit fine tuners for each channel
  8. ; 8-bit volumes for each channel
  9. ; 8-bit duty cycle settings for each channel
  10. ; enable bits for each channel
  11. ;
  12. ; music generation:
  13. ; tempo
  14. ; ticks per frame
  15. ; repeat section
  16. ; each channel has three notes that are arpeggiated to modulate the target frequency
  17. ; each channel has its own target frequency
  18. ; each channel has its own frequency sweep speed which is the amount added or substracted from the channel frequency per tick until the target frequency is reached
  19. ; each channel has its own target volume
  20. ; each channel has its own volume sweep speed which is the amount added or substracted from the channel volume per tick until the target volume is reached
  21. ; each channel has its own vibrato settings split between depth and rate which control the effective target frequency
  22. ; each channel has its own tremolo settings split between depth and rate which control the effective target volume
  23. ; each channel has its own effect that is to be applied per tick
  24. ;
  25. ; song format:
  26. ; 0x00 - tempo
  27. ; 0x01 - ticks per frame
  28. ; 0x02 - repeat low
  29. ; 0x03 - repeat high
  30. ; [0x10 - end] - frames
  31. ;
  32. ; frame format:
  33. ; first byte - note
  34. ; second byte - volume
  35. ; third byte - effect
  36. ; fourth byte - arppegio
  37. ;
  38. ; effect format:
  39. ; first nybble - effect
  40. ; second nybble - argument
  41. ;
  42. ; note format:
  43. ; first nybble - note
  44. ; second nybble - octave
  45. ;
  46. ; notes:
  47. ; 0x0 - null
  48. ; 0x1 - same as root (for arppegio notes)
  49. ; 0x2 - stop
  50. ; 0x3 - revive
  51. ; 0x4 - C
  52. ; 0x5 - C#
  53. ; 0x6 - D
  54. ; 0x7 - D#
  55. ; 0x8 - E
  56. ; 0x9 - F
  57. ; 0xA - F#
  58. ; 0xB - G
  59. ; 0xC - G#
  60. ; 0xD - A
  61. ; 0xE - A#
  62. ; 0xF - B
  63. ;
  64. ; arppegio format:
  65. ; first nybble - note 2 (above octave of note 1)
  66. ; second nybble - note 3 (above octave of note 1)
  67. ;
  68. ; effects:
  69. ; 0 - null
  70. ; 1 - stop effect
  71. ; 2 - set vibrato rate
  72. ; 3 - set vibrato depth
  73. ; 4 - set tremolo rate
  74. ; 5 - set tremolo depth
  75. ; 6 - portamento to note
  76. ; 7 - volume slide
  77. ; 8 - increment duty cycle
  78. ; 9 - set duty cycle
  79. ; A - set waveform
  80. ; B - increment volume
  81. ; C - decrement volume
  82. ; D - set finetune
  83.  
  84. .define NOTE_C 262
  85. .define NOTE_Cs 277
  86. .define NOTE_D 294
  87. .define NOTE_Ds 311
  88. .define NOTE_E 330
  89. .define NOTE_F 349
  90. .define NOTE_Fs 370
  91. .define NOTE_G 392
  92. .define NOTE_Gs 415
  93. .define NOTE_A 440
  94. .define NOTE_As 466
  95. .define NOTE_B 494
  96.  
  97. .def LEFT_BUF = r2
  98. .def RIGHT_BUF = r3
  99.  
  100. .def CHAN1_OSCL = r4
  101. .def CHAN1_OSCH = r5
  102. .def CHAN2_OSCL = r6
  103. .def CHAN2_OSCH = r7
  104. .def CHAN3_OSCL = r8
  105. .def CHAN3_OSCH = r9
  106. .def CHAN4_OSCL = r10
  107. .def CHAN4_OSCH = r11
  108.  
  109. .def CHAN1_FRQL = r12
  110. .def CHAN1_FRQH = r13
  111. .def CHAN2_FRQL = r14
  112. .def CHAN2_FRQH = r15
  113. .def CHAN3_FRQL = r24
  114. .def CHAN3_FRQH = r25
  115. .def CHAN4_FRQL = r26
  116. .def CHAN4_FRQH = r27
  117.  
  118. .def NOISEL = r0
  119. .def NOISEH = r1
  120.  
  121. .def EFF_DIR = r18
  122.  
  123. .NOLIST
  124. .include "m48def.inc"
  125. .LIST
  126.  
  127. .cseg
  128. .org 0x00
  129. rjmp start
  130.  
  131. .org 0x09
  132. rjmp timer
  133.  
  134. .org 0x40
  135. start:
  136. ldi r16, LOW(RAMEND)
  137. out spl, r16
  138. ldi r16, HIGH(RAMEND)
  139. out sph, r16
  140.  
  141. ldi r16, 1
  142. sts TIMSK2, r16
  143. ldi r16, 0b001
  144. sts TCCR2B, r16
  145.  
  146. ldi r16, 0xFF
  147. out ddrd, r16
  148. out ddrc, r16
  149.  
  150. ldi r16, 0xFF
  151. mov LEFT_BUF, r16
  152. mov RIGHT_BUF, r16
  153.  
  154. ldi r16, 0x01
  155. mov NOISEL, r16
  156. ldi r16, 0x00
  157. mov NOISEH, r16
  158.  
  159. ldi r16, 0b0000
  160. sts enable, r16
  161.  
  162. ldi r16, 0x08
  163. sts tempo, r16
  164. ldi r16, 0x04
  165. sts speed, r16
  166.  
  167. ldi r16, 0x00
  168. sts chan1_eff, r16
  169. sts chan2_eff, r16
  170. sts chan3_eff, r16
  171. sts chan4_eff, r16
  172.  
  173. ldi r16, 0x0F
  174. sts chan1_vib, r16
  175. sts chan2_vib, r16
  176. sts chan3_vib, r16
  177. sts chan4_vib, r16
  178.  
  179. ldi r16, 0x0F
  180. sts chan1_trm, r16
  181. sts chan2_trm, r16
  182. sts chan3_trm, r16
  183. sts chan4_trm, r16
  184.  
  185. ldi r16, 0x80
  186. sts chan1_tvol, r16
  187. sts chan2_tvol, r16
  188. sts chan3_tvol, r16
  189. sts chan4_tvol, r16
  190.  
  191. ldi r16, 0x80
  192. sts chan1_dut, r16
  193. sts chan2_dut, r16
  194. sts chan3_dut, r16
  195. sts chan4_dut, r16
  196.  
  197. ldi r16, 0x44
  198. sts chan1_notes, r16
  199. sts chan2_notes, r16
  200. sts chan3_notes, r16
  201. sts chan4_notes, r16
  202.  
  203. ldi r16, 0x00
  204. sts chan1_notes + 1, r16
  205. sts chan2_notes + 1, r16
  206. sts chan3_notes + 1, r16
  207. sts chan4_notes + 1, r16
  208.  
  209. ldi r16, 0b00000000
  210. sts waveform, r16
  211.  
  212. ldi ZL, LOW(song_data << 1)
  213. ldi ZH, HIGH(song_data << 1)
  214.  
  215. sei
  216.  
  217. loop:
  218. rjmp loop
  219.  
  220. note_freq:
  221. mov r16, r19
  222. lsr r16
  223. lsr r16
  224. lsr r16
  225. lsr r16
  226. cpi r16, 0x04
  227. breq setc
  228. cpi r16, 0x05
  229. breq setcs
  230. cpi r16, 0x06
  231. breq setd
  232. cpi r16, 0x07
  233. breq setds
  234. cpi r16, 0x08
  235. breq sete
  236. cpi r16, 0x09
  237. breq setf
  238. cpi r16, 0x0A
  239. breq setfs
  240. cpi r16, 0x0B
  241. breq setg
  242. cpi r16, 0x0C
  243. breq setgs
  244. cpi r16, 0x0D
  245. breq seta
  246. cpi r16, 0x0E
  247. breq setas
  248. cpi r16, 0x0F
  249. breq setb
  250. ret
  251. setc:
  252. ldi r16, LOW(NOTE_C)
  253. ldi r17, HIGH(NOTE_C)
  254. rjmp skip4
  255. setcs:
  256. ldi r16, LOW(NOTE_Cs)
  257. ldi r17, HIGH(NOTE_Cs)
  258. rjmp skip4
  259. setd:
  260. ldi r16, LOW(NOTE_D)
  261. ldi r17, HIGH(NOTE_D)
  262. rjmp skip4
  263. setds:
  264. ldi r16, LOW(NOTE_Ds)
  265. ldi r17, HIGH(NOTE_Ds)
  266. rjmp skip4
  267. sete:
  268. ldi r16, LOW(NOTE_E)
  269. ldi r17, HIGH(NOTE_E)
  270. rjmp skip4
  271. setf:
  272. ldi r16, LOW(NOTE_F)
  273. ldi r17, HIGH(NOTE_F)
  274. rjmp skip4
  275. setfs:
  276. ldi r16, LOW(NOTE_Fs)
  277. ldi r17, HIGH(NOTE_Fs)
  278. rjmp skip4
  279. setg:
  280. ldi r16, LOW(NOTE_G)
  281. ldi r17, HIGH(NOTE_G)
  282. rjmp skip4
  283. setgs:
  284. ldi r16, LOW(NOTE_Gs)
  285. ldi r17, HIGH(NOTE_Gs)
  286. rjmp skip4
  287. seta:
  288. ldi r16, LOW(NOTE_A)
  289. ldi r17, HIGH(NOTE_A)
  290. rjmp skip4
  291. setas:
  292. ldi r16, LOW(NOTE_As)
  293. ldi r17, HIGH(NOTE_As)
  294. rjmp skip4
  295. setb:
  296. ldi r16, LOW(NOTE_B)
  297. ldi r17, HIGH(NOTE_B)
  298. rjmp skip4
  299. skip4:
  300. andi r19, 0x0F
  301. cpi r19, 0x01
  302. breq seto1
  303. cpi r19, 0x02
  304. breq seto2
  305. cpi r19, 0x03
  306. breq seto3
  307. cpi r19, 0x04
  308. breq seto4
  309. cpi r19, 0x05
  310. breq seto5
  311. cpi r19, 0x06
  312. breq seto6
  313. cpi r19, 0x07
  314. breq seto7
  315. cpi r19, 0x08
  316. breq seto8
  317. ret
  318. seto1:
  319. lsr r17
  320. ror r16
  321. lsr r17
  322. ror r16
  323. lsr r17
  324. ror r16
  325. ret
  326. seto2:
  327. lsr r17
  328. ror r16
  329. lsr r17
  330. ror r16
  331. ret
  332. seto3:
  333. lsr r17
  334. ror r16
  335. ret
  336. seto4:
  337. ret
  338. seto5:
  339. lsl r16
  340. rol r17
  341. ret
  342. seto6:
  343. lsl r16
  344. rol r17
  345. lsl r16
  346. rol r17
  347. ret
  348. seto7:
  349. lsl r16
  350. rol r17
  351. lsl r16
  352. rol r17
  353. lsl r16
  354. rol r17
  355. ret
  356. seto8:
  357. lsl r16
  358. rol r17
  359. lsl r16
  360. rol r17
  361. lsl r16
  362. rol r17
  363. lsl r16
  364. rol r17
  365. ret
  366.  
  367. track:
  368. cpi ZH, HIGH(song_end << 1)
  369. brlo continue
  370. brne loopback
  371. cpi ZL, LOW(song_end << 1)
  372. brlo continue
  373. loopback:
  374. ldi ZL, LOW(song_data << 1)
  375. ldi ZH, HIGH(song_data << 1)
  376. continue:
  377. ldi r20, 0b0001
  378. rcall load_command
  379. ldi r20, 0b0010
  380. rcall load_command
  381. ldi r20, 0b0100
  382. rcall load_command
  383. ldi r20, 0b1000
  384. rcall load_command
  385. ret
  386.  
  387. load_command:
  388. lpm r19, Z+
  389. rcall handle_note
  390. lpm r19, Z+
  391. rcall handle_volume
  392. lpm r19, Z+
  393. rcall handle_effect
  394. lpm r19, Z+
  395. rcall handle_arps
  396. ret
  397.  
  398. handle_note:
  399. mov r16, r19
  400. lsr r16
  401. lsr r16
  402. lsr r16
  403. lsr r16
  404. cpi r16, 0x00
  405. breq end_note
  406. cpi r16, 0x01
  407. breq end_note
  408. cpi r16, 0x02
  409. breq stop_note
  410. cpi r16, 0x03
  411. breq start_note
  412. sbrc r20, 0
  413. sts chan1_notes, r19
  414. sbrc r20, 1
  415. sts chan2_notes, r19
  416. sbrc r20, 2
  417. sts chan3_notes, r19
  418. sbrc r20, 3
  419. sts chan4_notes, r19
  420. rjmp start_note
  421. stop_note:
  422. lds r21, enable
  423. sbrc r20, 0
  424. andi r21, 0b1110
  425. sbrc r20, 1
  426. andi r21, 0b1101
  427. sbrc r20, 2
  428. andi r21, 0b1011
  429. sbrc r20, 3
  430. andi r21, 0b0111
  431. sts enable, r21
  432. ret
  433. start_note:
  434. lds r21, enable
  435. sbrc r20, 0
  436. ori r21, 0b0001
  437. sbrc r20, 1
  438. ori r21, 0b0010
  439. sbrc r20, 2
  440. ori r21, 0b0100
  441. sbrc r20, 3
  442. ori r21, 0b1000
  443. sts enable, r21
  444. ret
  445. end_note:
  446. ret
  447.  
  448. handle_volume:
  449. cpi r19, 0x00
  450. breq end_vol
  451. sbrc r20, 0
  452. sts chan1_tvol, r19
  453. sbrc r20, 1
  454. sts chan2_tvol, r19
  455. sbrc r20, 2
  456. sts chan3_tvol, r19
  457. sbrc r20, 3
  458. sts chan4_tvol, r19
  459. end_vol:
  460. ret
  461.  
  462. handle_effect:
  463. cpi r19, 0x00
  464. breq end_eff
  465. sbrc r20, 0
  466. sts chan1_eff, r19
  467. sbrc r20, 1
  468. sts chan2_eff, r19
  469. sbrc r20, 2
  470. sts chan3_eff, r19
  471. sbrc r20, 3
  472. sts chan4_eff, r19
  473. end_eff:
  474. ret
  475.  
  476. handle_arps:
  477. sbrc r20, 0
  478. sts chan1_notes + 1, r19
  479. sbrc r20, 1
  480. sts chan2_notes + 1, r19
  481. sbrc r20, 2
  482. sts chan3_notes + 1, r19
  483. sbrc r20, 3
  484. sts chan4_notes + 1, r19
  485. ret
  486.  
  487. arpeggio:
  488. mov r21, r19
  489. andi r21, 0xF0
  490. cpi r16, 1
  491. breq first
  492. cpi r16, 2
  493. breq second
  494. ret
  495. first:
  496. andi r20, 0xF0
  497. andi r19, 0x0F
  498. cpi r20, 4
  499. brlo nope2
  500. cp r21, r20
  501. brlo nope
  502. inc r19
  503. nope:
  504. or r19, r20
  505. ret
  506. second:
  507. lsl r20
  508. lsl r20
  509. lsl r20
  510. lsl r20
  511. andi r19, 0x0F
  512. cpi r20, 4
  513. brlo nope2
  514. cp r21, r20
  515. brlo nope
  516. inc r19
  517. nope2:
  518. or r19, r21
  519. ret
  520.  
  521. music:
  522. clr r18
  523. sts music_timer, r18
  524. sts music_timer + 1, r18
  525.  
  526. lds r16, tick_timer
  527. mov r17, r16
  528. lsr r17
  529. lsr r17
  530. lsr r17
  531. lsr r17
  532. andi r16, 0x0F
  533. inc r17
  534. lds r18, speed
  535. cp r17, r18
  536. brlo no_track
  537. rcall track
  538. clr r17
  539. rjmp okay
  540. no_track:
  541. lsl r17
  542. lsl r17
  543. lsl r17
  544. lsl r17
  545. okay:
  546. push r16
  547. push r17
  548.  
  549. lds r22, waveform
  550.  
  551. lds r16, chan1_eff
  552. lds r17, chan1_trm
  553. lds r18, chan1_vib
  554. lds r19, chan1_dut
  555. lds r23, chan1_tvol
  556. rcall apply_effect
  557. sts chan1_trm, r17
  558. sts chan1_vib, r18
  559. sts chan1_dut, r19
  560. sts chan1_tvol, r23
  561. sbrs r21, 3
  562. rjmp skipwav1
  563. andi r21, 0b0011
  564. andi r22, 0b11111100
  565. or r22, r21
  566. skipwav1:
  567.  
  568. lds r16, chan2_eff
  569. lds r17, chan2_trm
  570. lds r18, chan2_vib
  571. lds r19, chan2_dut
  572. lds r23, chan2_tvol
  573. lsr r21
  574. lsr r21
  575. rcall apply_effect
  576. sts chan2_trm, r17
  577. sts chan2_vib, r18
  578. sts chan2_dut, r19
  579. sts chan2_tvol, r23
  580. sbrs r21, 3
  581. rjmp skipwav2
  582. andi r21, 0b0011
  583. andi r22, 0b11110011
  584. lsl r21
  585. lsl r21
  586. or r22, r21
  587. skipwav2:
  588.  
  589. lds r16, chan3_eff
  590. lds r17, chan3_trm
  591. lds r18, chan3_vib
  592. lds r19, chan3_dut
  593. lds r23, chan3_tvol
  594. rcall apply_effect
  595. sts chan3_trm, r17
  596. sts chan3_vib, r18
  597. sts chan3_dut, r19
  598. sts chan3_tvol, r23
  599. sbrs r21, 3
  600. rjmp skipwav3
  601. andi r21, 0b0011
  602. andi r22, 0b11001111
  603. lsl r21
  604. lsl r21
  605. lsl r21
  606. lsl r21
  607. or r22, r21
  608. skipwav3:
  609.  
  610. lds r16, chan4_eff
  611. lds r17, chan4_trm
  612. lds r18, chan4_vib
  613. lds r19, chan4_dut
  614. lds r23, chan4_tvol
  615. rcall apply_effect
  616. sts chan4_trm, r17
  617. sts chan4_vib, r18
  618. sts chan4_dut, r19
  619. sts chan4_tvol, r23
  620. sbrs r21, 3
  621. rjmp skipwav4
  622. andi r21, 0b0011
  623. andi r22, 0b00111111
  624. lsl r21
  625. lsl r21
  626. lsl r21
  627. lsl r21
  628. lsl r21
  629. lsl r21
  630. or r22, r21
  631. skipwav4:
  632. sts waveform, r22
  633.  
  634. pop r17
  635. pop r16
  636.  
  637. lds r18, fine_tune
  638.  
  639. push r17
  640. push r16
  641.  
  642. lds r19, chan1_notes
  643. lds r20, chan1_notes + 1
  644. rcall arpeggio
  645. rcall note_freq
  646.  
  647. lds r21, chan1_vib
  648. mov r22, CHAN1_FRQL
  649. mov r23, CHAN1_FRQH
  650.  
  651. rcall sweep
  652.  
  653. mov CHAN1_FRQL, r22
  654. mov CHAN1_FRQH, r23
  655.  
  656. mov r19, r18
  657. andi r19, 0x0F
  658. add CHAN1_FRQL, r19
  659.  
  660. pop r16
  661. push r16
  662.  
  663. lds r19, chan2_notes
  664. lds r20, chan2_notes + 1
  665. rcall arpeggio
  666. rcall note_freq
  667.  
  668. lds r21, chan2_vib
  669. mov r22, CHAN2_FRQL
  670. mov r23, CHAN2_FRQH
  671.  
  672. rcall sweep
  673.  
  674. mov CHAN2_FRQL, r22
  675. mov CHAN2_FRQH, r23
  676.  
  677. lsr r18
  678. lsr r18
  679. lsr r18
  680. lsr r18
  681. add CHAN2_FRQL, r18
  682.  
  683. lds r18, fine_tune + 1
  684.  
  685. pop r16
  686. push r16
  687.  
  688. lds r19, chan3_notes
  689. lds r20, chan3_notes + 1
  690. rcall arpeggio
  691. rcall note_freq
  692.  
  693. lds r21, chan3_vib
  694. mov r22, CHAN3_FRQL
  695. mov r23, CHAN3_FRQH
  696.  
  697. rcall sweep
  698.  
  699. mov CHAN3_FRQL, r22
  700. mov CHAN3_FRQH, r23
  701.  
  702. mov r19, r18
  703. andi r19, 0x0F
  704. add CHAN3_FRQL, r19
  705.  
  706. pop r16
  707. push r16
  708.  
  709. lds r19, chan4_notes
  710. lds r20, chan4_notes + 1
  711. rcall arpeggio
  712. rcall note_freq
  713.  
  714. lds r21, chan4_vib
  715. mov r22, CHAN4_FRQL
  716. mov r23, CHAN4_FRQH
  717.  
  718. rcall sweep
  719.  
  720. mov CHAN4_FRQL, r22
  721. mov CHAN4_FRQH, r23
  722.  
  723. lsr r18
  724. lsr r18
  725. lsr r18
  726. lsr r18
  727. add CHAN4_FRQL, r18
  728.  
  729. pop r16
  730. pop r17
  731.  
  732. inc r16
  733. cpi r16, 3
  734. brlo lower
  735. clr r16
  736. lower:
  737. or r17, r16
  738. sts tick_timer, r17
  739.  
  740. lds r16, chan1_trm
  741. lds r17, chan1_vol
  742. lds r18, chan1_tvol
  743. rcall vol_sweep
  744. sts chan1_vol, r17
  745.  
  746. lds r16, chan2_trm
  747. lds r17, chan2_vol
  748. lds r18, chan2_tvol
  749. rcall vol_sweep
  750. sts chan2_vol, r17
  751.  
  752. lds r16, chan3_trm
  753. lds r17, chan3_vol
  754. lds r18, chan3_tvol
  755. rcall vol_sweep
  756. sts chan3_vol, r17
  757.  
  758. lds r16, chan4_trm
  759. lds r17, chan4_vol
  760. lds r18, chan4_tvol
  761. rcall vol_sweep
  762. sts chan4_vol, r17
  763.  
  764. ret
  765.  
  766. apply_effect:
  767. clr r21
  768. mov r20, r16
  769. lsr r16
  770. lsr r16
  771. lsr r16
  772. lsr r16
  773. andi r20, 0x0F
  774.  
  775. cpi r16, 0x2
  776. breq set_vib_rate
  777. cpi r16, 0x3
  778. breq set_vib_depth
  779. cpi r16, 0x4
  780. breq set_trm_rate
  781. cpi r16, 0x5
  782. breq set_trm_depth
  783. cpi r16, 0x6
  784. breq set_portamento
  785. cpi r16, 0x7
  786. breq set_vol_slide
  787. cpi r16, 0x8
  788. breq inc_dut
  789. cpi r16, 0x9
  790. breq set_dut
  791. cpi r16, 0xA
  792. breq set_wav
  793. cpi r16, 0xB
  794. breq inc_vol
  795. cpi r16, 0xC
  796. breq dec_vol
  797. ret
  798. set_vib_rate:
  799. lsl r20
  800. lsl r20
  801. lsl r20
  802. lsl r20
  803. andi r18, 0x0F
  804. or r18, r20
  805. ret
  806. set_vib_depth:
  807. andi r18, 0xF0
  808. or r18, r20
  809. ret
  810. set_trm_rate:
  811. lsl r20
  812. lsl r20
  813. lsl r20
  814. lsl r20
  815. andi r17, 0x0F
  816. or r17, r20
  817. ret
  818. set_trm_depth:
  819. andi r17, 0xF0
  820. or r17, r20
  821. ret
  822. set_portamento:
  823. lsl r20
  824. lsl r20
  825. lsl r20
  826. lsl r20
  827. mov r18, r20
  828. ret
  829. set_vol_slide:
  830. lsl r20
  831. lsl r20
  832. lsl r20
  833. lsl r20
  834. mov r17, r20
  835. ret
  836. inc_dut:
  837. add r19, r20
  838. ret
  839. set_dut:
  840. lsl r20
  841. lsl r20
  842. lsl r20
  843. lsl r20
  844. mov r19, r20
  845. ret
  846. set_wav:
  847. ldi r21, 0b1000
  848. or r21, r20
  849. ret
  850. inc_vol:
  851. add r23, r20
  852. brcs inc_vol1
  853. ret
  854. inc_vol1:
  855. ldi r23, 0xFF
  856. ret
  857. dec_vol:
  858. sub r23, r20
  859. brcs dec_vol1
  860. ret
  861. dec_vol1:
  862. ldi r23, 0x00
  863. ret
  864.  
  865. vol_sweep:
  866. lsr r16
  867. lsr r16
  868. lsr r16
  869. lsr r16
  870. cpi r16, 0
  871. breq vol_equal
  872. cp r17, r18
  873. brlo vol_smaller
  874. cp r18, r17
  875. brlo vol_bigger
  876. rjmp vol_equal
  877. vol_smaller:
  878. add r17, r16
  879. cp r18, r17
  880. brlo vol_equal
  881. ret
  882. vol_bigger:
  883. sub r17, r16
  884. cp r17, r18
  885. brlo vol_equal
  886. ret
  887. vol_equal:
  888. mov r17, r18
  889. ret
  890.  
  891. sweep:
  892. lsr r21
  893. lsr r21
  894. lsr r21
  895. lsr r21
  896. lsl r21
  897. cpi r21, 0
  898. breq equal
  899. cp r23, r17
  900. brlo smaller
  901. cp r17, r23
  902. brlo bigger
  903. cp r22, r16
  904. brlo smaller
  905. cp r16, r22
  906. brlo bigger
  907. rjmp equal
  908. bigger:
  909. sub r22, r21
  910. brcc yeah
  911. dec r23
  912. yeah:
  913. rjmp done_big
  914. done_big:
  915. cp r23, r17
  916. brlo equal
  917. cp r17, r23
  918. brlo return2
  919. cp r22, r16
  920. brlo equal
  921. rjmp return2
  922. smaller:
  923. clr r19
  924. add r22, r21
  925. adc r23, r19
  926. rjmp done_small
  927. done_small:
  928. cp r23, r17
  929. brlo return2
  930. cp r17, r23
  931. brlo equal
  932. cp r22, r16
  933. brlo return2
  934. cp r16, r22
  935. brlo equal
  936. rjmp return2
  937. equal:
  938. mov r22, r16
  939. mov r23, r17
  940. return2:
  941. ret
  942.  
  943. timer:
  944. mov r16, LEFT_BUF
  945. lsr r16
  946. lsr r16
  947. mov r17, RIGHT_BUF
  948. lsr r17
  949. lsr r17
  950. out portd, r16
  951. out portc, r17
  952.  
  953. lds r16, music_timer
  954. lds r17, music_timer + 1
  955. ldi r18, 0
  956. ldi r19, 1
  957. add r16, r19
  958. adc r17, r18
  959. sts music_timer, r16
  960. sts music_timer + 1, r17
  961. lds r18, tempo
  962. cp r17, r18
  963. brlo no_music
  964. rcall music
  965.  
  966. no_music:
  967. clr LEFT_BUF
  968. clr RIGHT_BUF
  969.  
  970. add CHAN1_OSCL, CHAN1_FRQL
  971. adc CHAN1_OSCH, CHAN1_FRQH
  972. add CHAN2_OSCL, CHAN2_FRQL
  973. adc CHAN2_OSCH, CHAN2_FRQH
  974. add CHAN3_OSCL, CHAN3_FRQL
  975. adc CHAN3_OSCH, CHAN3_FRQH
  976. add CHAN4_OSCL, CHAN4_FRQL
  977. adc CHAN4_OSCH, CHAN4_FRQH
  978.  
  979. lds r16, waveform
  980. lds r22, enable
  981.  
  982. mov r18, r16
  983. andi r18, 0b00000011
  984. mov r19, CHAN1_OSCH
  985. lds r20, chan1_vol
  986. lds r21, chan1_dut
  987. rcall generate
  988. sbrc r22, 0
  989. add LEFT_BUF, r17
  990.  
  991. lsr r16
  992. lsr r16
  993. mov r18, r16
  994. andi r18, 0b00000011
  995. mov r19, CHAN2_OSCH
  996. lds r20, chan2_vol
  997. lds r21, chan2_dut
  998. rcall generate
  999. sbrc r22, 1
  1000. add LEFT_BUF, r17
  1001.  
  1002. lsr r16
  1003. lsr r16
  1004. mov r18, r16
  1005. andi r18, 0b00000011
  1006. mov r19, CHAN3_OSCH
  1007. lds r20, chan3_vol
  1008. lds r21, chan3_dut
  1009. rcall generate
  1010. sbrc r22, 2
  1011. add RIGHT_BUF, r17
  1012.  
  1013. lsr r16
  1014. lsr r16
  1015. mov r18, r16
  1016. andi r18, 0b00000011
  1017. mov r19, CHAN4_OSCH
  1018. lds r20, chan4_vol
  1019. lds r21, chan4_dut
  1020. rcall generate
  1021. sbrc r22, 3
  1022. add RIGHT_BUF, r17
  1023.  
  1024. reti
  1025.  
  1026. generate:
  1027. clr r17
  1028. cpi r18, 0b00
  1029. breq gen_pulse
  1030. cpi r18, 0b01
  1031. breq gen_triangle
  1032. cpi r18, 0b10
  1033. breq gen_saw
  1034. cpi r18, 0b11
  1035. breq gen_noise
  1036. ret
  1037.  
  1038. gen_pulse:
  1039. cp r19, r21
  1040. brlo return
  1041. mov r17, r20
  1042. lsr r17
  1043. lsr r17
  1044. ret
  1045.  
  1046. gen_triangle:
  1047. mov r17, r19
  1048. sbrc r19, 7
  1049. com r17
  1050. rjmp apply_volume
  1051. ret
  1052.  
  1053. gen_saw:
  1054. mov r17, r19
  1055. lsr r17
  1056. lsr r17
  1057. rjmp apply_volume
  1058. ret
  1059.  
  1060. gen_noise:
  1061. clr r21
  1062. clr r19
  1063. sbrc NOISEH, 6
  1064. ser r21
  1065. sbrc NOISEL, 3
  1066. ser r19
  1067. eor r19, r21
  1068. clr r21
  1069. lsl NOISEH
  1070. lsl NOISEL
  1071. adc NOISEH, r21
  1072. sbrc r19, 0
  1073. inc NOISEL
  1074. mov r17, NOISEL
  1075. lsr r17
  1076. rjmp apply_volume
  1077. ret
  1078.  
  1079. apply_volume:
  1080. sbrc r20, 7
  1081. rjmp return
  1082. lsr r17
  1083. sbrc r20, 6
  1084. rjmp return
  1085. lsr r17
  1086. sbrc r20, 5
  1087. rjmp return
  1088. lsr r17
  1089. sbrc r20, 4
  1090. rjmp return
  1091. lsr r17
  1092. sbrc r20, 3
  1093. rjmp return
  1094. lsr r17
  1095. sbrc r20, 2
  1096. rjmp return
  1097. lsr r17
  1098. sbrc r20, 1
  1099. rjmp return
  1100. lsr r17
  1101. return:
  1102. ret
  1103.  
  1104. song_data:
  1105. .db 0x00, 0x00, 0xA0, 0x00 ; pulse 1
  1106. .db 0x00, 0x00, 0xA0, 0x00 ; pulse 2
  1107. .db 0x00, 0x00, 0xA1, 0x00 ; triangle
  1108. .db 0x00, 0x00, 0xA3, 0x00 ; noise
  1109.  
  1110. .db 0x44, 0xFF, 0xCf, 0x00 ; pulse 1
  1111. .db 0x42, 0xFF, 0x88, 0x00 ; pulse 2
  1112. .db 0xB4, 0x70, 0x00, 0x00 ; triangle
  1113. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1114.  
  1115. .db 0x00, 0x00, 0x92, 0x00 ; pulse 1
  1116. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1117. .db 0x00, 0x00, 0x00, 0x00 ; triangle
  1118. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1119.  
  1120. .db 0x44, 0xFF, 0xCf, 0x00 ; pulse 1
  1121. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1122. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1123. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1124.  
  1125. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1126. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1127. .db 0x00, 0x00, 0x00, 0x00 ; triangle
  1128. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1129.  
  1130. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1131. .db 0x73, 0xFF, 0x00, 0x00 ; pulse 2
  1132. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1133. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1134.  
  1135. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1136. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1137. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1138. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1139.  
  1140. .db 0xE3, 0xFF, 0x00, 0x00 ; pulse 1
  1141. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1142. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1143. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1144.  
  1145. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1146. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1147. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1148. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1149.  
  1150.  
  1151. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1152. .db 0x42, 0xFF, 0x00, 0x00 ; pulse 2
  1153. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1154. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1155.  
  1156. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1157. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1158. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1159. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1160.  
  1161. .db 0x00, 0x80, 0x00, 0x00 ; pulse 1
  1162. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1163. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1164. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1165.  
  1166. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1167. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1168. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1169. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1170.  
  1171. .db 0x64, 0xFF, 0x00, 0x00 ; pulse 1
  1172. .db 0x63, 0xFF, 0x00, 0x00 ; pulse 2
  1173. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1174. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1175.  
  1176. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1177. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1178. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1179. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1180.  
  1181. .db 0x00, 0x80, 0x00, 0x00 ; pulse 1
  1182. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1183. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1184. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1185.  
  1186. .db 0x74, 0xFF, 0x00, 0x00 ; pulse 1
  1187. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1188. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1189. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1190.  
  1191.  
  1192. .db 0xC3, 0xFF, 0x00, 0x00 ; pulse 1
  1193. .db 0xE1, 0xFF, 0x00, 0x00 ; pulse 2
  1194. .db 0x94, 0x00, 0x00, 0x00 ; triangle
  1195. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1196.  
  1197. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1198. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1199. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1200. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1201.  
  1202. .db 0x00, 0x80, 0x00, 0x00 ; pulse 1
  1203. .db 0xE2, 0xFF, 0x00, 0x00 ; pulse 2
  1204. .db 0x65, 0x00, 0x00, 0x00 ; triangle
  1205. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1206.  
  1207. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1208. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1209. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1210. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1211.  
  1212. .db 0x00, 0x30, 0x00, 0x00 ; pulse 1
  1213. .db 0x63, 0xFF, 0x00, 0x00 ; pulse 2
  1214. .db 0x94, 0x00, 0x00, 0x00 ; triangle
  1215. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1216.  
  1217. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1218. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1219. .db 0xE4, 0x00, 0x00, 0x00 ; triangle
  1220. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1221.  
  1222. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1223. .db 0xE2, 0xFF, 0x00, 0x00 ; pulse 2
  1224. .db 0x65, 0x00, 0x00, 0x00 ; triangle
  1225. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1226.  
  1227. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1228. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1229. .db 0xE4, 0x00, 0x00, 0x00 ; triangle
  1230. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1231.  
  1232.  
  1233. .db 0xB3, 0xFF, 0x00, 0x00 ; pulse 1
  1234. .db 0xF1, 0xFF, 0x00, 0x00 ; pulse 2
  1235. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1236. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1237.  
  1238. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1239. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1240. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1241. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1242.  
  1243. .db 0x00, 0x80, 0x00, 0x00 ; pulse 1
  1244. .db 0xF2, 0xFF, 0x00, 0x00 ; pulse 2
  1245. .db 0x65, 0x00, 0x00, 0x00 ; triangle
  1246. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1247.  
  1248. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1249. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1250. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1251. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1252.  
  1253. .db 0x00, 0x30, 0x00, 0x00 ; pulse 1
  1254. .db 0x63, 0xFF, 0x00, 0x00 ; pulse 2
  1255. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1256. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1257.  
  1258. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1259. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1260. .db 0x65, 0x00, 0x00, 0x00 ; triangle
  1261. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1262.  
  1263. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1264. .db 0xF2, 0xFF, 0x00, 0x00 ; pulse 2
  1265. .db 0x95, 0x00, 0x00, 0x00 ; triangle
  1266. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1267.  
  1268. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1269. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1270. .db 0x65, 0x00, 0x00, 0x00 ; triangle
  1271. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1272.  
  1273.  
  1274.  
  1275. .db 0x00, 0x00, 0x92, 0x00 ; pulse 1
  1276. .db 0x42, 0xFF, 0x88, 0x00 ; pulse 2
  1277. .db 0xB4, 0x70, 0x00, 0x00 ; triangle
  1278. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1279.  
  1280. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1281. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1282. .db 0x00, 0x00, 0x00, 0x00 ; triangle
  1283. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1284.  
  1285. .db 0x44, 0xFF, 0xCf, 0x00 ; pulse 1
  1286. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1287. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1288. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1289.  
  1290. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1291. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1292. .db 0x00, 0x00, 0x00, 0x00 ; triangle
  1293. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1294.  
  1295. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1296. .db 0x73, 0xFF, 0x00, 0x00 ; pulse 2
  1297. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1298. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1299.  
  1300. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1301. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1302. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1303. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1304.  
  1305. .db 0xE3, 0xFF, 0x00, 0x00 ; pulse 1
  1306. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1307. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1308. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1309.  
  1310. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1311. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1312. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1313. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1314.  
  1315.  
  1316. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1317. .db 0x42, 0xFF, 0x00, 0x00 ; pulse 2
  1318. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1319. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1320.  
  1321. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1322. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1323. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1324. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1325.  
  1326. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1327. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1328. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1329. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1330.  
  1331. .db 0x64, 0xFF, 0x00, 0x00 ; pulse 1
  1332. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1333. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1334. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1335.  
  1336. .db 0x74, 0xFF, 0x00, 0x00 ; pulse 1
  1337. .db 0x63, 0xFF, 0x00, 0x00 ; pulse 2
  1338. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1339. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1340.  
  1341. .db 0x64, 0xFF, 0x00, 0x00 ; pulse 1
  1342. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1343. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1344. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1345.  
  1346. .db 0x44, 0xFF, 0x00, 0x00 ; pulse 1
  1347. .db 0x43, 0xFF, 0x00, 0x00 ; pulse 2
  1348. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1349. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1350.  
  1351. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1352. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1353. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1354. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1355.  
  1356.  
  1357. .db 0x94, 0xFF, 0x00, 0x00 ; pulse 1
  1358. .db 0x92, 0xFF, 0x00, 0x00 ; pulse 2
  1359. .db 0xC4, 0x00, 0x00, 0x00 ; triangle
  1360. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1361.  
  1362. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1363. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1364. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1365. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1366.  
  1367. .db 0x00, 0x80, 0x00, 0x00 ; pulse 1
  1368. .db 0x93, 0xFF, 0x00, 0x00 ; pulse 2
  1369. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1370. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1371.  
  1372. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1373. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1374. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1375. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1376.  
  1377. .db 0x00, 0x30, 0x00, 0x00 ; pulse 1
  1378. .db 0xC3, 0xFF, 0x00, 0x00 ; pulse 2
  1379. .db 0xC4, 0x00, 0x00, 0x00 ; triangle
  1380. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1381.  
  1382. .db 0x00, 0x00, 0x00, 0x00 ; pulse 1
  1383. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1384. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1385. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1386.  
  1387. .db 0xB4, 0xFF, 0x00, 0x00 ; pulse 1
  1388. .db 0x93, 0xFF, 0x00, 0x00 ; pulse 2
  1389. .db 0x75, 0x00, 0x00, 0x00 ; triangle
  1390. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1391.  
  1392. .db 0xC4, 0xFF, 0x00, 0x00 ; pulse 1
  1393. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1394. .db 0x45, 0x00, 0x00, 0x00 ; triangle
  1395. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1396.  
  1397.  
  1398. .db 0xB4, 0xFF, 0x00, 0x00 ; pulse 1
  1399. .db 0xB2, 0xFF, 0x00, 0x00 ; pulse 2
  1400. .db 0xB4, 0x00, 0x00, 0x00 ; triangle
  1401. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1402.  
  1403. .db 0xB5, 0xFF, 0x00, 0x00 ; pulse 1
  1404. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1405. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1406. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1407.  
  1408. .db 0x94, 0xFF, 0x00, 0x00 ; pulse 1
  1409. .db 0xB3, 0xFF, 0x00, 0x00 ; pulse 2
  1410. .db 0xB5, 0x00, 0x00, 0x00 ; triangle
  1411. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1412.  
  1413. .db 0x95, 0xFF, 0x00, 0x00 ; pulse 1
  1414. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1415. .db 0x20, 0x00, 0x00, 0x00 ; triangle
  1416. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1417.  
  1418. .db 0x74, 0xFF, 0x00, 0x00 ; pulse 1
  1419. .db 0xF3, 0xFF, 0x00, 0x00 ; pulse 2
  1420. .db 0xF4, 0x00, 0x00, 0x00 ; triangle
  1421. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1422.  
  1423. .db 0x75, 0xFF, 0x00, 0x00 ; pulse 1
  1424. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1425. .db 0x65, 0x00, 0x00, 0x00 ; triangle
  1426. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1427.  
  1428. .db 0x64, 0xFF, 0x00, 0x00 ; pulse 1
  1429. .db 0xB3, 0xFF, 0x00, 0x00 ; pulse 2
  1430. .db 0x95, 0x00, 0x00, 0x00 ; triangle
  1431. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1432.  
  1433. .db 0x65, 0xFF, 0x00, 0x00 ; pulse 1
  1434. .db 0x00, 0xAA, 0x00, 0x00 ; pulse 2
  1435. .db 0x65, 0x00, 0x00, 0x00 ; triangle
  1436. .db 0x00, 0x00, 0x00, 0x00 ; noise
  1437. song_end:
  1438.  
  1439. .dseg
  1440. chan1_vol: .byte 1
  1441. chan2_vol: .byte 1
  1442. chan3_vol: .byte 1
  1443. chan4_vol: .byte 1
  1444.  
  1445. chan1_dut: .byte 1
  1446. chan2_dut: .byte 1
  1447. chan3_dut: .byte 1
  1448. chan4_dut: .byte 1
  1449.  
  1450. fine_tune: .byte 2
  1451. waveform: .byte 1
  1452. enable: .byte 1
  1453. music_timer: .byte 2
  1454. tick_timer: .byte 1
  1455.  
  1456. tempo: .byte 1
  1457. speed: .byte 1
  1458.  
  1459. chan1_tvol: .byte 1
  1460. chan2_tvol: .byte 1
  1461. chan3_tvol: .byte 1
  1462. chan4_tvol: .byte 1
  1463.  
  1464. chan1_notes: .byte 2
  1465. chan2_notes: .byte 2
  1466. chan3_notes: .byte 2
  1467. chan4_notes: .byte 2
  1468.  
  1469. chan1_vib: .byte 1
  1470. chan2_vib: .byte 1
  1471. chan3_vib: .byte 1
  1472. chan4_vib: .byte 1
  1473.  
  1474. chan1_trm: .byte 1
  1475. chan2_trm: .byte 1
  1476. chan3_trm: .byte 1
  1477. chan4_trm: .byte 1
  1478.  
  1479. chan1_eff: .byte 1
  1480. chan2_eff: .byte 1
  1481. chan3_eff: .byte 1
  1482. chan4_eff: .byte 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement