EMU618社区

 找回密码
 立即注册
搜索
查看: 320|回复: 2

[原创] [FC][音乐播放器][NES + 源码]

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 9 Y" B1 f  T2 p  R& D
" _! e  h0 {3 O* M; H& e# A
1.魂斗罗6 p: c& K1 w( W* ?
2.超级魂斗罗
( p7 {: Z% J) Z, W' ^3.赤影战士! W2 Y% _  f) V4 R
4.忍者龙剑传2
+ v! K1 g, F+ X; X8 k8 I/ u
" x4 `# v1 T+ ?8 U' x) m+ V- ^# `  w( ^" q) P7 O0 [
! v( G* ]" O8 y% i
7 y5 U$ L% R2 a
源码:
6 }) k2 `- s% E+ R
  1. ;[FC音乐][播放器模板]+ t1 z; w0 }# Y& L; d) C; ^
  2. ;FlameCyclone 20230710
    3 C$ c/ F) h  u8 g3 [
  3. & T$ {/ o! z' R/ R
  4. ;文件头
    ! Y6 b+ l3 v" |9 O5 x2 ~3 B
  5. ;======================================================================
      r1 `  F  w# c
  6. .INESPRG 4                                              ;16KB PRG 数量: M1 ]0 X8 v  u- ~9 h: E$ q8 y
  7. .INESCHR 0                                               ;8KB CHR 数量7 y/ u' L& J9 p1 E& D9 w) b* R) `
  8. .INESMAP 4                                                   ;mapper 42 }) N$ x5 }6 N, g
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直# G. h! I0 F4 g  I7 l4 ^) \

  10. 0 x, @. f/ k( \1 B8 _1 G
  11. ;==================================================
    0 X' z6 q4 T9 ?8 e( c+ ?, R& Y1 ~. ~
  12. SOUND_BAR_SHOW_ENABLE       = 1
    ) T: b3 S3 V1 V- P+ B
  13. ;==================================================4 c4 e! e! `& C8 i
  14. BANK_DATA_MASK              = $07( q% R2 ^3 K' B+ [3 x  ?
  15. ;==================================================
    # d) @& y0 z- n% g- y, t
  16. SOUND_DATA_BANK_0           = $001 y) r) n) f/ t
  17. SOUND_DATA_BANK_1           = $01
    ( ^6 Y! R7 a( ]$ T8 k
  18. SOUND_DATA_BANK_2           = $024 P' b0 b+ k3 Z  [
  19. SOUND_DATA_BANK_C000        = $06
    4 f7 |& `3 b' u$ J
  20. * k5 h, e4 @9 ~# L* x: g7 P  {( k9 S
  21. ;-------------------------------------------------6 J: s) S! E2 }; ?
  22. CHR_DATA_BANK               = $04
      T+ X6 r: P' N- a% M
  23. CHR_DATA_ADDR               = $A000: }/ |, k& E, [
  24. ;-------------------------------------------------3 c" x) T6 f. o  V3 V: j
  25. PROGRAM_BANK                = $05
    ) F- y: |& ?8 j6 L  I
  26. PROGRAM_ADDR                = $8000! d& L& H* O) {
  27. ;-------------------------------------------------
    * v/ A* f' N8 f6 Z# Q+ h
  28. RESET_BANK                  = $07
    ' h9 Q* b! ^7 Y* Q
  29. RESET_ADDR                  = $FE00
      z1 Y1 y. Z/ `
  30. ;==================================================
    # V4 y( O0 K3 f
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    % I$ P8 k2 J# O  l& C% W# `3 h
  32. Music_Play_Addr             = $813C ;音乐播放地址
    9 E: {* X# e) p+ B* Y% L
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址: }! u% r! o- H0 v0 _
  34. ;==================================================
    ( K$ T' F7 }; d( k6 F2 N
  35. Music_Song_Total            = 039  ;全部曲目总数
    % g3 |2 b/ U* p4 J4 \) j/ t
  36. Music_Start_Song            = 007  ;初始播放曲目7 N& E5 i" G5 Z/ |. U, V& n
  37. ;==================================================% c0 i2 O% ]) [3 U$ |7 l
  38. : {4 p+ h: U6 r- x; E& Q: B
  39. ;==================================================4 e0 n7 B2 ?7 @* v; s
  40. Title_Text_Pos      = $210D ;标题文本位置' V: M% U( s9 b0 S  Q6 M: z
  41. Author_Info_Pos     = $2284 ;作者文本位置
    ! G  S, j& A* }- p- c9 B
  42. Date_Info_Pos       = $22CB ;日期文本位置
      C- w) f" Q& f# D( h3 R
  43. ;------------------------------
    / _' _, d( u, H/ X3 s
  44. ;------------------------------
    $ k6 g0 [0 r. n0 k; C& i
  45. .IF SOUND_BAR_SHOW_ENABLE3 @/ k1 v- y8 @8 @5 G
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    9 k+ J) s& K+ m/ _0 d: h9 R
  47. Play_Time_Pos       = $21F3 ;播放时间位置2 L; @; m2 n1 H$ H3 W: x7 q& i
  48. Play_State_Pos      = $2233 ;播放状态位置5 e( H, l! B( L7 I
  49. .ELSE
    3 ?4 }7 Y7 z1 h; U! L3 O- b0 F
  50. 1 n' H  B$ d1 q+ h5 B+ ?6 ~
  51. .IF Music_Song_Total > 993 @' G  T5 r+ e5 p  F& ^
  52. Play_Index_Pos      = $21AC ;当前曲目位置, t% Z/ D1 t+ E% ~# M+ x: `# ^
  53. .ELSE
    - X1 {. s0 n" f8 h7 Z  K

  54. & C! J- K5 a8 H; D6 V0 r
  55. .IF Music_Song_Total > 9% l# G2 L  {; \; k6 i2 f
  56. Play_Index_Pos      = $21AD ;当前曲目位置5 D4 _4 c2 E$ l$ C* d
  57. .ELSE
    + V" c2 v+ z# G8 \  F4 R7 ^
  58. Play_Index_Pos      = $21AE ;当前曲目位置  ?1 m1 `2 T/ y2 ^; E
  59. .ENDIF$ q4 C) k& ^+ Q- |% K4 D: @
  60. $ Y4 \" T  G" Q- ^* L
  61. .ENDIF
    / {& A& w( ?! P* z" ?) c  S2 a& d
  62. 1 g6 X  y8 D; x

  63. - R1 p9 [: `0 h% o4 o- H) Y
  64. Play_Time_Pos       = $21EC ;播放时间位置# I4 g9 N/ P2 |8 e7 S
  65. Play_State_Pos      = $222C ;播放状态位置
    9 ]$ {" w8 z- t  [* l
  66. .ENDIF
    ( o9 b; @6 q1 ^
  67. ;------------------------------$ s1 r9 k/ |- P1 L) F) `; ]/ U
  68. Track_Name_Pos      = $216B ;曲目文本位置
    " j+ n4 `; F/ t5 d
  69. Sound_Track_Pos     = $21A5 ;声道文本位置- Q8 g% \8 r* B0 J. V
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    2 q5 ^  i) q5 J+ a2 W, B: M+ k0 G
  71. ;==================================================
    ( s, _. M; ?  \) ]# j& X0 {
  72. Scroll_X = $00
    9 r0 Q# J' j$ a
  73. Scroll_Y = $06
    ' K' o# k. Y1 X8 ?# K
  74. ;==================================================
    ' Q- q8 ^% P1 d& n8 g* y  P
  75. RAM_Cln_1       = $0100
    % I, q) s4 N" H  L8 p2 C/ E
  76. RAM_Cln_1_Size  = $808 X# h+ U* c& H
  77. RAM_Cln_2       = $00E06 k/ d8 U  s% K  ~# j! V% W
  78. RAM_Cln_2_Size  = $205 u& U2 A  {5 j/ u. x' n! q. z' e
  79. RAM_Cln_3       = $00E0
    * @  |5 Y; t7 R! G4 \# G2 N
  80. RAM_Cln_3_Size  = $20
      N) u( S9 ^! A: x3 ~1 H) B

  81. & B% }$ s% K; c8 c. V( p- b' h
  82. ;==================================================/ {7 e! l) i% |0 d# q
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器% H' ]+ W/ Y& a* }5 O
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    7 n8 s2 W) z& G+ p
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位
    ; g; x9 A0 r+ p$ x
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    3 c. p+ T* H2 K1 y- k3 `0 m1 z
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    ) V: S3 \, s0 ?6 a
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 % J+ B- V) k; b
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    + G7 B$ L" c* L6 }4 o! h# [9 h
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    6 q' q$ M2 @5 L8 e' K  _! j- k
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存0 g9 g/ I; E6 @6 M/ N0 F
  92. APU_STATUS              =   $4015   ;声音通道切换# n; Y  b5 U( Q, y# u! x6 s
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通' Y5 i4 Q3 c0 g/ }6 N9 k- Q3 q
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通
    4 p) @8 V( e3 j5 e) U4 I4 S
  95. ;==================================================
    . r6 ^1 d9 |7 u. ~
  96. MMC3_BANK_CTRL          =   $8000
    3 x, s  S4 S4 x: s# M: o
  97. MMC3_BANK_DATA          =   $8001
    - J3 q& F) t* k5 T8 a; O* R7 `0 c) h
  98. MMC3_MIRRORING          =   $A000
    ; q0 t( U' z) ?9 Q' t4 p
  99. MMC3_PRG_RAM_PROTECT    =   $A001
    7 _. z' O9 p2 Q: Q+ Z) e1 d2 @
  100. MMC3_IRQ_LATCH          =   $C0005 T) F) e( U( N  C7 k7 Q# w
  101. MMC3_IRQ_RELOAD         =   $C001
    / a! h; A  {( |8 l: T# c5 z
  102. MMC3_IRQ_DISABLE        =   $E000# Q- A7 m9 B& Y$ ~. P
  103. MMC3_IRQ_ENABLE         =   $E001
    ! {  P/ a* t2 C' o* }+ ^
  104. . O" @/ y3 N# V2 C
  105. ;音乐数据块/ Q+ o2 z" c' m7 |$ A  X) I8 ~2 r
  106. 8 N: O2 T3 K+ r% q1 G
  107. ;======================================================================3 G6 E# D; q$ |: {. a
  108. .IF SOUND_BAR_SHOW_ENABLE! h; C4 A/ |0 d' B( N; J7 u
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    ) Y. Z2 Q1 I+ H6 D+ z
  110. .INCBIN "sound_bank_bar/music_data_0.bank"! \2 M' f. R! ~  v8 h4 @. z; A
  111. % P0 F; w" h1 q* K) ?% R4 Y# T, t
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK- j9 J1 y& ?/ r" R* u. H
  113. .INCBIN "sound_bank_bar/music_data_1.bank"2 V, M1 z9 R: E
  114. 0 ~4 u4 p/ ]  `: O! K' ^: \
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    ) W4 R! E* b: K+ e: X( a- v) L
  116. .INCBIN "sound_bank_bar/music_data_2.bank"
    ' B  w5 d+ ~8 A" O8 N- |" C6 X* S
  117. 0 n) t: N$ W8 `  S
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK+ Q! }' A* |2 \& Y/ A
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    5 ~( l" F  r! v, \

  120. + M+ `0 T: d) k3 J' y6 Y
  121. .ELSE
      @! f+ G' z0 ~; r' ]1 p
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    " c5 O$ i' |1 r: f. [8 Q" l
  123. .INCBIN "sound_bank/music_data_0.bank"5 N8 Q( d% s! j

  124.   u8 b8 |8 |" N! d
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    & O7 {( I$ y1 B7 S1 p
  126. .INCBIN "sound_bank/music_data_1.bank"
    ; W2 Z. T+ L' h8 }8 E' E+ \+ j

  127. 3 a, @- g/ P1 @! V* d  U3 p- H
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK* B: x8 h! a& F+ `& q
  129. .INCBIN "sound_bank/music_data_2.bank"2 P" O: |0 f0 I) V' Y2 L1 \

  130. ; j" e; t& E- o" r, R/ I- o
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    - R& y& c% g, B  M# B- z
  132. .INCBIN "sound_bank/music_data_3.bank"
    ; `! M5 }. i! V
  133. .ENDIF
    9 n9 c4 X$ H  o- Z2 t( e! ^

  134. ) N" s' T! I. k" g& |- s/ g. A
  135. ;CHR图形数据
    1 S; v: j! s, q  A' z; l' a; B+ M
  136. ;======================================================================$ f" B6 y  _: s7 J% B$ K, W
  137. .BANK CHR_DATA_BANK. h$ K+ T* P, K( X4 t, d/ m
  138. .INCBIN "chr_bank/chr_data.chr"
    # o% A& Q$ {/ P' T" C+ m

  139. 2 X* {. S) c1 ?  T
  140. ;==================================================
    8 `* M3 ^4 H2 R5 G" L6 C
  141. PPU_Addr        = $0300* h4 s) Y3 ~& a3 |5 D
  142. Palette_Addr    = $03C0
    - L& o: x/ i5 q/ `. X9 J. j9 e. K
  143. Sound_Bar       = PPU_Addr+$E0
    4 n) f* {; {% e- L! u, }, {- U" u
  144. ;==================================================
    1 ]2 L% ^1 P- ^0 |
  145. Palette_Update_Addr     = Palette_Addr+$0D7 N0 F* i) t4 f% `
  146. Palette_Update_Max      = $2C
    4 I4 }& t7 W& P8 r  u# c
  147. Palette_Update_Min      = $21; U& \' U: r4 h( G! K
  148. Palette_Update_Interval = 60
    - w6 L8 c8 ]" ~! }1 V
  149. ;==================================================
    3 Y& j, ?* }$ T) b' P
  150. Sound_Bar_Cnt       = PPU_Addr+$F02 ~! u' [! a* d( N0 I; l
  151. Screen_State        = Sound_Bar_Cnt+$01& ~: e* O% C+ I! w; a
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    $ o# [' S' o, ]" o
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    # S+ p3 ^4 t+ M: W- u5 n+ L9 {" S  R# J8 e
  154. PPU_Addr_L          = Sound_Bar_Cnt+$043 P' P  C5 |6 E2 y5 B7 d
  155. ;==================================================6 o0 S6 x1 R1 v6 G) c# c% A' u
  156. Data_L              = $70
    / E& @7 `8 Q7 j5 X9 H" J! M
  157. Data_H              = Data_L + $01+ j3 N) z7 |: e  W! A" e+ A
  158. Data_Cnt            = Data_L + $02
    5 ]1 ~4 [& G$ u& W/ v: \
  159. Data_Buf            = Data_L + $03! c8 p& z% `6 S" x1 q
  160. Time_Wait_Cnt       = Data_L + $045 F5 m& n6 I' `- [. t, u
  161. Palette_Wait_Cnt    = Data_L + $05
    # x7 N6 ^- N% s* F% l0 `" c
  162. Palette_Update_Flag = Data_L + $06. s/ k7 B: U: o1 X
  163. Show_Track_Name     = Data_L + $071 \& H* u( |, ?: o/ v5 E* t
  164. ;==================================================
    ' z0 U2 j$ l, W# X6 G, f' Z8 e
  165. Key_Keep            = Show_Track_Name + 1
    8 P# A, b& f; ^, K, n% d
  166. Key_Once            = Key_Keep+$01
    8 h$ X0 J& ?, @2 U2 T* _( h
  167. Key_Kemp            = Key_Keep+$02
    ' H' Z7 N3 Z) p" O, c! l
  168. Key_Temp            = Key_Keep+$03
    $ E/ o+ @1 d) r* Y4 y
  169. Key_Getv            = Key_Keep+$045 r. |3 U  v  x  `2 G2 O7 ?1 Z
  170. ;==================================================5 c- E/ _: [1 k/ Z- Q
  171. Music_Cur           = Key_Getv+$01( S8 P: a, V# e5 [8 o! p
  172. Music_Last          = Music_Cur+$01% r2 c* f1 X4 t# z4 s: w
  173. Music_State         = Music_Cur+$02
    - O( T' i6 e) C) M0 ~8 z2 b
  174. ;==================================================
    0 E) l/ Y. e/ n8 L$ e) W+ E" V/ Z; j
  175. HEX_Data            = Music_State+$01
    7 F, ]$ V- s( I% z
  176. DEC_H               = HEX_Data+$01
    5 D6 e8 F# B( f" O
  177. DEC_T               = HEX_Data+$02. K# _0 A% `5 a' R4 f
  178. DEC_L               = HEX_Data+$03
    4 z  z9 t- R9 f+ a' K& F8 ]! q
  179. ;==================================================
    4 f; W% O3 D0 u% b' m
  180. Time_S              = DEC_L+$01
    6 c5 o! q6 s9 i- Y1 y
  181. Time_M              = Time_S+$01
    ; ?( `% r$ c7 s! E8 @
  182. Time_H              = Time_S+$029 m0 v' T; n- f+ C1 F: @7 r5 D$ u% s
  183. Time_Cnt            = Time_S+$03/ ~0 Y9 f9 M! Z: {6 e8 \" X

  184. " N9 f+ n. N0 |+ V/ c
  185. ;==================================================# ?) q+ [. g2 e
  186. Music_Bank_8000 = Time_Cnt + 1
    0 @/ o, G; B% K7 D
  187. Music_Bank_A000 = Music_Bank_8000 + 14 K; v5 D+ |9 G6 s1 J$ j
  188. ;==================================================
    , O* ?. {" T% m2 w( x3 N. A
  189. # F% h8 M! T, J7 V
  190. ;======================================================================
    5 k" ~1 O' }* P8 O" `6 L: i$ t9 R6 n; E
  191. .BANK PROGRAM_BANK
    ; S- v2 @2 H$ l. t4 W! _' `
  192. .ORG PROGRAM_ADDR
    * ~8 p3 Y, u' K( h' A1 f7 _4 w

  193. # G$ U: @# K2 v- L0 N0 \( i$ l
  194. ;==================================================8 Z6 t) P- |2 B; a! v
  195. NmiProgramProcess;NMI中断程序处理
    + V! I# p- s- y1 x# _7 Y
  196. ;处理PPU图像
    . N  B" F5 q4 e
  197. JSR PPU_Proc
    3 @" I3 O# K, u' S- `/ X( \. X: w3 F

  198. : @( {9 o# K1 r* Y% B% c- j. g
  199. ;启用NMI中断; s& ~! ]+ Y% u8 o
  200. LDA #$80
    % |! f- {" j$ e! s, x
  201. STA PPU_CTRL
    3 O" [, o& r5 a+ i' H

  202. - w$ w" }7 T  t* f: V# z+ t2 P. _
  203. ;更新调色板: ?% i% O' C$ d9 K! `
  204. JSR Update_Palette_Data
    9 K8 P# X/ D7 r" l# I  g1 a& ~" f

  205. 0 \& ^9 F/ \6 B5 {( r# B2 B
  206. ;显示时间(缓冲)
    . a1 |( r- S" A0 U. \! w
  207. JSR Time_Show
    0 U6 p% s% J) F+ A( @4 L
  208. 1 W' d5 s" y2 `1 Z( B7 E
  209. ;播放计时
    ; U* I( x" p4 }7 d. I
  210. JSR Time_Count( R/ Z& t) I, R( a

  211. ) o' ]6 N( f( K1 ]7 d
  212. ;播放声音
    $ `: C- e$ i2 p" `8 x% T% n
  213. JSR Sound_Play' G5 \0 p6 b" M8 d3 l+ l! z

  214. ( S. u, W8 u! w. I3 N! B
  215. ;切换音乐(手柄触发)- c: H$ ^$ g& v- m& ]
  216. JSR Music_Switch
    . M0 _6 b- a# D

  217. 3 e* ]3 s. ]# e, E0 d9 W
  218. ;音乐显示(缓冲)
    & E, {/ h1 N2 S+ N+ \! v1 Y, N' e, m! y
  219. .IF SOUND_BAR_SHOW_ENABLE
    $ P( W- Q: g8 I  E6 _$ r6 R
  220. JSR Music_Vision
      @, ^# ^: H3 P$ J$ T' [
  221. .ENDIF
    0 W6 m" H0 m' g& }% ?. |

  222. - P8 h1 E& ?6 W( y8 \' w8 E% |$ E" r+ R! q( x
  223. LDA Time_Wait_Cnt
    % D1 u1 _& D; P
  224. BEQ NmiProgramProcessEnd
    0 O/ @7 l- i5 E3 y0 m& l5 K- G1 y
  225. DEC Time_Wait_Cnt. ~0 U' ]3 t$ \2 J4 D
  226. NmiProgramProcessEnd
    * O& a' r, L, b) X% E5 R
  227. RTS
    . p" k* W0 t4 c* H0 P$ D

  228. . }3 t, O! I7 L
  229. ;==================================================7 D; r8 U5 F! K% U/ Q* J
  230. ProgramBegin;主程序
    # B" f$ m  N) B( F' L
  231. LDA #$00
    ' `' o2 [9 Q6 t
  232. STA PPU_CTRL6 s; t4 ^- H0 }
  233. STA PPU_STATUS
    : v5 z: g* U  r: I# H4 s: ]# J
  234. STA PPU_MASK5 U4 R  y+ I4 L
  235. STA APU_STATUS7 n/ w2 M, U0 k7 r, B* R. @! r
  236. STA PPU_SCROLL3 {% ^* L; y1 t3 N& X0 S
  237. STA PPU_SCROLL
    6 v) `2 ?3 ]/ I8 {* q
  238. LDA #$C0- h' f: S7 x! a, W9 `- T
  239. STA JOY2_FRAME
    # u# i% s+ ^3 G$ n% r7 B
  240. / j, z' e! I4 A
  241. LDX #$FF0 f& r% X  v- U) L* e+ u2 B+ g5 Y. o
  242. TXS" y; T$ p9 \2 [: S; B8 r, {0 U, @
  243. LDA #$00. k1 q! D( l1 [9 Z8 @
  244. STA PPU_CTRL+ E( h* z+ J2 S5 T
  245. STA PPU_MASK
    6 g4 J( O" r! x9 y' w- K* Z
  246. STA MMC3_IRQ_DISABLE
    5 t/ V8 v4 a' d, E: d

  247. 0 A. |7 K1 S( t3 \
  248. ;==============================) g  N: h  H2 Z  p8 N
  249. ;调色板清空
    1 I/ i9 x+ u  {; b5 f
  250. LDA #$3F1 B- D) ^0 ?  ~% s
  251. STA PPU_ADDRESS2 Y# f* H9 ~+ }/ e! O0 f* D
  252. LDA #$00$ B2 M* S* [4 Z# M# k. Z
  253. STA PPU_ADDRESS% ?6 E* v4 O( R: d1 `6 A! t
  254. LDA #$0F
    $ V7 V, n% X7 ]6 s
  255. Palette_Clear
    ! G" r" l- S6 }* G" A9 s
  256. STA PPU_DATA( A2 i; h# j. z" o, w. J
  257. INX* |7 K. o1 O& D1 g* [$ u7 ]! w' s
  258. CPX #$20
    & ?& B6 B+ t. ]2 C0 h
  259. BCC Palette_Clear
    - l$ q4 a6 G8 V
  260. LDA #$00
    7 v% C2 {5 r& f, q! j: o4 g8 L; \
  261. STA APU_STATUS* j7 M* G; F, F( J! |
  262. ;==============================2 K, t3 m7 h7 L! h
  263. ;初始化背景调色板1 ^0 S/ y( U( ~! ~
  264. JSR Set_Palette_Color1 E- @3 U/ z2 f) O$ B
  265. JSR Set_NameTable_Attributes  Z; y& }8 a0 A  v6 `0 S0 ]  s4 H

  266. 5 ^; N% ?2 o1 b4 P0 z5 e
  267. ;==============================9 ~8 H% T3 ^" o) M9 Y
  268. ;RAM初始化2 U7 ~4 I1 V1 i+ D, C
  269. RAM_Clear_All
    1 k9 t8 f! s7 i+ @! D3 o4 _
  270. LDX #$00
    . ~- ^8 s, _6 o' X9 F2 \. g! a; J: F
  271. LDA #$00" n3 M8 e$ {7 v/ L3 t7 R0 f9 n* a
  272. RAM_Clear_All_Start5 I- ?9 W  ~' p0 t9 F
  273. STA $00,X
    ' a! J3 K5 b8 Y0 e' k6 R
  274. STA $0100,X
      O' M8 D. b: F8 z5 a4 v6 x3 V. W
  275. STA $0200,X
    & I% w! {0 |4 R  g2 n
  276. STA $0300,X* ?4 t8 C$ W: g3 E8 q
  277. STA $0400,X; k; m8 w8 b6 }9 U
  278. STA $0500,X
    2 ~2 T" f: E6 \2 g
  279. STA $0600,X
    + m" ~' x3 D. g% X& P
  280. STA $0700,X  {* Q9 {8 f; v
  281. INX' {4 e2 h# b( s4 t" H  x. }, {1 \
  282. BNE RAM_Clear_All_Start4 z$ ~& w/ |3 ?8 r: w" ~

  283. ; k5 Z# h5 c$ W; `4 R
  284. JSR VramInit
    - Q7 G9 K" ?  k0 z/ m
  285. JSR Init_Palette_Addr
    ( K1 R6 p3 Z$ ^* W- E( `) X

  286. ! _! U2 _$ N, Q" B! _2 A
  287. .IF Music_Reset_Addr' g4 F$ @2 y7 h5 ]
  288. JSR Sound_Reset  `8 \, d* U# b) [" O
  289. .Endif
    " Z, Q! K1 J( e

  290. 4 z+ x, ]2 j) D( \* v+ l
  291. LDA #Music_Start_Song-$01' A. E; e) z2 k9 B* _! U" f9 I
  292. STA Music_Cur
    : R5 q1 n4 i0 g

  293.   ^+ Y1 [, A+ m# I
  294. JSR Show_Music_Text$ T; N3 ?3 e2 O' f
  295. " ?# F0 r8 I& w+ I# U
  296. .IF SOUND_BAR_SHOW_ENABLE
    ) B4 Q, j) l# |
  297. JSR Sound_Bar_Text_Set8 t' a) N$ ^/ i+ o4 e
  298. .ENDIF
    ( t- f- D, K% V4 e2 u

  299. ; d2 k/ ]' E! l5 i3 `
  300. .IF Track_Name_Pos8 w3 p+ u& \$ R8 {2 S, ]- P
  301. JSR Show_Track_Info
      n6 B: f. J. ]
  302. .ENDIF* E) ~  a7 V0 }0 V( \$ E

  303. . r6 L; z$ }8 r( b: w8 f& ?! Q
  304. JSR PPU_Proc
    7 q9 C3 x* x$ s$ s0 c) i$ @% y" E
  305. 2 {& J: l1 v8 @
  306. LDA #$0E
    , s' [9 n9 |2 J$ V
  307. STA Screen_State
    6 ?5 K/ l8 h% v
  308. & d" O2 \5 H. k+ H
  309. JSR Sund_Bank_Init
    ( m. D: T- X# @& L; n# I
  310. & `9 m' O' x+ o9 v
  311. JSR Music_Show: n6 A# B; c, m8 K, n
  312. JSR Time_Show" z+ L( ]  M+ D/ K  S; x- z
  313. JSR Music_Stata_Show
    4 G% I7 o: w8 e" v& b. y: b
  314. JSR Time_Delay
    3 |" D0 K* X1 n; Q% z; g

  315. 0 i; k8 Q* y4 h0 ~* t# v2 q

  316. / @% K$ B/ h$ Z6 Z% Y: I& {
  317. LDA #$80
    * e4 ?# R; W9 S0 ^
  318. STA PPU_CTRL) g2 U5 ?: `' Y/ m& ~
  319. $ Z5 V9 j5 F+ U# |" j9 S+ c
  320. LDA #$20' e' L2 F4 U0 R/ L7 I- D
  321. STA Time_Wait_Cnt
    " k2 B* Q+ J, q6 J% R
  322. 2 k/ x  i' E+ b8 B6 A
  323. Wait_Time_Over) R% Y6 v/ {- P: c, C  ^" x& u# N7 a
  324. LDA Time_Wait_Cnt! o7 y; `7 k5 q  m
  325. BNE Wait_Time_Over
    # {$ R( i+ M3 a' F

  326. : f3 c  b8 o6 N0 m8 Z3 r( V
  327. LDA #$1F  }! i, V$ G" Q! W, S& O
  328. STA APU_STATUS
    ' r% ^. }$ v% D' g. L; Z: I+ m
  329. LDA Music_Cur
    % f5 A  _+ z2 Q& n
  330. JSR Sound_Init" ^, f8 P8 V9 p$ R

  331. + y1 o, G4 I8 T- ?! E
  332. JMP MainLoop
    4 R, j1 M: y, l' q+ i) P6 h7 q

  333. ; _$ N1 B: E% z$ T5 i
  334. ;==============================
    + G0 f% m: ?, R& L0 w; q
  335. Time_Delay;延时等待
    $ ]+ }$ v# w$ {4 p+ p
  336. LDA PPU_STATUS
    " ^: E( V+ w- R, w0 }4 y
  337. BPL Time_Delay
      l& t$ H* a" R  c. Q" k
  338. RTS* k0 j( ?; s7 F3 _
  339. : d3 _& Q+ b) O
  340. ;==============================* t8 J7 N5 s0 `  L
  341. VramInit;初始化图形内存) r- v" }" n! F. S, y1 g6 c
  342. LDA #CHR_DATA_BANK2 I  g% X) B+ w1 j
  343. JSR SwitchBankA000
      Q6 }8 w. d0 [
  344. LDA #LOW(CHR_DATA_ADDR)
    . b- E& q. ^: }  O4 l0 k5 ]
  345. STA <Data_L
    2 t- a+ k! y3 Q+ \1 R, f8 q& R
  346. LDA #HIGH(CHR_DATA_ADDR)
    : l! `  P- u+ x& P4 j% L
  347. STA <Data_H
    / ?: U) J& H4 u! E6 ?' C3 F
  348. LDY #$00
    ( i9 t9 v+ F! N3 A  f7 ^
  349. LDX #$20& V6 G- t) d7 {
  350. LDA #$00
    0 @  d# B; q, N0 K* D' {+ V& @4 f
  351. STA PPU_ADDRESS
    ; ?  D3 `: j; N1 d
  352. STA PPU_ADDRESS+ t$ i. t2 d$ Y- @$ n# B
  353. VramInitWrite) q2 R  T5 g" n, o/ {3 D$ U
  354. LDA [Data_L],Y/ c3 _# S) A" H
  355. STA PPU_DATA
    ! K# E4 k0 p' G2 a. G6 w
  356. INY) ^' W" [9 n' s3 E# R
  357. BNE VramInitWrite  S! B4 f2 N2 J8 @+ y$ |# c2 g
  358. INC Data_H
    ' Q' R$ Q2 Y. s3 \
  359. DEX* f+ S, s6 A+ M' x: d
  360. BNE VramInitWrite
    ( u: a/ \$ a# I; G% U  G
  361. RTS! @/ n" R8 n0 i0 j7 v9 t4 G
  362. 4 G* B! W* c2 U- J) b( F3 N; i+ D
  363. ;==============================; k; |" o* c- ?! C' D% s5 p4 _
  364. RAM_Clear;RAM清除
    * O1 N% ?% H' n- U3 p; s, G4 p' L8 a
  365. LDX #$00, x  S3 m* V8 L, ?
  366. LDA #$00' I! X+ V3 W* v# z4 l, J8 f
  367. RAM_Clear_1
    - o8 X  z% N1 |
  368. STA RAM_Cln_1,X3 M0 S) i9 e" Y6 x; G: I- _
  369. INX
    5 e" \: N: Y* y" p
  370. CPX #RAM_Cln_1_Size
    * H6 X" W# t$ [% m) j! d' l
  371. BNE RAM_Clear_1
    : o2 @* q# ]  x& m
  372. LDX #$00& E7 C0 C6 B' q
  373. RAM_Clear_2
    / C+ U  Z& t% z9 o. A4 F
  374. STA RAM_Cln_2,X5 S7 }" T7 k2 h6 B
  375. INX  ]" c0 U9 F# h8 v
  376. CPX #RAM_Cln_2_Size/ K2 O0 K/ U; q% c: e6 Q
  377. BNE RAM_Clear_2$ [7 L' G/ C( h+ X
  378. LDX #$007 B* C) r( U& G) `0 g0 }
  379. RAM_Clear_39 j5 L' c8 o- L- h
  380. STA RAM_Cln_3,X
    & F  c2 r( ^0 L0 F" `' a! f$ z" l
  381. INX
    ( u. Q! s% {6 n4 i1 E& H
  382. CPX #RAM_Cln_3_Size+ {- l, u/ O( }. Q& M4 h! J" d7 }2 p
  383. BNE RAM_Clear_34 P7 m9 n/ @0 C) Q0 [
  384. RTS
    ; L  P, Z" C9 F- W+ w% a* ]
  385. : b$ N9 ~0 A! D" p! F" X
  386. ;==============================
    7 [+ p5 F9 I4 ?* I- P
  387. ;音乐切换$ W$ B# J% H! k: U( M( H+ I% C
  388. Music_Switch
    6 O  N2 \  _, T: k5 V7 Z
  389. JSR Key_Proc
    ; E, p, ]% ]) m" N) Y' n$ D. G, g
  390. LDA Key_Once
    6 D$ ]8 J0 j; C* R
  391. CMP #$10
    + F  [% J! g* e1 h# q  i
  392. BNE Music_Start_SongStop! ~4 c+ W: k. ^+ M4 z( Y- x- ?
  393. JSR Music_ReSet! c# G) C( p: r% J( X4 J: S
  394. * m) F2 w9 [$ r; F( f) _5 Y  P. l( V
  395. ;音乐停止7 F" M5 `) j! o/ ^& T' }" {: W
  396. Music_Start_SongStop* D; `" v" n  e; q5 S
  397. LDA Key_Once4 Y% _0 [: Y0 {  V4 f
  398. CMP #$20
    $ K: v0 N6 I" T, {. T
  399. BNE Music_arrow! h" A' F3 |8 Q( x6 I, K5 z& Q
  400. LDA #$01
    * D0 A" g3 @/ x
  401. STA Music_State6 T5 ]2 U  T8 w
  402. JSR Music_Bar_ReSet, a& g( \% @5 u! ?* T- q. i. K4 E7 \
  403. JSR Time_ReSet3 u0 f- i) F" P3 B' x
  404. JSR RAM_Clear
    ( v" I: t8 F) ^( B% N; ]6 l
  405. JSR Sound_Clear" e! F( T. n) t
  406. JSR Music_Stata_Show
    " l9 S1 K( d6 q% c. o! z
  407. Music_arrow7 P0 M5 W! c' _  r
  408. LDA Key_Once5 [+ x- Z) V6 H% f0 ]; \/ x
  409. AND #$CF8 U6 p/ A2 G( ~7 k9 v
  410. BEQ Music_Switch_End
    / Q$ p& R5 l5 g+ v
  411. JSR Music_Number
    # a; f. L% }+ i# m1 a
  412. JSR Music_ReSet
    3 ^8 C; r! D' G: X1 \: T. r/ n' @( d
  413. JSR Music_Show. R" j, @8 ^& D+ A" l" R
  414. Music_Switch_End- O9 D8 X0 |. K. i' }
  415. RTS' n# T4 q- m) B' w
  416. . U! r4 Z* v' ^' ~
  417. ;==============================
    0 W3 ^% h' f, j. c8 y
  418. ;音乐曲目切换% d5 C) `( e! C( B+ ^( I) q+ N* K
  419. Music_Number
    * q9 C+ C4 a, D' @7 `' z
  420. LDA Music_Cur1 e+ z. @- M* l+ D) {6 p! f
  421. STA Music_Last" p9 q- o  L/ z/ G: O- f
  422. Music_Decrease5 P  J& j: ~$ ?8 T- V+ T; i  Y
  423. LDA Key_Once
    ' \- i6 x: q( U
  424. AND #$42
    9 Y# w7 w, e- C/ V
  425. BEQ Music_Increase
    $ k: m. G7 b1 V) }7 v8 S& T
  426. LDA Music_Cur# D. x. O4 u) C+ m7 m) p1 |1 Y- r
  427. BEQ Music_Increase
    3 w3 \) `- N8 c; y! u% i
  428. DEC Music_Cur
    0 t! T# s( o0 t( e' j. X
  429. Music_Increase( z3 }7 A! Y8 d, g
  430. LDA Key_Once" c8 Y. }) M" q0 {9 a- N
  431. AND #$81
    ! r# P7 ~, e- `# @
  432. BEQ Music_Decrease_10& k3 B* d8 w6 r1 a9 z
  433. LDA Music_Cur% A6 G1 k% j% d
  434. CMP #Music_Song_Total-01
    & U6 O' {: I4 j# y3 |
  435. BCS Music_Decrease_10
    2 x$ c. F* Z& m5 |: O/ A0 @! V
  436. INC Music_Cur
    9 _3 C4 h" p) K' k
  437. Music_Decrease_10
    5 l* h: w. u, R5 i
  438. LDA Key_Once7 R1 V5 U+ f" D! u* r7 i
  439. CMP #$048 H) Y/ |4 r8 r4 v
  440. BNE Music_Increase_10- i+ w# d! f7 c7 y
  441. LDA Music_Cur
    - l3 j/ ^$ ?- [6 p8 |) F  `9 g
  442. CMP #10& [# V0 ~3 @" l
  443. BCC Music_Start_Song_Min
    ; O' [2 n3 i' B2 @. g) d
  444. LDA Music_Cur
    3 u! J5 Y' }* a6 Y
  445. SEC
    9 U4 [% N* [( k! r7 K3 H
  446. SBC #10) \0 u/ g+ C) V* `) G
  447. STA Music_Cur
    ) g$ u: ^9 H4 K, i  c
  448. LDA #$002 f7 v: }$ B0 ~* o# b% ^+ [, C( W
  449. BEQ Music_Increase_10
    2 N9 ?. F' Q/ ?. w
  450. Music_Start_Song_Min
    ) a7 H2 ^/ c; g0 o1 [
  451. LDA #$00
    - z, j! ]0 Z0 Z, E
  452. STA Music_Cur
    8 \7 f8 X2 u0 X; X
  453. Music_Increase_105 L3 q# s( @; F- S
  454. LDA Key_Once
    ! S8 Z8 F. l# }& b2 n! O4 [
  455. CMP #$08: V0 p- v" C/ p6 ~" g) S3 L- b1 t) f
  456. BNE Music_Number_End
      n% r. I: B; K. H0 x5 Y1 x2 F& y
  457. LDA Music_Cur
    7 v0 }/ ?% K, L
  458. CLC
    2 n) E) [7 }" a9 U3 g
  459. ADC #10! u7 K9 g% Q% Z) l0 y  t
  460. CMP #Music_Song_Total-01
    ) q7 \$ q1 R  c& C6 `
  461. BCS Music_Start_Song_Max- Z) E2 [- I/ T" T. r3 j+ ~
  462. STA Music_Cur" M/ \4 ?3 S1 A# x9 g5 `+ p; R9 e
  463. LDA #00
    - j* A/ P3 n$ L+ o6 I+ N# L
  464. BEQ Music_Number_End4 }0 [4 i) J4 J1 a# a
  465. Music_Start_Song_Max
    # Z  p3 _" K0 e# S. A* V5 _
  466. LDA #Music_Song_Total-01
    $ H; g& T  O" r3 N
  467. STA Music_Cur6 w1 m0 b/ f# _- b7 w
  468. Music_Number_End) s4 [. R& M: _/ h
  469. RTS
    ) F5 E; [% D, {  k6 N' G* \4 J

  470. " z/ Z" A+ a. D" v- h$ A* d. c
  471. ;==============================8 j# W& a/ Q' y) k' _+ [
  472. ;音乐重设
    / E1 }3 m- l5 q8 S( j# X) M! w
  473. Music_ReSet2 m2 k) B' l6 M. P0 G
  474. JSR RAM_Clear
    $ R$ B& N1 i; M9 i8 D$ U
  475. JSR Sound_Clear
    5 R# v& b% |1 Q' |& R, ^
  476. LDA #$1F) C2 C- i/ U, w) U! H
  477. STA APU_STATUS, t7 s# O  e7 ?2 x$ j
  478. LDA Music_Cur0 R/ X" R, Y- Z8 t( A
  479. JSR Sound_Init, i% J5 q6 h: _. b' g
  480. RTS5 E9 j3 q  i; D% J! z0 l! t. b, F5 N

  481. ! l9 z( @2 U% c, a* `
  482. ;==============================
    / h+ Y. C; h7 k% w
  483. ;音乐端口清除
    ( N0 P4 t# x% g$ P: E
  484. Sound_Clear  X- I. E" h; E" f3 u. Z  m+ q5 U; s
  485. LDA #$00
    : F# J0 |# W  O+ d& f
  486. STA APU_STATUS
    % O& ?: R$ J; d; J' o2 ^! C, J1 ]
  487. LDX #$00% Y3 j6 w6 U" }" h( b: O
  488. Sound_Clear_Start; t% L9 n- g( J, p4 D% j
  489. STA $4000,X
    : n0 B; w6 j) v& W0 E
  490. INX
    " C: ?2 N' V+ {1 H
  491. CPX #$14, n, R7 G9 m1 a: \
  492. BCC Sound_Clear_Start$ c* O2 c/ T& d& E6 l: V
  493. RTS
    0 @2 e$ z; Z  u! J0 D' W7 g1 v5 P* k
  494. $ K$ q% X  b% O3 `
  495. ;==============================; J5 {! t$ s. @3 L3 s
  496. ;按键处理# g8 s2 W, y. s( k& s2 Z
  497. Key_Proc
    9 b6 q& S( L& }6 Z) R7 p
  498. JSR Key_Scan$ S% d! I. Q- \6 a* W
  499. LDA Key_Keep
      g; D: X3 l) Q* i' L( U! |
  500. STA Key_Temp
    2 c: k  |& c$ d1 Q9 X5 {
  501. JSR Key_Scan
    " [: U8 t$ X8 }7 ?# M( M7 i
  502. LDA Key_Keep  v2 M* T/ s% J; {- P1 N
  503. CMP Key_Temp: ]5 |& g4 H' G2 Z8 c! \; z" j
  504. BEQ Key_Get_Once
    . Z3 B6 z1 V5 |( X4 V. W
  505. LDA Key_Kemp
    0 n7 i' }  v/ n- u7 A
  506. STA Key_Keep" m5 |4 T# T$ ~, Y5 b
  507. Key_Get_Once" B: M5 |0 F( b+ u% Z
  508. TAY
    ( a, h; G5 g& ^6 }
  509. EOR Key_Kemp
    1 e% m( |1 w7 E" \, J6 p) H4 C
  510. AND Key_Keep
    5 @$ Y' a! s& j, g
  511. STA Key_Once
    . W* `2 x7 v4 t" \' S. ?
  512. STY Key_Kemp
    6 R, B2 C' X- q! q* R; }
  513. RTS4 g: C2 u+ E' C! c  y$ e. P
  514. ;------------------------------
    " ]! G2 A+ y# U, A3 e
  515. ;按键扫描  i. P1 E) D( e' x. p9 @% e% u/ X
  516. Key_Scan. D% y+ U9 M8 I' c6 k
  517. LDX #$01
    / ~% r$ t; E: V- J7 Y8 J" ]
  518. STX JOY1_FRAME4 ]8 T/ {/ s7 L) Y8 [6 o# t+ C
  519. DEX! `: m) Y. V( L  t- L
  520. STX JOY1_FRAME
    6 M/ G2 w( n7 w  w- p
  521. LDX #$08
    8 u9 O: U* H; S) k$ d) p3 o
  522. Key_Value% T& f6 I3 u5 w8 [8 L
  523. LDA JOY1_FRAME
    ! {8 w$ w1 B% y6 t$ L* z
  524. STA Key_Getv
    6 K, C5 C* S# x! F. d1 A
  525. LSR A+ q8 V7 Y% u  ^3 N3 x
  526. ORA Key_Getv' L& G" m2 _9 @2 N, I: ^' z5 I
  527. LSR A, r( Q: G+ G2 G' P! w7 z5 r  z5 }
  528. ROL Key_Keep
    ! ~  g. T) K4 A% \' I
  529. DEX
    # \) R7 F* p# G/ K/ U* s( P8 I% Y, z+ D
  530. BNE Key_Value  s8 T5 {' o4 L$ T9 `
  531. RTS* o; F7 Z" U9 b9 V( a& Y

  532. 3 d* p1 d" F' D5 ^# {4 R# e
  533. ;==============================) ]( E4 i# A. L$ K' O+ {
  534. .IF SOUND_BAR_SHOW_ENABLE
    9 Y+ t- s5 Y; S7 Y  E# z
  535. ;音乐条显示
    ( @* Y+ n3 i4 s+ G' A
  536. Music_Vision0 r1 _" Q' A. x) U: @- k
  537. JSR Music_Animation
    / y& Y" M% y$ x  c3 m" P
  538. JSR PPU_End3 v6 y# ]- c& ^. H  f9 A$ Z' ~) u( ~
  539. RTS
    * e) |% C$ y. ~, T% @1 W4 `
  540. ;------------------------------2 K1 Q$ ]$ P+ d$ y
  541. ;音乐条显示处理
    & T% @, N. D3 a) U* @
  542. Music_Animation4 w8 m7 |4 c- L2 |/ ]$ g0 N  h
  543. LDX PPU_Cur& X0 {% }+ Y5 }! a0 t7 ~) m1 J( s
  544. LDA #Mode_Line& |- H8 V7 B9 [# \! H+ O! Q
  545. STA PPU_Addr,X* H* R0 V% i; ^" Y# T
  546. INX
    ( m" T$ k" R/ z
  547. LDA #HIGH(Sound_Bar_Pos)
    5 P8 Y) \4 m1 s: ?0 t7 t: L
  548. STA PPU_Addr,X
    0 Y* v$ b* H! j  }
  549. INX! l; {3 B8 O4 s/ ^7 W( l  j
  550. LDA #LOW(Sound_Bar_Pos)
    9 p, d* r+ p0 g
  551. STA PPU_Addr,X6 s9 r8 [: N% j. ]. Q1 A0 N; M
  552. INX! B2 Z% b3 S. u4 p5 c1 D5 Z
  553. LDA Sound_Bar
    / s" k1 p. |; W* x$ G
  554. JSR Volume_Convert
    ) A1 f1 S' V( D" L
  555. JSR PPU_Return+ m* c% m$ k! M* N
  556. LDA Sound_Bar+$4
    4 X, E+ l3 V0 t" H" A8 X& U! G
  557. JSR Volume_Convert
    % y) Q$ R2 _& s- c0 y
  558. JSR PPU_Return
      W! x5 \" \! n9 ]7 [
  559. LDA Sound_Bar+$8
    : z7 ?' O5 b% K
  560. JSR Volume_Convert_Ex
    % r! U. g8 f4 K/ ]$ l% Y
  561. JSR PPU_Return
    ' h9 ]  d  X6 y" I# i
  562. LDA Sound_Bar+$C9 R: [; ~" z' W
  563. JSR Volume_Convert  ^  c$ j& ]8 @4 Q
  564. JSR PPU_Return- D) t# k. N9 Q
  565. LDY #$10
    1 k" d, A' t) S0 O* K2 a8 N
  566. LDA APU_STATUS
    7 C1 R8 _* i0 A$ L. |2 T3 k# l  w
  567. AND #$10
    % p7 _& v4 k  ]
  568. BNE Volume_Count$ N  q, a! L* k4 b  o# h
  569. LDY #$000 m) G9 \9 u2 A& k% U
  570. BEQ Volume_Count  g, F* i6 e# {* _3 t, Z
  571. ;------------------------------$ r7 f: T2 B# z( J$ j6 r* f
  572. ;音乐条处理
    + U6 [# A2 J9 ^: Y' i( h
  573. Volume_Convert_Ex. a1 F' y! s2 |4 p
  574. AND #$1F
      L) C5 \& c( @! G8 p6 j
  575. TAY1 G/ j6 G3 `# @% L7 p! Q1 t
  576. BNE Volume_Count
    ) {! x- D9 C$ L$ X' O
  577. Volume_Convert
    8 j& q" I- v/ Y+ U
  578. AND #$0F
    1 f3 w. I& X$ |
  579. TAY
    , i1 V3 c4 U6 a$ ^3 S& F% {% I  B
  580. Volume_Count3 X- M, r$ S. c- O
  581. LDA #$085 o# c& @; X# `5 b5 V/ {& W5 H: d
  582. STA Sound_Bar_Cnt7 P- J8 o3 l! n9 Z8 c# N  U
  583. Volume_FILL' w3 N( l- X& {) y/ f7 D4 |2 N
  584. DEY
    9 k3 ~! p3 C- ]" H8 x9 z
  585. BEQ Volume_Half
    3 K! X" t& X1 D1 Y" v( {$ t3 `
  586. BMI Volume_Empty6 G! u8 Q, C) b( F. h+ c# i& T
  587. DEY9 L0 H1 x) ~7 r) p4 L6 K
  588. Volume_Full( p3 {, [' F0 D
  589. LDA #$16
    * N8 Y" _( e, d! s" X
  590. BNE Volume_PPU
    ( @/ p* a+ \  |' L+ C) L' |
  591. Volume_Half
    1 g4 z8 l* M+ _0 W
  592. LDA #$15
    ' J; U: u, d$ ~% U0 A0 ~* a" X
  593. BNE Volume_PPU; T* M3 j9 H( D5 {5 }/ h
  594. Volume_Empty
    $ o2 m' e& p. L1 F
  595. LDA #$14
    , I" g. M/ s& W# m' v
  596. Volume_PPU
    - K+ g( }4 t; g' @% d( o
  597. STA PPU_Addr,X
    0 i3 \9 ]" |" C5 o
  598. INX
    1 j' o. Y  I* O# }& u* B) U
  599. DEC Sound_Bar_Cnt/ @( u6 L+ r) |7 S. S% m9 B
  600. BNE Volume_FILL9 B/ ?; P3 g( X+ \9 D: D! @! F
  601. RTS3 u! I3 a" q8 c. m
  602. ) f- Q  B) d; w; d! l
  603. .ENDIF, @  {' j# `$ x2 u7 ~

  604. 6 {$ _7 T1 H& u+ \3 u' G
  605. ;==============================
    " b  M( U2 f: E/ X) t
  606. PPU_Addr_Set;PPU行开始
    7 W! J7 b4 q! x+ }9 ?$ T
  607. LDX PPU_Cur
    2 ?; l6 E" A& f3 [: V0 L  s% A- M& R
  608. LDA #Mode_Line
    8 _! H* O6 ~% n3 M8 u
  609. STA PPU_Addr,X/ v: P& j6 N: j& W
  610. INX
    , h4 r7 J' a9 R' W! b
  611. RTS' B2 P! ]" @/ c; w3 ]6 g
  612. 7 q3 q, X, n7 h; P; e! z- a# L
  613. PPU_Return;PPU转行
    3 r* H/ W$ S% T8 d8 ]
  614. LDA #Flag_Over1 {4 Y9 C+ c3 S  s5 o
  615. STA PPU_Addr,X
    1 @* d( \; f& A4 a* Y
  616. INX
    4 H/ F! H9 n$ k: _, R
  617. LDA #Mode_Return0 G, b4 e1 [) |4 y& J, w+ d: _4 y9 F
  618. STA PPU_Addr,X
    / y5 Q0 o; e0 @  f/ r
  619. INX
    . v( m5 t* V8 x8 C; v+ H
  620. RTS
    4 y; d& x4 \5 b2 h

  621. # Q& q, }$ i& z) _- \
  622. ;------------------------------
    ! m5 w/ t# c' o! B* s1 B! B
  623. PPU_End;PPU结束
    9 h* [" b$ p1 t
  624. LDA #Flag_Over
      U( r3 G3 ~# N& E" d1 l
  625. STA PPU_Addr,X: U* s: r5 q6 c' {$ Q: ?4 \8 }
  626. INX
    . W2 f" i! s& N: T/ q
  627. STX PPU_Cur
    5 Q" u' l0 V. y6 G( J; B' p' ~4 f
  628. RTS9 o, Y; L0 {: ^
  629. ;==============================
    ) g3 \9 S# _0 i2 |! c2 g2 R
  630. Mode_Line     = $FD    ;新起行模式
    1 n% y  @0 x: `/ U3 @3 _: M
  631. Mode_Return   = $FE    ;转下行模式+ L6 E  L2 ]6 ~+ X- R
  632. Mode_Clear    = $FC    ;行清除* K3 X( z- k5 i0 [
  633. Mode_CntLine  = $FB    ;行计数写入1 M( n6 ]* E2 B- s, D+ ~# F
  634. Flag_Over     = $FF    ;行结束标志+ O6 R, V. _: H9 O& Y7 M8 |9 j
  635. 4 s6 O3 u1 j1 S* X( n( T$ M
  636. ;------------------------------
    $ e+ q! q/ v9 q4 n
  637. ;PPU处理
    $ i$ L9 G8 e1 X2 {, A
  638. PPU_Proc
    9 f8 {8 }( ?) n% t0 r
  639. LDX PPU_Cur5 q3 v( `$ U: ?% a) g% D. x
  640. LDA #$00" ^6 @' o4 U7 z
  641. STA PPU_Cur. c7 v# j5 t# C4 i
  642. STA PPU_Addr,X9 R# Y$ p" d, {' P5 H6 b
  643. LDA PPU_Addr6 [( I1 X+ a& f, K% [) W( \. k
  644. BNE PPU_Proc_Beg
    2 \6 p0 A' \  p0 `
  645. PPU_Proc_Ret
    9 t  N% d! D$ x7 S' M
  646. RTS
    * n0 k' P. M, G: @
  647. ;------------------------------
    3 I0 u  b  a  J- ^  o3 P7 B
  648. PPU_Proc_Beg  ;处理开始# [  o; c. P( b5 t. u7 S4 W
  649. LDX #$00+ D: M- o) g" B3 I* g# U
  650. STX PPU_MASK6 s# Z: }( u9 A$ a& j
  651. ;------------------------------: I: Y; W' Z( r* R* j% a# z5 k
  652. PPU_Mode_Select  ;模式选择
    8 p# {* p1 c4 w% T+ V  @
  653. LDA PPU_Addr,X8 u' h9 @7 D0 ?: R( w; s, q& o' d
  654. CMP #Mode_Line
      x4 z3 e, ?, z  }" I: Q) b; e8 v
  655. BEQ PPU_Mode_Newline' i9 U& X. i4 q. ^
  656. CMP #Mode_Return0 s2 R' Q2 M! t1 t. o) @+ M0 s  ~
  657. BEQ PPU_Mode_Return
    8 K/ L0 R9 {; c8 v
  658. CMP #Mode_Clear0 F. b9 c) x4 w# Y& {7 f$ S2 K& B
  659. BEQ PPU_Proc_Clear
    : P3 Y" d. K# p8 a0 e! g
  660. CMP #Mode_CntLine
    * Q$ e! C0 m6 M0 l& X
  661. BEQ PPU_Proc_Cnt_Line' K" f$ A2 i  T: p  \
  662. RTS) h1 {2 e+ y0 ~% H1 o
  663. ;------------------------------1 N: l) Z. ^3 H# s( X
  664. PPU_Mode_Return  ;转下行模式
    $ s* z/ z( Y! F; D
  665. LDA PPU_Addr_L
    ( F/ ?* c# E3 S% L
  666. CLC
      p- G" u) e8 e$ m! A
  667. ADC #$20
    % A$ \* l! a; D9 P" |- ~2 D
  668. STA PPU_Addr_L! w' i% {  t2 ^2 K4 w8 C6 d! _3 F, }
  669. BCC PPU_Return_End. {. J7 b! k: s; v6 i
  670. INC PPU_Addr_H$ A" b0 z! k2 ?8 v; {& ^2 b
  671. PPU_Return_End
    ! O, a8 v3 a# m. S. d( z% d
  672. JMP PPU_Set_Increaser" J  u1 L7 p3 O0 K/ a1 q" w, g
  673. ;------------------------------
    6 h, [8 f" @6 H. G" ?- a/ a7 q
  674. PPU_Mode_Newline  ;新起行模式0 O! @& e. I( o, C. v/ U
  675. INX, W4 k( @4 \3 j/ a* p( |
  676. LDA PPU_Addr,X, ]0 v) R! }& F3 l  O7 j- z6 G
  677. STA PPU_Addr_H
    0 J7 Q5 U: R* r: ?' n' r) k
  678. INX
    + K( }5 d# ?' y+ q- i
  679. LDA PPU_Addr,X4 {+ H" l' t! F! ]" @+ \6 U7 H
  680. STA PPU_Addr_L
    ' W4 |9 u. O# i5 p$ B. ?# T( \
  681. ;------------------------------
    ) i5 k# S) Y* |; ^: P
  682. PPU_Set_Increaser   ;设置写入地址
    - |8 L1 q9 q1 E- x' [. i
  683. LDA PPU_Addr_H
    9 h" w  `2 n# X! t3 m4 p
  684. STA PPU_ADDRESS
    6 n9 T, U$ D: l: l; K6 ]
  685. LDA PPU_Addr_L, f* T2 u% x( p3 c% S& s+ Z, Q! i
  686. STA PPU_ADDRESS
    3 r; k9 P$ a/ S$ B
  687. ;------------------------------. ?7 B5 b/ m0 C5 g8 q
  688. PPU_Write   ;写入数据
    4 x/ Q1 q& D1 [& `, x$ p2 r1 S" z9 D
  689. INX0 a/ t" B  ^. F6 ^! \5 K4 [
  690. LDA PPU_Addr,X
    ( v* O0 t& ?$ Q- a& m9 X5 w
  691. CMP #Flag_Over
    / R7 o6 {& S6 T
  692. BEQ PPU_Proc_End7 l% O4 |: u5 \. S
  693. STA PPU_DATA2 n7 \# C' h) z& u( |
  694. JMP PPU_Write1 q4 @( y7 a; K. t& X$ }+ W
  695. ;------------------------------" V% u7 Y' P9 D6 ?9 N* i' i/ t
  696. PPU_Proc_End  ;单行写入结束* k# Z* a6 ]2 n
  697. INX
    $ N- U1 b& q# @! X. B- Q# d
  698. LDA PPU_Addr,X
    % H% p+ f: ^" z7 v
  699. BNE PPU_Mode_Select
    1 x) M& @: `; m+ t+ \$ {& Z' H) Q
  700. STA PPU_Addr
    / r) w9 g& O2 _9 X+ n5 c8 o( t" ^
  701. JSR Update_Palette_Color+ K( c3 n" V* j0 ^% T5 }' I+ s8 ^
  702. LDA #$004 y1 m5 S, I0 g. m1 k/ ]
  703. STA PPU_ADDRESS
    0 P6 g) [2 X! O0 P- c
  704. STA PPU_ADDRESS3 v( {* Z) t1 @. S' e
  705. STA Show_Track_Name& A; Y- Z7 q' ?( B( [5 V. z
  706. LDA #Scroll_X
    / U6 W* [1 F5 w; `0 ^+ R/ ]2 r
  707. STA PPU_SCROLL
      F0 j% h! ]  m% y, a/ l
  708. LDA #Scroll_Y
    2 `; y4 }% a9 O7 G
  709. STA PPU_SCROLL  L! b( R5 m6 U
  710. LDA Screen_State
    ) b/ e! O) h* i# u- s  d6 {' [
  711. STA PPU_MASK$ _6 e/ y/ h* S, u6 @
  712. RTS
    ( G- Y6 Q& b5 }. K" n

  713. 2 f; S, M$ o* i1 N
  714. PPU_Proc_Clear: V) c9 m5 N; v: d8 C
  715. INX7 f4 F  q# M) o$ c# t+ j
  716. LDA PPU_Addr,X
    4 ~7 H5 g5 Y5 h: H. T2 t
  717. STA PPU_ADDRESS8 M6 q5 \3 O0 `  Z8 C# _9 M
  718. INX
    * q/ p0 o+ Z$ y; u3 Q& k8 G
  719. LDA PPU_Addr,X
    1 h9 U2 @1 j2 C; J# a+ [7 J
  720. STA PPU_ADDRESS3 c4 g2 W8 n3 z7 _7 p
  721. INX
    ) ~- z" c. _$ E
  722. LDY PPU_Addr,X
    $ U, y- q* O1 U' R+ }6 H
  723. LDA #$00: T7 |. z. K: j8 X5 G$ P% O  }
  724. PPU_Proc_Clear_Write2 E0 D4 V/ g  |  o! e2 a
  725. STA PPU_DATA  Z& `9 X: f( `$ T; C5 A
  726. DEY
      _; P' w* T$ U  }4 Q* _
  727. BNE PPU_Proc_Clear_Write& k0 H: v" W' \! L6 }) q& i! \
  728. JMP PPU_Proc_End% {2 M2 D0 x  @: ]2 [& B

  729. ; v/ B/ K. t! V" a3 u+ A* A3 ]$ U8 m
  730. PPU_Proc_Cnt_Line6 R) W1 @, G) `* z+ i) Q/ C
  731. INX
    8 v0 g/ m: K0 d- }5 x, O
  732. LDA PPU_Addr,X
    ' q7 [$ r, {' R
  733. STA PPU_ADDRESS
    ( I; Z7 l& T1 @( M, C
  734. INX. _; i4 y( y! W+ O& J( L, a
  735. LDA PPU_Addr,X
    # E4 W4 K6 H" b$ o7 L; `8 v% z2 k# Q% a
  736. STA PPU_ADDRESS0 ~) l# g7 q- l" f1 V+ u9 _% B2 G( V
  737. INX
    , y0 G! _4 C% [
  738. LDY PPU_Addr,X
    - F" j1 l, t6 K- Y3 N
  739. PPU_Proc_Cnt_Line_Write9 Q  z7 I& \9 l3 Z4 q7 _
  740. INX
    + J8 C- U4 d+ ^  y
  741. LDA PPU_Addr,X
    & v  _/ s3 r# @( Z" ?
  742. STA PPU_DATA
    # ?. L  G+ H. i5 z2 k9 p6 {
  743. DEY9 }9 `: I. A1 l; |
  744. BNE PPU_Proc_Cnt_Line_Write% P! t: {$ A, `7 ~
  745. JMP PPU_Proc_End7 [# c+ w# W* o/ i: A! H; E- t& J

  746. 9 k$ k! q: \  O7 M
  747. ;==============================
    ( S; Z( U: W. V! E* N5 R
  748. HEX_To_Dec;十六进制转十进制4 z9 R" B6 f4 Q; r0 I' d' b: E9 ?) R
  749. STA HEX_Data
    0 D. T' E2 ~* Z9 ^
  750. PHA, y/ {2 X. m' m' n, ^# D
  751. TXA9 s- x4 m# {$ a6 e4 G
  752. PHA! J' G* [, J) k. w3 i9 T8 @
  753. LDX #$00
      _, x7 G% Z3 P/ z# N7 ^( `
  754. LDA #$00( {7 x" a7 |0 E$ S) N8 w2 r. ~
  755. HEX_Cln/ [% B  c+ K, Y( Y  l* p* _; w1 r; g
  756. STA DEC_H,X4 W6 r' }" u; p% T. l" L
  757. INX
    ) w( ~0 Q2 ?. Z  j
  758. CPX #$03& U0 D. M" P4 O' j! v+ D# U% \
  759. BCC HEX_Cln! ?& i# m! O1 _, ]/ k8 J
  760. LDA HEX_Data  l" `. N: \+ N- w0 I
  761. ;------------------------------" O" f  N. D: u: h7 @
  762. HEX_100
    1 m9 h) U$ z( |7 f$ }: _
  763. CMP #100
    , }" [0 _5 L: x4 t+ T
  764. BCC HEX_10
    1 i0 W0 \2 p: }2 \
  765. SEC
    8 `7 L  `1 {/ ~6 I* D( T! }- _# ?/ ~* M
  766. SBC #100
    5 F/ J, _" u3 M- S  I
  767. INC DEC_H2 G8 Q$ B( _1 ]: p1 ]
  768. BNE HEX_100/ p: S2 F, b0 ~; P
  769. ;------------------------------
    - [$ w$ i0 E/ v) d3 M
  770. HEX_10
    - J7 Y9 m" I( `( E/ w
  771. CMP #10- X# t$ s, g, n5 C$ b
  772. BCC HEX_1. M) F- a0 O4 a3 n0 d
  773. SEC
    7 O( s6 f, J8 G& {
  774. SBC #10& L6 U' D& A, ^$ u  M
  775. INC DEC_T, T% n  W+ R# t
  776. BNE HEX_10, N: p' K6 g0 [) \) V
  777. ;------------------------------! P$ R5 R. S. {: T: d0 x* s
  778. HEX_15 I) ^8 Y) [$ d; v. z% }
  779. STA DEC_L. I- M0 _- {- _& H' S, N
  780. PLA# H* M$ r$ H/ C; k  A0 F
  781. TAX
    ; `5 y( T% p- s+ b, r+ a5 ?8 p! }
  782. PLA
    ( t, F! P! w  O" |9 ~( t
  783. RTS
    - @: |0 e. a* e5 ?
  784. & I9 }9 t. w# V$ ?
  785. ;==============================
    & o* N0 c% q  E, y) U- n% o
  786. ;音乐曲目显示
    - M* N$ j: C" B# n$ Q
  787. Music_Show# t0 s; D( F3 q$ X2 n. E
  788. LDA Music_Cur
    6 `; B7 n- T; W, G! F
  789. CLC
    7 {% L4 _+ n! l5 R" _3 r9 w
  790. ADC #$01
    $ ^1 a" }: W/ e/ _# R
  791. JSR HEX_To_Dec4 c- l2 ?/ i- g* t
  792. LDX PPU_Cur' z. B: B& B: J9 L
  793. LDA #$FD" `8 C* t! \" U( [! V
  794. STA PPU_Addr,X
    9 R( }6 c# [6 Y' x: Y
  795. INX
      X/ a9 E9 D: n
  796. LDA #HIGH(Play_Index_Pos)# x* w. M) J* ?, A$ I
  797. STA PPU_Addr,X
    $ k: e7 j( J" L! \; `! A9 ?
  798. INX
    6 P' F$ W# I5 |: z9 E
  799. LDA #LOW(Play_Index_Pos)0 |( b9 A, f& Y- D& d
  800. STA PPU_Addr,X; H# ^  C& a8 Z- I
  801. INX7 y" T4 T0 I1 u* b1 a

  802. $ }& q3 \. N4 Q6 d' q3 C& j0 N5 u
  803. .IF Music_Song_Total > 992 J2 f# \0 E0 g* L- N$ W
  804. LDA DEC_H
    " l5 e2 G$ p+ M, w: U  K
  805. ORA #$30# Z1 i9 R' d4 m5 B  k
  806. STA PPU_Addr,X
    - u& B" M6 o/ o9 c1 M6 Q2 W
  807. INX' f* M2 F, m4 [4 w' s' o
  808. .ENDIF
    8 O: o* h7 q# ^0 |8 }+ ~" ]
  809. * B: p9 ?) X$ n* z8 I- @
  810. .IF Music_Song_Total > 92 {% q# n' ]" C0 F
  811. LDA DEC_T# r$ V* I! U( ?: L& Y# W+ y2 Y& g
  812. ORA #$30
    5 Y: [0 s$ e: C0 }8 i* I5 I' N
  813. STA PPU_Addr,X5 |  [6 L  Q9 i! V& r( r
  814. INX1 D/ ^+ Z, W; ?( G
  815. .ENDIF6 h. j+ S7 J; g0 {4 F8 Z. R9 Y4 ^
  816. ! X1 o- f6 l3 e% y% d- `  [
  817. LDA DEC_L
    8 n* M8 ]# r+ L# _: q" u0 C
  818. ORA #$30
    / X! Z( U3 A, R! Z2 Y) @; J5 a
  819. STA PPU_Addr,X7 C. V/ y- y% l0 K
  820. INX  C; d, [$ S" `; p/ a) {4 z1 i1 t2 ]& q
  821. 0 Y) a, N+ m( L& r
  822. LDA #'/'
    : N( ]1 o& f: R
  823. STA PPU_Addr,X
    1 A1 ?2 M; S4 _0 o
  824. INX7 S0 T) c2 y( v3 B2 i9 X  u
  825. Music_Show_Total
    6 q8 v  ]0 N4 n
  826. LDA #Music_Song_Total2 i6 A3 Q  d$ v4 R& z% s( t
  827. JSR HEX_To_Dec
    3 K4 l; U# \% t2 U
  828. , n0 o! t, f  A0 C/ F$ U& f
  829. .IF Music_Song_Total > 99
    . G( |& e8 ]( y1 W: ^& F
  830. LDA DEC_H
    ; F3 s! ?  t1 O& O6 D# V
  831. ORA #$30
    3 u: Y2 T4 J. Z9 x3 v7 {; [  ^( \
  832. STA PPU_Addr,X
    7 M4 w; i5 U( k6 C2 j
  833. INX4 X; p. k% N' ~( i7 ]
  834. .ENDIF
    ! F0 c  A7 |8 z4 E$ |

  835. / K& K! ~7 \3 u  `
  836. .IF Music_Song_Total > 9! P- i' z, |5 @" Q4 q' O9 ^$ s
  837. LDA DEC_T
    3 B) L0 w* a  E2 a" [0 b; \
  838. ORA #$30
    * [$ v2 p; R, O( p, [7 E$ G
  839. STA PPU_Addr,X
    5 z$ a. V9 A5 |$ B6 [: j
  840. INX
    3 b# p' Y" H2 Y- K. e
  841. .ENDIF/ C  L+ A3 C9 |3 Q

  842. 1 _$ R& F  C7 \) ], l8 R
  843. LDA DEC_L1 U) h8 z  b& D: Z! B
  844. ORA #$30" z* B" r+ g0 |' F2 |' s' J+ Y. \1 ?
  845. STA PPU_Addr,X9 _. e6 H# {$ @; y+ x0 S
  846. INX
    " P6 A4 P2 ]+ x5 f, k) m
  847. 2 m( C& |! f/ Z
  848. JSR PPU_End
    + y8 q, Q4 J4 n$ Q' p; ^4 @. y& R
  849. Music_Show_End6 Y& s9 X6 t7 u  B7 \) o( r
  850. RTS8 f3 _+ x! {2 V) ?: Y: z- r! j

  851. 3 M6 U% \/ y4 }7 u1 Y
  852. ;==============================
      n& n& V! z8 K& _8 _. a8 U" H
  853. Time_Show;播放时间显示
    0 G: Y- d  Y9 j* h, {4 N
  854. JSR PPU_Addr_Set
    8 e- o1 p8 n# |. a6 G/ E: q0 E
  855. LDA #HIGH(Play_Time_Pos)$ j0 r! i# x2 T" ?& \7 e5 Q  N, x5 g
  856. STA PPU_Addr,X
    : v; ?8 w( \5 Z1 G1 t3 C* D! r
  857. INX, q* ~, @) ?2 H* S' ?( k3 n- R% k2 J6 l; ?
  858. LDA #LOW(Play_Time_Pos)/ I& F) i, Z2 ?: F" J5 I5 W$ c8 Q5 c
  859. STA PPU_Addr,X
    * X' u8 q7 n6 b+ R
  860. INX8 F: a8 A4 M) U% \+ a" y$ s- V
  861. Time_Show_H6 c/ [3 Q6 Q& A0 I# {, `
  862. LDA Time_H- n# {$ T0 H# M* `( ~
  863. JSR HEX_To_Dec& g# t7 K! i/ _# z" p. [
  864. JSR Time_Digit
    9 x& ?& Z5 T9 q
  865. LDA #':'
    2 I) F& P/ H+ A  x( B6 H0 Y
  866. STA PPU_Addr,X+ J3 Q6 r( `! b4 X; Y) \+ K# c# Q
  867. INX( o1 F% w" P! f' V" n
  868. Time_Show_M. R, j. v) @7 g
  869. LDA Time_M
    8 B: F9 }: Y4 V9 J& F
  870. JSR HEX_To_Dec3 l* e0 u  N$ X, A8 v0 Q& R
  871. JSR Time_Digit
    1 V( L& p! k# D: A2 I) N: e
  872. LDA #':'5 X' b; |/ w0 h% _' b
  873. STA PPU_Addr,X  q+ O- Y" V9 I% N2 p, ~
  874. INX$ h& D  n! N' Y4 j: x6 ~2 a/ k
  875. Time_Show_S
    0 m1 w, y# M2 g" I$ D# g
  876. LDA Time_S
    4 w' |$ e/ E# B. W& `+ g
  877. JSR HEX_To_Dec
    5 M' O) X4 x7 T
  878. JSR Time_Digit
    8 x5 Z/ Z# y- R( ]) s
  879. JSR PPU_End
    6 e- Y0 x7 r. s3 B. O
  880. Time_Show_End1 C; Q2 r) z( J* v) p. W, U- D6 b4 u
  881. RTS; b3 T9 K0 H3 \9 n
  882. & d) [2 n9 K/ e5 f6 z+ W
  883. Time_Digit
    $ \3 I; @- g! t
  884. LDA DEC_T, }4 w- V! A# @" D- |3 I
  885. ORA #$30
    ) G! I: K8 t0 y% j; G* ^5 I: n
  886. STA PPU_Addr,X
      Z) t6 U% @% B8 g. P+ c) ]
  887. INX
    % o4 |! C: o$ a9 R3 ~8 x% C
  888. LDA DEC_L
    6 r) j: W# g, {, U# R
  889. ORA #$30
    7 e$ Q- L9 g$ X! ?* n7 E
  890. STA PPU_Addr,X
    2 v& \4 C3 S2 c  p$ E2 z( V
  891. INX  \# Q' ^) w! {# i7 b) a
  892. RTS( v1 ]2 k: S! j5 \# r( B* R4 O

  893. ) S9 r: U+ h* x, G1 E
  894. ;==============================
    0 V, G5 Q) i3 Y  F# t, t
  895. Time_Count;计时
    * e: V1 Z6 ]0 D2 ^
  896. LDA Music_State
    / T4 S' |6 B% ]$ {1 R
  897. ORA Time_Wait_Cnt
    * z1 W  F$ H1 G$ |: d! Z( E& g, q
  898. BNE Time_Count_End
    7 X$ D, t0 }# B2 X, L) u1 x0 e8 b
  899. INC Time_Cnt4 K! E7 }4 F* G+ v2 E6 H
  900. LDA Time_Cnt
    : T* d3 `4 c) h& d5 e6 I
  901. CMP #60
    4 V2 c; o- e; S
  902. BCC Time_Count_End$ G% ~  r- l2 P/ p0 t" v
  903. LDA #00/ L9 J& B" F1 |' A
  904. STA Time_Cnt' ?& m- v0 }9 u' h/ Z9 l
  905. INC Time_S+ E( x) Y2 _) g3 v
  906. - j. ~) U5 _; p! `2 d1 w( Y* f
  907. Time_S_Cnt2 F# c2 Y8 x+ q' b- P  i
  908. LDA Time_S  l8 S# s& {: `( h- d
  909. CMP #60( J( o3 Q2 C. j0 S
  910. BCC Time_Count_End
    + O, b6 ?% k8 |
  911. LDA #00
    % Y/ E6 \% L0 D
  912. STA Time_S
    ; ~& `8 e. j# M5 ?. F( i: O! y- I
  913. INC Time_M1 D+ x4 H4 k9 a6 Q/ V6 R6 {# q  Q8 O% ?
  914. 2 @& o8 d+ o# r- G# V; r- o
  915. Time_M_Cnt
      ]0 Q8 i3 d! I6 h2 ~$ M1 B) `/ w
  916. LDA Time_M
    : m# }3 h5 {- Q
  917. CMP #60
    ; T# k- f. b) R2 p% a
  918. BCC Time_Count_End6 p. |! ?- C* k' n
  919. LDA #004 ^/ `7 }( p& i* j
  920. STA Time_M% a+ `, T5 G/ z3 H6 p( C; Y
  921. INC Time_H7 ~& Z  W7 Z% k% ~+ U

  922. 0 I3 z# |) s+ `5 N" x" O2 [
  923. Time_H_Cnt
    & N  ]# Q/ C% G. M% F- h
  924. LDA Time_H- Y4 L7 @* P) ]: @; C5 R
  925. CMP #24. a; \) B& b+ \, u5 E) ]3 p
  926. BCC Time_Count_End
    ) @4 i/ s" i! |( O0 W! `$ R) ~. n
  927. LDA #00
    . r  c4 E- k* ?- v: r# v
  928. STA Time_H0 M; D7 U9 k+ N. g% R

  929. * w0 i  m! J; _- y' |: A
  930. Time_Count_End
    % V0 J$ m: w6 R! p% s5 z7 k8 `# q
  931. RTS. o# z' U! n1 Q( R

  932. 1 s$ p$ K* J/ n. D
  933. ;==============================- v% a' D( P; x! ~8 C1 c& f
  934. Time_ReSet;播放时间重置
    2 C6 [( g# o! ~8 g+ O: M/ l
  935. LDA #$00  S& g1 {3 F$ ~+ x
  936. STA Time_S
    , Z9 e4 ]( v1 `6 {/ V3 Y
  937. STA Time_M - b7 U  x, T. }0 ]4 W) s
  938. STA Time_H+ O/ {7 V9 N0 j' s3 l
  939. STA Time_Cnt- h! v! u1 E) b
  940. RTS+ R  R: {9 A9 J
  941. 5 N: C" M$ }. l3 `) P( h
  942. ;==============================: R0 D' e3 O' x/ A/ S
  943. Music_Bar_ReSet;音乐条重置
    / }/ O% ?0 k9 Z- ^6 z. r
  944. LDA #$00
    ! d3 _. S1 a- }6 \
  945. LDX #$00
    . p# V" ?& M" \3 c: L' t) J
  946. Music_Bar_ReSet_Set
    ' [3 N4 p5 b9 Z* b: ~8 U
  947. STA Sound_Bar,X
    # j, `1 j/ l# H  K$ z- o3 F+ r
  948. INX
    : ?+ j8 d, r4 }7 E6 k: ?% R1 l
  949. CPX #$10: l9 z+ p$ ~9 _; G/ q
  950. BCC Music_Bar_ReSet_Set
    . d) O2 I6 }7 ~; s7 [7 I
  951. RTS
    ; @: J" f; K# ~/ r8 y: ^* H8 N
  952. , Q% c3 |8 q6 g. [' m
  953. ;==============================$ L# G/ O( U8 `  c9 ~
  954. PPU_Data;PPU数据写入' B& n9 n0 C7 P: t
  955. STY Data_L, U) j' X& t" {9 l. ^) s7 R, [
  956. STX Data_H9 C- q& q8 v* j9 s
  957. LDY #$FF
    1 l# i* w& Z6 U: V
  958. LDX PPU_Cur6 X' y) n+ }1 o& o  q3 f
  959. DEX! Q6 Y4 E$ a/ @6 \5 w
  960. PPU_Data_Beg" @# R1 |- g/ s2 p  ~# f5 j
  961. INX. T: S( a/ i( ~2 M9 \5 H- c
  962. INY
    7 M' {+ p3 i- ?( e( |
  963. LDA [Data_L],Y  ]& V" t! ~& e' D) V5 ]+ Q& U% t+ t. K
  964. STA PPU_Addr,X
      b, l' K: l/ P4 T8 P+ Z
  965. BNE PPU_Data_Beg
    7 ^6 B, X1 D; V* m" [3 J3 w$ N
  966. STX PPU_Cur
    " s$ k3 v# \6 H+ p* n6 H
  967. PPU_Data_End
    ' y# `4 I* m; B( h. M$ F) }$ q
  968. RTS
    . g* j: \. G* c

  969. ) P8 Z3 i9 |% a) s1 b/ r
  970. ;==============================. |/ s( O: ~' w# d. E! M0 X, T
  971. Music_Stata_Show;播放状态显示  F! }' d6 _/ |% E
  972. LDA Music_State& T+ L4 }2 {' F7 J% u7 C- ^! e
  973. BEQ Music_Stata_Show_Play
    9 V3 E9 J" m: \( \3 C' E' h/ o  W
  974. Music_Stata_Show_Stop. W! H- ^1 ?' J3 `4 L
  975. LDY #LOW(Music_State_Stop)
    9 M  R0 @% u) u# j5 j' M- q
  976. LDX #HIGH(Music_State_Stop)
    2 |) G5 E, C6 ~
  977. JSR PPU_Data
    6 N  w: R3 s3 o! L( Y! Z
  978. RTS
    0 S! i; T1 K& p- J
  979. Music_Stata_Show_Play4 w8 g7 {) \2 w0 g' y/ Q  z9 \( O
  980. LDY #LOW(Music_State_Play)3 Y, h& Y! n6 k
  981. LDX #HIGH(Music_State_Play)
    ( f6 U7 C  e" `9 k! @
  982. JSR PPU_Data
    . m; @/ r8 j1 o
  983. RTS
    % h  u# _& M* J

  984. 4 Z1 V$ |9 X5 c, s) P) B% W
  985. .IF SOUND_BAR_SHOW_ENABLE9 C) _6 j9 ?/ ^
  986. ;==============================
    5 T5 e9 ]6 w& C8 z/ V
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    & @5 y$ a& _% e% Z, C- x; t
  988. LDY #LOW(Sound_Bar_Text_Data)
    0 m* V5 q/ q7 p# O2 \+ A0 q
  989. LDX #HIGH(Sound_Bar_Text_Data)
    . b8 N8 i* x) ~9 K$ G
  990. JSR PPU_Data
    7 z+ w; |) v  Q
  991. RTS
    8 I* K; [8 s$ A3 q% _

  992. / T; O- k) n5 L( |; r+ V) j
  993. .ENDIF8 o+ ~* P! z; U" Z; P
  994. , F" n6 x/ f9 ~6 k! n
  995. ;==============================0 ~) H# P& g% a' e
  996. Set_NameTable_Attributes;设置命名表属性
    % p% h* a0 A- Y7 F8 j$ d
  997. LDA PPU_STATUS0 ~/ x( S  o! G- [
  998. LDA #$23
    ; u( Z4 W3 ^6 z8 J* r
  999. STA PPU_ADDRESS
    : z- T  I- z( ^6 L
  1000. LDA #$C03 k! F2 }" A7 N. F% f
  1001. STA PPU_ADDRESS
    6 o) W; Q  D5 @4 D: R1 L
  1002. LDX #$00
    8 D# I$ h$ K' N
  1003. Set_NameTable_Attributes_Write
    & Z) d9 x: M8 v5 J5 ], [
  1004. LDA Palette_Attributes,X5 i" Q) S& _; o  E+ b# ]4 p$ H
  1005. STA PPU_DATA0 r1 ]6 {, r! ^+ ]
  1006. INX, n) b) N; E$ n' A
  1007. CPX #$40' V# B+ V& |5 \% t
  1008. BCC Set_NameTable_Attributes_Write
    9 S' T/ K2 l7 N$ d& J, p
  1009. RTS$ s, ~! D4 _# W( k. L4 P* w

  1010. 2 \% c) }7 g  x
  1011. ;==============================; }" A9 Q8 [1 K7 o" Y1 k& O$ O
  1012. Set_Palette_Color;设置调色板数据
    4 V/ `5 m7 q4 v) [
  1013. LDA PPU_STATUS
    # \2 A: M! U# J0 q3 q+ p
  1014. LDA #$3F" v1 `% w/ T. t) h
  1015. STA PPU_ADDRESS) B+ _; w) h- z6 T) Y2 v  r* F
  1016. LDA #$00
    ' [% d5 ^  W* T0 l% D" d$ A' s
  1017. STA PPU_ADDRESS
    0 m  v: T% n4 U( p8 f4 l
  1018. LDX #$00: f. M: o# l  a2 A- A
  1019. Set_Palette_Color_Write- J( t4 |" r# u$ F
  1020. LDA Palette_Data,X0 c& u: [7 o+ ?) |, S
  1021. STA PPU_DATA  ^) k. ^% a( ?: ?! n- w% C
  1022. INX% V) S" g  q8 @+ J
  1023. CPX #$20
    ; B5 M8 f7 u2 B0 J* m# `
  1024. BCC Set_Palette_Color_Write. }1 c# f& c$ j& n
  1025. RTS0 A$ n8 L9 u, v! d( E2 @

  1026. ; V# W3 w- [. o1 G4 x
  1027. ;==============================
    9 m2 X2 X/ c% J; g( g- i
  1028. Init_Palette_Addr;初始化调色板数据
    3 F2 s! A: P* V1 t
  1029. LDX #$00
    ( x" v0 g0 m; c0 Y
  1030. Init_Palette_Addr_Write
    5 c9 \; W! ^& g7 W* d. \* X
  1031. LDA Palette_Data,X
    # q1 L& U7 `! p& f3 C
  1032. STA Palette_Addr,X
    9 f0 b2 w) T' i5 I1 n$ n2 I! P3 i
  1033. INX
    ! c2 a% B( m  w3 _
  1034. CPX #$20
    . R3 x" D' m$ ]) `6 _/ @
  1035. BCC Init_Palette_Addr_Write
    4 M$ N$ b2 n) j+ k9 u* `
  1036. RTS
    , S* G1 [9 T6 k

  1037. 1 i) [8 s  {4 M* r( ^7 N- X
  1038. ;==============================# w  M- w/ j* U
  1039. Update_Palette_Color;更新调色板颜色
    5 K$ @" p7 E; A; O/ D2 K; D' [* j( ]
  1040. LDA Show_Track_Name
    , r+ K" H% d% {* c0 M
  1041. BNE Update_Palette_Color_End
    ( `5 z8 U5 ~7 J# ^' [  u$ \
  1042. LDA Palette_Update_Flag
    3 y" z6 w- h) F1 n
  1043. BEQ Update_Palette_Color_End
    6 b; t' s* k/ i' `" e/ x
  1044. LDA #$3F
    9 v# X4 @( x' T* |& O  V$ E
  1045. STA PPU_ADDRESS
    / t/ J0 C# y* s, S4 F3 n
  1046. LDA #$00& e, N6 X& u4 b' R
  1047. STA PPU_ADDRESS7 F  A2 B0 s4 _2 b3 W* ?2 ^
  1048. LDX #$00
    ( V, y5 L* O. m( Y7 v( g- h5 P0 L/ k
  1049. Update_Palette_Color_Write  P" h/ `3 \! t6 S7 B# }
  1050. LDA Palette_Addr,X
    - ]) q. J* `( m
  1051. STA PPU_DATA
    ! n& h/ q% W" ^7 U) U" G
  1052. INX
    0 ^& v8 K$ l4 S" Z& R* L
  1053. CPX #$200 \8 S( f, l  ~" {; D
  1054. BCC Update_Palette_Color_Write
    : f$ T( y, g1 }" o7 ]" ^( w
  1055. LDA #$00
    5 E+ R# g! ]/ Z; t
  1056. STA Palette_Update_Flag9 h  a, |. w* f2 l6 t9 W
  1057. Update_Palette_Color_End
    2 {: O  w* [5 \7 a& `$ @( }
  1058. RTS$ o- f. a3 q( E4 A" i& ^
  1059. 6 G& V6 `/ Q. g
  1060. ;==============================
    4 F) X( B$ E: ^. H3 E
  1061. Update_Palette_Data;更新调色板数据1 K3 t: e( W  B
  1062. LDA Show_Track_Name. c+ m3 W1 ^3 d2 o
  1063. BNE Update_Palette_Data_End+ U8 E! P, j5 p* l) V* T
  1064. LDA Music_State
    7 g1 u  N; d4 F9 a% d. c2 {
  1065. BNE Update_Palette_Data_End
    $ {- s+ R, K0 C- _) Z+ h
  1066. Update_Palette_Data_Check" K, O& ?" }  V2 ]7 [9 a
  1067. LDA Palette_Wait_Cnt
    6 Y0 Z- }( w. a' B: |
  1068. BPL Update_Palette_Data_Check_Over
    2 o0 M) l+ p' z7 g1 Q
  1069. LDA #Palette_Update_Interval7 a0 X& e2 W0 T% C6 c5 }) T) G- N
  1070. STA Palette_Wait_Cnt( }/ u! r% j* H" Q) W! j) r, e( p
  1071. Update_Palette_Data_Check_Over, t/ y9 U' ~0 T0 x" A
  1072. DEC Palette_Wait_Cnt9 R8 j9 z8 S6 H9 j* z" [' N
  1073. BNE Update_Palette_Data_End
    - B5 o! q( l& w: H3 a$ v- o
  1074. INC Palette_Update_Flag
    - t; e" e( [1 ]7 K
  1075. LDA #Palette_Update_Interval- q7 j4 p& p7 h4 X3 h4 I
  1076. STA Palette_Wait_Cnt( S/ e3 S$ ?/ j% z
  1077. LDA Palette_Update_Addr
    % P) }8 e5 ~0 U0 Y
  1078. CMP #Palette_Update_Max+ B/ [  s' W* a; f
  1079. BNE Update_Palette_Data_Set$ m: ?% ?9 y& G7 n* m+ w/ C3 s, u
  1080. LDA #Palette_Update_Min - 1( G2 T+ g- P  T- i' g
  1081. STA Palette_Update_Addr- }' x: Y8 [& o; |
  1082. Update_Palette_Data_Set
    ' V0 U5 ]% I" G4 I: i
  1083. INC Palette_Update_Addr
    5 A6 ^% V) P: o5 X4 E1 {$ K
  1084. Update_Palette_Data_End7 x8 C8 F8 `8 p$ l' G0 F# r
  1085. RTS8 N6 A- y' N( f% N
  1086. : X9 D: R0 T4 I& z* O1 z
  1087. ;==============================
    ! O) c9 Q% }$ e. B6 {6 j6 c8 H
  1088. Show_Music_Text;显示静态文本8 l* }: G- d1 x7 v9 r
  1089. LDX #$00
    9 B) n1 B; I5 q4 q. Y4 k4 @
  1090. Show_Music_Text_Set
    $ n, a3 `1 B7 R0 s) \5 m. @
  1091. LDA Static_Text_Data,X
    " ?7 G1 s$ I' x' o2 T5 U; {8 h
  1092. STA Data_L; R! r0 ~+ B; |! {" K" ^4 [
  1093. INX
    " {3 n& t7 p" @, C7 y% c  S( {0 [
  1094. LDA Static_Text_Data,X, k- c' }; p! ?; y, [9 F
  1095. STA Data_H
    , S7 Z/ @- Q" x2 g
  1096. INX
      w( n! ~5 `* v# a2 p9 E: B' N% C, A
  1097. LDY #$00# V- R6 W' o3 A* ]) \
  1098. LDA [Data_L],Y6 o! b; h3 w( `& z3 K" l: s
  1099. STA Data_Cnt
    7 j$ z6 X/ y+ m0 ?3 ], L- F
  1100. DEX
    + y& u3 R7 Z; J, N( Z" C& E
  1101. DEX
    4 ]" V$ o" N2 r* |: f& i6 ^  W7 G
  1102. LDA Static_Text_Pos,X
    / A+ R1 V2 c: B% n; x
  1103. STA PPU_ADDRESS$ T- i0 T: e$ w1 h' Y1 a
  1104. INX0 B' M$ w( }$ p7 O! w
  1105. LDA #$20+ [  ]7 [! A4 A/ q
  1106. SEC, H+ q8 \: t0 E* D' h) @
  1107. SBC Data_Cnt7 E6 x& L1 u, ^0 ]4 |0 b6 s6 g
  1108. LSR A$ R( D9 M& u" K" Z6 N  \
  1109. STA Data_Buf0 R; I4 e  u( Q; J4 r: a
  1110. LDA Static_Text_Pos,X4 J) k& z; p% n8 n/ W
  1111. AND #$E00 w* H% X. Z9 A4 J
  1112. CLC
    ; H+ q% u! R5 b/ F+ [& j
  1113. ADC Data_Buf
    5 {6 E( V6 Y2 w* T( _- S* ^1 L
  1114. STA PPU_ADDRESS' l+ p1 }  g6 C$ [6 Y. d
  1115. INX( S! D+ _' W; T% `) A7 |" y
  1116. Show_Music_Text_Set_Write4 \3 \' x; u8 A, [% ~8 }+ V# e1 U
  1117. INY
    $ N* ^2 s( N/ K$ N$ y
  1118. LDA [Data_L],Y/ {0 _: {$ Z* [% @
  1119. STA PPU_DATA
    " \$ z, v" T8 z6 s7 B0 S
  1120. DEC Data_Cnt. ]' e* [" ^, }. o* G+ z' p
  1121. BNE Show_Music_Text_Set_Write
    8 I" L9 T! C' w2 c6 j8 @6 x& n
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos1 a8 m, }1 N6 _( z9 s
  1123. BCC Show_Music_Text_Set$ X5 r( R- m1 }3 h" t2 s' e
  1124. RTS
    ( p) c) B" S4 m- ^* U' w6 Q  D& }
  1125. ) V+ S' s0 x( X+ k6 R6 D
  1126. ;==============================
      R) t7 V& l* W5 ~( A  ?- _+ P
  1127. .IF Track_Name_Pos;显示曲目信息' Y6 k. ^6 G4 R. I. E) ?$ L- i
  1128. Show_Track_Info
    $ w& A0 o/ c3 q# w  n. D" {
  1129. INC Show_Track_Name) s6 W3 t' B# L" L
  1130. Show_Track_Info_Clear
    4 m4 h6 V9 ^9 w. I' t
  1131. LDX PPU_Cur
    . S& Y& S8 t, R2 j8 J
  1132. LDA #Mode_Clear: b$ o8 C$ n5 Y7 |
  1133. STA PPU_Addr,X
    4 t3 }( K: J( C2 O. ?9 |# d
  1134. INX
    % d6 T3 Y- Q2 [7 H, h9 z
  1135. 1 D9 t2 G( G6 H, y
  1136. LDA Music_Last
    : {- m. Q8 u5 g9 I
  1137. JSR Show_Get_Track_Name_Center_Pos
    - j- ~4 N0 W! S
  1138. Show_Track_Info_Write_Cur& j- h2 Q- a& I6 B( k$ u
  1139. LDA #Mode_CntLine
    ! m, s  s+ e) f5 g
  1140. STA PPU_Addr,X% E" \8 r; ~% Z  q  C3 n# q. i/ X! w
  1141. INX
    : j% G; j2 p4 I6 F+ k

  1142. 4 \# d" f1 V+ a, e% Y3 E
  1143. LDA Music_Cur1 W8 Z; t/ g: h- I$ q: l
  1144. JSR Show_Get_Track_Name_Center_Pos
    " Z# t  r) N" s; u  J
  1145. . Y8 ?* @" O1 @! t- d2 b' U1 I
  1146. Show_Track_Info_Write_Cur_Data
    , a: _) i/ [5 a! Z
  1147. INY; K; W9 |* R! ?0 u
  1148. LDA [Data_L],Y/ w, @% M7 Q  c, v) F' k. ?
  1149. STA PPU_Addr,X
    ! m; `! N4 N# D7 D* F
  1150. INX
    + @% }' y5 G* `/ C3 J) g
  1151. DEC Data_Cnt
    / t8 }) {  f& |, W7 i
  1152. BNE Show_Track_Info_Write_Cur_Data
    ! x7 t2 Q; V  y; e
  1153. Show_Track_Info_End
    + d9 P' Y" x& l4 i
  1154. STX PPU_Cur: j, U3 c# S+ e4 w; M' N' E
  1155. RTS
    1 f: {( V3 D1 v  Q' H4 S
  1156. 0 x* d3 M; T' V/ {1 f5 `; p
  1157. ;==============================; |9 l1 O7 D6 j/ @, {
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    " O7 w2 W( f: t8 o5 W- N9 N" a2 ^7 N
  1159. ASL A
    , u' I" J5 ?1 d4 T2 e: d4 Q- h: {- j
  1160. TAY
    7 N* P3 R7 V. ^% l
  1161. LDA Track_Name_Addr,Y% Y$ a" ~$ E+ h: _: p4 k, J
  1162. STA Data_L
    $ s1 j% C* t# ]: L
  1163. INY$ w& e8 j+ }9 V+ I& a5 P" k6 ]
  1164. LDA Track_Name_Addr,Y
    6 z8 L+ V5 h+ w  k' w9 N  f) C
  1165. STA Data_H
    3 `8 a8 `$ c6 u6 [
  1166. LDY #$00
    6 f: j5 M  j8 f# H. ]/ p
  1167. LDA [Data_L],Y
    ' c9 K$ n, B  g: t1 u" g3 U; _
  1168. STA Data_Cnt1 Q  H, i- g6 s  ?
  1169. LDA #$20! V) U' ~; Y, L, |0 a0 U
  1170. SEC  ?3 P# s. E, k
  1171. SBC Data_Cnt
    8 [) m7 L% D2 l
  1172. LSR A
    1 x4 N( v/ \5 S! q' p; a. T
  1173. STA Data_Buf  O& f- f5 k* {7 m
  1174. LDA #HIGH(Track_Name_Pos)
    0 U: q" R; Y  ^( K# J6 ]9 r6 I
  1175. STA PPU_Addr,X. |. p) l5 L( @  a# i, n9 V" S, Z
  1176. INX
    ( \6 E  L0 e1 }+ x; P1 A
  1177. LDA #LOW(Track_Name_Pos)$ \1 G) d9 x4 }' B/ f0 q
  1178. AND #$E0
    - b2 n8 F( a( S. H
  1179. CLC
    5 F8 y+ o* I5 n+ y4 O/ A. [$ n8 [
  1180. ADC Data_Buf1 Q' o8 H4 h1 I- R+ q5 _, V6 c1 B
  1181. STA PPU_Addr,X
    % p8 m* k9 r! i8 E
  1182. INX; D* [1 }: p+ L) G& f
  1183. LDA Data_Cnt
    ! v" F4 H3 B! G8 h2 c+ Y
  1184. STA PPU_Addr,X
    5 A  O( A2 f+ m& s0 X" f
  1185. INX( b; }, M9 F  ?5 {8 f& E' E" x0 V
  1186. Show_Get_Pos_Center_End0 h3 }5 E9 i# ~% {, b1 Q( V! f( p
  1187. RTS+ u, L+ q5 j8 X0 a. U3 V4 o
  1188. .ENDIF
    ) m6 o+ V- D: N" }
  1189. : u  G& p, v2 @2 O2 F: E9 Y# J
  1190. ;------------------------------$ Y* Z, W. [+ n5 q; a( g5 J
  1191. ;命名表数据
    8 `  f/ O% M' u( V
  1192. Palette_Attributes
    3 v: W8 N0 S2 S3 ]- E* t
  1193. .IF SOUND_BAR_SHOW_ENABLE
    5 h/ @2 q: Z5 \
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    % A4 G4 }8 j; ^+ O
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA% H% e+ a. W) W4 u0 X2 F/ ~- P
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55
    0 B+ |, G3 S, r8 L* x- G" ?
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    * q3 X0 s- @; ~7 l, U
  1198. .ELSE6 z6 i& O! @3 u- N, O. K% W8 `
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00; [& o2 q  X0 h7 d
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF% ?, G! S, J  O" |5 d& T
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    . ?9 e+ u( N" q0 g% t
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    + H  m( E; z; J, O* M
  1203. .ENDIF
    ; x7 Y! e; B' l- w6 O. p( g9 @

  1204. % M9 ]" I. ?) }/ ~
  1205. ;------------------------------
    1 f* p) v7 i, H4 |+ X7 q( a' n1 {! ]. E
  1206. ;调色板数据
    ( ~; K; |5 O. I9 y; N% R
  1207. Palette_Data- g: U* g' i) v
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F9 j& M6 u8 i5 D, e' @; @
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    6 b9 c4 A" D+ I. q5 k. R8 y

  1210. % u9 g* x" w  V' O  U
  1211. ;------------------------------
    # K0 B. s0 o) y. }# M, G+ R# F6 ^6 q
  1212. Static_Text_Data
    ( u7 i( [9 u5 L6 a( g5 X
  1213. .WORD Static_Text_Title_Data3 S/ I) n; m- Y! i3 S0 S
  1214. .WORD Static_Text_Author_Data
      Y! N' j# H  q: d4 D
  1215. .WORD Static_Text_Date_Data) g+ V, ?0 ^) |  v2 H
  1216. Static_Text_Data_End& ^: m6 f8 j, `0 J0 A" W

  1217. & ]8 Y4 f) u  B/ I( m! O$ b
  1218. ;------------------------------8 I8 Q2 o  @% M9 f4 I/ _% E
  1219. Static_Text_Pos/ b7 ?. f7 q+ B$ h5 ^
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos); _* o+ d7 l$ s# B. W: @
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)$ K% J1 p  Z( z2 @  C# Y
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
    - O% |9 f( R3 w. u1 }' x0 I& O
  1223. Static_Text_Pos_End1 O. ]) M3 J; S# P1 S, m

  1224. 7 p2 |$ w2 N0 H7 Z( p
  1225. ;------------------------------) D" _: B, f& y  f/ y& ^$ x5 _
  1226. Music_State_Stop
    6 D" v' d" |* d+ T  v/ X
  1227. .IF SOUND_BAR_SHOW_ENABLE( z/ `4 r6 G# s
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    - P( I3 D: O7 Q
  1229. ELSE
    1 Y# W# e. ^9 A& H# L
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    : L7 ?$ l* W# l1 f
  1231. .ENDIF6 o4 J0 k5 P( O3 Y+ Y; P
  1232. Music_State_Play
    9 W9 p) Y: Z$ z' B) z  e9 e* S9 F
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00
    * G0 P3 j5 B- K4 d- r) v
  1234. 8 U( G+ B0 ~; A: r: V& ?/ |1 b
  1235. ;------------------------------
    ! G8 P4 A8 l* w! G
  1236. Sound_Bar_Text_Data;声音类型文本
    ! p. ~, _  T1 o
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    4 ^$ ~6 k9 G; J9 H( V; _
  1238. .DB "SQ1-",$FF
    $ ]% ?! B( {. e/ N% p1 D. I
  1239. .DB $FE,"SQ2-",$FF
    : K2 W  U: @: |3 A# b' e
  1240. .DB $FE,"TRI-",$FF! f+ m  s" I) r
  1241. .DB $FE,"NOI-",$FF
    ! @: d# X# x2 B1 I- O  z- ?) K$ j& ^
  1242. .DB $FE,"DMC-",$FF,$00- p# l8 S1 S2 X- a( S# u: p
  1243. 2 m, Q: s, ^/ t, s8 T0 w" C$ ]) E
  1244. .IF Track_Name_Pos
    . q& b' s1 S' c6 n& G8 J6 j; y" j
  1245. ;------------------------------
      F/ k* C0 `; V6 T$ R
  1246. Track_Name_Addr;曲目名地址索引
    ' i+ c* k. m( P8 W& ~
  1247. .WORD Trackr_017 ]+ L7 l, V* S" u
  1248. .WORD Trackr_020 k. `1 V# G7 ]' R2 @1 K
  1249. .WORD Trackr_03' B( m2 K& V5 P& M% q$ Q, ], a1 I
  1250. .WORD Trackr_04
    1 z# }( Z0 w! T& L: a
  1251. .WORD Trackr_05! j$ x- q8 i' O) J4 e7 l- I; K5 \
  1252. .WORD Trackr_06
    ' y5 J0 H! S; x+ @- `
  1253. .WORD Trackr_07
    # k- y+ x" u9 y* X
  1254. .WORD Trackr_08
    - R; A" q  S) C; Q8 g
  1255. .WORD Trackr_09: B4 _- g# w2 H7 S3 f+ E( q
  1256. .WORD Trackr_10: \4 r; ?4 j) O) E) K8 C4 ]2 m
  1257. .WORD Trackr_11; r0 u. |7 x9 j
  1258. .WORD Trackr_12
    ( O3 e$ K6 D" C4 ]7 ^" X
  1259. .WORD Trackr_13
    / b) w6 E+ U% x' y4 D
  1260. .WORD Trackr_14+ \" ^9 O- z/ z: i+ z* B
  1261. .WORD Trackr_15+ N2 f5 b' [0 S( n* `
  1262. .WORD Trackr_169 @' U  c6 x* [. B. a8 J2 `
  1263. .WORD Trackr_17
    $ z6 I% G5 n$ x9 l" i/ s
  1264. .WORD Trackr_18
    5 }4 G8 O) V" [1 T1 Q
  1265. .WORD Trackr_19
    2 ^, C. w9 b; P9 ^  ?+ R! N: Q
  1266. .WORD Trackr_201 p5 W+ }4 C5 H+ H+ i8 C! [  N
  1267. .WORD Trackr_21+ f2 e6 f6 A+ i
  1268. .WORD Trackr_22/ T& A: w" B/ Y! L" Y1 G% _+ y
  1269. .WORD Trackr_23
      \7 `/ G% R( T" n0 {
  1270. .WORD Trackr_24- K; E+ ?7 z. T; e- N* n
  1271. .WORD Trackr_25
    8 ]7 F+ b% T1 e' H0 I% Y* d. z
  1272. .WORD Trackr_26
    . k8 N7 `, [& B6 s: ~
  1273. .WORD Trackr_273 @+ ^+ B& q7 ?5 |
  1274. .WORD Trackr_28$ [( y4 y$ @, o$ X
  1275. .WORD Trackr_295 `  d# q, F/ W2 H8 U% H& ^" l  Z# A
  1276. .WORD Trackr_30
    5 \; b4 M* A0 }7 L5 Q# f* z- I
  1277. .WORD Trackr_31& P! @+ c5 V# y% k' g
  1278. .WORD Trackr_32% @$ l9 F7 `" h+ s2 S
  1279. .WORD Trackr_33! ]1 O+ G4 i& N2 Q  B9 q5 a8 D
  1280. .WORD Trackr_34
    , c3 a# k) b* n& Q* E/ S$ T0 x
  1281. .WORD Trackr_35
    7 b  ?/ f' P) ?9 Q# @) M
  1282. .WORD Trackr_36
    ) X, D; a) y8 U9 ~
  1283. .WORD Trackr_37% y; Z7 v4 y3 A1 Q
  1284. .WORD Trackr_38$ }- k  P0 |7 b3 w. q9 W
  1285. .WORD Trackr_39
    ; `' J# Y( u9 p
  1286. / S4 C1 _. \1 I( V. g5 d( `
  1287. ;------------------------------
    2 ?7 K' D7 L' q6 a8 M: ?* G
  1288. Trackr_Name_Data3 K/ {" A& L7 b0 b
  1289. Trackr_01 .DB $05,"BGM 1"$ g* |: B2 A! \4 w) Z" M% j1 |8 v
  1290. Trackr_02 .DB $05,"BGM 2"- V( k3 p0 p/ Q7 S5 P
  1291. Trackr_03 .DB $05,"BGM 3". [! q  a( k$ |+ B7 Q- p
  1292. Trackr_04 .DB $05,"BGM 4"
    & y/ u# h1 W- T0 G0 I: T& u8 [/ g% r% a
  1293. Trackr_05 .DB $05,"BGM 5"
    ( F$ P6 C, q% d) \- }) w5 [6 K
  1294. Trackr_06 .DB $05,"BGM 6"$ n5 D0 J  e2 {& e, V. i
  1295. Trackr_07 .DB $05,"BGM 7"" M+ d) R8 T/ r9 k5 ~2 E0 b6 ^5 e
  1296. Trackr_08 .DB $05,"GREAT"
    2 \; }2 @/ f3 z7 \% }  u
  1297. Trackr_09 .DB $08,"BOSS BOM"4 N: v4 l3 o# _6 _/ N% D: j6 L/ c, n
  1298. Trackr_10 .DB $08,"BOSS2BGM"$ Z" D% e) m* ?* A' ?
  1299. Trackr_11 .DB $07,"P CLEAR"" Y" G) E( ?. s& m; A, x
  1300. Trackr_12 .DB $07,"A CLEAR"
    ! g+ N1 i; t% O1 D/ }# d  W
  1301. Trackr_13 .DB $04,"OVER"9 `. a- N0 V, j3 t. o
  1302. Trackr_14 .DB $06,"ENDING"
    6 R) G. M( Z6 c1 x( @9 U0 j
  1303. Trackr_15 .DB $04,"SUTA"+ k7 w8 b; F* q' J2 v& |5 @
  1304. Trackr_16 .DB $07,"THUNDER"
    # k; @$ ~# X1 K4 y8 p
  1305. Trackr_17 .DB $04,"SHOT"
    - r: X4 i8 U7 T: Z8 G. O! f4 v+ R
  1306. Trackr_18 .DB $05,"LASER"1 T5 ^9 ]5 E6 C5 Q
  1307. Trackr_19 .DB $06,"SPREAD"
    % U) m3 [6 a9 q; q
  1308. Trackr_20 .DB $04,"FIRE"
    3 g% h' m. ?7 v; ^
  1309. Trackr_21 .DB $06,"B SHOT"
      K- G6 c( U  r: q
  1310. Trackr_22 .DB $08,"T DAMEGE"5 `5 f1 V! k; [% X  v
  1311. Trackr_23 .DB $07,"HARETSU"+ I! H/ c2 s+ j1 [
  1312. Trackr_24 .DB $05,"T OUT"
    : K7 g+ w1 |# y8 j' W4 F) s  y
  1313. Trackr_25 .DB $05,"Z OUT"% O9 O0 r: {! F* B
  1314. Trackr_26 .DB $05,"A OUT"
    % N% _1 T+ M8 w8 Z8 V! `2 m+ G' Y
  1315. Trackr_27 .DB $04,"ROLL"3 U4 ?% n  v. Z- l" L; ?
  1316. Trackr_28 .DB $06,"APPEAR"
      O% ^, W  @4 [& a4 [0 X
  1317. Trackr_29 .DB $05,"POWER"/ |  K& `! k4 n0 i: ?) C& b. F# f
  1318. Trackr_30 .DB $07,"BOKK BK"
    . ?7 V! o! b5 l- K( l% S
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    . b' O( \4 `5 X2 X3 Q5 s
  1320. Trackr_32 .DB $08,"BAKUHA 2"  ]+ h( ~! V- Y. ~8 `& D4 N
  1321. Trackr_33 .DB $05,"ARUKU"
    5 w# v" b2 ]6 R  n) F1 W
  1322. Trackr_34 .DB $06,"JIWARE"+ N9 m: f5 B: S5 O
  1323. Trackr_35 .DB $05,"SILEN"
    ' G( }/ r5 y" [$ V# I, T( P
  1324. Trackr_36 .DB $05,"P 1UP"
    ; l8 @/ g$ p; c6 G& Y  s) O
  1325. Trackr_37 .DB $05,"P OUT"! C5 J0 T+ p! f: }8 ]
  1326. Trackr_38 .DB $05,"B OUT"
    & C; k' s& P5 l' R1 U2 S
  1327. Trackr_39 .DB $05,"PAUSE"8 {! V* h4 |/ ]# m  e- w* u* Z
  1328. " E4 P3 {* K7 G9 d+ \
  1329. .ENDIF* X% {# w, C8 D' X- t# N# l% h

  1330. # g) p# \7 u' h* ]% }. r9 {! [
  1331. ;------------------------------" B' q, \0 t8 x
  1332. Static_Text_Title_Data;静态文本数据$ G, T% B8 ]+ j
  1333. .DB 12
    + _8 a, q3 N" a( }4 Z5 _
  1334. .DB "SUPER CONTRA"# b, I& p. A: s* q* }: c
  1335. Static_Text_Author_Data/ l0 u* ^4 R2 H/ J  y* \
  1336. .DB 23  o: H1 p( f7 v2 A' B
  1337. .DB "EXTRACT BY FLAMECYCLONE"/ w. i5 `1 @% p, A, K
  1338. Static_Text_Date_Data1 y# N0 W8 J' K6 R* B
  1339. .DB 109 n) v% c; E( T/ ^) f
  1340. .DB "2023.07.11"
    - z. \% y! m9 Y) H& S* ?

  1341. " w  l- B  L7 f! X# K7 Y1 D, j- M
  1342. .BANK RESET_BANK & BANK_DATA_MASK6 l8 A) S. C/ \' ~0 S/ S
  1343. .ORG RESET_ADDR& |4 m: @5 j: M
  1344. . v- d: [& p/ c5 q
  1345. ( x2 O/ Z7 ^. g: V" F' C
  1346. ;==================================================
    5 n- A# C5 D' w1 J! L+ Y
  1347. ;切到主程序bank7 f' O# n% g- R7 Q' Z3 v2 t( Y- m
  1348. SwitchMainBank
    $ F$ B, U  b5 a8 i# C% `; P' h# f
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK) d& {9 D$ e4 `! ^
  1350. JSR SwitchBank80003 a* ?1 z( }) I! _. J
  1351. RTS3 z4 I# k& e2 e5 K1 I

  1352. 4 |: V7 S5 u8 @5 `; p! X; O
  1353. ;==================================================, _: Z: W0 c. a" c* Q
  1354. SwitchBank8000;切换bank到8000-9FFF$ r" g8 ?& r$ L9 K0 s* \
  1355. PHA
    ) K* p7 i- T4 R6 K. u  M
  1356. LDA #$06
    ! W. Q5 D3 }+ @6 I: X
  1357. STA MMC3_BANK_CTRL/ w8 }- H' g7 T$ I6 n
  1358. PLA* Y1 D& o1 S  b" G
  1359. STA MMC3_BANK_DATA
    3 R3 J5 ^' M) v& W
  1360. RTS9 R) v7 J% ^0 X$ r% [6 z
  1361. & V6 \2 m/ w1 r1 _
  1362. ;==================================================
    3 k% `$ l# e: w, ^
  1363. SwitchBankA000;切换bank到A000-BFFF
    ) o( |+ L; |# |+ Z
  1364. PHA
    . Z0 \5 Y" s& y
  1365. LDA #$07
    # D2 N: Q  ?9 B
  1366. STA MMC3_BANK_CTRL
    1 G8 `- B, e0 _+ U# |2 E7 w
  1367. PLA
      v) w4 h( q& [6 G( n
  1368. STA MMC3_BANK_DATA
    $ k8 L3 N6 B$ O; E
  1369. RTS8 c& F" c% V1 j5 n) m0 ^
  1370. 8 [2 r* s- Y: U8 ?9 Y
  1371. ;==================================================. @! A# f2 |9 b8 X& W* T
  1372. Sund_Bank_Init;音乐bamk初始化
    7 ?, n8 Z- A% L- X/ |
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK+ b# ~0 `9 i5 u, P% j" c" {
  1374. STA Music_Bank_80005 T' s4 {1 }' @1 W4 N6 d
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK
    1 ?' v  }$ H& Z8 M1 N% T
  1376. STA Music_Bank_A000
    8 o6 q6 G4 t% p% K) k/ W, m
  1377. RTS
      W& J) B& z7 V% Q0 c* ?
  1378. " c( ?! C0 d& Z8 Q6 W% i8 O
  1379. ;==================================================
    ) @% n! i5 f2 u* w8 I1 {
  1380. Sund_Bank_Set;切换音乐bank
    ( {) f8 ~  L( @; P  N
  1381. LDA Music_Bank_8000* A8 P3 }. P. c0 n: z
  1382. JSR SwitchBank80000 q) u- X; Z1 m5 S) R* _( ~
  1383. LDA Music_Bank_A0001 z2 ^. D' B4 b0 ]* @
  1384. JSR SwitchBankA000
    ; S- m! Y7 \! I& C9 p
  1385. RTS
    5 i  G8 h6 _9 T1 P/ a

  1386. - {+ U3 I9 e* f. C' o8 r8 g
  1387. ;==================================================
    6 L& j0 R1 F! }% `" p. d/ @
  1388. Sound_Init;音乐初始化
    : E1 K7 H. ^- M) H9 J7 W
  1389. PHA7 N0 H* S! ?. k
  1390. JSR Sund_Bank_Set
    + @6 {1 V. E1 S0 T; @
  1391. PLA/ }, t' [3 M1 C: s: s
  1392. JSR Music_Init_Addr( X: Q0 D- `1 q% D0 S* V
  1393. JSR SwitchMainBank5 x& q! o9 z, ~

  1394. # F! a& N& Y. V' T* r$ J+ O
  1395. JSR Music_Bar_ReSet
    - P+ `# g. A+ x5 R
  1396. JSR Time_ReSet/ E; {- L- z( ^2 w9 m. |
  1397. LDA #$00$ z% u0 r. e  S
  1398. STA Music_State
    4 d' X1 d8 \9 A8 X$ |- F6 ?8 G
  1399. JSR Music_Stata_Show% b, t. J. _2 l, {
  1400. .IF Track_Name_Pos
    : H/ g" x- J& t3 V  l
  1401. JSR Show_Track_Info
    ( @* b; O  R/ [5 e
  1402. .ENDIF8 ^6 d# e) m- o
  1403. ) p& W/ F% G4 F: i. ]- W
  1404. RTS8 {# H( g$ P3 `% S( Y$ T
  1405. 7 K5 p- H9 |8 ?0 F* P' ^# ?
  1406. ;==================================================% v/ T5 ^6 V" M$ j0 f
  1407. Sound_Play;音乐播放
    1 Q# M' Y& e2 J6 W- t% |
  1408. PHA* d9 {) l5 A0 ~5 x6 j/ m
  1409. JSR Sund_Bank_Set
    8 k: i& V- V3 Z6 N; t7 y2 a, Z3 @
  1410. PLA. R$ x! W. h+ j
  1411. LDA Music_State' \' B, Y- i( w" x
  1412. BNE Sound_Play_End
    - I" }9 @4 j+ ]
  1413. JSR Music_Play_Addr1 Y( P+ Z9 z  s5 c$ U5 U" N6 }+ F
  1414. Sound_Play_End3 a6 Y# I/ r' u% J; T; {
  1415. JSR SwitchMainBank
    + x; h: W6 f9 m; h6 c
  1416. RTS8 l* I/ k) m( q- w6 B3 v7 e# S
  1417. 2 ?6 N: [) X' x; p" k
  1418. ;==================================================
    0 _* X2 r" l/ [* c3 V
  1419. .IF Music_Reset_Addr
    2 i7 u. ~: K# x# I0 K/ \
  1420. Sound_Reset;音乐重设(如果有的话)
    $ i: {- @1 j& }1 Z* w0 d1 D
  1421. JSR Sund_Bank_Set
    + [/ C* d* m- b6 B, U
  1422. JSR Music_Reset_Addr' |  P, ], r# S
  1423. JSR SwitchMainBank6 N6 I0 r+ \: V) q& L
  1424. RTS  K( g. \' v, b0 s" j' c6 z8 Y
  1425. .ENDIF
    / I) E6 g' u5 V

  1426. 9 Y* c  e+ I4 D! Q) i& j" A8 d' @
  1427. ;==================================================/ m7 F2 p% y7 R4 S
  1428. MainLoop;死循环& J- v! ]* f9 D( E2 Y
  1429. JMP MainLoop/ w6 H5 H' q8 u& D0 ?% H
  1430. 2 Z6 G1 W0 C* m% i
  1431. ;==================================================9 d  V' J" z5 c, `0 X
  1432. NmiProgram;Nmi中断处理
    9 Z% a1 }; ?, p( b* t
  1433. PHA$ J2 E( k. @0 W; E
  1434. TXA
    0 ~6 _! @6 P) E, W$ I
  1435. PHA
    ; Y0 Q: {. X( {; J0 b1 P1 k; s4 r
  1436. TYA# v1 ?: K" c+ A  v
  1437. PHA
    # j5 x) A5 b( S. ?# f+ K! n* P3 c9 u
  1438. $ k$ z' m4 Y) j# I5 Q! r
  1439. LDA PPU_STATUS
    ' s; h! a4 I; B, N; U$ s* I% `
  1440. LDA #$00
    - ?8 e) V3 V) Q
  1441. STA PPU_CTRL
    * F' V7 D/ Z* Z* P

  1442. / r( J' }4 m; d8 f) B
  1443. ;切换主程序bank
    4 t0 l! M) V; e6 V
  1444. JSR SwitchMainBank
    * x. \! j" o" P# D$ k: F/ h
  1445. ' i) Y! e7 F" M) r# o: B' g8 B: {- x' [
  1446. ;NMI处理7 B7 I0 }8 A* x/ k! q! ]
  1447. JSR NmiProgramProcess8 v1 M  L2 |+ J2 L$ @  D

  1448. & Y8 u3 L( L/ P5 @+ @1 N, N
  1449. Nmi_Proc_End
    , I& r( b  x% {; q& Z# u
  1450. PLA: d: y1 d3 @; N6 P9 J8 y
  1451. TAY; Y, m  P" L8 d/ e# M6 L" R. D
  1452. PLA
    " S% @! n( @9 {# ?
  1453. TAX
    ) h) ^" g9 M1 D5 W
  1454. PLA
      K2 e6 K# b: Z9 }$ R; n' s7 I

  1455. 7 w- J7 |4 P( y1 b5 i0 N( h
  1456. RTI4 F6 P" Y0 n  z9 P
  1457. 2 G/ S, {; l6 f- Z7 o
  1458. ;==================================================
    8 \, ]: j# a, t: ]+ x& b" F: a( Q
  1459. ResetProgram;重置中断处理
    2 x: E6 z( D/ r  K/ ~4 T5 Y, c
  1460. SEI
    / S) q! {$ x7 p# i( }4 Y5 V
  1461. CLD
    : f: |! Z; L2 \+ @5 |2 R$ s
  1462. LDA #$00
    $ p- }+ e2 t6 \( R6 u  P
  1463. STA PPU_CTRL# T$ @# I4 `  D
  1464. STA PPU_MASK5 R/ o, v* S$ @3 y- c
  1465. " w$ Z% M2 Z# x! X) \: J
  1466. JSR SwitchMainBank
    5 D% q) t- ]5 J, w4 k
  1467. JMP ProgramBegin8 D/ ?5 Z, u# R

  1468. / ^& X3 ^/ Z- R( _* F
  1469. ;==================================================
    9 X2 v  r: n. Y) F2 h( R3 R; `
  1470. IrqProgram;Irq中断处理
    . b/ Q: u& j; o- m: i
  1471. RTI9 }! Z: [1 e, C7 K& @5 q5 D2 y5 P
  1472. 8 [. {+ }) q0 d: @5 O
  1473. .IF SOUND_BAR_SHOW_ENABLE
    ; P3 g' a$ b; q: C7 |2 q+ H* E3 _! I
  1474. .ORG $FF80/ `+ ~& {* N! L" e* t
  1475. STA $4000,X4 `; h" |/ U3 f' G! s- x
  1476. STA Sound_Bar + $00,X
    ( z" C% ~, h& D! C
  1477. RTS3 h  C3 w# X# ?
  1478. 6 V( S! G0 j6 p* N, b% Q5 I8 @% K
  1479. .ORG $FF88
    1 |7 t1 e  o- I* ~7 Z
  1480. STA $4000,Y
    - h9 j& z* c) @
  1481. STA Sound_Bar + $00,Y- w5 D9 _, x% Q2 m( z* B' B" Y# p
  1482. RTS% `; R* @- r1 L# F+ @5 h5 T" h2 v3 }

  1483. : i0 W9 f+ r) O
  1484. .ORG $FF906 z2 A9 P/ q; z6 ?
  1485. STA $4004,X$ t4 y$ P; C0 F4 w- ]
  1486. STA Sound_Bar + $04,X
    " D  Y) n- ^! @# @, v* x9 i+ c- D
  1487. RTS# N/ D# N* b" W, Q3 ?5 d3 o

  1488. 2 o5 \! H0 b0 S- e
  1489. .ORG $FF98) P' e2 h/ n# r9 `5 i; i0 {( R
  1490. STA $4004,Y" T9 j1 C" E# a  |. ]
  1491. STA Sound_Bar + $04,Y
    ; s7 L4 M) G4 D+ y2 W
  1492. RTS
    + n5 Z3 ^! s: C5 b2 w' q+ \2 D

  1493. ' ?" [1 j) }& Y+ G. X1 t% j
  1494. .ORG $FFA0/ F% Y3 h  Q  l- P. {2 l
  1495. STA $4008,X& S9 A# M+ J! |: m1 L5 P& Y
  1496. STA Sound_Bar + $08,X( t' i/ _( G8 E( Y/ k
  1497. RTS
    . U8 X. e+ H% w4 `. g; f3 ~
  1498. + W' c7 |7 s  B+ b# e- e% ?
  1499. .ORG $FFA8) a0 b( `# M( s' x  M( Z. w3 \
  1500. STA $4008,Y5 W# T) L# S9 \
  1501. STA Sound_Bar + $08,Y
    & c8 `1 [# m3 U& N. ~& x& r
  1502. RTS
    5 a8 ]/ ~1 n% I; k

  1503. " J0 I5 I2 s9 r+ M; w' T4 ~: i1 b
  1504. .ORG $FFB0/ g2 Q! H1 a( F. N$ s: O! D
  1505. STA $400C,X  \4 t- d6 _! E1 r/ `+ I' P
  1506. STA Sound_Bar + $0C,X
    5 }* f, G, M2 i3 r9 r4 d' ~
  1507. RTS
    9 i# _; j. T5 G: y# I

  1508. ) Y3 t0 ^0 k) X  y& ~* p7 L
  1509. .ORG $FFB8
    1 U. X& w( k0 ]
  1510. STA $400C,Y
    ! {' P) n( @' Q+ R8 J% ^% W
  1511. STA Sound_Bar + $0C,Y
    # C! D1 [: A1 _# o0 @) D$ |- w
  1512. RTS" T5 N! C8 h) R' t9 n
  1513. 2 ]) R! H1 \6 |6 T) A# e) G2 _
  1514. .ORG $FFC0
    3 M% v3 @8 l+ P" t: K$ @) L
  1515. STA $4000' |6 i6 Y; X# k4 ~; C% \
  1516. STA Sound_Bar + $00" |5 C. M+ s; M  [
  1517. RTS: l7 |0 `" n: p( F
  1518. 1 B/ X- j/ ?3 a% e! k
  1519. .ORG $FFC8, H# Z+ J- g- g2 ?: h1 j4 r: B( L
  1520. STA $4004& [0 b+ k" h' ~+ ]* `+ V6 f  y1 P
  1521. STA Sound_Bar + $04: `% N- Y! h- Y& P& i: a
  1522. RTS
    / `# P0 c& p/ l6 y* E  y

  1523. ' ]4 B) L6 q& Q% w: L
  1524. .ORG $FFD02 }% u( t% S3 ~0 a9 Y9 ~
  1525. STA $4008
    + M1 A" v! e0 o* q4 X! M+ e. ]
  1526. STA Sound_Bar + $08
    / M% n' d+ C$ Y5 H0 v$ w" Z- k; z  e. R
  1527. RTS; m$ |( A4 z- n5 n  S) |9 U$ R" E
  1528.   P; [$ g3 H- w7 t! b8 ]. {- f
  1529. .ORG $FFD8; F3 ~; \5 V3 u( Z  k; B7 O
  1530. STA $400C9 n1 ~$ l- b# ]3 L
  1531. STA Sound_Bar + $0C  I! M6 U( g7 R3 L! U! U; ]
  1532. RTS( g$ g, T! M- U1 \
  1533. ) J5 k) X5 }* k) G5 U! N1 L
  1534. .ENDIF
    1 m, V, \# J& y- j5 ?
  1535. & q% Q' L4 `' D  V5 z2 S6 T
  1536. .ORG $FFFA
    7 m2 |( X/ x2 V% D( U0 P" w
  1537. .WORD NmiProgram9 a0 |8 L, _2 f7 y
  1538. .WORD ResetProgram4 x3 l1 G3 d5 U
  1539. .WORD IrqProgram
复制代码
' X, B; w' d4 V9 C1 x5 \
! e/ }& ?5 ~9 }2 n/ [# [0 @% j
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

1

查看全部评分

签到天数: 1241 天

[LV.10]以坛为家III

发表于 2023-7-13 16:43:54 | 显示全部楼层
很赞啊!
[发帖际遇]: fragranse 在网吧通宵,花了 3 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 3231 天

[LV.Master]伴坛终老

发表于 2023-8-5 12:44:16 | 显示全部楼层
必须支持
[发帖际遇]: leshui 在网吧通宵,花了 6 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|国治模拟精品屋 ( 沪ICP备15012945号-1 )

GMT+8, 2025-6-15 18:38 , Processed in 1.103515 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表