EMU618社区

 找回密码
 立即注册
搜索
查看: 780|回复: 26

[原创FC/FDS-HACK] [FC][魂斗罗][最佳可视化]

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2019-11-29 20:25:37 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2019-12-4 21:31 编辑
1 c! E5 P. ]0 G4 Q" M/ N  y4 x1 i# j' `: l; F4 X2 i
[FC][魂斗罗][最佳可视化]# s6 z4 r5 Z. ~6 ?% V6 M1 n
时间:2019.11.30
# ]8 z& n% |7 `$ {作者:FlameCyclone4 V! h! o+ K; Y$ K) N9 F
内容:+ h4 F7 H& F) f% h
1.可视化:    1 w6 u( I9 z: g# ?( s; H5 [1 |
     (1)暂停时按选择键进入菜单7 O( z+ u* G3 `% `; L
     (2)方向键选择功能: B键开启: A键关闭: 选择键交换,开始键退出
5 Q. c) @' }. l. L     1.1.透明无敌: 透明无敌" }+ o6 R( K4 d2 ~' K
     1.2.加强无敌: 金身无敌
3 o5 Y8 w' z0 _9 g1 f& Q- e$ }8 s     1.3.生命锁定: 生命锁定3条
" Z! D4 t1 [  z2 o5 n* e     1.4.武器锁定: 武器保持不变
3 O3 }6 M8 g. Z. r( }% q! Q" g; G8 X     1.5.武器切换: 游戏时按选择键切换武器" n, ]3 \& a! m+ W- j
     1.6.无限跳跃: 跳跃无限触发
3 e  G; p) L# `# o     1.7.快速移动: 行走速度加倍# u* k' n) x6 p; D8 P) p
     1.8.皮肤切换: 交换玩家肤色
+ I% ?; O8 T( I; m1 i" h* _     1.9.公平子弹: 玩家子弹可以与敌人子弹对打) n7 c# X- j1 F2 u, }& ~* H- j
     1.10.强力子弹: 子弹打中敌人后继续穿透% f8 C0 Q+ d5 T& Z% a
     1.11.一击必杀: 敌方中弹一发必死4 {. o9 z% V: o( C' [) i
     1.12.全屏击杀: 开枪时全屏可击中目标必死
) T" F( W: g! f- A% o     1.13.玩家双控: 两个玩家的任意一方均可同时控制两个玩家
. E! Q1 ~- W( ]2 B2 R: k( P, T     1.14.移除电网: 移除2,4关的电网
, ?! T7 N5 f7 r$ o5 l3 n     1.15.掉坑不死: 掉坑后不会死亡
3 ?' r9 P8 m( V( o     1.16.跳过关卡: 跳转到下一关4 i  v4 V0 J2 b
  1. ;[FC][魂斗罗][最佳可视化]
    & R" D! _6 D  q- {9 P; w4 R
  2. ;20191129# x& O9 ^9 d& Z. i

  3. 3 C- ~5 U+ E0 o
  4. ;程序开始地址  O2 N1 `% `" w! x
  5. .ORG $90000 l( N# ?% M, k

  6. ! n" B/ c2 p8 q: \1 {' P% s8 J
  7. ;==================================================  w+ Q, p0 w  [
  8. ;==================================================
    5 I, q/ n5 ~; K. ]0 Z+ f
  9. ;是否双人玩家* E% N7 T# I  }0 |% S
  10. FC_IS_DOUBLE_PLAYERS = 11 g. d. V/ h  h6 N' B* K

  11. ( U" O* z4 v; `# q0 r% ~
  12. ;==================================================
    / y) z, T* g5 i1 ^: i% E% D
  13. ;PPU缓冲地址配置
    * ]0 S$ m2 c, Z( q
  14. FC_PPU_Buffer = $0300
    ) ~1 [$ v! t! }/ _1 P( A7 }. l
  15. ;PPU地址配置" G+ }) i* E& e. s
  16. FC_PPU_Cursor = $00/ O7 N% R% a, n' s& x
  17. FC_PPU_Status = FC_PPU_Cursor+$01
    2 K- s$ }. b$ O. G+ n
  18. FC_PPU_Data_Cnt = FC_PPU_Status + $014 Y1 c& A& y7 K% g# S
  19. FC_Data_Port_A_L = FC_PPU_Data_Cnt + $01) s( _! y+ f+ z, B5 G
  20. FC_Data_Port_A_H = FC_Data_Port_A_L + $01
    * m: Q" b3 c  @. |
  21. FC_Data_Port_B_L = FC_Data_Port_A_H + $01" r  \4 k6 O, G, o/ w
  22. FC_Data_Port_B_H = FC_Data_Port_B_L + $01
    : Q& T  s: @5 u5 b
  23. ;==================================================+ b* i8 p  o% m8 C$ l7 r, O3 M7 J1 Q* o

  24. $ {7 j9 c7 h+ n6 ]
  25. ;==================================================; I+ _: l# z7 f& l& V& V
  26. ;选择项地址配置
    " U7 ?+ b) U' }' u& C: E6 @
  27. FC_Select_Index = FC_Data_Port_B_H + $01
    ' S; v. K8 f. F
  28. FC_Select_Temp = FC_Select_Index + $02
    & N  g5 _( V4 ^
  29. ;NMI循环计时器$ }( B$ L& }9 _% p
  30. FC_Time_Count = FC_Select_Temp + $01# I7 _) `, r, i8 a
  31. ;==================================================$ R5 z% W' h: D7 n' N
  32. # X' z. ?1 P6 {9 u8 Q
  33. ;==================================================: Q" u1 \: H4 Q; ?0 T) y5 B
  34. ;光标配置
    4 A' @: j$ R9 q% p5 H! f  O
  35. FC_Cursor_Addr_L = FC_Time_Count + $01
    1 O) f& O/ o$ e, P
  36. FC_Cursor_Addr_H = FC_Cursor_Addr_L + $01
    & g  w" H6 O5 \; J1 Y' o
  37. FC_Cursor_X = FC_Cursor_Addr_H + $01* Z; z0 t( b: c0 {  r$ k1 g" z1 Z
  38. FC_Cursor_Y = FC_Cursor_X + $012 |4 X% n2 l; o9 o/ H' {3 J+ K% m
  39. ;----------------------------------------0 ~3 }! i" ?( S( l6 f+ |' E* n
  40. ;光标图形号$ ?) M1 M8 z  d: O8 }
  41. FC_CURSOR_TILE = $3E. {* J% z7 Q6 G% s5 @3 W
  42. ;光标偏移像素值
    " h% Y4 W$ W; W* m) D2 r
  43. FC_CURSOR_OFFSET_X = 12
      ~: {$ G! i1 V/ k9 S2 ^0 e, {
  44. FC_CURSOR_OFFSET_Y = 1
    0 H5 Z( B3 c! }/ s  X
  45. FC_FUNCTION_OFFSET = 21
    ( R. W: a6 ?4 ^
  46. FC_ON_TILE = $3D9 ^( i" ]" x: ^* L0 |4 F
  47. FC_OFF_TILE = $3C
    ( G$ m! o6 Z& _8 [( T9 l
  48. ;==================================================9 Q" K  ~6 \+ V
  49. * m" P5 V* ^/ H
  50. ;==================================================
    6 {7 L5 P; ?4 U* A( |# d
  51. ;翻页配置
    : }" ~. @- ?# H9 x  @# P
  52. FC_Page_Old = FC_Cursor_Y + $01
    . Z2 z" ]3 D- e$ D) k, ?
  53. FC_Page_Cur = FC_Page_Old + $01
    " p; ?/ G# L1 ^9 L0 n5 X+ E; a" B( a
  54. FC_Page_Item_Count = FC_Page_Cur + $01
    ; J5 I! U% h' o8 T
  55. FC_Page_Item_Buffer = FC_Page_Item_Count + $01
    % j# S3 Z- V- W; P, x
  56. ;----------------------------------------7 S% C% m3 u1 C+ @
  57. ;翻页属性8 \/ v  ~7 v: @0 Z7 t
  58. FC_PAGE_SIZE = 10
    " |& e" |' I3 W0 H- Q/ E
  59. ;PPU单次写入缓冲项数  ?1 ?" @  W9 i9 R& z, B' k
  60. FC_PAGE_BUF_SIZE = 22 r1 o" |. y* m: [
  61. ;----------------------------------------
    9 w5 _- D2 F3 F$ E' E, q7 @
  62. ;显示项最大索引属性
    2 r' J, I: G/ D, u7 \
  63. FC_ITEM_SUM = 16 - 1
    $ V" s6 z1 ~. B; d: a' f
  64. ;最大页索引属性
    ! i! l2 |2 N; N" [, b: R
  65. FC_PAGE_MAX = FC_ITEM_SUM/FC_PAGE_SIZE*FC_PAGE_SIZE
    . n- t5 @& o5 }$ d9 w7 H9 ?' P0 K( U
  66. ;==================================================
    / w% ^- Y2 ^$ I8 ]. f' H

  67. # |+ t9 j+ I' }" n4 h- ~
  68. ;==================================================/ t1 h+ c" \' v, k  }
  69. ;按键配置
    1 [5 c5 S: R! j4 G9 ^  e
  70. Button_Keep = FC_Page_Item_Buffer + $01
    # A# O# h8 L# F- }7 F' n
  71. Button_Once = Button_Keep+$02( N; t; j; S( R  h
  72. Button_Temp = Button_Once+$02  G5 e% @& c7 O
  73. Button_Buf = Button_Temp+$02! L. Q8 A2 P) V' O& x6 F
  74. Button_Status = Button_Buf+$02% ^3 j& N# h+ D7 u/ S1 c; a. T
  75. Button_Auto_Delay = Button_Status+$02  G. S; E0 j% D2 u! l% W
  76. ;----------------------------------------& @# b! t+ a( P3 T
  77. BUTTON_DELAY_MAX = $18
    0 z1 e5 E8 T* _! h, H! U: O' F, C7 t
  78. BUTTON_DELAY_SPEED = $08/ ~& o( d; Q/ e8 l; I# R2 E; W4 @
  79. ' K: P1 }; F3 A/ R$ q5 I" O
  80. BTN_UP = $08
    ( l. b" T- Z/ B8 B3 p
  81. BTN_DOWN = $04
    + s% F$ _! L: B9 m: c% v! ~' e
  82. BTN_LEFT = $02) S6 ]4 S/ R, F7 T2 ^& r) t
  83. BTN_RIGHT = $01
    / {7 S4 G: Q7 C: C, N! l
  84. BTN_SELECT = $20
    1 E" @1 j& q9 l9 E. s& c: k+ b
  85. BTN_START = $10
    * N- b9 H! p# N, l7 y
  86. BTN_B = $40$ T& n9 L8 S" m5 A+ J$ z* m5 w
  87. BTN_A = $80
    ! d7 Z( ?* O9 P  E' b
  88. ;==================================================
    . O6 e; B' R3 T0 @

  89. $ Z: w4 ^9 x5 \2 O
  90. FC_Copy_Addr = Button_Auto_Delay + $01
    ; M( t  r( \  y3 I( w+ i
  91. ;----------------------------------------3 ]% v, A4 R" F: n* K% E
  92. FC_Clear_Val   = FC_Copy_Addr+$00      ;清除模式覆盖值3 T. l" o. c) `3 T0 c) f# a
  93. FC_Cpy_From_L   = FC_Copy_Addr+$00     ;复制来源地址低位
    3 H8 J) [! l" ]4 v4 [4 K' b% q
  94. FC_Cpy_From_H   = FC_Copy_Addr+$01     ;复制来源地址高位/ J4 q3 J- t5 i) T; Y0 S9 y' e
  95. FC_Cpy_To_L     = FC_Copy_Addr+$02     ;复制目的地址低位# x  |* ^, M, u
  96. FC_Cpy_To_H     = FC_Copy_Addr+$03     ;复制目的地址高位/ V# d5 ^. S4 I) k: A
  97. FC_Cpy_Count_L = FC_Copy_Addr+$04      ;复制长度低位' M2 \% k- v% _/ B) k
  98. FC_Cpy_Count_H = FC_Copy_Addr+$05      ;复制长度高位
    3 `, B, _5 g& F2 \
  99. FC_Cpy_Port_L   = FC_Copy_Addr+$06     ;配置地址低位2 `; M7 O8 T( x! g: u
  100. FC_Cpy_Port_H   = FC_Copy_Addr+$07     ;配置地址高位
    ! E7 P" d1 K) s' \: w- y& \5 a
  101. ;----------------------------------------5 M! O: L  f) I! N, s. A
  102. FC_MODE_RAM_TO_RAM     = $00  ;复制RAM到RAM模式3 e& S" M  ~4 k% Y: @* d2 H4 d
  103. FC_MODE_RAM_TO_PPU     = $01  ;复制RAM到PPU模式
    3 @1 x+ A) R' w# q8 R
  104. FC_MODE_PPU_TO_RAM     = $02  ;复制PPU到RAM模式
    0 c$ A3 f7 \' r
  105. FC_MODE_PPU_CLEAR     = $03  ;清除PPU模式$ n4 Z6 V, U, X7 P( {

  106. $ U# J; R& Q1 A
  107. ;==================================================
    ! ~  q/ ~1 C0 M
  108. Rom_Nmi_Addr = $FF
    6 k7 V! Q3 ^' d, d
  109. Rom_Btn_Once = $F5
    1 g) s* L7 S- _0 _: c+ F
  110. Rom_Btn_Keep = $F9" _* q. R, u0 X0 R2 K
  111. Rom_Pause_Addr = $25
    , c# J7 a+ I- C
  112. Rom_Pause_Val = $01" s- g, i. M; j, s8 T+ L6 {0 g
  113. Rom_Pal_Addr = $07C0
    ( z$ a6 s6 B+ _7 ?7 G& x. Z' a
  114. ;----------------------------------------! X- g* J- j; B4 _
  115. Save_Zero_Addr = $6200
    * B# ?9 e' C; X# r- o
  116. ;==================================================; ?8 o/ R6 G2 i& l" y' [! A# }
  117. ;==================================================
    - C- u, z( C3 t0 X* [* W0 E
  118.   ^1 p' F1 ?3 y- R& R$ `8 |
  119. ;程序入口
    8 ^' O  S2 ]+ s0 n8 m& C
  120. Enter:
    ( ]% \- v4 Q  m' J1 o" B) r
  121. LDA Rom_Pause_Addr
    & Q+ s3 [5 R, {( H
  122. AND #Rom_Pause_Val
    ! t7 C- }% Q& Z7 }7 ]
  123. BEQ Quit_End. A8 K* s; Y) z2 ]+ \
  124. LDA Rom_Btn_Once* [; \3 s6 @, U- O# e
  125. CMP #BTN_SELECT
    ) G. J/ h3 i  N8 W* S
  126. BNE Quit_End8 C: E8 `0 R8 d; n1 x8 ?3 k4 Z
  127. PHA
    / H7 _2 x7 d; {( }" \9 A1 A
  128. TXA
      V  U( T( |# ?2 p8 P7 y, H
  129. PHA. \  R2 H( `: w- b
  130. TYA5 a% T$ Y: g" e" F9 M6 e
  131. PHA
    & D0 S* g5 V) m2 a7 ^. A
  132. JSR Wait_Sound_Stop7 u9 `) H6 a) _7 @4 E) {
  133. JSR Save_Screen
    / O8 _7 P' E+ ]$ F
  134. JSR Program_Begin( ~* |4 c% ~; o& F3 k+ y* S; j  X( G% r
  135. JSR Load_Screen
    / s, x' W* ?$ [2 m* x5 h: ?
  136. LDA #$10- L8 ~' F# X9 ]& b
  137. STA Rom_Btn_Keep9 s) g# q/ S+ ]: Q0 h# T$ j
  138. LDA #$00
      y  [: P- L$ c' I( \
  139. STA Rom_Btn_Once
    + Y( [* h# ^  b8 `" ?1 Y! B
  140. Quit:6 r& q- n( G. Y
  141. PLA
    " ?8 l. N8 l) G7 y& M
  142. TAY
    * A# B( A( z$ L4 l( l% }
  143. PLA9 l* X3 A' Q8 T
  144. TAX
    * N8 {$ i: K& {/ L6 J, ?
  145. PLA
    6 P/ i( x$ B" R2 d4 A( H
  146. Quit_End:" }* l3 L7 R2 |  g, k$ X- @, E! h
  147. RTS: I$ d6 G5 v9 @4 R. y) E+ L$ ^

  148. 7 V$ k% p7 I9 Z6 l1 ^5 |/ ~( L& g
  149. ;==================================================
    0 `% @' {" X, S: o& \+ T
  150. ;等待音乐结束
    , {7 g  g/ y9 }! a7 N9 W1 w
  151. Wait_Sound_Stop:
    ! x6 V3 n6 r1 V0 V" c! v
  152. Wait_Sound_Stop_Check:
    2 ~9 E2 D  G+ g/ a  U6 g& W4 w7 g
  153. JSR NMI_Wait+ {2 `2 q' G) V2 N3 F
  154. JSR $F825
    ! ^; \0 k8 U* Z. H2 I) ]
  155. LDA $010A
      V/ z* }8 X/ r
  156. BNE Wait_Sound_Stop_Check
    + O- v6 K1 G& [0 I! z+ T4 `, l
  157. RTS
    & M; F1 m: }3 ^& L( k& o

  158. , f7 V# p! U9 T9 Z
  159. ;==================================================) E: U( _8 B. O' A
  160. ;保存屏幕数据6 x' P: M% _4 o
  161. Save_Screen:
    ( t( T+ d4 D8 p2 C8 P+ f' v! [
  162. JSR Screen_Off
    : X5 V# L+ X: x
  163. JSR Save_Zero
    , t9 q& S- G9 Z* u
  164. JSR Save_Ram
    # @  B" N( V9 s2 ^: [  E1 P
  165. JSR Save_Ppu  R; u9 i: ^+ F# N
  166. JSR Ram_Init
    8 W0 ^$ F8 G2 ^; ]; U
  167. JSR Sprites_Init  D9 _4 r9 x: x& V" h
  168. JSR Clear_Ppu
    ! k/ t4 W: m# |% a0 p. M
  169. RTS  V* V' U- o2 T% U7 Z
  170. 8 w/ Y4 _$ N& U! T+ M, O3 y: ~; C4 T. v
  171. ;==================================================* p& f! h' \& B/ _  ~# P- q7 e
  172. ;加载屏幕数据
    % r0 H0 Z8 d9 ]6 A! ?
  173. Load_Screen:7 r7 o2 v" e7 h2 ]! h0 Q7 X' \9 }
  174. LDA #$00
    & Z$ m- b6 w' g* E; n7 f0 C
  175. STA $2001* f( ?* k1 U' _' i! p& N- _
  176. JSR NMI_Wait7 u, B8 n; T/ K( p' a; h& V
  177. LDA #$02
    ) P: h- ?1 a" ], N
  178. STA $4014
    . h, {0 `$ n4 \, \$ i9 ~0 X
  179. JSR Load_Ram; w& N2 m* j* q6 r' o) ?( l
  180. JSR Load_Ppu: o) v8 w) A( [2 [
  181. JSR Load_Zero  S. ~$ s' c4 K  A% J$ d
  182. JSR NMI_Wait
    1 ^8 f7 m9 B# |, |
  183. JSR Load_Palette
    # X9 [. D( m7 Z$ U. i
  184. JSR Screen_On. {& b0 \7 t# i/ o
  185. RTS
      u/ d5 G4 u0 |- r

  186. ' t$ O4 [) t8 ~6 H4 u
  187. ;==================================================
    # X" V3 `; X5 ~: D/ N
  188. ;关闭屏幕
    % F; U- ]+ ]( j% F
  189. Screen_Off:
    & S$ r5 z) @. a9 f  O/ a7 ~& r& V
  190. LDA Rom_Nmi_Addr
    3 `) l+ r1 w% d& L! t- R2 ~
  191. AND #$7F# M  x9 ]7 B: R7 y* M* G
  192. STA $2000  p' o; T0 e, G2 v0 B2 _  o
  193. JSR NMI_Wait- D. l7 x1 _/ }3 R
  194. LDA #$00, G. u8 t. _$ F6 P' p
  195. STA $20004 R% U& Q" o/ L
  196. STA $2001
    * m  ]% {: q. q3 c$ z
  197. RTS' V, j* x( W& u5 `" g6 {
  198. ( }2 w" W6 j; Y- i
  199. ;==================================================
    : s$ V5 m: ^3 h0 d! _2 {+ ~
  200. ;开启屏幕
    $ ]! }( E3 a: h4 k$ D1 t
  201. Screen_On:7 U3 C( L' h! F' V; T0 L. c
  202. LDA Rom_Nmi_Addr8 r8 Q7 j+ L' k0 m
  203. STA $2000
    / _! u5 @/ f$ `4 I  E
  204. RTS
    5 _- m; b7 N. s. f
  205. 4 I8 W4 S9 i& o' Y
  206. ;==================================================9 S+ h+ M* b) _6 J, y0 w/ [! U1 U9 m' T
  207. ;清空占用RAM
    ) b  [$ M. j0 |1 n
  208. Ram_Init:
    3 e4 X( F" E+ S2 w
  209. LDX #$00
    $ K- r2 |( U7 U/ }  j
  210. LDA #$00% r5 ^. s5 j. k& X' Y3 ^
  211. Ram_Init_Set:7 n3 m) d- y8 h" Z. j7 g# _
  212. STA $00,X
    ! a1 L. I7 p& b) |4 o
  213. INX1 l# J, ]  o# r  e
  214. CPX #$40. R+ T) k2 [5 ]2 o
  215. BCC Ram_Init_Set
      O" l, n  m8 l
  216. RTS
    : J" C# a* F; c* a
  217.   F" D# l3 Y, ~9 A7 ~- S+ ?$ u
  218. ;==================================================
    / F9 S/ A: @( P  S
  219. ;清空占用RAM
    ! \$ L" x8 y) R( r% O% X9 N
  220. Sprites_Init:
    9 g0 C: ~! T+ [4 q+ y1 P( N
  221. LDA $2002
    6 b2 ~  E/ I; a9 H- }4 L
  222. LDX #$00
    5 E* j+ o$ Q% ]1 \" m& V* o' p
  223. STX $2003& l' V  G% V1 @# X
  224. LDA #$F8
    % s6 M5 s" T. h) S, ]) k
  225. Sprites_Init_Set:; ]4 y3 a7 H4 L/ w/ j
  226. STA $2004! N$ O6 x- M3 j7 m) ?) A5 p4 p
  227. INX
    + k8 `5 x$ z5 X# t' d7 v
  228. BNE Sprites_Init_Set
    9 x, u. C" x% J/ k
  229. RTS* V* k# I2 J, u) d1 o5 p. _
  230. & I; C! ?- p% b/ F4 b# Z0 [
  231. ;==================================================# Z1 z' W+ q7 b
  232. ;保存零页数据
    1 U5 ~. ^4 i. a/ N# a
  233. Save_Zero:
    # j: F. P" \6 @% Y2 k9 O9 y
  234. LDX #$00! h+ B$ a; A4 \; X
  235. Save_Zero_Set:0 f& g8 W1 }* |+ z
  236. LDA $00,X) A2 v+ r6 z9 j2 s. c- V" z8 l
  237. STA Save_Zero_Addr,X
    7 S% a3 K: r8 \" I  A
  238. INX  o" Q: V$ G+ T! V" D- H
  239. BNE Save_Zero_Set7 G3 z5 w" a8 p# E
  240. RTS4 d6 P, g2 O3 c

  241. 5 A8 p3 N* B* A' K& s% R
  242. ;==================================================& w( L5 l3 o: u) U' Y; G" N
  243. ;加载零页数据9 O5 Q- u3 u1 f
  244. Load_Zero:
    6 c, S5 z# y- }! q3 r, Q; h
  245. LDX #$002 n  D, P8 h% d
  246. Load_Zero_Set:
    4 G' q; M% p( c9 l
  247. LDA Save_Zero_Addr,X. M0 R3 b7 `" ]6 G
  248. STA $00,X
    1 c; n7 M; n% [
  249. INX
    * T: E0 F: T1 G( N) g7 B: B- y
  250. BNE Load_Zero_Set9 |+ ?* x" r% y! M7 U' e. v
  251. RTS; B9 \' u8 Z% o' f

  252. & d/ S0 Z! m4 M+ v
  253. ;==================================================
    " z! z# t, c; N1 D3 V. L; c
  254. ;恢复调色板# u8 c8 i1 Y7 m8 q4 w* [* m1 ?
  255. Load_Palette:
    + b- ]0 s5 g/ c
  256. LDA #$3F
    & W/ g4 i( n  J" N
  257. STA $2006
    " L+ `2 ~3 @7 r+ ~4 n9 G
  258. LDA #$00
    * T4 y4 `+ D0 H. c; K$ t
  259. STA $20062 e: Y& r% W# D8 |: Q" b
  260. LDX #$00
    1 q5 E) R) B6 D0 y) N# @
  261. Load_Palette_Set:
    7 N7 W) C! Z' D7 y( j3 O! k
  262. LDA Rom_Pal_Addr,X9 N1 ]. a& c6 L- q3 g( N
  263. STA $2007$ ]# \1 m9 t7 }; g# X1 F
  264. INX
      g- ~( ?' j# V  o7 f8 h
  265. CPX #$20
    + W7 ?+ k1 T9 C* N" J( P5 O
  266. BCC Load_Palette_Set0 S+ i$ O4 a8 s
  267. RTS5 @& C9 w! S# Y! A9 R8 O) j* t5 W) ]

  268. + i7 L" B; [. u# a; q
  269. ;==================================================
    ) G9 I+ e4 T) i7 M5 l# f
  270. ;==================================================
    , N  k. Q" u; y, J* H

  271. 7 k( c3 c9 \6 e0 W: s0 [( j2 _
  272. ;==================================================7 \$ h' ?, n+ z1 C! v2 O& U# n
  273. ;程序开始
    , U( n9 C* d6 [) q* K5 K/ e
  274. Program_Begin:
    4 R! v. q: t, B& U2 m
  275. ;==================================================. ?6 U. b: a3 d
  276. ;图形设置
    ) q) y9 E+ s% F) F4 M& J' v8 m4 O
  277. JSR CHR_Set
    ' [* K  ?3 \2 x0 H3 C$ A
  278. JSR NMI_Wait5 u( A0 _7 Y8 C1 t1 A/ d) N
  279. JSR Palette_Set
    1 n) s; z* o% d6 f5 u
  280. JSR PPU_Data_Page_Show- q) \- i& x9 c& \

  281. # X2 H6 y% k* Z1 _5 |9 ?8 l5 F1 J
  282. ;==================================================
    ; b! W5 v0 |+ j$ @& j1 w& l5 v" [
  283. ;开启显示
    5 u4 N9 R: K; v) Z. @# J+ N( h, a
  284. LDA #$1E
    6 \  h' G2 t/ q7 T1 n
  285. STA FC_PPU_Status% \, }0 V& g0 B
  286. 3 q$ U+ v  ?5 {5 U
  287. LDA #BTN_SELECT1 @: F) l% l( {
  288. STA Button_Keep0 {& ]& W9 Z( G6 a  e# X
  289. ;==================================================
    ( ]- [" d+ N$ p5 u4 }6 _
  290. ;模拟NMI循环
    * ?: ]" T" |( O- d  M* P
  291. NMI_Loop:
    : J/ X% I% ]+ T- J/ q9 T* L
  292. JSR NMI_Delay
    / j) m' Y/ E" {# a
  293. JSR Button_Process
    4 k- J6 A' V+ L/ u/ G
  294. JSR Button_Auto_Press
    & W' n0 o/ p* y3 Z- H- ?
  295. JSR Change_Select_Item
    * r8 K/ S. c" n+ I% ?) ?: C
  296. JSR Change_Function
    ' H' A+ W+ n; I: K% H
  297. LDA Button_Once
    ! v2 v* A6 ~; y& g" j  O% Y
  298. CMP #BTN_START' _& F5 \7 \) x4 |
  299. BNE NMI_Loop2 M9 D5 g1 x, o+ c/ j5 U
  300. RTS2 m6 p0 ~7 k5 h5 {7 g! {

  301. 8 F0 ?" R; Y' z; [5 Z$ N
  302. ;==================================================
    7 w% X, u. X" L4 u8 U" N5 E( \
  303. ;模拟NMI中断
    / u) @- F" \; Y+ j" }7 {
  304. NMI_Delay:; k" W& ]& h8 l
  305. JSR NMI_Wait; J( N' P7 |! l0 U' A& M9 O/ x! U
  306. JSR Show_Select_Cursor
    3 R7 i  |- f4 ]2 V" _" I6 X% Z+ A
  307. JSR FC_PPU_Process
    / k& z. z( Z/ }$ H) z: t
  308. RTS
      X* R$ j5 N" q8 i
  309. : x: P( T( s( _, \% x
  310. ;==================================================
    " ]3 t! j: H  [; W+ R6 e2 Q
  311. ;等待NMI中断4 |* m& h, D9 ~8 S) x7 o+ X2 N  _
  312. NMI_Wait:: F6 S( u1 J( {; i
  313. LDA $2002
    ! o9 z6 d7 y, Y$ i
  314. BPL NMI_Wait
    ' ]" w* h+ O2 L' Q
  315. DEC FC_Time_Count! F# ^) [0 z8 Y+ H7 R4 C2 G
  316. RTS
    " b& q; Y6 D. P0 ?! V# E4 l
  317. & m4 f0 F7 S0 i9 C- n) I% |3 B1 c
  318. ;==================================================
    / Y4 G( x; X: V
  319. ;PPU写入模式配置属性
    8 P9 I9 e6 z0 ^, E
  320. FC_PPU_MODE_CNTL = $FE               ;带计数行写入2 O7 u& F  d# _, b4 v" E
  321. FC_PPU_MODE_CNTC = $FC               ;带计数行清除' I* g" }) ]9 R' D1 X; h
  322. ;-------------------------------------------------
    / R' @7 ]4 I$ H) ?2 T% a! r
  323. ;PPU处理
    - I% J* N' I) z1 k% z
  324. FC_PPU_Process:5 r2 b6 k$ h2 h2 m# w5 N
  325. LDA FC_PPU_Buffer1 U$ b; v1 w2 M% Y; w: d0 }
  326. BEQ FC_PPU_Process_End
    " i8 _* S: D* j( c& d4 J/ g1 @
  327. JSR FC_PPU_Process_Beg
    $ v8 C  t% c; g, b
  328. FC_PPU_Process_End:
    ; u$ k& K1 W4 V9 R2 a6 g1 Q
  329. LDA #$00
    & l0 [. K' x! v% F; C, ^" {
  330. STA FC_PPU_Buffer
    8 a+ S5 V; E+ F: A
  331. STA $2006
    / O3 @" x9 r& _4 p* R
  332. STA $2006
    : F) g9 Q+ K1 Y  _) Z9 N4 d0 ~
  333. STA $20058 w$ \) o) @: r9 ], p
  334. STA $2005
      ]/ z  r+ B8 B2 R3 H& Y
  335. LDA FC_PPU_Status
    9 F2 [' x( O/ ~: \
  336. STA $2001
    ( V- u, }$ i: d/ j8 t
  337. RTS
    6 Q1 u* Z* ?! l8 u- J* Q: q6 A
  338. ;----------------------------------------
    % \9 F9 y- d7 E+ A
  339. ;PPU处理开始& h- V, `' `5 E
  340. FC_PPU_Process_Beg:
    * I6 Q% i' `% e, ?) X! s
  341. LDX FC_PPU_Cursor
    4 h; o/ X5 v- C. q3 A
  342. LDA #$00) H* d8 V4 t% y+ q1 u6 E
  343. STA $2001) B  L1 O0 d; Y$ w( f
  344. STA FC_PPU_Buffer,X4 ?" I0 m5 x3 k
  345. STA FC_PPU_Cursor  _. s8 K! `6 l; B# c
  346. LDX #$FF% C+ U' N, Z3 s+ z$ C1 ]
  347. CLV8 g4 ?, S/ D" Y0 D/ f) y9 |
  348. FC_PPU_Process_Mode_Select:
    " ]5 N1 k, }6 z- \/ Z* R& m
  349. INX- s: [8 h4 W" Q: T
  350. LDA FC_PPU_Buffer,X
    * x, W1 _5 g& x
  351. CMP #FC_PPU_MODE_CNTL
    9 r2 a9 y! |, ]
  352. BEQ FC_PPU_Process_Mode_CountLine: S" L" a6 y% c
  353. CMP #FC_PPU_MODE_CNTC
    : n! V# g+ I- V  J6 e9 i" m) N3 |
  354. BEQ FC_PPU_Process_Mode_CountClean3 T) C3 D0 ~3 ]7 M3 M
  355. RTS, V  d+ A1 ~0 N2 E6 P* F/ Z0 M
  356. ;----------------------------------------
    4 Y  Z+ a/ [; [2 e. B5 P# R4 @
  357. ;计数行写入模式. }5 F! a$ y1 b
  358. FC_PPU_Process_Mode_CountLine:
    ) y! v" U8 B0 T5 Y. {4 E$ }
  359. JSR FC_PPU_Process_Set_Addr_And_Count- n, N8 Q8 h6 G6 ~
  360. FC_PPU_Process_Mode_CountLine_Write:6 U* t, I* T% {6 i4 ]
  361. INX, R3 X' o5 H7 B- \" Q  d
  362. LDA FC_PPU_Buffer,X, E) ^2 [9 r  A0 R
  363. STA $2007
    1 r, K4 c9 t" C# a- s
  364. DEY# R- f4 j! T# i$ t. S
  365. BNE FC_PPU_Process_Mode_CountLine_Write
    / L8 s+ D6 t8 Q
  366. BVC FC_PPU_Process_Mode_Select0 l: O5 U/ a8 R# r: ?
  367. ;----------------------------------------
    ' J6 Z* q( d. O3 l9 T6 G$ d- Z) {
  368. ;计数行清除模式
    2 k9 {3 T, M) c8 Y8 @+ ~
  369. FC_PPU_Process_Mode_CountClean:; l: A' Q; D  O5 T3 S- e5 j! v. R- w: J
  370. JSR FC_PPU_Process_Set_Addr_And_Count& v) ^4 R; t/ Y$ C
  371. LDA #$005 E+ {6 x# D1 M% K0 a/ s
  372. FC_PPU_Process_Mode_CountClean_Write:
    . Q* s1 ~/ R0 b- Q! h3 t* ?
  373. STA $2007( _" Q- W$ [9 C
  374. DEY
    % y# K/ W/ a: V. Z" j# c( ~  l. j( m
  375. BNE FC_PPU_Process_Mode_CountClean_Write4 g5 m# B, ?9 U$ S
  376. BVC FC_PPU_Process_Mode_Select! a) _, L) r( Y, R
  377. ;----------------------------------------
    9 @  b* U) X/ S1 R/ G7 b
  378. ;设置PPU地址和写入计数6 h8 I( B( H! w0 O
  379. FC_PPU_Process_Set_Addr_And_Count:
    : C4 ~' I# y; C5 {
  380. INX# a, i' ?- Z3 M/ T
  381. LDA FC_PPU_Buffer,X
    / X! z8 F+ W1 o) a" k: @
  382. STA $2006; a0 n. |) w  w/ A8 I  T
  383. INX/ j1 ~+ q- i) R) `5 F
  384. LDA FC_PPU_Buffer,X9 |# m% J6 ]* D9 @
  385. STA $20067 s: J( F$ J& r
  386. INX
    8 y- p0 G6 Q: k: u: R% S
  387. LDY FC_PPU_Buffer,X
    " T* `& }( z! |5 M1 G( o/ O
  388. RTS
    $ @, N9 g* G- L% S8 y
  389. ; Y+ e) l7 v& S
  390. ;==================================================
    ' `) w% A2 j; V5 u& w3 ?
  391. ;设置CHR图形; z5 F  h8 B& j: u1 i. p
  392. CHR_Set:! e- _. p8 V! Y5 U. J$ @
  393. LDX #$05( a5 h2 A4 k1 l: b7 L4 _
  394. CHR_Set_Data:: C; d( ?7 g3 ~+ Y
  395. STX $8000
    9 m5 N% ?9 S# O7 D
  396. LDA CHR_Data,x
    ! F5 [+ Z& @3 N' x1 W' ^1 w
  397. STA $8001" f5 w% Q& ~; D. h' X: v3 p
  398. DEX4 b  p" b# V4 k$ n  t% u6 @3 S
  399. BPL CHR_Set_Data# m( M6 k4 o/ I; Q4 E4 D: R6 O
  400. RTS
    : ^( G5 O) [# V; l
  401. ;----------------------------------------
    & Z* F- |/ l; {+ n
  402. ;CHR图形bank数据
    % @) B0 G. w$ N) p2 l! L
  403. CHR_Data:
    1 I2 c6 S6 z4 R* z2 `
  404. .BYTE $00,$00,$00,$00,$00,$00
    / P$ V6 p9 w$ \5 X/ a& E: e8 _
  405. * A" e/ X7 H  o" l+ B# ^! Z( T
  406. ;==================================================
    # I7 Q9 N- R. Z" V; b. S
  407. ;背景调色板设置8 R; \; e& K* s1 \3 J5 X5 j' h
  408. Palette_Set:
    5 H  _1 [" q* K: G7 v
  409. LDA #$3F
    ; \% ]; f4 d: M3 P" T& x
  410. STA $2006
    # ?& d% g5 D* r; @0 \% h4 J. ^
  411. LDA #$006 k0 h; ~! F0 c1 [/ e; u
  412. STA $20069 ]# d, g; E: p# |) V9 U1 F$ q
  413. LDX #$00$ [5 H0 q- F, N( Y5 H7 q
  414. Palette_Set_Data:. D; n7 m* V  m9 \" X4 K5 A. e
  415. LDA Palette_Data,X
    " |6 G2 H- X# M
  416. STA $20076 N; H+ E9 P' D9 L0 q3 u( N. a& z
  417. INX
    $ E# J' R- x8 P1 f$ }
  418. CPX #$209 o2 n4 X( H, R" M$ e8 v
  419. BCC Palette_Set_Data
    # o6 L3 Q7 K3 K1 z
  420. RTS# ]0 p* w( T) k9 H/ T& i
  421. ;----------------------------------------
    7 v. A! t/ B+ D: @/ k' {
  422. ;背景调色板数据' M& y  K! k  T0 y
  423. Palette_Data:
    , a! r: I, [7 U6 m5 \3 o7 k
  424. .DB $0F,$29,$24,$24,$0F,$20,$20,$20,$0F,$26,$26,$26,$0F,$2A,$2A,$2A
      J3 `/ V( o3 m7 G1 Q3 h% y
  425. .DB $0F,$20,$26,$16,$0F,$24,$24,$24,$0F,$26,$26,$26,$0F,$2A,$2A,$2A
    . E* F+ _  M) p

  426. 3 ?5 w# J( f5 c# K% a5 _6 ?
  427. 3 x# A" R. C! @% ?: }8 M9 L. e
  428. ;==================================================1 a% h( L/ v: a; O4 ~* u5 |
  429. ;按键扫描
    ; B: H* e$ x) Q' i
  430. Button_Process:( j1 O4 M+ A+ ^8 @- `: j8 @0 r6 V
  431. LDX #$014 h$ h; Q2 Y$ ]4 @* o* c7 R
  432. Button_Process_Beg:
    ) h* {6 @7 G2 g2 Q
  433. JSR Button_Scan7 |2 L8 V' G- f/ W
  434. LDA Button_Keep,X
    5 d( P4 w/ k# T& e' A
  435. STA Button_Temp,X' s* i% ?2 t1 A
  436. JSR Button_Scan
    ; g% p( q5 A5 P7 b0 D
  437. LDA Button_Keep,X
    " r7 a1 c+ R$ Y* [% U3 C
  438. CMP Button_Temp,X
    . a  ~9 n* S7 i. V/ v
  439. BEQ Button_Get_Once
    ' R7 p7 X( `5 i8 E; p
  440. LDA Button_Buf,X
    3 Q7 Y: \: B6 a. ^
  441. STA Button_Keep,X
    3 R2 [7 H+ t; k1 s! u9 t# u+ i
  442. Button_Get_Once:
    " J  Q: M5 x5 j+ {
  443. TAY
    4 N; \) o& S" s& F5 u+ M1 P5 U
  444. EOR Button_Buf,X- B8 y0 |8 Z8 I- M$ X  \9 e: Q4 E
  445. AND Button_Keep,X
    , B, O* Z* H0 k3 e
  446. STA Button_Once,X, Y. K+ f: I7 H7 n# M6 V* c' f
  447. STY Button_Buf,X' R, r& n6 R/ L. k
  448. DEX
    % o! }( Y! N4 N
  449. BPL Button_Process_Beg* H/ |/ F( R8 ~) L+ y9 \, W
  450. RTS
    4 @: R1 ]' u; i( g- ~) E
  451. ;----------------------------------------+ M! u0 d+ q- l; B, K. [$ U! O
  452. Button_Scan:# h& q; l8 T3 U! K' M0 i& C$ ]
  453. LDA #$01
    ; n; L9 r* v& j  W, P& u
  454. STA $4016: r' Y3 j& a# \' p8 ~; Z
  455. LDA #$00: {; F" K) b6 {; L
  456. STA $4016
    + A1 F2 n3 C. W: J; |1 e
  457. LDY #$08
    9 D5 a2 `4 N) H+ s. F, g: N8 ?. L
  458. Button_Value:9 L2 \$ z- W. E
  459. LDA $4016,X! J! ~7 h$ j5 w) @& _! t# e3 {5 s
  460. STA Button_Status,X! @. i! z& u7 m: S; Y
  461. LSR
    5 h/ V- n; c; u) H; l
  462. ORA Button_Status,X
    3 i2 _+ |3 ^9 |8 n! D- D
  463. LSR
    ; g+ {. O3 B: f' b
  464. ROL Button_Keep,X) |. m; R8 g8 Z$ A8 X
  465. DEY4 ^, j, ~6 H  u; X/ G
  466. BNE Button_Value% |+ }' z. G% ]* {7 B/ B/ d
  467. RTS/ M# E; B" y! R0 R  I1 y
  468. ( g( O9 o# ^9 C, A# E1 _$ r
  469. ;==================================================
    2 F# c" K8 t7 w9 l: E3 _
  470. ;按键自动按压6 a  |. @- N( {' f" v
  471. Button_Auto_Press:: A, H/ ^- [0 B  s: g2 C3 L0 j
  472. LDA Button_Keep
    1 M9 L% W# i3 C3 D
  473. ORA Button_Keep + 1
    7 Q  w: Z7 s6 a4 K
  474. BEQ Button_Auto_Press_End! f7 C" I! L0 o# |
  475. INC Button_Auto_Delay
    % Y5 L1 E& M4 R  s: O) O, ?) N
  476. LDA Button_Auto_Delay; ~' S0 w% o5 b( }: z
  477. CMP #BUTTON_DELAY_MAX, Q. b9 \  m, I" \/ X5 F8 e3 e
  478. BCC Button_Auto_Press_No_Active
    ; d# n3 S$ Z' y# O
  479. LDA Button_Keep! m* o8 T* q+ ]7 v/ ]
  480. STA Button_Once
    6 _  A' B# S' s& s% X5 a6 O
  481. LDA Button_Keep + 1
    % v$ I$ I1 M6 C! t
  482. STA Button_Once + 17 y" }& I6 o: t$ G/ N" g3 w& g
  483. LDA Button_Auto_Delay
    ! H' f- x. T, d! P. q
  484. SEC
    3 f7 [: U' d" ]5 |& S7 ~& m
  485. SBC #BUTTON_DELAY_SPEED- D8 {8 ^+ \9 q, t8 `( K
  486. STA Button_Auto_Delay  V" M, Q; y, ^, R- w; e
  487. Button_Auto_Press_No_Active:
    ' n3 R" [& O8 m. i* J# I
  488. RTS- a' Z' P* Z5 Y- q* N) m
  489. ;----------------------------------------
    9 L% r9 S8 ~' O  Q' M% z+ s
  490. ;未按压按键; U7 }" W! p, F/ V3 S$ ?% b/ Q
  491. Button_Auto_Press_End:: t# }. ]( K2 x7 u0 N) W, P
  492. LDA #$002 g) J6 e+ w3 ^0 E/ Q1 Q! j: a9 x
  493. STA Button_Auto_Delay
    2 Z$ e; i+ \' f3 K
  494. RTS
    * R1 X' B( R5 H( l+ [% _

  495. 3 G- \1 k, u3 r: R" h( U
  496. ;==================================================
    7 \4 F3 w3 ?8 A: ?0 t' {3 [
  497. ;设置PPU写入模式
      h4 G5 i6 V) R7 `. B+ k3 g; N0 o
  498. Set_PPU_Mode:
    - K0 E% u7 d, o9 U- f5 Z6 k
  499. LDX FC_PPU_Cursor; {0 \4 Z9 N' y: H" {1 U8 H
  500. STA FC_PPU_Buffer,X
    1 N1 C' K* q  R2 ^7 c
  501. INX
    % a3 s$ C) C! e" c% t8 E; L
  502. STX FC_PPU_Cursor1 V3 }( I" z/ x% j' L/ L
  503. RTS
    7 }6 B3 L5 f. b

  504. 5 l; x% u/ [  D
  505. ;==================================================
    / P5 T+ P8 ^1 s' ~( y6 W
  506. ;写入单独一行文本  u$ T7 e( Y+ Z: A  n) F4 `: R
  507. Set_Select_Addr:
    ' ~3 E/ D" A. G5 T) r6 O
  508. LDX FC_PPU_Cursor+ i1 }  y6 ]4 m# e
  509. LDA FC_Select_Temp; R+ j' g! d/ y: x- @" D
  510. ASL1 P% y5 x7 W/ h9 }* D: P# u
  511. TAY9 F& B. E. o2 y
  512. INY
      T9 g: p. J9 [$ x  J) E& F
  513. LDA Text_PPU_Addr,Y( {9 U$ S8 G" q) r/ }
  514. STA FC_PPU_Buffer,X
    * i0 N' ?7 T8 K4 A% G) @
  515. INX
    6 O7 \) G8 R+ `5 f+ K. o
  516. DEY$ L2 D+ E! }* s
  517. LDA Text_PPU_Addr,Y
    % X2 N  L# j. z5 g* Y7 Z
  518. STA FC_PPU_Buffer,X% ?3 Y& _. n. w" B% i
  519. INX  k# ^- t: f$ l7 p* d( k
  520. STX FC_PPU_Cursor# a2 n! \: c& O
  521. RTS
    $ l. A2 n. z0 v/ w; J! X
  522. 8 M1 e" {# ~2 J8 E) V4 c) N( i  v
  523. ;==================================================
    ( ~) c2 g4 \. }0 [* G0 j
  524. ;写入单独一行文本$ F+ D* `& Y' u, j, R4 k
  525. Set_Select_Data:
    ' B5 {. N1 x& m1 u5 r# ?& V
  526. LDA FC_Select_Temp
    0 R7 c# _& q0 U$ F' T' ]
  527. CLC  X# ~) V) T* v! ?' U, N+ x; l+ b2 i
  528. ADC FC_Page_Cur
    % S( A2 g) R7 H
  529. ASL
    ) D- G& l1 Q' R! N
  530. TAY
    - z6 Y5 K9 t0 h/ m% m' {
  531. INY7 x7 s/ B2 b$ |1 H1 ^# ^
  532. LDA Text_Data_Addr,Y
    8 E# C- }6 I) A$ s
  533. STA FC_Data_Port_A_H0 ]+ |# C: D+ q; A$ c) M. Z
  534. DEY% X/ W) B" Z9 E2 q3 S9 a  y) b( O2 ?
  535. LDA Text_Data_Addr,Y; C( |3 y7 `# O, w) U: g
  536. STA FC_Data_Port_A_L
    4 l5 a9 z: F$ x  c) ?* c
  537. RTS
    % Q+ K  V! g% W" \

  538. ( x( I2 O) M9 x
  539. ;==================================================
    4 G3 C# Z. X. U" U* N
  540. ;清除旧文本7 M1 W. H( D# S% O
  541. Set_Select_Data_Clean:
    6 P4 k4 s3 L/ d. ?9 Z* q6 P
  542. LDA FC_Select_Temp: s8 i# _) U4 {: A
  543. CLC
    4 \/ j2 Z2 P: J  ~% w* C* j3 p
  544. ADC FC_Page_Old8 y4 @# A3 r% Q# v" l7 @
  545. ASL% l6 x" u0 Q) ^$ u/ u
  546. TAY$ N/ d, ~! o' }2 T
  547. INY
    9 @* G( A0 ^& K% }3 N# O
  548. LDA Text_Data_Addr,Y
    8 v; l1 h0 x( O
  549. STA FC_Data_Port_A_H: N, o6 X1 r* M+ B
  550. DEY# z2 j" p& W' R  J3 s
  551. LDA Text_Data_Addr,Y
    4 ?4 g! A' }( A
  552. STA FC_Data_Port_A_L9 b+ L$ {" C& X$ v' I
  553. RTS4 G3 Y, f: }) K) }' q* c
  554. 7 E# n% R- [* M) D# k
  555. ;==================================================
    / a: Q1 H6 Q' k
  556. ;写入单独一行文本
    - c& w; N- I) U$ }7 T
  557. PPU_Data_Write_Item:
    % i8 e! G/ U1 z$ O
  558. LDA FC_Select_Temp$ V" h* d. E' M' ]: s
  559. CLC
    " ~  N% l; S+ \6 ^! j& L* C% K
  560. ADC FC_Page_Cur) K$ g" B$ {! W7 q) Y# c
  561. CMP #FC_ITEM_SUM" [2 T3 T' u' l+ g1 q' p
  562. BEQ PPU_Data_Write_Item_Set' o1 v- s1 K; I7 r0 M& I8 f, o
  563. BCS PPU_Data_Write_Item_End! s$ M" ~5 `- r4 t8 h
  564. PPU_Data_Write_Item_Set:
    ( k6 o; D* K4 i+ O5 F
  565. LDA #FC_PPU_MODE_CNTL& J; F+ P& K% A& d( N* U
  566. JSR Set_PPU_Mode( Y3 [7 U7 E; Q
  567. JSR Set_Select_Addr: p$ ~2 P2 j8 i$ d
  568. JSR Set_Select_Data2 m# |" h, w) {# f% x5 r. k
  569. JSR PPU_Data_Write_Line
    - m9 K) E% ?* _# }! m
  570. PPU_Data_Write_Item_End:
    & p  b, R; Y& \
  571. RTS! t. i1 w& B2 j+ h. O+ e6 E( _
  572. * f! S3 g6 k- o4 D( k- A% @; {
  573. ;==================================================6 ^  K( L; K  Q. ?0 }
  574. ;清除单独一行文本
    . U, `( ~( l" [8 p& \, [
  575. PPU_Data_Clean_Item:1 s6 G' P$ |' B/ g2 a3 O
  576. LDA FC_Select_Temp
    . B1 i3 R, z+ ?6 o8 g5 s+ W  P
  577. CLC
    2 W( _+ a0 s0 w+ e; P
  578. ADC FC_Page_Old
    : ?# C8 Z9 N: W0 D) F
  579. CMP #FC_ITEM_SUM5 [; n( F8 @% l  S: y& i* X
  580. BEQ PPU_Data_Clean_Item_Set
    & N- P8 a2 g! ?; t3 [
  581. BCS PPU_Data_Clean_Item_End5 w$ R! C1 W) h! H' V1 @2 R8 X, N% i  u$ K
  582. PPU_Data_Clean_Item_Set:7 B. }8 ~. B2 t5 {3 R! Q. o
  583. LDA #FC_PPU_MODE_CNTC
    ( h! ]  d6 P/ r: c
  584. JSR Set_PPU_Mode- u0 a3 f0 B. F% m
  585. JSR Set_Select_Addr, C$ x7 K* G: y
  586. JSR Set_Select_Data_Clean; S5 s8 J- X- p4 Y8 _
  587. JSR PPU_Data_Clean_Line
    9 L2 ~& y3 n. X1 B# o* b
  588. PPU_Data_Clean_Item_End:
    ! @6 W4 r8 [# l% p) m1 o3 B
  589. RTS
    ' @* g6 i+ f. p/ M; F# ~& @! Y
  590. # Y0 x4 }. u$ Z' {) B2 V3 A
  591. ;==================================================1 b5 ~* G  F3 r9 Y: [' B  d
  592. ;页内容写入
    : O% J0 Z$ Q3 k0 t/ Y( A  c
  593. PPU_Data_Page_Show:
    8 P: j9 I/ d0 p7 a
  594. LDA #FC_PAGE_SIZE) q( P- P: Y, ^4 @
  595. STA FC_Page_Item_Count
    7 t& ?3 T# l, e% A8 Q
  596. LDA #$00
    5 C( Y2 C8 A. G# G% J
  597. STA FC_Page_Item_Buffer
    9 ]. b& V3 ~7 d, l" w7 T! u5 ^- X
  598. STA FC_Select_Temp+ F; p' K- c0 w. V1 f' u
  599. PPU_Data_Page_Item_Set:
    & T; x( y, b) K9 |5 B
  600. JSR PPU_Data_Clean_Item
    ) ^, q4 k$ c: k3 v
  601. JSR PPU_Data_Write_Item) s) F" {0 B0 G7 W0 E
  602. JSR Function_Status_Clean
    9 h6 ?' }; l# V6 r5 \. R8 u
  603. JSR Function_Status_Show+ ^: o3 |) S& J3 Q
  604. INC FC_Select_Temp
    * ?5 N9 S7 R0 w( p8 o
  605. INC FC_Page_Item_Buffer" D+ y) T7 a9 L' a+ V
  606. LDA FC_Page_Item_Buffer
    9 Y. A9 w. s0 G
  607. CMP #FC_PAGE_BUF_SIZE4 t2 c* K' U4 y: n/ n
  608. BNE PPU_Data_Page_Item_Set_Check
      U( {7 r% H% _* j
  609. JSR NMI_Delay
    0 V1 ?0 ~8 N0 C( Y8 y% [
  610. LDA #$005 l* f1 f/ y4 P6 p0 |
  611. STA FC_Page_Item_Buffer; G. P. Y: E' `0 `/ T# G; m
  612. PPU_Data_Page_Item_Set_Check:3 l# w% F# E3 s: c: F+ A% p% j
  613. DEC FC_Page_Item_Count
    * k( {" Z: B4 ?9 h6 j& R
  614. BNE PPU_Data_Page_Item_Set# w- g% y* S- y* E. S: H
  615. PPU_Data_Page_Show_End_Check:
    . y" h7 C& j; k4 \! f
  616. LDA FC_Page_Item_Buffer% q/ h# H( P3 Q- c) n* P& Z) K6 z+ y
  617. BEQ PPU_Data_Page_Show_End
    # Q1 j# _2 a) k0 U
  618. JSR NMI_Delay- j/ Y/ y. g! d% ~8 ?2 F6 n1 n
  619. PPU_Data_Page_Show_End:
    0 E. m7 z% t7 t0 `
  620. RTS
    # ^* N( K, M, |7 i

  621. % `8 q# \. H) N# s" a) x6 V& W
  622. ;==================================================
    " S" [) D2 b% s& t$ r+ z% S1 ]9 ~, D
  623. ;PPU单行数据写入接口
    % A2 e" k* c5 e7 W" c
  624. PPU_Data_Write_Line:; R9 f4 L, A; v) n
  625. LDX FC_PPU_Cursor
    / K, ~; Q2 i4 C
  626. LDY #$00" r% R% S* v' X
  627. LDA (FC_Data_Port_A_L),Y
    6 E2 N# w7 B0 @8 \
  628. STA FC_PPU_Buffer,X
    " V: x" ?4 m5 w) d1 l* k
  629. STA FC_PPU_Data_Cnt
    : W/ U9 r  [$ z( l
  630. INX% i1 J6 K/ p1 \' [0 Q/ T
  631. STX FC_PPU_Cursor
    9 }2 f2 j, z, ?' ~2 O9 B# }; N9 [1 F, u
  632. INY
      a( Z7 _  D. t+ W+ L/ Y$ F2 e
  633. PPU_Data_Write_Line_Set:
    - {5 G( q; n: V& C8 ]+ \% X  W& q
  634. LDA (FC_Data_Port_A_L),Y) K, V' K2 H* m# O) h
  635. TAX. |6 |' |$ g) ~
  636. LDA Char_Rom,X 7 Y4 c$ ~3 U5 J% `+ m7 _2 A
  637. LDX FC_PPU_Cursor
    ) u( g8 ?  H- y
  638. STA FC_PPU_Buffer,X/ h+ k$ Q, u2 z% U, k* C7 g
  639. INX. j& b) ~+ s6 X6 S5 p* i9 N
  640. STX FC_PPU_Cursor0 v! Z& j! Y8 k6 r* [- v4 L, D% P$ ^
  641. INY
      \3 m+ Y9 l  j+ g% Q+ x
  642. DEC FC_PPU_Data_Cnt7 D4 J  h& h6 |! U$ N, m
  643. BNE PPU_Data_Write_Line_Set
    * C: G9 Q7 M; y( }% y9 u
  644. STX FC_PPU_Cursor( c9 z  N/ X" h! t
  645. RTS
    $ u: c/ G( n/ h- D, W
  646. # U' z- H2 h! {5 R- F9 f
  647. ;==================================================
    1 |& L2 i& ?/ _( ^9 t7 t, y
  648. ;PPU单行数据清空接口
    " W8 m! j6 `7 M: O: H3 j
  649. PPU_Data_Clean_Line:
    3 _9 v6 n9 u: U* F3 h
  650. LDX FC_PPU_Cursor( S- _) M3 j1 ~, _9 k5 p8 H1 h/ x6 _
  651. LDY #$00
    ' V' W4 R- b1 d9 a
  652. LDA (FC_Data_Port_A_L),Y
      N0 |" N. e7 S; h9 b9 G! A; a
  653. STA FC_PPU_Buffer,X5 |  v* x$ c7 K0 b. s
  654. INX; M  O% r. R& ]
  655. STX FC_PPU_Cursor
    ' Q% N! x0 M- M( ?
  656. RTS
    3 w4 _: [. V( [

  657. 7 P* }! B) a, Z; ?" c9 Q6 ^% D6 S$ X
  658. ;==================================================& t1 T; z0 `5 j$ |; I8 |
  659. ;更改选择项
    : s( x: M+ V2 D% S2 J" u
  660. Change_Select_Item:
    , Z7 }( {8 V5 E$ o0 R( V4 X! k% d
  661. Change_Previous_Page:
    5 y  ?/ k8 E4 I  Z; X
  662. LDA Button_Once
    # n  n  j! w& m5 M5 B1 W
  663. ORA Button_Once + 1+ `' v" j3 T; K# O
  664. AND #$025 k: S6 n& O- P
  665. BEQ Change_Next_Page
    , ]% v7 T$ ^5 q
  666. JSR Change_To_Previous_Page
    - ?8 A" i- C8 O. W1 h9 c
  667. Change_Next_Page:
    , v5 T8 G$ X  w+ P1 X( r* F! p' h
  668. LDA Button_Once
    " I* Y' ?+ k9 g* T; M, f  E* ?* ~$ x
  669. ORA Button_Once + 1
    ; J: P+ P" _1 \7 p- ?7 z
  670. AND #$015 [0 [, ^2 X7 k6 p" `
  671. BEQ Change_Previous_Item
    0 W4 w' L" q( N6 F; u# U
  672. JSR Change_To_Next_Page
    & L, g7 @( k  N3 g) X; [3 X& k0 P
  673. Change_Previous_Item:6 o6 U2 J! K" x. i
  674. LDA Button_Once
    6 R0 u* j* E" c- o
  675. ORA Button_Once + 1
    / A5 b+ _4 s9 F4 f; ~
  676. AND #$08
    * {$ h% U2 J+ j: K' K
  677. BEQ Change_Next_Item* ~& H* I1 u: T
  678. JSR Change_To_Previous_Item% X# @. P+ @6 c$ F, W" L% C0 m
  679. Change_Next_Item:0 b0 o, G( a; C7 ~$ X
  680. LDA Button_Once4 D+ f) x. w8 o
  681. ORA Button_Once + 15 Q& [& Z  I1 Q% p- V( r
  682. .IF FC_IS_DOUBLE_PLAYERS" e8 `  \: D8 K  ^9 J3 T0 a
  683. AND #$04. B2 `( ?* R* o5 B2 r
  684. .ELSE& S; e$ B1 l7 i+ k# Z  V2 ]$ i
  685. AND #$247 [( A% z5 G9 G9 z4 ?: r
  686. .ENDIF; r: _) W# |: ~0 ?! S
  687. BEQ Change_Select_Item_End* x+ b4 }* E/ z) z: O+ N3 @
  688. JSR Change_To_Next_Item
    : R& n; X0 t' r+ X5 l. ~
  689. Change_Select_Item_End:- i. V! e# K! Q/ A
  690. RTS
    / ]3 V$ _: }! g8 a9 v2 a4 I

  691. 3 N! `' {7 H; k7 }" M
  692. ;==================================================
    : G7 }4 U& c* d) Q. M4 r9 Y$ d
  693. ;切换到上一个选项  s" `, v' L2 G4 E
  694. Change_To_Previous_Item:
    " g6 q  j# U% F$ M4 o, D3 ^
  695. LDA FC_Select_Index
    ! w6 {! w" {4 R6 E7 f; G! F  k0 h
  696. BNE Change_To_Previous_Item_Set( F, g" }/ L" V# W
  697. ;----------------------------------------
    ; M) j# m' a6 X! M' |+ `
  698. ;切换到末页最后一项" F# l& n- a- z' j* @- @* O
  699. Change_To_Previous_Item_Set_Last_Page:
    ( O$ c& n1 E1 P4 a
  700. JSR Record_Last_Page_Index
    8 x* m, }7 h9 W' G+ t5 _6 d$ C
  701. LDA #FC_ITEM_SUM
    3 }4 i, V" w" ~
  702. STA FC_Select_Index
    ' g  A3 h8 g8 k9 t% d7 p: I
  703. LDA #FC_PAGE_MAX
    / P/ R) }( N# Y* ?' C8 E- u
  704. STA FC_Page_Cur" y0 ~; D6 l* C. e5 u. T
  705. JSR Update_Page_Content
    3 N& i* g% v4 g. y- S4 s9 F% F
  706. RTS4 q0 m$ o: {2 m$ O1 D
  707. ;----------------------------------------
    ; s% D) e# [6 `) n, K
  708. ;切换到上一个0 A/ u6 a6 R/ k8 ~
  709. Change_To_Previous_Item_Set:* @! E/ B9 V( E6 J
  710. ;检查是否需要换页: Z4 B. }' S/ x8 h: B6 B) t
  711. LDA FC_Select_Index! c$ k, w- G# I+ I* ]6 b4 r
  712. CMP FC_Page_Cur
    3 S. C4 c; o5 _, u0 S
  713. BNE Change_To_Previous_Item_Set_No_Page& y, ?: @. N5 A# Y2 P$ b8 ^1 n
  714. ;----------------------------------------
    " M: F2 z" ^" m* S3 z# S1 b
  715. ;切换到上一个(需换页)
    8 s, ?9 Z/ \2 B7 u( L$ l
  716. Change_To_Previous_Item_Set_Page:# t$ F2 z: l, s  c2 }4 L$ S7 l
  717. JSR Record_Last_Page_Index( A$ r0 D7 J6 r/ g; c2 F
  718. LDA FC_Page_Cur  G/ v0 H9 N- w4 K
  719. SEC
    - u! s5 |/ Z' h& a1 ^
  720. SBC #FC_PAGE_SIZE
    & D: j$ o6 d2 p9 ~5 D
  721. STA FC_Page_Cur1 S! M6 L1 W+ x5 X0 H
  722. DEC FC_Select_Index  Q# g  B" H7 D8 Y
  723. JSR Update_Page_Content
    7 H+ A5 t& G3 _* r0 v9 d
  724. RTS
    1 z% F9 R, T$ K, X0 o! N
  725. ;----------------------------------------
    6 j4 o* M) ?# w) L
  726. ;切换到上一个(无换页)9 y/ [' ~; g! H/ E" G& A% C; B
  727. Change_To_Previous_Item_Set_No_Page:
    + d; j+ z. {  K# d1 Y) W
  728. DEC FC_Select_Index
    $ Z8 m8 t" [6 I& R) X8 E9 b
  729. RTS
    - z5 Y. ]9 S, G  X- i# O! {7 Y

  730. $ j+ s# w2 J( G' U" c" ~
  731. ;==================================================
    * \2 J/ \! x/ w2 c# L" K
  732. ;切换到下一个选项
    : D& d  w5 e( `" ^
  733. Change_To_Next_Item:8 r. c$ i. }' X" ~5 V
  734. LDA FC_Select_Index- h$ h% w% x' q" s" {
  735. CMP #FC_ITEM_SUM- e; I/ F7 Y( U, n/ L1 ?! }" X/ J
  736. BNE Change_To_Next_Item_Set% Z( w, `4 D) p! k8 h* N
  737. ;----------------------------------------
    , y( M4 t4 a2 S* K' @; {
  738. ;切换到起始页第一个: R8 |0 d5 F( F1 S. V. t. `
  739. Change_To_Next_Item_Set_Begin_Page:9 m2 j7 m" a+ U1 y$ D
  740. JSR Record_Last_Page_Index- @  U( e$ a- \  H0 I
  741. LDA #$00" U" W1 w* W9 P6 f8 l1 K& i) o- X' e  p
  742. STA FC_Select_Index3 |: A) I. V  k8 b  j7 d1 r
  743. STA FC_Page_Cur
    . ~" s4 v4 k9 i- W- u, m
  744. JSR Update_Page_Content
    2 h+ z6 @8 }* ?% o, P, t
  745. RTS; z( ?" N2 V  N* x, z/ Y6 o% {" r
  746. ;----------------------------------------+ ]9 X( f  b1 F$ ?+ {4 K# V  c
  747. ;切换到下一个+ d$ X! _- ?. S
  748. Change_To_Next_Item_Set:& f' w% j7 l4 I1 \
  749. INC FC_Select_Index
    ( f4 @2 A& D8 z4 A  f7 W
  750. LDA FC_Page_Cur" C  F/ J) R7 c6 U# v) H# h
  751. CLC
    - p. m1 u, j1 G# t; [
  752. ADC #FC_PAGE_SIZE+ ~( A6 n) n) n! {
  753. CMP FC_Select_Index
    5 o0 p% s- m5 {% H7 D6 O
  754. BNE Change_To_Next_Item_Set_End
    + b+ i- L: u( b8 ~7 _. |8 p
  755. ;----------------------------------------+ t: N- F0 z; J6 F
  756. ;切换到下一个(需换页)5 h; \1 e( W4 ^3 y! e6 k3 U5 R
  757. Change_To_Next_Item_Set_Page  i% U' \- [0 h6 E6 z, }2 P5 S
  758. JSR Record_Last_Page_Index0 `0 J- ^/ M  {
  759. LDA FC_Page_Cur
    ' p* O# [( `2 f: ~2 _0 g
  760. CLC
    6 `% S5 [& e6 [3 x8 d6 q1 N% z! O3 x
  761. ADC #FC_PAGE_SIZE
    3 p; g; Z$ d$ j( M3 \
  762. STA FC_Page_Cur
    ( O2 F# u  Y/ c* E9 m
  763. JSR Update_Page_Content
    + r* h1 z- Y/ [3 c! F* Q* r3 f8 U
  764. Change_To_Next_Item_Set_End:, v- v4 y0 @! ^" z% ~4 m: F' w+ G
  765. RTS
    3 V' n# Q0 n* Z9 C3 l- @* o4 @6 m
  766. 6 j# ^5 Q# J4 }* @9 \9 t0 \7 H5 i
  767. ;==================================================
    1 Q8 i$ i6 r  g2 \& e
  768. ;切换到上一页, S  x4 d; a" a
  769. Change_To_Previous_Page:
    9 }" g% q* _6 p9 _) `  m
  770. LDA FC_Page_Cur1 i3 d# S+ [2 |6 y* z
  771. BEQ Change_To_Previous_Page_Set_Last_Page+ P& i9 b) a9 ^: l+ v
  772. JSR Record_Last_Page_Index/ d- ?+ Q3 a7 w* c
  773. LDA FC_Page_Cur
    : c3 Q) W: R) d. ?; Y; @4 k
  774. SEC
    " C# v# q% @" {! V
  775. SBC #FC_PAGE_SIZE9 s- i! r- v' X- G8 ^- J! G  X
  776. STA FC_Page_Cur, c* c8 `, d* q4 {2 X
  777. LDA FC_Select_Index
    ; D  M# `& R# q2 u6 M  }
  778. SEC2 a" F) P: K  q4 B
  779. SBC #FC_PAGE_SIZE
    " y! N1 g% e/ k2 D7 i; c# I
  780. STA FC_Select_Index
    " U$ n4 M# H6 p  J9 z' E
  781. JSR Update_Page_Content
    # W2 o+ {2 w, u' F" j& {
  782. Change_Select_Last_Page_End:
    - v) X& U# F; ?: m$ L) A% Q
  783. RTS
    - `6 w! P) C1 z/ c9 }0 T: y
  784. ;----------------------------------------0 b9 h" ?7 W) r6 s* f
  785. ;切换到最后一页) }; _1 M1 l4 O" {6 ~
  786. Change_To_Previous_Page_Set_Last_Page:
    " u' T6 }7 E# j* }/ Z
  787. LDA #FC_PAGE_MAX5 x7 o' `6 H8 e4 a+ D0 t
  788. BEQ Change_To_Previous_Page_Set_Begin_Item8 e5 R) W; D! O4 e
  789. JSR Record_Last_Page_Index! M( d2 Z5 D- ~/ d; ?
  790. LDA FC_Select_Index
    ( a9 e9 W# ?2 ~4 G) ?
  791. SEC% |& l* b0 F# a1 G2 `
  792. SBC FC_Page_Cur% |6 [( Y% m& l/ {7 [0 d# p" Q
  793. CLC6 U* [) m* l3 W8 C: |, |  J
  794. ADC #FC_PAGE_MAX* }( _& m, @# r2 e/ w
  795. STA FC_Select_Index
    ( C: g: h8 W. V8 P+ W: c* |
  796. LDA #FC_PAGE_MAX
    1 L8 K7 r8 x) C# m5 J% @) }3 p
  797. STA FC_Page_Cur
    + c" ^' m7 R. s7 b0 b8 [( \" S
  798. LDA FC_Select_Index% {' E4 _- u9 \7 t2 G
  799. CMP #FC_ITEM_SUM
    $ M  F' p! Q4 e- }/ U1 e7 Y: L
  800. BCC Change_To_Previous_Page_Set_Last_Page_End% R* A3 C: F6 h+ |
  801. ;----------------------------------------
    4 ]8 H* k$ S# y7 j$ A
  802. ;切换到最后一项
    ' x2 Y* s3 l! Y6 J  V% W4 J
  803. Change_To_Previous_Page_Set_Last_Item
    , o% X* }! f, b5 U* b. A& x
  804. LDA #FC_ITEM_SUM* f3 [! I( ]; M8 t( z9 P" l
  805. STA FC_Select_Index
    7 Q' ~) A8 N( Z) c
  806. Change_To_Previous_Page_Set_Last_Page_End:# a. ]3 G; ^. C7 k
  807. JSR Update_Page_Content
    + ?* x2 q7 d9 C" o' U% g" d
  808. RTS
    9 k0 H4 M5 R) y  d9 Z3 J3 t
  809. ;----------------------------------------
    ! a4 |- B5 d0 b  @) P5 Q' \
  810. ;切换到起始项(最大页只有一页时)
    3 l2 S1 l3 F  A, Z) ]% {
  811. Change_To_Previous_Page_Set_Begin_Item:9 F( g4 N% {4 Q$ @
  812. LDA #$008 `; ~2 f/ b/ o0 I6 C' v0 _3 J3 I
  813. STA FC_Select_Index
    $ L9 K4 i) ]) J$ E% y- R, _
  814. RTS
    8 J& _5 T+ _- w8 c2 O

  815. 8 i! k% M  J- q( I( o8 U
  816. ;==================================================+ k& S$ D, i& [" S4 o; Y3 L. c
  817. ;切换到下一页
    0 j7 U0 W$ g2 D( ]/ S; R
  818. Change_To_Next_Page:3 L. D/ G; }. W- ~. i
  819. LDA #FC_PAGE_MAX6 |3 i6 k' s0 h9 _( S$ O* A- p% A
  820. BEQ Change_To_Next_Page_Set_Last_Item
    ' f- B. A, n' I
  821. LDA FC_Page_Cur
    ) B' {- E4 G2 o) Q1 e5 i
  822. CMP #FC_PAGE_MAX# C+ u4 X1 p* q
  823. BEQ Change_To_Next_Page_Set_Begin_Page: {9 ?3 L/ ~0 }, j3 @. V: @
  824. ;----------------------------------------/ C3 c# b8 B. ]) C, Q4 c
  825. ;切换到下一页
    ; J8 ~: m7 Q1 S' `
  826. Change_To_Next_Page_Set:
    5 T$ y7 I. u0 j" g* f
  827. JSR Record_Last_Page_Index
    5 c3 X9 [9 R/ d/ j
  828. LDA FC_Page_Cur
    & |- ?" e/ B& f
  829. CLC
    / V: B1 v6 I. a9 W9 }/ a1 j
  830. ADC #FC_PAGE_SIZE
    - ?* S% `( E5 K( e! Q
  831. STA FC_Page_Cur2 @& P2 B- N- q% P, m
  832. LDA FC_Select_Index& t4 e8 c' T5 I5 V# U
  833. CLC
    5 u. L% V' W1 @" {, }$ d2 y0 K
  834. ADC #FC_PAGE_SIZE( j5 g" ]# l3 @* X3 g
  835. STA FC_Select_Index) M4 y* y' K7 v" x) B; k4 Z
  836. LDA FC_Select_Index
    " h/ }* R4 ^$ u8 W, T8 _% r
  837. CMP #FC_ITEM_SUM
    ) W6 l( H0 Y& f6 m' W
  838. BCC Change_To_Next_Page_Set_End
    6 p4 w  w4 \% F2 B, R
  839. ;----------------------------------------/ Z5 f$ e: {; c0 L' W4 {2 S2 h
  840. ;切换到最后一项
    ! b" ~$ z9 X% P
  841. LDA #FC_ITEM_SUM% A7 ^0 O( T8 ]4 w* c  P
  842. STA FC_Select_Index
    6 Q9 c; s) {* ?! T
  843. Change_To_Next_Page_Set_End:
    4 d8 f3 p5 f4 H& m4 X8 l4 h7 g
  844. JSR Update_Page_Content
    1 ^3 ]  a* |' Y+ T* `9 t$ x
  845. RTS
    5 D4 C  a$ B! n0 g0 X
  846. ;----------------------------------------
    " a: [: R0 ~& ^  u3 s5 @
  847. ;切换到起始页
    7 t8 j$ q* f  c1 }
  848. Change_To_Next_Page_Set_Begin_Page:
    / q( U0 F! `! B2 M/ R1 g
  849. JSR Record_Last_Page_Index, b7 q6 y) x* U  b9 \  F
  850. LDA FC_Select_Index! m: G2 \& |1 L
  851. SEC
    + N2 L; ^$ a$ u  b6 m8 s" x) k5 b$ r
  852. SBC FC_Page_Cur
    : W! A4 o* W8 P; ~. V
  853. STA FC_Select_Index
    ' }2 ?& D; a/ z6 I4 c
  854. LDA #$00' m. Z" {: F+ l2 L
  855. STA FC_Page_Cur
    ' s1 v' @( ?/ f. z: b& d% l; h5 L/ g
  856. JSR Update_Page_Content4 S& G* N3 J# S9 _( [1 |
  857. RTS
    ( M2 L% X/ B6 R$ W
  858. ;----------------------------------------7 O3 Z3 m4 ]) _4 ^, d$ l
  859. ;切换到最后一项(最大页只有一页时)
    " |% N# |* g6 \1 P& T& ~$ c! d
  860. Change_To_Next_Page_Set_Last_Item:0 P3 C/ ]% ~' l& J0 n) l; f# D* `
  861. LDA #FC_ITEM_SUM
    - a& E( u6 ?& L1 y( z  y! e& K( I3 @
  862. STA FC_Select_Index# m) ?$ a% R/ c: t5 L! ?/ j+ s; O
  863. JSR Update_Page_Content
    ' Q( b* ?8 |- w; K! ~3 o
  864. RTS* T, O& l! u6 G0 O7 Y
  865. 0 O6 \; f7 b. E: J" U& t
  866. ;==================================================
    ; p9 w2 \" k* X
  867. ;更新页面内容
    , P  B" Y8 _- U
  868. Update_Page_Content:
    * t% x2 N! [! r
  869. LDA FC_Page_Cur( ?. J( m+ [1 y
  870. CMP FC_Page_Old; w+ N  p! |0 F) v. Q( P" t/ L1 M2 W0 k
  871. BEQ Change_Update_Page_End
    ) |  `/ `9 A3 N  Y" T$ v
  872. JSR PPU_Data_Page_Show
    5 z) o' ~  D- [7 l# V; h+ @' q
  873. Change_Update_Page_End:: w+ Z8 s& {3 @) P; N1 c7 V
  874. RTS1 `8 `5 q: `& F( J$ A  C' [; C
  875. " r8 N* C9 x5 ~- `1 T, L  T) B
  876. ;==================================================% S+ m, z3 r) p/ M* p3 w
  877. ;记录上次页索引0 F6 G; W: p8 W7 v' E) B
  878. Record_Last_Page_Index
    1 W  q% U9 X, ]" N1 A  f
  879. LDA FC_Page_Cur5 o3 m. v  e! v( O/ p. h
  880. STA FC_Page_Old) \, y% G% n! C# e- f9 K
  881. RTS
    3 G2 @8 A7 Z$ ?6 B- G

  882. - `( _) q  e2 X4 E5 x- \+ y
  883. ;==================================================  a' S' a) M' N7 y! b: f7 p! H
  884. ;显示当前选择项光标
    , w  l1 e0 t! f+ w$ D. ]
  885. Show_Select_Cursor:. p2 d  d4 N7 _/ N
  886. LDA FC_Select_Index0 T9 S) p! g. L) p/ o' d& o. N( }
  887. SEC* d1 o5 A" u' [& a
  888. SBC FC_Page_Cur
      I; R3 L% r4 M& p4 ]; V; a! z4 r
  889. ASL7 ~, p; g2 J6 d5 c3 k7 T
  890. TAY
    ' w; m2 p* q, E6 s: P; L
  891. INY7 |4 s7 i* a. T+ D8 R
  892. LDA Text_PPU_Addr,Y
    + [) S: Z; N- W  z) X0 Y
  893. AND #$03$ v7 J9 w( U2 j6 K  t2 A+ ?! Z7 F
  894. STA FC_Cursor_Addr_H
    , w, c, m( u, l/ S% d* l. Y
  895. INX
    ! f5 c, u, j# p) Q9 t1 |
  896. DEY/ H. B( X, o, m  v
  897. LDA Text_PPU_Addr,Y# z8 P1 d- x" Z6 F8 ~5 I
  898. STA FC_Cursor_Addr_L
    % e4 N  o) P* V2 j7 s- n2 G
  899. ;----------------------------------------" Q0 ^3 a) O2 C0 e$ ~  w
  900. ;计算光标X坐标
    * G) {8 V8 x3 F4 _% B
  901. Show_Select_Cursor_Set_X:
    * |0 o; w) c: Z1 M3 R
  902. LDA FC_Cursor_Addr_L
    % \1 x& B4 S' o( |- S( ~. F5 [1 d
  903. AND #$1F
    / z. F- u+ j+ n# `+ D
  904. ASL
    8 r2 p2 b& T- G9 x) `2 ~
  905. ASL/ b; M( C) m% B. z
  906. ASL  M2 T5 \( V% \3 N3 `# W- y; O
  907. STA FC_Cursor_X3 C$ ]$ U0 y+ a% \6 g4 M& f
  908. LDA FC_Cursor_Addr_L
    $ s8 y  X& R3 p, z1 \% `
  909. AND #$E0
    ; u" A( ?" m0 U0 a
  910. STA FC_Cursor_Addr_L
    - v3 R- f5 t2 w9 \# Y; i( f' K
  911. ;----------------------------------------
    2 y  L) q5 l! L4 _
  912. ;计算光标Y坐标
    $ Q2 G- t9 {; m$ z
  913. Show_Select_Cursor_Set_Y:
    2 F: K3 l+ L5 v. u$ B( T
  914. LDX #$05
    ' {. P7 N  J# `  a
  915. ROR FC_Cursor_Addr_H  |$ k$ s4 f6 J! s/ l8 x
  916. ROR FC_Cursor_Addr_L
    * D  V; ]3 s# P2 s
  917. ROR FC_Cursor_Addr_H
    ! D2 P: f! r4 f/ a) O3 G3 `5 X
  918. ROR FC_Cursor_Addr_L) J% j+ n5 x& Y/ y
  919. LDA FC_Cursor_Addr_L! Z$ l" s7 q5 h( ]0 r% P
  920. STA FC_Cursor_Y' W* l5 J! O& _$ t5 g' F
  921. ;----------------------------------------
    ) t# J* m0 @/ C, z4 P; G
  922. ;写入光标5 G7 s+ }) n# V$ F9 h4 z
  923. Show_Select_Cursor_Set:3 M& P& Z7 M! l, T% j3 {/ k
  924. LDA #$005 h/ k+ [1 J' I6 d
  925. STA $2003
    & Q- J; i& j' G# L2 m2 P+ S
  926. LDA FC_Cursor_Y
    - H( y' P$ V! U/ Q
  927. SEC
      O4 V% {* H! M& n4 u1 H: L
  928. SBC #FC_CURSOR_OFFSET_Y) S7 v6 c" h* O% e" s0 @
  929. STA $2004+ R/ t, x7 B- v; }
  930. LDA #FC_CURSOR_TILE
    : b2 q6 x6 N' X8 l) Q$ {5 y
  931. STA $2004& n) r% E" L+ U2 Y
  932. LDA #$00% R  N8 C4 u; X6 Z; P  B1 i1 P( ~
  933. STA $2004
    + H; E, @1 W6 Y1 A: n2 h# J, X
  934. LDA FC_Cursor_X
    ! y' X6 i2 t5 C3 d/ q! L
  935. SEC
    0 p, x( F$ P! H; q, D( ^
  936. SBC #FC_CURSOR_OFFSET_X
    $ b/ J7 Y' n3 {4 m7 C+ a
  937. STA $2004: R( g6 `, G' \* U3 E
  938. RTS1 c9 x5 ?) p- T! t, ^4 H1 n  [) X

  939. : F* b* H& k0 p( z+ w4 o# G
  940. ;==================================================
    " b% U: b* I2 G8 k7 E7 s( q
  941. ;切换功能! k+ v# \/ |. C
  942. Change_Function:+ P* L# |- L- g! N) B- Z" q
  943. ;----------------------------------------
    ; Z5 j( W# Q/ U2 v5 e* i& I+ p! O4 o& y
  944. ;开启功能A
    : I4 F" E# s2 A! {0 B$ ~! d
  945. Change_Function_On_A:
    $ F5 {! o  t5 `4 F- ^- o, j2 D
  946. LDA Button_Once
    , ~" a  B. N! Q: ^% A
  947. CMP #$40! B+ Z* p+ W6 P6 B
  948. BNE Change_Function_On_B7 ~3 Z# ?2 J/ \2 n
  949. JSR Change_Function_To_On_A
    , p* ?4 e; L4 `- q; \1 M) ]" A- Q
  950. JSR Function_Status_Update4 r) O# C  s; O4 H; T
  951. ;----------------------------------------9 z: M) [" a: d/ E* j8 z
  952. ;关闭功能B
    9 K& w5 E$ F9 @9 n
  953. Change_Function_On_B:$ y/ s0 Z5 |! R8 Y" ?
  954. .IF FC_IS_DOUBLE_PLAYERS
    2 v$ t( W4 C; |$ ~4 w) D3 Z
  955. LDA Button_Once + 1& m7 ]1 O4 J/ O* v7 M
  956. CMP #$40: p. J$ M) \8 v# k9 x1 M& [
  957. BNE Change_Function_Off_A+ }5 a6 K8 d$ c( b+ e: T
  958. JSR Change_Function_To_On_B
    ) a9 G4 k" e' B8 [  _
  959. JSR Function_Status_Update2 H  r- f: Z1 [" y8 V! j3 j8 }5 |
  960. .ENDIF( p; v1 U$ Y/ {' d' Z) {
  961. ;----------------------------------------
    $ t: w3 I: Q/ C
  962. ;关闭功能A9 Y" @: {' n* ?; I' r; u8 C6 D
  963. Change_Function_Off_A:
    2 P& P( y; g5 m
  964. LDA Button_Once
    & A# f+ f6 o$ `4 P
  965. CMP #$80
    $ F# D' m: R& u/ u
  966. BNE Change_Function_Off_B
    * y# Z+ B8 S  d! Z) i, Q  ^' B
  967. JSR Change_Function_To_Off_A4 U1 q& l& o% Z; b) @
  968. JSR Function_Status_Update
    5 `* m6 ?3 B: |, y
  969. ;----------------------------------------
    , G# W% m, G6 m
  970. ;关闭功能B% c+ r0 Y9 r& K$ ?2 X, G4 I
  971. Change_Function_Off_B:
    5 I8 X4 O% T  ]7 n$ i
  972. .IF FC_IS_DOUBLE_PLAYERS$ d+ k$ c* B% W& u
  973. LDA Button_Once + 1
    / n) v) z; Y( B& p  |" ]
  974. CMP #$80
    / Z4 n8 D& H, y; k' a
  975. BNE Change_Function_Swap( v$ j  D' X! c( k4 Y5 l
  976. JSR Change_Function_To_Off_B* o4 b# b8 ^4 d) p
  977. JSR Function_Status_Update
    9 v+ f4 ]" I) r- N2 v3 D* t) w9 e: ]
  978. .ENDIF
    4 y, k. o0 \, a) o; P$ m5 K, g
  979. ;==================================================
    & Z- `) P& a8 T; p! y
  980. ;交换开关
    ) M- y0 C0 p: P, Q& R
  981. Change_Function_Swap:
    & y3 {) f- p% A# ^
  982. .IF FC_IS_DOUBLE_PLAYERS
    . v& P1 j3 R/ e6 @
  983. LDA Button_Once5 A8 j# X  h# k( c( r! s; k9 |/ H
  984. ORA Button_Once + 12 ~' Q0 H% Z  p, ?
  985. CMP #$20
    3 ]+ i! t# o6 }# ^9 C7 [
  986. BNE Change_Function_End( }2 \8 }! V! X) I+ _* Y$ O; }
  987. JSR Change_Function_To_Swap
    ' D; B, s) z" e; R
  988. JSR Function_Status_Update
    ( h4 O5 o; u/ P
  989. .ENDIF
      w' [. i5 K4 ]7 J5 F
  990. Change_Function_End:1 p( Q- D/ I' `8 @1 d7 ^
  991. RTS. Z7 k% M% s8 Z: {$ Z, ?: }, _+ k8 @4 g
  992. ) w. B$ V) w. W6 O: G' t
  993. ;==================================================( h# r0 N3 m+ r$ Q( a$ ~
  994. ;交换开关状态
    4 O  s! h9 O" }- `3 m' |
  995. Change_Function_To_Swap:
    6 o+ p+ I9 q  D1 z' g5 y* {5 d
  996. .IF FC_IS_DOUBLE_PLAYERS
    9 x! k( W9 p6 w  u+ k* k
  997. LDA FC_Select_Index
    ) y) P  N; p. m$ C4 S5 ~
  998. SEC
    0 k$ j# f7 ?# I" h3 n1 t2 ]! Y3 D
  999. SBC FC_Page_Cur$ n  e6 A, z2 K" C  u5 D
  1000. STA FC_Select_Temp0 y% q0 K0 @0 ?) Q
  1001. JSR Set_Function_Port- t% c6 \; u5 r! R, M" d+ w
  1002. LDY #$00
    2 s; X0 S& k  O# ]& d0 m2 m+ N
  1003. LDX FC_Select_Index3 b5 Y8 G# C4 j% L4 E' }
  1004. LDA (FC_Data_Port_A_L),Y
    . @$ O1 T0 e/ r# W, [
  1005. EOR (FC_Data_Port_B_L),Y* I' H4 _$ d/ G
  1006. AND Function_Check,X" v+ O' W; Z/ Z& X1 V0 u4 p: G
  1007. BEQ Change_Function_To_Swap_End
    & K  g! E" g1 Y
  1008. LDA (FC_Data_Port_A_L),Y6 F6 ?5 Y/ I1 `# {
  1009. EOR Function_Check,X3 s/ N1 U0 w0 t+ K
  1010. STA (FC_Data_Port_A_L),Y* G4 h; t6 ^* c8 ~9 g! Z1 h  B' T7 [: c
  1011. LDA (FC_Data_Port_B_L),Y7 x- [+ p- [/ w6 k
  1012. EOR Function_Check,X
    " U! G/ F$ O$ g0 @2 z0 y5 c
  1013. STA (FC_Data_Port_B_L),Y
      X* e) `0 z% t: g. o
  1014. Change_Function_To_Swap_End:' j) u( @" A: {% {% q! |
  1015. RTS8 K/ f! h; K% I2 T$ {0 A  B
  1016. .ENDIF3 t5 [  I9 }5 y

  1017. # Y% g3 |8 P, A) G- Q

  1018. 0 S* i) G- g" y1 B
  1019. ;==================================================
    8 L$ C: |6 h" b+ i0 G$ j3 E
  1020. ;更新功能状态
    ) u# Y* ^+ e% T) |1 `; P6 j! m/ Z; d
  1021. Function_Status_Update:2 f1 ?2 o, A+ T6 w5 o( p
  1022. LDA FC_Select_Index4 R6 U" \7 p+ }$ B+ E9 O1 i. u1 q
  1023. SEC7 g# Y# }+ F% \) e
  1024. SBC FC_Page_Cur; D% R/ j4 A! L: N" P
  1025. STA FC_Select_Temp
    . X. S7 L& Z' J$ U9 Z
  1026. JSR Function_Status_Show: ?1 b1 Q) V1 k6 j$ O
  1027. RTS
    1 U* C8 S$ l5 t) S+ X# D

  1028. : Y# i% M' M% K" V
  1029. ;==================================================# U- |+ z% j/ o7 i1 a/ n8 f+ q
  1030. ;设置功能地址端口! A+ P1 N9 y) q7 ?' _: e" H2 f! ~
  1031. Set_Function_Port:( Y2 q) E8 s* l/ v+ o: |9 `
  1032. LDA FC_Select_Temp+ E' o1 B$ S, _: g2 {
  1033. CLC
    - n; A4 s/ y' o& `
  1034. ADC FC_Page_Cur
    ( H+ p' X" T% [' d
  1035. ASL" @$ D! E- K1 N
  1036. TAY# G! z5 V, b" B) K5 n) X0 V
  1037. INY
    ( K  N: r( x  e+ V: I! Z2 g
  1038. LDA Function_Addr_A,Y
    : ]- ?' q+ m8 O9 h
  1039. STA FC_Data_Port_A_H0 @6 ]3 V8 b/ L6 r; U
  1040. .IF FC_IS_DOUBLE_PLAYERS
    # n8 J) ~" `- M- m! p( t0 j
  1041. LDA Function_Addr_B,Y" k: G. D1 o; |8 u% f
  1042. STA FC_Data_Port_B_H# Y: f5 b& g0 ^- l& Y3 t
  1043. .ENDIF- l3 m3 }- ?/ S' H0 h
  1044. DEY& k( l; x* y+ @- X6 z
  1045. LDA Function_Addr_A,Y0 ~# @, q3 y! k. z) w
  1046. STA FC_Data_Port_A_L
    5 L* K( _% _2 t8 P+ }9 o
  1047. .IF FC_IS_DOUBLE_PLAYERS9 y4 I: ~9 ~1 {& {  h9 p
  1048. LDA Function_Addr_B,Y1 b3 }% A) Q- D8 e  q1 _
  1049. STA FC_Data_Port_B_L
    ( o5 e: D/ `1 k' G7 X
  1050. .ENDIF
    & a3 V3 }$ K6 C) u
  1051. RTS
    9 o2 G  `1 C5 y5 W. Q4 H/ g5 R+ I
  1052. , h% S: j( y' r7 p
  1053. ;==================================================
    : A1 t1 Y/ _4 R: ]; u+ g6 q
  1054. ;设置功能临时索引
      I% I& ~7 \4 v2 Q) N; F9 y
  1055. Set_Function_Temp_Index:
    , G. c" v  z3 J8 i
  1056. LDA FC_Select_Index
      F4 Z9 w, I1 X$ E4 W9 I7 D8 x
  1057. SEC2 n5 ^3 k, W3 c% f, w, o
  1058. SBC FC_Page_Cur
    : A9 N7 `! U+ P
  1059. STA FC_Select_Temp% ?( p) y7 B4 u
  1060. RTS
    . I7 G( @: e  {- t
  1061. % M; c: d- Y1 J5 K/ R' J- A
  1062. ;==================================================
    4 f' [0 `' V0 j5 I; M' s, i% E$ Q+ d
  1063. ;开启功能A; [, B4 A, m: g: |5 [
  1064. Change_Function_To_On_A:
    * O- E- {" S$ K. C. d0 X5 p4 U( p
  1065. JSR Set_Function_Temp_Index
    . D: p, N" a0 u$ }# M
  1066. JSR Set_Function_Port
    # G- B7 ?( D! Q. s' p
  1067. LDX FC_Select_Index
    5 m% @, R7 v# I! {" ~+ s: F/ L
  1068. LDY #$00
    1 k9 Q( a( q" F, q
  1069. LDA (FC_Data_Port_A_L),Y
    $ X6 k5 z% _) w
  1070. ORA Function_Check,X
    3 r( N& ~$ }8 n% l+ z
  1071. STA (FC_Data_Port_A_L),Y
    1 W( }8 j9 _4 y& ~( T
  1072. RTS9 G1 e9 Q: m0 d8 o. ^
  1073. ;----------------------------------------
    $ O/ g9 o6 t6 J
  1074. ;开启功能B
    ; Y2 V  f9 |; {' }( f0 Q# j
  1075. .IF FC_IS_DOUBLE_PLAYERS
    $ E# s1 L) {+ F$ Y
  1076. Change_Function_To_On_B:: w+ [' ~% {9 Q
  1077. JSR Set_Function_Temp_Index! K: ~8 d* L+ {5 V- \
  1078. JSR Set_Function_Port
      n+ `6 \2 B! Z, g
  1079. LDX FC_Select_Index
    : F/ O; M: E! z1 c
  1080. LDY #$007 e! F, e+ d8 Z9 R$ [( `( H6 Y
  1081. LDA (FC_Data_Port_B_L),Y
    2 t4 ~* P$ c* Y0 s& u9 d8 A
  1082. ORA Function_Check,X/ ~  j6 S. \3 i: }  A
  1083. STA (FC_Data_Port_B_L),Y
    & Q: q: B! ^* C% {0 D
  1084. RTS! E0 t+ i0 l' Y  X" @$ m; {" p+ J( A( Y
  1085. .ENDIF" b( t: f: O- `# w7 N
  1086. ;----------------------------------------: f" k) l: b) X
  1087. ;关闭功能A
    0 j5 B" c2 |- r" Z2 e9 N
  1088. Change_Function_To_Off_A:
    0 i# p, ?+ X  U$ n4 d, O9 q
  1089. JSR Set_Function_Temp_Index7 o5 T# |) G2 B; E+ y
  1090. JSR Set_Function_Port2 g+ r7 T2 h  V1 T) M' j: j* l3 S
  1091. LDX FC_Select_Index
    " S  j$ J3 N* }: Q0 z( m3 N
  1092. LDY #$00
    0 x, t  ]) ?+ o% X. A+ ]% v
  1093. LDA Function_Check,X8 W+ n6 Y4 }; p2 c9 Q; g5 f( c
  1094. EOR #$FF
    8 U/ D( L  M- J& n7 i- }7 Y
  1095. AND (FC_Data_Port_A_L),Y
    * A. @+ l2 t' l8 v
  1096. STA (FC_Data_Port_A_L),Y
    5 b" B0 R5 D( s+ W' F. ?7 p: H  {1 @
  1097. RTS
    ) U8 N- `# g7 K- {
  1098. ;----------------------------------------" G& j! x! |4 v+ `2 [8 w* P6 t" f
  1099. ;关闭功能B' j# U0 k  f0 A' G# U6 x0 W
  1100. .IF FC_IS_DOUBLE_PLAYERS) d8 W3 Z9 F2 t8 t' I
  1101. Change_Function_To_Off_B:
    ) _/ ^/ T2 P( P
  1102. JSR Set_Function_Temp_Index( k# M1 C2 T& t2 C( C: W
  1103. JSR Set_Function_Port1 U+ X% G$ p8 B6 C- y
  1104. LDX FC_Select_Index, I7 [+ K( n8 ]2 R+ _4 R& g
  1105. LDY #$00! h/ d6 W$ {; I
  1106. LDA Function_Check,X0 w. _9 Y1 v/ q. w. S+ S
  1107. EOR #$FF
    , S2 e% J) d- Z. h/ Z8 Q
  1108. AND (FC_Data_Port_B_L),Y
    7 u& {% X& S2 U! I9 K' a$ V- y4 K
  1109. STA (FC_Data_Port_B_L),Y6 d0 Z) w. `/ f9 p- W
  1110. RTS1 Z! @) c+ v1 S
  1111. .ENDIF
      f; v. t4 o6 w' C2 e6 G* E( R, h

  1112. ; S. i* o: x& s/ k% W
  1113. ;==================================================! i8 r1 y1 B& g5 r- V3 ^1 X
  1114. ;设置功能状态PPU地址! ]$ O2 J) c7 b* J7 U$ i) ~
  1115. Set_Function_Status_Addr:
    + Q& ^. Z# l% ~" B1 l
  1116. LDX FC_PPU_Cursor
    7 I( E7 }2 x; S
  1117. LDA FC_Select_Temp
    ; f. w$ K- w' x6 g: Y
  1118. ASL
    6 S5 g9 f+ T( z/ N- C- ?
  1119. TAY- D# g# U- u7 Y4 m6 o6 _0 y, k
  1120. INY
    7 G! M0 c( g! Q) U: ?
  1121. LDA Text_PPU_Addr,Y
    & B, {; p& t; w* p* ?0 M
  1122. STA FC_PPU_Buffer,X7 d9 m" w! j! V" I$ h
  1123. INX
    0 O3 o2 q7 K7 v( R* }! |' V+ k% D
  1124. DEY
    ( V. Z  Z- c6 A% e
  1125. LDA Text_PPU_Addr,Y# j: B: t( ?. ]- ?* Q( s& F9 C
  1126. CLC8 J! C- Z6 C" Q! D9 `- e  |
  1127. ADC #FC_FUNCTION_OFFSET; N( `' y: S) r7 G% l3 V8 Z. A
  1128. STA FC_PPU_Buffer,X: J, Q1 f- Y6 g- Q6 U$ k4 B
  1129. INX
    ( E: m# f# k5 L/ Y
  1130. .IF FC_IS_DOUBLE_PLAYERS
    ! j6 }; X1 b* H& P
  1131. LDA #$02# U# V' P( o. R1 M: @0 k- N
  1132. .ELSE
    1 b: U4 |! N+ f. }9 o7 g8 S+ q
  1133. LDA #$011 n4 h/ Y2 y7 H/ N0 m
  1134. .ENDIF+ C5 Q& I- s. t0 H' q/ B$ ^
  1135. STA FC_PPU_Buffer,X
    6 z$ [# M% p6 V* J+ E
  1136. INX
    % @, w  z+ d! ?0 M
  1137. STX FC_PPU_Cursor9 R& k4 U6 k; R9 v4 x
  1138. RTS8 _8 @0 b3 V5 n/ U  \5 v5 i

  1139. " p5 M! @8 {3 ^0 {, o" s" B
  1140. ;==================================================
    7 a2 @& @: U. Q7 I. ?: g- S/ \* t3 D
  1141. ;获取当前选择索引
    ! e- C# ^9 J) o# W  ?2 p
  1142. Get_Select_Index:( M: Y5 ~5 z) R4 w
  1143. LDA FC_Select_Temp4 M+ q2 R, b: [. H+ ^
  1144. CLC
    - P6 k4 b& G4 F) n* s
  1145. ADC FC_Page_Cur$ y- b7 m# K4 ?. @1 A; I
  1146. TAX+ Y: c) f* i. Z% ~
  1147. RTS9 s2 D) c' [+ _) o" M* N

  1148. 5 l# j; D* w5 }$ p: Z
  1149. ;==================================================6 T* F% w1 F9 H% ^
  1150. ;清除状态文本# d2 X4 J; x& A
  1151. Function_Status_Clean:5 n+ s3 _' Z7 E7 X! Q
  1152. LDA #FC_PPU_MODE_CNTC9 V% y4 s' T3 I9 @  G6 C
  1153. JSR Set_PPU_Mode
    : X- s5 [. e, f$ _% i% k0 n6 s
  1154. JSR Set_Function_Status_Addr! i4 Y: ?# n* _1 H4 W. m8 s$ L/ m
  1155. RTS
    * k  Q  K% W" V

  1156. % x) H/ I4 y( N1 J( L. {6 v$ ]5 ^
  1157. ;==================================================
    ! D' z  {7 ^, [; P! |
  1158. ;显示开关状态
    7 X* ?, K$ {' h
  1159. Function_Status_Show:- H. R( n' ~: l$ v
  1160. JSR Get_Select_Index
    & D& _1 j( d: q
  1161. CPX #FC_ITEM_SUM3 q8 f9 c% o- r3 S" ~% `. ]: d' g
  1162. BEQ Function_Status_Show_Set8 }$ L: }' x1 B
  1163. BCS Function_Status_Show_End& @9 {% U  h' u  B6 y- l3 A
  1164. Function_Status_Show_Set:, R: s2 W+ ?9 W' X# q' l, K- ~: _
  1165. LDA #FC_PPU_MODE_CNTL% ^! W* X7 [0 {' t
  1166. JSR Set_PPU_Mode; Z# L1 k, ]' a6 S' r  f! |
  1167. JSR Get_Select_Index" {. o& I3 ?+ Z! e) P& b( v4 |
  1168. JSR Set_Function_Status_Addr( J) Y6 n4 G$ B, D% f. ^# u
  1169. JSR Set_Function_Port0 x4 j/ K! E5 Q8 z8 z6 l
  1170. JSR Function_Status_Show_Check_A( e+ W0 M2 |0 Y+ {) e% ?, X
  1171. .IF FC_IS_DOUBLE_PLAYERS
    ! _& E6 v' k; d/ B
  1172. JSR Function_Status_Show_Check_B
    6 T- P5 d5 A5 @# Q: P5 @0 Y
  1173. .ENDIF
    ( f2 X& m8 W* R( }( U! }# p, M
  1174. Function_Status_Show_End:
    + H# ]( \7 G, M( i5 \
  1175. RTS1 h" l5 n: O6 g5 M8 i% Z4 M/ h6 H
  1176. ;----------------------------------------
    3 d3 v3 C' _& b/ l" y
  1177. ;检查功能A状态
    ) h7 u0 a2 {4 y2 N
  1178. Function_Status_Show_Check_A:. D- Y! x+ {6 a( \/ l/ ]
  1179. JSR Get_Select_Index& [3 b; U2 G$ R# i" A4 i, j+ J
  1180. LDY #$00# O8 H% K4 v. \$ _* ?
  1181. LDA (FC_Data_Port_A_L),Y3 w- A+ V) o) @) x1 H* U
  1182. AND Function_Check,X0 {* C1 N9 o6 d* D4 L; Y! K
  1183. BEQ Show_Function_Status_Off4 m- [+ _3 q4 S6 M
  1184. JSR Show_Function_Status_On  Z9 Q+ a/ H; H2 [! K. [' }0 r( [) b
  1185. RTS
    - T% s. O) v* I* u, P
  1186. ;----------------------------------------
    - O3 o. R0 r0 [
  1187. ;检查功能B状态' D7 q' O  T: g
  1188. .IF FC_IS_DOUBLE_PLAYERS( Y. e! f' L2 d0 ^
  1189. Function_Status_Show_Check_B:! ]/ m" U9 ^: R6 L
  1190. JSR Get_Select_Index
    * y. i* G# N1 p
  1191. LDY #$00
    1 D6 z: ^0 U! Z" `; P9 W4 |
  1192. LDA (FC_Data_Port_B_L),Y# I) {! ?/ B" J1 Z5 B, l( N
  1193. AND Function_Check,X
    2 i" P9 X# K! @
  1194. BEQ Show_Function_Status_Off
    * r; Q% ?- Z4 ]  e1 Z3 T
  1195. JSR Show_Function_Status_On" E: k+ E) k0 [1 E$ d
  1196. RTS7 o& a. k/ y) ~* N& w3 \
  1197. .ENDIF0 {7 n- x9 \8 t1 ~
  1198. 3 w7 }" H' K! i
  1199. ;----------------------------------------
    + x' Q2 H5 _* a1 M
  1200. ;显示功能开启状态
    ' O3 Q2 p- N- {- W' C% Q9 K
  1201. Show_Function_Status_On:
    ' y, [+ t" _0 v0 c
  1202. LDX FC_PPU_Cursor
    * ?2 D' p3 C5 o3 \) e; b+ W
  1203. LDA #FC_ON_TILE
    $ k1 B) {( u. l# k  O
  1204. STA FC_PPU_Buffer,X
    ! U: H! b& |! ]5 }
  1205. INX$ ?5 R9 p9 I4 d4 O7 |! X
  1206. STX FC_PPU_Cursor$ j% r3 u1 o  W
  1207. RTS
    2 C) j  f  A) X# U& C
  1208. ;----------------------------------------
    ; A! ~7 G7 g4 l3 V. \
  1209. ;显示功能关闭状态3 i, t5 ^9 H0 W3 `
  1210. Show_Function_Status_Off:/ z/ a( ^" V: Z& B; p% X: |
  1211. LDX FC_PPU_Cursor0 x' R$ O- I  s. |, u  L5 A
  1212. LDA #FC_OFF_TILE
    : {( U& w8 S2 z& F% e
  1213. STA FC_PPU_Buffer,X- ?; \! w% N# c
  1214. INX
    - H/ P1 v2 {. O* i1 a! q) M. m4 G
  1215. STX FC_PPU_Cursor, ~9 Y4 Q/ a/ f$ M8 \, e
  1216. RTS
    & V+ l8 ~. g5 G5 @1 t3 q

  1217. 5 [- N6 p* N" p: B: N  k

  1218. 7 a' [  A' R* |4 g4 B
  1219. ;-------------------------------------------------------------
    3 Z8 D% V7 ?! T
  1220. FC_Data_Copy:    ;数据拷贝参数设置: I8 D- w" C. d( K  f
  1221. STX FC_Cpy_Port_L
    & M% P5 d* P. A3 S! V, z7 V
  1222. STY FC_Cpy_Port_H
    . S* I5 Y  c: J( k; F/ M( [% l  U0 r
  1223. LDY #$00! v* ^0 h: ~  M  {3 N) f- c
  1224. LDX #$06
    % y2 p( S* V! G0 q1 M
  1225. FC_Data_Copy_Addr_Set:    ;从指定地址读入参数
    ( z: ~  k' O+ z0 v* O0 Z' w
  1226. LDA (FC_Cpy_Port_L),Y
    6 ?1 k' Z6 Q5 P2 ^
  1227. STA FC_Cpy_From_L,Y
    ' v% V" V6 o6 [, k% R4 q% M
  1228. INY+ ]; t7 `* w  B: C1 \4 h9 i
  1229. DEX
    : f% v: K2 h  \1 T2 q' F
  1230. BNE FC_Data_Copy_Addr_Set9 h. n7 h' J" b1 M5 W
  1231. LDA (FC_Cpy_Port_L),Y
    * U; C: n# [; y2 f8 l. h# T
  1232. CLV
    ) I5 s) o- s+ P3 Q8 {0 W
  1233. LDY #$000 x, A$ i  Q" C( V
  1234. ;----------------------------------9 k. [/ A$ |+ Q# U  F' N2 `3 d
  1235. FC_Data_Copy_Mode:   ;复制模式校验
    5 ~; ?/ Z; k: G% W" D
  1236. CMP #FC_MODE_RAM_TO_RAM: h5 u" x# t" Q$ E1 P
  1237. BEQ FC_Ram_To_Ram_Mode; O# G7 q- D& N- c2 B6 `: Q) N% T
  1238. CMP #FC_MODE_RAM_TO_PPU3 L+ {& {. e% O/ c- Y% v
  1239. BEQ FC_Ram_To_Ppu_Mode& V. ~: N% w5 F
  1240. CMP #FC_MODE_PPU_TO_RAM
    0 U" \2 E6 N3 f9 C) Q; J  P
  1241. BEQ FC_Ppu_To_Ram_Mode
    ; G+ g5 {3 G* g) N) s6 d; j
  1242. CMP #FC_MODE_PPU_CLEAR
    4 A/ v; V) l' l) w; t
  1243. BEQ FC_Ppu_Clear_Mode5 x) }$ r8 @* T, m% o
  1244. RTS$ J0 E5 z7 M6 v/ ~& q
  1245. ;----------------------------------------( J  R6 Y0 v  ]) Q
  1246. FC_Ram_To_Ram_Mode:   ;复制RAM到RAM模式
    1 v% s0 t4 ?& X/ Y" q, L
  1247. LDX FC_Cpy_Count_L
    - \: q; D) i, M* a- c7 Z
  1248. INX
    2 e- Y$ {- q- M+ S7 e* t
  1249. FC_Ram_To_Ram_Count:   ;剩余计数检查
    # m8 x- W1 L- G; ]; W, S$ V, m
  1250. DEX
    - [* T9 {6 Q) [0 ^/ `6 _
  1251. BNE FC_Ram_To_Ram_Copy
    . ?0 y* |( H/ T+ w# Z
  1252. DEC FC_Cpy_Count_H) G7 l6 O, b3 S, O/ Z
  1253. BMI FC_Ram_To_Ram_Over
    ) R6 U) X! i' }& T5 t
  1254. FC_Ram_To_Ram_Copy:   ;开始复制数据
    7 d# X: Q8 z' i
  1255. LDA (FC_Cpy_From_L),Y
    9 c0 N" ?2 h* h' c. Q
  1256. STA (FC_Cpy_To_L),Y- T& E0 @; r- Q  n0 @- n0 G
  1257. FC_Ram_To_Ram_From_Set:    ;源地址递增7 f5 q0 n) ~0 z6 B5 m4 ^
  1258. INY
    / G' Y9 U8 p0 o
  1259. BNE FC_Ram_To_Ram_Count
      W* K. L2 _) o- ~2 H6 P* h: {
  1260. INC FC_Cpy_To_H
    / A' m2 m' ^) ^, H; u' |  z! Q
  1261. INC FC_Cpy_From_H
    # g, V& F. T" K0 w6 k1 e
  1262. BVC FC_Ram_To_Ram_Count
    1 ~2 M# ~, n9 c. h' c9 T! ^
  1263. FC_Ram_To_Ram_Over:    ;结束数据复制( L8 x5 i. Z3 ?2 G) H) ~
  1264. RTS/ ^- K; f! J# b; c8 {% t% z/ F

  1265. , M. S% d! E8 }$ E6 U' H4 ~
  1266. ;----------------------------------------, q$ L6 s' W$ b, O; N
  1267. FC_Ram_To_Ppu_Mode:   ;复制RAM到PPU模式6 {6 f) A: B8 y9 V
  1268. LDA FC_Cpy_To_H
    ' O4 q: l3 o  l9 D
  1269. STA $2006, v1 S2 |4 m! @+ _5 [! x% Q
  1270. LDA FC_Cpy_To_L: `+ k- x- N& C/ V
  1271. STA $2006
    6 C! }* }: W. {! p! i
  1272. LDX FC_Cpy_Count_L% `% ~5 h8 X# G/ j; ?9 z/ }
  1273. INX
    - s; `6 b$ W  R5 ]) d
  1274. FC_Ram_To_Ppu_Count:   ;剩余计数检查
    7 b& Z$ i, @, I: [( a* ?
  1275. DEX
    6 L2 r0 I* z9 e( V( ~1 }% i
  1276. BNE FC_Ram_To_Ppu_Copy
    7 z) T/ W3 ^$ A9 A+ L0 |' Y
  1277. DEC FC_Cpy_Count_H
    8 z8 ]0 B( W6 O3 ]& x
  1278. BMI FC_Ram_To_Ppu_Over
    4 \' `) t0 H" q
  1279. FC_Ram_To_Ppu_Copy:   ;开始复制数据* o' C- t( f4 ?) J
  1280. LDA (FC_Cpy_From_L),Y& C0 y7 [" y, O
  1281. STA $2007
    , R$ t% b1 M/ J5 i2 }
  1282. FC_Ram_To_Ppu_From_Set:    ;源地址递增# \7 L( k  v& E0 ^) E" i
  1283. INY* K/ H, i; R+ m; u# o0 C  J
  1284. BNE FC_Ram_To_Ppu_Count
    3 `' t9 i" R1 N
  1285. INC FC_Cpy_From_H1 L" h; @$ i8 G
  1286. BVC FC_Ram_To_Ppu_Count
    " b" y1 x3 k; p3 H: \7 P. x& {. n
  1287. FC_Ram_To_Ppu_Over:    ;结束数据复制
    ! O$ u9 O  u  g7 P; ~+ f6 b3 U
  1288. RTS
    ! W; M# F$ O1 g: B+ k/ n* a8 n
  1289. " L4 Z& \% |: J1 C4 P8 k
  1290. ;----------------------------------------( i" N' u2 P9 t
  1291. FC_Ppu_To_Ram_Mode:   ;复制PPU到RAM模式
    3 W( p$ g: \  A& h
  1292. LDA FC_Cpy_From_H
    * L6 b' K1 c1 y+ B1 Z
  1293. STA $2006% Y# K0 ?5 C) n& {
  1294. LDA FC_Cpy_From_L$ I/ M; u/ P; S6 \1 f6 U# S
  1295. STA $2006
    $ X( u+ C/ ?! o
  1296. LDA $2007
    , e" R. g9 A2 u' R
  1297. LDX FC_Cpy_Count_L: C, @: e* h' D  k0 L, L
  1298. INX
    - g; ]' h* j+ r) a# a
  1299. FC_Ppu_To_Ram_Count:   ;剩余计数检查1 s9 |9 u/ a! `1 z5 y9 h
  1300. DEX
      Q4 W+ G* b& o: ?) J/ U/ O2 H3 j
  1301. BNE FC_Ppu_To_Ram_Copy. A- k/ b# e1 B6 }1 `/ s
  1302. DEC FC_Cpy_Count_H
    . p$ F7 b; x6 x+ C: {) r2 u' I
  1303. BMI FC_Ppu_To_Ram_Over
    ' Z6 ^  v  ?& P  \0 k$ O8 r
  1304. FC_Ppu_To_Ram_Copy:   ;开始复制数据
    % n8 B6 q& U: e+ U
  1305. LDA $2007
    / L9 v4 R' [9 N' l2 \6 J0 `; l! }
  1306. STA (FC_Cpy_To_L),Y5 u) O" W0 F3 U  Y
  1307. FC_Ppu_To_Ram_To_Set:    ;目的地址递增  r, C2 w# b- X
  1308. INY3 p( V2 }$ r9 L0 b, Q7 [1 V% E# E
  1309. BNE FC_Ppu_To_Ram_Count1 I7 n! X- w; w5 P  }
  1310. INC FC_Cpy_To_H
    # E$ F/ F0 l8 |7 A2 p/ }
  1311. BVC FC_Ppu_To_Ram_Count
    % |7 S% l4 q+ e1 n  b8 q
  1312. FC_Ppu_To_Ram_Over:    ;结束数据复制
    " i; Q: ]1 }9 D" t
  1313. RTS
    ; u. [$ N6 c: X& }, I

  1314. 2 s( y# ~# |9 _+ _; p9 e' k
  1315. ;----------------------------------------& G% l' m) N- f+ y
  1316. FC_Ppu_Clear_Mode:   ;清除PPU模式
    ; l/ L" V: w$ F
  1317. LDA FC_Cpy_To_H
    ! E$ a' e) J3 Q5 r7 Y- f! L4 p
  1318. STA $2006
    8 |% p: ^9 ^3 z4 Q( v
  1319. LDA FC_Cpy_To_L
    ' v0 y! @! S9 E8 R2 z# z7 a& @
  1320. STA $20064 I  K5 u/ D/ A( J5 N
  1321. LDX FC_Cpy_Count_H7 ~" j, r$ ~, X1 e$ T
  1322. LDY FC_Cpy_Count_L& J, C/ h4 |/ k2 T6 x
  1323. LDA FC_Clear_Val
    * O- x5 s( c! F% B6 H" F  ]
  1324. FC_Ppu_Clear_Count:   ;剩余计数检查  Q: x" x' s2 `9 v" t; k
  1325. BNE FC_Ppu_Clear_Copy: R: @' ]8 P3 C) ?
  1326. DEX6 {5 T& o$ o; w4 h* z
  1327. BMI FC_Ppu_Clear_Over
    ! @* I- P) L& W3 a( V2 z
  1328. FC_Ppu_Clear_Copy:   ;开始清除PPU  {* N2 K& R! P* G+ a; b* C4 g
  1329. STA $2007
    7 o. `3 t" e2 o+ p/ H
  1330. DEY
    2 L$ @1 ^$ B7 ?$ \0 [
  1331. BVC FC_Ppu_Clear_Count" t) ]% b! W4 C; F! v" Y1 U
  1332. FC_Ppu_Clear_Over:    ;结束数据复制
    ! m* _! }2 `% W! T' n( K
  1333. RTS
    - j* ?  m- B. b: P! J

  1334. ; X) V! t& F3 a, V5 p6 w6 \
  1335. ;==================================================
    9 m* F  t8 G$ t2 _
  1336. ;保存RAM数据
    6 `) L( o* z3 C& I/ A* k
  1337. Save_Ram:
    # ?* |' b% m% A
  1338. LDX #<Save_Ram_Data, U2 X/ O* T* P3 L8 ~
  1339. LDY #>Save_Ram_Data
    * @6 ^# Y7 I# S6 _1 w. f. O7 N" T6 D
  1340. JSR FC_Data_Copy
    1 S; B% a# |5 }" K0 F$ C
  1341. RTS) [& C2 U" c4 ~+ v

  1342. 5 j: y9 ]: Q, d
  1343. ;加载RAM数据
      P$ t) A  {  G" C* X4 r
  1344. Load_Ram:5 A$ j/ t% s& N& M' _; z+ s: H) w( G) b; V
  1345. LDX #<Load_Ram_Data' e9 I! G4 B6 \
  1346. LDY #>Load_Ram_Data
    - Y+ s% G" g; `0 b: q7 `* d% O1 o
  1347. JSR FC_Data_Copy
    % y) P- A7 u0 C# p0 m: q; Z4 P5 i
  1348. RTS
    7 y9 d) {- b% ^8 t5 Y
  1349. 3 ~1 P5 b# N- `0 U1 c$ d
  1350. ;保存PPU数据
    5 u8 f; W! r$ Q. y
  1351. Save_Ppu:
    & D( K; z8 |: f) o! P
  1352. LDX #<Save_PPU_Data) ~# o& k" ?/ f7 L  N* w8 D
  1353. LDY #>Save_PPU_Data( V& _& u. Z& B
  1354. JSR FC_Data_Copy
      [. B1 P: P! s; f2 `1 B
  1355. RTS
    2 q0 d! X3 k6 G  D

  1356. - @$ B* f! {( T/ V
  1357. ;加载PPU数据
    0 p0 o5 e; f! B6 l* C8 C
  1358. Load_Ppu:
    * |6 t7 v2 L2 E: B; L9 U
  1359. LDX #<Load_PPU_Data* P  O* h% K/ i# w5 W: ]+ n
  1360. LDY #>Load_PPU_Data4 b) H5 D1 q+ r: I
  1361. JSR FC_Data_Copy
    ! z( A* G& V( o
  1362. RTS4 C) Q' C& H9 d: D1 @9 s

  1363. ( w$ x& {& ~' N/ a1 @+ Y4 i* s
  1364. ;清空PPU数据' h2 c  W! O" k" r
  1365. Clear_Ppu:5 T# U+ v) `' v: ~6 e
  1366. LDX #<Cln_PPU_Data
    & R5 X+ F, y3 ^3 [8 }8 y0 L7 q
  1367. LDY #>Cln_PPU_Data
    6 E; W" y2 u5 j5 }
  1368. JSR FC_Data_Copy  Z& k8 ^7 |3 a# k2 V- M
  1369. RTS
    ) ^. G4 L/ w4 Z* \; z4 T
  1370. + d+ q9 X# O' Y2 s( t* [
  1371. ;==================================================
    5 q' [/ v+ @: D; G$ [
  1372. ;数据配置
    ) E$ A+ c' ?' G8 S
  1373. Save_Ram_Data:
    ' s8 B; e, K( c6 h
  1374. .DB $00,$03,$00,$63,$00,$01,FC_MODE_RAM_TO_RAM. G2 `( r4 h6 d# ]0 e+ e8 m% |! \  Y
  1375. Load_Ram_Data:
    . p$ ^3 n- n$ S* ^5 R7 p
  1376. .DB $00,$63,$00,$03,$00,$01,FC_MODE_RAM_TO_RAM% A6 O" ~$ Y1 ^( O
  1377. Save_PPU_Data:: R+ r5 h) t% L( W
  1378. .DB $00,$20,$00,$64,$00,$04,FC_MODE_PPU_TO_RAM: g3 d) S2 ~$ v) X8 a  E4 P
  1379. Load_PPU_Data:
    + M- g: t7 n$ {5 \3 W5 U3 R
  1380. .DB $00,$64,$00,$20,$00,$04,FC_MODE_RAM_TO_PPU  Q0 m( F1 T& g8 y5 E7 r- q  r. j' o
  1381. Cln_PPU_Data:; z' p/ m# C( w  J; u/ q
  1382. .DB $00,$00,$00,$20,$00,$04,FC_MODE_PPU_CLEAR% a3 A9 m. Q5 o0 x$ H4 g

  1383. - c3 v" F/ X( E6 o1 P) }
  1384. # t4 i$ E5 y" u$ T' f
  1385. ;==================================================
    % u; R) W: U, @3 T/ k, v/ N& K! M  |
  1386. ;文本数据PPU显示地址* K) D: h7 g  v; Z
  1387. Text_PPU_Addr:
    : [9 m5 x. w8 p' d# e9 Z
  1388. .WORD $20C5# b9 i( c$ G. X) `( d8 E' q
  1389. .WORD $21051 Q, n8 v1 C3 e& j8 t# {3 U1 F5 h1 g
  1390. .WORD $2145
    ! z+ \7 }8 B& t* i) b
  1391. .WORD $2185
    : R" O& l. q  t- S7 R6 {: U
  1392. .WORD $21C52 I/ {  _, O; N: B* {' r' |
  1393. .WORD $2205
    # {# m5 @- }6 b/ `* E3 z2 z  B
  1394. .WORD $2245* ]6 s+ Y/ c) j( V# g$ C& F! m
  1395. .WORD $22857 A; c& q/ C+ {- g' ~  p
  1396. .WORD $22C5
    3 @3 s" J! ?; V2 [) I; i' h  t
  1397. .WORD $2305
    " S) H% Y4 q/ v; M
  1398. .WORD $2345
    ; f/ \( ]) s- d2 n' d* v
  1399. 5 i: _1 C1 `8 T4 M# S" |: F
  1400. ;==================================================
    8 ?1 n# {& H  ~. Z0 K
  1401. ;文本数据PPU数据地址
    2 q7 @# E1 |+ a; z  h; H, T2 A' L1 }
  1402. Text_Data_Addr:
    0 k* E4 |& B4 v1 I
  1403. .WORD Text_Data_01
    # X/ S/ D  v8 V6 p, H" t: ?
  1404. .WORD Text_Data_02
    1 u6 Y3 G4 v, z
  1405. .WORD Text_Data_03
    & ~" P" |: s3 @# h
  1406. .WORD Text_Data_04
    . z, n# j( a, }; P' r
  1407. .WORD Text_Data_053 m2 Z2 @+ ~* l  s) G
  1408. .WORD Text_Data_06
    9 p$ b$ e1 g  u& w, M/ ?% ~
  1409. .WORD Text_Data_07& r: N" ~. K9 p) A5 d
  1410. .WORD Text_Data_08
    2 \, M4 V. G( e/ o
  1411. .WORD Text_Data_09( x6 k  M9 s3 @0 B2 M* f0 O
  1412. .WORD Text_Data_10" R2 T2 ?% }4 d2 l" @
  1413. .WORD Text_Data_11
    / v3 [( D$ y3 F$ ?: [  w' v
  1414. .WORD Text_Data_12
    * n% U! y) }" e+ ]1 t2 ?- I0 ?7 Q
  1415. .WORD Text_Data_13
    8 U  z/ ]7 j& Q* S9 a8 Z7 w: R8 V
  1416. .WORD Text_Data_143 g  |: D3 N& t9 |) f
  1417. .WORD Text_Data_15
    . R1 b$ S, x+ G; g
  1418. .WORD Text_Data_16) ^8 q) Q( K( V) |$ p5 B/ \
  1419. 5 H( Z7 @; y! Q7 E3 Z: ?
  1420. ;==================================================
    3 q; \8 f/ `5 z2 p
  1421. ;文本数据
    1 D  O2 H' h, u
  1422. Text_Data:
    1 W( |+ ^& Q. S5 h* }
  1423. Text_Data_01:* M! T! V0 u: E/ }# B+ c  p! }
  1424. .STR "01.INVINCIBLE"
    2 e4 W$ h3 }; n2 d. g) y0 r5 z8 C. f. q
  1425. Text_Data_02:/ ?) Y# m2 G& R. S% C! C
  1426. .STR "02.INVINCIBLE PLUS"
    " i" ^  T; N) Z5 z# D8 `3 y7 H
  1427. Text_Data_03:
    + E  D! ^8 ]& ~- M0 V& q
  1428. .STR "03.LOCK LIFE"* R- q/ h7 s! K, o, K0 |
  1429. Text_Data_04:
    / `0 K% l% o/ y$ O9 x  d
  1430. .STR "04.LOCK WEAPON"' d# Q5 E# Y/ q; a
  1431. Text_Data_05:
    ! B9 s6 n  z* S" [
  1432. .STR "05.SEL CHANGE WEAPON"1 A+ ]8 H: I5 q; U! G$ y' z5 I0 c1 {
  1433. Text_Data_06:
      Z8 O0 h$ y% J6 A0 d+ s$ [
  1434. .STR "06.UNLIMITED JUMP"
    1 u, j; B+ U- b
  1435. Text_Data_07:; A7 f0 y9 Y; v# k7 q& M& z+ h
  1436. .STR "07.MOVE FAST"
    $ V  p6 G; Q: a2 _
  1437. Text_Data_08:
    1 C1 t+ N/ T( F9 W% ]# Q! H, o
  1438. .STR "08.SWAP SKIN"& ^) ^  ]( ^5 G% b% @7 Y
  1439. Text_Data_09:
    . A8 K% Q$ n; C8 {) a) i
  1440. .STR "09.EQUAL BULLET"
    & q+ d7 Y+ U" s6 Q8 g( `* h/ ~1 n7 Y
  1441. Text_Data_10:
    & U0 M& p3 b; Q3 ]+ M; V' G0 v
  1442. .STR "10.STRONG BULLET"
      ~! `) l; I8 }, l; E
  1443. Text_Data_11:
    1 w  c( A7 `! g, v& v! ~
  1444. .STR "11.KILL BY ONCE"
    4 ]/ W5 f4 u8 h
  1445. Text_Data_12:* Z7 y& c$ ~# l8 a$ A7 }, K
  1446. .STR "12.FULL SCREEN KILL"
    4 B( P) }$ ]# M/ y" P0 |. }
  1447. Text_Data_13:
    8 o2 U7 d/ @$ X) @% V; \* [
  1448. .STR "13.DOUBLE CONTROL"
    + m4 f" Z# U% ?2 Q
  1449. Text_Data_14:* x8 d% |% W' d/ ^- w/ V' N
  1450. .STR "14.REMOVE E-GRID"% [; E! m( l  Y2 s3 v1 S
  1451. Text_Data_15:, A' u: f, p/ m
  1452. .STR "15.FALL INVINCIBLE"
    ( t0 O" G: e" r8 e; U! g- ~' i
  1453. Text_Data_16:
    9 y- ~1 Y8 T# p0 m8 e
  1454. .STR "16.NEXT STAGE"
    9 M& Y( Y* f- [1 d) s! X- }' ?0 q0 u
  1455. & V4 G1 U1 ~  t  {2 C
  1456. ;==================================================
    3 f& v& g9 s# y! Q9 E0 C% k* w
  1457. ;功能开关检查地址
    ! V5 f& K. {# X
  1458. Function_Addr_A:
      I! m5 y; f0 e: p* H" d! l: P
  1459. .WORD $01C0
    8 i  w+ i9 L% c2 O8 b& I( q
  1460. .WORD $01C0
    - I" @7 K; l3 c
  1461. .WORD $01C0# p! I$ N4 Y6 N) y: c% f
  1462. .WORD $01C0
    $ |0 Z/ v! M. G, {, P
  1463. .WORD $01C0$ n% Q5 L  K* R$ i( Y2 L6 m, M
  1464. .WORD $01C0' d; k% c. d/ s( q- o0 Z' g+ }- t
  1465. .WORD $01C05 V+ C0 Y7 h  @0 g5 b8 T1 S3 |/ D; |  T4 X
  1466. .WORD $01C0
    2 T$ v2 o  |1 e4 t( i: [6 U
  1467. .WORD $01C4
    ( S+ D9 ~& h" ]0 T' B
  1468. .WORD $01C42 w; g" h3 r- A  q6 ~& u9 y
  1469. .WORD $01C43 U9 r$ g' g5 z5 i
  1470. .WORD $01C4
    % i# f: ]7 W) M* n
  1471. .WORD $01C4
    ! }$ D* X/ A/ t$ i7 x" C
  1472. .WORD $01C4, O1 x+ u, Q# C
  1473. .WORD $01C2
      I" c9 d0 C: K
  1474. .WORD $01C46 l- u3 E8 Z# G, L7 a8 Q& j+ N

  1475. * z/ P) Z- H  }$ q$ x: @
  1476. ;功能开关检查地址# i: S1 y, T+ Y8 N8 X0 U& \
  1477. Function_Addr_B:/ f5 o( N' F( C  n' {, A( l3 Z
  1478. .WORD $01C1
    ! l; ~2 v, ~" i: S4 I4 Y4 l6 }' Z1 \& j4 f
  1479. .WORD $01C1
    ) h1 O' N0 X& d/ f
  1480. .WORD $01C1) Y" ?, c+ V5 c+ W: @/ [
  1481. .WORD $01C1
    3 {: N4 E8 U! P! O" R' \
  1482. .WORD $01C1
    $ B# ~: |1 X* F
  1483. .WORD $01C1$ \; D: n. [/ I" ]
  1484. .WORD $01C1
    $ j& ^, @  M1 f
  1485. .WORD $01C1) s, z0 m% m( W  N( |+ [  i
  1486. .WORD $01C4" D: E1 @% r, Y
  1487. .WORD $01C4, e$ J/ I! A1 C: g7 m4 c
  1488. .WORD $01C4- ?$ O6 V2 x# {. {& D& ~7 U: l
  1489. .WORD $01C4; n2 o9 {1 [% X6 A8 @! E5 b
  1490. .WORD $01C4. `3 k0 S$ l" h# ], j! t
  1491. .WORD $01C4
    " ^$ h2 H! t$ l9 N. n7 I5 n7 C
  1492. .WORD $01C3' w, o- A) j# H  k
  1493. .WORD $01C4* W4 ~0 b- j( x  Q+ i

  1494. 0 e: D& G3 f! l  e: t) v# Y* p$ c
  1495. ;==================================================0 q( i- k4 R6 \3 A
  1496. ;功能开关检查数据
    7 P5 l2 \+ }- z0 H& j  W
  1497. Function_Check:/ q" x8 a8 l  D
  1498. .DB $01
    % s3 s+ a  x0 J$ S- K
  1499. .DB $02
    % I, O) u! Z' d7 u! y- @3 b5 J
  1500. .DB $04
    6 C& T( D6 n7 U
  1501. .DB $08
    ) c2 T# e( r; D! U/ y
  1502. .DB $10
    " }8 M" `9 Q1 `$ B
  1503. .DB $20
    : c4 J) t9 B/ y$ ~- ]
  1504. .DB $40
    * e. _( l. @# e+ o8 g2 j
  1505. .DB $80; s3 m# @2 s$ ^3 N) o" O2 R
  1506. .DB $01/ {; B* B( b& C) ~
  1507. .DB $027 d$ h3 O8 S( B% `! A- p
  1508. .DB $04
    . s* m$ c( T) I$ T% y+ P
  1509. .DB $08
    2 W4 U# S: t1 E: |: X. G6 _2 B
  1510. .DB $10
    : C3 Q. ~8 h+ E  `
  1511. .DB $20
    2 E2 l6 E5 W$ y' S& J4 c6 ^) j
  1512. .DB $40
    ) [- p- b) B8 J$ @
  1513. .DB $808 ~- o9 c- T8 }/ E8 l
  1514. - n; M5 \  P" {* l% P- ^# V
  1515. Char_Rom:5 Z. j2 V. K) o% s: w6 F. Z
  1516. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00) g1 A# T1 `: p* C, f
  1517. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$004 K3 {7 P1 F0 O8 l# Q  X
  1518. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3B,$25,$00+ v  ^0 B& u7 e
  1519. .DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$00,$00,$00,$00,$00,$00. w. U/ d: a* g4 d% i
  1520. .DB $00,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19
    / Q  i2 A; f* w+ H; Y4 Q; W  y; f
  1521. .DB $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$00,$00,$00,$00,$00
    * y  R- m1 A$ t8 ~9 Y

  1522.   a7 O: P% R9 x$ k1 m7 C( Y

  1523. 9 D$ O% H% w- s  K! X* _/ W3 W
复制代码

. T7 n/ d" a3 |2 f
游客,如果您要查看本帖隐藏内容请回复
. A& x# O; I& N' Z
flamecyclone.ys168.com
* |( h1 |) Y+ U+ j7 ^( Dwww.nesbbs.com

本帖子中包含更多资源

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

x

评分

2

查看全部评分

签到天数: 2891 天

[LV.Master]伴坛终老

发表于 2019-11-29 23:03:37 | 显示全部楼层
支持楼主,非常丰富的修改选项!
[发帖际遇]: afti摆地摊卖菜,占道经营被城管罚款 1 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 142 天

[LV.7]常住居民III

发表于 2019-11-30 14:20:13 | 显示全部楼层
顶楼主啦..希望楼主多发精品好帖啦.....
[发帖际遇]: yelei花2 个 柠檬买彩票,血本无归T_T. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1482 天

[LV.10]以坛为家III

发表于 2019-11-30 14:45:08 | 显示全部楼层
改的挺多,支持!
[发帖际遇]: 狮子座 发帖时在路边捡到 1 个 柠檬,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 39 天

[LV.5]常住居民I

 楼主| 发表于 2019-11-30 16:11:17 | 显示全部楼层
重新制作, 修复已经发现的bug
[发帖际遇]: yandagui 发帖时在路边捡到 5 个 柠檬,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1737 天

[LV.Master]伴坛终老

发表于 2019-11-30 16:11:46 | 显示全部楼层
666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 2419 天

[LV.Master]伴坛终老

发表于 2019-11-30 18:27:30 | 显示全部楼层
楼主威武
[发帖际遇]: caochunyuan辛苦发帖,赚了 4 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1221 天

[LV.10]以坛为家III

发表于 2019-11-30 21:38:25 | 显示全部楼层
感谢大神分享!可视化修改非常棒!
回复 支持 反对

使用道具 举报

签到天数: 186 天

[LV.7]常住居民III

发表于 2019-11-30 23:17:50 | 显示全部楼层
多谢你的分享
[发帖际遇]: dabayu为灾区捐款 7 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1671 天

[LV.Master]伴坛终老

发表于 2019-12-1 13:14:11 | 显示全部楼层
感谢楼主分享
[发帖际遇]: DEN 发帖时在路边捡到 1 个 柠檬,偷偷放进了口袋. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 35 天

[LV.5]常住居民I

发表于 2019-12-3 18:46:27 | 显示全部楼层
感谢{:4_92:}分享
回复 支持 反对

使用道具 举报

签到天数: 39 天

[LV.5]常住居民I

 楼主| 发表于 2019-12-4 21:39:53 | 显示全部楼层
增加烧录支持(其实是之前遗漏了兼容性)
回复 支持 反对

使用道具 举报

签到天数: 1121 天

[LV.10]以坛为家III

发表于 2019-12-5 06:49:43 | 显示全部楼层
樓主的修改一定支持, 魂斗羅是喜欢的系列.$ V. X: R: |2 q
多谢楼主分享
[发帖际遇]: waikwokt 打扫环境卫生,被奖励 2 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 1115 天

[LV.10]以坛为家III

发表于 2019-12-5 10:13:59 | 显示全部楼层
漏了一个下载。现在魂斗罗2部都齐了。谢谢楼主无私的付出。
回复 支持 反对

使用道具 举报

签到天数: 3325 天

[LV.Master]伴坛终老

发表于 2019-12-21 02:21:12 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

签到天数: 1341 天

[LV.10]以坛为家III

发表于 2019-12-31 21:29:52 | 显示全部楼层
这个牛叉大了
回复 支持 反对

使用道具 举报

签到天数: 3022 天

[LV.Master]伴坛终老

发表于 2020-1-18 16:09:02 | 显示全部楼层
不错不错
[发帖际遇]: leshui扶老大爷过马路,警察叔叔奖励leshui 2 个 柠檬. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

发表于 2020-1-21 11:56:09 来自手机 | 显示全部楼层
谢谢楼主了
回复 支持 反对

使用道具 举报

签到天数: 416 天

[LV.9]以坛为家II

发表于 2020-3-5 21:18:20 | 显示全部楼层
谢谢老板啊
回复 支持 反对

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

发表于 2020-3-22 14:13:00 | 显示全部楼层

& U' G# `$ x& z/ yTec.PNG (8.05 KB, 下载次数: 0)
' \( B0 L, g! b2 U- b; k: o2 ^* R/ ]  q1 Y2 E) Q4 z& z
下载附件  保存到相册
; q3 X( V; K% G" a6 d# m
& P+ Y7 L7 s. Y+ n2020-3-13 13:33 上传/ K; k8 Q* R: x
得到的文件解压后放在任何FC模拟器即可玩。NES上最优秀的篮球游戏!1 _8 G6 w! F: Z  ^" u7 _) S
* f, `, x9 ^8 U; b/ i修改内容:
. u- R  d) X/ @+ O7 {/ z) f. `1)游戏时按START键可以开启或关闭怎样射球都进篮,全场照进!- t9 S2 d" W3 p& \  s8 X1 s  T6 w( U3 ?) ]
4 N# A* o  K& S. i2 c6 _( D, A7 f8 [% D5 t& n. H
不过开启了是双方面的,看到电脑拿着球赶快关闭!(有声音提示)。" p1 M) ?$ I+ `) P* f2
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 00:17 , Processed in 1.108398 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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