EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2023-7-11 19:08:59 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2023-7-11 21:32 编辑 $ B  t1 A9 a# j$ d: {3 Z# w: R- z
. N, }  j+ Q" G& e6 ]- ?8 V
1.魂斗罗
. L5 Q# O9 _/ I' U2.超级魂斗罗8 K3 X" D6 a; G
3.赤影战士
8 }6 Z' Y- t3 b; J+ w, F4.忍者龙剑传2
  b1 h, Z: f, K3 w% ~
$ f) I& @: L0 C/ m
7 t  S; u# U' G2 x  m, w7 _- h+ _
2 |9 n' g& e. J; r2 `6 M% U7 f+ J; ~0 W$ ?- \
源码:
$ |+ d: u4 B) k% A0 `( A# n) y8 m
  1. ;[FC音乐][播放器模板]( l0 `0 y2 t2 h
  2. ;FlameCyclone 20230710
    4 M( @1 S/ C; H3 \
  3. ) A% v# ?/ L( W
  4. ;文件头! y; W$ y% k* t+ T6 B. b9 I
  5. ;======================================================================  N$ w& V8 |4 w
  6. .INESPRG 4                                              ;16KB PRG 数量3 p2 ?8 [9 Z% _6 x
  7. .INESCHR 0                                               ;8KB CHR 数量& Z- u  G* c9 X( ]. A1 r% m2 m7 o
  8. .INESMAP 4                                                   ;mapper 4
    8 u& R# W' X; O4 B: L
  9. .INESMIR 1                                   ;命名表镜像 0水平 1垂直* [4 W! ~: [, M' f  F2 q9 X& n9 Y

  10. 5 N( @1 t3 \' {
  11. ;==================================================
    * H! C7 s1 o( j8 \/ j" z
  12. SOUND_BAR_SHOW_ENABLE       = 1/ y8 q& D* |, Q
  13. ;==================================================
    3 C- O, D" S+ w4 A
  14. BANK_DATA_MASK              = $07
    2 B( z  ?& _; J' `; s& n, w6 F
  15. ;==================================================2 d  t0 T( ~- g2 r. k: X3 p# b
  16. SOUND_DATA_BANK_0           = $00% m9 R6 D2 Z# f& `
  17. SOUND_DATA_BANK_1           = $01, r$ l0 W( _# f2 U% G! w
  18. SOUND_DATA_BANK_2           = $02
    , h  B9 [2 g  T
  19. SOUND_DATA_BANK_C000        = $06' G% r- L, ]6 d/ l+ K; j$ r, _
  20. / j5 M7 O: K; t* g( w
  21. ;-------------------------------------------------
    1 v7 {; n  f  C& x+ t- y5 C
  22. CHR_DATA_BANK               = $04
    . H6 J: v1 Y7 |3 K# C# y/ B
  23. CHR_DATA_ADDR               = $A000( i1 i6 _5 n  ?' R1 I# u- f
  24. ;-------------------------------------------------, D3 o& c3 O* [/ @* o* Y% Q
  25. PROGRAM_BANK                = $05
    5 T: [* ^3 ]$ V7 B( Y0 w/ ]
  26. PROGRAM_ADDR                = $8000
    + B( s8 U. j: r2 ?6 \* K
  27. ;-------------------------------------------------
    : q3 }; k" h- R( R
  28. RESET_BANK                  = $07: Y5 j8 Q) c2 p
  29. RESET_ADDR                  = $FE004 _! G7 T+ k, v5 x! j
  30. ;==================================================
    : ?( V- O6 Z4 |
  31. Music_Init_Addr             = $DFF0 ;音乐初始化地址+ z6 n" p  n( O. }1 b4 T* _3 D
  32. Music_Play_Addr             = $813C ;音乐播放地址: d5 |$ i$ Q8 m7 q* S5 n& G3 @
  33. Music_Reset_Addr            = $0000 ;音乐重设数据地址
    # K  w% ^6 T. h* l  X; e5 u' V
  34. ;==================================================; ~3 \  p. o7 M( {* u, x8 z5 l$ ~
  35. Music_Song_Total            = 039  ;全部曲目总数7 y: Z) N. v) Q$ e/ L/ M
  36. Music_Start_Song            = 007  ;初始播放曲目* H3 c, `# a- }% f) }8 t8 f' d
  37. ;==================================================) s3 g% r: l: R, [3 C  }# B# [: `

  38. ' O  R1 ^& y4 o
  39. ;==================================================
    & \$ m5 e3 u1 o  t* S0 G
  40. Title_Text_Pos      = $210D ;标题文本位置
    6 \, `5 W7 R* H; R
  41. Author_Info_Pos     = $2284 ;作者文本位置: I7 G" I, t7 P
  42. Date_Info_Pos       = $22CB ;日期文本位置0 C/ K- O  X$ r* Z: k1 V
  43. ;------------------------------
    6 T$ V3 P* P2 x/ e7 j! r0 ~4 B" M' x& x
  44. ;------------------------------
    % W$ J( a( k! C: C
  45. .IF SOUND_BAR_SHOW_ENABLE
    ) c9 L2 J( [, l, a
  46. Play_Index_Pos      = $21B3 ;当前曲目位置: n- O2 z& Q8 Q  X) `7 ]' g7 `6 f
  47. Play_Time_Pos       = $21F3 ;播放时间位置) R: }1 p5 ?: K
  48. Play_State_Pos      = $2233 ;播放状态位置
    % \7 w* f# Z. L
  49. .ELSE# m: W) h& E' F) I$ t5 i

  50. 6 f  h" k' K+ d) k& O- _* ~9 D3 C% [8 A
  51. .IF Music_Song_Total > 99
    ! j' }6 }, K. Q+ f& Z" i/ M, j
  52. Play_Index_Pos      = $21AC ;当前曲目位置: L. o+ G  U+ r
  53. .ELSE, f3 k$ O! F& D% h$ B/ }2 f
  54. ' B! b$ Y$ Q  B5 Q8 r8 R7 d; j8 M6 O
  55. .IF Music_Song_Total > 9
    % b  U: V5 N. z. g
  56. Play_Index_Pos      = $21AD ;当前曲目位置
    % `: A* O$ r; S! I- X
  57. .ELSE4 X6 u; @8 k( \# ?# k' a3 q& G
  58. Play_Index_Pos      = $21AE ;当前曲目位置
    : |2 J2 [, Q" o  Y; A  C# M
  59. .ENDIF9 F2 x0 m$ x7 u. @  f  U
  60. ( O! F' a/ b  @
  61. .ENDIF' i3 ]  H, x* Z

  62. ! v  ^$ Y; E( [, _0 Z6 b
  63. ) \' L( T& f9 ?4 e8 k& q/ k
  64. Play_Time_Pos       = $21EC ;播放时间位置
    5 k7 k- |1 F: m
  65. Play_State_Pos      = $222C ;播放状态位置# c. t! j# @6 E) E6 ^3 R
  66. .ENDIF' y1 q& C4 Z  |) H! n
  67. ;------------------------------3 G- h3 ^; e) G, V% o
  68. Track_Name_Pos      = $216B ;曲目文本位置6 Y$ b; k4 a: [
  69. Sound_Track_Pos     = $21A5 ;声道文本位置' P5 _4 g) y5 v) o
  70. Sound_Bar_Pos       = $21A9 ;音乐条位置
    ) O7 r# a% A# R7 u6 J1 I1 s3 _
  71. ;==================================================
      [8 T( c% C. ]% f5 ?
  72. Scroll_X = $00
    5 t! x8 ~* R: O, I& @
  73. Scroll_Y = $06
    - x( _7 d: Q; R# ?, e4 O7 L$ ~
  74. ;==================================================
      Z4 B5 p1 l* A3 o" G) w( M
  75. RAM_Cln_1       = $0100
    ( I2 E/ e8 c- H- y$ O
  76. RAM_Cln_1_Size  = $805 b- l5 E& R; A$ p5 F$ F4 v  Z) d  j( }
  77. RAM_Cln_2       = $00E0
    , V) x& ]6 ?5 [$ }+ w
  78. RAM_Cln_2_Size  = $207 v. F1 r% o4 v) M* [: J$ x
  79. RAM_Cln_3       = $00E0
    $ O8 K4 `; i5 I: b
  80. RAM_Cln_3_Size  = $20
    5 p5 P: p% j  C0 S+ t
  81. ; i; U8 r0 P9 U
  82. ;==================================================( B! ?8 a2 E+ X7 Q
  83. PPU_CTRL                =   $2000   ;PPU控制寄存器, q& e5 W9 [2 f" w* r9 s
  84. PPU_MASK                =   $2001   ;PPU掩码寄存器
    $ A9 E2 F- ?5 D5 u2 A5 e9 t- U+ \
  85. PPU_STATUS              =   $2002   ;PPU状态寄存器:读取后PPU_SCROLL和PPU_ADDRESS被复位,下一个写到PPU_SCROLL的数据是水平的,写到PPU_ADDRESS的数据是高位7 X0 L% H/ @5 z6 ~* i( @4 C
  86. PPU_OAM_ADDR            =   $2003   ;精灵RAM地址:用来设置通过PPU_OAM_DATA访问的256字节精灵RAM地址。每次访问PPU_OAM_DATA后该地址增加1
    ; M0 e2 ]$ f2 W: C; Z# W% T
  87. PPU_OAM_DATA            =   $2004   ;精灵RAM数据:用来读/写精灵内存。地址通过PPU_OAM_ADDR来设置,每次访问后地址增加13 D) N0 j0 V  T4 S
  88. PPU_SCROLL              =   $2005   ;屏幕滚动偏移:第一个写的值会进入垂直滚动寄存器(若>239,被忽略)。第二个值出现在水平滚动寄存器
    / ]- _# L9 ]- Q' [! ?, ]6 t7 L
  89. PPU_ADDRESS             =   $2006   ;VRAM地址:设置PPU_DATA访问的VRAM地址。第一个写地址的高6位。第二个写低8位。每次访问PPU_DATA后地址增加
    ) u" m) x+ J8 E" w! H1 O0 t3 ^
  90. PPU_DATA                =   $2007   ;VRAM数据:用来访问VRAM数据,通过PPU_ADDRESS设置的地址在每次访问之后会增加1或32
    2 |( N# U# N+ l5 \3 D5 R
  91. OAM_DMA                 =   $4014   ;DMA访问精灵RAM:通过写一个值xx到这个端口,引起CPU内存地址为$xx00-$xxFF的区域传送到精灵内存" Z- k; K5 C" k' P: F1 }0 K
  92. APU_STATUS              =   $4015   ;声音通道切换* o' w, A" `' j/ M% `+ v% }6 s
  93. JOY1_FRAME              =   $4016   ;手柄1 + 选通/ a0 V8 t4 A( X* \
  94. JOY2_FRAME              =   $4017   ;手柄2 + 选通$ G: v+ V- h3 K3 e( h- ]5 f
  95. ;==================================================
    % i: Y1 P) b% v* N8 W/ K
  96. MMC3_BANK_CTRL          =   $8000( h( y# A+ ]$ V6 _4 R9 M
  97. MMC3_BANK_DATA          =   $8001
    2 ~# Y# S9 t- e% H( _5 u
  98. MMC3_MIRRORING          =   $A000
    ' `' D& u; B) W) a% _
  99. MMC3_PRG_RAM_PROTECT    =   $A0018 d* Y/ C. ?6 o* I
  100. MMC3_IRQ_LATCH          =   $C000
    # _, U1 h! ]- O* Y0 q
  101. MMC3_IRQ_RELOAD         =   $C001! g0 T8 \; q& w) v3 I& m! f
  102. MMC3_IRQ_DISABLE        =   $E000
    & B3 f4 Z* `5 Z  T) j4 p4 k
  103. MMC3_IRQ_ENABLE         =   $E001
    9 Z& Y* ]# T5 k$ Y

  104. 7 S) K) q! A1 p. h" f
  105. ;音乐数据块) `1 ]1 N4 Q9 G4 f: J
  106. " X% |) Q- W% ~/ m( z
  107. ;======================================================================
    , `0 h( M4 t8 z1 R& X# o1 u3 _9 C
  108. .IF SOUND_BAR_SHOW_ENABLE
    : q8 S: B8 `' a4 E$ z  c8 c
  109. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK0 O1 j3 r: `7 p' Q' o' l; a% T
  110. .INCBIN "sound_bank_bar/music_data_0.bank"3 ]% Q4 T' l, c4 c! |2 f0 `

  111. 1 h9 L/ u( O: Y5 b7 V' B
  112. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    $ R0 s- R, _' |' D7 _. ?% ?
  113. .INCBIN "sound_bank_bar/music_data_1.bank"
    # s& W4 p/ X0 [! L
  114. 8 |* {5 l0 k9 G" Y, ^
  115. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK" Z0 m% \' o2 O6 f' ?; a/ e3 w
  116. .INCBIN "sound_bank_bar/music_data_2.bank"( o6 J/ ^, C/ \6 h$ s" z* R
  117. # R1 v4 V: ]9 k( M
  118. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK
    4 x: ]" U4 c; `! N9 q
  119. .INCBIN "sound_bank_bar/music_data_3.bank"+ w* k- \* q3 r' y, d' ^

  120.   z5 q7 J% E3 m7 m* C/ W
  121. .ELSE
    2 b2 d% J0 }' C" a
  122. .BANK SOUND_DATA_BANK_0 & BANK_DATA_MASK
    0 @, u" Y" }: j
  123. .INCBIN "sound_bank/music_data_0.bank"' R9 c: [* @. w
  124. & O' }% M6 x1 f
  125. .BANK SOUND_DATA_BANK_1 & BANK_DATA_MASK
    5 [9 M& o/ u6 c" C$ i
  126. .INCBIN "sound_bank/music_data_1.bank"& P& J+ V5 N! Z, X; {" H  L

  127. 5 k1 P3 N$ ]* F' K
  128. .BANK SOUND_DATA_BANK_2 & BANK_DATA_MASK
    + Z8 g% x$ l  f5 T8 t
  129. .INCBIN "sound_bank/music_data_2.bank"
    0 T/ Y! ?  A5 C7 F; _1 R6 s

  130. : z# P) h  ?9 N/ T" \+ a' D6 N. s
  131. .BANK SOUND_DATA_BANK_C000  & BANK_DATA_MASK1 T  p& Q  A  U7 U: G
  132. .INCBIN "sound_bank/music_data_3.bank"2 A3 b: ~. j( Z7 G' [5 y
  133. .ENDIF/ H8 N8 }, h- {  k
  134. / N; e. I+ @0 d/ o( B* |
  135. ;CHR图形数据
    . B1 T' [& F* f4 L3 U
  136. ;======================================================================* D- ?' `# o$ h1 X) J, {
  137. .BANK CHR_DATA_BANK
    # w  n4 z: m6 [* U
  138. .INCBIN "chr_bank/chr_data.chr"6 _0 F; C( m. F
  139. # `: p+ R' s1 g8 s. p7 @
  140. ;==================================================
    - P+ n, U1 g7 h3 F, H# g1 [) D- b
  141. PPU_Addr        = $0300
    " C0 B$ B7 [7 [( H, b# X9 n
  142. Palette_Addr    = $03C0! s. {& u$ }/ ]$ s
  143. Sound_Bar       = PPU_Addr+$E0
    1 D& m  G" `8 k
  144. ;==================================================
    ( Y' T: |, U) F; U5 h
  145. Palette_Update_Addr     = Palette_Addr+$0D
    % \8 ?7 y. |  k
  146. Palette_Update_Max      = $2C
    + ^1 W1 V4 E* x
  147. Palette_Update_Min      = $21
    2 a0 H- e( [) l6 E% D8 V- K
  148. Palette_Update_Interval = 60
    2 X9 T& r1 D7 @1 `/ K
  149. ;==================================================' V- i5 r4 o( p! ?/ V1 z6 C
  150. Sound_Bar_Cnt       = PPU_Addr+$F0
      C3 T. A& \" P) c2 h' K1 }2 g3 I
  151. Screen_State        = Sound_Bar_Cnt+$01
    6 L8 T# g; v. [% ~* a; z
  152. PPU_Cur             = Sound_Bar_Cnt+$02. s, R% H& z6 {- h
  153. PPU_Addr_H          = Sound_Bar_Cnt+$03- |" N4 \9 w; I
  154. PPU_Addr_L          = Sound_Bar_Cnt+$048 O7 _- B$ {" I& E8 `
  155. ;==================================================
    % ~" w. I# m4 ^4 U5 s0 [0 P# b
  156. Data_L              = $704 A( S1 p. T% k: X
  157. Data_H              = Data_L + $01- z, }3 U$ L) s; A# g$ i( U
  158. Data_Cnt            = Data_L + $02
    ) |5 G! g7 L, V* k
  159. Data_Buf            = Data_L + $03
    9 N1 u1 Q7 B, `! j$ ^- x6 d
  160. Time_Wait_Cnt       = Data_L + $049 [: w* C' ~- i) }& r9 g& t1 m
  161. Palette_Wait_Cnt    = Data_L + $05
    & I& I; c( v7 N) D$ D
  162. Palette_Update_Flag = Data_L + $06
    $ f/ g! s0 D/ k: h* L- f1 C0 f- s
  163. Show_Track_Name     = Data_L + $07
    - ]! g7 `) F  [
  164. ;==================================================
    * q0 B4 [; G' g, N
  165. Key_Keep            = Show_Track_Name + 1
    . u- p, L$ P6 h% Q- |, ^
  166. Key_Once            = Key_Keep+$01
    6 c  ?; s- R. H) r/ @* ~/ ~
  167. Key_Kemp            = Key_Keep+$02
    ! Q/ a/ d' T/ u* a( z
  168. Key_Temp            = Key_Keep+$03
    + ?) J4 e0 h0 L" j6 q6 d% d% ^
  169. Key_Getv            = Key_Keep+$04
    * E' o/ G4 h$ J" P: {7 \& s+ u. c$ o
  170. ;==================================================: d6 f7 @8 E2 r
  171. Music_Cur           = Key_Getv+$017 [7 q4 ]/ |- |# \) L: ]
  172. Music_Last          = Music_Cur+$01
    , f6 x! [/ k2 k& o2 `
  173. Music_State         = Music_Cur+$02; ?7 g7 O1 x% V6 \
  174. ;==================================================
    7 i& G5 W% o% O" x0 S# B
  175. HEX_Data            = Music_State+$01
    . ^) Q4 v0 O1 \  G" m- j
  176. DEC_H               = HEX_Data+$01
    ; x4 M+ f$ _$ q0 @3 b+ R5 l1 w7 r
  177. DEC_T               = HEX_Data+$02
      V2 c9 k8 W' j8 v4 J
  178. DEC_L               = HEX_Data+$03
    0 l1 C, Z* L4 t! G
  179. ;==================================================( Q' r& @3 p1 [6 [- k1 N4 @
  180. Time_S              = DEC_L+$01  ^0 d/ e1 A, [  J+ `+ d2 o2 S2 N
  181. Time_M              = Time_S+$015 O! J$ r6 P9 I# U5 P3 h: }3 E
  182. Time_H              = Time_S+$02
    ' K1 O5 i# Z/ N7 s5 i9 F
  183. Time_Cnt            = Time_S+$030 W' M7 ~6 \, _0 L

  184. % w# g7 l0 g+ c; J8 w2 z2 k( o9 v
  185. ;==================================================
    - p- d# \* Y5 V6 ~* H, d! p
  186. Music_Bank_8000 = Time_Cnt + 12 d# Y, j/ \6 F9 \
  187. Music_Bank_A000 = Music_Bank_8000 + 1$ A0 X) K$ x: G# M, B0 Q
  188. ;==================================================
    3 r' U% f1 l, S3 P+ m' |
  189. ! I( O6 }9 ?0 c, v9 ~; X
  190. ;======================================================================( e0 I: w" G4 ^& A3 n( @4 y7 r
  191. .BANK PROGRAM_BANK
    : T0 E: e/ O& [; Y+ B) [. E" Z
  192. .ORG PROGRAM_ADDR
    4 i4 {- g7 J( D  |
  193. 8 ~" X! b) Z. u% l0 u
  194. ;==================================================
    - f# d9 l2 q# A- ^! L
  195. NmiProgramProcess;NMI中断程序处理
      N  A* C/ n1 G1 V5 F
  196. ;处理PPU图像5 f/ ?" g$ u2 }8 T+ ^
  197. JSR PPU_Proc' ~7 M- p, S3 v8 ?4 Y3 e/ l

  198. 8 ^$ f% o3 H* l; N* G$ f8 {6 f
  199. ;启用NMI中断, X) n  l5 ~" {! E# Q
  200. LDA #$801 A6 r3 r" U( o: s0 @' j' S, i
  201. STA PPU_CTRL3 c8 M; f1 Q9 H8 S: w( e

  202. 7 l% Z' b) x' f/ Z
  203. ;更新调色板
    $ M6 y! [" U8 Z" A+ x& M4 n
  204. JSR Update_Palette_Data
    ! ~- ]+ l/ N: f% j( w
  205. - y; \7 Q4 q5 _& l: L* f) w. q
  206. ;显示时间(缓冲)
    # d6 d  H- C- J4 P. @
  207. JSR Time_Show
    2 ~- n& ?) C! G7 c' G3 Z6 f: o7 G
  208. / l2 H, V1 e4 O4 r
  209. ;播放计时6 o. A0 i$ @( _5 s
  210. JSR Time_Count9 w& N9 Y: }' }5 F

  211. 4 t7 E+ y- P  ^5 G3 |
  212. ;播放声音/ E3 m' x* M) Y& E1 x$ L+ o5 i
  213. JSR Sound_Play) R6 f8 b0 j% Z; h

  214. 2 o' T' m  ?. J1 u8 z6 i2 x0 x
  215. ;切换音乐(手柄触发)
    & Z8 N4 o8 G# Y) v; x; R
  216. JSR Music_Switch
    ( }2 w7 k: s0 Q. y

  217. % S) h  m/ g8 y$ D4 ]) n
  218. ;音乐显示(缓冲)
    0 }0 ^3 Y  E4 u0 u6 C- I" D
  219. .IF SOUND_BAR_SHOW_ENABLE
      x# z. \- @1 p) K' O0 ]8 o5 V. L
  220. JSR Music_Vision
    2 m& Q" Q0 H1 E2 ~" G" K
  221. .ENDIF( A8 k9 R( q5 J8 I
  222. ; h% h0 Y, z8 Y8 |* _3 S9 }/ L
  223. LDA Time_Wait_Cnt
    : c" |% |) _7 E
  224. BEQ NmiProgramProcessEnd
    8 h" R0 B0 K/ ]4 V
  225. DEC Time_Wait_Cnt+ m. s1 H6 h2 j! R/ K3 O0 t
  226. NmiProgramProcessEnd
    . ]6 R( f$ E1 c- {1 s
  227. RTS
    " X0 p  c0 ]" A& ]' S

  228. 7 n, G4 A/ E) b* Y' _% X
  229. ;==================================================* b9 j  B. i2 X4 ]. g4 _+ d
  230. ProgramBegin;主程序$ Q. v* Y# ~9 D# R. S
  231. LDA #$00( p( h( b2 |$ G* B
  232. STA PPU_CTRL
    ; q' ^2 u, C, a+ d7 P
  233. STA PPU_STATUS
    7 w% J) G# a) Q+ N- m
  234. STA PPU_MASK
    2 `6 \4 J0 @" B  l9 {" s/ Z
  235. STA APU_STATUS
    # w& s+ h6 O' Y6 i, P
  236. STA PPU_SCROLL
    : T  n: F6 C$ h
  237. STA PPU_SCROLL
    / x. W1 b+ ~, s$ a
  238. LDA #$C00 }# u% K  n: j* K
  239. STA JOY2_FRAME3 u7 j+ x' j' |& G. r
  240. + h  E+ a' B& s3 ]0 K' w
  241. LDX #$FF5 G) N& y2 M& X
  242. TXS- n+ m7 w9 [3 a4 s$ O
  243. LDA #$00
    0 ]- l) h' C4 G; s2 S
  244. STA PPU_CTRL
    : g7 s4 u  H) g) O1 j9 Y% M& f
  245. STA PPU_MASK/ i- y- E3 n  l7 A
  246. STA MMC3_IRQ_DISABLE
    ! z* Q$ f8 ~/ o0 q: `

  247. $ I. U& H, U/ j% R5 k" c  m
  248. ;==============================
    " p* ]2 f6 T! j* Q+ [
  249. ;调色板清空
    $ Q% s" @0 u1 j+ {- U* P
  250. LDA #$3F$ B" ?8 s0 c* a  f. g4 X
  251. STA PPU_ADDRESS
    4 `9 Z2 m! w. F
  252. LDA #$004 B) c( Y  F4 ]2 |2 E
  253. STA PPU_ADDRESS
      L' [5 N3 E1 y
  254. LDA #$0F! H+ q4 q: d1 M% X
  255. Palette_Clear% s: W9 ]1 |7 P; H5 @1 V; O  Y# M
  256. STA PPU_DATA0 p# m$ f/ ]% U: h2 j& [  A
  257. INX/ G, R. y$ o' L* v
  258. CPX #$20
    + `( N; R% W+ {( \0 u, U, r
  259. BCC Palette_Clear! k/ ]2 H, |5 K
  260. LDA #$00
    0 U/ R  \) W! Z
  261. STA APU_STATUS
    # L5 {0 R$ `2 P5 m/ e
  262. ;==============================
    , |6 t1 ?5 [1 Z/ M$ l5 P* z
  263. ;初始化背景调色板
    , A& s. H7 S( R4 V2 e% `# |* e1 P
  264. JSR Set_Palette_Color" p* B' _* n7 z9 `2 C
  265. JSR Set_NameTable_Attributes
    4 b, v' Q. Y' Y3 P5 s& b% J

  266. $ T/ {8 }( C/ L) U- E
  267. ;==============================+ l6 j; @) ?" C7 Z# r2 l
  268. ;RAM初始化% ?1 k; Y$ J9 E( r6 h( q
  269. RAM_Clear_All- U0 i' A8 [  a
  270. LDX #$003 `8 z5 M& H  G, j6 o  g, a& v
  271. LDA #$00( K" \( S' m6 p( ~1 d7 |( }
  272. RAM_Clear_All_Start9 A- y7 c' [7 q/ _1 ^
  273. STA $00,X+ I9 a6 D$ y8 e7 ~5 r
  274. STA $0100,X
      [$ U& R" [+ o* `/ h0 G2 s7 f
  275. STA $0200,X
    2 `+ P( O% v4 n- e' e. |/ v
  276. STA $0300,X$ d& H! O8 b6 P3 G. u
  277. STA $0400,X9 ^' R6 d% p. a
  278. STA $0500,X
    , Y6 `$ d5 t( }' k4 f
  279. STA $0600,X# Z( n- o* L2 N9 L" F
  280. STA $0700,X
    0 S" N3 y( I$ M6 C; y1 I
  281. INX
    6 ~! G: s$ d7 J
  282. BNE RAM_Clear_All_Start
    - q. q- V4 x( w

  283. 9 s- D- _* M' i" H2 F- C
  284. JSR VramInit
    8 N! J0 ]7 d- s/ i9 e/ y- K' p( y
  285. JSR Init_Palette_Addr% f* X' ~9 h/ z" n9 Z

  286. 3 S% p3 |/ k8 C, t
  287. .IF Music_Reset_Addr
    ( R  v9 M3 b' C+ r) P% z; J
  288. JSR Sound_Reset
      U% Z0 P" B+ D7 Q3 u
  289. .Endif
    6 l# ]! i& u! A

  290. , J- x: h4 I5 }& a2 B! ~2 D  V* o6 @) V
  291. LDA #Music_Start_Song-$01
    3 A, ]9 n, B" \0 X& F* w
  292. STA Music_Cur( `  f4 O& h7 T, O! l- F* k% E

  293. . J; ~  H$ ]+ Z" E! H0 L
  294. JSR Show_Music_Text
    3 b+ b3 A5 f0 @! h0 }+ C& f

  295. ; |2 H2 u: h% W: Z% I9 n
  296. .IF SOUND_BAR_SHOW_ENABLE
    . ^1 ^# S$ I% }7 p& w
  297. JSR Sound_Bar_Text_Set
    3 H. ~: Z; @  C/ F/ N1 z5 @
  298. .ENDIF! E: s# T, ]2 C

  299. 9 {2 K2 l! c' L; T! {% y& f
  300. .IF Track_Name_Pos
    ) Y$ }8 L+ O% u% c3 O! G) ?4 Y1 }
  301. JSR Show_Track_Info; C+ {: ~% p* @! y
  302. .ENDIF/ k$ x! H$ |! {0 ~
  303.   `) |4 B7 M4 I# Q, C: ^
  304. JSR PPU_Proc
    5 O: S& Q3 p, {1 N' v  c% {. m

  305. / r* e/ {. }+ G6 Y1 e" q$ @) j
  306. LDA #$0E8 n! t% H% \6 r  k
  307. STA Screen_State
    / f" ]( h) x$ s! p% e
  308. ; J  W& X- j. ?: @. e7 U
  309. JSR Sund_Bank_Init
    # U6 X/ B/ |* l
  310. 8 o' |" n- W! @( S% L/ A! {" u3 T
  311. JSR Music_Show) i1 h% ?6 k: I# |2 I( B
  312. JSR Time_Show3 R" B  t* V+ U
  313. JSR Music_Stata_Show! G! c8 j/ R2 i7 }( v
  314. JSR Time_Delay
    - I! Z# ^5 S1 T+ t( A- h1 E: P; b
  315. & X& F% t" a4 m. H9 s, j5 r
  316. 8 p( G9 \4 E' u% N+ j
  317. LDA #$80
    ' G/ b' b4 g4 s! B; Y
  318. STA PPU_CTRL
    ' e( i# ~$ @1 @* C/ J

  319. 8 q2 t" f$ b  @& l7 f! Z( E
  320. LDA #$20
    1 X" j7 A4 ~; f+ z6 _
  321. STA Time_Wait_Cnt
    # R$ z/ q. o  q' @) B0 o8 |: o" x/ |
  322. ' R- J0 K7 k8 W" T% M0 ]9 t
  323. Wait_Time_Over3 T# Q- v& Z  h
  324. LDA Time_Wait_Cnt
      _" [9 w' e! X- x* C
  325. BNE Wait_Time_Over
    8 W, k& B8 `( s0 K

  326. 7 h8 {$ a! y5 {( N
  327. LDA #$1F
    + D0 m( N& i1 e7 E7 W- n
  328. STA APU_STATUS2 a, q# O4 N" Y( }* h
  329. LDA Music_Cur
    ) _" f* {7 i( N
  330. JSR Sound_Init
    / @, r8 g* V; a1 o

  331. . x2 g: k; |$ Y. x* g
  332. JMP MainLoop% N1 [2 ], X( S( J3 E0 b
  333. 1 A6 [( B+ M5 m
  334. ;==============================
    6 ^: Q- P( K+ y$ z
  335. Time_Delay;延时等待) T4 t; v  e8 i0 e# H$ o
  336. LDA PPU_STATUS7 A- I# O4 ]; j. L
  337. BPL Time_Delay
    ) e9 _- S6 j* `- i, D# n
  338. RTS
    1 G. L1 ]8 g* z& O

  339. + d; c0 P, j2 R1 X% o
  340. ;==============================
    6 k  M0 v( ~& [  F1 x2 @( {
  341. VramInit;初始化图形内存
    % I2 i% C' j2 I. L# N2 r2 M
  342. LDA #CHR_DATA_BANK
    9 f, B# P7 u/ Z& e0 U
  343. JSR SwitchBankA000
    7 R7 q3 {; r5 @# P6 D  o9 ^) K
  344. LDA #LOW(CHR_DATA_ADDR)
    9 o9 u. b8 e) J
  345. STA <Data_L: A( M/ P$ R! |- s$ }4 t2 M
  346. LDA #HIGH(CHR_DATA_ADDR)/ y# x1 @; o, Y. u0 w  Z% H
  347. STA <Data_H
    * R& i9 e# S9 B% O% N
  348. LDY #$00
    3 h' P8 h' y; K1 M: h# ~
  349. LDX #$20
    5 z3 |5 T. p+ M" v
  350. LDA #$00
    - L9 ~0 z0 k3 O( A9 o6 |2 V* C" n
  351. STA PPU_ADDRESS
    5 L$ z" b' A, ?2 b% |) Q  u
  352. STA PPU_ADDRESS
    , t6 W$ L- w) e3 C) v/ n
  353. VramInitWrite
    # ?. ~: u, J- [, Z9 B; U. S
  354. LDA [Data_L],Y
    & f+ S* Q  B' R# \7 x# i: w
  355. STA PPU_DATA
    7 g0 q  e( f" g) ?3 x/ @4 S
  356. INY
    , J1 {0 H6 r' T9 N
  357. BNE VramInitWrite
    ( {( y2 R- U6 a9 ~7 l9 ?
  358. INC Data_H5 `* }8 _6 l3 y1 [
  359. DEX2 c  l' `7 g4 W5 y  ~; @
  360. BNE VramInitWrite
    5 ], F2 {0 x4 }# W+ B* M
  361. RTS& ]# S  F* _7 L. _% _3 T
  362. 5 _  ^% g4 c6 A) b
  363. ;==============================
    . [* i  ^# b. h8 r
  364. RAM_Clear;RAM清除0 _- R+ {8 e  T7 {, [3 [1 u: U
  365. LDX #$00
    8 `: i; J% G3 T
  366. LDA #$00* i; l1 Z0 V: ^! v" Q+ U
  367. RAM_Clear_1& g- ?! Z$ p( B$ m) v
  368. STA RAM_Cln_1,X
    # R3 {: K2 Y8 \' P# H
  369. INX
    ! I- I- P! T" p
  370. CPX #RAM_Cln_1_Size$ ~( Y' ]- q9 k; M9 B+ V
  371. BNE RAM_Clear_1( N2 J9 }; N  m. x
  372. LDX #$00
    5 }7 M; f( f& J, w' u( V- o) y* g
  373. RAM_Clear_2
    ' q/ Q2 u: d: j
  374. STA RAM_Cln_2,X/ ]; A+ g. R* _, t6 i5 g3 }
  375. INX
    ' A0 H7 `, w, m$ n5 M% O
  376. CPX #RAM_Cln_2_Size: F- j6 s3 a3 X- J
  377. BNE RAM_Clear_2
    , {, ?! W. m; R" [6 t9 L- m  q. e
  378. LDX #$00+ E# R+ V4 e$ h" }
  379. RAM_Clear_3# G; E# q( o& [6 |$ V
  380. STA RAM_Cln_3,X
    1 A' N8 s) ]$ u' Y1 s
  381. INX
    9 O$ K. ^7 E4 V3 n
  382. CPX #RAM_Cln_3_Size$ h4 y/ P3 c/ m- d  l
  383. BNE RAM_Clear_3! a, t/ h( a! a9 f& Q0 M, {9 u
  384. RTS& u3 o" ^0 H2 m. Z. _
  385. 1 s  ^1 _' ?- u' N0 t/ T0 S
  386. ;==============================
    ; Y9 L, I4 v) }; o/ Z
  387. ;音乐切换% K/ B2 D7 V8 N; u( w: w
  388. Music_Switch
      T" y* r4 h! i3 G
  389. JSR Key_Proc
    % y% z8 _4 b' d) f- Q
  390. LDA Key_Once; E, v/ S% q( L# \* x% K
  391. CMP #$109 r# h5 @4 S+ ^% _
  392. BNE Music_Start_SongStop- [+ a6 l5 c7 ]& y+ G
  393. JSR Music_ReSet, F2 p; `9 P6 e& B( ]9 x

  394. 0 ?# N1 S1 ~6 k; p+ W
  395. ;音乐停止
    & o( ]5 S: I% w+ V& e8 l
  396. Music_Start_SongStop7 N. E. q% G" @( Y8 `7 ^
  397. LDA Key_Once
    $ s9 Z, C+ N4 n! I% ^1 p
  398. CMP #$20
    2 P1 I& D" K/ J4 m% V
  399. BNE Music_arrow
    8 H1 i+ j; @" ^3 ^
  400. LDA #$01: V2 j' p' V+ d7 h+ V  X
  401. STA Music_State& K3 A# a  y! k$ m9 @; j
  402. JSR Music_Bar_ReSet
    ' f+ L. ?$ @/ A5 a- O, ^1 r4 F7 Y
  403. JSR Time_ReSet
      ^0 Z& v  K, q% Y' `% L8 ^
  404. JSR RAM_Clear, D- P0 H1 X0 U4 z. c
  405. JSR Sound_Clear
    # ]/ d+ ^1 \( Q/ r' s1 }% O* V1 {
  406. JSR Music_Stata_Show
    / C0 K- E" {, U% a" N
  407. Music_arrow8 b# p" H) x  Z- V- K
  408. LDA Key_Once9 n' }% B1 @8 M3 O& L# c/ A* v( b& X
  409. AND #$CF) O& c5 d( Z. `
  410. BEQ Music_Switch_End- {; b' d! I6 ^
  411. JSR Music_Number
    4 b" Y, I% v9 B9 |
  412. JSR Music_ReSet
    . c4 t/ k& X  p3 @/ O
  413. JSR Music_Show
    5 O8 c! @# i8 t( N" ]7 [
  414. Music_Switch_End
    ; n9 n( M  y) q) ~+ W. r) t
  415. RTS- F' f3 ?+ t6 C5 `# F0 P
  416. 0 q. x/ H$ |4 c; F' v# m0 ], ^
  417. ;==============================# ~, k- g0 ]# W3 S- `
  418. ;音乐曲目切换
    2 j. p- A. `1 L" B
  419. Music_Number8 Z: w. F( a! B$ p+ H: z' ^" s
  420. LDA Music_Cur
    5 w& V/ N( Q' u# B/ X+ S
  421. STA Music_Last1 l- u3 Y/ U& x
  422. Music_Decrease' Y4 R. l& h8 Z* s1 P  W
  423. LDA Key_Once7 P' u$ i2 r$ s: w% A& X
  424. AND #$42
    ( m+ I  L5 {' x8 d( j' j5 ]$ j
  425. BEQ Music_Increase2 {$ z2 N; J4 O( Q2 Y$ u
  426. LDA Music_Cur& g) A" ~. a5 i9 {
  427. BEQ Music_Increase8 e: r5 q# _% R3 c" j
  428. DEC Music_Cur
    % [3 F# ~+ c7 w( l
  429. Music_Increase  [4 h! ?, b6 R1 Z
  430. LDA Key_Once8 ]# s0 o( n$ }9 C" n' X, m
  431. AND #$812 {0 D" H+ ^8 h( ]
  432. BEQ Music_Decrease_109 b. X9 c) S; @- V8 I
  433. LDA Music_Cur
    6 K& P, i2 e4 s/ }5 P
  434. CMP #Music_Song_Total-01/ t( ]9 M: Z. W  x. F. }
  435. BCS Music_Decrease_10
      H, Z! n- b+ C) |. N& I
  436. INC Music_Cur
      [1 R! T, ~# K; T( f
  437. Music_Decrease_10
    $ H7 d% W# d3 \8 E% i
  438. LDA Key_Once' H, U! \. R$ D1 L( T3 C7 B. ~
  439. CMP #$046 o, S$ t! J# u  d
  440. BNE Music_Increase_10; D8 ^! b1 V3 |) T, J
  441. LDA Music_Cur
    8 P& S( I/ B- A* V0 e6 y
  442. CMP #109 I& e" o" ]; U3 j3 N- s1 d
  443. BCC Music_Start_Song_Min
    " T# W- d- H7 c2 |
  444. LDA Music_Cur
    9 N8 m; U5 z% g8 f# X
  445. SEC
    " g4 b4 x& y& }. x
  446. SBC #10
    2 W( c  c" M6 N- @6 K
  447. STA Music_Cur
    8 M0 o# B* m0 M3 ]7 o
  448. LDA #$00
    ' A% I$ l( i* H/ I& S6 y" Q6 Q
  449. BEQ Music_Increase_10/ T; E) r9 o. n/ E, Q" W
  450. Music_Start_Song_Min
    * J; o7 d7 z3 R" y5 t4 j
  451. LDA #$00
      I" T: Z% v" _& q
  452. STA Music_Cur% C; h. b2 ]: a& L
  453. Music_Increase_10' K9 f% t, Y2 w& ?+ V6 _, q+ T
  454. LDA Key_Once. A& P% Q4 B8 F; d% d3 d2 @; p  p
  455. CMP #$08
    ' g4 L% p6 ^" @& i# W5 ?
  456. BNE Music_Number_End
    # ]- o' i* `9 L2 T
  457. LDA Music_Cur
    / S  t& c6 t9 e4 E  Y' A( F: }6 D
  458. CLC. J6 k. ^. l# O2 m% m/ T
  459. ADC #10: ^& c' B$ e8 p0 d
  460. CMP #Music_Song_Total-01* P' E5 i$ I, N  x; [$ l
  461. BCS Music_Start_Song_Max
    " D6 ~1 ^5 g, w
  462. STA Music_Cur
    - C! _! ^4 ?$ |& `9 }' F- S
  463. LDA #00( p, M/ k8 n# @6 o& A
  464. BEQ Music_Number_End/ d  o6 u* ^1 M, N  _% e
  465. Music_Start_Song_Max) I2 y, A) d6 y3 i5 s
  466. LDA #Music_Song_Total-01( [- E8 m% R  Z  g: F) o
  467. STA Music_Cur
    ' }/ z; l" Y+ @/ y( k6 }( J' d
  468. Music_Number_End$ Z( o. b$ C! E* i: i
  469. RTS* g5 I; D1 R5 R3 B

  470. / g% z; m9 e* L# g# |7 G& H6 v
  471. ;==============================! i! ]* P$ H# @
  472. ;音乐重设% m# _* \+ ?  J- Z* ^; o' a
  473. Music_ReSet# L0 I2 S. ~- K3 {' }( w7 ~% `
  474. JSR RAM_Clear5 Q: A, V1 p% H# v3 A
  475. JSR Sound_Clear% j, c4 C% Z$ R$ a# e
  476. LDA #$1F( D$ Y  B( H9 I3 x6 C
  477. STA APU_STATUS4 r2 l3 u. N8 o6 b
  478. LDA Music_Cur" R! M. p( W3 B9 Y' ]4 o3 C1 I8 R
  479. JSR Sound_Init0 d) ?  C) I8 f% u' z( ?  g
  480. RTS( o; N3 [4 X( @$ _$ O
  481. 5 i8 ~* D. ^7 a" q! ^9 J& Z! c. y
  482. ;==============================7 s, x" K7 S8 Q! T, p  [
  483. ;音乐端口清除) y- d3 F' T# w/ W2 ^
  484. Sound_Clear
    ' N" N, G" g" y
  485. LDA #$00
    ; g' P0 D# i' R1 Z1 e
  486. STA APU_STATUS
    - ?5 H( w- H8 O
  487. LDX #$00, y2 w9 `8 {: o1 \# |% ?& N$ l
  488. Sound_Clear_Start5 e( |2 x  U8 V* |% F% Q) e. C
  489. STA $4000,X7 p- W$ b- o/ ~& `! K
  490. INX
    ; d3 Q( J& I% E5 a
  491. CPX #$14
    $ E- z  w% c. ?" u) [* W1 `3 B' r0 p
  492. BCC Sound_Clear_Start
    $ E* ?# T6 [3 S/ c. C, l# ^" `
  493. RTS% s9 D6 U' N1 q1 t7 W) Y' y
  494. 2 e% D3 d& t" a; s1 A" z- J/ c
  495. ;==============================9 e3 S" o3 E, ]
  496. ;按键处理
    $ C2 ~* k& ]" U0 ^
  497. Key_Proc$ G( w- m" R. N5 s3 N, x
  498. JSR Key_Scan
    3 c" k& q2 O# O* l! _
  499. LDA Key_Keep) H1 v) h; K+ F  }! }+ ]2 r2 ?3 j
  500. STA Key_Temp
    3 B( B' B" u6 S+ J* D$ m
  501. JSR Key_Scan4 d1 w/ D5 [& U! O
  502. LDA Key_Keep
    - E1 W5 l$ C3 z. F! x
  503. CMP Key_Temp
      O- n9 _0 D7 x; A
  504. BEQ Key_Get_Once
    , y2 d: U! a. F& p) T
  505. LDA Key_Kemp; p+ _. s) ~4 Z4 Z
  506. STA Key_Keep* @& {, |& k+ T  d/ p) m
  507. Key_Get_Once
    % h8 F+ ?6 Q0 D$ E& a/ n
  508. TAY
    " {9 j( F" D/ w: Y/ m. V) C
  509. EOR Key_Kemp4 e9 d" m! X2 J& w0 ~! m
  510. AND Key_Keep
    8 Y$ h) [- t& |  d# x4 Y
  511. STA Key_Once
    7 ]$ b' `1 u  \9 k: U- W
  512. STY Key_Kemp
    - r0 J9 f+ v# C
  513. RTS; E6 G4 Y0 t1 }; Q* S& y: h$ Y
  514. ;------------------------------# E, q# H# f  f1 G, k4 F' Y4 n
  515. ;按键扫描
    3 U7 r& z' U2 X
  516. Key_Scan
    1 [5 ]% N5 @( W
  517. LDX #$01
    3 Y  O; k, v6 V: u* ~: X3 Y. Q1 O
  518. STX JOY1_FRAME; U) t; M7 |" S" x" }5 M
  519. DEX
    $ X: d3 W: e3 h7 T
  520. STX JOY1_FRAME
    1 P& W6 l/ s! Y, @& n' j
  521. LDX #$08  I: M  G9 h, T- v2 U4 a6 J
  522. Key_Value: R/ Z* l* I& @4 M6 J& [
  523. LDA JOY1_FRAME
    % J. m" d: z. d+ T
  524. STA Key_Getv" J2 x) E, b! a9 b& \
  525. LSR A5 B9 u3 V3 g) K( z
  526. ORA Key_Getv
    & G$ n& v$ {3 L" d
  527. LSR A: \2 X- D1 v8 g6 E& N/ b" Y
  528. ROL Key_Keep) E$ Q" U4 m( a" x
  529. DEX- ~' u# q+ Y9 |: X! h
  530. BNE Key_Value
    3 Q# r, V3 n1 T5 W% N; k$ |1 ^. e2 v& W
  531. RTS2 s$ l* r3 f; J, {( V( k! w

  532. 9 O- }9 \& R' a/ s, w1 }% m
  533. ;==============================
    : O4 c- ]0 u1 N# s9 X, e- G/ E
  534. .IF SOUND_BAR_SHOW_ENABLE5 t( O/ g0 J3 }% J, A: ?/ L) n, u
  535. ;音乐条显示6 s  p7 @& l  ^, W6 V' K; Z
  536. Music_Vision9 `7 n. L- F8 t4 ]# \5 U
  537. JSR Music_Animation2 \$ h) G4 C: m% [$ x" s
  538. JSR PPU_End
    # D, k8 U1 ?; N
  539. RTS
    2 E3 A2 g- |$ V+ i4 X; z
  540. ;------------------------------' g  H5 n, y9 a- G
  541. ;音乐条显示处理
    , o# A/ `/ W  C* u) M# }7 R  m
  542. Music_Animation; W7 ^' C/ K- E* k6 z3 {. o# k8 A! Z
  543. LDX PPU_Cur
    % F9 X0 u8 F8 m5 b7 Z+ {( x
  544. LDA #Mode_Line# i* C! ]3 x( S' I$ w2 |
  545. STA PPU_Addr,X8 r% ]: f9 {" |3 Y% u# _' {
  546. INX! e/ y3 j0 \& l" d# ?8 h
  547. LDA #HIGH(Sound_Bar_Pos)5 Z2 h+ t$ W2 I3 g9 c$ k
  548. STA PPU_Addr,X4 W9 W" W* H1 C3 {4 E. I
  549. INX
    $ E9 h! R4 [7 O; [1 L* w( a( z
  550. LDA #LOW(Sound_Bar_Pos)
    & X& D' }9 V" e! ~& O6 q$ a
  551. STA PPU_Addr,X
    ) o8 ]7 I, Q. m+ {0 Z
  552. INX! n4 J: }* C; V: q4 u: `
  553. LDA Sound_Bar3 I) i' Q7 K; c  |0 z$ @
  554. JSR Volume_Convert
    6 s4 \, M9 Q; z2 t8 z$ s- f
  555. JSR PPU_Return; B; G! p9 a  P& C
  556. LDA Sound_Bar+$4
    6 `6 j) ^6 p6 B4 R1 y: Z! V% f
  557. JSR Volume_Convert
    " {* @9 [5 V- V4 e
  558. JSR PPU_Return" X* _( v7 e/ P: G4 p1 {
  559. LDA Sound_Bar+$8" u$ b' o* }: i/ U# J7 U" C
  560. JSR Volume_Convert_Ex
      w& y( C/ p1 O2 P" v# H* \
  561. JSR PPU_Return! _. L7 s# ]7 `. y7 y. b
  562. LDA Sound_Bar+$C
    - h( r: P7 H& T
  563. JSR Volume_Convert# @2 o7 y2 M9 U7 c# Q
  564. JSR PPU_Return
    7 C6 T* b; P! u, m1 T
  565. LDY #$10
    3 c. E( w+ g9 l0 N2 b
  566. LDA APU_STATUS# z' u2 ~7 c9 W/ x
  567. AND #$10+ Y0 ]# k* I- D# J% Z% _
  568. BNE Volume_Count4 V. n/ m0 W" G1 p1 J
  569. LDY #$00& o" n1 M4 ?7 e: @- s' P6 R. x" p
  570. BEQ Volume_Count
    % j% r: K' l7 n  B1 S
  571. ;------------------------------6 `% b/ M. W( a8 V$ z! a: g4 R# o
  572. ;音乐条处理' l! q* X. u5 k, [2 A" O" q
  573. Volume_Convert_Ex! z/ X7 n) a- e6 S  h
  574. AND #$1F2 T! u4 m) X) D5 h: s7 J, r
  575. TAY
      I5 n! M& F6 g: |
  576. BNE Volume_Count
    * ^) b' ^7 z, p* h8 G+ i* }
  577. Volume_Convert
    - T: l! v" U8 {  S1 P
  578. AND #$0F
    ' F& G9 s! d1 ]* P! l( G
  579. TAY- t1 X: R# `+ N. l
  580. Volume_Count  u- M/ b/ ^% k* U2 ]" r
  581. LDA #$08
      d: Y* M. [) e* m! [  L
  582. STA Sound_Bar_Cnt8 K- q  A: f, X
  583. Volume_FILL8 ?( V" \7 B7 k" m) U
  584. DEY+ H  P+ h. Y1 a+ ?% v! P
  585. BEQ Volume_Half
    - c" v3 [5 b8 ]0 }( ~2 R7 N
  586. BMI Volume_Empty
    % d5 L# h; b: v# v; K
  587. DEY
    ; A( }) X5 h4 W$ Q7 W
  588. Volume_Full
    / C( \9 O/ r& Y. f$ |
  589. LDA #$16% H- a3 n& R! z1 q, s
  590. BNE Volume_PPU+ k6 T- }, L, N
  591. Volume_Half$ U1 A9 j8 Q6 U
  592. LDA #$15
    4 I$ `7 d$ r3 v5 ?) ?8 a8 R
  593. BNE Volume_PPU
      _% T; v. p  z, X% W0 Q* ~
  594. Volume_Empty
      Y7 J% a: g- y, b0 \
  595. LDA #$14
    ( J  ~& m  G% P7 M8 x
  596. Volume_PPU, o7 A) G: e' l/ b
  597. STA PPU_Addr,X; \2 v- s7 d& t6 b8 z/ f
  598. INX  W# ]' q4 d- t0 H6 D" h& S
  599. DEC Sound_Bar_Cnt4 u5 l3 u0 N$ q: {  }. z8 _
  600. BNE Volume_FILL% j, ~; ]7 I, v% C- V4 w
  601. RTS
    , d1 O8 o; W- [3 o  _, E

  602. % Q& N( S2 a0 }7 G" i3 @, w
  603. .ENDIF
    3 ^. }9 j: ?3 S2 _" r- t. _
  604. 8 w2 H% m/ _3 ?  G6 J
  605. ;==============================
    * n; `' T" Y' v9 [% f# Q0 E: E
  606. PPU_Addr_Set;PPU行开始
    % w% @4 p$ p% k7 }5 u
  607. LDX PPU_Cur% D+ m7 d+ D3 N% l% E* C
  608. LDA #Mode_Line
    ; g( ~+ {& f! I" Y1 o8 i& h
  609. STA PPU_Addr,X
    1 ~8 `  w: @2 K4 _( @
  610. INX+ p* M6 M1 w, x0 d
  611. RTS
    7 c6 E) m0 |& |5 S2 O1 H2 j

  612. " V$ G& o8 L( H4 H. h2 P
  613. PPU_Return;PPU转行8 ~7 k; F% w9 N  T
  614. LDA #Flag_Over
    4 G, p* l/ D, ?( v8 z
  615. STA PPU_Addr,X& g+ l  b4 l8 G1 y. a1 ?
  616. INX
    ! W& ^3 {& o; J1 ?8 d
  617. LDA #Mode_Return" M4 \! Y: Z/ [' v; [! D
  618. STA PPU_Addr,X9 y/ X& A; s% Z( ]/ p9 n! [2 Z; J
  619. INX0 K9 U& w; t0 R2 d, ~  A4 W% W4 y
  620. RTS# e: X5 b& y. ~9 C% D
  621. ! i) r7 V( T* X+ m! J3 r8 w5 d
  622. ;------------------------------
    + Q  [# f! l% [! x: }
  623. PPU_End;PPU结束
    4 x+ S% X/ {: i. \# j
  624. LDA #Flag_Over. R8 f7 l+ M' y8 m7 J' @
  625. STA PPU_Addr,X1 s) W0 M- I5 P, m8 @4 R
  626. INX# F, V* |4 m8 e% M" ]0 V
  627. STX PPU_Cur
    , I3 r0 C* S/ q9 b
  628. RTS
    ( p& o: k3 A$ C
  629. ;==============================
    7 |/ `1 @6 A  K# M/ W
  630. Mode_Line     = $FD    ;新起行模式
    6 n6 G" G. U, w/ v
  631. Mode_Return   = $FE    ;转下行模式
    8 a) s  R6 [( Y% H
  632. Mode_Clear    = $FC    ;行清除
    0 T9 x# l1 l5 E- d; ?' R& H% a; P2 X/ Z
  633. Mode_CntLine  = $FB    ;行计数写入
    # Y, W/ ]. C! s+ s# S
  634. Flag_Over     = $FF    ;行结束标志* b2 s6 z3 J4 H5 h

  635. + |2 |- B2 N2 M& N: I6 J4 e; B/ i
  636. ;------------------------------
    / `# `! L0 [+ b( ]8 D$ w% K
  637. ;PPU处理+ ?: S& @  C: v) k  Z* }( R
  638. PPU_Proc
    7 }  S7 s3 G! }
  639. LDX PPU_Cur
    % p: d- E9 |' }  G: _
  640. LDA #$00
    6 t6 _2 U9 O% c/ h& ]
  641. STA PPU_Cur+ I3 d! U0 d' m- {. `' e
  642. STA PPU_Addr,X
    7 E; X7 _* x% `5 N+ d
  643. LDA PPU_Addr
    * I1 s3 Q/ l3 ]
  644. BNE PPU_Proc_Beg/ H% q5 B" v+ K3 |7 t! B% w; @
  645. PPU_Proc_Ret% ~- D; Z4 P& H% ]6 J( W6 |! J3 b
  646. RTS% K- k3 s9 [/ W9 p( U
  647. ;------------------------------
    0 ^$ f; m' C% }2 x5 i* _5 C
  648. PPU_Proc_Beg  ;处理开始
    5 N% t# s. h  t* R; J% L% A& Z
  649. LDX #$00! s1 R' F: y. D3 [0 |
  650. STX PPU_MASK
    5 B' W1 y, g7 w
  651. ;------------------------------
    ) p* M8 J6 `1 w% V6 r
  652. PPU_Mode_Select  ;模式选择
    8 B5 ]. N& D( P: b  V$ e  c
  653. LDA PPU_Addr,X) Q, t" m! u4 ?( B8 L: `
  654. CMP #Mode_Line
    4 n) q- x3 f; T* n) x6 s2 _
  655. BEQ PPU_Mode_Newline
    4 {0 e& M& X5 d9 s, C  Y
  656. CMP #Mode_Return
    4 V+ t8 Y& Y$ w/ v5 }
  657. BEQ PPU_Mode_Return, z1 v  X- o% C8 P/ M6 ~6 D+ K
  658. CMP #Mode_Clear
      i5 z1 a1 F  W% x& r! p$ ~. S8 y* O
  659. BEQ PPU_Proc_Clear
    5 a0 s! L: t: R* M
  660. CMP #Mode_CntLine, J" z8 r  b6 \; d$ M/ X, W* M. S
  661. BEQ PPU_Proc_Cnt_Line
    ' @( G1 s6 g& X# }. t( s2 k7 a* j
  662. RTS
    * l) l: L, t( X8 \
  663. ;------------------------------* n  e9 j3 t( m9 T5 S' }4 w* n* Y9 h
  664. PPU_Mode_Return  ;转下行模式
    . Y+ e8 k* M: N2 k+ z  y, B
  665. LDA PPU_Addr_L
    & z& U# l! D( W7 {3 P3 P: ^
  666. CLC
    . C  N, P+ E+ [
  667. ADC #$203 u5 V% W9 k% Z* C1 I
  668. STA PPU_Addr_L
    ; ?  ]5 _8 @2 ~; P- S
  669. BCC PPU_Return_End
    1 b# U, a7 n9 d3 E
  670. INC PPU_Addr_H
    : N  j, ^. U: n
  671. PPU_Return_End
    1 B0 U! i, G% w" X  b
  672. JMP PPU_Set_Increaser
    * U$ v7 @: L, p% C$ G' Y; R' F
  673. ;------------------------------! F: `( T( y4 V/ {, k. ]3 _
  674. PPU_Mode_Newline  ;新起行模式% |/ S; Q' v8 Z- m! }2 K0 i
  675. INX7 E, u+ a& T' ~7 I) k( O
  676. LDA PPU_Addr,X
    * }$ [% x' T4 A# N
  677. STA PPU_Addr_H
    ! v' b, s4 h' d) {
  678. INX8 l/ f& w9 z! B9 B/ T( `0 s$ H" U" w
  679. LDA PPU_Addr,X& |. {0 D; w! Z2 c' E6 y/ W
  680. STA PPU_Addr_L
    4 `% B! w' F6 J2 {& z- {) w/ r. @) n
  681. ;------------------------------1 Y# J! Y) r2 R
  682. PPU_Set_Increaser   ;设置写入地址6 H- u( p. x+ T) k/ e! x
  683. LDA PPU_Addr_H- H; Z8 M  T: n' G, |- ~
  684. STA PPU_ADDRESS) O  N) H; `! n$ G: P/ w
  685. LDA PPU_Addr_L
    # z" O* ?. s! |/ \$ d% O" T
  686. STA PPU_ADDRESS
    & O7 d, n) X1 o* ^, u
  687. ;------------------------------
    ! i# s4 a! F# X+ O
  688. PPU_Write   ;写入数据# j' n# ?, j" i( a" J$ C
  689. INX: o! z- N" C" r0 W5 y/ ~
  690. LDA PPU_Addr,X( V- I' q0 l. t
  691. CMP #Flag_Over
    7 i; @% O6 |3 G, j
  692. BEQ PPU_Proc_End
    , W4 R6 W; h5 W9 e
  693. STA PPU_DATA
    % p3 Y, |- ~: J% R
  694. JMP PPU_Write
    & F; x# Q1 H; |9 ?3 x
  695. ;------------------------------- Z5 ~; j6 L7 U; N. y! u, e
  696. PPU_Proc_End  ;单行写入结束9 W2 |8 |6 R( h% l5 L
  697. INX
    5 I' Q/ D3 Q( t+ Q2 N0 A
  698. LDA PPU_Addr,X6 T  c' P- h: b% ^6 o0 [0 z
  699. BNE PPU_Mode_Select5 q9 L1 r+ ^; ]' L. N( o: `1 t, h
  700. STA PPU_Addr8 H7 f  b5 P  b1 x& Z5 s
  701. JSR Update_Palette_Color
    8 C$ K+ H" X" ]; _5 ?5 E+ ~9 C# l
  702. LDA #$00
    4 I% k) T5 I' f8 I8 {
  703. STA PPU_ADDRESS
    * D7 P2 {2 s$ [& h+ _
  704. STA PPU_ADDRESS
    0 i0 y, k* g3 g
  705. STA Show_Track_Name
    : b' R3 h- [3 H( a* h5 N/ [
  706. LDA #Scroll_X
    $ T* m- Q& H$ H
  707. STA PPU_SCROLL
    & l0 ~1 |! ?  d3 x& D  l
  708. LDA #Scroll_Y: l7 k; ~! i6 j5 C. \4 ?: p/ ~
  709. STA PPU_SCROLL
    . p! Z3 z$ k" X3 z# v7 h# a" }% R
  710. LDA Screen_State
    & K; O, F: G* R, i) r6 K
  711. STA PPU_MASK7 M6 w0 X4 w# o0 w% m
  712. RTS
    7 T% r0 i) a) }) B: w; S

  713. " @2 l( f0 L/ X) f% s' N$ k
  714. PPU_Proc_Clear/ S, ]! S! t  A2 m5 r
  715. INX
    7 I1 q3 t& F$ ~' A& t
  716. LDA PPU_Addr,X5 s; x* O# Q* t5 d9 c# B- z' `7 V- y- g
  717. STA PPU_ADDRESS
    1 Q+ P+ ]2 ]; d6 @. }1 s9 D% O! Q
  718. INX
    : Y0 N' b+ p; ^6 @# d; h" o
  719. LDA PPU_Addr,X
    / ~( W6 U) N  ^' \! q9 b
  720. STA PPU_ADDRESS
    7 F% H- ~+ P3 i# b4 R& O! E" d
  721. INX5 i# H: h8 d( @1 [6 ]/ x. }) O  `8 k0 O
  722. LDY PPU_Addr,X
    5 l9 t% f4 L' c3 r, L) u
  723. LDA #$003 y7 Q$ \. ?% j1 U: l5 s
  724. PPU_Proc_Clear_Write6 H- M1 K" ^) P- ^8 w7 l' e
  725. STA PPU_DATA. R' e% s4 B( @- }# R  _
  726. DEY
    ; I. F# E  Q4 O, S" V8 N& l( p/ l
  727. BNE PPU_Proc_Clear_Write9 e4 z5 l0 x+ i* y  i. }( B$ `' H
  728. JMP PPU_Proc_End
    ; E8 Y5 u$ J" |
  729. ' v4 }9 q2 a7 v5 u/ M7 Z
  730. PPU_Proc_Cnt_Line; K, H& V2 n, w) W; ~
  731. INX2 o6 h, Z6 Z% @4 c
  732. LDA PPU_Addr,X
    ( a0 S2 |, n& b1 y2 H
  733. STA PPU_ADDRESS" I0 ?! a! h* Z6 ]3 t2 s
  734. INX3 o: x9 o! ?* f$ j
  735. LDA PPU_Addr,X
    % y# ~) ]" z" _$ i
  736. STA PPU_ADDRESS* T8 Y0 t& e0 Z2 h- u
  737. INX9 ~' T: [1 V4 V# i% K2 U
  738. LDY PPU_Addr,X
    - w' U, u& J4 i3 ~$ l# o- t
  739. PPU_Proc_Cnt_Line_Write
    % d  Q: U0 Z% F/ o3 Z5 I9 ^4 i
  740. INX1 Y1 n- d: j, K" ?% l; o' ?+ i6 c7 ]
  741. LDA PPU_Addr,X! M) {' N* _9 w* s/ O; Y
  742. STA PPU_DATA$ \  u, v! I) u) `/ L& r
  743. DEY! i0 t% ?: z8 ]! a4 E! W
  744. BNE PPU_Proc_Cnt_Line_Write& E# @& e/ i6 k9 v) O7 w2 N
  745. JMP PPU_Proc_End
    ' S" r5 q3 j3 {8 U3 }" _

  746. + D- a, T5 f7 k& v9 }4 @  r
  747. ;==============================0 H) v- v1 ]. `7 [
  748. HEX_To_Dec;十六进制转十进制
    - L7 @2 B$ |0 e* Y3 \4 v
  749. STA HEX_Data
    . w2 d7 ~  g" O5 y* X
  750. PHA
    / B, ]* a/ b5 y* _% D
  751. TXA
    1 x( j6 b" [9 g
  752. PHA
    % Y$ B7 d8 ^$ M/ Z, w
  753. LDX #$004 Q$ Q5 m7 k7 ]. L" g
  754. LDA #$00( ^7 @* C" i7 s5 |
  755. HEX_Cln
    # W6 H6 F' H9 V
  756. STA DEC_H,X8 Y  r9 o9 x# G/ |
  757. INX8 U! ~+ ~. l" d3 K7 M& y! ]! q
  758. CPX #$03& S1 F0 e6 ^4 W
  759. BCC HEX_Cln$ u& i7 c, p. Y, n3 O" D7 q7 J
  760. LDA HEX_Data
    $ N6 W5 Y2 S6 Z( s. ?
  761. ;------------------------------& I4 y7 H: t/ @) v
  762. HEX_100
    : l& X7 x$ P4 F$ g5 E
  763. CMP #100' |; p7 Y& R" X& H, T
  764. BCC HEX_10/ B2 R8 I' M+ f+ o) N" P
  765. SEC1 O2 h, O& y: ]5 Q4 ]
  766. SBC #100
    8 I0 O6 \3 R- B/ D, \8 {
  767. INC DEC_H
    $ ^1 F; q( n( O- h8 k1 Z( L- b
  768. BNE HEX_100
    4 a7 R& i2 R* F
  769. ;------------------------------, k4 S- u* k& C
  770. HEX_108 T3 R& M0 p# u* Z& o. \! f
  771. CMP #10; _+ b7 ?  `4 `! w0 j
  772. BCC HEX_18 Q' e) f# P7 I/ z5 s- y
  773. SEC
    . s, t# w' n  l) @( M
  774. SBC #108 |& I6 g* ^. J2 d7 Y% Y$ o
  775. INC DEC_T9 u% U+ o7 r) V+ k4 ?/ \" b$ m
  776. BNE HEX_10
    5 ?- v8 T: G2 q0 b: H# C9 s& A4 t
  777. ;------------------------------, @$ K* v. _2 g
  778. HEX_1
    8 P" u2 H* k$ I1 S
  779. STA DEC_L
    ( J. J" o2 ^  q8 @
  780. PLA
    / M# [9 u% n. C, ]3 }
  781. TAX
    & e0 m7 z3 V) t" x
  782. PLA0 n( M! {2 y( S% \* l5 j
  783. RTS
    / _; D6 C' A* y  K1 J& b- B& ?

  784. # t/ c& O! ~$ k! u* @* T! C" _
  785. ;==============================
    9 A# ~. E* l* {0 q% l
  786. ;音乐曲目显示& i# m! n2 ^3 w6 U6 C! \
  787. Music_Show
    1 b, Q/ C! p! p+ H: c7 Z1 H' d. o
  788. LDA Music_Cur
    $ C! B3 y6 f  G& N9 O0 V5 W& }
  789. CLC6 F& t5 s" `& d# b: ~6 J# C
  790. ADC #$01
    5 M) e2 H, x( k' X9 m
  791. JSR HEX_To_Dec
    4 z! S# p+ {: {& H! A# B* t
  792. LDX PPU_Cur
    / e) n! F, L  T. v# p) n; [
  793. LDA #$FD: o, p! }' f% i3 R9 G+ ~7 g0 T
  794. STA PPU_Addr,X
    * C1 h3 h6 [7 D/ p0 C
  795. INX
    ) X6 c4 h$ J1 i6 Y
  796. LDA #HIGH(Play_Index_Pos)
    1 [/ g0 k* E% z( m
  797. STA PPU_Addr,X0 T& X. |- |! Q% I' ]: L# ^
  798. INX) h6 F! v! ?' o
  799. LDA #LOW(Play_Index_Pos), W/ ^" m7 B& |% w- s4 h
  800. STA PPU_Addr,X; j7 r& N4 D8 f: d9 L
  801. INX
    7 O" V  I( v& a7 w* c, J
  802. ) i4 p5 x$ ^7 l" |: d  K, a
  803. .IF Music_Song_Total > 99' D0 L5 Y' @' q4 E! X5 D
  804. LDA DEC_H
    * E+ l# t4 x5 O$ n
  805. ORA #$30
    % c2 Y$ T. g0 J& I2 C3 @
  806. STA PPU_Addr,X+ A( [) g$ y" w' k, s  g
  807. INX/ P! [/ h4 `9 b+ @8 Y
  808. .ENDIF
    , x2 k" V& `4 V& L0 V, `

  809. 6 X5 D6 x& O) N# m: c
  810. .IF Music_Song_Total > 9
    2 ~8 F5 |1 r: z: _4 U
  811. LDA DEC_T
    3 `3 E6 e/ Z! `+ X/ Z4 g* Z) I
  812. ORA #$30
    / W* S0 c  a$ Y$ y+ W/ {- N0 c
  813. STA PPU_Addr,X( m8 |2 f5 j! I8 U3 Y% W& F
  814. INX
    9 ?' A4 K& k- |1 v, Q, _2 M& T! X6 v! h
  815. .ENDIF
    . E4 `5 m( ^$ d" C
  816. ( u; R+ g1 u* e& B; X' Z% }
  817. LDA DEC_L7 _8 ]/ p' ?$ z  @6 r, f$ r
  818. ORA #$30/ K6 F# C: t; r5 t2 W- h
  819. STA PPU_Addr,X
    $ V4 ^- ^2 N0 d. W
  820. INX! N+ T6 D/ T/ e1 z+ T! v& x
  821. . Z, a" K$ E  @
  822. LDA #'/'( A7 J8 {! j6 [4 ^
  823. STA PPU_Addr,X
    # E4 L$ d! u% k; y
  824. INX4 W/ z; e# Q' |4 i
  825. Music_Show_Total
    % Z  }7 a4 G3 O# _0 G. f) l
  826. LDA #Music_Song_Total
    6 k, {* M* v+ {- v0 L+ H. j9 G! d
  827. JSR HEX_To_Dec
    - j* u: j# N2 b! W

  828. $ e& A0 |, D  e8 L
  829. .IF Music_Song_Total > 99
    - }" D! ?  d, R
  830. LDA DEC_H
    1 t- A' r, i% L) ^
  831. ORA #$30
    ( X; y$ p7 u# y; C
  832. STA PPU_Addr,X8 u# E( p1 b3 S4 I* P
  833. INX: a+ r* ?7 R( U& d5 y
  834. .ENDIF( h' {" {( q7 T' q- p7 n/ x: [

  835. ; K! y: v7 @+ B  R' v  `; i, M
  836. .IF Music_Song_Total > 9
    - `2 k, W* B6 K, b
  837. LDA DEC_T
    3 W; L0 X- ]: G" F7 _: Z9 V& j
  838. ORA #$30* N3 r; C4 H0 y/ _9 Z8 M
  839. STA PPU_Addr,X4 r( J$ H' p; `; O+ C
  840. INX! y& X% `1 j+ ]" w- ]0 R- f. |
  841. .ENDIF8 x! k4 a- l9 L: `& a

  842. 4 t* ?# v. |5 t/ U4 q
  843. LDA DEC_L2 I2 J- t, V: {2 }$ i' F! {8 v
  844. ORA #$30$ t6 w8 Q7 s7 {: t& |
  845. STA PPU_Addr,X
    1 o1 D0 R+ J* ]: @, y
  846. INX. J& o+ Y  D5 e$ W5 t

  847. . ^9 x: L4 j* z# E% S' Y: n
  848. JSR PPU_End
    ; f' b& h, ^! Z0 W) c
  849. Music_Show_End
    " l+ ~7 O) V9 x- I% s1 E  M
  850. RTS
    - P! w6 L, _8 G* h3 p+ c5 H
  851. 1 C% e2 P$ y& k# N/ Q4 P
  852. ;==============================
    5 C- H) }" o* |3 A7 U5 p# D- o5 m
  853. Time_Show;播放时间显示
    * Z5 y3 p8 o, p
  854. JSR PPU_Addr_Set1 `7 {8 _* n; v; e
  855. LDA #HIGH(Play_Time_Pos); S/ u4 Z0 [. U! N; J0 [0 J
  856. STA PPU_Addr,X1 @; t* y: M, c9 W% ~5 w) K/ A
  857. INX
    7 \- P# H5 u$ g2 T$ l
  858. LDA #LOW(Play_Time_Pos)
    4 V$ B4 G0 T5 a
  859. STA PPU_Addr,X
    ; D& s6 K  f" B) `, X
  860. INX
    ; X2 \, ^4 O* t: f" |
  861. Time_Show_H8 d7 }4 X; z, j9 F0 G: j3 E+ r
  862. LDA Time_H4 t3 N3 r8 C7 \+ V9 k
  863. JSR HEX_To_Dec
    ( O" X( W& N* ?7 E
  864. JSR Time_Digit8 A* s* i+ h( q% i! _$ t
  865. LDA #':'1 ^3 |2 c3 X) |6 }) z
  866. STA PPU_Addr,X1 i1 ~: ]/ ~) W" c* M/ u
  867. INX
    5 J4 U8 N/ O8 b. y
  868. Time_Show_M8 o7 O/ D3 u5 l: U& o" q
  869. LDA Time_M" A2 B* O3 }: {+ e. ^# m6 V
  870. JSR HEX_To_Dec
    ! Y$ G/ O% N7 X# B. y0 j
  871. JSR Time_Digit
    6 d4 J. d" F' [1 H
  872. LDA #':'# ]3 x2 ?+ s" m! Y* |" j2 |7 x
  873. STA PPU_Addr,X% _: Y) ]& Z5 Y' x: E# h2 ^
  874. INX
    # [8 e2 Z; o5 p
  875. Time_Show_S& W8 f# P; @3 E9 o, |# v
  876. LDA Time_S
    * u) b' j1 _* P' t/ z
  877. JSR HEX_To_Dec  m9 h( K- ?5 S
  878. JSR Time_Digit: _/ F5 c3 x  H" Q, B
  879. JSR PPU_End
    % e. a9 I8 X9 N
  880. Time_Show_End; c, e, T4 F' G% q
  881. RTS
    ! @8 Q! S5 [; \
  882. " g/ x# F7 \; d  U, N. [0 K
  883. Time_Digit, p+ z* |4 a! |$ \1 ]
  884. LDA DEC_T
    4 K2 Y$ c; p9 T5 P1 o0 t: i
  885. ORA #$30
    - S: d+ |( F) A) d' q
  886. STA PPU_Addr,X$ A2 @" a! T  t8 Y! Y$ k7 Q
  887. INX% F! J" K6 H6 ~  x+ T9 n
  888. LDA DEC_L
    ! v7 m/ o3 k% z% Z) r  U! O% }
  889. ORA #$30, g2 P6 p" s! D  E( X9 X
  890. STA PPU_Addr,X3 p5 ?/ P. F2 k, N$ K1 L
  891. INX0 v( c, _$ s; I/ J# I
  892. RTS
    6 J# |. I8 G) B4 T8 f0 v
  893. ) d$ D2 e( L6 r7 w1 J4 U% ?
  894. ;==============================: u4 Y( Y. `' R* z& S
  895. Time_Count;计时
    , K* F4 R  y0 q3 j
  896. LDA Music_State0 |* F, s5 j0 l% \4 E
  897. ORA Time_Wait_Cnt/ |& R% ~; _% V6 s* `. z* y* W
  898. BNE Time_Count_End( l6 S* K7 Y) W: e4 ]& @
  899. INC Time_Cnt
    - O0 F3 n* d" ]; L
  900. LDA Time_Cnt
    9 D; ^, S$ b9 ]9 ]! n% t# G
  901. CMP #60
    / q% _8 @- z# X$ d/ ^
  902. BCC Time_Count_End7 d' \, F/ U9 n7 w
  903. LDA #00
    0 g4 x: p7 Q$ _* [, u: V, U
  904. STA Time_Cnt
    / W: {: Y7 A& r' U* f0 Z
  905. INC Time_S
    " J( Q' a6 X" f; k  K
  906. 7 @+ Q9 v: E3 k+ R; l, @* L
  907. Time_S_Cnt
    % o, d8 L& G+ g, c; H: t
  908. LDA Time_S
    4 z( }# M6 j4 J7 c2 i3 L3 k/ r6 \
  909. CMP #60
    " \5 K# n( L: M7 I% R/ r8 x
  910. BCC Time_Count_End$ Z8 C, p2 K* b3 x$ [( S6 }
  911. LDA #00
    : G- D! X6 ^, R& G/ D/ T9 W) J
  912. STA Time_S
    / E) ?" o7 c: I3 t5 `3 D4 j" \5 R
  913. INC Time_M2 D5 e9 `$ u# m( h
  914. 5 S+ y& U* s, e: ^6 ~7 Q( }+ T. Y! n' n
  915. Time_M_Cnt
    ! V- A9 R; l2 u7 J
  916. LDA Time_M& W! q  w4 P3 T% h- @8 l$ h
  917. CMP #60
    & ]- n( B# M, ^( d3 f) d% {! a* z) p- i$ {
  918. BCC Time_Count_End
    9 m, `2 j% C  {7 N$ B
  919. LDA #00
    , @! ]6 Q3 `; i6 }* V# h
  920. STA Time_M
      E4 m- E$ S; d  h
  921. INC Time_H
    - d/ Z- O3 V# ~( q7 n  q- Q
  922. . h, z) o. _  a0 t4 ~
  923. Time_H_Cnt2 l, g6 v* J# Y
  924. LDA Time_H6 t) G1 r& Y. _8 A) S0 |
  925. CMP #247 [- U  w. Y# G+ a) `& l  Y# k1 d
  926. BCC Time_Count_End
    " _/ Z2 y0 ~) T6 f
  927. LDA #00; \  J6 z9 }5 j8 @
  928. STA Time_H( U4 R0 Y; e. k9 u/ _1 k% }3 B
  929. 9 a7 _$ _( A+ w6 _" U* o1 X
  930. Time_Count_End
    . W4 ^) V; D' {1 I9 q& y0 @
  931. RTS% Z5 s$ K0 i% G* P3 T3 `1 n+ Y1 G" l' S6 {
  932. . i+ m" k, f. g  q* f. Z' j
  933. ;==============================
    1 j' b, J5 Q$ g% y) Y/ T
  934. Time_ReSet;播放时间重置- N$ V) S1 f1 }
  935. LDA #$00
    % [8 X; j  A- i2 e
  936. STA Time_S
    2 X4 Y0 ^" M5 y# m" ?/ o- Z/ m" G/ W
  937. STA Time_M
    ! V) G5 q/ T2 k- N! y6 ^. @
  938. STA Time_H$ n$ S8 [5 t% t1 y- n
  939. STA Time_Cnt
    4 t8 v; `- ]' P/ Y# G  o6 Z$ m1 s5 Q
  940. RTS
    + P. Y. j: O( b/ P% U1 V! J' q

  941. ( u% b0 v) u4 B/ Q1 i
  942. ;==============================
    % V6 h0 s3 ^1 E. v6 z* E: k% ?
  943. Music_Bar_ReSet;音乐条重置2 x9 \8 F) d7 H" E
  944. LDA #$00' N8 }2 Z5 {& q9 H: l; m8 ^; v
  945. LDX #$00- E5 F% h- C+ [: e. k, {5 \
  946. Music_Bar_ReSet_Set# I, _! l  C$ R  s- n8 f
  947. STA Sound_Bar,X
    ( K3 J% l# \% U  ~, u) a" k
  948. INX
    $ T' p+ C# r5 v9 T/ {5 {' A
  949. CPX #$10- h4 x7 c; G# ?! y* ], K
  950. BCC Music_Bar_ReSet_Set( t+ q/ V$ a; M
  951. RTS
    $ z2 h+ J0 S& p  T) w
  952. , w4 I' I+ Y' Z3 s+ c" H
  953. ;==============================
    ( w! M( Y+ E2 O
  954. PPU_Data;PPU数据写入
    ! W; h  ?  a, s, {
  955. STY Data_L' p' x- X0 I& z9 }  o
  956. STX Data_H
    $ V( [' j9 v3 G3 H" s; ^- s! l% R
  957. LDY #$FF6 n8 _" N0 i6 j
  958. LDX PPU_Cur
    % ~/ S; `% D& G5 W, H# ~; L' c
  959. DEX
    ( g5 O8 p" W+ S# r+ d" {' w
  960. PPU_Data_Beg! {  X6 j/ j9 V( ~( B
  961. INX
    ' f: [& G3 w$ R1 d/ \
  962. INY3 ~% S; D6 O0 u
  963. LDA [Data_L],Y
    ' h( u! a& b$ I
  964. STA PPU_Addr,X
    " P2 n. i0 D: L1 ]9 M  J
  965. BNE PPU_Data_Beg2 z+ k/ ^' _, U$ |
  966. STX PPU_Cur
    , l7 w7 o7 i. F  }* u* K1 V+ p
  967. PPU_Data_End
    2 a! n" o8 p6 b; D+ B2 b! z" T; \
  968. RTS
    : E' U; Y& `7 R- Q9 q

  969. 3 T0 E) d  H' l9 S1 m: C
  970. ;==============================
    ' [5 g9 G+ ~# K$ }" M) @
  971. Music_Stata_Show;播放状态显示: y* u: R( Q2 x$ I! _1 s
  972. LDA Music_State9 n: B" A5 O1 g  {* ?& q
  973. BEQ Music_Stata_Show_Play
    ' f) y" W9 I: H; W  M) x
  974. Music_Stata_Show_Stop
    " _8 h- e! o, h5 C) C6 q
  975. LDY #LOW(Music_State_Stop)) s8 L: M& F  |5 U( e. x# B# {) B
  976. LDX #HIGH(Music_State_Stop)
    . @& E3 r4 n& }* y5 r
  977. JSR PPU_Data' k% D9 ~0 a. n+ m
  978. RTS2 b0 H+ w& `: h  r" p! f
  979. Music_Stata_Show_Play( ~4 c0 C+ ~: \* ]( f$ {0 P" h
  980. LDY #LOW(Music_State_Play)
    % O3 ]- t7 h- j0 {0 N+ M: j2 Z9 D
  981. LDX #HIGH(Music_State_Play). S$ U; S4 x$ M
  982. JSR PPU_Data) v' I) X5 k/ @- v" L
  983. RTS
      y" A: b6 G6 Q- Z0 ?( r
  984. ' V4 B  F3 x; V+ q+ K# _0 `* k
  985. .IF SOUND_BAR_SHOW_ENABLE
    & S. i8 t- I! l' ~
  986. ;==============================( r# l9 Y  @2 ^( W0 `* m
  987. Sound_Bar_Text_Set;标题与音乐条初始化$ [! I0 s& G8 M8 C
  988. LDY #LOW(Sound_Bar_Text_Data)
    , A+ B' b& U. F1 N8 [
  989. LDX #HIGH(Sound_Bar_Text_Data)  i8 ]/ Z! Q7 S; p
  990. JSR PPU_Data
    0 A8 S/ u- R) Q2 M) B
  991. RTS  u0 @5 P1 M, n/ K( m4 _

  992. 6 p! z5 B4 i9 i/ O/ W# ]4 [
  993. .ENDIF2 M7 }$ `6 }) M) I6 H

  994. . v5 K$ c) h. U2 }! C6 A3 S# s! _
  995. ;==============================
    4 l% Y! v. M+ a. p8 r! }9 _
  996. Set_NameTable_Attributes;设置命名表属性2 ?" B3 h: d( |# j; l  V3 [
  997. LDA PPU_STATUS+ ?# E1 k6 ]0 P1 h; I
  998. LDA #$23/ V; a; P, L1 L+ R8 G8 e
  999. STA PPU_ADDRESS) K  T0 f( ~2 Q' _- H( U+ J, O* n
  1000. LDA #$C0
    / }( M: X3 A' \' Y
  1001. STA PPU_ADDRESS
    " t9 l" L) ], X5 n5 L8 ^( G
  1002. LDX #$00/ F6 L" ]- T- O3 y
  1003. Set_NameTable_Attributes_Write
    . x' P$ {7 [9 Y% C4 q7 ?4 X
  1004. LDA Palette_Attributes,X
    : b7 o' r: t( U$ ^* W' S) K
  1005. STA PPU_DATA
    . f. ]2 `8 D& R# ^* G
  1006. INX: j! N! a- N/ c$ T; U
  1007. CPX #$40
    9 y/ O! L; Z2 X
  1008. BCC Set_NameTable_Attributes_Write0 ]4 h6 ?* }; N! D
  1009. RTS
    / J# O0 r4 w% O9 [
  1010. ' z/ T# S+ P0 L' ]4 d
  1011. ;==============================- H3 x$ o; A; S6 k% v  |( {- ~
  1012. Set_Palette_Color;设置调色板数据
    - m! ?) [. U& P* W3 G. a) A, }
  1013. LDA PPU_STATUS0 r- E- b! `- T( x% K( _$ e) q
  1014. LDA #$3F/ O. {; l. [1 i$ P
  1015. STA PPU_ADDRESS- Q& C3 L9 _, b
  1016. LDA #$00+ j' @8 i- |* ]& Y
  1017. STA PPU_ADDRESS
    7 z0 Q& _( l% g) l
  1018. LDX #$00
    0 b* S( T) i3 c
  1019. Set_Palette_Color_Write$ V! P* b8 C+ I0 H4 |; H
  1020. LDA Palette_Data,X- S5 ^- e+ v8 C* B& K# j
  1021. STA PPU_DATA6 c9 V7 ^: E. L, L
  1022. INX
    5 o1 |! T: g& h+ g1 Z5 h; i
  1023. CPX #$20
    2 I: U0 q7 p# u2 j4 |3 X/ m
  1024. BCC Set_Palette_Color_Write
    / |1 r: `+ X* S
  1025. RTS
    ; ]  R/ b- N* i. h# I6 p

  1026. 3 v) k7 u3 ?4 h2 c
  1027. ;==============================  U3 @; L# ]' E0 B9 \
  1028. Init_Palette_Addr;初始化调色板数据8 I1 M! g2 q" \5 ~8 U% P& W8 l
  1029. LDX #$00- n/ {1 ^& X. r: p6 O, ?" G
  1030. Init_Palette_Addr_Write
    & m7 m- ~% I! {3 q! F
  1031. LDA Palette_Data,X9 z( Q* m; m1 h. u
  1032. STA Palette_Addr,X
    ; g; L! t: w8 G7 N1 o- ^3 q; ?
  1033. INX
    3 _3 L% T1 c1 ]/ @8 V: Y
  1034. CPX #$20
    2 L  T% m. }. r" F- v% f
  1035. BCC Init_Palette_Addr_Write
    . w1 A% E, g! L) d
  1036. RTS* P' O" X% ^$ |0 b# E% L$ i) y6 I! n8 ~
  1037. . E" b+ j4 Z; \: c3 u9 m$ Q# k
  1038. ;==============================" W, k+ U! L  L: J/ T
  1039. Update_Palette_Color;更新调色板颜色
    , F! B1 |, d3 o2 M- p
  1040. LDA Show_Track_Name
    - ^6 @9 f( u2 K( `& A0 u- m/ \
  1041. BNE Update_Palette_Color_End
    $ ]9 T* Y( P& t9 N
  1042. LDA Palette_Update_Flag
    0 ?' l9 S1 K' C/ s0 A
  1043. BEQ Update_Palette_Color_End8 @" a4 U; G9 }: N  d
  1044. LDA #$3F* Q& r  w) P$ G4 Q: g' b2 W: |
  1045. STA PPU_ADDRESS8 e1 i0 N( h4 L( X7 x7 k9 q( f
  1046. LDA #$00$ p9 [0 s+ x& B! D. F
  1047. STA PPU_ADDRESS
    , j4 Y$ `7 @+ w. y
  1048. LDX #$00
    # ]) w; ?# e/ _' C  D9 M
  1049. Update_Palette_Color_Write( ]# H& w. E, q. F. \
  1050. LDA Palette_Addr,X
    $ j, `; S) h' ?9 Y- c  Z* p/ U( S
  1051. STA PPU_DATA
    9 j' R* y2 G' E6 D% P# M( ]2 [
  1052. INX6 P  Q# M8 U, P4 [/ \" k* K
  1053. CPX #$20
    % R: j( P5 r7 A. n. g
  1054. BCC Update_Palette_Color_Write
    + d6 J1 P: Z* H. M7 W
  1055. LDA #$00  [6 ?0 f% H3 {3 Q5 p1 p! b
  1056. STA Palette_Update_Flag/ d+ u7 Q6 m0 t: a7 p( R& D
  1057. Update_Palette_Color_End( W- Z0 g, D5 Z; D
  1058. RTS$ G" \2 Z5 T6 b/ Q$ ]1 D% D" ^% ]

  1059. 3 E7 y$ m. M% }7 O" Z( n* W7 S+ \" c
  1060. ;==============================
    3 M( K+ ~4 H$ v2 u
  1061. Update_Palette_Data;更新调色板数据
    6 v! I+ k- {: \& I; |" J" o
  1062. LDA Show_Track_Name. ~7 ~  p% M: C; M# q8 J0 d- \5 c
  1063. BNE Update_Palette_Data_End
    3 o& B6 F6 F8 [- X
  1064. LDA Music_State
    , G5 w( f6 w8 A
  1065. BNE Update_Palette_Data_End
    8 }9 M/ H. Q' c. K
  1066. Update_Palette_Data_Check, C4 R1 {% z, B- X8 F7 H" x0 n' P5 l
  1067. LDA Palette_Wait_Cnt
    # n+ X+ l7 w1 c, V
  1068. BPL Update_Palette_Data_Check_Over
    + l! q8 T; \2 k* y. g
  1069. LDA #Palette_Update_Interval
    * t0 P" l  ]( N! N
  1070. STA Palette_Wait_Cnt' E% ~* \, c, G1 Q) k
  1071. Update_Palette_Data_Check_Over, L7 W& m( M' O+ v
  1072. DEC Palette_Wait_Cnt( v2 }* T: m# T  W: j
  1073. BNE Update_Palette_Data_End
    ' @, ^; q  X1 ^3 j7 F# e  A
  1074. INC Palette_Update_Flag; }7 c6 a9 H9 B  b, @5 e
  1075. LDA #Palette_Update_Interval
    9 G) D& K6 O6 O5 }  |5 t
  1076. STA Palette_Wait_Cnt5 G, G2 E. O5 s2 ^
  1077. LDA Palette_Update_Addr- }$ W8 V0 W) A. J! @* k  }7 {
  1078. CMP #Palette_Update_Max
    : Q& e# M3 T; v. B
  1079. BNE Update_Palette_Data_Set1 q3 b  b/ h/ ^; G
  1080. LDA #Palette_Update_Min - 1% u- o( T# D: W% p3 c  a$ {
  1081. STA Palette_Update_Addr; l, p: t( Y) n( y
  1082. Update_Palette_Data_Set
    6 c8 P6 k. k2 w5 b
  1083. INC Palette_Update_Addr
    - Y2 m7 g7 O) k* _6 \' D
  1084. Update_Palette_Data_End) n) S$ e8 _: r! i0 X/ f* q
  1085. RTS
    8 e" V& |6 `! {7 W, h

  1086. % S  l9 ]1 i) Y9 a! n+ w9 S$ x
  1087. ;==============================
    & p8 U) @# p- p$ o. U6 M" R
  1088. Show_Music_Text;显示静态文本
    4 @& D5 O7 g5 R) i: `7 r
  1089. LDX #$00, A0 E" \$ Y: l! [# L
  1090. Show_Music_Text_Set1 L2 C# o7 {$ u  u
  1091. LDA Static_Text_Data,X
    5 X0 i# _) C% b1 ~! t( [
  1092. STA Data_L
    3 |' s! x( G* W; d* E- [" g
  1093. INX- Y4 t* ^/ t% J% y
  1094. LDA Static_Text_Data,X; w' r2 q0 O2 r. c
  1095. STA Data_H3 l+ G6 B; O2 e+ y0 V
  1096. INX
    2 ?1 d7 U6 a/ _, w
  1097. LDY #$00
    # Z% r- J. ^0 {9 z
  1098. LDA [Data_L],Y$ d" ^: T) A% p: w5 n
  1099. STA Data_Cnt) J& L- C& s& C% A8 z2 I# i" G  O4 S9 w
  1100. DEX2 k$ {2 r+ ?- k! |2 s
  1101. DEX1 M0 _9 O1 a6 e/ Q. \5 X
  1102. LDA Static_Text_Pos,X
    $ t9 Y: \8 l) O6 E( w3 C. W
  1103. STA PPU_ADDRESS5 e5 |! r1 \. M' j" v* |. D, c
  1104. INX
    $ g4 H3 H/ g7 U. L* |
  1105. LDA #$20% h* P! w) I$ ]4 E' e
  1106. SEC
    ; V' Q% T: A& s8 ~
  1107. SBC Data_Cnt9 m; }; H, s5 X! l, |% i' F* C
  1108. LSR A
    ! R# j7 M2 _' k$ n
  1109. STA Data_Buf: O: R0 g& |, I0 R! n
  1110. LDA Static_Text_Pos,X6 C- M7 M5 D3 S0 _
  1111. AND #$E0# |4 w) q4 A& x3 g
  1112. CLC7 {) F0 U! O: Y( L6 a9 J
  1113. ADC Data_Buf& ?4 m6 c  l( @) s2 T/ K
  1114. STA PPU_ADDRESS8 _3 n3 `5 T3 C2 s& t
  1115. INX
    * d2 v! M7 N+ [* L2 I* _
  1116. Show_Music_Text_Set_Write
    1 C* A( `6 k* c9 N/ w
  1117. INY
    2 g4 j  `  ^( r$ O' f+ O% v/ o+ c
  1118. LDA [Data_L],Y3 E7 f4 T2 S# A0 Z3 Q4 X* j
  1119. STA PPU_DATA
    $ D7 e0 s1 R. O; d/ X# E: p! [
  1120. DEC Data_Cnt0 d- o7 ]0 l1 p
  1121. BNE Show_Music_Text_Set_Write7 G$ L- ~! _- C4 V' r  i6 h( I% h
  1122. CPX #Static_Text_Pos_End - Static_Text_Pos" X) ~4 K/ t/ ~
  1123. BCC Show_Music_Text_Set
    + g2 c$ z& y* M- b6 O5 z
  1124. RTS# m2 f( Y( e( g( d* K3 N
  1125. 2 ?) x0 w2 s3 {0 I2 n5 s2 J$ E
  1126. ;==============================
    . e: M# ~( V5 K# l+ Z
  1127. .IF Track_Name_Pos;显示曲目信息) `  @# o, K8 s$ v+ l; I- V& P! ~
  1128. Show_Track_Info
    # B- e+ [: h  \$ Y
  1129. INC Show_Track_Name1 y4 Q2 h; h) c/ T
  1130. Show_Track_Info_Clear
    8 R" x6 ]8 ~; h* b  O% N+ D
  1131. LDX PPU_Cur
    7 |! M4 U, A% e+ Q* m, i3 U
  1132. LDA #Mode_Clear
    # W) c9 P% G! D2 n
  1133. STA PPU_Addr,X
    6 |  S, f4 K* u
  1134. INX& \9 n1 O# D) J
  1135. , `! ?" B" k+ o# \& r4 s6 s
  1136. LDA Music_Last, s8 L9 _) w. H4 g0 W2 x0 L  c' Q' d
  1137. JSR Show_Get_Track_Name_Center_Pos* @6 q) _7 w+ y+ J! b% Y$ X3 Q
  1138. Show_Track_Info_Write_Cur
    7 m0 ^3 e' i- {& b# |
  1139. LDA #Mode_CntLine
    7 l+ d0 p5 V4 y4 v1 {" g
  1140. STA PPU_Addr,X- |( u/ q" u- M, S( u6 n
  1141. INX* ^. f9 I; t$ Q' g4 I/ |

  1142. 9 u" g! m, Z) z0 H( X4 Z
  1143. LDA Music_Cur
    1 y) |) c7 B% u4 j" a
  1144. JSR Show_Get_Track_Name_Center_Pos- o' O9 K% p' I
  1145. 6 b' N& |: Q! ~0 `
  1146. Show_Track_Info_Write_Cur_Data
    : c+ Y+ T! j2 Z* `
  1147. INY: i6 [0 b+ b& J+ M
  1148. LDA [Data_L],Y2 [6 O4 f5 N* X' o$ n
  1149. STA PPU_Addr,X
    5 C. X* }: n# J' w  d3 y( e3 L
  1150. INX4 ^, R) v* a$ H: o
  1151. DEC Data_Cnt3 R- H* t  j" r& e- G$ r# a' x
  1152. BNE Show_Track_Info_Write_Cur_Data
    ; N* m5 [; Z' G, J% G# V* Y* w
  1153. Show_Track_Info_End
    # J9 ]) b1 w; _; w" k& W, k& i
  1154. STX PPU_Cur
    ( z8 _3 H. s3 n2 _/ L
  1155. RTS
    ! k" V0 M* d% d) u

  1156. 3 m& L2 R( A3 b" x9 d
  1157. ;==============================8 {, N9 B$ r( H. D$ o+ X5 J+ K
  1158. Show_Get_Track_Name_Center_Pos;获取中间位置, [- R6 `6 q* x; U. y: z0 D* e3 B3 h
  1159. ASL A
    " [/ d4 C, e. D2 i, T5 k
  1160. TAY
    $ |, w  P! u# J/ e) Z
  1161. LDA Track_Name_Addr,Y) ]6 h1 I3 v7 x7 C. L
  1162. STA Data_L- c5 r$ \7 c8 g( v" x2 ?
  1163. INY
    * i/ n( i: v. W4 {
  1164. LDA Track_Name_Addr,Y
    - @% w) Q; j  y2 s" F; m3 S& \
  1165. STA Data_H( u# w2 B# z. Y4 \
  1166. LDY #$00
    . a' g* ^' c) `0 ^& g+ t4 w% V
  1167. LDA [Data_L],Y1 D; q& n! N# ?2 q
  1168. STA Data_Cnt
    5 Y! I$ h8 J( r4 L" {+ u
  1169. LDA #$20
    7 x( n2 M4 g+ y7 G$ f) _8 k
  1170. SEC2 ]/ w. C; z0 r. u  S) L
  1171. SBC Data_Cnt
    . g* s, U$ H8 x. x0 t9 s) L8 J/ J
  1172. LSR A
    . G* e+ H/ J% Q" m1 j) ]- ]6 f
  1173. STA Data_Buf
    . X0 _! B7 f6 K3 W7 S) z% t
  1174. LDA #HIGH(Track_Name_Pos)& q% f- _) P& I+ U: ~
  1175. STA PPU_Addr,X- i  d' P, ?6 `9 k
  1176. INX
    ; s( s' K6 O" W5 Q3 u8 b" \8 P9 s/ O
  1177. LDA #LOW(Track_Name_Pos)" l- R9 a$ q/ n1 c" r+ S; N$ j3 K* c/ ^
  1178. AND #$E0! W+ x- Y3 w" h2 y" @& ^
  1179. CLC
    + S0 W! J" T" x$ g, Z6 C
  1180. ADC Data_Buf
    3 u7 \. D$ ?3 G
  1181. STA PPU_Addr,X
    % B( U2 A  Y0 A* m) y
  1182. INX. X' `6 ^) Z5 Y$ I8 c
  1183. LDA Data_Cnt
    / K* \3 q3 e7 A0 A8 @5 M
  1184. STA PPU_Addr,X/ B% q/ P3 q; Z5 m
  1185. INX" G% ^& b+ ?1 `2 f0 M. H, y
  1186. Show_Get_Pos_Center_End
    & P" e) f3 l6 b8 P" |4 l
  1187. RTS: y, Z+ y! x9 L# v/ S' a( P* K
  1188. .ENDIF
    % k5 u/ t$ [) j9 t( f1 L
  1189. * t/ c  b3 S' N
  1190. ;------------------------------% O4 n# m- h' M% O; \4 m4 G
  1191. ;命名表数据/ _9 L. d$ Y' A
  1192. Palette_Attributes
    ( z1 O) Q, J, n: g/ ]) }
  1193. .IF SOUND_BAR_SHOW_ENABLE3 }1 ]+ P8 ?- u5 S3 V* S
  1194. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00& a; R- x* ^: r4 Y7 w  j
  1195. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$BB,$AA,$AA,$AA
    ) G8 ]+ B. {. B# a# z
  1196. .DB $0F,$0F,$0F,$0F,$0B,$0A,$0A,$0A,$55,$55,$55,$55,$55,$55,$55,$55% Q2 Z' ]4 W2 k# Q0 S2 X* T
  1197. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    3 G: b8 U. R6 b. }5 U
  1198. .ELSE5 ^( D3 V1 `( z$ s1 m
  1199. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    4 k6 L) @% C, _$ X4 N
  1200. .DB $F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF0 I' e+ O! K- V) D: L
  1201. .DB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$55,$55,$55,$55,$55,$55,$55,$55
    * ~0 k: z$ F( ?) A* A+ `3 h
  1202. .DB $55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55,$55
    4 Z6 S1 a  ^4 }! l/ C, i2 l: [
  1203. .ENDIF' K* z/ {9 \+ P$ p, }$ S6 ~

  1204.   ^2 x/ T# H! Q. K7 I
  1205. ;------------------------------0 z8 A6 D. V5 D" ^5 C
  1206. ;调色板数据) u$ i: u( g+ N: `) a
  1207. Palette_Data
    , @! |: {+ R* m% l
  1208. .DB $0F,$27,$20,$0F,$0F,$24,$20,$0F,$0F,$21,$20,$0F,$0F,$25,$20,$0F+ q( |! `2 Q8 G" x+ R
  1209. .DB $0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F,$0F,$24,$20,$0F
    - t; ]3 \9 P) z4 v) c$ \% [

  1210. % d) x: X; t7 \: E
  1211. ;------------------------------
    9 t& ?" U4 W. A* s$ s
  1212. Static_Text_Data
    1 `  T3 |' q( `& R1 y& z; U
  1213. .WORD Static_Text_Title_Data0 Y4 m7 Q/ B1 z) L
  1214. .WORD Static_Text_Author_Data
    ' A# N$ M, V: X' Z* Y6 s2 r5 N, ^" n" p
  1215. .WORD Static_Text_Date_Data
    ; e; I- T# x& {. z7 }
  1216. Static_Text_Data_End4 G& g' ~% x( i' Z- h

  1217. 5 c) _  b1 T6 ?2 ?/ W$ g
  1218. ;------------------------------
    - q+ E$ W9 E+ M4 }' ]4 B
  1219. Static_Text_Pos4 m& n' [. ?1 E" Q* T, ?" D& h
  1220. .DB HIGH(Title_Text_Pos),LOW(Title_Text_Pos)
    5 C6 m) D3 V6 C/ w# b4 O: g. N; Y
  1221. .DB HIGH(Author_Info_Pos),LOW(Author_Info_Pos)
    ' m* x& S, O' V! w* Z: w. l
  1222. .DB HIGH(Date_Info_Pos),LOW(Date_Info_Pos)# [: {# B1 F6 R3 n4 q
  1223. Static_Text_Pos_End' }8 T0 ~1 @6 S! f4 Z
  1224. $ i" g) v" h9 D* P; ]
  1225. ;------------------------------3 E% d/ k7 G6 k1 [3 c0 q# ]
  1226. Music_State_Stop
    ; q1 e9 B6 M& `
  1227. .IF SOUND_BAR_SHOW_ENABLE
    2 n1 m, p/ @- g2 {5 W# r
  1228. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"STOPED ",$FF,$002 d2 `! @' i$ F* Y
  1229. ELSE
    : J) X( m+ u/ L  t
  1230. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos)," STOPED",$FF,$00/ x3 K5 p' A: ~4 {1 _1 b. V
  1231. .ENDIF
    % M9 z# M/ t+ i9 d# t) u" W0 w4 y5 F
  1232. Music_State_Play
    1 ^5 [5 J$ F& X& l
  1233. .DB $FD,HIGH(Play_State_Pos),LOW(Play_State_Pos),"PLAYING",$FF,$00+ I% w2 ~) v& h7 c& h! j
  1234. ' M- N) c& V* ?7 q  E! I
  1235. ;------------------------------% f- Y# X7 g, v( T* a
  1236. Sound_Bar_Text_Data;声音类型文本7 X# J5 }( a; {6 `( Z
  1237. .DB $FD,HIGH(Sound_Track_Pos),LOW(Sound_Track_Pos)
    4 v' H; ?+ a' O) I
  1238. .DB "SQ1-",$FF
    4 T6 _  F8 S8 t3 P9 X$ |
  1239. .DB $FE,"SQ2-",$FF
    5 R* @. B9 y) g6 E7 Z4 D
  1240. .DB $FE,"TRI-",$FF
    3 M/ _! a7 q/ E
  1241. .DB $FE,"NOI-",$FF; c3 {7 l8 k' D" S( ^2 T
  1242. .DB $FE,"DMC-",$FF,$00
    ) m* {- @) A4 e3 X  o

  1243. 5 M0 C' Z7 D% e+ L! [) i" D
  1244. .IF Track_Name_Pos" r& j1 l( p7 x% _2 _  N. [9 E- a/ S
  1245. ;------------------------------
    , o. L0 h" v. y* _5 M
  1246. Track_Name_Addr;曲目名地址索引( }# Y2 i" S* c+ G, O) e% `
  1247. .WORD Trackr_01% c( o- |2 m* }2 R
  1248. .WORD Trackr_02
    7 |7 u8 K( B/ n8 s" N  K+ c" b
  1249. .WORD Trackr_03# y+ l, W# t1 A4 x/ r
  1250. .WORD Trackr_047 \8 H* t2 o2 v' G' d% ~+ ^7 A
  1251. .WORD Trackr_05; ]2 l3 b2 d! {7 ^
  1252. .WORD Trackr_068 D: _! Q3 c$ g# f) z; H
  1253. .WORD Trackr_07
    . Y  Q+ `' R1 T1 v, M# M- b7 v
  1254. .WORD Trackr_08# j; J" [( U2 z2 \* Z) D
  1255. .WORD Trackr_09
    ! y, |" H) E$ m" H
  1256. .WORD Trackr_10# @# G% g7 B( h3 {
  1257. .WORD Trackr_11& B0 @. T5 R; |: N
  1258. .WORD Trackr_12
    : s( D$ K. h: Q9 @, {- X% \- J- e( e
  1259. .WORD Trackr_139 d" Z- Y* H) v: U
  1260. .WORD Trackr_14
    4 q4 Z: n& v! x
  1261. .WORD Trackr_15
    % Q: Q( _- Q/ n& o
  1262. .WORD Trackr_16
    ; X6 ?  D  \  R, U
  1263. .WORD Trackr_17
    7 p! y7 h8 w! O9 |. Y! I% T- T
  1264. .WORD Trackr_18( @% f- C" h1 e. p3 m% }
  1265. .WORD Trackr_19: M1 Q6 J( o# t1 D- h; U+ u. m9 A: H
  1266. .WORD Trackr_20
    - g, G0 u" }, o# g+ b' {$ \
  1267. .WORD Trackr_21$ `! C! z$ o: x! f- r$ z
  1268. .WORD Trackr_22
    0 f/ g5 q' v' }* F2 a: j. a% L
  1269. .WORD Trackr_23
    1 B4 g1 }) ~* n* K8 P, e& s
  1270. .WORD Trackr_24: y6 O1 _. w0 O; X, o
  1271. .WORD Trackr_25( @" J; q) `$ q  Q
  1272. .WORD Trackr_26" J2 {3 t+ B( B+ N8 l5 g
  1273. .WORD Trackr_278 p+ j0 T# l7 G# ]: g
  1274. .WORD Trackr_288 p4 w4 d1 H6 {) r( j. r; c$ \
  1275. .WORD Trackr_29
    1 N& D, J9 l( c
  1276. .WORD Trackr_30; q8 J( `9 W4 L+ V/ \
  1277. .WORD Trackr_31( Z8 K, r% |+ W) |1 \8 T; l
  1278. .WORD Trackr_32! h( f2 ]6 i: L5 Q$ U/ A
  1279. .WORD Trackr_33
    & s  H' r. D8 Y8 A5 n4 t, S! n9 L
  1280. .WORD Trackr_34
    2 |( p5 A5 I! @2 b
  1281. .WORD Trackr_35! b+ S; n1 f3 Q' @2 C6 @+ W
  1282. .WORD Trackr_36
    3 S, l  p5 G9 |4 q& B
  1283. .WORD Trackr_375 t" v0 R9 N5 }" N- A! T$ Z
  1284. .WORD Trackr_38  Q1 T& o- b# l+ f4 m% g
  1285. .WORD Trackr_39
    ; K: k9 M  a& {6 }- ?# G
  1286. - `; f. H+ `3 r9 i
  1287. ;------------------------------9 X6 s6 w4 i6 T- {6 \& N  \
  1288. Trackr_Name_Data
    ( c: y" R! H1 H* ~' ~
  1289. Trackr_01 .DB $05,"BGM 1". I# y* ]1 n9 D" V: U9 c
  1290. Trackr_02 .DB $05,"BGM 2"; i- c/ {  f- a  I  u# y/ t
  1291. Trackr_03 .DB $05,"BGM 3"
    4 Y; ^& I' f. }, f# q
  1292. Trackr_04 .DB $05,"BGM 4"0 l: @- w# t' P
  1293. Trackr_05 .DB $05,"BGM 5"
    / m' Q( e( l3 [4 [% \3 {. A2 a
  1294. Trackr_06 .DB $05,"BGM 6"; v1 f: d+ y4 j
  1295. Trackr_07 .DB $05,"BGM 7"
    + A' ]; W. C2 c4 [
  1296. Trackr_08 .DB $05,"GREAT"
    ( v$ a# k% ?) Q  z
  1297. Trackr_09 .DB $08,"BOSS BOM"/ I) H7 @& T% T; H/ P, z
  1298. Trackr_10 .DB $08,"BOSS2BGM"7 p& L$ h6 v0 S8 ]( }
  1299. Trackr_11 .DB $07,"P CLEAR"
    ; S) b6 ?$ f7 E
  1300. Trackr_12 .DB $07,"A CLEAR"1 m5 I% [9 J$ f1 q: C
  1301. Trackr_13 .DB $04,"OVER"
    4 [, j  D4 b! m) X( _
  1302. Trackr_14 .DB $06,"ENDING"
    , B9 E8 t# _0 D1 E/ p
  1303. Trackr_15 .DB $04,"SUTA"
    4 U3 O" O  Q/ b- i: q8 }
  1304. Trackr_16 .DB $07,"THUNDER"
    ( U6 ]5 y% ~+ Z: M7 j/ ~/ Z! a* G! p
  1305. Trackr_17 .DB $04,"SHOT"
    7 Z; c1 f/ I6 Z9 O- O
  1306. Trackr_18 .DB $05,"LASER"4 {% ~$ F9 d  ?7 G7 H
  1307. Trackr_19 .DB $06,"SPREAD". B4 x8 j' h- U9 G1 j, K8 Q
  1308. Trackr_20 .DB $04,"FIRE"2 B3 h* x+ U: Q4 W
  1309. Trackr_21 .DB $06,"B SHOT"
    / b3 P  M8 K0 g  A6 k8 @) a
  1310. Trackr_22 .DB $08,"T DAMEGE"
    & ]4 |( J9 Q3 q$ \) H2 U8 T) E
  1311. Trackr_23 .DB $07,"HARETSU"
    3 v5 v$ M% S0 b
  1312. Trackr_24 .DB $05,"T OUT"
    & ^1 {4 F7 z; C: H
  1313. Trackr_25 .DB $05,"Z OUT"/ V) U8 p/ y5 P0 N
  1314. Trackr_26 .DB $05,"A OUT"
    9 L. D- r4 v+ V; M6 Q2 s" v0 b
  1315. Trackr_27 .DB $04,"ROLL", h1 r0 W+ `; h0 U  x) X
  1316. Trackr_28 .DB $06,"APPEAR"
    5 ]1 ?; w7 |$ v) F# m' V7 b8 W3 ~
  1317. Trackr_29 .DB $05,"POWER"
    + T& }2 Y8 s  T( v0 R2 _) A
  1318. Trackr_30 .DB $07,"BOKK BK"1 W. r9 f6 c7 k; G, l" m
  1319. Trackr_31 .DB $08,"BAKUHA 1"
    # f/ @) z0 H9 B1 L' _  K. n
  1320. Trackr_32 .DB $08,"BAKUHA 2"3 I' R9 O+ f" U! g) E/ O
  1321. Trackr_33 .DB $05,"ARUKU"
    7 h% ^" |5 P3 J6 n. R' x# H; M
  1322. Trackr_34 .DB $06,"JIWARE"5 k0 p7 H7 s) V3 @
  1323. Trackr_35 .DB $05,"SILEN"& |6 N% [3 A" U. I2 z
  1324. Trackr_36 .DB $05,"P 1UP"
    5 M, |6 G6 r9 t  C5 ~1 F
  1325. Trackr_37 .DB $05,"P OUT"
    0 q8 y9 A7 @$ {5 w: J! E* l9 t
  1326. Trackr_38 .DB $05,"B OUT"
    3 P4 N$ Q: \! e- j
  1327. Trackr_39 .DB $05,"PAUSE"
    6 i% L3 {5 c1 i6 `* u

  1328. & {7 m. C7 B; n5 m5 L( A
  1329. .ENDIF  @8 P6 w) ?) A& [* l
  1330. " D7 J: a8 }3 j5 r7 i' s$ N1 Z
  1331. ;------------------------------0 G2 G, H# Q2 {4 \1 W
  1332. Static_Text_Title_Data;静态文本数据
    - k" R; n% f$ o# a( G
  1333. .DB 12- I- ~( e' p. U0 @( K6 c
  1334. .DB "SUPER CONTRA"9 g2 v2 R% E" N* H2 S
  1335. Static_Text_Author_Data/ ?5 c% Z6 X6 n6 X: |
  1336. .DB 23
    9 b$ m1 {8 P9 [4 W
  1337. .DB "EXTRACT BY FLAMECYCLONE"
    1 \2 J3 G6 Y5 I, V
  1338. Static_Text_Date_Data3 f: k$ W" ~- z) ]2 N3 o6 g: H+ ~
  1339. .DB 106 Z- Z  p3 f- t
  1340. .DB "2023.07.11": U0 W+ Y; u$ d) W: B8 ^

  1341. ( ^$ K3 X/ M9 F8 p2 b6 C9 ~0 n
  1342. .BANK RESET_BANK & BANK_DATA_MASK  Z1 w1 k0 L$ |% z/ d- |
  1343. .ORG RESET_ADDR. j4 e( b$ y7 W* l' {% q
  1344. ' z: a6 \# z( g; p
  1345.   W4 z  H3 K5 _3 j6 P
  1346. ;==================================================- Q. ^! S# v9 b7 Z+ ^4 P! m
  1347. ;切到主程序bank6 X9 ?, h  w' n! S0 c/ z
  1348. SwitchMainBank( z4 h* Q% x/ t  f- w* U
  1349. LDA #PROGRAM_BANK & BANK_DATA_MASK% A: Y3 O3 x  q$ N  R, C8 `% w2 W
  1350. JSR SwitchBank8000
    ; P! l$ p- r/ c  Z, l" h
  1351. RTS
    / c3 z: y/ N( Z$ C
  1352. ! R4 l/ o8 S& `7 t1 j; l& V
  1353. ;==================================================
    , a: X* L3 a& c" q3 ?9 a
  1354. SwitchBank8000;切换bank到8000-9FFF9 u* g9 q" N& A3 K
  1355. PHA% t+ z, \; n9 e) O5 h
  1356. LDA #$060 E4 e- I! H' f1 ?
  1357. STA MMC3_BANK_CTRL6 C. {- D/ O2 w2 Y1 _9 C# `% e! [; l
  1358. PLA3 Q. Q: \8 h! X1 y. K
  1359. STA MMC3_BANK_DATA6 @: E" h- s7 {4 P) S
  1360. RTS
    " u' E7 @6 t; X
  1361. 7 I' l! r: ?/ t0 x
  1362. ;==================================================
    ( n5 }" Z3 ^& T) @! c3 ~
  1363. SwitchBankA000;切换bank到A000-BFFF7 q+ v# G; T; d. C9 ~! f: u
  1364. PHA- L" K9 T. C, Z9 [
  1365. LDA #$07
    8 a* i9 z" k3 A$ A: Y5 a1 t: N# H6 F
  1366. STA MMC3_BANK_CTRL4 }* F. U4 p0 e; o' s1 X+ s
  1367. PLA  i# x1 i# x9 y6 x0 C$ n
  1368. STA MMC3_BANK_DATA
    ' k8 J' j! T1 |5 E/ [& M( n
  1369. RTS! \- G' I# o  R8 y% c
  1370. ( s, a! \  N/ Y  b
  1371. ;==================================================  {' {5 E5 ~1 U; z: I  \" V
  1372. Sund_Bank_Init;音乐bamk初始化
    2 d$ j7 k# h- Q9 x
  1373. LDA #SOUND_DATA_BANK_0 & BANK_DATA_MASK
      T8 R0 _  P; c2 b0 o
  1374. STA Music_Bank_8000& I6 h! C; C8 k# M3 d
  1375. LDA #SOUND_DATA_BANK_1 & BANK_DATA_MASK1 H& x+ b3 M2 Z/ ~
  1376. STA Music_Bank_A000: E& q8 `) @, i% c3 p+ s! o2 ^% l
  1377. RTS8 R! D( ]/ E1 @7 F2 O: P# t

  1378. 8 r" V: a' b5 s- N1 ]  V
  1379. ;==================================================) e7 M+ ]# o  D/ h
  1380. Sund_Bank_Set;切换音乐bank; Y4 m3 N# U$ `3 P& W3 Q) J6 O( I
  1381. LDA Music_Bank_8000
    : z) z& `; x$ {. E
  1382. JSR SwitchBank80003 ]$ V  c6 }8 y
  1383. LDA Music_Bank_A000) U4 F6 z" c. n: Z' J- D
  1384. JSR SwitchBankA000
    6 P& f. X. D2 D, R8 i
  1385. RTS
    3 O; J3 P  r% g8 E5 v

  1386. + q3 F- q2 n. `) {
  1387. ;==================================================
    ) _/ o% x4 P$ J. n8 m
  1388. Sound_Init;音乐初始化6 o& X. X) G4 k1 O. d" J5 e% |, u
  1389. PHA
    % }% C. |2 y! Q- |4 {. d& K
  1390. JSR Sund_Bank_Set# M' Q: Z5 M3 l! @
  1391. PLA* b7 O) Y1 q5 l# p2 k0 d0 ]) W# W
  1392. JSR Music_Init_Addr, l# q# x# r0 x; Z2 h1 e( o
  1393. JSR SwitchMainBank6 k# d3 p: q0 e0 }# D

  1394. ( \: T0 S1 t: z9 [
  1395. JSR Music_Bar_ReSet
    : u& ]$ C7 f0 `8 ^6 M4 s
  1396. JSR Time_ReSet
    3 p' |8 O2 P0 {2 B5 X9 m  Q
  1397. LDA #$00
    - x" j8 U  N8 P" C2 I
  1398. STA Music_State( d+ Y; R8 g$ L/ S5 N
  1399. JSR Music_Stata_Show* g  Z7 l" I7 M
  1400. .IF Track_Name_Pos* p% m( I# A, r/ s% d$ g, Q- ]
  1401. JSR Show_Track_Info
    1 }+ k, _$ w: l$ e/ Q' B( ^4 K" k2 s# g
  1402. .ENDIF. J, t, u, m: q# c5 _
  1403. 8 H3 g$ Q; ]& W" T; m$ r
  1404. RTS, U  T. R' D. J( w8 b& x

  1405. * A& o  W4 D) `; D% S' g
  1406. ;==================================================; ~4 v6 f/ w, J' P' E
  1407. Sound_Play;音乐播放, t( A1 s# r3 b2 u$ I3 Z: I
  1408. PHA3 \3 z% s. [( D  k4 J3 w- v+ N9 a
  1409. JSR Sund_Bank_Set- y- y  |- h" _6 p( l4 ?1 A
  1410. PLA
    # x+ h4 e8 T% W' ], Q1 ]  W
  1411. LDA Music_State
    . i; T* H( L3 o. K7 T2 }, ~0 C
  1412. BNE Sound_Play_End, U8 b( n  h+ x) ~! K) E) R5 P8 `
  1413. JSR Music_Play_Addr! r" c0 D6 K" Z5 O1 Z8 K
  1414. Sound_Play_End
    . V2 Q& J8 f: q# ^! B! c* ]
  1415. JSR SwitchMainBank7 v8 A1 o3 k5 S4 Y6 g
  1416. RTS
    3 n( v+ j: J5 p' t$ j( h

  1417.   d& o" ?; W. g1 o
  1418. ;==================================================) H, Y9 K4 t' h- y( Q5 p
  1419. .IF Music_Reset_Addr
    ' G. ~+ l3 d2 w& [8 S  c
  1420. Sound_Reset;音乐重设(如果有的话)' \9 Y, @* D/ w  F8 C
  1421. JSR Sund_Bank_Set
    ; D+ M6 s6 s5 w: |2 k2 X# o
  1422. JSR Music_Reset_Addr
    3 q3 ]5 _* y* W
  1423. JSR SwitchMainBank5 k3 ~& P3 g9 n) S# {
  1424. RTS
    $ d! L: A+ e4 v* \
  1425. .ENDIF" O% @1 x2 M: k6 m
  1426. 7 O2 ~, ^5 g5 B) h3 F4 l
  1427. ;==================================================
    6 w* {/ S, `1 @, y# A
  1428. MainLoop;死循环
    , Z5 H% A) M# F3 C0 [6 J6 B) t! e
  1429. JMP MainLoop
    , G/ M5 F! c7 Z

  1430. & T7 l1 m& z% G! X- ?4 z- P
  1431. ;==================================================% f; q, u" C* ~2 O) ]) b5 A3 s! K9 K7 `
  1432. NmiProgram;Nmi中断处理: G  ~6 x5 d3 y7 p" I8 Y1 W
  1433. PHA
    * I  W" [0 p" s# F3 [9 X
  1434. TXA
    0 ?# S& r5 Z0 I9 {
  1435. PHA4 F: H# V: K$ S( o# v& x
  1436. TYA! E: g/ o) ?& d; j/ G% A) o
  1437. PHA, Z! G! [1 w; q  ~0 Q+ Q# o
  1438. % ]+ Z# H# e) |% T* A
  1439. LDA PPU_STATUS$ e; c7 t: ?% l4 v; c  k! f  j8 \& J
  1440. LDA #$00) o  V3 r( J8 H/ ^8 a+ n
  1441. STA PPU_CTRL
    2 m& O( [1 E& U& {- b9 f' l+ b
  1442. 2 I6 B6 q" }; {; I
  1443. ;切换主程序bank5 r  V$ W4 v0 H9 T
  1444. JSR SwitchMainBank4 s( A: E8 j4 G% L6 {" Z7 K% E0 m
  1445. ' X+ J4 P6 Z2 R. d% q! Z
  1446. ;NMI处理' z7 a; \) A# W; h
  1447. JSR NmiProgramProcess
    + w. @% q. {" J6 S
  1448. ! p2 _. s/ e: j, b- I
  1449. Nmi_Proc_End
    ; T& A3 x+ |: y2 {
  1450. PLA& M0 O7 D/ b; b  P& {2 J0 k8 D
  1451. TAY+ V, c5 v# y7 A
  1452. PLA9 J- r3 X0 a$ r& j: ?
  1453. TAX9 d$ u, h; G2 E$ b7 Q4 R2 L9 K
  1454. PLA& \1 v5 ^9 r" Q! w" w
  1455. ' o0 [* G# J( e2 a9 o0 G* U) D% N
  1456. RTI9 Y  J8 M3 B; Q$ e8 f+ a: \

  1457. 1 c) L3 K, D/ \
  1458. ;==================================================
    : F' @+ h) K& p5 E
  1459. ResetProgram;重置中断处理! ~1 ^. V0 G. o4 I
  1460. SEI  m- C* D- z! i- _% D5 h
  1461. CLD
    , h& [+ d1 N, @( X/ s
  1462. LDA #$00
    & Y$ H# F8 }0 C  e( o  O: k+ u
  1463. STA PPU_CTRL* m& T& B# S+ p# I8 V. X6 z" i
  1464. STA PPU_MASK
    . `' [9 r2 h# C) F

  1465. ) Y) L6 g* c* z4 Y
  1466. JSR SwitchMainBank
    . a1 ]* e' G. m- n; m/ h
  1467. JMP ProgramBegin
    0 \; E& t( E* `# Z6 y1 k& M
  1468. + V( @; ^5 f& H1 r
  1469. ;==================================================
    - p' q. m: X% A; m- D  q
  1470. IrqProgram;Irq中断处理
    2 Q! b0 j7 ?2 R2 f, m& G3 I& B
  1471. RTI( U1 q. j# V* G4 s3 F0 ~* b

  1472. 5 j5 m& C! q0 u/ ?
  1473. .IF SOUND_BAR_SHOW_ENABLE# F" v. W7 ^% Y+ ]
  1474. .ORG $FF80* b3 X, o3 O( ~2 G: k! G% G5 Q
  1475. STA $4000,X
    - a/ G  O% v4 f; v; }7 [& J
  1476. STA Sound_Bar + $00,X
    4 j8 q; v/ j: W, R8 x8 _- X, c  `6 Q( I
  1477. RTS, t8 n/ t' j: C/ d$ V- H

  1478. . P' _0 ~/ r9 I1 p8 m$ Z7 P6 `* p! B) q
  1479. .ORG $FF88! p) |; G" |. y+ T. J8 P! ^
  1480. STA $4000,Y
    4 M$ t0 }1 {0 r! ?4 {+ m5 X& c0 J
  1481. STA Sound_Bar + $00,Y" L4 c* L: x( }+ I; C4 Y/ j9 n( d
  1482. RTS8 `5 C0 m% w$ W; z4 M2 i: `
  1483. ; G% o8 V- \* ^
  1484. .ORG $FF90
      g  f9 c% }4 _  P/ i1 T' P
  1485. STA $4004,X( g. y/ F3 F: L2 B6 Y: c2 o
  1486. STA Sound_Bar + $04,X1 U2 q$ Q8 g1 U5 E: w, F% S
  1487. RTS2 y0 T6 S  W/ l8 I0 P

  1488. % U0 i, a( S* ?
  1489. .ORG $FF98
    $ w, l3 p0 P' t3 L* ]
  1490. STA $4004,Y  d9 u1 b$ ^2 j9 m
  1491. STA Sound_Bar + $04,Y2 o- l% U8 w( S0 q
  1492. RTS
    . R  R. v. g# a  u! E" D0 [

  1493. # b- W8 L5 f- O, k
  1494. .ORG $FFA0( h' S) r# v. [  d6 I" i4 ~
  1495. STA $4008,X
    5 ^& p9 D4 d& c, h/ m* U" Z, N
  1496. STA Sound_Bar + $08,X
    & G$ k& H- m- ^6 T9 _. f/ Y0 Z2 K
  1497. RTS+ A; h( @2 i  H1 P$ b. D

  1498. ; [* V4 e, i& ^: g: h
  1499. .ORG $FFA8
    / O. i5 U9 Y2 y
  1500. STA $4008,Y
    6 _' W& |& ?+ _* h' {7 c  s
  1501. STA Sound_Bar + $08,Y  v1 k; X, o7 t0 H7 [
  1502. RTS
    & m* R7 z* _' Q( {8 [( p% X* `! X

  1503. - Q% T, K6 ?# z# R" n8 [9 t, y
  1504. .ORG $FFB0, M5 ^6 W8 e+ D% ~
  1505. STA $400C,X) I5 K, S; M* _2 W: O, q# Y
  1506. STA Sound_Bar + $0C,X
    / F1 t* u# f% d$ D+ s
  1507. RTS
    5 `( I% g( O3 s( t8 e

  1508. * \" E- T! F2 d9 d8 S
  1509. .ORG $FFB8. m" q' {6 W# g+ b( j+ S: |% G% @
  1510. STA $400C,Y
    ' o" ^6 E0 g) o
  1511. STA Sound_Bar + $0C,Y' Y& P1 U% B0 D  p+ G
  1512. RTS
    1 x" f+ q1 [4 N! b
  1513. ; m% J: E- B5 Z" I; d
  1514. .ORG $FFC0
    8 B. ?: s2 o. _; f- ]
  1515. STA $4000
    . P: }2 q, h: L
  1516. STA Sound_Bar + $00% f# D7 C: g, l5 F
  1517. RTS
    1 x( z" ~8 L6 g) P
  1518. ; B5 C8 V' F: V) J
  1519. .ORG $FFC8
    - E  S) S2 Q$ B
  1520. STA $4004+ N* ~: n, }( `% T' ?, g$ `0 q
  1521. STA Sound_Bar + $04
    6 d0 O" s% F+ B; T0 C
  1522. RTS
    . x, `8 y! B5 V4 y7 ]% R
  1523. 7 K: P1 K8 `1 Z7 ?3 g: p6 i
  1524. .ORG $FFD0
    5 e( }# l. F1 A$ l) ^
  1525. STA $40089 ]+ ~: ~. U- _, ~+ }9 \
  1526. STA Sound_Bar + $08
    ( w/ M0 ^. {: B* ?. F* u
  1527. RTS( l& |2 T+ N$ Z$ Q" z: \
  1528. . }: P# C3 u3 ^+ {) y# J, C
  1529. .ORG $FFD8, _9 x$ G) n# _9 }
  1530. STA $400C
    6 X1 [5 s7 ]# e" A3 B
  1531. STA Sound_Bar + $0C
    9 n$ L6 W3 |3 d7 R
  1532. RTS: C" a. N7 U/ r% ^6 t/ C
  1533. ) A3 `. F) r0 V3 F% t6 ^$ [9 \& ]
  1534. .ENDIF+ ^# Q& f; ~% g0 E4 u
  1535. - A. U7 d7 o4 ]% h5 i# V' x# E; o
  1536. .ORG $FFFA& z: r1 Y9 U: B& a. f7 q
  1537. .WORD NmiProgram4 a. ~; c1 R4 h
  1538. .WORD ResetProgram. {0 ]! B: H4 w4 E) M3 T* k
  1539. .WORD IrqProgram
复制代码
& j$ P4 \$ L& I+ }# S  I

, Z6 L3 I. j, u( `4 ]2 C
游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

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

x

评分

1

查看全部评分

签到天数: 1373 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3366 天

[LV.Master]伴坛终老

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-18 20:56 , Processed in 1.075195 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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