设为首页收藏本站

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 4 j2 g& D: G7 i; J
0 p- [5 U5 ^% N$ r
1.魂斗罗- _9 q9 I+ I% T
2.超级魂斗罗
) n, v+ s; i4 ~  V# N2 W3.赤影战士7 W8 p) H  M! \. d: K
4.忍者龙剑传2) e1 q. T% |* S) H

9 A, Z4 B6 a3 t* H) G, a4 z! `8 X4 e/ l, z

! ^  _; C/ N* D3 s2 F# N- ]/ W( V" ?$ f: T, \  X% p" c! K- o
源码:
4 |7 `3 u8 A8 |2 t+ I4 M1 F$ F! x
  1. ;[FC音乐][播放器模板]9 u# ~& l) c2 o5 X
  2. ;FlameCyclone 20230710* e& j- z! C4 B
  3. 0 ?$ ^7 c+ l: g6 @5 u! N
  4. ;文件头
    ; O7 ^& C- L3 ]* I1 x
  5. ;======================================================================
    ' n6 r) K1 b( D+ S4 ?
  6. .INESPRG 4                                              ;16KB PRG 数量
    $ [; H* q& L) w- R5 r, B9 E& f
  7. .INESCHR 0                                               ;8KB CHR 数量
    4 I. x% `' v, @% D1 r6 u$ s
  8. .INESMAP 4                                                   ;mapper 48 Z3 R' @. E, h) H# W# Y8 G4 B, B! [
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直
    9 ^. J) c5 @0 ^3 X9 b: n9 i

  10. ( t5 R5 L, P. X* u$ |+ ~
  11. ;==================================================
    3 l, M# [8 z- V( F# q# G& B# G
  12. SOUND_BAR_SHOW_ENABLE       = 1# t, W' i/ P  J, z2 y7 p
  13. ;==================================================
    9 g2 b2 D4 d; d9 e
  14. BANK_DATA_MASK              = $07
    5 x' Z, \. @0 Z: U
  15. ;==================================================
    ' k! e3 W; r( X' ~) I" g( }# m
  16. SOUND_DATA_BANK_0           = $00# X- f! [5 V( O8 c* t3 W3 `
  17. SOUND_DATA_BANK_1           = $01% o7 P3 }  k* M6 t* Q: Q
  18. SOUND_DATA_BANK_2           = $02
    4 l+ E( [( y6 G! a/ O* _
  19. SOUND_DATA_BANK_C000        = $061 C/ n5 E; o; d1 E. ~  J) U1 E

  20. % w* x6 m: k. w
  21. ;-------------------------------------------------) ?& N( q* R6 i: n; y% F) V
  22. CHR_DATA_BANK               = $04
    ) }, Q; y- W/ h3 k) Y6 E
  23. CHR_DATA_ADDR               = $A000, i( q  N9 I; d# f: O
  24. ;-------------------------------------------------7 p7 L" e: C& {' [6 r. t6 v3 h1 d
  25. PROGRAM_BANK                = $05
    7 I" ]4 i1 g/ l* m) K# t8 ]4 `; E7 W
  26. PROGRAM_ADDR                = $8000) v# H9 B6 T, o& O
  27. ;-------------------------------------------------
    6 E4 s1 q0 c5 ^+ Z& I9 @
  28. RESET_BANK                  = $07
    4 j0 J8 M, L; ^* E
  29. RESET_ADDR                  = $FE006 v2 a( v3 s2 [1 r7 X7 J0 }
  30. ;==================================================
    0 s( H/ y; I* N2 x
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址
    & ~; j9 p  ]2 r& {: r
  32. Music_Play_Addr             = $813C ;音乐播放地址
    + g% D2 C6 C# i$ G0 i
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址  M% a3 ]# ^& N' n! V% ^9 P
  34. ;==================================================- E8 L8 f; v) v  e' H
  35. Music_Song_Total            = 039  ;全部曲目总数
    ! k2 P5 C+ [1 V# R9 d
  36. Music_Start_Song            = 007  ;初始播放曲目, h$ m$ G' {- U& r5 s6 {0 @3 ^( H
  37. ;==================================================
    3 t4 Q) Z7 W" }0 w- t- L7 o
  38. & c1 r# A9 p3 }* F$ p
  39. ;==================================================
    # j5 c) {" Q: k/ _
  40. Title_Text_Pos      = $210D ;标题文本位置
    9 [% C* t4 [: }
  41. Author_Info_Pos     = $2284 ;作者文本位置0 x# A% n- \5 L( T2 y# c+ x! v8 G
  42. Date_Info_Pos       = $22CB ;日期文本位置) h6 E6 Z" f1 h6 j6 k
  43. ;------------------------------
    % J; t0 P/ w- N3 B( z) }* y
  44. ;------------------------------
    ! L5 V* e  Q1 u' H8 E! d" W0 J
  45. .IF SOUND_BAR_SHOW_ENABLE. @5 ~3 G1 I$ ~( G4 {% Q
  46. Play_Index_Pos      = $21B3 ;当前曲目位置
    " U: m9 j' {9 J. A) g- X  e
  47. Play_Time_Pos       = $21F3 ;播放时间位置
    / h$ e9 z% ~* I
  48. Play_State_Pos      = $2233 ;播放状态位置+ ~; ^5 D) A, C$ G6 ?4 y% |7 b# p
  49. .ELSE7 D7 }7 O/ G1 l' j% C; m( g
  50. 6 R  i$ \) k. m) }
  51. .IF Music_Song_Total > 990 ]4 X* e2 Q9 A& p2 @5 D+ L, F. N2 B, k) d
  52. Play_Index_Pos      = $21AC ;当前曲目位置, C, b& k. r/ G' z' l; ^; }! ]
  53. .ELSE/ o. \; R' E7 S8 B1 n& |
  54. ( {+ h2 _2 N' ?0 j+ e4 I
  55. .IF Music_Song_Total > 9" [- F/ ~' [: @  D& |& O! D
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    2 L1 U7 b# \5 |
  57. .ELSE
    * }$ T7 w- T& P% X0 r* _" `
  58. Play_Index_Pos      = $21AE ;当前曲目位置+ _0 l4 R! J2 }# ^
  59. .ENDIF1 x/ N& e( F) I/ `9 _% k4 f4 x

  60. , I9 A; j+ l) `" Q, q- ?/ |
  61. .ENDIF
    0 X2 i3 v9 N7 d' x4 o% m

  62. * H/ F! z4 J2 q% p: ]7 Q) ?

  63. : k2 P3 I0 v6 `2 K
  64. Play_Time_Pos       = $21EC ;播放时间位置
    2 z  i% ^: O4 x2 ]; w
  65. Play_State_Pos      = $222C ;播放状态位置
    4 R: _& l  i2 E) d; I0 _+ z, e
  66. .ENDIF
    & K; ]; T; t  [7 h7 x
  67. ;------------------------------
    . ~. B8 e% L9 C
  68. Track_Name_Pos      = $216B ;曲目文本位置
    + |$ ~. C- F/ i! ~5 o" t- X
  69. Sound_Track_Pos     = $21A5 ;声道文本位置
    + I9 e; n3 a, F' w" _. x& ]
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    : F, C+ E0 [  S: r. ^. ^8 U
  71. ;==================================================7 H# z$ ]; X' x2 R9 B% d
  72. Scroll_X = $00( ?" n) T. d  a! c0 ~+ K: `7 q
  73. Scroll_Y = $06! ^& ^+ r( o$ h1 d, B0 X+ O
  74. ;==================================================" g& a$ \- e: g7 ]* @
  75. RAM_Cln_1       = $01001 y# t8 A! c" O2 @7 W
  76. RAM_Cln_1_Size  = $80
    2 u+ C5 I. A3 }( p
  77. RAM_Cln_2       = $00E0
    6 w) ?/ d4 ~1 B/ g: Q# m- Y
  78. RAM_Cln_2_Size  = $20
    7 k# U% @8 s2 Q
  79. RAM_Cln_3       = $00E0
    % ]) P) t. v1 ^/ ]
  80. RAM_Cln_3_Size  = $20
    ; S) E& |# f, i$ b% L$ h

  81. 7 p7 ^; f& @; }4 D7 J) H
  82. ;==================================================7 x) e' L  r- @/ j8 O6 ]& i
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器% `0 @9 ~1 r! D4 {' N
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    : [, v2 F$ p( J) S+ u4 e  y$ Y
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位/ M' J2 ]9 |+ w% N# z) ]# M
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    * G6 ]1 }3 R7 i, K* [
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加1
    - S2 a2 u9 O. G
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器 # ?3 N3 j. b* C& O7 x  }  P3 U
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加4 s2 k$ w7 {4 g1 Y+ q
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32 + u' [& H4 e3 G; z+ _- U' b
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存
      Z( ]  r1 Z$ |/ o" s) t
  92. APU_STATUS              =   $4015   ;声音通道切换9 u+ k  x' G% a; q& s% \
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通
    : J  z& ~! ~# r+ w% S' ]/ t+ o
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通/ U/ v% n% v1 O$ I& g0 ^
  95. ;==================================================
    $ ~$ V. u7 n: f* U- l7 X4 r. {
  96. MMC3_BANK_CTRL          =   $8000* b4 m" J& j/ I( k9 c) `' h- b
  97. MMC3_BANK_DATA          =   $8001, @/ R9 Y4 ^  d6 G, v& i
  98. MMC3_MIRRORING          =   $A000
    8 H/ z6 V4 t0 h
  99. MMC3_PRG_RAM_PROTECT    =   $A0015 n6 Y% O/ A* A. f$ Z; S. L
  100. MMC3_IRQ_LATCH          =   $C0009 \$ o3 O: {  A% x9 I! f
  101. MMC3_IRQ_RELOAD         =   $C001/ \$ U  l: @0 M
  102. MMC3_IRQ_DISABLE        =   $E000
    + {: N7 U& Z) D& Q4 `7 E0 K. ^6 g8 m
  103. MMC3_IRQ_ENABLE         =   $E001
    5 {$ @& e. o+ Q0 o$ Q
  104. ; q5 S' E, s! L, t* U. R" x
  105. ;音乐数据块1 b- e* j5 l5 ]/ G1 {0 E+ ?# j
  106.   y* h! o) D$ d" H% q
  107. ;======================================================================
    ; v" S# k3 _; I, K+ ]
  108. .IF SOUND_BAR_SHOW_ENABLE: Y: d; Y1 X5 C+ ?, }
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK' D/ L$ L! X: d9 u8 L7 P- `
  110. .INCBIN "sound_bank_bar/music_data_0.bank"
    5 X# X1 z+ }+ D  w; N: k7 V

  111. ( L. \: B( X& `6 f
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK/ Z6 w* }$ F# B. N/ G0 P
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    1 E2 N6 ]# @$ e8 P  |+ Z

  114. , U% p$ H6 y  q! @& ^) S
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK9 M  x& W+ f7 ~/ V" T
  116. .INCBIN "sound_bank_bar/music_data_2.bank"# U6 j' M% g3 T
  117. 1 D( ?* {, P5 s& W" D1 P
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    - i+ n6 J' V6 P. p  C1 V
  119. .INCBIN "sound_bank_bar/music_data_3.bank"
    ' X; G0 N# B' q

  120. % H$ j" S4 n3 e  s/ M
  121. .ELSE
    2 K5 \$ T5 x  H- ?
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    3 K6 x& e# w& k; M" a. l
  123. .INCBIN "sound_bank/music_data_0.bank"" R2 }" }& `; C

  124. 8 c+ e/ R6 N: |* c; p+ |" Z) G
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK/ {' s( A* m: Z% u4 ~
  126. .INCBIN "sound_bank/music_data_1.bank"
    " `# u' y& n. ^9 [3 N$ j
  127. ; A6 S$ R" ?; W( G4 f. R/ q
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    7 `- W( E# S' C4 R" O
  129. .INCBIN "sound_bank/music_data_2.bank"2 T+ N# w) A* \) d
  130. 1 L- D) B3 [$ ^5 T8 h) e9 q2 [
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    7 Y+ a, a/ B! ~& @
  132. .INCBIN "sound_bank/music_data_3.bank"$ U% z9 U! ^) Y2 C0 w
  133. .ENDIF4 _8 }$ N$ T$ K! k

  134. $ p$ l7 e" J0 ]$ E" d' m
  135. ;CHR图形数据( q( G2 x; K! T% z7 `
  136. ;======================================================================
    2 @3 m' [* Y" L* K
  137. .BANK CHR_DATA_BANK
    : Q" i% u- C% N! F
  138. .INCBIN "chr_bank/chr_data.chr"+ H6 m0 R& @) s9 @
  139. 2 t3 G( B9 ?+ {* o2 M" z
  140. ;==================================================
    ' S1 b6 R! M) y4 n$ r, }
  141. PPU_Addr        = $03006 i+ I) t5 n7 T# ]/ h
  142. Palette_Addr    = $03C03 I. |/ h  R! u' r3 }
  143. Sound_Bar       = PPU_Addr+$E02 l. Y- S% G. k& z; E0 Y
  144. ;==================================================
    4 P* Q9 O/ h, N
  145. Palette_Update_Addr     = Palette_Addr+$0D" U4 }/ V8 u9 q& `! @# X
  146. Palette_Update_Max      = $2C# o( q+ t) I) C- I0 m+ W
  147. Palette_Update_Min      = $21
    1 s1 w) P" w& u8 n. i
  148. Palette_Update_Interval = 60
    & i' e7 T  \8 i% j5 Z
  149. ;==================================================" u! d. y; Y- C6 p( v& J# ?
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
    9 J+ Z2 q7 X+ v
  151. Screen_State        = Sound_Bar_Cnt+$012 D) W$ ]+ }* ?6 T9 P: z+ X5 [
  152. PPU_Cur             = Sound_Bar_Cnt+$02
    $ W( O1 k. j! y' g
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03
    3 z* ?+ N( l4 f3 f4 O: H
  154. PPU_Addr_L          = Sound_Bar_Cnt+$04( L4 ?$ V" g8 ?+ l1 w6 Q9 l& A
  155. ;==================================================% ]6 R- V7 z4 Z
  156. Data_L              = $70
    " D( Q4 Y' y- B0 Q: |7 x& ?- O! ^4 N5 O0 I
  157. Data_H              = Data_L + $01
    ; m- }6 H# ]3 j$ x8 Z- w6 o
  158. Data_Cnt            = Data_L + $02+ U: h, U4 y4 w% B
  159. Data_Buf            = Data_L + $032 n/ Q4 X8 X+ n5 K4 D
  160. Time_Wait_Cnt       = Data_L + $04
    ! J- X- ^" J4 l: I) I* x
  161. Palette_Wait_Cnt    = Data_L + $05' h& G% |) Z+ k- L+ i+ }
  162. Palette_Update_Flag = Data_L + $061 K$ q1 h* Y% s, }; ?; w- J
  163. Show_Track_Name     = Data_L + $07
    6 ?6 q$ @( b+ t/ C, Y
  164. ;==================================================2 ]+ ^  h2 m# P/ E. g/ y
  165. Key_Keep            = Show_Track_Name + 1  d. }$ m% s3 v6 }2 N
  166. Key_Once            = Key_Keep+$01
    ( t, w  l" s/ b1 x7 k$ d" `! v3 I
  167. Key_Kemp            = Key_Keep+$02
    5 p7 c. Z7 U8 s! r* A; C+ G5 j
  168. Key_Temp            = Key_Keep+$038 f, K/ `! F: p1 P
  169. Key_Getv            = Key_Keep+$04
    ) o8 x5 C9 H8 u$ E4 O
  170. ;==================================================
    - y" g* _! f+ t1 L
  171. Music_Cur           = Key_Getv+$017 K5 F# @9 @# g) C4 B
  172. Music_Last          = Music_Cur+$01
    ) ]9 o% O! @; D" d% f
  173. Music_State         = Music_Cur+$02
    ' m3 O4 f/ ]7 U4 j! |  P4 A
  174. ;==================================================+ G& T) _8 N7 ]$ ^
  175. HEX_Data            = Music_State+$01
    , n( |: `# U( _9 d
  176. DEC_H               = HEX_Data+$01* @7 B/ j3 y$ W) l( i+ L0 Q
  177. DEC_T               = HEX_Data+$02% N5 g# R" T& R1 B( D& L
  178. DEC_L               = HEX_Data+$03
    * ~# v) Q* O( b( I- r) b
  179. ;==================================================
    ( @8 g) k7 V: c
  180. Time_S              = DEC_L+$01
    0 x* v$ p/ k) A  u% m' J
  181. Time_M              = Time_S+$01
    3 d& [$ h1 }9 a3 C
  182. Time_H              = Time_S+$02
    ) I+ i2 n/ Y' h, A  `/ T9 ?: n1 p2 v
  183. Time_Cnt            = Time_S+$03
    0 M" K* m& ?0 ^: A8 ]( D6 U
  184. ! v; u/ b4 q6 \: S' b1 i" i
  185. ;==================================================
    - f. l$ G% c" c: |$ h: t* A
  186. Music_Bank_8000 = Time_Cnt + 1
    4 W% Z% F' ~. \, w. C( r+ k
  187. Music_Bank_A000 = Music_Bank_8000 + 1# Q# j+ O  t5 ]+ L! E0 r$ h4 r$ t
  188. ;==================================================
    ; p3 c4 n: ^6 T4 T' y) d
  189. ( ]. i7 z, c3 t1 f$ O" [$ U2 X2 \9 x
  190. ;======================================================================
      I/ Y# C. n0 \+ R" G3 ?# c; P  ]
  191. .BANK PROGRAM_BANK
    0 J1 `, S! Q7 `6 C' e
  192. .ORG PROGRAM_ADDR# C7 `) m" @3 [- k
  193. , i  @8 L% S/ o+ `2 P
  194. ;==================================================: S6 d9 H: Z$ J) L
  195. NmiProgramProcess;NMI中断程序处理5 d6 G+ z" r! C/ y
  196. ;处理PPU图像
    0 B4 `6 X2 y2 A; K
  197. JSR PPU_Proc
    2 J6 T( A9 y) a; b$ d8 t
  198. , d# u4 B. D8 }+ O' L# D" S  y
  199. ;启用NMI中断
    1 m+ l8 d9 g( {8 U. G
  200. LDA #$80
    * ~# g6 H% c/ K, d- R
  201. STA PPU_CTRL
    / {: K2 ]( m. _
  202. ! t8 C, G3 u4 W& h
  203. ;更新调色板
    ; l$ J7 H% ^) I* M  H9 {! s
  204. JSR Update_Palette_Data0 E4 r; t4 S$ D/ \$ s" ?, F) S

  205. ! g1 g, V, q" K, K3 o3 r9 \7 a' m
  206. ;显示时间(缓冲)
    ! P" d' B  m6 c8 v, @/ Z
  207. JSR Time_Show
    $ p+ `# T( Z) @

  208. " P- I: s5 O9 Y
  209. ;播放计时& s% s$ {7 i9 Z0 N" n) i0 l" U
  210. JSR Time_Count# R/ O7 s6 l0 p. M2 I& P; r

  211. 7 J/ t' N* P; _
  212. ;播放声音- M, V# c$ C4 w' F; s6 R* G
  213. JSR Sound_Play
    6 A# F" [7 z( j
  214. 4 ~8 t) b7 _8 j4 I7 u2 E3 l/ I
  215. ;切换音乐(手柄触发)
      O) x. L0 i1 E& g* R1 Z
  216. JSR Music_Switch9 n5 ~  Q9 O7 ^8 t; N
  217. , C" K; z6 G; c  ?" T4 ?; X% g2 F
  218. ;音乐显示(缓冲)# Y& D1 T, S( q# t% z" `
  219. .IF SOUND_BAR_SHOW_ENABLE, |0 h+ m' q& n0 ^: h/ x
  220. JSR Music_Vision
      C+ ]7 a& S0 ?/ z; ]: r  V0 I
  221. .ENDIF
    # |! Z* o: B' j( k8 f
  222. $ }- Z+ d! A0 y6 w# ^
  223. LDA Time_Wait_Cnt# T9 _" X; x$ b9 o$ x4 l4 G" ]
  224. BEQ NmiProgramProcessEnd# {, c. Z% c- @' N7 |% f/ t# `
  225. DEC Time_Wait_Cnt6 L% E: k4 n$ g$ C8 J  D
  226. NmiProgramProcessEnd
    + S- \+ F: J$ X+ m) |! u
  227. RTS
    / @1 {" z! c6 ^/ W+ X) \

  228. % b% c4 o' E, }3 I
  229. ;==================================================4 G6 u' M. g' L
  230. ProgramBegin;主程序
    ( n/ ?- z' S4 x' {) R( Z& i
  231. LDA #$009 C1 ?+ h) P  M& q
  232. STA PPU_CTRL
    # ~/ W& L! @: r1 v3 m4 |
  233. STA PPU_STATUS. F, L4 z6 Q* Z+ N
  234. STA PPU_MASK
    # }6 l* x6 I% N1 G+ c9 ]
  235. STA APU_STATUS
    . I1 a( ?; Z8 L8 H
  236. STA PPU_SCROLL8 q& g' w3 r8 c5 T2 I: V
  237. STA PPU_SCROLL) D* K! u7 F. |$ ?7 b
  238. LDA #$C0
    * ]8 N& [% C! U( S' g% r7 l
  239. STA JOY2_FRAME
    1 H* r+ q% e7 k+ X% d

  240. " j' B! G2 I4 X0 w9 v
  241. LDX #$FF
    # f1 W+ L9 E2 ^+ k
  242. TXS: k$ T  c/ w  P4 r, m3 c
  243. LDA #$00, ~! p, T: h+ s% d
  244. STA PPU_CTRL
    5 z4 b$ K3 n0 ~% d# O5 r' B  X
  245. STA PPU_MASK
    & H: F5 Q1 p9 e, k. L4 }# B% l
  246. STA MMC3_IRQ_DISABLE
    " b  B2 o7 y: N9 R: }* D( W3 l

  247. . r7 d. U9 s3 @
  248. ;==============================0 _4 b0 M# m) a1 K. J
  249. ;调色板清空
    + c5 ]2 R1 ]" C% h* ^
  250. LDA #$3F
    % I* d# h2 w$ f2 ?5 h- L3 |- E
  251. STA PPU_ADDRESS
    ( D6 L4 E5 a/ s8 a0 I; @& w
  252. LDA #$00& v1 ^2 a3 W" c& [, p% y) \3 S7 k
  253. STA PPU_ADDRESS
    9 ]; l8 \0 d/ @* @7 X1 ?# z
  254. LDA #$0F! B% m3 x) J, U
  255. Palette_Clear0 e3 D7 p+ {7 C1 f/ e! _
  256. STA PPU_DATA( m3 d  X# b' L2 ]9 J' t
  257. INX9 D9 l4 [" V- ]9 r$ B# J3 J
  258. CPX #$20
    8 N$ I! Q7 e, n7 }1 b5 U# @0 o4 ]! N
  259. BCC Palette_Clear- }0 f) ^2 A- P& H, ~5 P! a
  260. LDA #$00; j* p) j1 b  |
  261. STA APU_STATUS, n  W1 u3 j. [% D0 b4 n
  262. ;==============================
    % [( x" _. n# j3 [7 v; n8 Y
  263. ;初始化背景调色板& r, \8 G) i. G2 P) F
  264. JSR Set_Palette_Color
    " u) u  h' J+ x2 i4 M5 R
  265. JSR Set_NameTable_Attributes7 Y0 b. n3 q, i
  266. / r3 {, {1 E% W1 ~9 \! H: d
  267. ;==============================9 J( O! s- C- b
  268. ;RAM初始化) j# C- v) H# j, o  ~
  269. RAM_Clear_All
    ; Y' v* Z: |, V  h2 e
  270. LDX #$00
    4 I2 I0 s3 |, D4 U. N. `& B# j  J
  271. LDA #$00
    $ H/ G. X: b) @
  272. RAM_Clear_All_Start: g6 w! w& y) A+ s9 Y% j
  273. STA $00,X
    / X/ H% m; b* f, w7 O5 [, R9 ~
  274. STA $0100,X
    ' S, [% G' o' W- r6 r2 w
  275. STA $0200,X
    ) J3 V. Z% Z2 g6 B* d
  276. STA $0300,X6 R) s3 h& T7 C4 u8 w; b
  277. STA $0400,X
    3 U) J# [1 N' U& q
  278. STA $0500,X0 S% X6 Z7 `! O9 m! M
  279. STA $0600,X( u0 [" }0 }; \
  280. STA $0700,X5 I: _" V+ [0 h* X7 x
  281. INX
    " \7 }+ h2 H, P  J  x
  282. BNE RAM_Clear_All_Start2 z- [" l. K% u' l- P
  283. 1 T8 c5 P) s4 ^1 k  {4 N
  284. JSR VramInit( g* r) c, e- N; T4 m- Z
  285. JSR Init_Palette_Addr
    & ?9 s' Z  @7 M: p0 e; {
  286. " G! D9 D0 ^/ l7 x! ]9 ~
  287. .IF Music_Reset_Addr
    9 a0 v6 Q; f5 u0 E/ u  t" A. E
  288. JSR Sound_Reset
    ( o8 h9 I5 |+ L
  289. .Endif
    1 U  P/ L5 c- G5 d, {
  290. ; x# _; I1 E1 n7 a7 I. b, L
  291. LDA #Music_Start_Song-$01
    - L  C1 u! _: T" M9 `. j3 i& p
  292. STA Music_Cur
    : V, G2 N6 o6 ^3 x1 j# p* k

  293. - M$ s0 C/ o: S+ S( z
  294. JSR Show_Music_Text; Y% j( N  X$ t; P) j
  295. 5 X; ^; s3 k# D2 p) \2 T
  296. .IF SOUND_BAR_SHOW_ENABLE
    ! `4 t' |7 O, X% v4 ]4 o
  297. JSR Sound_Bar_Text_Set
    . v: S( F4 P' H6 T/ @
  298. .ENDIF+ q. _+ d3 z) v; \. F! k* k+ ]* j
  299. ) Q# c2 h4 _* [) m5 P2 \% A" l
  300. .IF Track_Name_Pos
    1 ^" v9 V/ T* X1 W6 g( b
  301. JSR Show_Track_Info
    6 P- K3 a* J+ |- ?1 i
  302. .ENDIF/ H2 \" I7 |" Y5 D9 b1 `% }
  303. & t/ T9 @0 Q* V
  304. JSR PPU_Proc$ M( J0 V2 `  h

  305. 5 h' U6 ^( ?, g+ b- z5 H, ?
  306. LDA #$0E
    & t* z1 T  N4 g9 u
  307. STA Screen_State
    9 o5 b  t" K# f' t5 l

  308. & ]6 u2 n7 G) D* B1 q2 f. c7 `. S
  309. JSR Sund_Bank_Init5 |$ I. N- E; k6 q' _
  310. % h) {+ {/ P, x  D2 H9 z
  311. JSR Music_Show
    ! ~, n8 x& x: H8 {/ y) [, H. o/ d8 ]4 G
  312. JSR Time_Show/ u" B5 w& V4 ^6 A0 ]
  313. JSR Music_Stata_Show6 j* G, N% C* K: _9 l4 |) P
  314. JSR Time_Delay5 Z$ y: I. s! w$ J5 w

  315. - _' Z, Z1 o+ A

  316. ; C1 \4 B6 }( E$ m  J* q
  317. LDA #$80' ?5 P9 l8 D# U7 f4 W2 e* l, ]
  318. STA PPU_CTRL* F; V' t1 ~. t1 K) Q" `6 A

  319. ( a$ R* w) g; y) K. F# }8 v
  320. LDA #$209 J7 U% k3 v6 X3 w
  321. STA Time_Wait_Cnt
    2 C% E9 y* ~+ `; _2 X

  322. . G' p7 q; S) `) [
  323. Wait_Time_Over
    , f0 O) N7 C- T/ j% O' v" J
  324. LDA Time_Wait_Cnt
    / l6 f9 @/ K' f; Y5 j, _; o
  325. BNE Wait_Time_Over/ C+ v" F9 M8 x5 X6 @$ h3 d  a

  326. / @) L7 f- H' P3 W8 L4 ^# A$ v0 @
  327. LDA #$1F! m0 E( |5 x0 W4 k7 \' q
  328. STA APU_STATUS5 w( G2 d+ C$ j2 ]% f5 w- c
  329. LDA Music_Cur% o8 B. ]8 t1 F. e: N
  330. JSR Sound_Init
    ; I4 R' i8 C# N4 |  b* ]$ F
  331. 3 e* J/ k' |( j
  332. JMP MainLoop
    * i8 U# ^" A1 }1 `* O9 c9 c+ k
  333. + C# T1 S3 a4 u; b
  334. ;==============================
    8 N6 o$ Y5 `  y3 `3 G
  335. Time_Delay;延时等待4 l! F1 ~+ `' k$ v" m
  336. LDA PPU_STATUS. O  Z# p+ x; q3 _
  337. BPL Time_Delay* E4 _5 d5 S  H: @' {4 ^% s
  338. RTS
      h& m( Z3 a* E, |8 e% e1 m( ]

  339. - e6 u0 \- y5 s7 t0 s! q
  340. ;==============================
    6 l8 t3 a& c: ?8 n& J
  341. VramInit;初始化图形内存3 g& g/ e+ t5 o; w
  342. LDA #CHR_DATA_BANK: }& N2 B" o' U7 Q4 _( {
  343. JSR SwitchBankA000
    " X5 ^0 H0 N2 q# X. Z6 Q( W; R
  344. LDA #LOW(CHR_DATA_ADDR)
    , L1 [* r  A6 D2 _; H, T
  345. STA <Data_L
    ( y) B2 x# v5 V) {2 o  t
  346. LDA #HIGH(CHR_DATA_ADDR)
    ( }- }6 M' a9 R# [
  347. STA <Data_H
    + e3 C7 I+ y8 O+ }4 Y' Q
  348. LDY #$00
    0 Z9 v  P5 P( E9 W
  349. LDX #$20- D6 K$ Z  E2 Y. M- N! ~1 Y# _
  350. LDA #$00
    2 i  L* ]3 _7 t% m
  351. STA PPU_ADDRESS) C% N: n, F/ ^
  352. STA PPU_ADDRESS
    ! |2 l$ b/ J: k2 z6 \- z8 B
  353. VramInitWrite& R4 [* r; r/ v# O! E
  354. LDA [Data_L],Y- {% ~! O/ A" G4 ]6 U/ n+ P" [2 A9 S
  355. STA PPU_DATA
    8 V  ]9 d; b5 x3 W$ y
  356. INY
    ( `8 j7 ]: v" s  N# w8 m
  357. BNE VramInitWrite
    0 N/ g9 S6 A6 ~/ g  ?' x9 B; ?
  358. INC Data_H; H7 M) R* M6 o/ T- O
  359. DEX
    * Z( p1 u( y) W, p9 [- S% @
  360. BNE VramInitWrite
    9 o  f& S7 b$ i9 Q
  361. RTS
    : G4 L- t* ?/ h2 E0 s

  362. 7 O* t: R0 O# H; K& Q# m7 J: o
  363. ;==============================5 X9 z7 ~; ]5 R+ Z; f/ |# r) Y
  364. RAM_Clear;RAM清除) R4 q$ R) w* `6 J* _9 f
  365. LDX #$00
    5 y1 C/ p4 C( k% N
  366. LDA #$00
    # z% ?' G7 o% x( J7 S' T& A3 `
  367. RAM_Clear_1. i  Z' l$ A& P1 R3 t/ _
  368. STA RAM_Cln_1,X
      x" K  |1 a! v( f+ I1 d
  369. INX
    % U: `8 @6 F; X- R5 P% P
  370. CPX #RAM_Cln_1_Size; {! N3 \6 ?/ |) ]
  371. BNE RAM_Clear_1" Q# {" I" g  S5 i, F2 p9 f7 c
  372. LDX #$00
    , `  _) K! m2 b' a. T( o7 P
  373. RAM_Clear_20 `0 p$ c* |% a2 l7 t
  374. STA RAM_Cln_2,X7 d; o# T6 C' T: b# ~. x
  375. INX
    * ~" P- d) t  z1 e
  376. CPX #RAM_Cln_2_Size
    5 ]5 ^" {5 I+ o( `( s2 `
  377. BNE RAM_Clear_27 [3 ^6 M" ~4 l) V
  378. LDX #$00
    9 O) p! p" x/ S0 j& V
  379. RAM_Clear_3
    : x$ r9 T, G9 g- ?' l9 O
  380. STA RAM_Cln_3,X& u; |" }# ~* n
  381. INX
    2 e8 M- `8 y/ ^( j+ r1 X
  382. CPX #RAM_Cln_3_Size
    7 n8 }. R! _9 a
  383. BNE RAM_Clear_3
    - ~  Z) w& d7 b5 N
  384. RTS3 E/ x. v" ]1 s/ f! S3 ?

  385. & G6 z: J3 n# X$ U3 B! z! _2 r. M
  386. ;==============================
    4 o. Q0 q* _) F' o  P; o
  387. ;音乐切换7 j8 T) T0 {8 J6 a
  388. Music_Switch$ w! D" _/ H0 l, W& l- I
  389. JSR Key_Proc: d6 {6 W" w& _- @" z
  390. LDA Key_Once
    ! `6 A. i. A  ^) n8 V/ M  w* ~/ u5 E
  391. CMP #$10) D' w/ `2 N& P, K1 Y
  392. BNE Music_Start_SongStop
      B* ]  T: i! R4 }5 o% B" x( }
  393. JSR Music_ReSet
    0 j. J; _. x% k3 Z& E5 T- \

  394. 3 x; F" ]* H' i1 G5 t, _
  395. ;音乐停止
    9 b) @: _6 P; n1 e/ w
  396. Music_Start_SongStop5 W  M' [4 C% |% B' f% @2 E
  397. LDA Key_Once
    1 ]  b: x6 w- b! K
  398. CMP #$20
    % L& \/ Q- U3 s  a# O  [* e
  399. BNE Music_arrow/ \9 q  Q9 }- p2 ?
  400. LDA #$01; D) d; D+ Q8 r5 F$ f1 Z: \. W
  401. STA Music_State
    $ K- z6 g, M; F& F4 u
  402. JSR Music_Bar_ReSet9 t7 l/ O. M' e% j( R
  403. JSR Time_ReSet
    $ a0 i$ A* H. `0 V6 y
  404. JSR RAM_Clear; a4 _2 _0 h5 z; E+ x# s' v5 `
  405. JSR Sound_Clear: b& {7 Y1 U/ R/ E; Y
  406. JSR Music_Stata_Show
    1 k/ B& C7 G- ^% Z6 q& n- {
  407. Music_arrow
    ( R" R$ C, K4 {' y6 e4 |
  408. LDA Key_Once7 w! D0 ]/ p; }
  409. AND #$CF
    - {/ h0 [3 F+ T6 O1 W9 U0 c4 R7 u4 J- i
  410. BEQ Music_Switch_End: I6 k0 j; @$ a
  411. JSR Music_Number
    ! h( s  ]* |& g6 j. P
  412. JSR Music_ReSet
    % Y, ^5 n6 I* m& Q) n. D  L5 |
  413. JSR Music_Show! O1 J. H0 s! Q9 \
  414. Music_Switch_End
    ; Z) i& J( W8 y
  415. RTS
    0 j) {' u2 B! Z9 S8 t4 @5 `

  416. 5 ~6 T4 q. e7 t0 ^8 u! c8 V9 a( r# F
  417. ;==============================7 Q& ^- H. P0 @3 K* u
  418. ;音乐曲目切换2 b0 q# N# t2 I4 \
  419. Music_Number
    / B  l; E! c: ]2 s
  420. LDA Music_Cur% l) `5 ]% Z* O) `& j( |
  421. STA Music_Last- A- l* j: O. B* v. d. x
  422. Music_Decrease
    ; J. O2 D: P" ?+ e1 ~, p8 W% x
  423. LDA Key_Once# k# Y2 o* G5 C  e; p
  424. AND #$42) b3 `& i- r$ Y: w
  425. BEQ Music_Increase- f# }! J0 |" Q- o
  426. LDA Music_Cur. m* D& @0 l- i' y, |
  427. BEQ Music_Increase
    0 ]. q- T9 V4 J, l1 v5 o# }
  428. DEC Music_Cur! P0 `9 p- O: |1 f
  429. Music_Increase
    & x8 H& h+ J( t
  430. LDA Key_Once; f* d( M$ e7 q' z' ~$ I) @5 y
  431. AND #$81
    6 A  M  t0 {3 C; q8 Y0 g$ w
  432. BEQ Music_Decrease_106 V/ a! r, z$ ~- `) T
  433. LDA Music_Cur
    6 r$ k9 K, |" S: _  c1 X$ r! a7 ?
  434. CMP #Music_Song_Total-011 k9 X" a1 H  D9 g2 H7 e
  435. BCS Music_Decrease_10
    ( l, R( C, }( @( Q$ x
  436. INC Music_Cur  m, S# O$ C- S. J$ @. {- [7 _& ~
  437. Music_Decrease_10
    - O2 ?2 L: E, y. `8 v
  438. LDA Key_Once
    0 [3 q7 n0 ^8 c
  439. CMP #$04
    3 P. P1 Z' z0 E6 q$ }
  440. BNE Music_Increase_103 }/ {  ^1 ]1 z! i
  441. LDA Music_Cur" c& q9 T4 J" Q- v' }% a3 g. Y
  442. CMP #10
    9 m) ?+ Z0 Y' A0 D2 G, S' M" @
  443. BCC Music_Start_Song_Min" B% J) P5 ^. K% l8 ?0 ~5 ?  R
  444. LDA Music_Cur' k& }: y" E7 B/ \
  445. SEC
      s& v9 z* Y6 K+ W2 e
  446. SBC #10
    3 J, q- {9 Y0 z/ k' L& e
  447. STA Music_Cur
    " u3 s" n# H4 @. P+ W0 j' E
  448. LDA #$006 @( I( w* O8 s9 W, l. ^
  449. BEQ Music_Increase_10
    4 F& A2 H0 l6 t+ i9 O! P' F, a
  450. Music_Start_Song_Min
    ' A: M7 n5 {" X; c5 L* m, ^% x
  451. LDA #$00! D$ S2 j4 U* Y8 o
  452. STA Music_Cur
    : _' P0 \- M% p& L% a
  453. Music_Increase_10
    * V' T8 F1 Y" f* l# {" }
  454. LDA Key_Once
    7 V9 i+ Q& }3 l; `2 I% V
  455. CMP #$080 U9 {) p6 b/ Z! ?$ O, d
  456. BNE Music_Number_End
    3 B4 h: U! h* }  L. e1 S8 B0 s* ]; Y# n
  457. LDA Music_Cur
    $ H1 W8 b9 j6 W, [; J  ~2 O1 T: c. r
  458. CLC
    5 o, C( y- J  e# b+ J, c
  459. ADC #10% c  d& O' `9 K# q! L
  460. CMP #Music_Song_Total-011 r3 o0 _* ?1 G; P; m0 R- O7 R
  461. BCS Music_Start_Song_Max
    9 \  @! G. m# t0 c
  462. STA Music_Cur, {! [0 E- ]! m1 ~- ?/ q2 r
  463. LDA #00! z1 P0 m* T* B- P' o" O' A
  464. BEQ Music_Number_End
    ) H9 g$ {) M' M: [8 y
  465. Music_Start_Song_Max1 w4 K) k2 x' O+ D' ~' [. t$ P
  466. LDA #Music_Song_Total-015 }. A7 d; J) A7 g1 a& F( t, @
  467. STA Music_Cur
    9 d+ f  E% p$ q2 i
  468. Music_Number_End$ c: D( M( u$ G( ?" P
  469. RTS& X5 b% R# F; h6 T9 z) E3 f. T( O% q
  470. $ z' N! {3 N: L# z" b
  471. ;==============================
    : [4 q5 p1 A  Y
  472. ;音乐重设4 A, @1 C! B; A6 ^
  473. Music_ReSet+ T- j7 r6 m/ m% k& m6 |
  474. JSR RAM_Clear
    ! e$ J0 g7 G& o- ~% w8 C/ s. D# L2 R
  475. JSR Sound_Clear
    8 `7 a* W( W( _4 [& @* V
  476. LDA #$1F- m( O$ L% g6 H$ n9 ?
  477. STA APU_STATUS8 {( K! C3 q6 u% O& n& u
  478. LDA Music_Cur1 t3 O/ ^, s: Q9 M9 H) A& c$ @
  479. JSR Sound_Init
    + s3 ]2 u4 r- Z- a) s4 x- ~
  480. RTS
    & |4 Q: Z# H; V
  481. 4 e% y9 v# A4 z- h! ?
  482. ;==============================# H7 ~! u% T% n
  483. ;音乐端口清除
    2 o* t1 N  P$ `9 Z" t1 K( B% z
  484. Sound_Clear  J2 l+ p  Q$ @3 ~' Q. d% o$ e
  485. LDA #$009 N% {4 m0 H7 ^! ]& l
  486. STA APU_STATUS$ e# ?% j" R1 I/ I1 J
  487. LDX #$00
    2 X  m( M" q* V/ h. m5 @
  488. Sound_Clear_Start7 f0 |$ k/ x* A6 R) V: Q
  489. STA $4000,X
    # z0 c, s' o, S9 D4 Z& K6 R; `
  490. INX
    9 K" g3 p, w5 W3 `+ n
  491. CPX #$14
    # i* O8 ~# _2 o% E
  492. BCC Sound_Clear_Start
    . s( w4 }5 Z2 p+ b2 ?* x/ S
  493. RTS( k% ~; z! h% v9 \7 X

  494. ! l) \8 C; p# Z
  495. ;==============================2 D; s9 `1 n6 @# D) D( t
  496. ;按键处理3 a9 i8 o6 j. z7 }) ~' ]
  497. Key_Proc
    3 ~2 y3 i5 T/ T% `* T. Z4 N
  498. JSR Key_Scan
    $ e: X* r+ F& @3 o4 O
  499. LDA Key_Keep
    2 h) u; W) I, h4 I0 ~
  500. STA Key_Temp; p9 z2 c4 ]  b# G
  501. JSR Key_Scan
    : ?. v% ?2 r: H; q" Z" D, C4 s
  502. LDA Key_Keep) C  n( x' P  V5 }
  503. CMP Key_Temp
    . G; S8 Y9 x* @6 J/ x
  504. BEQ Key_Get_Once
      n8 ]" e8 a$ ]- X5 R0 ]8 E7 e7 S
  505. LDA Key_Kemp$ R: s; J% H+ y- M& M/ v5 R  G
  506. STA Key_Keep
    9 O1 t0 T$ m  F2 G7 Y
  507. Key_Get_Once
    & y4 U1 D6 n6 g5 A
  508. TAY( w0 h4 Q0 p# h6 y& Y( i3 y# U8 Z
  509. EOR Key_Kemp9 r7 r- c! \+ w
  510. AND Key_Keep. y3 H5 `" {3 v1 n9 L
  511. STA Key_Once: ]- D6 W6 E; h1 a
  512. STY Key_Kemp4 S" U! q, s  x6 w. v7 Y6 a/ ?
  513. RTS
    : x+ L9 Q) V! Z: a# }. ?& L" s
  514. ;------------------------------$ k1 x( n4 w; M  G$ |$ L
  515. ;按键扫描
    9 t' ]/ c( f0 j1 O- I4 O: P  x
  516. Key_Scan+ h+ _: P0 D% _) ]) @! X* x
  517. LDX #$01- l  s! P& Y# \% J& F$ E1 k! o% a
  518. STX JOY1_FRAME
    ; T. ~$ i8 ^8 E
  519. DEX
    ( A0 u& _2 l0 p
  520. STX JOY1_FRAME% Y9 ^- G( R7 N" y
  521. LDX #$08
    6 \6 K0 }+ u9 e0 X
  522. Key_Value( ^5 [  e# \4 H6 Q
  523. LDA JOY1_FRAME
    ) `6 ]' ^% D; |& O
  524. STA Key_Getv
    ) C  v$ M$ t$ W* V' c
  525. LSR A/ j8 l* R0 P) R& d0 k
  526. ORA Key_Getv
    : X' i7 b/ u8 {" [
  527. LSR A
    : _( Y/ }& q& b. U& X; e
  528. ROL Key_Keep( g" }- r; ~1 T
  529. DEX# i, c, K- I( @7 |
  530. BNE Key_Value1 b9 D: f6 ^/ W7 @. d- C
  531. RTS
    + g0 n& R/ r( _  T* ^. d2 A7 }

  532. + _) F/ b0 r& e9 Y- P1 {+ W' D
  533. ;==============================
    # x0 U5 ]8 T3 T6 K7 W
  534. .IF SOUND_BAR_SHOW_ENABLE
    8 g; ?* b# f3 p/ Y
  535. ;音乐条显示
    & a2 |" u4 {  {1 E+ u
  536. Music_Vision4 Q& l: s" N. z# Z( F" C2 m0 N
  537. JSR Music_Animation; x) ?4 A3 A. j2 m2 i: D
  538. JSR PPU_End* E0 p0 V& M( P! Z3 A) U' Q
  539. RTS% j1 {) ^  J4 p" G$ P# b/ F
  540. ;------------------------------
    6 W- _1 N8 i$ _9 k
  541. ;音乐条显示处理3 R3 p  k4 A4 V, [" [: N( x
  542. Music_Animation
    & D6 k: N9 @7 p+ ^3 ?, x+ q
  543. LDX PPU_Cur
    $ G; j5 K6 W+ D# Z5 W1 Q* x! @
  544. LDA #Mode_Line2 F, A, t7 ~: O. g" ]# U' g/ w
  545. STA PPU_Addr,X. c, E1 F! K2 ^( y2 Q5 g$ M
  546. INX+ N0 o# e$ N$ h5 h3 b2 s
  547. LDA #HIGH(Sound_Bar_Pos)
    * E$ G) C8 k8 D( J0 q
  548. STA PPU_Addr,X
    # n" J: v& p2 c3 ?% F# o
  549. INX
    6 o8 _; W/ I$ @; |7 `/ e5 d
  550. LDA #LOW(Sound_Bar_Pos)
    0 c1 F: Z+ x8 P8 p+ ?6 p
  551. STA PPU_Addr,X
    ! i( t& \- V5 I0 [
  552. INX. f3 Z# R5 F0 g" P+ E5 ]
  553. LDA Sound_Bar
    7 G. y6 D9 U, X6 B$ |
  554. JSR Volume_Convert
    # b; [" g0 @9 j0 e* p9 |
  555. JSR PPU_Return9 P8 l9 x% s+ e) l+ `: o% Y
  556. LDA Sound_Bar+$4
    " A8 Y2 g2 i4 h) e- Y
  557. JSR Volume_Convert
    ( ]+ ~5 N9 b. [8 d& d
  558. JSR PPU_Return
    & q3 [' `2 V# J2 a+ Y, }
  559. LDA Sound_Bar+$8: v: a! x- F0 w6 D0 K7 O
  560. JSR Volume_Convert_Ex* `- B8 A: d) d) g* }( T
  561. JSR PPU_Return' C( E# U% |4 X) y/ n
  562. LDA Sound_Bar+$C
    3 t3 i' D  `# M% x' j% B2 P
  563. JSR Volume_Convert
    - ^5 q  ?3 S7 ^9 l1 k  j
  564. JSR PPU_Return
    8 T( t3 H& g7 u# S" l5 }+ V! r' y
  565. LDY #$10
    8 t; \# v: Z6 L/ v
  566. LDA APU_STATUS
    6 m1 W$ T! `+ f/ q  N0 \
  567. AND #$10
    , L" m1 a8 U; |+ v% S
  568. BNE Volume_Count( m* q7 ~( e: z& U1 ?
  569. LDY #$00+ g$ ~* J$ |( G
  570. BEQ Volume_Count
    3 o6 i4 K* K6 g* b
  571. ;------------------------------0 L' F* s2 z' ^" R( l7 ]; H7 ~
  572. ;音乐条处理# p/ q: R8 x# X$ f. ~' f
  573. Volume_Convert_Ex
    " n2 h0 H* ~* K2 c* _1 \
  574. AND #$1F
    ( k9 F  e2 e+ `% k+ W+ Y( z8 H
  575. TAY
    3 M) K- O* w7 d$ U5 p3 i' C
  576. BNE Volume_Count
    # \4 {+ }5 u( B$ d; h
  577. Volume_Convert$ A) f' }9 `$ o8 ^8 ~# g! ~% t
  578. AND #$0F
    2 U, n3 c4 _1 f1 t& d
  579. TAY
    7 i4 ?( o$ @) M, O
  580. Volume_Count
    ) c0 `' r3 X5 k, t
  581. LDA #$08
    / ^# K- b5 E/ O- x' p/ E' Z& V
  582. STA Sound_Bar_Cnt
    6 c) a, t. B9 r9 a$ m
  583. Volume_FILL- J. |: Q, d+ J% R6 s3 s6 J
  584. DEY& y4 q# ?  W. |2 u6 w
  585. BEQ Volume_Half8 B3 v0 }- U  B9 m7 C
  586. BMI Volume_Empty
    0 X$ }$ q+ e! e. N0 R6 q/ C( f
  587. DEY
    ! x5 Y. W/ Z8 o
  588. Volume_Full* m) _7 I6 e6 [
  589. LDA #$16: E& T" s% O4 ~! v4 L6 l7 t
  590. BNE Volume_PPU) ~" \4 L- p3 g9 [; Y
  591. Volume_Half
    8 w7 A8 J& O  L, Z8 C) i: j* B, l& W8 w
  592. LDA #$152 a2 B$ I  s, S& _& U) i/ M, k
  593. BNE Volume_PPU! [( i6 G/ X* V7 Z7 x) c6 i
  594. Volume_Empty
    $ U- O  V1 q) ~% j
  595. LDA #$14- D" u2 g8 j, r4 o: Z
  596. Volume_PPU  q3 C+ {5 j% P! ^. x  r" H
  597. STA PPU_Addr,X# R: X( `" C8 u" l% e, i
  598. INX
    $ l6 k0 a/ ]( W
  599. DEC Sound_Bar_Cnt- m' J$ m6 }# p. O
  600. BNE Volume_FILL
    5 L) C8 Q. R5 S; B) Q
  601. RTS6 K2 @+ p4 _5 p) ]+ p
  602. ' R+ T( B# t0 I& t
  603. .ENDIF
    5 {4 l6 X+ _8 [

  604. ; `5 R% C! }0 I0 J$ c
  605. ;==============================
    6 K) a" B% K0 ^' t  r
  606. PPU_Addr_Set;PPU行开始# ~2 D  O5 z& u8 Y6 s
  607. LDX PPU_Cur7 J- ^  |* ~1 F
  608. LDA #Mode_Line
    - B- H/ ]# Q. j* v2 `
  609. STA PPU_Addr,X7 z) ]$ }+ y. r4 R& t: G1 a8 V1 Z
  610. INX
    " D. x0 T7 }  g$ k  R% J
  611. RTS
    5 d& A/ D) G( j# f

  612. 1 M" w- P( N$ B" {: Q4 q& O2 K
  613. PPU_Return;PPU转行
    2 `# G" }' k4 k
  614. LDA #Flag_Over  t+ a/ O- W! F) T
  615. STA PPU_Addr,X
    4 R4 F8 `8 k! i! u7 K( `/ F7 ~! C
  616. INX
    * M6 d( h! {! X) w
  617. LDA #Mode_Return6 v( e# |9 s2 b1 ?, @
  618. STA PPU_Addr,X
    ; W$ H7 S8 ~3 y' o1 M
  619. INX  j! Y8 Z8 t5 \% N; R8 R, ?8 E
  620. RTS# a( v  `+ N* _) A( i& p
  621.   |/ i1 x: U1 R$ l: s
  622. ;------------------------------1 k% K" I( W7 {) D. z# D
  623. PPU_End;PPU结束
    , A2 r& I% i) F- s" K
  624. LDA #Flag_Over
    ) o7 E! c& B. l5 B0 }
  625. STA PPU_Addr,X( k2 e/ f& I$ G/ i; g( v
  626. INX
    : l0 d/ @* L' Y) e
  627. STX PPU_Cur
    * s. K1 m7 ?  K+ P- c5 I
  628. RTS
    ' h; z. W% _/ f8 T2 K0 W
  629. ;==============================
    ) _0 W& k+ a1 L  z' J! {
  630. Mode_Line     = $FD    ;新起行模式
    5 W8 ?& h! x9 e- p; }+ E, O
  631. Mode_Return   = $FE    ;转下行模式
    , d! X# T( c3 b/ u
  632. Mode_Clear    = $FC    ;行清除: A5 L1 Y# z$ n
  633. Mode_CntLine  = $FB    ;行计数写入# U6 X* T8 u8 U6 I  l0 j5 T
  634. Flag_Over     = $FF    ;行结束标志
    5 E6 T6 L) ~) L5 P; d; n, }' r0 [
  635. 0 D: m. w6 l. \  Z- h' q
  636. ;------------------------------6 y3 L, G" r  n( ?/ m% F' B' F
  637. ;PPU处理
    : ]% g) x0 F$ M& h" m$ s
  638. PPU_Proc
    ; ?  a( c0 @+ ?2 G# v# l
  639. LDX PPU_Cur' k" }( h1 C1 a4 X0 W' {
  640. LDA #$00( T6 z' Q, c0 f+ E. j
  641. STA PPU_Cur
    3 ^9 y0 {& J) E7 j; G0 {
  642. STA PPU_Addr,X# v9 G; _: ]1 P! G3 e  v8 E
  643. LDA PPU_Addr
    4 j& c6 P( p* h+ X  i0 s: k9 d: T
  644. BNE PPU_Proc_Beg
    % L/ Y+ A# V, _6 C
  645. PPU_Proc_Ret' o% j# ?: v6 C, S  ?! v6 U( p
  646. RTS
    , W( X6 X7 [2 V/ g3 R7 w  ?
  647. ;------------------------------
    ; j) c7 M6 @! M2 r/ A, x
  648. PPU_Proc_Beg  ;处理开始2 n" I6 U- d% i+ f/ J
  649. LDX #$00& _) H$ V3 p4 Y* L' |) @; Z
  650. STX PPU_MASK' O- v6 e$ J+ j) N; v& v3 U
  651. ;------------------------------
    : L- v8 O5 S% B' U  G$ i) x' i
  652. PPU_Mode_Select  ;模式选择
    9 c9 j5 r5 \, p8 U; x
  653. LDA PPU_Addr,X
    & g. I5 g( z8 `8 n
  654. CMP #Mode_Line' F" W) t; l7 x# ~/ F( j$ ^. C9 M0 J
  655. BEQ PPU_Mode_Newline
    ! ?- Z1 k  _+ I3 p$ l; @
  656. CMP #Mode_Return' d- F* l3 b4 w& S
  657. BEQ PPU_Mode_Return: Z  y- D0 @7 ~8 p: m! Y5 C9 a8 E
  658. CMP #Mode_Clear
    " K" F+ b. V1 t, C! m
  659. BEQ PPU_Proc_Clear! |  u/ o6 d" E: K5 d0 [
  660. CMP #Mode_CntLine6 Q$ s8 s5 \+ m5 x0 D
  661. BEQ PPU_Proc_Cnt_Line
    , w$ B% }  P# Z
  662. RTS
    6 h4 F5 k- M6 ~/ J' ~1 p
  663. ;------------------------------0 J% o; o- o/ A# p+ t1 A
  664. PPU_Mode_Return  ;转下行模式
    $ D3 o/ c/ T( x- i, Y
  665. LDA PPU_Addr_L& }) x* e# X3 ~$ M- U% r
  666. CLC
    9 Q: H5 `. Y  L
  667. ADC #$20
    3 p; l1 r4 ~: x
  668. STA PPU_Addr_L6 X8 W! M9 t# S) h
  669. BCC PPU_Return_End' u4 S% g' X7 h  F% p2 _2 w" k
  670. INC PPU_Addr_H
    $ A) @& |! F( P1 @) A
  671. PPU_Return_End( R- Q4 z$ C% S$ [( e9 N
  672. JMP PPU_Set_Increaser8 Q% Q  n: e% N8 D$ i8 o
  673. ;------------------------------# R4 @0 G; @, F. X+ @
  674. PPU_Mode_Newline  ;新起行模式, G1 O' ^" s0 H/ ^
  675. INX
    ' a; T9 k6 y4 ?6 ^
  676. LDA PPU_Addr,X
    6 e8 K- @2 Y2 u1 q
  677. STA PPU_Addr_H
    % O* j- E! l0 a
  678. INX
    ! ]( o* T/ c, Q2 g, ]! x
  679. LDA PPU_Addr,X. p% Z# `# d/ l, [) P" i
  680. STA PPU_Addr_L" u, L) v5 X* a+ N4 u2 c
  681. ;------------------------------
    + o8 Y* d9 U; g5 H8 \# D
  682. PPU_Set_Increaser   ;设置写入地址
    8 K. q7 Z! i. r/ E0 c
  683. LDA PPU_Addr_H
    7 O& U! i* m- u7 f- B2 B
  684. STA PPU_ADDRESS
    % R- h/ W/ g! j5 _1 f& ^
  685. LDA PPU_Addr_L
    4 |& k; Y3 j. P9 d) d7 @
  686. STA PPU_ADDRESS
    ! x$ q- L9 x* D# v* o6 x$ p
  687. ;------------------------------
    - O8 ~5 _8 e& D: I
  688. PPU_Write   ;写入数据! }. l' u) Z" g5 ~& _, [. N/ h* K
  689. INX* G) o9 p9 Y: m; k9 }  U+ ~' H5 B
  690. LDA PPU_Addr,X
    9 Z) k) i, L3 J/ _0 B$ g9 q
  691. CMP #Flag_Over
    9 S# Z% S5 Q! W5 j- m' `, \7 G
  692. BEQ PPU_Proc_End
    9 G7 q' k8 y' w4 R% h, `6 G, D
  693. STA PPU_DATA8 Y  r3 N2 [: @
  694. JMP PPU_Write
    - h) w, a* C/ _+ Z: ~3 {
  695. ;------------------------------
    6 d/ J  w/ Q$ l& h
  696. PPU_Proc_End  ;单行写入结束
    2 u# i6 a0 s' |3 P
  697. INX5 Y# d; D9 R( v. X& _
  698. LDA PPU_Addr,X
    - V) x. \2 _" y5 `% c
  699. BNE PPU_Mode_Select
    + Y+ B% N0 X3 b; f0 ^
  700. STA PPU_Addr
    * d' }2 `# k. w4 c- Y. p
  701. JSR Update_Palette_Color0 u3 y( n0 g, w# {
  702. LDA #$00
    9 |' [1 [( ]8 F" L8 r
  703. STA PPU_ADDRESS
    0 U& u2 f1 Q+ b+ v8 j, s
  704. STA PPU_ADDRESS: o5 L- |% C( r1 _5 P" z0 Q
  705. STA Show_Track_Name* w$ T! P0 T/ }9 A; X- M
  706. LDA #Scroll_X' l" |) p5 C) h( i( \5 z! t% Z
  707. STA PPU_SCROLL
    8 e( M$ y: k8 k2 F; ]
  708. LDA #Scroll_Y
    ; D- G! J) f* _: e
  709. STA PPU_SCROLL
    ' `7 _. [. e( o, H8 w0 J- N
  710. LDA Screen_State$ A: n6 ?3 A8 D! N+ @
  711. STA PPU_MASK
    % X& j8 r5 ~9 Q) _3 _5 Z* q+ E
  712. RTS
    0 k$ f* q: [! F/ v! b
  713. ( s7 d4 j+ X) {, n
  714. PPU_Proc_Clear
    9 o2 E# ?: [) {# c
  715. INX
    0 R2 ]- N$ B3 x& x' d
  716. LDA PPU_Addr,X" j# G4 e8 D* K! W0 u' h) }4 E' k
  717. STA PPU_ADDRESS+ m( |0 P3 `% @$ E" R
  718. INX. K9 s- x! Q/ n, R
  719. LDA PPU_Addr,X" L- u+ @9 T# V" f$ E* e
  720. STA PPU_ADDRESS& t  a# F6 A9 N* \8 _  N" |; o
  721. INX
    5 k6 q# s$ c) j  m
  722. LDY PPU_Addr,X; v) ^( d5 r) h) q; S
  723. LDA #$007 k5 o& E. m! M& t
  724. PPU_Proc_Clear_Write! a8 J8 t! r# e7 K# u2 e  `
  725. STA PPU_DATA
    . V9 ~. r; N2 |, P6 X4 g
  726. DEY
    ( k$ ?% K! \( q; P7 C9 M7 ]  o
  727. BNE PPU_Proc_Clear_Write$ X+ Q, C( o, R) l
  728. JMP PPU_Proc_End5 X! u1 L7 z4 N6 O4 f

  729. 2 V9 T8 o3 Y) c( y2 a& e! x: E% d
  730. PPU_Proc_Cnt_Line
    6 F) d: O* m; w4 \1 E& o9 x: O
  731. INX6 E3 m  R$ m: Y7 a# ^% r7 a
  732. LDA PPU_Addr,X
    : p/ S0 H) t( n5 j8 Q
  733. STA PPU_ADDRESS
    8 ?6 q9 `0 W8 {1 j2 x
  734. INX& Y) T5 A/ [% B. K" t& J7 E
  735. LDA PPU_Addr,X6 Q* r% H. a% P! T. D
  736. STA PPU_ADDRESS4 U+ h# r# p8 q5 k7 ?
  737. INX4 }: q  _& |% S0 m2 v* L
  738. LDY PPU_Addr,X& R* b& E+ r  w/ E
  739. PPU_Proc_Cnt_Line_Write
    + F) a8 ]: Z3 X; j1 o- W
  740. INX
    2 }8 G0 c$ ?4 Q7 `1 J* @! R' e
  741. LDA PPU_Addr,X! [* ], `; ~" ^( z4 C8 |" g. h6 F
  742. STA PPU_DATA3 J( k9 D3 M! n1 |& e2 `. h
  743. DEY
    . \4 ?9 V9 p3 i- v
  744. BNE PPU_Proc_Cnt_Line_Write
    4 C& l/ U( H( _6 K, Z
  745. JMP PPU_Proc_End2 A& p+ Q8 g# A2 @/ m1 ~& i
  746. 2 I7 D5 L1 F) m- ?/ u* ^
  747. ;==============================1 Y5 P# C6 n- A$ I  Q# N3 w
  748. HEX_To_Dec;十六进制转十进制
    ) q4 j6 q# b. [+ h5 p" O. k& B
  749. STA HEX_Data0 H5 u3 w* T9 g( L* d: d  R
  750. PHA
    6 C: I7 v' w" Y7 \/ P
  751. TXA
    9 d: q% i  R" C4 t3 K% i
  752. PHA4 v* l; R4 V4 Q0 @
  753. LDX #$00- l. x* P6 m4 n, t, x" E
  754. LDA #$00
    5 Q: t5 x! Z: ^8 y" T
  755. HEX_Cln9 W4 Z0 c4 V5 D' Q6 o2 z* J+ q  m& ]8 q
  756. STA DEC_H,X
    ' D+ L% I6 T7 w7 q0 S
  757. INX
    1 }" y7 O5 e4 N: f
  758. CPX #$03
    ( n$ z- F" x7 U" Q6 `
  759. BCC HEX_Cln# I* c1 ^5 V- O" ^" ^/ x$ s
  760. LDA HEX_Data
    ; R$ v' I% [* H' a4 O
  761. ;------------------------------
    ) S  q: u1 \" A/ J( a
  762. HEX_100. i; b6 J2 [' v7 O1 l& o4 j
  763. CMP #100+ H8 Z8 z3 N' ^% L9 m* S: b
  764. BCC HEX_10
    4 }! B( w; W# w" p
  765. SEC- H( {. B1 u7 p9 d
  766. SBC #100! v  V9 t4 ?) t0 ~
  767. INC DEC_H$ b, @3 [1 x) L# b
  768. BNE HEX_100
    9 X1 E' E' d# d6 b% d
  769. ;------------------------------& T; [6 Y( K/ K/ `' e1 ~
  770. HEX_10
    3 y3 C6 L! ]7 ]2 X" Z* U% f& w
  771. CMP #104 j4 o9 ], ?- ~6 r$ f+ r, @
  772. BCC HEX_1' z9 Z& a7 x, v1 i
  773. SEC) g/ q1 b! u( [' R
  774. SBC #101 e% Q' C2 `4 c# J  K' |1 H
  775. INC DEC_T
    " U0 |- z0 V. s& y- D- `3 {
  776. BNE HEX_10
    ! |5 q& k, a# O$ Z3 u& b/ ]$ k
  777. ;------------------------------
    + J( Y! ~5 f4 r4 K
  778. HEX_11 L" `8 T4 I# \) R6 A
  779. STA DEC_L
    : t1 w3 c1 H' |
  780. PLA
    # e% S/ Z0 a. h3 {( [$ p
  781. TAX, |1 N4 [8 h5 W2 C8 z9 R7 p
  782. PLA, W6 j! T" K# z2 Q" [& W" V
  783. RTS
    * b! q. u; G6 r$ V: m. Z$ [
  784. & ?( W: g& g  \" f8 E) [
  785. ;==============================
    * o* q4 v+ I1 k* L
  786. ;音乐曲目显示! E# b9 F& f8 l0 ?8 X$ e1 V# m
  787. Music_Show+ {/ |$ Z, F5 k
  788. LDA Music_Cur$ B1 ]0 z2 Z9 j, z$ W2 T
  789. CLC
      z% T6 `' j/ P5 N( a
  790. ADC #$01* Q6 R7 ^9 K! c7 m# y
  791. JSR HEX_To_Dec2 u4 R" j) g: P2 ~4 J5 Z3 r, b
  792. LDX PPU_Cur
    / t% N  g4 U+ p7 D2 [% I8 H
  793. LDA #$FD
    6 Y! r- p* P( R- ?: B/ {9 s
  794. STA PPU_Addr,X; J0 i6 _3 ^4 [- I5 q, i
  795. INX
    6 Z% N, u3 O0 p9 t) y' F- d
  796. LDA #HIGH(Play_Index_Pos)
    + Y, l: S5 w3 u0 E% a8 Q( i8 Q+ Q
  797. STA PPU_Addr,X
    ; T8 j8 k& D9 Y) M. e# H/ ^- h3 \) S
  798. INX1 {2 b" `- A/ r! W; Q* N
  799. LDA #LOW(Play_Index_Pos)
    5 ]" i2 O" u0 e& T
  800. STA PPU_Addr,X: G/ Q# o2 b! r+ V) Q9 k
  801. INX
    ; ^# V% S1 J) ?! n
  802. 9 @, E' {# o; `3 J; d( r
  803. .IF Music_Song_Total > 99
    0 e( V% R- B8 A9 T5 k7 g
  804. LDA DEC_H
    % U5 ?3 L" a4 Z9 _; |
  805. ORA #$309 o+ C" \2 W  ^$ [
  806. STA PPU_Addr,X
    0 ]% @8 M2 |, S8 K
  807. INX
    - c' I( \& G8 h8 k1 \# a! m( N# k
  808. .ENDIF! i+ o) Z# a9 h* g1 H
  809. : H/ m% C$ L8 e4 c0 U8 p
  810. .IF Music_Song_Total > 9
    % [* G. g* F; `! g# ]7 w; M
  811. LDA DEC_T
    # Z) U& w0 O' _& C
  812. ORA #$308 T& k5 @( q$ G
  813. STA PPU_Addr,X
      r% w- q6 H8 }! L7 w$ c% i0 f  Z
  814. INX' t- ^4 a: \* F/ E# Z; }  Z6 M
  815. .ENDIF
    + h# U: i5 n& ?9 z4 S8 U& q! X, z- z

  816. 2 k! g; |4 D+ p$ @( \3 @
  817. LDA DEC_L% Y& [$ v/ h( m: U
  818. ORA #$30
    3 l) G+ O+ b% U8 l1 L( ]1 o
  819. STA PPU_Addr,X- n/ M/ H. Q+ i1 I
  820. INX1 [# ?* D; p  q( a- \! x$ v
  821. + L1 R, i. o. r" W5 F
  822. LDA #'/'
    + l3 R! w8 I' D  q8 j) D; z4 [* h
  823. STA PPU_Addr,X
    % V. I% o8 z6 A, h8 z
  824. INX
    , A6 a) z  A: h, V* ]) x6 }
  825. Music_Show_Total
    4 m5 t5 K$ [: F) s) Z  j' F" u
  826. LDA #Music_Song_Total
    . P0 y" S; b- W! Y' q
  827. JSR HEX_To_Dec6 l7 B, w1 a7 d$ ?
  828. $ r- V! D5 M- P# {
  829. .IF Music_Song_Total > 998 m% N# ?7 D( \# ^1 R1 Z
  830. LDA DEC_H7 \! A4 D6 W' F0 g+ ^) }
  831. ORA #$30# H- L3 f9 L, c: B4 {
  832. STA PPU_Addr,X- n! k; l: x7 O0 H! @. d& D8 U
  833. INX
    ) W! `$ S1 z. h0 n
  834. .ENDIF( i9 `! {' h, a8 d. p7 n: c

  835. 7 f9 q3 w7 t1 N) Z+ I% k# z+ {
  836. .IF Music_Song_Total > 9
    4 H; C% o9 \% Q2 w
  837. LDA DEC_T
    & ?6 G+ R! V1 @) A3 L
  838. ORA #$30
    - z' w" }7 r2 ?+ u0 V" ~
  839. STA PPU_Addr,X4 a6 j8 i1 G! N
  840. INX
    1 Z; p  }+ P- o4 u- W
  841. .ENDIF
    ( o! N& m. I3 x; M4 s+ D6 ^
  842. ) M8 {4 ]  t' I4 }( N
  843. LDA DEC_L1 u$ a$ d5 M  S( ]6 Z* S/ @, T2 K9 H
  844. ORA #$30/ c' P7 }9 W' ?8 w4 E
  845. STA PPU_Addr,X
    + A. u1 P" J6 O
  846. INX2 U* |( s9 U9 g6 p' K" b; g2 B

  847. $ o6 `8 y7 x- D
  848. JSR PPU_End* G3 i  i: R( c0 g) j- o" k) N
  849. Music_Show_End
    ! {: P' O( s+ G
  850. RTS
    2 C! @3 r: o/ y6 [9 k$ G3 d

  851. ( C* j6 Y  {$ X! J
  852. ;==============================
    # s0 ?! U4 I# i2 g% q
  853. Time_Show;播放时间显示5 p2 R3 F' t! A6 z% f  D
  854. JSR PPU_Addr_Set
    2 P9 \8 \! G+ ^1 A5 e5 g
  855. LDA #HIGH(Play_Time_Pos)8 j7 B4 D% k( l7 s; k
  856. STA PPU_Addr,X- o' U, V# w4 E
  857. INX, a: r' t+ @1 k" n/ O; Y+ w
  858. LDA #LOW(Play_Time_Pos)
    0 f! D9 `" p, u% i
  859. STA PPU_Addr,X
    ) A% n4 P/ X7 x: b3 z" N
  860. INX
    3 B# ?. V9 l4 X( T# O4 I  a- a
  861. Time_Show_H! c  v; a! Y0 t
  862. LDA Time_H
    8 h. D$ _0 }% d0 d7 c
  863. JSR HEX_To_Dec
    2 K  \: _1 _. U# W7 e' B; a6 \( d
  864. JSR Time_Digit: |8 `6 Z' N7 U8 u0 g: q2 R
  865. LDA #':'
    , k, b5 ?1 C2 K" P+ H, x* O5 [5 b
  866. STA PPU_Addr,X# g/ _5 r( B+ y: ^1 M' Q4 q
  867. INX
    0 U6 \: K+ d$ L/ ^, x2 u
  868. Time_Show_M: K: f' {2 `: \: c* g
  869. LDA Time_M( K' m' L$ I4 T" e- ^
  870. JSR HEX_To_Dec
    6 w" D4 R6 F4 Y8 M2 m
  871. JSR Time_Digit6 O$ O, _% g' b
  872. LDA #':'
    1 s  P, v" ~  D  Q- U- z  L/ w8 w6 q
  873. STA PPU_Addr,X
    0 }( _( p+ b$ w% W$ H' u4 Y
  874. INX$ B* P) Q, e. j/ j, T
  875. Time_Show_S4 K6 A- C& W! ?. Y5 q
  876. LDA Time_S/ ?' U2 d$ ~; m6 F3 \
  877. JSR HEX_To_Dec
    7 k( K) O- `( s" C, X  K
  878. JSR Time_Digit
    7 |' u0 w' B% M; Q- n0 N
  879. JSR PPU_End
    . P# h2 ~' Y( `3 S8 o( u" L
  880. Time_Show_End
    4 q1 W0 H5 X$ v
  881. RTS) r) A1 N" r" u6 I5 G; L

  882. ' Z  |8 I, c, p( W! g
  883. Time_Digit2 C* `1 P5 X% V& k, s* s
  884. LDA DEC_T& x, ~0 I. p' f$ e
  885. ORA #$30/ D1 l/ {0 r; d( F: ]6 f3 T5 N$ r
  886. STA PPU_Addr,X
    5 {6 p1 f! M+ P/ N& E( J
  887. INX
    8 d/ Q# |5 Q, a) h$ i* @; p: _4 T
  888. LDA DEC_L
    ; a" ]( u5 |! ~
  889. ORA #$306 a1 p) d* Z6 ~3 ?5 J- q
  890. STA PPU_Addr,X
    8 H+ ~2 F( h, }; u7 l; c
  891. INX
    1 t* ?5 \- D0 K' C  S
  892. RTS# o& y6 d/ d3 k+ R" D$ @( j, G
  893. # Y! ~/ r1 s1 d, e, @. J
  894. ;==============================  q9 a  a. C$ o0 W+ j
  895. Time_Count;计时
    , l) y# F* y$ Y
  896. LDA Music_State0 e' z3 y( t- w/ e9 p' H& W
  897. ORA Time_Wait_Cnt
    1 c. I# e( ~* U
  898. BNE Time_Count_End& m) V: `! E9 t- f
  899. INC Time_Cnt
    # k# G5 ^3 H* m3 m5 X
  900. LDA Time_Cnt) M7 G& R  j& e$ w4 B; ]0 `
  901. CMP #60
    ' I1 @" Y. p/ x  @
  902. BCC Time_Count_End
    . m0 a. V- x/ c; ~
  903. LDA #00
    / n3 ?( v( ~7 K; {2 j( ^
  904. STA Time_Cnt5 l. R( x" W  y- S7 o6 _
  905. INC Time_S
    ' Y; g. K% f$ r0 h: C% q

  906. ! E2 m" N( g2 `9 D+ |
  907. Time_S_Cnt; `+ ~8 m/ ?; T1 W) g8 Z
  908. LDA Time_S
    8 b" F" J$ S6 x
  909. CMP #60
    " q' F& j. ]0 p/ L, \/ \- z
  910. BCC Time_Count_End+ I1 F8 c) ~( E6 J  F) U
  911. LDA #00+ ~4 q" h; T" v* F
  912. STA Time_S
    6 @( P$ d  I% F$ ~  L3 y6 o/ l
  913. INC Time_M6 X. k: E2 t7 R: T5 r  U
  914. 9 D" N2 ?& \2 H2 |. |" Y3 g& A
  915. Time_M_Cnt$ h. ~3 p6 r7 W7 O  q6 T2 \! T0 [
  916. LDA Time_M5 a4 E' w5 V+ [7 v
  917. CMP #60
    + a2 M& C2 t) [0 G" k& s
  918. BCC Time_Count_End- I" v; d1 v3 M5 c7 c" I# D% e1 p& o
  919. LDA #00
      F9 \( V# X* s7 T* T4 }
  920. STA Time_M
    9 b+ j  L1 E4 V' X8 v6 a
  921. INC Time_H
    . b$ \# {4 U' `1 X" X

  922.   W) F0 U- g+ p$ r- }( d. K
  923. Time_H_Cnt2 @& P0 j# _0 O/ x4 ^/ M
  924. LDA Time_H$ H" J) R% z, T9 C
  925. CMP #24
    8 M6 S/ {6 x' Q+ {
  926. BCC Time_Count_End
    ; w) N! U# l! q. I0 y; u( t
  927. LDA #00, H) R; _- S! u+ V) {
  928. STA Time_H
    ) ~5 ^2 u0 `: A

  929. ( n5 b4 n4 e6 ?' ?6 F
  930. Time_Count_End8 n* E, R/ D; G3 S" [$ _* Q# X
  931. RTS6 Z! x# u% z1 }1 D+ K$ `
  932. & X* c$ N$ @! [
  933. ;==============================
    : m+ d* l2 }/ ~# Y  M: E
  934. Time_ReSet;播放时间重置
    . u$ {3 j8 l/ p* f6 U
  935. LDA #$00
    6 q5 S& G- B1 L$ k* p* c+ M9 I
  936. STA Time_S
    9 Q6 }& u. {& v. g. c% y  ^
  937. STA Time_M 7 l. k, o# o# ?+ b6 B: {5 Y
  938. STA Time_H  ^( a8 U* ~$ `: }1 G
  939. STA Time_Cnt6 p- |* o  t% ~$ _$ \
  940. RTS
    - r# g8 N1 r* p$ p, d% k
  941. 0 A; Q0 _4 G3 b% U& x( U5 N
  942. ;==============================9 [$ Q; k$ w7 t, O& E0 O2 _8 {
  943. Music_Bar_ReSet;音乐条重置2 ^# N5 h- L* s, J& g  R8 d3 d9 a
  944. LDA #$00! m! I, Z5 }; U4 O; t% t
  945. LDX #$00
    : O5 B. G/ A2 o5 c' x8 Z) V9 R
  946. Music_Bar_ReSet_Set
    8 u& u3 A  B( k
  947. STA Sound_Bar,X
    . e2 u. h! R9 F9 F4 P8 y* l* n- p
  948. INX
    2 {# z  b* D7 z* z# J9 ]: I
  949. CPX #$10
    : {6 T1 P/ A+ Z* R4 q
  950. BCC Music_Bar_ReSet_Set1 b6 W( y* A. `
  951. RTS
    . Z+ _% k1 A/ ~

  952. ! A7 q. P, G  r& w) H3 n) N8 a; V
  953. ;==============================2 a6 A6 l3 U: [" ^
  954. PPU_Data;PPU数据写入
    # T: `7 M7 [% z/ _, @' I8 T
  955. STY Data_L
    2 H! u3 x+ n% w+ L5 O7 t
  956. STX Data_H4 O4 M4 A. T4 n( {4 V0 g. x% {
  957. LDY #$FF9 H7 B( f/ T3 d0 b" `4 A9 X
  958. LDX PPU_Cur
    7 ~) u- \. n$ @, c) i
  959. DEX
    0 v2 B8 `/ r- ~% T. I$ V+ G
  960. PPU_Data_Beg
    6 O" U% j( J& x3 W& I  f1 r
  961. INX
    ( D; o* H$ E' K- P4 b/ Y
  962. INY# j7 @& n. k/ m
  963. LDA [Data_L],Y
    , W" w! }5 Q& c' t
  964. STA PPU_Addr,X
    ) u- G) [9 d+ u
  965. BNE PPU_Data_Beg
    % }: Q2 i3 Y8 Q+ ?
  966. STX PPU_Cur% N4 _: w5 s! b' M
  967. PPU_Data_End
    ) E0 C' P8 b) `- n! w
  968. RTS4 _3 l* l" F8 t5 b+ N
  969. 2 h. L1 {& ?( e# }1 z' }/ v! [
  970. ;==============================3 M9 j( U6 \* [1 H9 Y
  971. Music_Stata_Show;播放状态显示2 w: c+ G: d/ {3 @2 b7 J% Q
  972. LDA Music_State
    ! V0 D4 ~" t0 f. |. Y- V8 g
  973. BEQ Music_Stata_Show_Play
    & y! I; }* C0 o$ E+ t1 ]
  974. Music_Stata_Show_Stop9 X& A7 t+ m$ P, _
  975. LDY #LOW(Music_State_Stop)
    * T" n2 q, @  ]5 x% X
  976. LDX #HIGH(Music_State_Stop)( B, K" ^- ?. w' ^! V
  977. JSR PPU_Data2 r# ]) ~0 f# x; c% b1 e
  978. RTS
    6 [9 K* T5 R8 ^
  979. Music_Stata_Show_Play
    . F; G/ i9 d' R
  980. LDY #LOW(Music_State_Play)# p* P; V' x2 J6 ^: }  j
  981. LDX #HIGH(Music_State_Play)
    # l9 g" i: n, E$ K3 @
  982. JSR PPU_Data
    " m0 o: q$ v; j9 _* i
  983. RTS% h8 W: b' Q. s3 r  y
  984. & H/ [1 n7 B) U2 l2 m# W
  985. .IF SOUND_BAR_SHOW_ENABLE
    8 `7 {8 {5 k% j& N! F6 I8 i
  986. ;==============================
    , T) S/ k1 h3 H/ ?0 g7 D
  987. Sound_Bar_Text_Set;标题与音乐条初始化
    2 W/ G0 B/ F7 _4 _; `! k$ h, D9 L5 a
  988. LDY #LOW(Sound_Bar_Text_Data)" d! ]& ]/ `; H: C& f" ?. o
  989. LDX #HIGH(Sound_Bar_Text_Data)$ _8 B7 M3 l+ ~% ^' F/ X
  990. JSR PPU_Data6 _9 F! S( l% o2 L$ h' `6 U
  991. RTS
    # l, J" G5 [' _# a4 Q- l6 T

  992. ) q6 ^2 C8 ]1 W# N  w1 @$ w; h
  993. .ENDIF
    , D4 }! @8 R. J

  994. 9 P5 M% s7 y- H0 b$ f+ R
  995. ;==============================% }1 t; g7 R+ i8 q, y8 P- |
  996. Set_NameTable_Attributes;设置命名表属性6 u* N7 h- }1 q' ]
  997. LDA PPU_STATUS: D& _' \! `; h. h
  998. LDA #$23
    0 P$ F( d1 Z7 q5 a
  999. STA PPU_ADDRESS6 n3 ^8 d$ Y, y( t2 c
  1000. LDA #$C0
    - W8 k; ?7 [; B+ E: d
  1001. STA PPU_ADDRESS
    : A+ k: B! m! }, ]
  1002. LDX #$00
    ) S3 _9 s6 h6 m) N% R6 O
  1003. Set_NameTable_Attributes_Write
    & }# _2 u/ F* N: w( A
  1004. LDA Palette_Attributes,X
    1 Z, _. x4 D) [; B( y  q9 C1 @
  1005. STA PPU_DATA+ m4 k! h  u( M0 N3 q4 Q
  1006. INX
    ! F8 z" `+ U& z
  1007. CPX #$40
    + B+ |$ e. d# a) j7 L% W. E. J0 V- a
  1008. BCC Set_NameTable_Attributes_Write
    5 m' a0 Z+ J' W; B: i
  1009. RTS
    & p) E% L: z6 A/ Y: `
  1010. $ W/ A5 }0 J* q5 X# f! ]4 M8 |
  1011. ;==============================* a& r; ]8 `7 _- N
  1012. Set_Palette_Color;设置调色板数据
    # N4 Z. J. e: ^( d- ^% F2 P
  1013. LDA PPU_STATUS
    1 @: p* ~) |, e, M
  1014. LDA #$3F
    ; V8 t- N+ W# r/ X% x
  1015. STA PPU_ADDRESS
    ! t2 N3 I2 k8 m) F: c
  1016. LDA #$00$ j9 w. _1 x/ ]6 Y% s! q( \
  1017. STA PPU_ADDRESS; w/ C/ U; ]: @3 T
  1018. LDX #$00/ x% f' t$ k4 ~, N
  1019. Set_Palette_Color_Write* C- U( I- q5 w% Z# U
  1020. LDA Palette_Data,X
    4 f$ j. R  }* y) I
  1021. STA PPU_DATA
    * t1 A) \  R6 }: j
  1022. INX: s6 D, Y2 Y  o
  1023. CPX #$202 B9 v5 i; w; v# y( q+ A
  1024. BCC Set_Palette_Color_Write
    6 D% t- K$ I* _, [: m0 z
  1025. RTS0 d% ]# M) R0 ^) O$ H! D

  1026. ! u7 {) H& [% e
  1027. ;==============================  s6 P1 e& C( R6 i
  1028. Init_Palette_Addr;初始化调色板数据# O5 f" u5 T& H5 S3 @  z( e
  1029. LDX #$003 z, u! B, C, a0 ~7 R' t
  1030. Init_Palette_Addr_Write
    7 Q; O9 u+ [3 i
  1031. LDA Palette_Data,X' N2 I4 Z. ]0 S- L* Z2 Z
  1032. STA Palette_Addr,X$ M* \: p3 |3 V9 a# ]8 B' X
  1033. INX
    ! y$ ]$ O; S5 ]( p! o
  1034. CPX #$20
    " g. v- w! F) O/ C& w& M
  1035. BCC Init_Palette_Addr_Write
    - Z% A+ r% ?+ ^$ P
  1036. RTS
    7 r# Y9 Y1 Y. N; M* g

  1037. , }) U( N; H: \! `
  1038. ;==============================
    % x0 C& V; o# s( p. {% m9 w! _
  1039. Update_Palette_Color;更新调色板颜色
    0 o$ C+ {; E' J7 F/ x6 a2 m; k
  1040. LDA Show_Track_Name% J' A# m$ z" ^4 D/ V, T2 j
  1041. BNE Update_Palette_Color_End7 \0 s8 W; g7 B- L8 `: C2 {
  1042. LDA Palette_Update_Flag. U8 G2 P. H* C/ ~* ?2 W+ I
  1043. BEQ Update_Palette_Color_End
    ' @; |$ J% a6 ]; H, I- h
  1044. LDA #$3F
    ( G4 @0 y' M4 j4 j8 D
  1045. STA PPU_ADDRESS) \$ m1 D4 c2 i, t, K# H
  1046. LDA #$00; Y& K( A! R; S3 P, x0 m+ l/ Z( ~
  1047. STA PPU_ADDRESS
    + s# x8 ^) o& v" ~: F; s
  1048. LDX #$00
    ! ^+ ]+ K0 |" Y! ^
  1049. Update_Palette_Color_Write2 O2 Q/ C# i2 `
  1050. LDA Palette_Addr,X
    " k  J: U/ n8 h2 a. i/ ]* ^9 e9 ^
  1051. STA PPU_DATA
    8 }% h/ {" _2 [4 K  r5 }& B- w
  1052. INX
    1 N6 ]: g1 F' c$ t. p! h; g: j
  1053. CPX #$204 J) ]$ l  ^5 R# y5 t
  1054. BCC Update_Palette_Color_Write- `( h- B1 s' w& R+ F; m5 ~! k
  1055. LDA #$003 d* R6 c& `9 l* V# s
  1056. STA Palette_Update_Flag
    4 J: }; M+ l1 G  d! Y5 ?
  1057. Update_Palette_Color_End
    - F7 i- W4 r% P- H& Z2 K1 v$ P
  1058. RTS
    4 z! A: _0 i: n/ f
  1059. " i' c& j0 ]. A" o- |$ F
  1060. ;==============================
    9 D8 X$ B, Q$ d1 ~& P1 U) W2 z
  1061. Update_Palette_Data;更新调色板数据
    , c' M( f. `3 w- F8 M+ M
  1062. LDA Show_Track_Name
    : ~, O" q% B3 _# V6 u
  1063. BNE Update_Palette_Data_End2 M0 w5 G& |: n" ~
  1064. LDA Music_State
      u0 ~  n6 u+ j5 r6 Q$ T
  1065. BNE Update_Palette_Data_End. c- K" z( Q5 s8 s
  1066. Update_Palette_Data_Check: e1 S6 g3 }) X! M0 O! Q$ {0 A
  1067. LDA Palette_Wait_Cnt
    ! h/ M9 @0 d! h/ a4 ]+ f
  1068. BPL Update_Palette_Data_Check_Over
    ( @3 X9 `1 I: q( w: t
  1069. LDA #Palette_Update_Interval7 f/ ~% [  Q" F% |
  1070. STA Palette_Wait_Cnt" N8 F. G) R# d
  1071. Update_Palette_Data_Check_Over
    6 ?+ D; a0 v  Y1 x$ H4 r
  1072. DEC Palette_Wait_Cnt
    # y1 |/ @$ S0 ]! M) C" C
  1073. BNE Update_Palette_Data_End
    & H. G7 F. K4 q9 l" p( d
  1074. INC Palette_Update_Flag* \" J- C" ~4 K% Q
  1075. LDA #Palette_Update_Interval
    ) k4 K6 M; k3 Y- |1 E: _
  1076. STA Palette_Wait_Cnt
    : p  K  M  `7 W- B$ D
  1077. LDA Palette_Update_Addr
    " @5 M& z, z  a0 o
  1078. CMP #Palette_Update_Max7 K3 @* L2 b# a* ~! m
  1079. BNE Update_Palette_Data_Set
    6 E* j) G  Y  ~$ M- C- a
  1080. LDA #Palette_Update_Min - 1
    * B( l# r# a- h2 p
  1081. STA Palette_Update_Addr1 m+ E/ U# e4 W  ~, p" B: m7 S
  1082. Update_Palette_Data_Set. b: g* G& A1 m3 i$ T4 ]# H
  1083. INC Palette_Update_Addr
    ! x% u$ t5 u/ m) d
  1084. Update_Palette_Data_End
    0 V" g8 j& o  Z
  1085. RTS& e9 m/ G3 [! }- D% }

  1086. / \, d  m$ e# O) F' r& Y1 {2 s+ ^4 r
  1087. ;==============================# Z1 L+ f3 a- B/ ^% G  C9 x6 H
  1088. Show_Music_Text;显示静态文本
    ( s8 \# @7 z# [9 l
  1089. LDX #$00) a3 ], I& y8 O& G$ {% \
  1090. Show_Music_Text_Set
    & E$ i6 d! B. {% l8 {
  1091. LDA Static_Text_Data,X
    / a3 l: H: o. ^5 V3 D) Q
  1092. STA Data_L, `& B' t3 d- ~. A
  1093. INX
    ' r) }' H7 N4 d: h
  1094. LDA Static_Text_Data,X
    $ {# Z; q. f1 W) y
  1095. STA Data_H6 N5 n1 W/ t& J
  1096. INX4 D' _, a; _1 c" E8 P. d
  1097. LDY #$00
    2 |0 P2 v! g) Q6 ~; D' k1 b5 _
  1098. LDA [Data_L],Y4 Z  U+ ]2 M/ X, W
  1099. STA Data_Cnt8 k8 P% ^! D! C4 Q, A* C
  1100. DEX
    . h- j4 u# Q' \( P1 m3 e2 y
  1101. DEX
    $ `( F4 `5 a" w9 [0 Z6 S7 F8 s
  1102. LDA Static_Text_Pos,X' A! P6 Z9 O7 j8 {+ S! u
  1103. STA PPU_ADDRESS
    ! s6 x! O& q% x
  1104. INX
    $ a  I5 ~/ d& B* C2 g0 p* B
  1105. LDA #$20
    / h6 b- J; ^% y5 P1 V3 k6 n
  1106. SEC
    7 e* g1 w; Q* y& j8 V
  1107. SBC Data_Cnt( S. r1 h7 \# j, R$ ], r% B
  1108. LSR A
    5 N# X! x; {$ N% P8 x9 m
  1109. STA Data_Buf) w3 @' x; n7 R
  1110. LDA Static_Text_Pos,X
    8 R" k; b+ ^) M9 v9 B  Q
  1111. AND #$E0& C# j. u. A4 t
  1112. CLC2 `1 P8 h* }2 ~0 ~6 l
  1113. ADC Data_Buf: y5 X5 t2 s6 K+ g8 f
  1114. STA PPU_ADDRESS
    + F8 e0 n6 |$ L: y: g: H9 V
  1115. INX
    6 H# E/ l" f% z# r/ `" k; J
  1116. Show_Music_Text_Set_Write
    2 n2 n# F6 ]% C* L  k+ p9 I4 H
  1117. INY
    4 k, \0 g: K1 G: K
  1118. LDA [Data_L],Y- O: u# p0 Y6 V
  1119. STA PPU_DATA
    ( R8 v* P& k3 m3 A  u
  1120. DEC Data_Cnt. X, |- t6 y8 e& C1 e3 d+ G' g
  1121. BNE Show_Music_Text_Set_Write8 i' l) y1 u( B0 @4 U0 T! T, I
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos  u8 A8 p2 O' Y
  1123. BCC Show_Music_Text_Set
    - G- h  z7 Z& S! Q4 s: W
  1124. RTS$ _" H, {0 h" S5 N  c( }
  1125. $ C. U# C" _/ \6 K8 C
  1126. ;==============================
    7 ~* X8 F0 [: \
  1127. .IF Track_Name_Pos;显示曲目信息( G# ?2 ]/ `" t+ X7 Z5 @% X, F
  1128. Show_Track_Info- G& t. K. S! d) j$ l
  1129. INC Show_Track_Name
    % ^2 F) o! v7 e6 b, X7 F: \
  1130. Show_Track_Info_Clear2 w0 @" K1 U. p% z: g
  1131. LDX PPU_Cur* ?$ P9 l8 G" I9 V& x) T3 y
  1132. LDA #Mode_Clear
      U+ M4 O9 F( r3 A' c
  1133. STA PPU_Addr,X
    1 |0 h: W+ v5 U- a/ a6 L/ A! h5 @
  1134. INX3 V7 q3 ~$ j4 ?4 Q7 \% C

  1135. ( b' {8 @! e" n9 w* q% ]
  1136. LDA Music_Last7 c+ x7 n/ Z9 x0 K+ v. U
  1137. JSR Show_Get_Track_Name_Center_Pos
    . w1 S. U& N0 W' Q( Z9 b; P' S; b% k
  1138. Show_Track_Info_Write_Cur
    6 K+ A0 P6 W  A# L1 X
  1139. LDA #Mode_CntLine9 R& B# b8 O* C4 _( i
  1140. STA PPU_Addr,X1 |3 g" U( n: {  T: V9 }
  1141. INX6 `1 ]: X* ]+ C  G9 O4 J2 O$ ?% ~

  1142. & Y$ Q# V/ I! ~! n. _: x6 N% U% M
  1143. LDA Music_Cur3 u6 l5 |/ G1 c9 M  K; P' I3 c6 y
  1144. JSR Show_Get_Track_Name_Center_Pos
    - X* l6 f$ n7 |' N" p- o3 ~8 v

  1145. 9 W* B; Y9 R4 F+ C
  1146. Show_Track_Info_Write_Cur_Data
    0 ~7 U7 F! ?3 x# p
  1147. INY
    , P' F: r3 P+ i3 l1 \: d8 W- M
  1148. LDA [Data_L],Y+ h$ q) I* k1 D" C( b1 T( K" N
  1149. STA PPU_Addr,X
      ^; D9 I7 M, M: u( q
  1150. INX
    % X$ E" a  o. O# Q
  1151. DEC Data_Cnt
    * e& P! D# d: l! C2 `: p" L
  1152. BNE Show_Track_Info_Write_Cur_Data
    / B0 M& _1 ^0 P5 u
  1153. Show_Track_Info_End: M' j0 p7 K6 j: c7 @4 |
  1154. STX PPU_Cur2 B- p' ], ~- I/ O& C
  1155. RTS! E& F( k+ \+ m" e# i
  1156. 8 r1 Y4 C  s' E' e9 I
  1157. ;==============================
    5 f& c6 M- W* F- O
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置
    / s3 n& j# I( B" c0 n& z- f7 @
  1159. ASL A+ c5 @) L+ ~% }) R
  1160. TAY
    5 X3 b8 p# o- B* n8 [" a' ?& r
  1161. LDA Track_Name_Addr,Y5 n! Z9 y  A  p
  1162. STA Data_L" n3 o8 {" \7 K# O8 v$ o% g
  1163. INY
    / Q+ {1 |7 {2 h6 o) o# ~) \
  1164. LDA Track_Name_Addr,Y. d! N2 u% G& T  I% W' W
  1165. STA Data_H9 I. q- ]/ F1 C# K9 F5 b! F; H
  1166. LDY #$00
    & j) Y9 t& `8 z7 K; w8 Z/ o# j( x( r8 [3 R
  1167. LDA [Data_L],Y; H9 U& A; }' J. z$ g7 Y
  1168. STA Data_Cnt
    / C" U2 r8 i7 e0 R  `; V" b
  1169. LDA #$20
    ( P( G) N9 X9 g' Q% Z6 h1 I  S
  1170. SEC9 x3 |6 a  f  s- F7 J1 l4 o9 a
  1171. SBC Data_Cnt3 I% Q) R7 f! ?# _
  1172. LSR A1 O! v# ]+ E) X  l* m8 S# l
  1173. STA Data_Buf
    ! g" G( X1 u( {
  1174. LDA #HIGH(Track_Name_Pos)9 R! e0 G* _) y4 w/ Y' j9 E! [  {
  1175. STA PPU_Addr,X( @& q% j5 L, Y8 |& h+ f
  1176. INX( K3 q3 F; _% R+ d9 S& [) B
  1177. LDA #LOW(Track_Name_Pos)
    " d! m6 {/ q5 T7 R( ~+ N: w
  1178. AND #$E0
    7 R* I3 E" @: H8 o1 B
  1179. CLC+ R. K" ~0 E! _% q  N: H
  1180. ADC Data_Buf( _; a2 o7 \+ M( j4 H' S9 W4 a* S. w
  1181. STA PPU_Addr,X/ Z3 W" f3 e* E' `4 C3 e3 o2 V( b
  1182. INX
    1 H/ w$ e4 p( \( @# c
  1183. LDA Data_Cnt
    5 j5 o; W' L! r$ ]1 F: L( ~* p
  1184. STA PPU_Addr,X/ I) ?# s6 u& l! o* U8 x# b' r
  1185. INX
    % V* E+ E0 I3 D( O% g" i
  1186. Show_Get_Pos_Center_End+ S; G- ?+ P, J& W/ Y9 r
  1187. RTS
    7 `: D, e! }6 A2 a
  1188. .ENDIF
    9 ?. Z, F: @& c- Z) z( T

  1189.   _3 U9 _  S* l: N0 W" Q# |
  1190. ;------------------------------
    ! P* v2 l, O5 M7 E
  1191. ;命名表数据
    ( }4 `, D; ^" x% s6 q+ _
  1192. Palette_Attributes
    5 [  q5 ?  Q1 U3 a- r$ y& K9 C9 B
  1193. .IF SOUND_BAR_SHOW_ENABLE
    ' Q$ F8 b0 ~8 T# h& z% ]$ g
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    " y% q5 r' T  k7 ~6 c- @0 G
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    7 l0 Z  N3 O2 d. u) ]$ n
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55. |" ]. c& ~$ b1 e1 R! o
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    1 V+ L+ j4 J, r- E7 X8 }
  1198. .ELSE7 P7 P& P5 [5 s# B0 B/ `
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    , |! v) O% u: G; J- q5 k( R$ d
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF4 L: ?: H& @' q7 w! X; {( ^! Y
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    0 {8 H& d/ K1 u
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    - R$ J, V4 T0 O2 R
  1203. .ENDIF
    : C+ `* P7 F4 S% |0 L

  1204. - ]$ p2 f! _3 V
  1205. ;------------------------------
    - U! w" u9 k- b/ ^* H0 ^
  1206. ;调色板数据
    0 ]0 z' W$ p  J* A! V
  1207. Palette_Data
    8 I/ @* v" X- i# H6 x% y3 K
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F
      I7 R6 r7 |4 k( a, ~
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F1 K' j/ J3 t$ _

  1210. 8 N/ l1 F6 U  @7 L
  1211. ;------------------------------, N! g! L3 r3 k
  1212. Static_Text_Data4 F0 w4 ]! W( N$ M
  1213. .WORD Static_Text_Title_Data1 _& t+ ~6 `% L) O
  1214. .WORD Static_Text_Author_Data: w* @2 \: y" X/ s; N5 m/ h2 N
  1215. .WORD Static_Text_Date_Data
    % ]+ I4 A( G* N7 n7 c
  1216. Static_Text_Data_End
    ' i1 Q$ k9 c4 w4 v, D8 T! {
  1217. 6 @3 A. T2 Q9 ~2 L* v' f0 V; ]
  1218. ;------------------------------4 C. I' y3 g  B( D+ `- Q
  1219. Static_Text_Pos- R8 h( J$ M7 e. o- l; o& B; N' H
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    5 t$ D- o  Z) S4 o* ^
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    - B9 A& j  c5 C
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)
      A+ I' H' O  v
  1223. Static_Text_Pos_End; d' |1 q  @) a: r

  1224. ) r: _* T, b6 B: X$ {, }
  1225. ;------------------------------
    6 E" B* z; m: J+ S6 M
  1226. Music_State_Stop
    - g0 v/ j1 }1 |) D8 N
  1227. .IF SOUND_BAR_SHOW_ENABLE6 D+ S8 {( f4 {; Z1 T9 p
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$00
    / m4 K) {: Y  Z) w  x% t3 z
  1229. ELSE
      K( B3 r- Y6 K4 w$ u3 s0 k% ?- F3 z
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00
    $ M% [  L% v) ^" S$ z3 I9 i! `
  1231. .ENDIF1 ]& E" Q8 R$ l3 f
  1232. Music_State_Play
    $ E  ^# N" j, H4 q
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00; R4 N+ P- a# a! S0 l
  1234. 3 g) d6 ]0 E: y
  1235. ;------------------------------9 M/ Y8 U% d8 K* H* Y7 Q0 b
  1236. Sound_Bar_Text_Data;声音类型文本! u1 \9 d9 u& u. g8 g2 Y, r) J0 a
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)* [* @' S& ?1 ^7 H4 y
  1238. .DB "SQ1-",$FF4 ]0 g) t+ o; @
  1239. .DB $FE,"SQ2-",$FF
    5 K  y+ J( s" Y' L
  1240. .DB $FE,"TRI-",$FF
    & _$ \  j# Q- c1 |; k5 P* Q
  1241. .DB $FE,"NOI-",$FF( l+ S6 v( F  }) s
  1242. .DB $FE,"DMC-",$FF,$00
    7 Y8 g7 Z; b% k/ |- c

  1243. , w0 @& G; E% {
  1244. .IF Track_Name_Pos5 y0 ?: i( L; o+ z6 ~  f2 ^) X  n
  1245. ;------------------------------% t% A( ]# e. }/ q+ g: K; n
  1246. Track_Name_Addr;曲目名地址索引% {2 r' e9 a# V! C' T0 \0 ~
  1247. .WORD Trackr_01
    8 ~5 Z, o2 j  v$ D8 D/ N' u2 ~
  1248. .WORD Trackr_027 }6 H0 N. R# V: D3 s
  1249. .WORD Trackr_03
    7 Z# i" v: K4 g
  1250. .WORD Trackr_04
    " K7 M2 w! h8 q* G- z
  1251. .WORD Trackr_05
    * @' f0 S* o# c
  1252. .WORD Trackr_063 Q3 T6 }# v& V, ]& B/ D
  1253. .WORD Trackr_07
    * i$ B0 N% c% g
  1254. .WORD Trackr_08
    1 X" U8 T& G2 Z
  1255. .WORD Trackr_09( ?+ [5 ^, J" ~  Z5 r  C
  1256. .WORD Trackr_10
    , i4 u; N$ ^" M8 W: ?' X
  1257. .WORD Trackr_11
    , Q/ O2 v% z, u; {' _. ]
  1258. .WORD Trackr_12, r4 Q; C. G: x2 j$ D1 R3 V
  1259. .WORD Trackr_13
    1 j  z( D' F4 Q
  1260. .WORD Trackr_14
    ) _3 H' ^/ X0 h( n  `
  1261. .WORD Trackr_15" H4 ]2 D* ^% y/ e  E0 a5 d; H( y2 g
  1262. .WORD Trackr_16" S9 e6 p/ j3 W4 [1 D: T
  1263. .WORD Trackr_17
    - O( n7 p4 N+ a) u: p
  1264. .WORD Trackr_18+ |' @/ I  h- r& }. D1 u( y6 R
  1265. .WORD Trackr_19
    - e+ s3 l# h0 \: r. m- p
  1266. .WORD Trackr_20
    % j8 t$ v) u5 |3 v& R8 ?
  1267. .WORD Trackr_21- [1 y+ V" X2 |" S- X
  1268. .WORD Trackr_22
    5 e  L( Q' t! h' N. M9 Q
  1269. .WORD Trackr_23
    - h& A& E' n0 |: r0 M' @; X. {. d
  1270. .WORD Trackr_24. ]# Z, D# n8 @) M( F, S5 c
  1271. .WORD Trackr_25) x( z: S* i" m  l- t, [) q
  1272. .WORD Trackr_26
    : P/ \" {- S1 \+ f: j  l
  1273. .WORD Trackr_27& G; }$ [/ {5 m4 e! Q( q
  1274. .WORD Trackr_28' K; p. F& H; F1 s- L6 W  U
  1275. .WORD Trackr_29
    2 v5 u5 u# ~  }* u" r- {/ b0 M
  1276. .WORD Trackr_307 b6 |; ], g3 S+ {. Q
  1277. .WORD Trackr_31$ E0 m7 {& G% I2 A# [: B3 k+ }) ~
  1278. .WORD Trackr_32
    ! A: i8 n) [6 r' N; K% o* y
  1279. .WORD Trackr_33
      Q/ c" X% E$ z9 \( X3 T
  1280. .WORD Trackr_34
    7 q' I  }3 _; ]
  1281. .WORD Trackr_35) U2 y, r0 d) k) j
  1282. .WORD Trackr_36) d: Q9 c* T' W  k% c
  1283. .WORD Trackr_37
    . k" N3 |  I" k
  1284. .WORD Trackr_38
    4 z  o$ T6 y6 g7 s) m, G4 u& c
  1285. .WORD Trackr_395 X- o* ~4 Z) V6 B1 e
  1286. , y) [& \9 l9 h2 ~
  1287. ;------------------------------- @. a9 A+ K& G7 C1 q7 n
  1288. Trackr_Name_Data8 i( P3 I8 f7 ^3 c1 T8 Z1 t, X
  1289. Trackr_01 .DB $05,"BGM 1"
    ; E7 G  o! [( W1 u; \  }' E
  1290. Trackr_02 .DB $05,"BGM 2"+ M: V  a: T* _% U4 k$ h0 m4 ^) [0 K) m6 Z% T
  1291. Trackr_03 .DB $05,"BGM 3"- E+ E# }+ {# m: h2 g
  1292. Trackr_04 .DB $05,"BGM 4"
    $ e$ h) x& c$ P0 G: _! f
  1293. Trackr_05 .DB $05,"BGM 5"
    : E4 _: H9 c3 G
  1294. Trackr_06 .DB $05,"BGM 6"
    3 M/ y* ~0 \: ]7 @5 B8 J8 u, I  `
  1295. Trackr_07 .DB $05,"BGM 7": J7 T4 U3 C- x7 w& l
  1296. Trackr_08 .DB $05,"GREAT"
    9 ~1 R, h( B" c9 W- s" |! X
  1297. Trackr_09 .DB $08,"BOSS BOM"
    3 F& e1 R* r' b
  1298. Trackr_10 .DB $08,"BOSS2BGM"
    - F4 [. ~# y7 f4 G1 d- |
  1299. Trackr_11 .DB $07,"P CLEAR"+ V* {8 T$ A( G9 Z) q8 q1 P( u
  1300. Trackr_12 .DB $07,"A CLEAR": v% u" K& Z8 F% B  t
  1301. Trackr_13 .DB $04,"OVER"
    + O7 @# k; }( S4 V9 I; J/ p
  1302. Trackr_14 .DB $06,"ENDING"
    : n$ r5 E. z: a
  1303. Trackr_15 .DB $04,"SUTA"3 w( y% H* p, {. l; N
  1304. Trackr_16 .DB $07,"THUNDER"( x  ^" d5 z7 t; F! H
  1305. Trackr_17 .DB $04,"SHOT"
    7 U9 V5 ]7 {& R& _! H" p) E
  1306. Trackr_18 .DB $05,"LASER"$ {1 |9 [* l. X
  1307. Trackr_19 .DB $06,"SPREAD"& b! _; C; Q$ t; _  ~  n
  1308. Trackr_20 .DB $04,"FIRE"
    . m! J% x6 O8 w
  1309. Trackr_21 .DB $06,"B SHOT"9 l" f; Q) q' p, D1 d) r
  1310. Trackr_22 .DB $08,"T DAMEGE"
    6 d8 [0 I' x# t. }3 j
  1311. Trackr_23 .DB $07,"HARETSU"2 p- b; _& z$ M* G7 M9 x
  1312. Trackr_24 .DB $05,"T OUT"
    * N0 K1 h2 m, ~  H
  1313. Trackr_25 .DB $05,"Z OUT"
      \, q6 X' a) }& ~2 p( p! K" h( \
  1314. Trackr_26 .DB $05,"A OUT"
    ! @0 x$ t! W4 g( o1 L2 Q
  1315. Trackr_27 .DB $04,"ROLL"
    % f$ z' K( O& s" x2 M
  1316. Trackr_28 .DB $06,"APPEAR"
    - k- _, `% F/ |5 h: `) @7 t4 ~
  1317. Trackr_29 .DB $05,"POWER"
    ) V& g; H2 A8 b) l) L* s
  1318. Trackr_30 .DB $07,"BOKK BK"
    7 v* Z0 b% R% Z3 p8 `  W/ z8 K
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    0 M( W) J, m* l/ Y6 U( S# D( M
  1320. Trackr_32 .DB $08,"BAKUHA 2"8 g7 `. S) C# {4 I- y
  1321. Trackr_33 .DB $05,"ARUKU"  I, D4 L6 |/ ?/ D* G* p* u
  1322. Trackr_34 .DB $06,"JIWARE"
    3 Q. ^& ?, S9 A9 I4 |" [
  1323. Trackr_35 .DB $05,"SILEN"
    8 E* l2 t6 G8 x# A% K) X0 o+ R; c
  1324. Trackr_36 .DB $05,"P 1UP"
    1 ~" \& _( p/ G# `+ K- n% h
  1325. Trackr_37 .DB $05,"P OUT"
    4 d$ P4 D6 a/ i  W6 h
  1326. Trackr_38 .DB $05,"B OUT"- U- B( k( M  c; A* o
  1327. Trackr_39 .DB $05,"PAUSE"
    + L7 g) t3 Z0 E! w: z& F

  1328. % L" S5 ^3 K# b- Z. S2 @
  1329. .ENDIF
    * \& ?/ |# B: f# J* Y6 H/ I8 K
  1330. ( z  Q2 W6 W) V0 q" B1 y7 u5 Q
  1331. ;------------------------------
    : c% J1 O& r# Q( I/ r
  1332. Static_Text_Title_Data;静态文本数据
    ( B3 I# |* c1 M  s2 y. I
  1333. .DB 12
    6 \  k3 ?- S2 L6 c
  1334. .DB "SUPER CONTRA"' l4 G9 ?, i/ Q/ `3 p
  1335. Static_Text_Author_Data# z9 V0 e; U1 ]) c# b8 V" p' l
  1336. .DB 23
    8 G1 t7 S3 H6 l) [: x. r
  1337. .DB "EXTRACT BY FLAMECYCLONE". {% \8 y( b& f- O. e
  1338. Static_Text_Date_Data
    & W& r+ [! S  Z. h! T- R
  1339. .DB 10* ]) Q' x" E5 H) R) V
  1340. .DB "2023.07.11"2 z' N5 F* y& u, Y% P: x
  1341. % h$ U% I# I( }0 F/ M6 P
  1342. .BANK RESET_BANK & BANK_DATA_MASK2 A- G# @5 M  m  f
  1343. .ORG RESET_ADDR
    6 b+ X; R5 L; K, i+ G) _& L2 a

  1344. % J/ ~% {) {, A" t7 [; _2 I

  1345. / `/ P) r7 \' `+ F
  1346. ;==================================================$ _& u$ U2 v9 _& J. G4 H
  1347. ;切到主程序bank
    ! C1 Q5 ?* e" a8 e' F/ I2 s5 N
  1348. SwitchMainBank
    0 S  r2 @" W' ^; |- m1 Z/ B0 o
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK5 v# y0 ^# P, F0 ~/ c8 y  |5 D
  1350. JSR SwitchBank8000
    . p8 R  q  x, Z* f: \" b: [4 l
  1351. RTS
    ( D6 O$ V: ^- p" c
  1352. ' P- N) _7 L' ]8 z
  1353. ;==================================================8 E! f. t! {1 G9 N( F7 ~8 r
  1354. SwitchBank8000;切换bank到8000-9FFF
    3 G; u( Y- @. K  ?& _7 T
  1355. PHA
    ! }5 w, V8 X2 u
  1356. LDA #$06
    $ Z1 R+ u6 n( J1 O7 z+ G' j
  1357. STA MMC3_BANK_CTRL
    ' h5 A& O& p1 @( l
  1358. PLA
      D( Z; I# n5 J
  1359. STA MMC3_BANK_DATA( z! e$ z5 k, m! W5 S
  1360. RTS
    ' f* O& f3 w9 M) T
  1361. % U# L& s/ r' a$ t/ Q/ ~
  1362. ;==================================================
    8 V# [  I* a0 S4 ~5 Q
  1363. SwitchBankA000;切换bank到A000-BFFF+ l' ?: ]" M0 I+ q0 v* }4 n
  1364. PHA9 K2 K: K: Y9 R6 y8 K7 `; w' K" ]- k
  1365. LDA #$07
    . k( b! [+ h( X! l2 o& |) Y# t
  1366. STA MMC3_BANK_CTRL
    ) a4 y# H9 N$ w3 Z, [* o: W1 p
  1367. PLA0 n, w6 g5 i+ j: ]6 I( p) f, z
  1368. STA MMC3_BANK_DATA8 P1 v2 {- C# a9 L3 `' E) w
  1369. RTS
    1 y, n7 k' N, W) y' F; b

  1370. - Z8 X0 V( b1 G6 s: S( }- p( U& L2 j6 w
  1371. ;==================================================/ V0 q/ O# {3 T" s* [8 R# r
  1372. Sund_Bank_Init;音乐bamk初始化7 D5 V7 w9 B7 ^+ r
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK7 m& l, b' s- V, r) X+ A
  1374. STA Music_Bank_8000- b5 n  t& T$ `9 c+ G. t# ]
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK4 l9 V) [* q; M) R& [* `& }
  1376. STA Music_Bank_A000" Q( X; Q4 k' T' j$ B
  1377. RTS
    8 n! u) W7 }7 U) Z0 G6 N2 \% e
  1378. ) U8 [6 D8 u3 c+ H
  1379. ;==================================================3 y" w: n- u( j8 _! f
  1380. Sund_Bank_Set;切换音乐bank
    8 h% l$ q- \+ C! t; u: Z
  1381. LDA Music_Bank_8000
    5 _8 r" q' g' s9 Q; i
  1382. JSR SwitchBank8000% m' z% D; F, R: S+ ^# V
  1383. LDA Music_Bank_A0003 u3 B3 x- S/ R1 R% C* a
  1384. JSR SwitchBankA000
    ; L3 R' \$ s0 ?# z- S# C: O
  1385. RTS6 l  O7 Y* W$ f8 l
  1386. & O) p6 X' [1 V. d* L, g0 N/ P
  1387. ;==================================================
    ) X$ o8 f- e9 u; c* D
  1388. Sound_Init;音乐初始化8 [+ j* c* ]5 U
  1389. PHA9 z2 s7 w: p1 x/ n' H
  1390. JSR Sund_Bank_Set( F$ v' X9 A4 i- o+ [
  1391. PLA
    + ]" z" V  y- ~4 b* i2 D) v$ ]" L
  1392. JSR Music_Init_Addr
    - ^: ?0 f2 U& C% E5 j
  1393. JSR SwitchMainBank. z' D% |9 H( W

  1394. , Y; n! J. ^7 z" c) e1 m% k
  1395. JSR Music_Bar_ReSet
    7 W2 a3 R: ~# f* P9 `" S/ ~
  1396. JSR Time_ReSet- _+ A* t- k" @( v6 i: i$ z- ]  u
  1397. LDA #$00+ f) D/ p9 p5 T/ _0 E) I+ s" h' M
  1398. STA Music_State1 k& G* h3 t1 n# t
  1399. JSR Music_Stata_Show! M4 I, n1 T- e! l2 n/ d" G
  1400. .IF Track_Name_Pos
    ) \& r  @0 a+ s
  1401. JSR Show_Track_Info
    * Y. _0 u: o( `- @( ^
  1402. .ENDIF; n9 `6 `5 h$ B+ A5 w

  1403. 9 c- J5 n7 d+ i; h
  1404. RTS
    2 c  O  s" P! R

  1405. ' G$ f- B! _; l5 K5 d: `, o3 y% R
  1406. ;==================================================6 }9 [9 `, @: f4 G
  1407. Sound_Play;音乐播放& |$ E4 ?2 @* d$ x
  1408. PHA+ i! _6 J0 h+ \% U8 d/ V! H
  1409. JSR Sund_Bank_Set( z/ }% J* ^& n: ?" x: s
  1410. PLA7 ]; W5 ]4 `1 I6 n4 X
  1411. LDA Music_State
    / j2 e" o5 F) o/ o) U! ~  ]
  1412. BNE Sound_Play_End! b6 g( T4 `0 Y3 I6 c5 p
  1413. JSR Music_Play_Addr
    + a' u0 C4 g6 ?) [6 h
  1414. Sound_Play_End
    8 i$ h( k' J4 Q. ~( I
  1415. JSR SwitchMainBank0 c1 M1 s3 l1 I5 K! I0 V* j
  1416. RTS
    & M9 a& t! d2 m

  1417. 9 l* Q9 q. r& R( U" ^
  1418. ;==================================================
    ) _( M1 y, E8 d: s# D' I" t7 X
  1419. .IF Music_Reset_Addr9 W8 m+ [" X2 N6 A  u  p( k
  1420. Sound_Reset;音乐重设(如果有的话)
    * m$ S2 }0 c. W# Z
  1421. JSR Sund_Bank_Set' s- B2 E, A0 Q; f
  1422. JSR Music_Reset_Addr* g6 q& k6 o- b" K: S
  1423. JSR SwitchMainBank
    # _& R* A5 C6 Y2 H8 v; \
  1424. RTS# u- J6 `" E  j7 U6 D' j8 F1 V1 X
  1425. .ENDIF
    ! p( @. P" O8 N6 ]: c5 C
  1426. ' S' d. T6 _0 [* ^0 b5 ]* m
  1427. ;==================================================
    9 G( f" s+ |2 S8 W- l
  1428. MainLoop;死循环" r0 l6 d3 y, D4 m# f
  1429. JMP MainLoop
    , r, {- X( U+ a7 J

  1430. 4 [4 o: m! E3 ^' ~0 M7 A3 X1 A
  1431. ;==================================================1 b0 N' k- p2 B4 |
  1432. NmiProgram;Nmi中断处理
    6 ~  w0 k; _( I$ w( v4 O1 d# a% X
  1433. PHA4 s1 n0 m+ @( N, b' d6 l
  1434. TXA
    , y- c% j* W0 Q+ v0 ^% k- ^% S7 M
  1435. PHA) K( `# w7 E  a& {; m5 \' Y
  1436. TYA! Q+ d4 V& V, B) h5 U. x
  1437. PHA
    5 ~+ h* ]0 Y0 w

  1438. 3 d+ ^- [; g3 T; M2 _( g1 G
  1439. LDA PPU_STATUS
    5 |" S- q' O$ G1 r- \
  1440. LDA #$00
    1 y) t5 P1 l, x* l
  1441. STA PPU_CTRL
    - a- ~6 Z8 u) `* {# z! c- Y5 @) t

  1442. 2 s( m+ |# b8 e0 v! Y8 r
  1443. ;切换主程序bank8 U/ g6 c% B; u4 C; }5 O  X
  1444. JSR SwitchMainBank
    $ H; Z* i' S& C# ?

  1445. 6 F6 Y3 k& @1 q/ X' f: g+ f
  1446. ;NMI处理0 U7 u5 y, t4 |3 x
  1447. JSR NmiProgramProcess
    ) }6 R0 O' G$ C& k: U9 c+ {# ]
  1448. - b' o/ W# N, [4 N1 E0 d
  1449. Nmi_Proc_End$ w; R5 l" `9 x- J1 Q' o
  1450. PLA4 s/ A1 v1 Z+ D9 P. r
  1451. TAY2 f% P0 r& G7 D0 A, L
  1452. PLA
    . X( l' C+ i9 |5 k
  1453. TAX
    + f+ O" T* C' o4 o0 i
  1454. PLA0 R) H4 w& c1 h  O  E8 R" u. Q9 ^! {
  1455. 6 }! d( b* a' u6 j( ?
  1456. RTI) A/ o- z+ k6 K- H
  1457. " Y" [* k1 K; M" t
  1458. ;==================================================
    ( ?$ g* a+ p% A$ g. a" n% @
  1459. ResetProgram;重置中断处理, Z1 Q0 y, P: f
  1460. SEI1 R" O& F5 Y/ q$ |
  1461. CLD9 b- e3 k+ u. Z7 g, Y
  1462. LDA #$00
    " K' r$ V( K4 c, m
  1463. STA PPU_CTRL
    ) g" y5 K  ]( B3 H& Y3 i! `7 _+ R
  1464. STA PPU_MASK
    1 m: ]. X# X& C6 P- j- `0 n% `

  1465. 7 V2 Y% j! c/ @& \, t
  1466. JSR SwitchMainBank! s3 {4 s( w% G6 [* H8 @
  1467. JMP ProgramBegin
    9 e) }0 E7 @" C! x& l
  1468. % \, E$ B; i1 }# R
  1469. ;==================================================
    3 W* |; I9 a; C/ a; O2 ]
  1470. IrqProgram;Irq中断处理6 ?. U6 @1 ~- r, J5 \
  1471. RTI! j$ N; @, W; ^- u2 b6 P; u

  1472. - l2 K5 h/ r! m4 d" X
  1473. .IF SOUND_BAR_SHOW_ENABLE4 N  ]) j' [5 |0 \/ d
  1474. .ORG $FF80  A$ C) H& p4 @' E8 O: E: H2 z, m
  1475. STA $4000,X* @% ]6 N5 W; P/ R% C' s: U8 Z
  1476. STA Sound_Bar + $00,X
    9 ^- l" k; y" A' p4 q
  1477. RTS, a3 N7 x# @3 j  S

  1478. $ P  r. ^1 \3 v% K1 q/ g
  1479. .ORG $FF88
    ( s( _8 w  g( H; X2 i( T0 G; Z
  1480. STA $4000,Y. n/ W5 C! T  `
  1481. STA Sound_Bar + $00,Y+ z. X1 G1 {7 p1 G2 c. S) G
  1482. RTS4 g/ P8 t: R/ [. M, d' S9 q
  1483. " G  X4 f  w4 M" a" l
  1484. .ORG $FF90' Q) B0 t( O2 v
  1485. STA $4004,X4 S8 L+ N# u* i2 T/ w
  1486. STA Sound_Bar + $04,X( E5 _) I' f" h; \  l5 ~
  1487. RTS
    5 Z% X: o8 ?9 k/ r2 r# w' c$ [
  1488. & m8 l% e3 [0 v7 v" H: ^. M
  1489. .ORG $FF98
    8 z* H' K+ G" E  G
  1490. STA $4004,Y
    # l! i& N% |# p  i0 r
  1491. STA Sound_Bar + $04,Y, o, N+ ^, d7 Y3 M; J
  1492. RTS
    9 _3 ~2 T  @! f+ ~

  1493. % ]1 w* F5 L4 Q" {
  1494. .ORG $FFA0
    - c; G2 q/ }; B7 m, x( c
  1495. STA $4008,X
    5 r; n+ Y2 A8 w  ?
  1496. STA Sound_Bar + $08,X
    5 N" d3 H# z  \4 O! ]
  1497. RTS
    ( c  a9 W. ~1 D5 k% N  @
  1498. 5 g/ h7 o+ x  E* Y  Y/ I5 D
  1499. .ORG $FFA8
    0 f; W7 k; Z9 e0 O- I7 w
  1500. STA $4008,Y; ~! M1 ?+ t" N/ |% ?
  1501. STA Sound_Bar + $08,Y. t, q/ D" T" x, Y
  1502. RTS: f5 J$ H4 b7 C' O6 n' k6 M% ^

  1503. , W/ P2 A0 f9 C0 J( F" i9 v! _
  1504. .ORG $FFB0
    ; r! Z  q$ v" v3 Y- @
  1505. STA $400C,X
    * {; M3 B, K+ ^4 j( D) S6 w
  1506. STA Sound_Bar + $0C,X2 K2 K- r. l' L! G
  1507. RTS
      h/ A& w2 ?+ f! {" ?( `
  1508. " V! o4 Y! B: z
  1509. .ORG $FFB8' V' V: d: W& ?9 g
  1510. STA $400C,Y8 c: c, O- i9 @, @, {* _
  1511. STA Sound_Bar + $0C,Y" D* I! l1 ~% C3 f$ A
  1512. RTS
    5 f4 {; [* U" _& B. V2 s* C
  1513. " ^4 a3 @* d9 a7 O$ K* Q- J
  1514. .ORG $FFC0
    ( S& K) J( F( W% n
  1515. STA $40002 G' g( o6 g8 }- k% ]
  1516. STA Sound_Bar + $00% O1 \$ w" G6 Q% L1 e
  1517. RTS0 z4 O2 T- [/ n; K5 j

  1518. ' h% W- O  q" n6 j
  1519. .ORG $FFC8; x5 C  e; A  n4 q
  1520. STA $4004* j; ~4 T1 p# E
  1521. STA Sound_Bar + $047 ~2 \# j! A! W6 Y* T: F! Y! \
  1522. RTS' b& F, p9 N+ \
  1523. * q- Z9 P* `% }9 ^: Q
  1524. .ORG $FFD0
    8 ]& J7 d) @# t: W# B
  1525. STA $4008- [) r3 x7 k, A6 v' G
  1526. STA Sound_Bar + $08
    ) L! @& ]6 Y. p" i1 f1 e
  1527. RTS! H8 ^! p% r) n8 b' [  p: O

  1528. 8 W3 E' P6 Z! u4 _
  1529. .ORG $FFD8
    / c8 Z0 `3 T2 y/ y! P! `
  1530. STA $400C
    # U% q5 N; J+ D4 M* x' }
  1531. STA Sound_Bar + $0C
    9 z1 q7 M+ a2 L1 M) h, e4 g8 `6 \
  1532. RTS
    3 ?( X8 |5 M% Y! z
  1533. ! u4 Y$ C. z8 o5 E& m
  1534. .ENDIF. O/ j! p/ ]6 n2 A
  1535. 1 k- F* G# h$ M( P
  1536. .ORG $FFFA6 T0 A! F7 I" F  ~7 ?7 x+ _
  1537. .WORD NmiProgram
    ' Z' r6 A' @: L# \
  1538. .WORD ResetProgram
    ! i! T: q2 ^# |% ]9 J
  1539. .WORD IrqProgram
复制代码
: \) Y  [& I) r; e2 U( v0 @* z

1 J  a8 |2 F. o5 d6 q- C3 X
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

×

评分

1

查看全部评分

签到天数: 1247 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3243 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-26 03:55

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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