home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1996 June / 64er_Magazin_96-06_1996_Markt__Technik_de_Side_A.d64 / playersource < prev    next >
Text File  |  2022-10-26  |  26KB  |  1,211 lines

  1. ;64'er Music Player v.09
  2. ;All Coding and Design by THE SYNDROM
  3. ;---------------------------------------
  4.          *= $0f00
  5.          sei
  6.          lda #$00
  7.          jsr init
  8. rt       lda #$42
  9.          cmp $d012
  10.          bne rt
  11.          inc $d020
  12.          jsr play
  13.          dec $d020
  14.          lda $dc01
  15.          and #$10
  16.          bne rt
  17.          jmp $9000
  18. ;---------------------------------------
  19.          *= $1000
  20.  
  21.          jmp init
  22.          jmp play
  23.          jmp play2
  24. ;---------------------------------------
  25. filtyp   .byte $00
  26. filcon   .byte $00
  27. filfreql .byte $00
  28. filfreqh .byte $00
  29. volume   .byte $00
  30. resonance .byte $00
  31. speed    .byte $00
  32. speed1   .byte $00
  33. multi    .byte $00
  34. identify .byte $00
  35. fade     .byte $00
  36. fadetime .byte $00
  37. filtrs   .byte $00
  38. hardval  .byte $0f ;(xy: x=8->keep ad
  39.                    ;     x=0-> ad=y)
  40.          .byte $00,0,0,0 ;yet empty
  41.          .byte $00,0,0,0,0
  42.          .text "-player & music by the "
  43.          .text "syndrom!-"
  44. ;---------------------------------------
  45. dur      .byte $00
  46. durat    .byte $00
  47. snd      .byte $00
  48. ad       .byte $00
  49. sr       .byte $00
  50. on       .byte $00
  51. vdir     .byte $00
  52.          .byte $00,0,0,0,0,0,0  ;7 bytes
  53.          .byte $00,0,0,0,0,0,0  ;7 bytes
  54. trpos    .byte $00
  55. trackl   .byte $00
  56. trackh   .byte $00
  57. secpos   .byte $00
  58. wave     .byte $00
  59. filpos   .byte $00
  60. pupos    .byte $00
  61.          .byte $00,0,0,0,0,0,0  ; -"-
  62.          .byte $00,0,0,0,0,0,0  ; -"-
  63. andor    .byte $00
  64. cont     .byte $00
  65. trpose   .byte $00
  66. fine     .byte $00
  67. wavepos  .byte $00
  68. switch   .byte $00
  69. nopu     .byte $00
  70.          .byte $00,0,0,0,0,0,0  ; -"-
  71.          .byte $00,0,0,0,0,0,0  ; -"-
  72. vspeed   .byte $00
  73. vaddl    .byte $00
  74. vaddh    .byte $00
  75. svol     .byte $00
  76. glideh   .byte $00
  77. glidel   .byte $00
  78. gll      .byte $00
  79.          .byte $00,0,0,0,0,0,0  ; -"-
  80.          .byte $00,0,0,0,0,0,0  ; -"-
  81. glh      .byte $00
  82. glto     .byte $00
  83. glfrom   .byte $00
  84. gldel    .byte $00
  85. gldeh    .byte $00
  86. noteok   .byte $00
  87. drum     .byte $00
  88.          .byte $00,0,0,0,0,0,0  ; -"-
  89.          .byte $00,0,0,0,0,0,0  ; -"-
  90. pulslo   .byte $00
  91. pulshi   .byte $00
  92. pulsfrm  .byte $00
  93. pulsaddl .byte $00
  94. pulsaddh .byte $00
  95. switch2  .byte $00
  96. cut      .byte $00
  97.          .byte $00,0,0,0,0,0,0  ; -"-
  98.          .byte $00,0,0,0,0,0,0  ; -"-
  99. sndn     .byte $00
  100. effhi    .byte $00
  101. efflo    .byte $00
  102. pcont    .byte $00
  103. wvspeed  .byte $00
  104. hardon   .byte $00
  105. notev    .byte $00
  106.          .byte $00,0,0,0,0,0,0  ; -"-
  107.          .byte $00,0,0,0,0,0,0  ; -"-
  108. wvspeed1 .byte $00
  109. vspeed1  .byte $00
  110. vaddl1   .byte $00
  111. vaddh1   .byte $00
  112. vilo     .byte $00
  113. vihi     .byte $00
  114. vifirst  .byte $00
  115.          .byte $00,0,0,0,0,0,0  ; -"-
  116.          .byte $00,0,0,0,0,0,0  ; -"-
  117.  
  118.  
  119.  
  120. mark     .byte $00
  121.  
  122.  
  123.  
  124.  
  125. ;---------------------------------------
  126. init     asl a
  127.          asl a
  128.          asl a
  129.          tay
  130.          ldx #$00
  131.          txa
  132. initcl   sta dur,x     ;clear data
  133.          inx
  134.          cpx #mark-dur
  135.          bne initcl
  136.          ldx #$00      ;prepare pointers
  137. trfill   lda trakk,y
  138.          sta trackl,x
  139.          lda trakk+1,y
  140.          sta trackh,x
  141.          lda #9        ;reset voices
  142.          sta $d404,x
  143.          sta on,x
  144.          lda #0
  145.          sta ad,x
  146.          sta sr,x
  147.          lda #$02      ;startvalues
  148.          sta durat,x
  149.          lda #$ff
  150.          sta wvspeed1,x
  151.          lda #0
  152.          sta hardon,x
  153.          lda #1
  154.          sta andor,x
  155.          iny
  156.          iny
  157.          txa
  158.          clc
  159.          adc #7        ;0-7-14-loop
  160.          tax
  161.          cpx #21
  162.          bne trfill
  163.          lda trakk,y
  164.          sta speed
  165.          lda #0
  166.          sta speed1
  167.          lda trakk+1,y
  168.          sta volume
  169.          rts
  170. ;---------------------------------------
  171. play     lda $f8      ;save used
  172.          pha          ;zeropage to stack
  173.          lda $f9
  174.          pha
  175.          dec speed1  ;main-speed-control
  176.          bpl new1
  177.          lda speed
  178.          sta speed1
  179. new1     ldx #0
  180.          jsr voice
  181.          ldx #7
  182.          jsr voice
  183.          ldx #14
  184.          jsr voice
  185.          lda fade     ;volume-fade
  186.          beq nofade   ;active ?
  187.          dec fadetime
  188.          lda fadetime
  189.          bne nofade
  190. ftime    lda #0       ;direct code
  191.          sta fadetime ;accessed
  192.          lda volume
  193.          clc
  194.          adc fade
  195.          sta volume
  196.          cmp #$ff     ;lower stop
  197.          beq fadestop
  198.          cmp #$10
  199.          bne nofade   ;upper stop
  200.          lda #$0f
  201.          sta volume
  202.          bne nofade
  203.  
  204. fadestop lda #0
  205.          sta fade
  206.          sta volume
  207. nofade   lda volume    ;permanent
  208.          ora filtyp    ;controls
  209.          sta $d418
  210.          lda filcon
  211.          ora resonance
  212.          sta $d417
  213.          lda filfreql
  214.          sta $d415
  215.          lda filfreqh
  216.          sta $d416
  217.          pla           ;rewrite zero-
  218.          sta $f9       ;page
  219.          pla
  220.          sta $f8
  221.          rts
  222. ;---------------------------------------
  223. voice    lda on,x      ;voice active?
  224.          bne voion
  225.          rts
  226. voion    lda speed1  ;new duration-
  227.          cmp speed   ;frame ?
  228.          beq new     ;
  229.  
  230.          jmp voice3;hr-check for low
  231.                    ;speeds necessary
  232. new      dec durat,x ;new command-
  233.          beq new3    ;frame ?
  234.          jmp voice3
  235. ;---------------------------------------
  236. ;track-control-routines
  237. ;---------------------------------------
  238. ;commands
  239.          ;$ff xx    loop xx
  240.          ;$fe       stop voice
  241.          ;$fd xx    transpose +xx
  242.          ;$fc xx    transpose -xx
  243.          ;$fb xx    fadein  xx
  244.          ;$fa xx    fadeout xx
  245.          ;$ex       volume x
  246. ;---------------------------------------
  247. new3     lda trackl,x ;set pointers
  248.          sta $f8
  249.          lda trackh,x
  250.          sta $f9
  251. ;---------------------------------------
  252. ;check track-commands
  253. ;---------------------------------------
  254. read     ldy trpos,x
  255.          lda ($f8),y
  256.          bpl nocom   ;sector or command?
  257.          cmp #$ff       ;end
  258.          bne com1
  259.          iny
  260.          lda ($f8),y
  261.          sta trpos,x
  262.          tay
  263.          jmp read+3
  264. com1     cmp #$fe       ;stop
  265.          bne com2
  266.          lda #0
  267.          sta on,x
  268.          rts
  269. com2     cmp #$fd       ;tr+xx
  270.          bne com3
  271.          iny
  272.          lda ($f8),y
  273. dazu     sta trpose,x
  274.          iny
  275.          tya
  276.          sta trpos,x
  277.          jmp read+3
  278. com3     cmp #$fc       ;tr-xx
  279.          bne com4
  280.          iny
  281.          lda ($f8),y
  282.          eor #$ff
  283.          clc
  284.          adc #$01
  285.          jmp dazu
  286. com4     cmp #$fb       ;fd+xx
  287.          bne com5
  288.          iny
  289.          lda ($f8),y
  290.          sta fadetime
  291.          sta ftime+1
  292.          lda #1
  293.          sta fade
  294.          jmp dazu+3
  295. com5     cmp #$fa       ;fd-xx
  296.          bne com6
  297.          iny
  298.          lda ($f8),y
  299.          sta fadetime
  300.          sta ftime+1
  301.          lda #$ff
  302.          sta fade
  303.          jmp dazu+3
  304. com6     cmp #$e0
  305.          bcc com7
  306.          cmp #$f0       ;mvl.x
  307.          bcs com7
  308.          and #$0f
  309.          sta volume
  310.          inc trpos,x
  311. com7     jmp read
  312. ;---------------------------------------
  313. ;Sector-control
  314. ;commands  $fd.xx   dur xx
  315.           ;$fc.xx   snd xx
  316.           ;$fe      cont(---)
  317.           ;$fb      gate
  318.           ;$fa      switch
  319.           ;$f9      cut
  320. ;---------------------------------------
  321. nocom    tay          ;set pointers
  322.          lda seclo,y
  323.          sta $f8
  324.          lda sechi,y
  325.          sta $f9
  326. read3    ldy secpos,x
  327.          lda ($f8),y  ;command or
  328.          cmp #$c0     ;note ?
  329.          bcs nnote    ;
  330.          pha
  331.          lda #0
  332.          sta gll,x
  333.          sta glh,x
  334.          sta glidel,x
  335.          sta glideh,x
  336.          sta vspeed,x
  337.          sta vilo,x
  338.          sta vihi,x
  339.  
  340.          pla
  341.          jmp note
  342. nnote
  343.          cmp #$ff          ;end
  344.          bne scom1
  345.          inc trpos,x
  346.          lda #0
  347.          sta secpos,x
  348.          lda switch,x ;no cut if switch
  349.          bne nowrap   ;is active
  350.          lda #$ff
  351.          sta wvspeed1,x
  352.          lda #$00
  353.          sta wave,x
  354. nowrap   jmp new3
  355. scom1    cmp #$f9
  356.          bcs scom1a
  357.          jmp scom7
  358. scom1a   cmp #$fe     ;---
  359.          bne scom2
  360. note3    iny
  361.          tya
  362.          sta secpos,x
  363.          lda #1
  364.          sta cont,x
  365.          jmp note2
  366. scom2    cmp #$fd     ;dur.xx
  367.          bne scom3
  368.          iny
  369.          lda ($f8),y
  370.          sta dur,x
  371.          sta durat,x
  372. dazu4    iny
  373.          tya
  374.          sta secpos,x
  375.          jmp read3+3
  376. scom3    cmp #$fc     ;snd.xx
  377.          bne scom4
  378.          iny
  379.          lda ($f8),y
  380.          sta snd,x
  381.          sta sndn,x
  382.          jmp dazu4
  383. scom4    cmp #$fb     ;gate
  384.          bne scom5
  385.          lda #1
  386.          eor andor,x
  387.          sta andor,x
  388.          jmp note3
  389.  
  390.  
  391.  
  392. scom5    cmp #$fa     ;switch
  393.          bne scom6
  394.          lda #1
  395.          eor switch,x
  396.          sta switch,x
  397. nofx     inc secpos,x
  398.          jmp read3
  399.  
  400. scom6    cmp #$f9     ;cut
  401.          bne scom7
  402.          lda dur,x
  403.          sta durat,x
  404.          lda #8       ;resets voice
  405.          sta $d404,x  ;+ voice routines
  406.          sta wave,x  ;to save rastertime
  407.          lda #$00
  408.          sta $d405,x
  409.          sta $d406,x
  410.          sta ad,x
  411.          sta sr,x
  412.          lda #$ff
  413.          sta wvspeed1,x
  414.          lda #1
  415.          sta cut,x
  416.          inc secpos,x
  417.          jmp hrcheck
  418. scom7    and #$3f    ;supercommands
  419.          tay
  420.          lda commtab1,y
  421.          sta effhi,x
  422.          lda commtab2,y
  423.          sta efflo,x
  424.          lda commtab,y
  425.          asl a
  426.          tay
  427.          lda commtab3,y
  428.          sta jump+1
  429.          lda commtab3+1,y
  430.          sta jump+2
  431.  
  432. jump     jmp read3
  433.  
  434.  
  435. note     cmp #$60   ;count notevalue
  436.          bcc normal
  437.          sec
  438.          sbc #$60
  439. normal   clc
  440.          adc trpose,x
  441.          sta notev,x ;new note
  442.          sta noteok,x
  443.          inc secpos,x
  444. note2
  445.  
  446.          lda dur,x  ;previous note
  447.          sta durat,x
  448.          lda #0
  449.          sta cut,x
  450.          lda switch,x
  451.          bne swon
  452.          lda cont,x
  453.          bne swon
  454.          lda #1
  455.          sta andor,x
  456.          ldy snd,x
  457.         ;lda hardon,x
  458.         ;bne noconti
  459.                     ;this frame
  460.          lda adtab,y;sets the new
  461.          sta ad,x   ;adsr-settings
  462.          sta $d405,x;= beginning of a
  463.          lda svol,x
  464.          beq ss1
  465.          lda sr,x
  466.          and #$0f
  467.          ora svol,x
  468.          bne ss2
  469. ss1      lda srtab,y;new note = max.
  470. ss2      sta sr,x   ;rastertime
  471.          sta $d406,x
  472.          jmp noconti
  473. ss       lda cont,x
  474.          beq noconti
  475.  
  476. swon     jsr play3
  477.          jmp nocont
  478. noconti  lda wavptab,y
  479.          sta wavepos,x
  480.          tya
  481.          pha
  482.          ldy wavepos,x ;sets wave
  483.          lda wavetab,y ;(first row)
  484.          pha
  485.          and #$f7
  486.          sta wave,x
  487.          sta $d404,x   ;check for
  488.          pla           ;drum-mode
  489.          and #$08
  490.          sta drum,x
  491.          beq nodrum2
  492.          lda freqtab,y
  493.          sta $d401,x
  494.          lda #0
  495.          sta $d400,x
  496.          jmp nonon
  497. nodrum2  lda freqtab,y
  498.          clc
  499.          adc notev,x
  500.          sta noteok,x
  501.          tay
  502.          lda frqlo,y
  503.          clc
  504.          adc fine,x
  505.          sta $d400,x
  506.          lda frqhi,y
  507.          adc #0
  508.          sta $d401,x
  509. nonon    pla
  510.          tay
  511.          lda efftab,y
  512.          and #$0f
  513.          sta wvspeed,x
  514.          sta wvspeed1,x
  515.          inc wavepos,x
  516.          lda pcont,x
  517.          bne filll
  518.          lda #0
  519.          sta nopu,x
  520. ;---------------------------------------
  521.          lda pulptab,y  ;pulse-routine
  522.          tay            ;init
  523.          clc
  524.          adc #1
  525.          sta pupos,x
  526.          lda pulstab1,y
  527.          sta pulshi,x
  528.          sta $d403,x
  529.          lda pulstab2,y
  530.          sta pulslo,x
  531.          sta $d402,x
  532.          lda #0
  533.          sta pulsfrm,x
  534.          ldy snd,x
  535. filll    lda filptab,y
  536.          sta filpos,x
  537. nocont   lda #0
  538.          sta cont,x
  539.          lda hardon,x
  540.          beq hrcheck
  541.  
  542.          lda #1
  543.          sta andor,x
  544.  
  545. hrcheck  ldy secpos,x  ;checking next
  546. hrcheck2 lda ($f8),y   ;sectordata for
  547.          cmp #$ff      ;hardrestart on
  548.                        ;or off
  549.          beq onyes  ;user can manipulate
  550. noend    cmp #$60   ;this (onyes/onno)
  551.          bcc onyes  ;(new sector hr)
  552.          cmp #$c0
  553.          bcc onno
  554.          cmp #$fe
  555.          beq onno
  556.          cmp #$fb
  557.          beq onno
  558.          cmp #$f9
  559.          beq onno
  560.          cmp #$fc
  561.          bne swi1
  562.          iny
  563.          lda ($f8),y
  564.          sta sndn,x
  565.          dey
  566.          lda #$fc
  567. swi1
  568.          cmp #$fa
  569.          bne swi
  570.          lda #1
  571.          eor switch,x
  572.          sta switch2,x
  573.          jmp plus1
  574.  
  575.  
  576. swi      cmp #$fc
  577.          bcc plus1
  578.          iny
  579. plus1    iny
  580.          bne hrcheck2
  581.  
  582. onno     lda #0
  583.          beq hrset
  584. onyes    lda #1
  585. hrset    sta hardon,x
  586.          lda switch2,x
  587.          beq ond
  588.          lda #0
  589.          sta hardon,x
  590. ond
  591.          rts
  592. ;---------------------------------------
  593. ;hard-restart-routine
  594. ;---------------------------------------
  595. voice3   lda speed
  596.          bne nospeed0
  597.          lda durat,x
  598.          cmp #$04
  599.          bcs nichts
  600.          cmp #$01
  601.          beq frame1
  602.                     ;frame 2+1
  603. frame2   lda hardon,x
  604.          beq nichts
  605.          jsr play3
  606.          lda hardval
  607.          bpl hrsett
  608.          lda ad,x
  609. hrsett   sta $d405,x
  610.          lda sr,x
  611.          and #$f0
  612.          sta $d406,x
  613.          lda wave,x
  614.          and #$fe
  615.          sta $d404,x
  616.  
  617.  
  618.          rts
  619. frame1   lda hardon,x
  620.          beq nichts
  621.          ldy sndn,x  ;this frame
  622.          lda adtab,y;sets the new
  623.          sta ad,x   ;adsr-settings
  624.          sta $d405,x;= beginning of a
  625.          lda srtab,y;new note = max.
  626.          sta sr,x   ;rastertime
  627.          sta $d406,x
  628.          lda #$09
  629.          sta $d404,x
  630.  
  631.  
  632.          rts
  633.  
  634. nospeed0
  635.          cmp #1
  636.          bne sp2
  637. spp      lda speed1
  638.          beq sp1
  639.          lda durat,x
  640.          cmp #1
  641.          beq frame2
  642.          jmp nichts
  643. sp1
  644.          lda durat,x
  645.          cmp #3
  646.          bcs nichts
  647.          cmp #1
  648.          beq frame1
  649.          jmp frame2
  650.  
  651. sp2      lda durat,x
  652.          cmp #$01
  653.          bne nichts
  654.          lda speed1
  655.          beq frame1
  656.          cmp #3
  657.          bcc frame2
  658. nichts   jmp play3
  659. ;---------------------------------------
  660. ;        adsr-routines
  661. ;---------------------------------------
  662. play2    ldx #$00
  663.          jsr play3
  664.          ldx #7
  665.          jsr play3
  666.          ldx #14
  667. ;---------------------------------------
  668. play3
  669. ;---------------------------------------
  670. ;wave-freq-table-handling
  671. ;---------------------------------------
  672.          lda cut,x
  673.          beq ton
  674.          rts
  675. ton
  676. ;---------------------------------------
  677. ;vib/slide/etc.
  678. ;---------------------------------------
  679. ;glide
  680.          lda gll,x
  681.          bne gly      ;check if glide
  682.          lda glh,x    ;active
  683.          bne gly
  684.          jmp nogli
  685. gly
  686.          lda #0
  687.          sta vspeed,x
  688.          sta vilo,x    ;add values
  689.          sta vihi,x    ;disable vibr.
  690.          clc
  691.          lda glidel,x
  692.          adc gll,x
  693.          sta glidel,x
  694.          lda glideh,x
  695.          adc glh,x
  696.          sta glideh,x
  697.  
  698.          lda glh,x
  699.          bmi glup1
  700.          ldy notev,x   ;reached
  701.          lda frqlo,y   ;destination
  702.          clc           ;frequence?
  703.          adc glidel,x  ;(upglide)
  704.          pha
  705.          lda frqhi,y
  706.          adc glideh,x
  707.          cmp gldeh,x
  708.          bcc glup2
  709.          bne glupen1
  710. glup4    pla
  711.          cmp gldel,x
  712.          bcc nogli
  713.  
  714.  
  715. glupen   lda #0        ;stop glide
  716.          sta glidel,x
  717.          sta glideh,x
  718.          sta gll,x
  719.          sta glh,x
  720.          lda glto,x
  721.          sta notev,x
  722.          sta noteok,x
  723.          beq nogli
  724.  
  725. glup1
  726.          ldy notev,x
  727.          lda frqlo,y   ;check destin.
  728.          clc           ;for downglide
  729.          adc glidel,x
  730.          pha
  731.          lda frqhi,y
  732.          adc glideh,x
  733.          cmp gldeh,x
  734.          bcc glupen1
  735.          bne glup2
  736.          pla
  737.          cmp gldel,x
  738.          bcs nogli
  739.          bcc glupen
  740. glupen1  pla
  741.          jmp glupen
  742.  
  743.  
  744.  
  745. glup2    pla
  746. ;---------------------------------------
  747. ;vibrato
  748. ;---------------------------------------
  749. nogli    lda vspeed,x
  750.          beq novib
  751.  
  752.          and #1
  753.          bne nvib
  754.          inc vifirst,x
  755. nvib     lda vdir,x     ;check direct.
  756.          bne vido       ;vib. up
  757.          lda vifirst,x
  758.          bne vi1
  759.          inc vifirst,x  ;halfvalue?
  760.          lda vaddl1,x
  761.          clc
  762.          adc vilo,x
  763.          sta vilo,x     ;add half
  764.          lda vaddh1,x
  765.          adc vihi,x
  766.          sta vihi,x
  767.          jmp vi2
  768. vi1      lda vaddl,x    ;add full
  769.          clc
  770.          adc vilo,x
  771.          sta vilo,x
  772.          lda vaddh,x
  773.          adc vihi,x
  774.          sta vihi,x
  775. vi2      inc vspeed1,x
  776.          lda vspeed1,x  ;dir.turn?
  777.          cmp vspeed,x
  778.          bne vi3
  779. vi4      lda #1
  780.          eor vdir,x
  781.          sta vdir,x
  782. vi3      jmp novib
  783. vido     lda vilo,x     ;vib. down
  784.          sec
  785.          sbc vaddl,x
  786.          sta vilo,x     ;sbc full
  787.          lda vihi,x
  788.          sbc vaddh,x
  789.          sta vihi,x
  790.          dec vspeed1,x
  791.          beq vi4
  792.          jmp novib
  793.  
  794.  
  795.  
  796. novib
  797. ;---------------------------------------
  798. ;wave/filt/pulse
  799. ;---------------------------------------
  800.          lda wvspeed1,x ;new row ?
  801.          cmp #$ff
  802.          beq nochnich
  803.          dec wvspeed1,x
  804.          bpl nochnich
  805.          lda wvspeed,x
  806.          sta wvspeed1,x
  807. newread  ldy wavepos,x
  808.          inc wavepos,x
  809.          lda wavetab,y
  810.          cmp #$91      ;check stop
  811.          beq schluss
  812.          cmp #$90      ;check loop
  813.          bne nextstep
  814.          lda freqtab,y
  815.          sta wavepos,x
  816.          jmp newread
  817. nextstep pha
  818.          and #$f7     ;check drummode
  819.          sta wave,x
  820.          pla
  821.          and #$08
  822.          sta drum,x
  823.          beq nodrum
  824.          lda freqtab,y
  825.          sta noteok,x
  826.          jmp nochnich
  827. nodrum   lda freqtab,y
  828.          clc
  829.          adc notev,x
  830.          sta noteok,x
  831.          jmp nochnich
  832.  
  833.  
  834. schluss  lda #$ff       ;stop mark
  835.          sta wvspeed1,x
  836.          lda wave,x
  837.          and #$40
  838.          bne nochnich
  839.          lda #1
  840.          sta nopu,x
  841.  
  842.  
  843. nochnich
  844.  
  845. ;---------------------------------------
  846. ;pulsroutine
  847. ;---------------------------------------
  848.          lda nopu,x
  849.          bne filli
  850.          lda pupos,x
  851.          tay
  852.          lda pulsfrm,x   ;new row?
  853.          bne nonewset
  854. nochmal  lda pulstab1,y
  855.          cmp #$90        ;check loop
  856.          bne pp1
  857.          lda pulstab2,y
  858.          sta pupos,x
  859.          tay
  860.          jmp nochmal
  861. pp1      cmp #$91        ;check stop
  862.          bne pp2
  863.          lda #1
  864.          sta nopu,x
  865.          bne filli
  866.  
  867.  
  868. pp2      sta pulsaddh,x  ;count values
  869.          lda pulstab2,y
  870.          sta pulsaddl,x
  871.          lda pulstab2+1,y
  872.          sta pulsfrm,x
  873.          tya
  874.          clc
  875.          adc #2
  876.          sta pupos,x
  877. nonewset lda pulslo,x
  878.          clc              ;set values
  879.          adc pulsaddl,x
  880.          sta pulslo,x
  881.          sta $d402,x
  882.          lda pulshi,x
  883.          adc pulsaddh,x
  884.          sta pulshi,x
  885.          sta $d403,x
  886.          dec pulsfrm,x
  887.  
  888.  
  889.  
  890.  
  891. ;---------------------------------------
  892. ;Filterroutine
  893. ;---------------------------------------
  894. filli                ;still to code
  895.                      ;
  896. ;---------------------------------------
  897. ;writing the SID-registers
  898. ;---------------------------------------
  899.          lda ad,x     ;registers
  900.          sta $d405,x
  901.          lda sr,x
  902.          sta $d406,x
  903.          lda wave,x
  904.          tay         ;if gatebit off by
  905.          and #1      ;table, disable
  906.          beq nogat   ;gate command
  907.          tya
  908.          and #$fe
  909.          ora andor,x
  910.          tay
  911. nogat    tya
  912.          sta $d404,x  ;write remaining
  913.          ldy noteok,x
  914.          lda drum,x
  915.          beq norm
  916.          tya
  917.          sta $d401,x
  918.          lda #0
  919.          sta $d400,x
  920.          beq witer
  921. norm
  922.          clc
  923.          lda vilo,x
  924.          adc glidel,x
  925.          sta help
  926.          lda vihi,x
  927.          adc glideh,x
  928.          sta help+1
  929.          lda frqlo,y
  930.          clc
  931.          adc fine,x
  932.          adc help
  933.          sta $d400,x
  934.          lda help+1
  935.          adc frqhi,y
  936.          sta $d401,x
  937. witer
  938.          rts
  939.  
  940. help     .byte $00,$00
  941. ;---------------------------------------
  942. ;Tables
  943. ;---------------------------------------
  944. frqlo    .byte $0c,$1c,$2d,$3e,$47,$66
  945.          .byte $7b,$91,$a9,$c3,$dd,$fa
  946.          .byte $18,$38,$5a,$7d,$a3,$cc
  947.          .byte $f6,$23,$53,$86,$bb,$f4
  948.          .byte $30,$70,$b4,$fb,$47,$98
  949.          .byte $ed,$47,$a7,$0c,$77,$e9
  950.          .byte $61,$e1,$68,$f7,$8f,$30
  951.          .byte $da,$8f,$4e,$18,$ef,$d2
  952.          .byte $c3,$c3,$d1,$ef,$1f,$60
  953.          .byte $b5,$1e,$9c,$31,$df,$a5
  954.          .byte $87,$86,$a2,$df,$3e,$c1
  955.          .byte $6b,$3c,$39,$63,$be,$4b
  956.          .byte $0f,$0c,$45,$bf,$7d,$83
  957.          .byte $d6,$79,$73,$c7,$7c,$97
  958.          .byte $1e,$18,$8b,$7e,$fa,$06
  959.          .byte $ac,$f3,$e6,$8f,$f8,$fc
  960. ;---------------------------------------
  961. frqhi    .byte $01,$01,$01,$01,$01,$01
  962.          .byte $01,$01,$01,$01,$01,$01
  963.          .byte $02,$02,$02,$02,$02,$02
  964.          .byte $02,$03,$03,$03,$03,$03
  965.          .byte $04,$04,$04,$04,$05,$05
  966.          .byte $05,$06,$06,$07,$07,$07
  967.          .byte $08,$08,$09,$09,$0a,$0b
  968.          .byte $0b,$0c,$0d,$0e,$0e,$0f
  969.          .byte $10,$11,$12,$13,$15,$16
  970.          .byte $17,$19,$1a,$1c,$1d,$1f
  971.          .byte $21,$23,$25,$27,$2a,$2c
  972.          .byte $2f,$32,$35,$38,$3b,$3f
  973.          .byte $43,$47,$4b,$4f,$54,$59
  974.          .byte $5e,$64,$6a,$70,$77,$7e
  975.          .byte $86,$8e,$96,$9f,$a8,$b3
  976.          .byte $bd,$c8,$d4,$e1,$ee,$fd
  977. ;---------------------------------------
  978. ;supercommands
  979. ;---------------------------------------
  980. ;00 - nothing
  981. ;01 - cont. pulse (no pulse restart)
  982. ;02 - srr.xx
  983. ;03 - adr.xx
  984. ;04 - vol.xx
  985. ;05 - gld.xxxx
  986. ;06 - sld.xxxx
  987. ;07 - vib.xxxx
  988. ;---------------------------------------
  989. commtab  .byte $07,$06;command
  990. commtab1 .byte $30,$00 ;value
  991. commtab2 .byte $40,$a0 ;value
  992. commtab3 .word nofx,contp,sust,adr,vol
  993.          .word gld,sld,vibr
  994. ;---------------------------------------
  995. contp    lda #1
  996.          eor pcont,x
  997.          sta pcont,x
  998.          jmp nofx
  999. ;---------------------------------------
  1000. sust     lda efflo,x
  1001.          sta sr,x
  1002.          jmp nofx
  1003. ;---------------------------------------
  1004. adr      lda efflo,x
  1005.          sta ad,x
  1006.          jmp nofx
  1007. ;---------------------------------------
  1008. vol      lda efflo,x
  1009.          asl a
  1010.          asl a
  1011.          asl a
  1012.          asl a
  1013.          sta svol,x
  1014.          jmp nofx
  1015. ;---------------------------------------
  1016. gld      ldy secpos,x
  1017.          iny
  1018.          lda #0
  1019.          sta glidel,x
  1020.          sta glideh,x
  1021.          lda ($f8),y
  1022.          pha
  1023.          cmp #$60
  1024.          bcc gl1
  1025.          sec
  1026.          sbc #$60
  1027. gl1      sta glfrom,x
  1028.          iny
  1029. glsl     lda ($f8),y
  1030.          cmp #$60
  1031.          bcc gl2
  1032.          sec
  1033.          sbc #$60
  1034. gl2      sta glto,x
  1035.          pha
  1036.          tay
  1037.          lda frqlo,y
  1038.          sta gldel,x
  1039.          lda frqhi,y
  1040.          sta gldeh,x
  1041.          pla
  1042.  
  1043.          cmp glfrom,x
  1044.          beq gl4
  1045.          bcs glup
  1046.          lda efflo,x
  1047.          eor #$ff
  1048.          clc
  1049.          adc #$01
  1050.          sta gll,x
  1051.          lda effhi,x
  1052.          eor #$ff
  1053.          adc #0
  1054.          sta glh,x
  1055.          jmp gl3
  1056. glup
  1057.          lda efflo,x
  1058.          sta gll,x
  1059.          lda effhi,x
  1060.          sta glh,x
  1061. gl3
  1062.          pla
  1063.          inc secpos,x
  1064.          inc secpos,x
  1065.          jmp note
  1066. gl4
  1067.          lda #0
  1068.          sta gll,x
  1069.          beq gl3
  1070. ;---------------------------------------
  1071. sld      ldy secpos,x
  1072.          iny
  1073.          lda #0
  1074.          sta glidel,x
  1075.          sta glideh,x
  1076.          lda #1
  1077.          sta cont,x
  1078.          lda notev,x
  1079.          pha
  1080.          sta glfrom,x
  1081.          dec secpos,x
  1082.          jmp glsl
  1083. ;---------------------------------------
  1084. vibr     lda efflo,x
  1085.          sta vaddl,x
  1086.          sta vaddl1,x
  1087.          lda effhi,x
  1088.          and #$0f
  1089.          sta vaddh,x
  1090.          lsr a
  1091.          sta vaddh1,x
  1092.          ror vaddl1,x
  1093.          lda effhi,x
  1094.          lsr a
  1095.          lsr a
  1096.          lsr a
  1097.          lsr a
  1098.          sta vspeed,x
  1099.          lsr a
  1100.          sta vspeed1,x
  1101.          lda #0
  1102.          sta vilo,x
  1103.          sta vihi,x
  1104.          sta vifirst,x
  1105.          sta vdir,x
  1106.          jmp nofx
  1107.  
  1108.  
  1109. ;---------------------------------------
  1110. trakk    .word tr1,tr2,tr3
  1111.          .byte $00;speed
  1112.          .byte $0f;volume
  1113.  
  1114. ;---------------------------------------
  1115. seclo    .byte <s00,<s01,<s02
  1116.  
  1117. sechi    .byte >s00,>s01,>s02
  1118.  
  1119. ;---------------------------------------
  1120. ;commands
  1121.          ;$ff xx    loop xx
  1122.          ;$fe       stop voice
  1123.          ;$fd xx    transpose +xx
  1124.          ;$fc xx    transpose -xx
  1125.          ;$fb xx    fadein  xx
  1126.          ;$fa xx    fadeout xx
  1127.          ;$ex       volume x
  1128.  
  1129. ;---------------------------------------
  1130. tr1      .byte $fd,0,0,$ff,0
  1131.  
  1132.          .byte $fa,$0d,0,0,$fa,0,0,0
  1133.          .byte $fc,$04
  1134.          .byte $fb,$0d,0,0,0,0
  1135.          .byte $fc,$00
  1136.          .byte $ff,$00
  1137.  
  1138. tr2
  1139.          .byte $fe,$ff,$00
  1140.  
  1141. tr3
  1142.          .byte $fe,$ff,$00
  1143. ;---------------------------------------
  1144. ;commands  $fd.xx   dur xx
  1145.           ;$fc.xx   snd xx
  1146.           ;$fe      cont(---)
  1147.           ;$fb      gate
  1148.           ;$fa      switch
  1149.           ;$f9      cut
  1150.  
  1151.  
  1152.  
  1153. ;---------------------------------------
  1154. s00      .byte $fd,$18
  1155.          .byte $fc,$00
  1156.          .byte $40,$fe,$c0,$fe,$c1,$94
  1157.          .byte $fe,$fe
  1158.          .byte $ff
  1159.  
  1160. s01      .byte $fd,$0c
  1161.          .byte $fc,$01
  1162.          .byte $00,$fe
  1163.          .byte $fc,$02
  1164.          .byte $00,$fe
  1165.          .byte $ff
  1166.  
  1167.  
  1168.  
  1169.          .byte $ff
  1170.  
  1171. s02      .byte $fd,$30,$fc,$03
  1172.          .byte $30
  1173.          .byte $ff
  1174.  
  1175. ;---------------------------------------
  1176. ;instrument data
  1177. ;---------------------------------------
  1178. adtab    .byte $02,$05,$02,$00
  1179. srtab    .byte $aa,$f7,$87,$59
  1180. wavptab  .byte $00,$03,$09,$0f
  1181. pulptab  .byte $00,$06,$08,$06
  1182. filptab  .byte $00,$00,$00,$00
  1183. efftab   .byte $00,$00,$00,$01;xy
  1184.                        ;x=
  1185.                        ;y=wvspeed
  1186.  
  1187.  
  1188. wavetab  .byte $89
  1189.          .byte $41,$91
  1190.          .byte $89,$19,$19,$19,$18,$91
  1191.          .byte $89,$49,$89,$48,$88,$91
  1192.          .byte $21,$21,$21,$90
  1193.  
  1194. freqtab
  1195.          .byte $dd,$00,$00
  1196.          .byte $dd,$0a,$07,$04,$02,$00
  1197.          .byte $dd,$0e,$4c,$0a,$3c,$00
  1198.          .byte $00,$03,$07,$0f
  1199.  
  1200. pulstab1 .byte $03,$00,$00,$ff,$00,$90
  1201.          .byte $00,$91
  1202.          .byte $08,$91
  1203.  
  1204. pulstab2 .byte $f0,$20,$20,$e0,$20,$01
  1205.          .byte $00,$00
  1206.          .byte $00,$00
  1207.  
  1208.  
  1209. ;---------------------------------------
  1210.  
  1211.