cmc.asx
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:10k
源码类别:

Windows CE

开发平台:

C/C++

  1. *---------------------------*
  2. *     cmc player v 2.1      *
  3. *   by Marcin Lewandowski   *
  4. * based on cmc player v 2.0 *
  5. *      by Janusz Pelc       *
  6. *---------------------------*
  7.  org $0500
  8. *--- strona 0
  9. addr equ $fc
  10. word equ $fe
  11. *--- skoki
  12.  jmp basic
  13.  jmp init
  14.  jmp play
  15. *--- dane
  16. volume dta d'   '
  17. czest  dta d'   '
  18. numins dta d'   '
  19.  dta c' cmc player v 2.1 '*
  20. frq    dta d'    '
  21. znieks dta d'    '
  22. audc   dta b(0)
  23. czest1 dta d'   '
  24. czest2 dta d'   '
  25. czest3 dta d'   '
  26. zniek  dta d'   '
  27. count1 dta b($ff),b($ff),b($ff)
  28. count2 dta d'   '
  29. lopad  dta d'   '
  30. numptr dta d'   '
  31. poswpt dta d'   '
  32. ilewol dta d'   '
  33. czygrx dta b($80),b($80),b($80)
  34. czygrc dta b($80)
  35. dana0  dta d'   '
  36. dana1  dta d'   '
  37. dana2  dta d'   '
  38. dana3  dta d'   '
  39. dana4  dta d'   '
  40. dana5  dta d'   '
  41. ladr   dta d'   '
  42. hadr   dta d'   '
  43. posptr dta b(0)
  44. possng dta b(0)
  45. pocrep dta b(0)
  46. konrep dta b(0)
  47. ilrep  dta b(0)
  48. tmpo   dta b(0)
  49. ltemp  dta b(0)
  50. b1     dta b(0)
  51. b2     dta b(0)
  52. b3     dta b(0)
  53. czygr  dta b(0)
  54. adrmus dta a(0)
  55. adradr dta a(0)
  56. adrsng dta a(0)
  57. *--- init
  58. init sta b1
  59.  stx b2
  60.  sty b3
  61.  and #$70
  62.  lsr @
  63.  lsr @
  64.  lsr @
  65.  tax
  66.  lda tab1,x
  67.  sta zm1+1
  68.  lda tab1+1,x
  69.  sta zm1+2
  70.  lda #3
  71.  sta $d20f
  72.  cld
  73.  lda word
  74.  pha
  75.  lda word+1
  76.  pha
  77.  ldy b3
  78.  ldx b2
  79.  lda b1
  80. zm1 jsr graj
  81.  pla
  82.  sta word+1
  83.  pla
  84.  sta word
  85.  rts
  86. graj lda adrsng
  87.  sta word
  88.  lda adrsng+1
  89.  sta word+1
  90.  ldy #0
  91.  txa
  92.  beq grajx
  93. l1 lda (word),y
  94.  cmp #$8f
  95.  beq l2
  96.  cmp #$ef
  97.  bne l3
  98. l2 dex
  99.  bne l3
  100.  iny
  101.  cpy #$54
  102.  bcs l4
  103.  tya
  104.  tax
  105.  bpl grajx
  106. l3 iny
  107.  cpy #$54
  108.  bcc l1
  109. l4 rts
  110. grajx stx possng
  111.  jsr skoncz
  112.  lda #0
  113.  ldx #9
  114. l5 sta poswpt,x
  115.  dex
  116.  bpl l5
  117.  sta posptr
  118.  lda #1
  119.  sta czygr
  120.  lda #$ff
  121.  sta konrep
  122.  lda adrmus
  123.  sta word
  124.  lda adrmus+1
  125.  sta word+1
  126.  ldy #$13
  127.  lda (word),y
  128.  tax
  129.  lda adrsng
  130.  sta word
  131.  lda adrsng+1
  132.  sta word+1
  133.  ldy possng
  134. l6 lda (word),y
  135.  cmp #$cf
  136.  bne l7
  137.  tya
  138.  clc
  139.  adc #$55
  140.  tay
  141.  lda (word),y
  142.  bmi l8
  143.  tax
  144.  jmp l8
  145. l7 cmp #$8f
  146.  beq l8
  147.  cmp #$ef
  148.  beq l8
  149.  dey
  150.  bpl l6
  151. l8 stx tmpo
  152.  stx ltemp
  153.  rts
  154. tempo and #$f
  155.  beq l8
  156.  stx d0+1
  157.  stx d1+1
  158.  stx d2+1
  159.  sty d0+2
  160.  sty d1+2
  161.  sty d2+2
  162.  rts
  163. inic stx adrmus
  164.  stx word
  165.  sty adrmus+1
  166.  sty word+1
  167.  clc
  168.  txa
  169.  adc #$14
  170.  sta adradr
  171.  tya
  172.  adc #0
  173.  sta adradr+1
  174.  stx adrsng
  175.  iny
  176.  iny
  177.  sty adrsng+1
  178.  ldy #$13
  179.  lda (word),y
  180.  sta tmpo
  181.  sta ltemp
  182. skoncz ldx #8
  183. l9 lda #0
  184.  sta czygr
  185.  sta $d200,x
  186.  cpx #3
  187.  bcs l10
  188.  sta volume,x
  189.  lda #$ff
  190.  sta count1,x
  191. l10 dex
  192.  bpl l9
  193. przer lda #$80
  194. l11 ldx #3
  195. l12 sta czygrx,x
  196.  dex
  197.  bpl l12
  198. l13 rts
  199. kont lda #1
  200.  sta czygr
  201.  lda #0
  202.  beq l11
  203. instr and #3
  204.  cmp #3
  205.  beq l13
  206.  cpx #$40
  207.  bcs l13
  208.  cpy #26
  209.  bcs l13
  210.  tax
  211.  lda #$80
  212.  sta czygrx,x
  213. inst lda #0
  214.  sta count1,x
  215.  sta count2,x
  216.  sta lopad,x
  217.  lda b2
  218.  sta czest,x
  219.  lda b3
  220.  asl @
  221.  asl @
  222.  asl @
  223.  sta word
  224.  clc
  225.  lda adrmus
  226.  adc #$30
  227.  pha
  228.  lda adrmus+1
  229.  adc #1
  230.  tay
  231.  pla
  232.  clc
  233.  adc word
  234.  sta ladr,x
  235.  tya
  236.  adc #0
  237.  sta hadr,x
  238.  clc
  239.  lda adrmus
  240.  adc #$94
  241.  sta word
  242.  lda adrmus+1
  243.  adc #0
  244.  sta word+1
  245.  lda b3
  246.  asl @
  247.  adc b3
  248.  asl @
  249.  tay
  250.  lda (word),y
  251.  sta dana0,x
  252.  iny
  253.  lda (word),y
  254.  sta dana1,x
  255.  and #7
  256.  sta b1
  257.  iny
  258.  lda (word),y
  259.  sta dana2,x
  260.  iny
  261.  lda (word),y
  262.  sta dana3,x
  263.  iny
  264.  lda (word),y
  265.  sta dana4,x
  266.  iny
  267.  lda (word),y
  268.  sta dana5,x
  269.  ldy #0
  270.  lda b1
  271.  cmp #3
  272.  bne l14
  273.  ldy #2
  274. l14 cmp #7
  275.  bne l15
  276.  ldy #4
  277. l15 lda tab3,y
  278.  sta word
  279.  lda tab3+1,y
  280.  sta word+1
  281.  lda dana2,x
  282.  lsr @
  283.  lsr @
  284.  lsr @
  285.  lsr @
  286.  clc
  287.  adc b2
  288.  sta b2
  289.  sta zm2+1
  290.  tay
  291.  lda b1
  292.  cmp #7
  293.  bne l16
  294.  tya
  295.  asl @
  296.  tay
  297.  lda (word),y
  298.  sta czest1,x
  299.  iny
  300.  sty b2
  301.  jmp l17
  302. l16 lda (word),y
  303.  sta czest1,x
  304.  lda dana2,x
  305.  and #$f
  306.  clc
  307.  adc b2
  308.  sta b2
  309. l17 ldy b2
  310.  lda b1
  311.  cmp #5
  312.  php
  313.  lda (word),y
  314.  plp
  315.  beq l18
  316.  cmp czest1,x
  317.  bne l18
  318.  sec
  319.  sbc #1
  320. l18 sta czest2,x
  321.  lda dana0,x
  322.  pha
  323.  and #3
  324.  tay
  325.  lda tab4,y
  326.  sta zniek,x
  327.  pla
  328.  lsr @
  329.  lsr @
  330.  lsr @
  331.  lsr @
  332.  ldy #$3e
  333.  cmp #$f
  334.  beq l19
  335.  ldy #$37
  336.  cmp #$e
  337.  beq l19
  338.  ldy #$30
  339.  cmp #$d
  340.  beq l19
  341.  clc
  342. zm2 adc #0
  343.  tay
  344. l19 lda tab5,y
  345.  sta czest3,x
  346.  rts
  347. *--- play
  348. play cld
  349.  lda addr
  350.  pha
  351.  lda addr+1
  352.  pha
  353.  lda word
  354.  pha
  355.  lda word+1
  356.  pha
  357.  lda czygr
  358.  bne g1
  359.  jmp end
  360. g1 lda czygrc
  361.  beq g2
  362.  jmp dal3
  363. g2 lda tmpo
  364.  cmp ltemp
  365.  beq g3
  366.  jmp dal2
  367. g3 lda posptr
  368.  beq g4
  369.  jmp dal1
  370. g4 ldx #2
  371. g5 ldy czygrx,x
  372.  bmi g6
  373.  sta czygrx,x
  374. g6 sta poswpt,x
  375.  dex
  376.  bpl g5
  377.  lda adrsng
  378.  sta addr
  379.  lda adrsng+1
  380.  sta addr+1
  381.  ldy possng
  382.  sty word
  383. g7 cpy konrep
  384.  bne g8
  385.  lda ilrep
  386.  beq g8
  387.  lda possng
  388.  ldy pocrep
  389.  sty possng
  390.  dec ilrep
  391.  bne g7
  392.  sta possng
  393.  tay
  394.  bpl g7
  395. g8 ldx #0
  396. g9 lda (addr),y
  397.  cmp #$fe
  398.  bne g10
  399.  ldy possng
  400.  iny
  401.  cpy word
  402.  beq g11
  403.  sty possng
  404.  jmp g7
  405. g10 sta numptr,x
  406.  clc
  407.  tya
  408.  adc #$55
  409.  tay
  410.  inx
  411.  cpx #3
  412.  bcc g9
  413.  ldy possng
  414.  lda (addr),y
  415.  bpl dal1
  416.  cmp #$ff
  417.  beq dal1
  418.  lsr @
  419.  lsr @
  420.  lsr @
  421.  and #$e
  422.  tax
  423.  lda tab2,x
  424.  sta zm3+1
  425.  lda tab2+1,x
  426.  sta zm3+2
  427.  lda numptr+1
  428.  sta word+1
  429. zm3 jsr stop
  430.  sty possng
  431.  cpy #$55
  432.  bcs g11
  433.  cpy word
  434.  bne g7
  435. g11 ldy word
  436.  sty possng
  437.  jmp end
  438. stop jsr przer
  439. g12 ldy #$ff
  440.  rts
  441. jump bmi g12
  442.  tay
  443.  rts
  444. up bmi g12
  445.  sec
  446.  tya
  447.  sbc word+1
  448.  tay
  449.  rts
  450. down bmi g12
  451.  clc
  452.  tya
  453.  adc word+1
  454.  tay
  455.  rts
  456. temp bmi g12
  457.  sta tmpo
  458.  sta ltemp
  459.  iny
  460.  rts
  461. rep bmi g12
  462.  lda numptr+2
  463.  bmi g12
  464.  sta ilrep
  465.  iny
  466.  sty pocrep
  467.  clc
  468.  tya
  469.  adc word+1
  470.  sta konrep
  471.  rts
  472. break dey
  473.  bmi g13
  474.  lda (addr),y
  475.  cmp #$8f
  476.  beq g13
  477.  cmp #$ef
  478.  bne break
  479. g13 iny
  480.  rts
  481. dal1 ldx #2
  482. v1 lda ilewol,x
  483.  beq v2
  484.  dec ilewol,x
  485.  bpl v7
  486. v2 lda czygrx,x
  487.  bne v7
  488.  ldy numptr,x
  489.  cpy #$40
  490.  bcs v7
  491.  lda adradr
  492.  sta addr
  493.  lda adradr+1
  494.  sta addr+1
  495.  lda (addr),y
  496.  sta word
  497.  clc
  498.  tya
  499.  adc #$40
  500.  tay
  501.  lda (addr),y
  502.  sta word+1
  503.  and word
  504.  cmp #$ff
  505.  beq v7
  506. v3 ldy poswpt,x
  507.  lda (word),y
  508.  and #$c0
  509.  bne v4
  510.  lda (word),y
  511.  and #$3f
  512.  sta numins,x
  513.  inc poswpt,x
  514.  bpl v3
  515. v4 cmp #$40
  516.  bne v5
  517.  lda (word),y
  518.  and #$3f
  519.  sta b2
  520.  lda numins,x
  521.  sta b3
  522.  jsr inst
  523.  jmp v6
  524. v5 cmp #$80
  525.  bne v7
  526.  lda (word),y
  527.  and #$3f
  528.  sta ilewol,x
  529. v6 inc poswpt,x
  530. v7 dex
  531.  bpl v1
  532.  ldx posptr
  533.  inx
  534.  txa
  535.  and #$3f
  536.  sta posptr
  537. dal2 dec ltemp
  538.  bne dal3
  539.  lda tmpo
  540.  sta ltemp
  541.  lda posptr
  542.  bne dal3
  543.  inc possng
  544. dal3 ldy czest2
  545.  lda dana1
  546.  and #7
  547.  cmp #5
  548.  beq a1
  549.  cmp #6
  550.  bne a2
  551. a1 dey
  552. a2 sty frq+3
  553.  ldy #0
  554.  cmp #5
  555.  beq a3
  556.  cmp #6
  557.  bne a4
  558. a3 ldy #2
  559. a4 cmp #7
  560.  bne a5
  561.  ldy #$28
  562. a5 sty audc
  563.  ldx #2
  564. loop lda dana1,x
  565.  and #$e0
  566.  sta znieks,x
  567.  lda ladr,x
  568.  sta addr
  569.  lda hadr,x
  570.  sta addr+1
  571.  lda count1,x
  572.  cmp #$ff
  573.  beq y4
  574.  cmp #$f
  575.  bne y2
  576.  lda lopad,x
  577.  beq y4
  578.  dec lopad,x
  579.  lda lopad,x
  580.  bne y4
  581.  ldy volume,x
  582.  beq y1
  583.  dey
  584. y1 tya
  585.  sta volume,x
  586.  lda dana3,x
  587.  sta lopad,x
  588.  jmp y4
  589. y2 lda count1,x
  590.  lsr @
  591.  tay
  592.  lda (addr),y
  593.  bcc y3
  594.  lsr @
  595.  lsr @
  596.  lsr @
  597.  lsr @
  598. y3 and #$f
  599.  sta volume,x
  600. y4 ldy czest1,x
  601.  lda dana1,x
  602.  and #7
  603.  cmp #1
  604.  bne y6
  605.  dey
  606.  tya
  607.  iny
  608.  cmp czest2,x
  609.  php
  610.  lda #1
  611.  plp
  612.  bne y5
  613.  asl @
  614.  asl @
  615. y5 and count2,x
  616.  beq y6
  617.  ldy czest2,x
  618.  cpy #$ff
  619.  bne y6
  620.  lda #0
  621.  sta volume,x
  622. y6 tya
  623.  sta frq,x
  624.  lda #1
  625.  sta b1
  626.  lda count1,x
  627.  cmp #$f
  628.  beq y9
  629.  and #7
  630.  tay
  631.  lda tab9,y
  632.  sta word
  633.  lda count1,x
  634.  and #8
  635.  php
  636.  txa
  637.  plp
  638.  clc
  639.  beq y7
  640.  adc #3
  641. y7 tay
  642.  lda dana4,y
  643.  and word
  644.  beq y9
  645.  lda czest3,x
  646.  sta frq,x
  647.  stx b1
  648.  dex
  649.  bpl y8
  650.  sta frq+3
  651.  lda #0
  652.  sta audc
  653. y8 inx
  654.  lda zniek,x
  655.  sta znieks,x
  656. y9 lda count1,x
  657.  and #$f
  658.  cmp #$f
  659.  beq y10
  660.  inc count1,x
  661.  lda count1,x
  662.  cmp #$f
  663.  bne y10
  664.  lda dana3,x
  665.  sta lopad,x
  666. y10 lda czygrx,x
  667.  bpl y11
  668.  lda volume,x
  669.  bne y11
  670.  lda #$40
  671.  sta czygrx,x
  672. y11 inc count2,x
  673.  ldy #0
  674.  lda dana1,x
  675.  lsr @
  676.  lsr @
  677.  lsr @
  678.  lsr @
  679.  bcc y12
  680.  dey
  681. y12 lsr @
  682.  bcc y13
  683.  iny
  684. y13 clc
  685.  tya
  686.  adc czest1,x
  687.  sta czest1,x
  688.  lda czest2,x
  689.  cmp #$ff
  690.  bne y14
  691.  ldy #0
  692. y14 clc
  693.  tya
  694.  adc czest2,x
  695.  sta czest2,x
  696.  dex
  697.  bmi x1
  698.  jmp loop
  699. x1 lda znieks
  700.  sta znieks+3
  701.  lda dana1
  702.  and #7
  703.  tax
  704.  ldy #3
  705.  lda b1
  706.  beq x2
  707.  ldy tab10,x
  708. x2 tya
  709.  pha
  710.  lda tab8,y
  711.  php
  712.  and #$7f
  713.  tax
  714.  tya
  715.  and #3
  716.  asl @
  717.  tay
  718.  lda frq,x
  719. d0 sta $d200,y
  720.  iny
  721.  lda volume,x
  722.  cpx #3
  723.  bne x3
  724.  lda volume
  725. x3 ora znieks,x
  726.  plp
  727.  bpl d1
  728.  lda #0
  729. d1 sta $d200,y
  730.  pla
  731.  tay
  732.  dey
  733.  and #3
  734.  bne x2
  735.  ldy #8
  736.  lda audc
  737. d2 sta $d200,y
  738.  clc
  739. end pla
  740.  sta word+1
  741.  pla
  742.  sta word
  743.  pla
  744.  sta addr+1
  745.  pla
  746.  sta addr
  747.  rts
  748. *--- basic
  749. basic pla
  750.  tax
  751.  beq p6
  752.  cmp #2
  753.  beq p2
  754. p1 pla
  755.  pla
  756.  dex
  757.  bne p1
  758.  rts
  759. p2 lda $14
  760.  cmp $14
  761.  beq *-2
  762.  lda $224
  763.  cmp <p8
  764.  bne p3
  765.  lda $225
  766.  cmp >p8
  767.  beq p1
  768. p3 lda $224
  769.  sta p9+1
  770.  lda $225
  771.  sta p9+2
  772.  lda <p8
  773.  sta $224
  774.  lda >p8
  775.  sta $225
  776.  pla
  777.  pla
  778.  beq p4
  779.  sec
  780.  sbc #1
  781. p4 sta p5+1
  782.  pla
  783.  tay
  784.  pla
  785.  tax
  786.  lda #$70
  787.  jsr init
  788.  lda #0
  789. p5 ldx #0
  790.  jmp init
  791. p6 lda $14
  792.  cmp $14
  793.  beq *-2
  794.  lda $224
  795.  cmp <p8
  796.  bne p2-1
  797.  lda $225
  798.  cmp >p8
  799.  bne p2-1
  800. p7 lda p9+1
  801.  sta $224
  802.  lda p9+2
  803.  sta $225
  804.  lda #$40
  805.  jmp init
  806. p8 jsr play
  807.  bcc p9
  808.  jsr p7
  809. p9 jmp $ffff
  810. *--- tablice
  811. tab1 dta a(graj)
  812.  dta a(grajx)
  813.  dta a(instr)
  814.  dta a(tempo)
  815.  dta a(skoncz)
  816.  dta a(przer)
  817.  dta a(kont)
  818.  dta a(inic)
  819. tab2 dta a(stop)
  820.  dta a(jump)
  821.  dta a(up)
  822.  dta a(down)
  823.  dta a(temp)
  824.  dta a(rep)
  825.  dta a(break)
  826. tab3 dta a(tab5)
  827.  dta a(tab6)
  828.  dta a(tab7)
  829. tab4 dta b($80),b($a0)
  830.  dta b($20),b($40)
  831. tab5 dta b($ff),b($f1),b($e4),b($d7)
  832.  dta b($cb),b($c0),b($b5),b($aa)
  833.  dta b($a1),b($98),b($8f),b($87)
  834.  dta b($7f),b($78),b($72),b($6b)
  835.  dta b($65),b($5f),b($5a),b($55)
  836.  dta b($50),b($4b),b($47),b($43)
  837.  dta b($3f),b($3c),b($38),b($35)
  838.  dta b($32),b($2f),b($2c),b($2a)
  839.  dta b($27),b($25),b($23),b($21)
  840.  dta b($1f),b($1d),b($1c),b($1a)
  841.  dta b($18),b($17),b($16),b($14)
  842.  dta b($13),b($12),b($11),b($10)
  843.  dta b($0f),b($0e),b($0d),b($0c)
  844.  dta b($0b),b($0a),b($09),b($08)
  845.  dta b($07),b($06),b($05),b($04)
  846.  dta b($03),b($02),b($01),b($00)
  847.  dta b($00)
  848. tab6 dta b($00),b($00),b($00),b($00)
  849.  dta b($f2),b($e9),b($da),b($ce)
  850.  dta b($bf),b($b6),b($aa),b($a1)
  851.  dta b($98),b($8f),b($89),b($80)
  852.  dta b($7a),b($71),b($6b),b($65)
  853.  dta b($5f),b($00),b($56),b($50)
  854.  dta b($67),b($60),b($5a),b($55)
  855.  dta b($51),b($4c),b($48),b($43)
  856.  dta b($3f),b($3d),b($39),b($34)
  857.  dta b($33),b($39),b($2d),b($2a)
  858.  dta b($28),b($25),b($24),b($21)
  859.  dta b($1f),b($1e),b($00),b($00)
  860.  dta b($0f),b($0e),b($0d),b($0c)
  861.  dta b($0b),b($0a),b($09),b($08)
  862.  dta b($07),b($06),b($05),b($04)
  863.  dta b($03),b($02),b($01),b($00)
  864.  dta b($00)
  865. tab7 dta a($b38),a($a8c),a($a00),a($96a)
  866.  dta a($8e8),a($86a),a($7ef),a($780)
  867.  dta a($708),a($6ae),a($646),a($5e6)
  868.  dta a($595),a($541),a($4f6),a($4b0)
  869.  dta a($46e),a($430),a($3f6),a($3bb)
  870.  dta a($384),a($352),a($322),a($2f4)
  871.  dta a($2c8),a($2a0),a($27a),a($255)
  872.  dta a($234),a($214),a($1f5),a($1d8)
  873.  dta a($1bd),a($1a4),a($18d),a($177)
  874.  dta a($160),a($14e),a($138),a($127)
  875.  dta a($115),a($106),a($0f7),a($0e8)
  876.  dta a($0db),a($0cf),a($0c3),a($0b8)
  877.  dta a($0ac),a($0a2),a($09a),a($090)
  878.  dta a($088),a($07f),a($078),a($070)
  879.  dta a($06a),a($064),a($05e),a($057)
  880.  dta a($052),a($032),a($00a)
  881. tab8 dta b($00),b($01),b($02),b($83)
  882.  dta b($00),b($01),b($02),b($03)
  883.  dta b($01),b($00),b($02),b($83)
  884.  dta b($01),b($00),b($02),b($03)
  885.  dta b($01),b($02),b($80),b($03)
  886. tab9 dta b($80),b($40),b($20),b($10)
  887.  dta b($08),b($04),b($02),b($01)
  888. tab10 dta b(3),b(3),b(3),b(3)
  889.  dta b(7),b($b),b($f),b($13)
  890. *--- koniec
  891.  end