EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2019-11-29 20:25:37 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2019-12-4 21:31 编辑 ; q( V+ E/ P2 e% Z8 U6 [7 s
# Z: J0 l1 W# R7 g& v$ j7 u
[FC][魂斗罗][最佳可视化]
+ B4 M6 F, n9 }" j时间:2019.11.30
7 T; T0 d0 q. [# Q  v" q  N作者:FlameCyclone
9 B. U0 u! |, D% T  ?/ [内容:" `5 \% V! {6 _- h! {
1.可视化:    4 h/ f) K/ g+ j  ^- ?5 D
     (1)暂停时按选择键进入菜单( |! n8 O+ L# Z2 h5 U
     (2)方向键选择功能: B键开启: A键关闭: 选择键交换,开始键退出
, }! \; E; j& V2 l, ?% D     1.1.透明无敌: 透明无敌! Q' g+ i0 r1 \# l- N! v
     1.2.加强无敌: 金身无敌8 _; Q8 M: {$ L4 x8 J, |- r2 V7 i
     1.3.生命锁定: 生命锁定3条
" Q7 E" o2 t! G& I     1.4.武器锁定: 武器保持不变
) |$ ~4 s4 M0 m* j+ T* X# t     1.5.武器切换: 游戏时按选择键切换武器
1 s) k* Q& k/ b3 x9 g     1.6.无限跳跃: 跳跃无限触发
# e3 j' U6 t. G     1.7.快速移动: 行走速度加倍4 l$ n5 ], P5 w
     1.8.皮肤切换: 交换玩家肤色# [0 k; |5 s% @8 H( Z) _# i, J' l$ P4 D
     1.9.公平子弹: 玩家子弹可以与敌人子弹对打
  j9 w6 S' P. O" Z( W: x$ }     1.10.强力子弹: 子弹打中敌人后继续穿透
+ w: n7 d& }! b8 l6 A" @, L9 W     1.11.一击必杀: 敌方中弹一发必死9 i4 |' T3 S* D* |5 X
     1.12.全屏击杀: 开枪时全屏可击中目标必死% q8 }' t, H1 Q6 ^" J+ r$ A
     1.13.玩家双控: 两个玩家的任意一方均可同时控制两个玩家1 K3 O) c* y8 `1 K: r
     1.14.移除电网: 移除2,4关的电网
* v2 ^5 i7 t: y& Y' ^# v. M     1.15.掉坑不死: 掉坑后不会死亡
  [# C+ q( N0 Z5 F9 i     1.16.跳过关卡: 跳转到下一关- w/ D8 }6 ]9 @/ ^$ s7 k. O
  1. ;[FC][魂斗罗][最佳可视化]: E0 n$ n$ G$ c! ~3 T' e
  2. ;201911294 C9 ?: j4 ?* A) @1 Z) m
  3. 4 v/ S# a# q, ~7 c* k
  4. ;程序开始地址: q" H0 h0 D1 s3 m" ^, P
  5. .ORG $9000' P9 p; a# W- [3 s! P
  6. 0 O2 F: I5 A- n8 e4 W5 s& t
  7. ;==================================================  T/ l7 H) X( }
  8. ;==================================================, J+ I. C* A" d3 i% j9 c
  9. ;是否双人玩家; t$ T/ @' I0 E/ S1 P5 e" o
  10. FC_IS_DOUBLE_PLAYERS = 1
    * r# p3 b2 i+ ^7 c6 J, L- o; [6 u

  11. 7 x5 ^. J' R, L' D0 x( v% G
  12. ;==================================================/ b+ d. U8 {' }8 d$ k  k0 _
  13. ;PPU缓冲地址配置  {# W) O3 \# b0 c/ \
  14. FC_PPU_Buffer = $0300* m1 w; ]. @0 \* @  D; C+ V
  15. ;PPU地址配置
    ' t3 F- a: f$ {. H
  16. FC_PPU_Cursor = $00+ T) V$ G- q2 u1 M8 s
  17. FC_PPU_Status = FC_PPU_Cursor+$01
    ) \% r; n: }2 y' K( g5 b
  18. FC_PPU_Data_Cnt = FC_PPU_Status + $01+ p7 u& ]7 y6 c- {7 e$ j- X9 {' B& C
  19. FC_Data_Port_A_L = FC_PPU_Data_Cnt + $01/ w/ b& d* G" k- `
  20. FC_Data_Port_A_H = FC_Data_Port_A_L + $010 k' ^1 _5 ~3 I
  21. FC_Data_Port_B_L = FC_Data_Port_A_H + $01
    ; \+ Y, Z5 W! r% n2 F; h! K' N: p
  22. FC_Data_Port_B_H = FC_Data_Port_B_L + $01
    + Q) Y( p) ~  S: {& j. q% m" l: l+ J# B
  23. ;==================================================1 ~$ ^* ]! \8 E; i/ a7 S1 o
  24. 1 U, f' V* `9 S
  25. ;==================================================
    % M2 _3 k: x7 [  H  u
  26. ;选择项地址配置. b3 s' L9 p/ e; K! ~4 V0 ~' D
  27. FC_Select_Index = FC_Data_Port_B_H + $01- r, L% e6 T! P" h
  28. FC_Select_Temp = FC_Select_Index + $021 k9 V7 w! G! n' S( }5 E; `
  29. ;NMI循环计时器0 b9 ]6 S6 o2 e. M
  30. FC_Time_Count = FC_Select_Temp + $01
    / N: s( m! R7 E: m) B1 Z0 r6 [
  31. ;==================================================
    ! }5 t+ I% N' V( T( E( o

  32. 4 v' W! i4 A4 Z
  33. ;==================================================
    " R# x5 u3 [9 S. d
  34. ;光标配置5 F7 s( `/ j: |& w* I9 i% t
  35. FC_Cursor_Addr_L = FC_Time_Count + $01; J( `% y* T! I7 G
  36. FC_Cursor_Addr_H = FC_Cursor_Addr_L + $01
    - l& ~, q' f9 i0 E- E' U8 r
  37. FC_Cursor_X = FC_Cursor_Addr_H + $01( [4 V# B3 v# f! c8 _* i
  38. FC_Cursor_Y = FC_Cursor_X + $01
    , e( T, A; D- d( `# p, r& P  P# I
  39. ;----------------------------------------9 ?1 A1 f6 B. N8 P6 s* n) [7 \9 U, c
  40. ;光标图形号
    : k: A2 b- ^! N9 ~
  41. FC_CURSOR_TILE = $3E
    9 N% {& n2 E0 Z$ u/ \0 L
  42. ;光标偏移像素值$ D) D" ^# }4 j8 \! S( ?) [
  43. FC_CURSOR_OFFSET_X = 12* i, ?; H; N3 T1 Q
  44. FC_CURSOR_OFFSET_Y = 1
    7 |7 @; J5 W( y4 x
  45. FC_FUNCTION_OFFSET = 21
    % l, ^% u) k  \7 W) w* `
  46. FC_ON_TILE = $3D
    6 H8 R5 t9 q- B6 ]$ X
  47. FC_OFF_TILE = $3C
    6 W6 v9 Q9 h$ a" `: S' v
  48. ;==================================================
    3 l9 h! i/ l- o" P% |' ], H4 }
  49. , D2 s$ T! n& B' X; V+ z
  50. ;==================================================+ L  a1 B9 A: ~6 A( q/ D- q$ l
  51. ;翻页配置
    , a1 a1 h+ G+ F
  52. FC_Page_Old = FC_Cursor_Y + $01/ d& h' B! v4 T3 y8 V
  53. FC_Page_Cur = FC_Page_Old + $01
    ( `* ^7 s* b9 W
  54. FC_Page_Item_Count = FC_Page_Cur + $01, H" ~: W# ^  X* K% d
  55. FC_Page_Item_Buffer = FC_Page_Item_Count + $01/ \% K! N8 E$ [$ ?  v" I3 t. e
  56. ;----------------------------------------: R! f$ y( k3 V
  57. ;翻页属性
    7 k; W0 P) N! ?- M
  58. FC_PAGE_SIZE = 10
    ; o' \6 M  S4 N5 N4 ^
  59. ;PPU单次写入缓冲项数/ G. z1 h  ]6 S9 F( X
  60. FC_PAGE_BUF_SIZE = 2* t. _0 a  F% i7 L: E, G
  61. ;----------------------------------------
    1 t" {) h  M4 `$ i
  62. ;显示项最大索引属性- h+ `4 h6 B- h+ K' f
  63. FC_ITEM_SUM = 16 - 1
    7 X- s) X: j5 V2 s* H! Q
  64. ;最大页索引属性1 Y# b& i5 v- ~$ G# C8 r. z& j. U
  65. FC_PAGE_MAX = FC_ITEM_SUM/FC_PAGE_SIZE*FC_PAGE_SIZE8 |/ T: `2 K! {; I6 b8 }
  66. ;==================================================0 E3 q( \" o+ L' P
  67.   M% H4 t( q6 `: O3 W$ I
  68. ;==================================================% N: `9 i5 D+ I$ X( ?3 Q
  69. ;按键配置; v, C1 g+ T" v1 E2 J! M
  70. Button_Keep = FC_Page_Item_Buffer + $01
    ' A; x5 f/ y' y; r8 r9 F
  71. Button_Once = Button_Keep+$02; V( u+ ^8 s& W/ C  [* O5 J4 j
  72. Button_Temp = Button_Once+$02
    9 V, [* S% P6 O) L
  73. Button_Buf = Button_Temp+$02- F/ T& F7 P2 V9 W9 T
  74. Button_Status = Button_Buf+$02$ b% r3 ?1 [* G
  75. Button_Auto_Delay = Button_Status+$02% R& B, y9 C! Z3 y' u) [
  76. ;----------------------------------------; R; z, m$ @7 g# Z8 i/ v
  77. BUTTON_DELAY_MAX = $18
    - M$ E, W4 u6 y# W6 \& _- S* S
  78. BUTTON_DELAY_SPEED = $081 O+ X, c, R% g/ @. Q  b
  79. 2 _. x' n" j* w  D! W; s7 M# w
  80. BTN_UP = $08
    & ^- J7 [. o3 t0 i( g
  81. BTN_DOWN = $04
      v( M8 M" ?# Y
  82. BTN_LEFT = $02. [/ E* ]. u. l4 P
  83. BTN_RIGHT = $01
    6 V  y& I; u0 J' b& K. A0 @
  84. BTN_SELECT = $20( D+ n8 e6 b% y3 D. F
  85. BTN_START = $10) c5 U1 r; _4 b: `! G# M( V
  86. BTN_B = $40
      z! w, M# o& \: {3 P2 R
  87. BTN_A = $80
    1 @, @: r# u  r- r9 H4 v# |
  88. ;==================================================
    * ^8 x' ?% M  w/ k1 R4 p' ?$ d9 L
  89. 9 e1 M/ t9 S% m; P  a; k# a  P, i
  90. FC_Copy_Addr = Button_Auto_Delay + $01
    " Q$ H% T  y0 z+ L* J
  91. ;----------------------------------------
    # F6 I! C( O" H  V! S
  92. FC_Clear_Val   = FC_Copy_Addr+$00      ;清除模式覆盖值
    3 X1 q$ Z- T4 v, t  ]3 P- V
  93. FC_Cpy_From_L   = FC_Copy_Addr+$00     ;复制来源地址低位
    4 ?9 T9 `" z# ^; X2 h, N' Q
  94. FC_Cpy_From_H   = FC_Copy_Addr+$01     ;复制来源地址高位- w# Q$ {! D8 M
  95. FC_Cpy_To_L     = FC_Copy_Addr+$02     ;复制目的地址低位
    7 u2 L9 J* ^* C, d7 i
  96. FC_Cpy_To_H     = FC_Copy_Addr+$03     ;复制目的地址高位
    , D2 ?4 d% A% W  c0 a
  97. FC_Cpy_Count_L = FC_Copy_Addr+$04      ;复制长度低位
    3 w9 a) N. \6 U
  98. FC_Cpy_Count_H = FC_Copy_Addr+$05      ;复制长度高位9 f, o1 K+ t  K) X+ u
  99. FC_Cpy_Port_L   = FC_Copy_Addr+$06     ;配置地址低位5 f  G1 R& d1 Y
  100. FC_Cpy_Port_H   = FC_Copy_Addr+$07     ;配置地址高位8 A4 I3 ?4 H: |
  101. ;----------------------------------------
    / V; O1 a! R! _* A
  102. FC_MODE_RAM_TO_RAM     = $00  ;复制RAM到RAM模式
    ; D7 L2 d8 p1 i) J/ Q
  103. FC_MODE_RAM_TO_PPU     = $01  ;复制RAM到PPU模式
    . h# e; x% v9 D! y
  104. FC_MODE_PPU_TO_RAM     = $02  ;复制PPU到RAM模式$ ]& q6 \# N  P; @! c
  105. FC_MODE_PPU_CLEAR     = $03  ;清除PPU模式
    " S2 y. o4 d$ u/ L" T* q# z  R

  106. 0 o  u9 N) W+ q/ _  d' o
  107. ;==================================================
    2 U- b( |  ]% `6 _+ v
  108. Rom_Nmi_Addr = $FF. Z4 b$ \8 o" w
  109. Rom_Btn_Once = $F5
    + {' G- j- T* W1 _! O! {
  110. Rom_Btn_Keep = $F9* U7 [; A  `3 \
  111. Rom_Pause_Addr = $25' W' x: T! r4 X
  112. Rom_Pause_Val = $01
    ! Z' ~, }3 ?% f7 e: V
  113. Rom_Pal_Addr = $07C0
    ( w- y9 a9 J, I9 D/ {
  114. ;----------------------------------------! k3 b+ z) q1 d5 H7 b- k' e6 W: L0 b
  115. Save_Zero_Addr = $6200  M# X. I: J0 F
  116. ;==================================================
    . R& {% v) I. q; Z9 O* A9 u
  117. ;==================================================
      `4 i" o% F5 v. E( s

  118. , k1 W- L; s: k) T
  119. ;程序入口
    " m1 |0 u1 C3 y; ^- H
  120. Enter:% Z  E8 q) I8 }$ X6 E
  121. LDA Rom_Pause_Addr
    ) }& H9 H% e) d, e+ W
  122. AND #Rom_Pause_Val
    0 r8 Q/ q  l+ v: }% y1 H( U) y
  123. BEQ Quit_End
    , x7 r: y8 N, u1 u1 F" B) D
  124. LDA Rom_Btn_Once9 y1 T& |2 ^# r4 G
  125. CMP #BTN_SELECT
    7 G6 a# @% Y6 K& U% t3 m
  126. BNE Quit_End
    $ t" s7 ?4 d( a( u5 v* C; e) y
  127. PHA; v! l$ D3 i- ]
  128. TXA
    - f  \# |9 N2 O! R1 p
  129. PHA* J; c* f( ?3 M1 t* Z3 m* q2 p) a
  130. TYA' C% z4 v( D0 J- {
  131. PHA
    ' a% n2 R( v) g) s9 O8 _6 m0 T1 _
  132. JSR Wait_Sound_Stop' |: A; u; S, k
  133. JSR Save_Screen7 }) b7 P# E6 p( j3 N
  134. JSR Program_Begin( p; Z4 {9 T0 I0 P0 T* L
  135. JSR Load_Screen
    # \: i; J5 F+ `- b7 K
  136. LDA #$10* s8 [0 N; S, c; o6 R: `
  137. STA Rom_Btn_Keep# b$ d( v) W4 {5 T2 X# X8 ?- U. \$ v
  138. LDA #$00, P( Y# W/ e. R' n
  139. STA Rom_Btn_Once
    ' {4 K* e1 A3 e% ?$ C
  140. Quit:6 p5 B+ A8 M( d$ n% v, J
  141. PLA
    8 ~' s/ H0 y2 o' ~# s
  142. TAY
    ; _$ L. ]+ i/ Q9 k' }
  143. PLA
    . u% x$ b$ b- ~3 F: p
  144. TAX% d% n2 D. c2 n$ b6 _
  145. PLA" E2 W' x* A5 `) w" o
  146. Quit_End:* p: M: _; o  S2 b
  147. RTS9 d- P$ M" J- m0 b) m) i
  148. * A6 W6 T  r: u- h7 u$ g) O1 b
  149. ;==================================================
    0 A  H8 A9 p' ?
  150. ;等待音乐结束" w% z0 h( G0 n
  151. Wait_Sound_Stop:" i; W6 U# y, Z- H# ^7 R% T
  152. Wait_Sound_Stop_Check:
    # a: z% X# J0 v+ D) {
  153. JSR NMI_Wait: x) |4 L1 `0 Z+ m% X. ]
  154. JSR $F825- t5 b5 `2 Y& ^: m- c" G
  155. LDA $010A
    7 R% @, u% Z! G5 x- s  S
  156. BNE Wait_Sound_Stop_Check
    ' w9 o! h' N! v3 J/ R$ G2 P+ ~8 X8 W9 x
  157. RTS) O! Q6 o5 f4 [$ }! f- J

  158. / ]1 @2 h- G( m1 t( z$ e0 X" [; v
  159. ;==================================================: u0 h0 ~! }. V9 P
  160. ;保存屏幕数据* H6 n% u9 ~2 X) N1 b
  161. Save_Screen:% g& C) x/ U  F4 s% D
  162. JSR Screen_Off3 r. H* G; c5 l: Z
  163. JSR Save_Zero5 z( [$ n3 n1 t3 J
  164. JSR Save_Ram. E* K1 l, Y1 \9 X. W5 S
  165. JSR Save_Ppu+ U/ \  u/ \% I7 j( t% e; v: e
  166. JSR Ram_Init
    8 Y7 p+ a" d+ Y4 y  D0 g" B
  167. JSR Sprites_Init( G1 w  F5 s) e6 J
  168. JSR Clear_Ppu
    6 \$ D9 h, l7 x
  169. RTS
    3 m$ k, c) L& t" C9 {& i
  170. ( D' C; j) ]; L6 ~; X4 N. n; o
  171. ;==================================================( x* |! \/ \- n
  172. ;加载屏幕数据
    , l5 e5 ?* l& F, K; y
  173. Load_Screen:+ o$ z/ c& G# }
  174. LDA #$00, B  o$ V2 a, F% j3 Y
  175. STA $20012 I4 }1 b. |/ y; c" k. z, x
  176. JSR NMI_Wait" Q" |7 a4 n2 d& v+ [8 E9 f- }
  177. LDA #$023 S. @% h! u+ I; \! y. ~) M
  178. STA $4014, Y% U6 z3 B' w4 g+ e7 O/ j
  179. JSR Load_Ram
    3 v3 G$ ~4 F0 |
  180. JSR Load_Ppu7 `7 C6 B" V; P3 Z
  181. JSR Load_Zero
    % ]4 J% I3 D% Z& |: e" s
  182. JSR NMI_Wait$ O7 ^, L1 O7 h7 M
  183. JSR Load_Palette& Y" o& O$ z1 Z# y
  184. JSR Screen_On9 g' C" p' u- p; p
  185. RTS: I" J+ L; j  a0 Q$ g" t, N5 k

  186. 0 @3 j. z" p- a
  187. ;==================================================
    ) _: ?2 c- X& \2 }! f6 }
  188. ;关闭屏幕3 s% [8 b! H& b+ n& T4 G# ^' i
  189. Screen_Off:/ Z. t) w0 A; T
  190. LDA Rom_Nmi_Addr
    & Y( K3 j+ m* }
  191. AND #$7F
    / I# M& ~1 W; z# }; O* m
  192. STA $2000
    & W! O- z: o% P5 Z
  193. JSR NMI_Wait
    9 E5 }8 n+ a6 U
  194. LDA #$00
    9 o: c- g1 n) t
  195. STA $20004 U* D7 `0 ^" I
  196. STA $2001
    : j, |# k# t/ U; e3 X. ?
  197. RTS
    / n1 ~9 D/ \' U0 P7 ]
  198. / I2 o. P7 c8 {; m$ m2 W- V
  199. ;==================================================. ^: F/ I3 s' Y9 q; g
  200. ;开启屏幕" p$ T( q7 J* w; g9 _1 Y8 N: D
  201. Screen_On:
    4 P2 U4 I6 W: o
  202. LDA Rom_Nmi_Addr
    9 Y( O" j1 `- u% k7 S
  203. STA $2000' T( U; y% \8 b5 _6 [& ]1 g0 x
  204. RTS! i  s) h) t. x9 u0 H* @/ U, t! g. {
  205. / J0 R" x0 T1 h/ u0 K% P
  206. ;==================================================4 D% \% {) s6 i" G: x# ^
  207. ;清空占用RAM$ Q8 V5 J$ a9 y8 W; \6 Q
  208. Ram_Init:
    ; F$ `' D' [4 I5 _+ w/ Y
  209. LDX #$00
    % q# L4 s% j% Z; a8 q
  210. LDA #$006 r% y9 F3 J' @) i9 ?6 m+ T$ t
  211. Ram_Init_Set:3 s, }- L* F3 V  W- W1 n& [
  212. STA $00,X
    + y6 d  k. P( A* {% _
  213. INX+ z  p) w4 n9 H1 Y+ k/ a7 }' _! `
  214. CPX #$400 v- U* |6 m; {8 N8 w) Q
  215. BCC Ram_Init_Set
    5 ?+ I, f0 j7 R! y/ d4 {/ x+ t/ {1 h
  216. RTS
      t3 f8 T% w* [5 |( \
  217. ; I6 ^: V, {* \% H! E
  218. ;==================================================3 U5 Q' ~( Y* Q
  219. ;清空占用RAM
    5 C$ f, ?; n5 g
  220. Sprites_Init:6 X% f( n: x' U8 ~' E0 X/ |
  221. LDA $20026 @. E/ s0 H! d& t. r8 Q' y0 D7 w
  222. LDX #$00, S3 t7 S$ Z- l) F4 W  s
  223. STX $2003
    * U1 h- {9 K' m% ]( w1 J' }
  224. LDA #$F89 e6 L1 T' m, K* B8 _2 V; N
  225. Sprites_Init_Set:7 q2 T3 N9 K, ?" h1 B8 M  _
  226. STA $20043 @7 D  B& e; w' d# }
  227. INX
      b0 _9 A# _" I, r6 |4 Z
  228. BNE Sprites_Init_Set) E  J1 ]/ P% ~1 c
  229. RTS% q- c8 ]% R5 B) T  I# r0 {- d& i

  230. ( G: n6 C2 @2 H$ M( I/ [
  231. ;==================================================, s2 U$ j2 O  k- Q& ^
  232. ;保存零页数据
    6 k2 e# ~8 c- w1 l8 {
  233. Save_Zero:
    - m9 s+ D7 k+ J# n/ N( `
  234. LDX #$00
    4 J" u# M0 ?& c; F( H& B
  235. Save_Zero_Set:
    & d: q+ A! C& o; c; }( m5 v! ^/ d
  236. LDA $00,X
    ' L0 M0 T6 @4 E6 N6 n
  237. STA Save_Zero_Addr,X( A3 X+ F. d; i; D  g. T
  238. INX
    : i7 X! Y+ T) v( e& c
  239. BNE Save_Zero_Set+ l% F: x" w" ~3 O1 a
  240. RTS+ S0 P; c4 L7 n

  241. , h/ B1 B4 T, Y# S
  242. ;==================================================
    5 S* w; v  k1 d1 Q8 v0 Q
  243. ;加载零页数据
    ) ^& g" y( C/ V0 e& r
  244. Load_Zero:+ g  p0 S; R: y0 p
  245. LDX #$00
    2 K  a3 m+ g) H) R* k* A6 d
  246. Load_Zero_Set:
    5 v: P9 ~5 ]- @( J0 e% n
  247. LDA Save_Zero_Addr,X
    6 J' o5 |( @, f8 C: {0 H% }
  248. STA $00,X
    $ h3 Y& E& X; L) \$ V* ~
  249. INX3 a5 r; c+ |# R: O  ~  a: t. F
  250. BNE Load_Zero_Set
    " G3 j' c  X' g1 S% v# n; ?0 v
  251. RTS
    # O+ D- Q4 q+ }/ Q% T! }: h! T

  252. % \, G' z7 e( Q! r
  253. ;==================================================
    , f0 a: B6 S/ ]/ ]6 t, f% F
  254. ;恢复调色板
    + G! G. C8 n. U  O! R1 l5 G7 {
  255. Load_Palette:. E9 d( A9 `2 `/ i: V
  256. LDA #$3F
    & e4 T0 G* S) K6 d
  257. STA $2006' o0 R2 D- S7 J! ?+ Z( f
  258. LDA #$00: h- e/ w: o8 W! t! @5 H
  259. STA $2006
    / a; S! v) D5 t  [" V
  260. LDX #$00
    + |- z% Z7 ~( h2 _0 @' ?
  261. Load_Palette_Set:
    $ L3 ~! s8 \- z/ u( c% e, f
  262. LDA Rom_Pal_Addr,X
    3 n  C0 |+ T8 X8 c0 N
  263. STA $2007
    2 S& o2 C. M8 F5 p
  264. INX2 v) i) L1 ~$ F5 r& N
  265. CPX #$20+ K5 W" O7 X# i3 j
  266. BCC Load_Palette_Set
    . p' y$ n* \/ R6 m; `
  267. RTS; ?8 H$ [. s8 a7 c
  268. 0 W2 \9 i% n$ k& D( S; d8 r0 l( \/ P
  269. ;==================================================8 F8 N. y- ~( q0 O8 b: c1 d
  270. ;==================================================
    6 j% L6 d0 h: f1 u0 Q2 {3 w# U$ }
  271. ; k. h5 Z: x4 y- c
  272. ;==================================================6 t% n; [0 k7 W8 i
  273. ;程序开始
    $ j: X  V- ?: @7 ^  D
  274. Program_Begin:
    0 B, [1 p5 y) Y" d/ o
  275. ;==================================================& U/ }4 n' k4 p9 k
  276. ;图形设置
    ! u- b+ e1 m6 \7 C3 L, S
  277. JSR CHR_Set3 @! C, x) n9 V: |* m6 s  z* m
  278. JSR NMI_Wait
    " e9 [6 ]4 D2 p1 O, |; B! z
  279. JSR Palette_Set4 u; L- o" d/ r2 y, \5 {
  280. JSR PPU_Data_Page_Show
    0 O) n/ O4 K9 w6 i! S4 ~

  281. * h9 [6 M: c! b* T* y' ~
  282. ;==================================================
    2 P* n; d5 i9 ^( d$ e2 Q' x
  283. ;开启显示% i4 H4 B1 A9 e# y. \; h$ Z9 r
  284. LDA #$1E
    ' q6 B: y( C. x2 v8 U
  285. STA FC_PPU_Status4 k2 C/ o/ D- |+ n0 @0 b

  286. % Q3 [. _$ E; j
  287. LDA #BTN_SELECT
    % \, e9 X* O& o' C6 ~' ?6 O3 W
  288. STA Button_Keep, F( o. T' k( {( O/ {6 F/ K) k3 C
  289. ;==================================================
    8 q# L" `+ C/ r0 U  v' y! t
  290. ;模拟NMI循环) w  O( {+ u) ]5 ^/ w$ e% U
  291. NMI_Loop:- B0 X7 j* c; j+ R/ P
  292. JSR NMI_Delay
    ; v: [, n7 v" ?6 }* F3 R
  293. JSR Button_Process
    ) Z+ g1 X# I2 {. U% \
  294. JSR Button_Auto_Press' @/ D# i( z1 v8 M
  295. JSR Change_Select_Item  w8 s- F1 T# e( U( g* B
  296. JSR Change_Function+ r5 q. B; }6 X+ O
  297. LDA Button_Once
    3 P8 {, i+ z! o; l/ G0 v0 t
  298. CMP #BTN_START
    , |% O0 I9 U9 ]9 o
  299. BNE NMI_Loop, v* l' f5 |8 n) K  J" p
  300. RTS
    7 G& E+ Q+ T1 ~" m, s+ J9 |
  301. % S- S) S* H3 ?
  302. ;==================================================# a- B% U* {, r
  303. ;模拟NMI中断
    & @3 G) B: H4 v* y& j+ b
  304. NMI_Delay:+ r  T2 c2 B; K" G$ d" k+ [1 X) o
  305. JSR NMI_Wait
    + p3 C3 P9 Q8 W4 l" {( c
  306. JSR Show_Select_Cursor
    ! g) s0 @( L2 P
  307. JSR FC_PPU_Process
    ( ~* L  r0 e5 y  k0 s( Z1 h
  308. RTS% ?/ j( o' d! y% N0 X/ v

  309. 1 C1 E/ w) w7 d" g/ R
  310. ;==================================================% p: M; ^2 R- ^9 h0 C
  311. ;等待NMI中断7 X! n$ Y! Y0 T6 ^0 a2 S
  312. NMI_Wait:! H0 J. ~. S) r  |: M
  313. LDA $2002+ ?, i) X0 a8 s$ A6 k, t4 {
  314. BPL NMI_Wait" _8 G5 s% T# X3 J. {
  315. DEC FC_Time_Count; U3 z% P, i4 [( s$ V* z6 I
  316. RTS$ {& f) Q3 G8 e& v: m

  317. 4 @$ w+ S( C7 C. h3 S5 V
  318. ;==================================================  d* Y; O) g1 H! A/ p$ @3 }
  319. ;PPU写入模式配置属性
    0 d9 ?% |3 H, K& c
  320. FC_PPU_MODE_CNTL = $FE               ;带计数行写入( w* u9 s: R$ Q
  321. FC_PPU_MODE_CNTC = $FC               ;带计数行清除
    : k( ?( T7 a' r) R. S
  322. ;-------------------------------------------------
    0 Q" \% s$ {& b2 Y% M
  323. ;PPU处理
    9 @& O+ T% |. M! x; M6 p! z% T
  324. FC_PPU_Process:6 N6 s) \9 c5 ~+ X. v
  325. LDA FC_PPU_Buffer
    * A, P! Q$ h- Y2 ?1 k" |3 I9 X* I4 @% g
  326. BEQ FC_PPU_Process_End
    ( y" r; C6 T2 Z
  327. JSR FC_PPU_Process_Beg* Q7 c+ U3 p8 e) u$ \3 s
  328. FC_PPU_Process_End:
    4 ]9 E/ n/ P: ~$ Q( Q+ H# E
  329. LDA #$00  W9 K( O+ n; V3 N3 r( N$ Y
  330. STA FC_PPU_Buffer
    - o9 ]; c" k. |  Q' v
  331. STA $2006  `5 P. }7 o6 R" n. E
  332. STA $2006
    / l2 [" y+ `0 t1 Y" `4 u
  333. STA $2005. n3 M; P9 N$ `% p- V. W/ r
  334. STA $2005/ r; g. C) W0 Q* ?- X6 j+ `
  335. LDA FC_PPU_Status
    $ u: o, ^* H! s8 y$ m3 \
  336. STA $20013 B1 E. K1 n. G3 @& I# c' v! S0 l2 @
  337. RTS
    7 V2 e2 R! X! U  ?4 K0 ]
  338. ;----------------------------------------; U) h/ p/ [6 E" v3 `0 ]
  339. ;PPU处理开始5 z  z' J! i1 W/ m
  340. FC_PPU_Process_Beg:1 p: y6 B& f. J
  341. LDX FC_PPU_Cursor1 R" u& m7 O) j) S
  342. LDA #$002 s: _% J( q7 b' z7 p0 q
  343. STA $2001. v# w" B; a. E% i! G' z( k+ X
  344. STA FC_PPU_Buffer,X
    ' G$ O! s8 ]1 H7 w& Z# |. n- K/ f
  345. STA FC_PPU_Cursor: B& s+ G0 h+ L/ g6 ~. q% D3 S
  346. LDX #$FF
    - T$ O- Z+ m- b  |+ [* H2 L1 o
  347. CLV
    : t/ ]+ A9 z' W" w1 C* O
  348. FC_PPU_Process_Mode_Select:6 W5 a) L6 c! S4 v8 K- b8 L& b
  349. INX. v' G4 x6 Y' o4 m" ~
  350. LDA FC_PPU_Buffer,X" `) m0 m% F# }/ W' F- `6 d
  351. CMP #FC_PPU_MODE_CNTL
    . Z0 |2 o( z# V! |
  352. BEQ FC_PPU_Process_Mode_CountLine/ ^; d. w- r# \$ z6 }: m: M5 O, u
  353. CMP #FC_PPU_MODE_CNTC
    4 R1 A; F% u  E! Z3 ]% U
  354. BEQ FC_PPU_Process_Mode_CountClean- ]$ h% t7 f& Y* N
  355. RTS
    / g7 |$ p: s9 S/ \/ {/ O4 Q; Z3 @
  356. ;----------------------------------------/ P' r9 Z5 O1 w* Y
  357. ;计数行写入模式) j+ ^0 S3 |+ \# G& n- c( w$ k
  358. FC_PPU_Process_Mode_CountLine:
    * z: d  r- g" `: V
  359. JSR FC_PPU_Process_Set_Addr_And_Count
    1 k; D0 U: a9 f- \3 [2 H
  360. FC_PPU_Process_Mode_CountLine_Write:0 h2 L, c" k4 p5 G! K
  361. INX
    0 r5 J" X2 X: j# a% ]
  362. LDA FC_PPU_Buffer,X/ E1 }# r- f9 ~/ s' O
  363. STA $20074 f2 W. _+ R) w3 ?+ R
  364. DEY* l2 N% M; Q0 T! U
  365. BNE FC_PPU_Process_Mode_CountLine_Write; _1 v# U8 b1 x6 }$ x. o2 Q
  366. BVC FC_PPU_Process_Mode_Select$ j+ i) P8 T/ z8 r
  367. ;----------------------------------------/ y6 i( L7 {; ^2 L2 Y
  368. ;计数行清除模式3 X! |  a! R# K" @
  369. FC_PPU_Process_Mode_CountClean:
    ; B( A/ [! J. c: o" T* p( T
  370. JSR FC_PPU_Process_Set_Addr_And_Count8 e  T/ s/ y0 q0 D4 Y  \
  371. LDA #$00
    # y( t  F* T3 I! D( w  F
  372. FC_PPU_Process_Mode_CountClean_Write:( x% S: E( V- \4 O9 `) W# A+ H9 `
  373. STA $2007- G/ `- }* O: r
  374. DEY
    ' _  v1 f7 K2 c  K5 N1 F- L
  375. BNE FC_PPU_Process_Mode_CountClean_Write: L6 N& v/ m% D: `- z
  376. BVC FC_PPU_Process_Mode_Select( t" Q. k: I' m
  377. ;----------------------------------------
    2 e; x# {+ H- A
  378. ;设置PPU地址和写入计数' P% P2 D& p8 u+ R# w9 u
  379. FC_PPU_Process_Set_Addr_And_Count:2 B/ E7 U* v! u$ Q* ]( y
  380. INX& R" }. x" H, ~( E- F% Q% K8 q0 A1 N
  381. LDA FC_PPU_Buffer,X1 f# o. o( s( n& d0 ~9 l
  382. STA $20062 h% ~1 a  [3 |( `6 B
  383. INX
    & e6 ?1 y! ?' @
  384. LDA FC_PPU_Buffer,X
    & @+ V! Y, J( B. X6 o
  385. STA $2006  a) ~! q: L( f7 \( z- I, G
  386. INX
    + N; L+ C" n- N$ D/ |0 {3 P
  387. LDY FC_PPU_Buffer,X, H- ~  I; @8 T2 N0 ], U
  388. RTS* C! f' q' s3 {
  389. 9 S& q7 R$ ~3 s5 ~7 p
  390. ;==================================================
    $ `+ Z2 F2 {# E; d
  391. ;设置CHR图形
    5 _: S) L& W+ Y
  392. CHR_Set:% K; Z. x- M6 {
  393. LDX #$05
    - p/ v, A# ~/ M) E! G; y1 m* O
  394. CHR_Set_Data:& B6 d! Q3 h% y9 R$ q) O* Z
  395. STX $8000+ G' X$ ^1 I7 P1 E; Q6 e# ]
  396. LDA CHR_Data,x+ R' @+ E2 t3 Z' o- Y  ^! z; B. |* U
  397. STA $8001
    / q# o9 s% ]% l6 s& x5 Z( E6 a
  398. DEX
    : b# l" l/ E  ~# k; D; S( v
  399. BPL CHR_Set_Data! Q* u& Z+ Q' K, T
  400. RTS
    ; v& ^: v% G/ o! \# L. T% \9 E8 j
  401. ;----------------------------------------
    ) Q2 M+ _7 `, B
  402. ;CHR图形bank数据3 X, i: _% T, O
  403. CHR_Data:8 |. J9 u2 N0 d* o
  404. .BYTE $00,$00,$00,$00,$00,$00
    9 ~! Y8 R  H4 K) h% F9 c

  405. ( C5 M  O8 V" b( K  o
  406. ;==================================================% W# A% w) f$ F% B9 U, ?
  407. ;背景调色板设置
    + J1 j6 ?! ~$ m9 X6 o& Q8 X8 z
  408. Palette_Set:
    / w& P$ L$ c5 g8 J0 V
  409. LDA #$3F
    8 F- W( K2 u0 p" P8 R1 g; n
  410. STA $2006. }/ m% w/ ]* D, S5 C
  411. LDA #$000 B" p9 ?. n- X) y7 s; n
  412. STA $20065 P, }: T- w- z+ J
  413. LDX #$00! K  c3 I6 {% T# q* z
  414. Palette_Set_Data:
    4 l  Q* g( A7 T8 {3 `$ c7 `* B
  415. LDA Palette_Data,X
    : L6 y( }' d& |/ q* q# l
  416. STA $2007. s( j* F6 A, D
  417. INX# f% W2 L. z) h
  418. CPX #$20+ K- S; M, t4 F# t$ a- d
  419. BCC Palette_Set_Data
    7 |' C, J1 H4 b- v% r
  420. RTS
    " d" N9 b" k' P- ~  J4 G
  421. ;----------------------------------------
    & S1 _* P. D, e. m# d' \
  422. ;背景调色板数据
    3 h( i6 R! Y1 `* t. B4 S8 y
  423. Palette_Data:
    - V* ]8 s; |  T2 ]+ w
  424. .DB $0F,$29,$24,$24,$0F,$20,$20,$20,$0F,$26,$26,$26,$0F,$2A,$2A,$2A
    & M" ~- h$ P' V& S* \3 s
  425. .DB $0F,$20,$26,$16,$0F,$24,$24,$24,$0F,$26,$26,$26,$0F,$2A,$2A,$2A
    3 X. T) v, N) Y
  426. - K! e2 w2 g( }8 N! t
  427. , C1 t4 R  W) V. [# w0 u
  428. ;==================================================  ^: w4 Y- f4 O$ H, O
  429. ;按键扫描: Y* Z) M8 C/ [# D2 d$ ^4 \
  430. Button_Process:! Y+ y% Q% T' D! o4 y- q
  431. LDX #$01
    ' t( _- {' {# b  p% S( n, C' @
  432. Button_Process_Beg:$ @* H0 M" Q8 Q8 r; A) X2 [% B* l
  433. JSR Button_Scan
    / t% @3 R  z4 u
  434. LDA Button_Keep,X4 \0 Z8 M: v! q, a9 p- c0 F! L  D" S  d
  435. STA Button_Temp,X
    1 H6 S# q$ E' v5 P
  436. JSR Button_Scan- ^' N0 S$ m& a2 r# f
  437. LDA Button_Keep,X9 @0 ?. G- g- R& b1 k0 L
  438. CMP Button_Temp,X0 s, s1 z( M& Q( X% Z# M' _/ P
  439. BEQ Button_Get_Once* U/ c9 p% p* i2 \3 s$ B# i
  440. LDA Button_Buf,X! i, H: h! N2 U& Q0 s  T
  441. STA Button_Keep,X
    ' i: ?! |3 y( ~; s
  442. Button_Get_Once:0 `% n, D; a+ C  Q7 g8 S
  443. TAY
    ) m4 [+ G" Y- n9 I' V
  444. EOR Button_Buf,X- f4 ^" o. O* ]! H
  445. AND Button_Keep,X
    ; C+ e3 B& D2 D; D; U
  446. STA Button_Once,X
    , D- `- c: c8 n, D; ]; t/ [
  447. STY Button_Buf,X
    ' F1 v9 R! V/ Q# |, E$ O
  448. DEX; M& h+ \" c1 B& Z
  449. BPL Button_Process_Beg
    ( g) K4 h% O2 F& J8 s, \
  450. RTS
    , U" `! u5 u' }* w
  451. ;----------------------------------------
    8 Q" n5 Q1 w! c: t' Q8 A
  452. Button_Scan:& O8 Z! q( \9 g8 R$ Y  F4 g
  453. LDA #$019 m& c# {1 M1 E  ?8 |( J
  454. STA $4016
    " U  w4 Y: N, M* H4 X+ j) u3 K
  455. LDA #$00
    , {/ s; M+ Y5 B8 K' P' }4 ~
  456. STA $4016; Q5 p. b8 x" O" z+ n+ p$ H% E3 V
  457. LDY #$08# A, l2 `8 D4 Q1 H3 `. l: D$ j
  458. Button_Value:
    9 l6 j3 n- L' f9 F
  459. LDA $4016,X
    ; V: m: S9 L/ e8 ], @( X
  460. STA Button_Status,X
    1 }  t" K/ ?  w/ `6 U- ~" l1 Q
  461. LSR
    " w! w- @6 U& s. Z. C0 h$ y- Y1 Z& l
  462. ORA Button_Status,X
    ! I6 d' L& A) B
  463. LSR, x1 j& y6 w7 @# v# }/ G% l2 B- L
  464. ROL Button_Keep,X% R9 N  v' ~1 T; X. M* P
  465. DEY
    6 O4 e7 Y  s& S4 o& Y0 K+ ?
  466. BNE Button_Value1 l& t9 s% P7 T  g
  467. RTS
    ; |$ ?; ~/ J* @+ B7 G" }5 j4 H+ Z
  468. $ d5 ~2 [( P4 j2 ?6 X
  469. ;==================================================
    6 }9 c7 i; U9 b+ U
  470. ;按键自动按压
    & X& C* l& }) B0 E
  471. Button_Auto_Press:
    2 p, B/ n7 e( B' d  j$ p
  472. LDA Button_Keep
    $ e( U: H  p$ u! V9 O- E8 V0 `
  473. ORA Button_Keep + 1/ Z  S' a' Z" R! I
  474. BEQ Button_Auto_Press_End) M- u! y7 E. d% P( ]
  475. INC Button_Auto_Delay0 Y! Q% O% P/ }
  476. LDA Button_Auto_Delay9 l. `+ m2 a4 s% b4 Q- o1 A
  477. CMP #BUTTON_DELAY_MAX9 ?) F' R  c$ |  X
  478. BCC Button_Auto_Press_No_Active! X* G4 n4 h# ]9 z2 [
  479. LDA Button_Keep
    4 l. k7 k7 B% J4 R# z% Y. S
  480. STA Button_Once! k* j8 B; |2 t( ^6 b
  481. LDA Button_Keep + 17 y% X, x1 m' V0 H8 n
  482. STA Button_Once + 10 S0 @2 Z& c, o  v& l- C
  483. LDA Button_Auto_Delay
    3 j, H$ s0 l7 N  q  x
  484. SEC, I& e  D8 j- H$ |: K: `
  485. SBC #BUTTON_DELAY_SPEED
    ! y$ }; e9 b4 d9 k
  486. STA Button_Auto_Delay. l0 W, w$ c/ p3 m& H5 N+ `
  487. Button_Auto_Press_No_Active:
    & X* \% x9 T4 C" d( j- P( W4 r5 n
  488. RTS
    + Z/ K* ?1 f" l2 S4 Y' ^7 T
  489. ;----------------------------------------
    4 {8 k7 n* F+ y$ I
  490. ;未按压按键
      @+ r6 x6 W* o- P& U5 N
  491. Button_Auto_Press_End:
    8 A7 R- C% j: o6 H' }- Y
  492. LDA #$00
    , @- E! d- O* C' D5 b1 h7 |$ T
  493. STA Button_Auto_Delay
    ! d9 q3 ]1 N" C9 g0 h
  494. RTS' h- C9 m* q# m' v! m/ Q9 D

  495. 0 D) b) H7 v3 p. t  R
  496. ;==================================================
    3 H; @" _% O( s: @. m5 L
  497. ;设置PPU写入模式
    9 J  F6 M; ^# j$ m# Z
  498. Set_PPU_Mode:
    5 T: D  A8 H1 B  M
  499. LDX FC_PPU_Cursor
    ' C( j2 \$ w0 n' R
  500. STA FC_PPU_Buffer,X& o; Z$ P0 U/ O3 a0 I
  501. INX
    ( y) [2 q/ x# i# M  n
  502. STX FC_PPU_Cursor/ W$ s/ ]/ d( E8 s" W1 B2 w1 k
  503. RTS
    2 R  t) _, {" Y) A
  504. + V6 x& W- J+ J8 J* C/ M$ f
  505. ;==================================================
    ) L+ I' R8 U6 c7 B( `' y* `* b
  506. ;写入单独一行文本* c7 m( L% X, k" B. x. G  e
  507. Set_Select_Addr:9 B7 `5 Q+ H, p5 H) e+ Q; q8 I# e
  508. LDX FC_PPU_Cursor' b9 i' e/ {/ x+ U/ e
  509. LDA FC_Select_Temp6 d( Q- [( H5 B
  510. ASL* ]) n' i8 R% i8 a$ g& s
  511. TAY9 \8 M+ ]1 x, C( `
  512. INY
    9 @" b3 X0 A$ W$ w
  513. LDA Text_PPU_Addr,Y
    , b. k7 Z4 B  f# e3 e' {$ f5 Z0 B
  514. STA FC_PPU_Buffer,X2 K7 t4 t( O# f  r
  515. INX
    % V2 G2 Y& l! m! U" Q' x" U
  516. DEY+ i3 k& ^1 }7 E& g+ b+ i9 x
  517. LDA Text_PPU_Addr,Y
    0 o- V8 c+ L% g  w; E1 G- d
  518. STA FC_PPU_Buffer,X
    % y9 f/ H% @  t! a9 S1 k
  519. INX
    ) c+ z, s1 t+ \
  520. STX FC_PPU_Cursor/ Z0 Z; k) s* }9 P9 B0 C
  521. RTS' T, p+ n9 J3 D$ a2 ?5 _0 @
  522. & b0 d, c5 z5 ^8 [' L( A
  523. ;==================================================8 U* D6 Q& [& x8 Y& m1 w6 S
  524. ;写入单独一行文本$ e3 p& l" A1 T7 s- y  b# q
  525. Set_Select_Data:
    * Y' Z$ ^0 ?( Y# I
  526. LDA FC_Select_Temp
      |0 S2 D& Z3 y0 T! B5 C" X
  527. CLC: V$ b2 Z1 N9 P* r9 U
  528. ADC FC_Page_Cur
    8 F6 D) \1 f7 [& j
  529. ASL
    ; z9 P* w) g4 |% F+ R% Y6 }4 L
  530. TAY' B0 n7 G5 V! b* F
  531. INY
    . w: v. ?" G" t+ s. c" j
  532. LDA Text_Data_Addr,Y
    5 X/ D" H& ^) e4 K+ C4 J
  533. STA FC_Data_Port_A_H# y: u$ v8 }' d4 ]+ v( U6 y
  534. DEY
    3 Q. E# _% T: V7 e
  535. LDA Text_Data_Addr,Y
    * M3 }8 [! H) B, X1 C- M' ~8 @
  536. STA FC_Data_Port_A_L- \, K9 _/ c  d+ w. Z
  537. RTS; D- O3 @  N. }  Z% Y1 \
  538. / M% m/ a7 r9 Z8 P" }2 |
  539. ;==================================================" _, a6 p# `$ D6 o
  540. ;清除旧文本
    # D9 G* ?% Z; B& b9 L; U
  541. Set_Select_Data_Clean:
    8 c7 ?+ t+ n( Y7 Y3 i6 F
  542. LDA FC_Select_Temp
    + J3 E- Z, J5 u, ]9 G7 v" F
  543. CLC
    - i, e  _4 \5 l
  544. ADC FC_Page_Old0 _6 Y" c$ J2 X3 G+ J$ Y/ r' w
  545. ASL- M! u0 _* ?  u. d$ f, W% L: I& m
  546. TAY6 o' |, f8 K# j: j! a$ b$ s
  547. INY9 W3 m8 K+ u6 |6 q! w
  548. LDA Text_Data_Addr,Y
    2 n# o8 O/ r0 b7 I, ^8 f% m) I
  549. STA FC_Data_Port_A_H
    - s2 x) L' @: A# a+ x  _
  550. DEY
    1 Y; o) w7 l% Y& b' ?2 z
  551. LDA Text_Data_Addr,Y
    # _- l: ^  Z% H3 N+ N% n
  552. STA FC_Data_Port_A_L0 H6 h3 ?6 k7 R
  553. RTS* A6 B+ V* I4 Y
  554. / _% d- _5 h' R) k+ E9 D, n; R
  555. ;==================================================
    / z7 u' t+ V# Y% }% W) J
  556. ;写入单独一行文本
    4 v. w: }' `" Y' ]# @/ O( P
  557. PPU_Data_Write_Item:, x# ?4 e' T+ _8 T  i6 `( X
  558. LDA FC_Select_Temp" a4 ~/ H0 r) K
  559. CLC
    % g8 W& z4 f) X8 s& Z
  560. ADC FC_Page_Cur
    2 e! i" f0 X& C; t" i
  561. CMP #FC_ITEM_SUM! f+ p4 `2 h) `4 E% Y
  562. BEQ PPU_Data_Write_Item_Set
    + J$ I) ~, _$ Y6 i8 K: k
  563. BCS PPU_Data_Write_Item_End
    , u) c0 N" j& M3 P% R& H
  564. PPU_Data_Write_Item_Set:/ S( Q9 ?5 z- k
  565. LDA #FC_PPU_MODE_CNTL8 q/ K% `! @% Y3 I: K, r' w6 {  i
  566. JSR Set_PPU_Mode8 S0 q' Z1 I8 W3 Y. i" N
  567. JSR Set_Select_Addr
    , {: p2 Y/ S5 M4 |0 c- \3 s; x0 v' i; J
  568. JSR Set_Select_Data
    & e/ H3 ~* @- c+ N3 e# C
  569. JSR PPU_Data_Write_Line0 R3 W" n+ R% M! r
  570. PPU_Data_Write_Item_End:
    $ c* E! |, W1 N3 h
  571. RTS4 x% h* ^/ b. D7 P* M$ P& O# [
  572. + j! J' B$ j  o9 H4 B
  573. ;==================================================' A, N" c0 ~" _) M5 E
  574. ;清除单独一行文本$ h& P" {6 i* s; M2 E; K" W
  575. PPU_Data_Clean_Item:
    5 }! W& w6 y4 k! x+ _
  576. LDA FC_Select_Temp
    7 |; d4 M' X! `8 ~7 _. f
  577. CLC
    ! y) R$ {9 y- z  B
  578. ADC FC_Page_Old
    1 G2 e0 G' r3 H! f9 \
  579. CMP #FC_ITEM_SUM' |5 Y$ R3 y2 g2 ]  e( A, j, g
  580. BEQ PPU_Data_Clean_Item_Set* o/ O* o) f& j1 d; b" T% v( p9 S3 |
  581. BCS PPU_Data_Clean_Item_End/ ]  j7 |4 j- J8 }- K
  582. PPU_Data_Clean_Item_Set:2 }0 ^) h; j3 ~
  583. LDA #FC_PPU_MODE_CNTC
    1 e" ^1 k+ z1 _9 Z
  584. JSR Set_PPU_Mode4 o, f2 ]# v$ Z2 Q
  585. JSR Set_Select_Addr$ K- k2 r/ q, p& E* a
  586. JSR Set_Select_Data_Clean
    - Y$ ^! ~1 c7 X0 B; i  X" o; i
  587. JSR PPU_Data_Clean_Line0 h& Z) h" T" n0 A  b& ^
  588. PPU_Data_Clean_Item_End:
    5 N/ H! \( S+ c
  589. RTS
    * N' Q2 X0 Y# t' ]9 V. ?
  590. : B1 i+ n7 \% i9 A! L& n
  591. ;==================================================
    % g5 \& f# k! q% y. _( `0 R' g3 @
  592. ;页内容写入
    0 V5 ~$ W. N, U$ q
  593. PPU_Data_Page_Show:
    4 Y$ b. b& Q5 H3 F
  594. LDA #FC_PAGE_SIZE( `* |, c. l5 h4 K8 e9 J
  595. STA FC_Page_Item_Count
    6 o2 ]1 c% ~' d/ l" l
  596. LDA #$00
    ! B* k) J; N" J! a6 l5 ^! u- X
  597. STA FC_Page_Item_Buffer' V( W9 e, O7 a/ @) N9 F. o' h8 e9 P
  598. STA FC_Select_Temp
    ' a/ ]- y3 q& A
  599. PPU_Data_Page_Item_Set:
    4 q; L8 I2 U3 {1 u; v, d' _
  600. JSR PPU_Data_Clean_Item
    ) P. s1 c, f* j
  601. JSR PPU_Data_Write_Item
    . O+ s. k9 O: l1 Q$ F
  602. JSR Function_Status_Clean
    . Y! R: S, |, z* y
  603. JSR Function_Status_Show
      O, U8 n: Q4 g7 [5 ^1 Y- \  G
  604. INC FC_Select_Temp6 e; I$ o: h) t7 E3 C
  605. INC FC_Page_Item_Buffer
    . a" ^0 D/ D4 c* A! I
  606. LDA FC_Page_Item_Buffer
    & i8 u  e: e6 Y: v7 q/ _% j
  607. CMP #FC_PAGE_BUF_SIZE" [% P4 j- k8 K2 T0 @& L+ q
  608. BNE PPU_Data_Page_Item_Set_Check
    # s0 h+ @+ N- c# X8 Y& c
  609. JSR NMI_Delay
    ; d/ M' H6 W- G( O4 P, `
  610. LDA #$00! f( G' L( |7 F
  611. STA FC_Page_Item_Buffer0 g, B1 p' I0 n8 E
  612. PPU_Data_Page_Item_Set_Check:9 D2 M* ?* s; u! J! z
  613. DEC FC_Page_Item_Count
    ) G( C0 A7 n# a  ]
  614. BNE PPU_Data_Page_Item_Set
      [+ j( d, ]  [: t( D1 w; E
  615. PPU_Data_Page_Show_End_Check:
    & I. Q7 m  f* |! ^5 S! M
  616. LDA FC_Page_Item_Buffer
    ! P8 v% d8 g6 K+ X' x+ D
  617. BEQ PPU_Data_Page_Show_End
    ; O1 r1 n! w+ |( b0 N  A
  618. JSR NMI_Delay5 }* I* U4 X5 f) Z( S2 U- |( [
  619. PPU_Data_Page_Show_End:) ?- X. H  R5 M' G
  620. RTS
    7 |+ g6 J, J6 m' d/ [: A" `

  621. 0 ?. A6 \' ]6 E
  622. ;==================================================7 R) K. }: `# E6 ]8 Z
  623. ;PPU单行数据写入接口( y9 |& N1 Z) a% J8 a) R% |7 H
  624. PPU_Data_Write_Line:. w3 j& }  O' o& y% D- P
  625. LDX FC_PPU_Cursor3 z% I$ h; ^0 w1 E
  626. LDY #$00
    / I7 T1 |% }3 o
  627. LDA (FC_Data_Port_A_L),Y
    + \  r& K- q% P3 T
  628. STA FC_PPU_Buffer,X
    1 ?/ b  ^6 g2 E+ ^/ h: I
  629. STA FC_PPU_Data_Cnt
    5 F! g+ E( F' h( C  l
  630. INX9 t, Z) Y5 u; T' B. N
  631. STX FC_PPU_Cursor2 p; T' S( b" m' j% S" w
  632. INY& `! j3 Y; O" w/ U
  633. PPU_Data_Write_Line_Set:
    , c& p! `8 g& ^  X0 D
  634. LDA (FC_Data_Port_A_L),Y
    / f* k2 R! }8 B% D  @2 q
  635. TAX' W3 C5 Z) n! }& o% D5 J; q
  636. LDA Char_Rom,X * y: V" T+ F! {7 d4 s. l
  637. LDX FC_PPU_Cursor8 I0 T" I4 J- ~8 n  |) Y
  638. STA FC_PPU_Buffer,X
    4 Z) |6 w4 k1 i3 i8 W' V* [
  639. INX! h0 ~) i1 l: }. q8 x
  640. STX FC_PPU_Cursor) y3 a0 z2 s" u4 f' k
  641. INY/ |. O4 f5 v4 G
  642. DEC FC_PPU_Data_Cnt
    3 w" i! R) O2 Q- {7 [4 O
  643. BNE PPU_Data_Write_Line_Set7 i8 s5 @: t: g- Q7 N
  644. STX FC_PPU_Cursor
    7 r8 k: I1 P& O' S
  645. RTS, i- b1 f6 `+ M2 M! X& j
  646. * w  G1 u' f$ f2 u* N6 N9 n
  647. ;==================================================
    + M* j9 V4 q: G- R
  648. ;PPU单行数据清空接口# L0 B$ }- f" O1 K/ Z
  649. PPU_Data_Clean_Line:
    # U1 V# ?+ @0 c% O& @  ?
  650. LDX FC_PPU_Cursor
    + I0 I7 [$ B9 M' G/ Y. n/ [3 o9 J
  651. LDY #$00
    " Y; R1 k6 C; V% v$ z4 \. Y
  652. LDA (FC_Data_Port_A_L),Y
    9 m& Z4 S7 D( G" Z) J) }
  653. STA FC_PPU_Buffer,X) l1 \, F3 f9 h
  654. INX! @* @% R! Z2 a2 O4 g
  655. STX FC_PPU_Cursor
    . ^9 ?- i3 K- z; m9 N# l- o: ^$ K# ^8 _
  656. RTS
    1 G/ o8 a. d, Y( u0 s4 M

  657. . P, z+ N) n/ V8 |1 o
  658. ;==================================================
    6 a- x8 O5 w4 Y9 l: r
  659. ;更改选择项
    % ~  s0 w8 I* `2 f* ~$ ~' G% b
  660. Change_Select_Item:
    $ {( G- Y2 i$ f' n
  661. Change_Previous_Page:
    7 t: k% K4 e6 X  @6 Y& K5 H
  662. LDA Button_Once
    ( d7 ~0 @" t4 R, d
  663. ORA Button_Once + 1
    2 ~0 ^, K3 z* H0 F
  664. AND #$02# M' S4 ^8 q4 a- s5 X. J3 i. m6 j
  665. BEQ Change_Next_Page
    8 y4 U  ^, F: g" e% p' R
  666. JSR Change_To_Previous_Page
    + S, q2 @/ S9 s  l6 z8 l5 u; Z0 l8 C
  667. Change_Next_Page:, \" O+ }6 b8 n
  668. LDA Button_Once* {- g, p2 t1 W$ L8 \
  669. ORA Button_Once + 19 j- ^* s" P0 l* l/ U8 U
  670. AND #$01, K3 n1 q1 t- l/ H) p
  671. BEQ Change_Previous_Item
    - {" h4 g/ c5 n5 s# m% w) x
  672. JSR Change_To_Next_Page  P1 g) L, }5 U+ v9 B- W) _
  673. Change_Previous_Item:
    : H9 f, q& T: t4 }+ ]
  674. LDA Button_Once* _5 K) O5 J, g3 _
  675. ORA Button_Once + 1% V& F' n# v+ u- K
  676. AND #$08( [* j7 |; a# c0 m- z1 P# J
  677. BEQ Change_Next_Item
    2 K* c4 {( ]1 ], i/ n
  678. JSR Change_To_Previous_Item/ G4 x5 r5 s6 Z# I% l! O7 E
  679. Change_Next_Item:1 c( V5 T( A$ ?' z
  680. LDA Button_Once8 H7 ?/ `! `/ P8 L: b3 Q7 I
  681. ORA Button_Once + 1
    0 G* k# x+ l) w( z' ?& m% b
  682. .IF FC_IS_DOUBLE_PLAYERS! q* e7 P+ ]8 V" J" f* s
  683. AND #$04
    : G- l9 q/ W% S& O5 h" {+ l' X
  684. .ELSE. q0 z8 e" O- g! A$ |0 d% M
  685. AND #$24! G2 E) j# T9 M% Q6 ^
  686. .ENDIF: s* K2 l0 A" O7 Y1 a& I8 r! q
  687. BEQ Change_Select_Item_End) L* ?/ T2 V/ F6 m' o
  688. JSR Change_To_Next_Item
    - p3 k' |' k: u& v, J2 c% x
  689. Change_Select_Item_End:
    - N. q8 }4 Z8 Y8 Y% d
  690. RTS$ c( z) v, ^* i

  691. 6 n2 K: I+ U* M# `2 W; O" c
  692. ;==================================================
    3 r5 s# T% O% _- B. H6 Z) Y
  693. ;切换到上一个选项
    ! I+ k1 u) q6 }) m3 T: d6 g  u
  694. Change_To_Previous_Item:
    & I0 o9 `, n7 _* Z' m3 T5 Y% k" |
  695. LDA FC_Select_Index
    ! J/ P, l: B( l" D" O6 ?$ D
  696. BNE Change_To_Previous_Item_Set5 @( Q8 K: b) }) h2 V/ [
  697. ;----------------------------------------- n" d# U& h0 ?; w
  698. ;切换到末页最后一项
    " v" ~1 n" H% a' \# P, Q* ]
  699. Change_To_Previous_Item_Set_Last_Page:1 F9 ]5 @+ F$ y1 B) y6 t% L
  700. JSR Record_Last_Page_Index
    ' N: @! B4 y, a& g3 @  R8 [
  701. LDA #FC_ITEM_SUM) U( A. m' `$ L) U8 q! d1 F; R/ m- h
  702. STA FC_Select_Index' n8 g) b+ T! v! \; B# z3 a" ~3 p
  703. LDA #FC_PAGE_MAX" n" c5 Y8 `# I  c7 n6 k
  704. STA FC_Page_Cur3 [/ n5 n" ], i1 u
  705. JSR Update_Page_Content
    7 }6 }7 q+ _8 i) l' q- Z8 s1 t
  706. RTS  |3 l0 D  v% Z
  707. ;----------------------------------------
    . V6 Y! B& [# i; `6 g, ^
  708. ;切换到上一个
    : k4 Y* X  i2 d! M. G# e
  709. Change_To_Previous_Item_Set:' N1 x, D' u4 `' c
  710. ;检查是否需要换页9 F: h2 |0 ]( B1 C* L- N( F; c
  711. LDA FC_Select_Index
    # h  ^4 \' Q, U7 v6 T
  712. CMP FC_Page_Cur/ o1 a' K6 o* X! o% K
  713. BNE Change_To_Previous_Item_Set_No_Page
    9 h$ H5 Y) L' ?
  714. ;----------------------------------------
    . x+ B; n' n$ L! D7 ]; F  n
  715. ;切换到上一个(需换页)4 s; g$ L6 P3 {9 b
  716. Change_To_Previous_Item_Set_Page:2 B7 F# I4 i( H9 X. s1 V; u# P
  717. JSR Record_Last_Page_Index, `4 [5 o0 `# t2 L4 q. w1 }
  718. LDA FC_Page_Cur
    # r8 }5 ?4 D) k- n5 }
  719. SEC; M5 P8 Z. y) q$ c
  720. SBC #FC_PAGE_SIZE0 h. T6 l; h, C/ V( M7 Z" C* f
  721. STA FC_Page_Cur# Q6 k+ J, N! V: s1 d
  722. DEC FC_Select_Index
    , r& J* S1 Z$ z$ w" r
  723. JSR Update_Page_Content) {( x% o, }" y5 k& r. c0 i
  724. RTS
      x) K% P6 n7 n1 [
  725. ;----------------------------------------) j  X2 h+ q- M% n- h
  726. ;切换到上一个(无换页)
    % M  A! @2 R* @, a1 O
  727. Change_To_Previous_Item_Set_No_Page:! X: o& C9 @3 x
  728. DEC FC_Select_Index
    % Y# I6 R- B* X: L1 J8 t
  729. RTS( q) a5 ^" J' i6 Y0 L: D
  730. 8 d4 [- Y) N+ N
  731. ;==================================================
    ! B) B% C* X7 x( u1 x
  732. ;切换到下一个选项8 S" {. ^/ Q% ~+ [3 R
  733. Change_To_Next_Item:
    $ x  y5 \. J6 e( }9 o
  734. LDA FC_Select_Index( ^" |1 L0 X' z# B
  735. CMP #FC_ITEM_SUM/ j9 \% c& Y- m  H, X2 [4 c
  736. BNE Change_To_Next_Item_Set
    - A, ^( @- o: ]+ q/ e
  737. ;----------------------------------------( `7 P7 b8 ?( D0 s
  738. ;切换到起始页第一个; z1 e9 K7 \3 ~' R- K' v
  739. Change_To_Next_Item_Set_Begin_Page:
    # G9 O+ O5 f# A( Y& T6 [* P
  740. JSR Record_Last_Page_Index* l& a0 v  @6 c2 }: k
  741. LDA #$00
    ' V3 ?  c' Z" A5 Y3 N3 e7 |4 f
  742. STA FC_Select_Index
    ) _+ {  }! I0 Y9 |8 P1 k, R
  743. STA FC_Page_Cur: Z% ]. J3 W" n) J: \: a% r* l
  744. JSR Update_Page_Content5 W9 M- E3 r3 q- K
  745. RTS
    0 }' {5 G3 L) |8 V9 [/ M) q  s
  746. ;----------------------------------------0 W- I1 J2 g0 R; [) r
  747. ;切换到下一个) D& T+ _" _# j
  748. Change_To_Next_Item_Set:5 U  z. H; x8 |
  749. INC FC_Select_Index
    " j8 Z  ^1 F9 f) D) `
  750. LDA FC_Page_Cur$ w- [: z9 J& p+ Z# Y# u4 y7 \5 g* i
  751. CLC
    , P( `0 x0 l8 `/ _: F2 b% H& K; |
  752. ADC #FC_PAGE_SIZE
    , W( N8 E8 e4 z: B* o
  753. CMP FC_Select_Index
    0 d! [; \* A1 o8 g& e1 O# g
  754. BNE Change_To_Next_Item_Set_End
      K4 c- x' l: h/ x: i& d' u
  755. ;----------------------------------------
    6 C. I: B# G$ I( c5 w3 k3 T
  756. ;切换到下一个(需换页)% {' M8 |- _  v$ I6 w% [
  757. Change_To_Next_Item_Set_Page! c% }( `& P- @# i- m& @
  758. JSR Record_Last_Page_Index* G. n4 ]+ e" Z/ h) Q- F# L
  759. LDA FC_Page_Cur) h1 ?2 D) ^  |' u7 X7 B0 c
  760. CLC- y" ?8 g2 E; t; b, z% w
  761. ADC #FC_PAGE_SIZE
    . [7 X5 X  {# m: b
  762. STA FC_Page_Cur
    : W5 p; q1 \- z; Y1 c- a
  763. JSR Update_Page_Content* F% s0 u" c5 t* x% i
  764. Change_To_Next_Item_Set_End:
    8 z3 w. e, B( ]
  765. RTS0 n  j9 G# Z3 L, ?
  766. ) o% X8 I/ t) t
  767. ;==================================================
    # d  G4 ~% P! V- V2 K
  768. ;切换到上一页
    6 p4 x6 g- G- u) F8 k' f
  769. Change_To_Previous_Page:
    ' g' i3 ^0 e$ z$ m7 d
  770. LDA FC_Page_Cur0 o& A$ _0 M3 M8 a
  771. BEQ Change_To_Previous_Page_Set_Last_Page# L4 D+ m; D9 z
  772. JSR Record_Last_Page_Index8 n8 X( u3 v# z. P' a) w# A, h( I
  773. LDA FC_Page_Cur. S; Z0 u7 n) k0 j
  774. SEC) z4 i/ P7 K- t2 h3 @/ ?; Y, y
  775. SBC #FC_PAGE_SIZE: |( \- i  e2 g- C! S) R
  776. STA FC_Page_Cur
    - {. [. }6 p9 x  a, |
  777. LDA FC_Select_Index  r# L- ?& [7 L$ ~7 J4 ?
  778. SEC! P3 ], y* N+ i& R* M0 J
  779. SBC #FC_PAGE_SIZE# U. b( ?7 j  V) L
  780. STA FC_Select_Index
    # k* H9 w" p/ a: h: T- ~/ n( J
  781. JSR Update_Page_Content. \* ]% E+ }3 U1 E/ q! K' q- q
  782. Change_Select_Last_Page_End:+ I$ U- D! [8 F8 W
  783. RTS
    4 \' T5 ]1 D+ ?
  784. ;----------------------------------------  e; d! j' c& }3 C
  785. ;切换到最后一页
    * X! h9 E# [8 H1 j
  786. Change_To_Previous_Page_Set_Last_Page:
    + n* L3 r- H1 G6 J( w( J
  787. LDA #FC_PAGE_MAX% }* B- f- k/ A2 T
  788. BEQ Change_To_Previous_Page_Set_Begin_Item# z1 N1 \/ [* j# m% l
  789. JSR Record_Last_Page_Index6 ~# W& H* f" c$ r# Z) a' e
  790. LDA FC_Select_Index* O- d! @& ]4 I* ^& S/ R
  791. SEC' W! N2 h" S3 T9 o8 G" |' ^
  792. SBC FC_Page_Cur: I( _# k. i: q6 E: G
  793. CLC6 M: u5 R' ]: _$ W  j8 N9 B
  794. ADC #FC_PAGE_MAX, H! T' n+ F/ ?' \- z
  795. STA FC_Select_Index/ I* p7 Y: {6 L/ S; X: N( a: N
  796. LDA #FC_PAGE_MAX
    ! u8 B2 t% t3 p( U
  797. STA FC_Page_Cur
    , @- @. _; _/ C5 K  Y+ b4 _
  798. LDA FC_Select_Index
    5 e7 I1 X0 a+ |5 X2 ^9 P# Z) Y
  799. CMP #FC_ITEM_SUM, z8 C% l* _& Y- ]) K; c! n& D
  800. BCC Change_To_Previous_Page_Set_Last_Page_End
    ! X: |# E) Q- @
  801. ;----------------------------------------3 P. _5 O! u  z8 |
  802. ;切换到最后一项
    ' O3 I8 C. o7 ~' U
  803. Change_To_Previous_Page_Set_Last_Item- U7 E% `" H& u& t. x& W) j4 }
  804. LDA #FC_ITEM_SUM+ ], r5 j, F6 c( _
  805. STA FC_Select_Index3 o2 u- ^* E. |( _8 c7 Z$ n( w4 o
  806. Change_To_Previous_Page_Set_Last_Page_End:
    / }/ d  @9 u' z* r; \! w- v
  807. JSR Update_Page_Content
    / O6 G0 D4 e, |8 U9 O& B7 M! ?
  808. RTS9 K: }" J/ A/ Q6 Q
  809. ;----------------------------------------  J; P9 l- z4 M
  810. ;切换到起始项(最大页只有一页时)
    # V$ K, ]5 Y" s: M6 q. n
  811. Change_To_Previous_Page_Set_Begin_Item:9 O$ f) b. O3 T
  812. LDA #$00+ U8 Z$ P+ m3 |. r' m
  813. STA FC_Select_Index
    - m7 A& G. D' W. i
  814. RTS
    - K  p  ^- `4 [( Q* o) I
  815. 3 D* i+ a* S. |2 U+ ~0 T! O
  816. ;==================================================
    8 _" ^! y! X* F' I0 e$ L) B
  817. ;切换到下一页
    2 ^* r5 c- v# t1 K; @/ C
  818. Change_To_Next_Page:
    8 c; D7 m/ y( G7 I
  819. LDA #FC_PAGE_MAX
    " E8 R" T4 a! v$ L9 }; Y
  820. BEQ Change_To_Next_Page_Set_Last_Item" J  I, X; y( [% s8 \' }0 r
  821. LDA FC_Page_Cur
    ' g: K: J0 c2 w6 d
  822. CMP #FC_PAGE_MAX2 ^! F' B2 M  E
  823. BEQ Change_To_Next_Page_Set_Begin_Page1 m: O' Q  _6 ~( e9 n3 R6 F. ?& w$ M
  824. ;----------------------------------------! |# M  p3 \9 W7 B7 W8 }: Y3 D
  825. ;切换到下一页* n5 N. d0 v- v1 I: W# F8 e7 `5 J
  826. Change_To_Next_Page_Set:
    # `, S4 q( X! X/ s8 s1 p6 h
  827. JSR Record_Last_Page_Index
    ; H5 r; S7 A$ u$ S- h& Q
  828. LDA FC_Page_Cur
    - q$ q# J- m+ E6 |, N9 R
  829. CLC
    1 e: W' I+ f9 G+ r
  830. ADC #FC_PAGE_SIZE  w3 T$ X+ p8 ~: D, a
  831. STA FC_Page_Cur& Y- [: Z8 Y6 h+ b9 J7 F; {) s( F
  832. LDA FC_Select_Index
    " ]) _% l  `9 z& N% N
  833. CLC
    ! p. j' V8 F; M1 Q3 r# U
  834. ADC #FC_PAGE_SIZE
    . V- N/ l& H* C  L7 u
  835. STA FC_Select_Index
    2 A2 j" Z. K3 @# B/ d8 E
  836. LDA FC_Select_Index3 `4 Y1 A) q# w4 x: N4 u
  837. CMP #FC_ITEM_SUM: v0 v: g* h4 O" L% [! g
  838. BCC Change_To_Next_Page_Set_End
    : Q: |0 l% K  B& ]" H
  839. ;----------------------------------------' @9 s% ]; U1 f3 N
  840. ;切换到最后一项: K" U: b* ^' R& H: f4 O
  841. LDA #FC_ITEM_SUM  x0 x7 Y' }5 e8 {1 D
  842. STA FC_Select_Index
    3 H$ w- C' [8 M7 ]7 ]. L: b
  843. Change_To_Next_Page_Set_End:
    ; {3 h; M. N# z
  844. JSR Update_Page_Content
    2 b, @9 @* |! Q! B
  845. RTS" y, S6 T) O2 j* X. o4 p
  846. ;----------------------------------------
    ( M! C% |# Z# O% K* i6 [
  847. ;切换到起始页' U- g% L9 h0 m
  848. Change_To_Next_Page_Set_Begin_Page:: L1 k2 u+ t5 B% g
  849. JSR Record_Last_Page_Index6 g0 _4 N; [& T5 e; e: g
  850. LDA FC_Select_Index; \. |' Z' E6 l0 L( H1 ]' \
  851. SEC: v/ ?- i' a7 p1 ]- i! i
  852. SBC FC_Page_Cur
    6 n2 |4 b' X3 W
  853. STA FC_Select_Index# e- v  }* t/ @
  854. LDA #$005 x  q; @$ C0 S3 i8 Y
  855. STA FC_Page_Cur3 d$ J7 w$ v8 U$ `
  856. JSR Update_Page_Content+ `7 f* }# H, h) C. n1 n
  857. RTS
    5 V; ?4 R/ c+ A
  858. ;----------------------------------------/ o+ t/ u/ G/ C3 N) b
  859. ;切换到最后一项(最大页只有一页时)
    - B, y6 R# q/ w: g7 j- l& ^
  860. Change_To_Next_Page_Set_Last_Item:
    9 ?% \1 H- B: a' g
  861. LDA #FC_ITEM_SUM; o$ p  C9 M  Y# c& S0 p6 L; A9 U
  862. STA FC_Select_Index
    ' u; M  L9 Z8 z: w& ?) ^
  863. JSR Update_Page_Content
    3 c; i/ r8 c$ u6 E- S
  864. RTS: C0 e8 H! d( a- E

  865. 8 e+ Q) B  \0 j
  866. ;==================================================3 w6 s) J9 \1 q% {+ f4 ~! t' v% C
  867. ;更新页面内容5 k) p' @7 ]  [' K' N
  868. Update_Page_Content:
    % ?( D, c6 ]" C3 x  z( ~
  869. LDA FC_Page_Cur
    9 Y6 V. G& t* g+ W0 D$ S
  870. CMP FC_Page_Old
    - {+ m# J0 T- z# K+ w3 ?
  871. BEQ Change_Update_Page_End, f) T0 y& o. w5 a9 }$ W, Z1 l& ^& M
  872. JSR PPU_Data_Page_Show
    $ [3 v  \0 }4 X/ ^5 h6 D' i
  873. Change_Update_Page_End:
    - P6 r- ~) ~5 [0 x
  874. RTS
    ' }" |# G6 I+ i2 x; Z. Y
  875. , \' g: n! ~2 d" ]
  876. ;==================================================1 N" H/ ^- s8 ^: e# Y
  877. ;记录上次页索引9 q5 F7 D, R' F% G- ~$ |5 v
  878. Record_Last_Page_Index; g: j7 `  N; x4 x
  879. LDA FC_Page_Cur- @/ ?: O* q" Y9 f
  880. STA FC_Page_Old1 r6 \+ n5 Z) ^8 Z7 I# L
  881. RTS3 L; s# S  B2 E0 J  F; Y! X) ^' n

  882. 0 n* b3 n$ u7 g! K6 i1 G
  883. ;==================================================
    5 z9 b. ~: v! i3 w4 b7 O0 P. |2 l
  884. ;显示当前选择项光标$ z1 V  F3 k# I3 J0 Y
  885. Show_Select_Cursor:
    ' F% g3 @; n' S4 k$ s
  886. LDA FC_Select_Index: M, B* C2 S/ A" H9 t, h, J# b
  887. SEC- [( A$ e% d6 U8 b
  888. SBC FC_Page_Cur
    & \+ [+ l# T" \; ~, T6 Y  T4 X2 q
  889. ASL
    ; }3 L/ Q% t! L5 Y7 i
  890. TAY
    7 b: j7 |' Z! _, F) y7 J4 c# V" E& Q
  891. INY
    ; K4 K* w8 g2 O( f# ]: F* |& m
  892. LDA Text_PPU_Addr,Y
    * m, W  K$ m+ n. [& I
  893. AND #$03
    & Y# s$ @4 b' d! x7 p5 P5 o
  894. STA FC_Cursor_Addr_H, N8 l) v9 z( Q4 Q
  895. INX0 _, ], x: j; h, y. p2 R
  896. DEY
    6 {% j. Y( I9 _! \& d: |
  897. LDA Text_PPU_Addr,Y- Z8 `& V/ E- H' I) q
  898. STA FC_Cursor_Addr_L
      b& r( V, i7 R9 |
  899. ;----------------------------------------1 ?1 b9 _5 m8 [/ J! R) k' h  S5 v+ P
  900. ;计算光标X坐标9 Z) L; F& ^& V1 o% m; l
  901. Show_Select_Cursor_Set_X:' H' s. ]" l& x- I+ K; |
  902. LDA FC_Cursor_Addr_L9 v0 q* ^+ [) t% H) k' o
  903. AND #$1F& y. h: }2 D; j( q
  904. ASL! D, b) l9 ?# f( \
  905. ASL0 h8 Y9 D# o9 P- ?% |6 \9 @* n/ s
  906. ASL
    / k' e: t! z5 A# Q3 }
  907. STA FC_Cursor_X
      [4 v, }# }. n; ~5 c+ U/ j  l( Y- @7 o
  908. LDA FC_Cursor_Addr_L
    2 w6 v. B) m  o5 ?8 ]
  909. AND #$E0( _/ h7 Y" {8 r; j
  910. STA FC_Cursor_Addr_L9 ]8 \& k4 k2 J. G3 h" `2 y
  911. ;----------------------------------------! c! F# f! F9 X" U9 T  W: O& J
  912. ;计算光标Y坐标6 s# b$ I- ?8 u& c) `  w
  913. Show_Select_Cursor_Set_Y:
    & ]4 D9 ~1 R6 S7 w" ^+ G7 G
  914. LDX #$05# ^8 D$ u3 c2 G; M' F$ ^
  915. ROR FC_Cursor_Addr_H: P) }, t' o0 j) a/ O1 a, Z
  916. ROR FC_Cursor_Addr_L
    3 G+ r& v! A2 F# V. ?1 g
  917. ROR FC_Cursor_Addr_H
    : D" i# a; B- b" L* P
  918. ROR FC_Cursor_Addr_L
    7 n/ U- r: R! _7 S8 z6 V
  919. LDA FC_Cursor_Addr_L0 }! j$ x% p- n
  920. STA FC_Cursor_Y/ n0 V# [5 D; U: p& m
  921. ;----------------------------------------+ J1 Z! D% m' @
  922. ;写入光标. s1 @: @# n( ]4 L% g  T
  923. Show_Select_Cursor_Set:, U( \( J9 _& J6 e. @
  924. LDA #$00
      [( l1 x7 u" c' [7 s
  925. STA $2003
    2 V- p1 X7 h8 u+ E& m' P
  926. LDA FC_Cursor_Y
    ) V9 q1 \) v; D3 a
  927. SEC4 H) v+ w, ~: U
  928. SBC #FC_CURSOR_OFFSET_Y
    6 y8 B1 r2 \) b: F
  929. STA $2004& G  R- \4 ?' u6 o9 H: N
  930. LDA #FC_CURSOR_TILE. r, T0 X8 j( g/ |0 `$ ?  d
  931. STA $2004. E6 |! ]% G7 c3 p* k% {; C
  932. LDA #$002 c- c# H3 y, p5 S3 x$ o
  933. STA $2004
    % C6 A2 Z+ x* @* C( @
  934. LDA FC_Cursor_X# i( l% i  d* k6 z% j
  935. SEC6 [% T. b, f; g3 n# [: o5 H
  936. SBC #FC_CURSOR_OFFSET_X0 a5 q1 ?- h9 U: A, l9 u
  937. STA $2004
    : o9 u! p) a- A# T0 h2 V: Y
  938. RTS. g- y0 p7 t8 G5 ~
  939. ; j5 M9 d& N! ]3 P. l/ t' C, k) B
  940. ;==================================================
    4 M+ S: R1 ]& S  Y: Q
  941. ;切换功能+ E& s* e, N1 t1 ^
  942. Change_Function:
    , H5 H3 a" c, ?/ D* L% @
  943. ;----------------------------------------. [* v% |" d- m/ j
  944. ;开启功能A
    9 i3 Q" j( y  R3 O
  945. Change_Function_On_A:
    ; ]3 K2 ?7 |5 R4 M
  946. LDA Button_Once
    ! t' M- _+ t$ ?* S/ Y- }
  947. CMP #$40
    $ P9 a; w7 M  s) {7 f9 O5 k# H. ?
  948. BNE Change_Function_On_B# t7 q7 N. ?' q  |# ]! d- F# U
  949. JSR Change_Function_To_On_A+ C! a; U. a8 ?* W& A/ a$ U
  950. JSR Function_Status_Update( H- \& S. }1 j9 X7 {  O  w
  951. ;----------------------------------------/ P  y* M( X; F
  952. ;关闭功能B
    2 `2 ~: p' p3 s1 G, N3 m3 y  V6 W1 }
  953. Change_Function_On_B:/ |3 O. b4 [4 o; ?/ B4 q; s! ~" E
  954. .IF FC_IS_DOUBLE_PLAYERS- e; m3 y# _3 |$ H9 X/ z% g
  955. LDA Button_Once + 1# N! q# u0 p) Z! }' v9 n' {
  956. CMP #$40' Q1 [! t# l. ]7 z# Y, S. y
  957. BNE Change_Function_Off_A' c8 C( O7 g6 m% I4 v
  958. JSR Change_Function_To_On_B0 M  V# x4 }- T# Y( x& s  N3 @
  959. JSR Function_Status_Update( O9 X9 q1 ^5 b* q; f: t
  960. .ENDIF. V& \. h$ W7 T( [2 Y* W
  961. ;----------------------------------------! e3 k0 ?4 Z# j. P
  962. ;关闭功能A4 T4 p: p9 Z3 i/ X
  963. Change_Function_Off_A:% y4 n6 e1 I( f: x& P
  964. LDA Button_Once2 \. ?/ I! U  l
  965. CMP #$80  }( R: v& Y5 W7 G
  966. BNE Change_Function_Off_B- ~# I" b( K1 R; Q( n2 [2 G
  967. JSR Change_Function_To_Off_A5 p2 n% g6 O/ M3 j8 w
  968. JSR Function_Status_Update% w: O8 G# }, o0 G) e. C% y- t
  969. ;----------------------------------------
    0 A4 q$ D  n$ @- e
  970. ;关闭功能B$ K. r) J$ |: m. [( r& E3 {
  971. Change_Function_Off_B:
    + B' h2 U6 ?9 g6 U! w1 w
  972. .IF FC_IS_DOUBLE_PLAYERS
    9 Y2 H$ D6 [) Z" f4 O' Z# [+ ]& H
  973. LDA Button_Once + 1  d- r5 f5 \. _' K  O0 g! B' w
  974. CMP #$80
    ( Z( U3 g( t5 B$ y: L
  975. BNE Change_Function_Swap
    $ J/ T. J  }+ K" y6 {: `
  976. JSR Change_Function_To_Off_B/ G* `' w  n6 i3 F+ ~
  977. JSR Function_Status_Update5 G/ \, B: }+ a' Q2 a8 I1 W
  978. .ENDIF5 M' L0 o8 p0 X5 t+ a5 W
  979. ;==================================================
    . R  w# F8 Z7 c4 E+ q1 o
  980. ;交换开关
    , J9 q5 D0 W1 P% s  m- g( P
  981. Change_Function_Swap:! ]: B* G. p) x( g5 A! ~* U
  982. .IF FC_IS_DOUBLE_PLAYERS* s  o* q- e: J; |
  983. LDA Button_Once
    2 y, E4 L2 `+ m$ X  M: P9 Y
  984. ORA Button_Once + 1
    + p9 }  s; ?  i
  985. CMP #$20
    ; H% L) Q# z& l& p0 ?9 N0 j3 Y0 ]
  986. BNE Change_Function_End
    & t. C% f9 P/ O% F
  987. JSR Change_Function_To_Swap
    / x* Y$ w6 y$ ?6 H4 K; C
  988. JSR Function_Status_Update' M6 [2 W4 \3 |
  989. .ENDIF
    & O- n0 e4 ]" m
  990. Change_Function_End:5 y  c! R- h% d/ n0 v9 r, l3 I8 p, [/ |
  991. RTS; n* y1 d1 \/ x/ `8 j
  992. ) @7 v7 q  k" u
  993. ;==================================================
    7 c, d! f; B6 k
  994. ;交换开关状态
    ! g! Q- f9 |% _2 V5 E) _, \  p
  995. Change_Function_To_Swap:( D0 @& e1 y1 e
  996. .IF FC_IS_DOUBLE_PLAYERS9 f7 X) m/ M, k+ W2 v+ U! \5 W
  997. LDA FC_Select_Index4 D# {2 H( y- c6 c
  998. SEC
    5 r: \, w" w9 f( R" t% I
  999. SBC FC_Page_Cur
    # s& W$ V3 f8 H6 }+ F8 z" ]
  1000. STA FC_Select_Temp. {: j3 v* N* w6 |
  1001. JSR Set_Function_Port+ V4 R( `2 \) V' T6 R; P$ h
  1002. LDY #$00/ C% x- q3 h: P- l" n
  1003. LDX FC_Select_Index& k8 x; v6 e9 y; y: {
  1004. LDA (FC_Data_Port_A_L),Y- v" q( u* X5 x9 v3 o' N
  1005. EOR (FC_Data_Port_B_L),Y
    $ ?, F5 R8 ]- j* F
  1006. AND Function_Check,X4 r; G$ ?- N  k/ K  \# _' Q4 U
  1007. BEQ Change_Function_To_Swap_End
    " k- M' L# Y: Q1 r- R. i" y; M
  1008. LDA (FC_Data_Port_A_L),Y# A7 P/ h* R. C& j( m
  1009. EOR Function_Check,X
    8 U& `% @- a* p
  1010. STA (FC_Data_Port_A_L),Y0 w$ L4 g( i% y6 [- M
  1011. LDA (FC_Data_Port_B_L),Y: Y) j/ a9 G/ k2 R( g- @
  1012. EOR Function_Check,X+ l* Z" G; {+ c/ D8 [
  1013. STA (FC_Data_Port_B_L),Y% x: X* p  t3 {
  1014. Change_Function_To_Swap_End:
    + W. {5 n0 Y) a4 y& r0 W
  1015. RTS
    * f5 u1 C$ \0 |- ~5 U+ M
  1016. .ENDIF) o- |5 a- r* x) S# G+ Q" H
  1017. 1 j; S$ K8 O0 `2 z4 h" F1 c

  1018. * j, J+ b; v8 c6 f
  1019. ;==================================================
    + N9 J% z2 X" P) g7 K( I: b" g0 `
  1020. ;更新功能状态9 J9 z) J" G0 K8 G
  1021. Function_Status_Update:7 ~' n& _) M+ b
  1022. LDA FC_Select_Index
    3 y( d" d" ?) u! [& F" E  Y+ s
  1023. SEC
    3 Y' {; @- h0 s. `5 X) l: |; _
  1024. SBC FC_Page_Cur
    - `6 `: n2 H$ v( }4 s$ x
  1025. STA FC_Select_Temp8 B& }! Y6 {7 M
  1026. JSR Function_Status_Show6 U" A5 f3 f5 t7 h: {8 f1 [
  1027. RTS6 ]: L5 s2 j- F0 T* a' X

  1028. % W) P& t; m( k% X
  1029. ;==================================================
    1 y/ |" t, T2 z9 i
  1030. ;设置功能地址端口
    , z& Y8 Q& H( s" B$ Y( q4 Z
  1031. Set_Function_Port:2 z$ l, ?0 z* M3 c! I( ]
  1032. LDA FC_Select_Temp0 k8 Y9 H1 o; U" l" {+ G" a
  1033. CLC% Q( U$ I" E& q/ e6 |$ v
  1034. ADC FC_Page_Cur/ r! ^& i; d% S  o+ i* d$ F7 r& c
  1035. ASL
    ( v/ ]7 y- l, p3 R0 W
  1036. TAY
    * b! J4 B& k" A/ R5 v9 {
  1037. INY
    $ E1 b/ G* P5 `% g2 c9 Q) p* P
  1038. LDA Function_Addr_A,Y. v( ?$ ~  D' \% q& ]0 o8 a
  1039. STA FC_Data_Port_A_H
    3 T" H% P3 x. q/ C* h) [
  1040. .IF FC_IS_DOUBLE_PLAYERS
    - x/ l0 \! G4 b5 j- B$ ?6 x
  1041. LDA Function_Addr_B,Y
    4 q4 ^% J0 z' O2 F2 Y7 A
  1042. STA FC_Data_Port_B_H5 n$ H; q: P2 T" h+ K2 P
  1043. .ENDIF! l  S9 x, c" d( {
  1044. DEY
    1 }& j7 Y. n2 K
  1045. LDA Function_Addr_A,Y
    ; N' e/ l, i! G! @4 g3 b- K
  1046. STA FC_Data_Port_A_L( j' X  {: R7 D4 s) Z' C5 H- P
  1047. .IF FC_IS_DOUBLE_PLAYERS
    - ~  o; t7 L* G" k
  1048. LDA Function_Addr_B,Y0 h& U5 d, f# D' d
  1049. STA FC_Data_Port_B_L# o9 g) p' e1 s
  1050. .ENDIF2 o: u  P4 _& M8 v! Y( W5 E1 v
  1051. RTS
    3 s+ ]& }& a6 `3 N7 k
  1052. " F" y* y( e$ Q. b; l' K8 ~/ I
  1053. ;==================================================
    / d0 ?5 r) M9 S
  1054. ;设置功能临时索引$ B! o* m! v  A$ u$ C% B- a
  1055. Set_Function_Temp_Index:
    : o5 y/ d5 Y8 p9 t8 X- n
  1056. LDA FC_Select_Index; M7 r% w3 T$ V# s6 C
  1057. SEC
    5 N1 N5 t3 N5 z$ m* }( r
  1058. SBC FC_Page_Cur
    - v( J. p! m4 H1 d& ~6 M
  1059. STA FC_Select_Temp6 y" F- Q" Z6 {; C. K( s0 f
  1060. RTS) k# J1 j/ s( _, l+ Z) |% k7 s
  1061. : [- X9 c6 `! B! E9 Y1 y
  1062. ;==================================================
    / q: P" F1 v* u0 S
  1063. ;开启功能A
    8 `2 g: N9 z0 n' z+ i3 p
  1064. Change_Function_To_On_A:* V4 B- i& f# g. |% F
  1065. JSR Set_Function_Temp_Index
    ( v2 \0 E5 x$ s) R
  1066. JSR Set_Function_Port+ A) g8 f4 e! j% f
  1067. LDX FC_Select_Index
    9 u# @% ?2 x; b  Z
  1068. LDY #$00
    . W! S' I" q( z( y
  1069. LDA (FC_Data_Port_A_L),Y5 v2 i, b) x7 ]: f0 b6 k
  1070. ORA Function_Check,X
    9 T. `9 G" ^3 E0 ^
  1071. STA (FC_Data_Port_A_L),Y- Y# r0 T; |5 W3 x
  1072. RTS
    7 X5 G' i. k5 ]5 a' {' ^* m# ]: T
  1073. ;----------------------------------------
    2 }$ O. t1 T% R2 j9 I
  1074. ;开启功能B
    $ P1 m5 v: ]: V
  1075. .IF FC_IS_DOUBLE_PLAYERS
    ( T5 J5 ?- u: t9 ^2 j2 P
  1076. Change_Function_To_On_B:3 |% D7 M2 m; T8 O! n5 ~# ^
  1077. JSR Set_Function_Temp_Index0 Y% \7 V; {6 I
  1078. JSR Set_Function_Port1 a& U$ Y4 ]# ]( Y! x
  1079. LDX FC_Select_Index
    # G+ m% W: d+ y( J4 v
  1080. LDY #$00
    * E% K" u4 R+ Z
  1081. LDA (FC_Data_Port_B_L),Y$ Z7 A% ]/ V' x; v+ Y7 U
  1082. ORA Function_Check,X7 o% m0 J3 ~, M- x. }7 g  X8 q
  1083. STA (FC_Data_Port_B_L),Y
    6 _% K3 @  F" e# l/ }# I$ i
  1084. RTS9 c3 d1 p, E5 {$ v/ X' m$ N
  1085. .ENDIF  n$ T  Y' L( j+ D0 K: f
  1086. ;----------------------------------------
    . x- h! N, [7 X$ `( a6 T! r
  1087. ;关闭功能A( b9 y+ n7 V4 p9 ^  N# a
  1088. Change_Function_To_Off_A:
    , O( g8 O) n  p4 Z* T
  1089. JSR Set_Function_Temp_Index
    ) I# d: f; H  p6 g- a9 ~
  1090. JSR Set_Function_Port
    - m; P  t3 x5 u: X5 e# t/ ]* X
  1091. LDX FC_Select_Index+ v. N: k, e* V7 V% O
  1092. LDY #$00
    + y; l; T/ h" |8 a, ?' E
  1093. LDA Function_Check,X8 U- L) f1 l% T& K
  1094. EOR #$FF
    " L- j$ R( X7 I" g+ B
  1095. AND (FC_Data_Port_A_L),Y9 Q+ ?+ P' u$ V/ r& |, b
  1096. STA (FC_Data_Port_A_L),Y
    % d. M/ ?# z. m8 j
  1097. RTS  ], }+ @+ ^/ K) G" t
  1098. ;----------------------------------------
    / ~6 E9 F3 X. d& Y) G: x
  1099. ;关闭功能B
    $ l/ B& d3 r8 N: ~$ S2 X4 Q: ?
  1100. .IF FC_IS_DOUBLE_PLAYERS2 o7 G' K  L$ O* N6 K$ L
  1101. Change_Function_To_Off_B:
    8 z5 S$ v3 a. h: M; J# H  Y; o+ u
  1102. JSR Set_Function_Temp_Index
    " v7 S9 C& I" H. v/ P4 c
  1103. JSR Set_Function_Port( ]) G) [0 I1 h+ p( Z
  1104. LDX FC_Select_Index
    / N: y- x  N* x8 _+ ]% z* a/ j( H
  1105. LDY #$004 o# S& b  I& k2 n/ ]
  1106. LDA Function_Check,X9 `& M" |6 y  M' u0 Q! B. c
  1107. EOR #$FF
    ) c4 ]$ w1 s3 p$ U6 B, n
  1108. AND (FC_Data_Port_B_L),Y
    + D9 K$ i) T, y6 |6 I
  1109. STA (FC_Data_Port_B_L),Y
    / X. M7 }; A0 |2 O
  1110. RTS
    $ s, v8 |4 f% v
  1111. .ENDIF; F6 g- F* x6 B( ~& _

  1112. 7 z1 t: r7 X# [, H
  1113. ;==================================================) }; w, |8 ?" I
  1114. ;设置功能状态PPU地址2 N+ I* T3 x+ q9 a
  1115. Set_Function_Status_Addr:
    , x  F1 ~+ O+ e3 M3 q4 }
  1116. LDX FC_PPU_Cursor% R( D5 F1 |  ?, l+ E+ u2 w
  1117. LDA FC_Select_Temp. q! s9 s. a! y6 h1 P
  1118. ASL
    4 B/ {4 c0 J# H$ f. X8 P
  1119. TAY
    + u: |7 Q" K) B6 H9 W, z. r. R7 M
  1120. INY
    / G) j" g. S+ k9 m) T" p  j) i
  1121. LDA Text_PPU_Addr,Y4 M+ K5 @" Q, O  f
  1122. STA FC_PPU_Buffer,X* H4 x- I( W$ T( [% Z
  1123. INX
    3 K0 r# s% N! Q
  1124. DEY
    , ^' B. c, \7 g" i. U! ~( S
  1125. LDA Text_PPU_Addr,Y
    ( t4 `5 r2 X* g, V
  1126. CLC
    ! b! i9 P2 y' @; V  f
  1127. ADC #FC_FUNCTION_OFFSET2 ]/ P/ F8 N' E, u/ P1 Q
  1128. STA FC_PPU_Buffer,X
    6 l3 N. D/ s2 O
  1129. INX. v8 m% \0 v8 M/ S4 _1 z
  1130. .IF FC_IS_DOUBLE_PLAYERS( k% G) d( [5 ~, T4 ?* w) s5 a
  1131. LDA #$02) T& }4 N2 n; r. T  ~" S$ |4 \- {& m
  1132. .ELSE  ?" G) K& e. P2 ~6 j% Z5 S
  1133. LDA #$01! f% z! Z9 M* _2 u, y, P) i9 X1 I* v4 U+ v
  1134. .ENDIF% m5 t; T& D5 O) r4 ]4 E) b
  1135. STA FC_PPU_Buffer,X
    ' ?0 V5 t' A2 k7 L6 g* R
  1136. INX
    # w9 ?8 Q3 v: j9 C0 Y0 ?4 y3 M
  1137. STX FC_PPU_Cursor
    8 V  G3 o" ]6 I2 c6 ~- N3 V+ f
  1138. RTS
    % v- W5 x8 r3 |% E" ^$ [( `5 A
  1139. " u& p/ Y, o" B8 y6 h
  1140. ;==================================================
    . h' L9 U& Z/ v: R& j
  1141. ;获取当前选择索引* r8 z0 _8 E+ v" c
  1142. Get_Select_Index:
      }+ c, }; i/ ]
  1143. LDA FC_Select_Temp
    " e+ G$ l' K: d3 b
  1144. CLC
    2 G0 k1 `$ x8 Q2 ]4 Y
  1145. ADC FC_Page_Cur/ u- ~4 F$ `3 v
  1146. TAX6 u0 f" d5 T( F0 O* y) k% F8 G
  1147. RTS
    2 R# x' @+ b& ]1 V
  1148. 4 b' C$ C$ v- U6 j! Q$ z  s
  1149. ;==================================================: ]: f0 h  D6 N8 Q, B1 I/ j' d6 u
  1150. ;清除状态文本
    , a7 V" z+ V, I7 B, V' ]
  1151. Function_Status_Clean:* O/ b0 v1 J# P! H
  1152. LDA #FC_PPU_MODE_CNTC! r- t+ S/ e  M8 a
  1153. JSR Set_PPU_Mode; G$ b9 a3 @7 t' _4 q! w
  1154. JSR Set_Function_Status_Addr
    : z9 o- |* \% K" ]8 q3 U
  1155. RTS+ @6 l- x! h( |* r* v, K
  1156. 3 W: I* N' T4 |, {+ o* ]
  1157. ;==================================================& D( G- X. N, U  i: n- h
  1158. ;显示开关状态, g$ P3 g& b5 L3 m
  1159. Function_Status_Show:1 o% G  {3 {6 n- D( t1 C
  1160. JSR Get_Select_Index" A- K# T" v) |1 |+ n" {
  1161. CPX #FC_ITEM_SUM
    ; K: l/ j% Q' s7 V- B7 d
  1162. BEQ Function_Status_Show_Set
    $ i; H. i/ J2 |, d/ v0 D: B  B
  1163. BCS Function_Status_Show_End
    . P+ S  M- k9 ^" W8 _
  1164. Function_Status_Show_Set:* H: k6 r& \+ b" ?5 K6 X
  1165. LDA #FC_PPU_MODE_CNTL
    $ L" M; G+ |6 k1 z
  1166. JSR Set_PPU_Mode
    ; W9 T1 N/ C2 {& g+ H
  1167. JSR Get_Select_Index8 z% W6 l2 ?$ d/ e
  1168. JSR Set_Function_Status_Addr5 E) w+ u+ O& n! h2 n" c
  1169. JSR Set_Function_Port
    ' r9 m: F9 p# g% C! M) r/ H, T
  1170. JSR Function_Status_Show_Check_A, a' w% L1 `4 Y6 p& R
  1171. .IF FC_IS_DOUBLE_PLAYERS9 l4 N3 A: v" n" H5 M# D( k
  1172. JSR Function_Status_Show_Check_B
    & i8 s+ |! z5 D( }* D8 p& L2 _" o$ |( h
  1173. .ENDIF
    & _  B; L# z  V8 G: F. v
  1174. Function_Status_Show_End:. |+ x6 H- r/ N0 F
  1175. RTS
    ' Q6 v5 u7 z& H! M0 v) l+ R
  1176. ;----------------------------------------: Q% U6 w) a/ r( j# X* p" ^0 t0 h
  1177. ;检查功能A状态8 r/ ~+ ~0 v- L( i+ O9 p# a
  1178. Function_Status_Show_Check_A:
    ) n( t/ l# s/ e" Z7 M2 U
  1179. JSR Get_Select_Index
    9 t4 q, G1 s! u
  1180. LDY #$006 a# f) c( Q. [6 _" i
  1181. LDA (FC_Data_Port_A_L),Y5 K: I6 |5 V' Y) \
  1182. AND Function_Check,X; K5 J3 H: X. _6 _9 D
  1183. BEQ Show_Function_Status_Off
    2 g: C. R( _% d4 o" s9 e9 I7 c0 I
  1184. JSR Show_Function_Status_On' J) |. v' I7 ?4 k$ @
  1185. RTS# [% d8 j- _  J4 L& w" ?' H
  1186. ;----------------------------------------
    - i6 C+ T5 g8 _2 I% u/ _
  1187. ;检查功能B状态( u* o1 ^: j- P) x5 c8 d
  1188. .IF FC_IS_DOUBLE_PLAYERS
    ' a8 T) e) C$ B8 k% |3 W  M) c
  1189. Function_Status_Show_Check_B:
    ' `: G7 C0 A0 `, f" U- p
  1190. JSR Get_Select_Index
    4 w( `9 B3 N+ X% P
  1191. LDY #$00
    5 T+ f" R/ n3 \7 ]* e1 X% I
  1192. LDA (FC_Data_Port_B_L),Y
    - I7 H% R- V. d3 E7 t
  1193. AND Function_Check,X
    ' z3 S( @4 E/ J$ I1 y% a8 f7 _( O
  1194. BEQ Show_Function_Status_Off
    ) a0 z2 Q, I# s; Z
  1195. JSR Show_Function_Status_On
    * G& r& A- X1 F
  1196. RTS; ?; E: z. S+ ]* f  x' h
  1197. .ENDIF
    , _6 h; T* X) v/ t$ K" ~. {' d

  1198. . b( j! r! q9 V8 b/ W
  1199. ;----------------------------------------" m( e- m4 Z- f) }$ ^/ s9 H" }* Y: A
  1200. ;显示功能开启状态, I6 }, W* v# r. Y& w
  1201. Show_Function_Status_On:# x$ R2 ~- c* @& c) Z" `  W1 W
  1202. LDX FC_PPU_Cursor3 o3 R6 k; Q8 b: l2 s
  1203. LDA #FC_ON_TILE
    - T* {- z4 h  ^5 Y
  1204. STA FC_PPU_Buffer,X1 q* [( H# b# y: R9 O* x* X' T+ e( G6 C
  1205. INX
    2 H3 }5 e: p1 T
  1206. STX FC_PPU_Cursor
      b, y. ]( N" L9 k& X
  1207. RTS" |4 U( {9 ?# M6 s
  1208. ;----------------------------------------
    ) x' y) U2 k8 v% a
  1209. ;显示功能关闭状态% I3 E6 Y1 `0 f. {7 p
  1210. Show_Function_Status_Off:
    1 p) O: Z9 J, k4 n# x# V9 P
  1211. LDX FC_PPU_Cursor: Y$ S0 i- q) g0 {9 K5 t
  1212. LDA #FC_OFF_TILE5 Y: j  C  j  X( _4 k- o+ v% e$ n
  1213. STA FC_PPU_Buffer,X
    4 v6 p* ]$ g& y4 B8 L4 |! i; o, A
  1214. INX* w& e0 `( X  L8 F
  1215. STX FC_PPU_Cursor
    9 I% k9 U' x1 M% N$ c
  1216. RTS
    " n6 o, U) v! _- Z) T1 m
  1217. + L2 W( N. Y  ], q1 C
  1218. 5 u% E7 k) u6 @7 ^; r
  1219. ;-------------------------------------------------------------
    2 |" O/ g) N/ @
  1220. FC_Data_Copy:    ;数据拷贝参数设置
    , y/ I% A) }) @( d
  1221. STX FC_Cpy_Port_L
    / e, U7 @- _0 [7 f5 G1 Q6 R7 W  x
  1222. STY FC_Cpy_Port_H8 G- Y7 r- {- g$ ~& n( u& N  H
  1223. LDY #$00* f# b) X# R' W
  1224. LDX #$06
    9 x! b( v$ y4 P' E' ~& E" R, r
  1225. FC_Data_Copy_Addr_Set:    ;从指定地址读入参数* b# x: J& b. |4 k/ \
  1226. LDA (FC_Cpy_Port_L),Y
    8 t' k/ k% v  c
  1227. STA FC_Cpy_From_L,Y
    ' x9 Q0 W3 A  W1 h9 K
  1228. INY) N5 X' u9 O- E* A! `& U
  1229. DEX; F1 L& N3 O/ [. B4 S: _8 J
  1230. BNE FC_Data_Copy_Addr_Set
    " \% q# Y  i8 T3 [- D
  1231. LDA (FC_Cpy_Port_L),Y) B' J. i! `8 M6 u. s
  1232. CLV& `% s4 v4 }$ E* j4 l
  1233. LDY #$00
    1 l4 b2 E9 a' \6 L8 B; W6 u; G
  1234. ;----------------------------------3 X; Y) ?: @) y, D/ O- z
  1235. FC_Data_Copy_Mode:   ;复制模式校验
    , x3 [$ [1 {# O5 P8 o+ F  f
  1236. CMP #FC_MODE_RAM_TO_RAM
    $ Q/ E0 l3 w. m. v- }- B
  1237. BEQ FC_Ram_To_Ram_Mode0 `2 @* R" ^* X6 m
  1238. CMP #FC_MODE_RAM_TO_PPU
    8 d7 S' u: l/ ~# J2 \
  1239. BEQ FC_Ram_To_Ppu_Mode" i9 S& J' i+ P: }3 D
  1240. CMP #FC_MODE_PPU_TO_RAM
    : ?8 x6 c0 j  n% D; X2 c1 y; p
  1241. BEQ FC_Ppu_To_Ram_Mode) x% `" q4 ?. u
  1242. CMP #FC_MODE_PPU_CLEAR
    9 I+ B# Q8 ]7 G% s) f: B% L" T
  1243. BEQ FC_Ppu_Clear_Mode8 b( e0 `# Q) x4 s9 O* d! V  z
  1244. RTS' \* x1 r* C; u* }  g( V  r
  1245. ;----------------------------------------
    5 F! ]/ C: y9 c! P
  1246. FC_Ram_To_Ram_Mode:   ;复制RAM到RAM模式
    , Z2 a# m) E$ n  h( W
  1247. LDX FC_Cpy_Count_L
    ) _1 T2 U5 h4 @% |& i3 X0 M" E( c
  1248. INX
    5 W+ h' e7 x. X8 U4 e
  1249. FC_Ram_To_Ram_Count:   ;剩余计数检查
    ; n4 ^0 }7 ^3 n; {$ p( E( _& \6 z
  1250. DEX% Y+ [* z0 k1 |/ a
  1251. BNE FC_Ram_To_Ram_Copy
    9 w7 a! {3 Q% U8 C" x1 M  g
  1252. DEC FC_Cpy_Count_H
    # t/ D* ?7 A" ]. l( n# ?
  1253. BMI FC_Ram_To_Ram_Over) P9 F! f0 K8 L9 o6 h  \
  1254. FC_Ram_To_Ram_Copy:   ;开始复制数据
    " |; l9 w8 n' O6 k
  1255. LDA (FC_Cpy_From_L),Y/ A: n$ u# o9 F- O; q
  1256. STA (FC_Cpy_To_L),Y
    % @- M5 b/ W5 Q1 i4 w
  1257. FC_Ram_To_Ram_From_Set:    ;源地址递增
    ) K0 z# t' x8 ?" C! M
  1258. INY
    * A4 r2 X( T0 ?
  1259. BNE FC_Ram_To_Ram_Count# o- G" \0 }9 w# Q0 y# y% |8 L* L( m0 Y
  1260. INC FC_Cpy_To_H7 C  n) ~, ?( K+ ^# {  K  c$ r
  1261. INC FC_Cpy_From_H7 d, N. D! S6 e% z
  1262. BVC FC_Ram_To_Ram_Count
    0 ^7 p# f: ?. |$ V8 T
  1263. FC_Ram_To_Ram_Over:    ;结束数据复制
    $ n- D; T* R2 G9 s+ c/ H# {
  1264. RTS
    6 E' q" z8 o- c" S, N% G

  1265. - B. l6 J1 T: \' [" y* S' n
  1266. ;----------------------------------------. U, W' J4 j7 C% `, f1 W* f
  1267. FC_Ram_To_Ppu_Mode:   ;复制RAM到PPU模式
    2 b& {1 b$ N8 A* h! F. M8 v( P
  1268. LDA FC_Cpy_To_H: b6 `" A% d  r) |# m# i& B1 B. Q
  1269. STA $2006
    5 J5 [8 X- V2 h! U- M
  1270. LDA FC_Cpy_To_L
    4 g, x) \( R2 n; {/ E
  1271. STA $2006
    # A0 F% n# }  O" r1 E. g
  1272. LDX FC_Cpy_Count_L
    ( T: _0 [5 v5 v# G7 h
  1273. INX
    0 P  ?2 r& {* r8 d+ a
  1274. FC_Ram_To_Ppu_Count:   ;剩余计数检查
    2 G% ~+ x& q- `1 [, h: g" S: J# G# `
  1275. DEX
      q9 A7 r. u1 I$ a7 F, v; `) m
  1276. BNE FC_Ram_To_Ppu_Copy9 `2 w# N6 r* q/ s
  1277. DEC FC_Cpy_Count_H
    " e5 [7 N1 y! N7 J# O
  1278. BMI FC_Ram_To_Ppu_Over
    ! e7 a" h$ o5 r$ i6 ^/ D
  1279. FC_Ram_To_Ppu_Copy:   ;开始复制数据
    / @9 p: }/ K. A, K2 E% M8 D
  1280. LDA (FC_Cpy_From_L),Y
    1 S3 k; y2 r' Z: d
  1281. STA $20076 B8 d" ~' U6 r
  1282. FC_Ram_To_Ppu_From_Set:    ;源地址递增
    ; L3 M# y: d6 A: K. r
  1283. INY" {2 m1 {5 n+ y* B. o* A
  1284. BNE FC_Ram_To_Ppu_Count' }+ y7 O4 Z7 \) Y! ]+ w
  1285. INC FC_Cpy_From_H) H( h/ ]4 X: _* d
  1286. BVC FC_Ram_To_Ppu_Count! I' f, [6 b8 I" i
  1287. FC_Ram_To_Ppu_Over:    ;结束数据复制
    ( |& D* R2 l- k0 o1 d& j
  1288. RTS+ V/ V2 u0 l" `* Z& H

  1289. 5 z# {7 N- h8 ~" A# d
  1290. ;----------------------------------------7 }- v0 {: m: l6 ~6 z
  1291. FC_Ppu_To_Ram_Mode:   ;复制PPU到RAM模式
    ( l$ y2 `' x; R6 r2 ~; U6 e
  1292. LDA FC_Cpy_From_H
    + ^2 _4 A- _0 c: j/ m
  1293. STA $2006
    : e3 W2 ]0 z8 {2 O' H& y2 N& g
  1294. LDA FC_Cpy_From_L
    & d# ]9 p3 S& A0 z! u% W8 y
  1295. STA $2006
    ! @: I& j/ R3 U9 L1 D4 N$ w* E
  1296. LDA $2007
    - W4 U+ h" e; F# B
  1297. LDX FC_Cpy_Count_L% V7 Q+ w3 z7 a  U4 o0 \- S
  1298. INX
    : \  `& E# X8 y, Z
  1299. FC_Ppu_To_Ram_Count:   ;剩余计数检查
    ) O! K& I- b* V( W, t
  1300. DEX* H) z% D& Q7 Q# e( A# x2 I" y
  1301. BNE FC_Ppu_To_Ram_Copy  H6 Y4 l$ A) U
  1302. DEC FC_Cpy_Count_H4 R$ V* _- o  |) _5 `2 a
  1303. BMI FC_Ppu_To_Ram_Over
    8 o1 g- s$ _2 }* C
  1304. FC_Ppu_To_Ram_Copy:   ;开始复制数据
      F" s9 D+ W5 n3 R% E
  1305. LDA $20076 q7 @3 |$ Y' Z3 L
  1306. STA (FC_Cpy_To_L),Y2 Q( x! o, Q% ]) {
  1307. FC_Ppu_To_Ram_To_Set:    ;目的地址递增
    3 ?/ v  P  v% Q. L
  1308. INY
    , r& g( e8 Q) o8 S
  1309. BNE FC_Ppu_To_Ram_Count
    , o. j& n& P* n5 W- P0 ?- Z1 X
  1310. INC FC_Cpy_To_H. y8 B/ r0 a% p/ b
  1311. BVC FC_Ppu_To_Ram_Count4 d7 z9 ]9 K( ~
  1312. FC_Ppu_To_Ram_Over:    ;结束数据复制
    0 C+ ^6 u; G6 a$ |% e+ D1 ?$ R
  1313. RTS
    ( n/ _& P2 f, ]; O
  1314. 0 P) o* [, x. S1 U8 H% k! I& R& {2 C
  1315. ;----------------------------------------' j9 M3 Y5 T+ \" t# A  `
  1316. FC_Ppu_Clear_Mode:   ;清除PPU模式$ ^% f4 m. o" G* }0 i8 M4 w
  1317. LDA FC_Cpy_To_H9 I! c+ `4 c  g$ O
  1318. STA $2006) r4 j: Z- [' A( I! w% ?/ H
  1319. LDA FC_Cpy_To_L
    8 H# h9 T( n; |1 s( {' K1 ]( X
  1320. STA $2006( A0 V! J5 ]+ L2 Q
  1321. LDX FC_Cpy_Count_H
    & {3 w* W# h$ S2 x
  1322. LDY FC_Cpy_Count_L. o: }# p3 ^; {' Y* o
  1323. LDA FC_Clear_Val
    $ h* M: G! j; \' c& M( o) _2 _! ]
  1324. FC_Ppu_Clear_Count:   ;剩余计数检查
    3 J* N4 y$ Z% ?: M
  1325. BNE FC_Ppu_Clear_Copy6 S1 I# @6 l. [0 j0 |$ G( Q
  1326. DEX
    ) U' N4 @/ c2 e( _% j
  1327. BMI FC_Ppu_Clear_Over3 x9 q2 a7 c7 |! D6 X- \& L
  1328. FC_Ppu_Clear_Copy:   ;开始清除PPU& U  f% M4 t& a. g
  1329. STA $2007  Y% l* k4 F$ t
  1330. DEY
    + o$ B3 q" M! _  c# @& O- G
  1331. BVC FC_Ppu_Clear_Count5 y7 C# n2 ~0 o6 k- ^
  1332. FC_Ppu_Clear_Over:    ;结束数据复制
    1 a1 n: k/ C6 m) a  g6 i
  1333. RTS* U: N' |" q8 y. F9 C9 F, n6 L

  1334. " t8 a+ G0 z) b4 x; v# C
  1335. ;==================================================5 T% ?3 p" z- [4 Q/ G6 |
  1336. ;保存RAM数据
    ) E+ r0 A2 d( C, U7 W
  1337. Save_Ram:
    - e* Y8 h5 O# n$ h3 o
  1338. LDX #<Save_Ram_Data$ c+ D* m! |* S& `  j* ?
  1339. LDY #>Save_Ram_Data, V: o7 h: ]7 q
  1340. JSR FC_Data_Copy+ j/ n+ E. |& Z# \+ y
  1341. RTS
    8 Q* V9 C2 a: n# A( v! b5 K
  1342. * n! q! ]9 S9 q& ]3 y  u; C2 b5 X  Q
  1343. ;加载RAM数据0 q/ O) P, S- _. K- [0 S
  1344. Load_Ram:+ v4 \+ a% K3 r; `9 J, `+ W1 m
  1345. LDX #<Load_Ram_Data
    / }" `: B: D0 J! Y/ m
  1346. LDY #>Load_Ram_Data
    * z) m* N/ a3 K$ f6 G8 x1 P1 ~
  1347. JSR FC_Data_Copy$ j- L/ ^& i, o/ l8 E( v6 f
  1348. RTS7 T7 L% U4 w! J
  1349. / E3 Z, V5 y4 l% `% d
  1350. ;保存PPU数据. e8 W! w. g# ~& u
  1351. Save_Ppu:
    % ^, a) `4 L# O$ T! u
  1352. LDX #<Save_PPU_Data$ `3 k1 P- B5 m+ N+ a+ X" w# x. Y
  1353. LDY #>Save_PPU_Data7 I! e. @0 T8 n  M
  1354. JSR FC_Data_Copy5 g+ _! b1 W" \6 u
  1355. RTS; M! ^% \* q7 \; B5 ?

  1356. 1 w% y% y% o+ i
  1357. ;加载PPU数据& A  F0 F' b  }  T) W! K
  1358. Load_Ppu:9 X1 s: U" T' \) R) t
  1359. LDX #<Load_PPU_Data
      I# ]5 Q, w# h# W/ u, Q# G5 Q
  1360. LDY #>Load_PPU_Data
    ( [- [( N, R$ x! l7 l- N/ N
  1361. JSR FC_Data_Copy* D* W( h2 P% r) f
  1362. RTS; f1 }, \* v; E# l# ?
  1363. . ~/ D- M* W( e$ A& P* h( C
  1364. ;清空PPU数据
    ( H) J: }: t! |. O0 }* {2 c
  1365. Clear_Ppu:' _4 Y" [4 I9 i6 y/ D
  1366. LDX #<Cln_PPU_Data
    2 t% ^% j1 Q; q
  1367. LDY #>Cln_PPU_Data) U) i0 _& `: N9 g6 D  L
  1368. JSR FC_Data_Copy
    ) D/ L9 d/ x/ ]; t% p- e% Y
  1369. RTS8 f2 s% y* h0 @7 s- \9 [  G4 L
  1370. 1 u; w/ P- X8 V( d
  1371. ;==================================================- l- w! p' {+ v! V
  1372. ;数据配置- I' |+ {! l3 T" p3 t. Q. ?+ X) L
  1373. Save_Ram_Data:
    0 w0 C4 k! J( ]8 i2 T( y, M- \
  1374. .DB $00,$03,$00,$63,$00,$01,FC_MODE_RAM_TO_RAM6 L" Y' G$ r4 M- E/ t' z
  1375. Load_Ram_Data:8 u5 z' x- G. C) \8 |
  1376. .DB $00,$63,$00,$03,$00,$01,FC_MODE_RAM_TO_RAM
    ( q' K, ^/ j' o" c, `: _
  1377. Save_PPU_Data:# R6 k6 E7 ^: D& \2 ?' S3 G% U
  1378. .DB $00,$20,$00,$64,$00,$04,FC_MODE_PPU_TO_RAM
    . ^+ k2 ~5 e! i; U1 m
  1379. Load_PPU_Data:9 i: l$ C7 U/ ?2 V/ c! D) h' S
  1380. .DB $00,$64,$00,$20,$00,$04,FC_MODE_RAM_TO_PPU
    8 z. m0 M; t8 ?4 |
  1381. Cln_PPU_Data:0 A( |9 d& p4 C4 @) n5 y6 f2 W
  1382. .DB $00,$00,$00,$20,$00,$04,FC_MODE_PPU_CLEAR
    # B' m# T. ?5 S) V& A: e) m

  1383. ' Q, W0 U7 {/ Q9 H

  1384. ) K. t2 F" h1 U( b0 S' e7 O
  1385. ;==================================================6 I% h4 _# D/ I8 |+ T$ ~" o
  1386. ;文本数据PPU显示地址
    9 T$ u- d5 ]- P, V9 U  v6 m
  1387. Text_PPU_Addr:
    5 n0 [& B6 n# O$ }" F3 o( q
  1388. .WORD $20C5
    , E' m9 W& T& A" ]1 o
  1389. .WORD $2105! a$ X: a4 _; {0 ~. R6 z& x$ @
  1390. .WORD $2145
    9 l3 Q' O+ H# Q6 o6 B& H& k
  1391. .WORD $2185; q  ]0 L' R, i3 [, o) ]! w4 f
  1392. .WORD $21C5. K8 ?/ p' s9 E$ S5 `1 P9 N- n
  1393. .WORD $2205
    + Z% {( {) T$ X4 ]
  1394. .WORD $2245
    $ b5 V+ a- x2 \
  1395. .WORD $2285
    ' k4 d2 {: J/ D- Y: [! W3 T4 E
  1396. .WORD $22C5& t# f$ P+ f: l
  1397. .WORD $2305
    $ U% @1 E1 w4 C( U
  1398. .WORD $2345
    4 N4 C2 s) S! }" w5 C) b: u+ y) {
  1399. 7 [/ c" f9 o4 t$ |: W
  1400. ;==================================================% t3 s' w* a( Y1 D! }% }! \7 ^
  1401. ;文本数据PPU数据地址
    . h" e7 K! P3 |( E0 M" F
  1402. Text_Data_Addr:
    ) K* G, K* R( C& f. X5 d
  1403. .WORD Text_Data_016 Y4 z- E, e: h5 o* ~) W3 }
  1404. .WORD Text_Data_02) Y* j7 I8 f: B8 m# t$ w
  1405. .WORD Text_Data_03
    # j1 M: B) u$ t0 S# @- \
  1406. .WORD Text_Data_04
    # @) q6 Q3 z* h* Q
  1407. .WORD Text_Data_05( N% K; O7 W  H1 I6 B" q# s
  1408. .WORD Text_Data_06, v* l  Q- @) L/ C# {) d
  1409. .WORD Text_Data_07  i" a4 M$ I, M
  1410. .WORD Text_Data_08
    9 j3 P5 g) Z% {$ r7 q
  1411. .WORD Text_Data_09
    5 T; |- q- j3 `' h$ ^; I
  1412. .WORD Text_Data_10& m& x& X: G3 r: Q8 l' `3 i
  1413. .WORD Text_Data_11/ n- c- k- ^! [4 a/ Q
  1414. .WORD Text_Data_12
    , l/ s5 [0 U! j8 X
  1415. .WORD Text_Data_13
    6 ~( N, p7 E' W$ w4 W) Q
  1416. .WORD Text_Data_14
    9 j5 i# V2 \; A2 R1 |9 ~; n
  1417. .WORD Text_Data_15: n' H6 G2 [7 f) f# L. ^0 U
  1418. .WORD Text_Data_162 o1 d5 m) g. O' |- {

  1419. ! S; x9 M% |' ]- k& Y
  1420. ;==================================================) k8 v& T" G+ W+ \1 C: T; @! U9 l+ [
  1421. ;文本数据
    " N+ N) a0 c7 A9 g% E# o
  1422. Text_Data:# t3 Y- `1 M3 m$ @
  1423. Text_Data_01:1 D; G, a6 v; \4 q9 i6 O$ T& `' C
  1424. .STR "01.INVINCIBLE"
    # O  `: B: l2 y! C: K
  1425. Text_Data_02:
    7 y1 N. r0 H. ^+ _3 m3 i, G
  1426. .STR "02.INVINCIBLE PLUS"
    ! U$ q$ u+ }' ?
  1427. Text_Data_03:0 n( O% j) n4 T" \( P
  1428. .STR "03.LOCK LIFE"
    ( Y7 _* d  X: O- t
  1429. Text_Data_04:' ~* X% U8 J7 u/ V  \
  1430. .STR "04.LOCK WEAPON"
    $ Z: t$ J: v( C; V9 K! d
  1431. Text_Data_05:8 }; m& G# ?# T6 i" h
  1432. .STR "05.SEL CHANGE WEAPON"9 |9 k9 H) U/ O
  1433. Text_Data_06:1 c$ h& o& y2 M$ T
  1434. .STR "06.UNLIMITED JUMP"
    3 F5 j; f! I! d4 x  J9 l
  1435. Text_Data_07:8 O9 u- y& v: p! F. _
  1436. .STR "07.MOVE FAST"
    9 c5 V5 _: G5 X! e1 u  a
  1437. Text_Data_08:
    2 @- ~( O0 u2 S4 [5 O. S
  1438. .STR "08.SWAP SKIN"% l7 u3 j& q$ f' q7 o- e8 H
  1439. Text_Data_09:5 t  r! r: j9 R
  1440. .STR "09.EQUAL BULLET"! K9 D& C, \  x7 i& E
  1441. Text_Data_10:, W1 v- b5 I7 S: [9 q5 D, Y
  1442. .STR "10.STRONG BULLET"
    0 S  ?; E* j8 s, Y
  1443. Text_Data_11:
    " k7 A0 m2 d$ \2 z
  1444. .STR "11.KILL BY ONCE"
    : x3 f% M8 j% y) V; p- Z* m6 s* g
  1445. Text_Data_12:
    8 a- w0 m  f7 K3 w6 r& d( z3 S1 {  D
  1446. .STR "12.FULL SCREEN KILL"
    0 K! P& I& E$ O3 Y
  1447. Text_Data_13:
    % Y6 Z- i3 C* z- {* T. \' }6 M( M: `0 U
  1448. .STR "13.DOUBLE CONTROL"
    2 O8 {- w+ `9 j: a# R# q. I
  1449. Text_Data_14:: k; o9 e' m2 O* T2 x) ?6 e
  1450. .STR "14.REMOVE E-GRID"6 O5 @* f/ L0 }- I6 n3 x8 Z$ Z
  1451. Text_Data_15:
    , u' O. Z" ]3 v0 w  X+ n
  1452. .STR "15.FALL INVINCIBLE"
    5 ~8 b3 N. d9 p# J2 N5 `7 r+ Y
  1453. Text_Data_16:/ Z" n* [. o) x9 |- ~
  1454. .STR "16.NEXT STAGE"
    & L9 Q7 u7 l- y1 a+ M3 }
  1455. ' |; M3 M2 l9 e! V$ P( U+ _6 w
  1456. ;==================================================6 ^3 O/ {) X( m5 u- o3 l% ]8 E
  1457. ;功能开关检查地址! C. g3 u1 }9 y* P# g; s( a
  1458. Function_Addr_A:0 |. |1 Q6 c7 O# T/ h
  1459. .WORD $01C0$ ?0 t. Y) _4 E
  1460. .WORD $01C0
    9 T( a8 v  \8 ]
  1461. .WORD $01C0. q1 D3 [* ~5 @, X/ L6 C5 V% ]
  1462. .WORD $01C0$ l. I( k) Y; W) C: s) c5 x
  1463. .WORD $01C0' m9 J, i& h+ p5 o/ S
  1464. .WORD $01C0
    + ]2 w% [% O7 \) W! q% j$ w
  1465. .WORD $01C0
    ' u# v* n: x) c7 I% p; z
  1466. .WORD $01C0
    9 e, x! X( ^3 N6 Q3 D* M
  1467. .WORD $01C4
    0 J/ }) ~" {8 p9 t/ C. Z; N# t
  1468. .WORD $01C4- W4 l; [/ R) P% Q7 [
  1469. .WORD $01C4! H4 P% ?0 y7 E1 J! [
  1470. .WORD $01C4
    2 U( ?; N% K* ^8 _
  1471. .WORD $01C4
    + D7 a1 l, f# h* w+ y& m* A8 @
  1472. .WORD $01C4- m3 _3 _( F, o3 L( [6 |  X8 _
  1473. .WORD $01C2! K/ [( [' Q# q2 e
  1474. .WORD $01C4
    : u3 W* B2 r+ Z" V
  1475. ) U9 g% Z* w$ Q- |+ `$ S( \
  1476. ;功能开关检查地址# F% M7 M4 C  h, i9 {
  1477. Function_Addr_B:5 Q* ]' U/ m' W# \
  1478. .WORD $01C1
    + D2 g+ R' u: a  L2 e
  1479. .WORD $01C1
    , @# z1 y* [% ^, R
  1480. .WORD $01C1+ `6 d9 ]; \1 a% N
  1481. .WORD $01C10 P( E# o$ x" o6 f  K, @
  1482. .WORD $01C1$ S) l2 a9 P  |5 |" ?) F
  1483. .WORD $01C1
    ' F5 h6 k4 H4 O5 D
  1484. .WORD $01C1* V- R( M: V  y4 N0 Q) F" K
  1485. .WORD $01C18 E- e# I9 _5 E7 s; G
  1486. .WORD $01C4
    - A& \# \0 c/ l7 e$ c( T& x
  1487. .WORD $01C4
    $ S) A% h/ |2 O/ n
  1488. .WORD $01C4" Z) a6 d* b8 y( c$ X! K
  1489. .WORD $01C4
    * ^: i! t8 }" ^6 o: b( K6 T
  1490. .WORD $01C4, h8 }, y! @, c/ \/ V' W: d( @
  1491. .WORD $01C4
    ' `. z4 m2 t. A
  1492. .WORD $01C35 i' S3 _/ p- L7 G, ?8 @& c
  1493. .WORD $01C4
    / T4 V7 a4 ]% b: r' T& U  _3 g' r

  1494. 6 X6 B1 L" ~$ x- b
  1495. ;==================================================4 M$ ]0 Q% i& Z1 W( h5 R+ Y' J
  1496. ;功能开关检查数据
    & u/ p5 q) `( i1 ?4 u
  1497. Function_Check:; `. q. w" h7 f# n$ Y* ~! V; @
  1498. .DB $01
    9 {3 M$ _' C( t$ Z; ?( y
  1499. .DB $02
    / f+ R" r  F& p. R5 o
  1500. .DB $04
    4 ?" T% ]  s# `  r
  1501. .DB $08) x( W: {8 O9 r& n: m- |9 _3 J
  1502. .DB $10
    ; V& x1 N5 K  ~/ U% l
  1503. .DB $20
    2 S& i) B' J6 }6 y5 T! e- m
  1504. .DB $40
    ) Y6 ?7 X$ `; N2 E1 i% e
  1505. .DB $80$ m1 r0 M2 F: y4 |: O$ X( F; q
  1506. .DB $01
    3 D5 ]6 V/ Z6 i1 G: c( c) o
  1507. .DB $02
    1 _7 h/ N$ M+ V0 j
  1508. .DB $04
    . U  W: f6 v3 o" g9 p# _# L
  1509. .DB $08- T, a6 L& a7 i
  1510. .DB $10" b, ^; u% T/ o! a1 n. K$ W
  1511. .DB $20
    + Q1 T0 G& X- K2 m3 c
  1512. .DB $40# y' x% O" P/ F" `
  1513. .DB $80
    ! B& I0 c/ x  d2 w
  1514. + U$ R# c2 p7 O4 p6 J4 U4 R. Q2 r
  1515. Char_Rom:
    9 l; [' J: F/ e. q! K# p- l
  1516. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00& T; X$ S8 e; G: q' T
  1517. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$008 c/ e$ @6 A" f, r
  1518. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3B,$25,$00
    ) z3 l' _! A, U! \, m6 M' F5 `
  1519. .DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$00,$00,$00,$00,$00,$006 p7 Z! U. V1 f, C' e& D
  1520. .DB $00,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19
    : t. o; f5 T% v: b
  1521. .DB $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$00,$00,$00,$00,$009 i9 ^) V4 h/ @5 r5 ^
  1522. ; S7 y+ E" p; C) i7 f: [
  1523. ! `0 ~4 ~& A& a0 W- P% g$ \1 N
复制代码
: M# U2 N; J6 i% o4 z
游客,如果您要查看本帖隐藏内容请回复
( j# E; B6 B. ?8 p. g
flamecyclone.ys168.com
2 |3 ?7 @  l; B, ^3 F, `8 A7 @www.nesbbs.com

本帖子中包含更多资源

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

x

评分

2

查看全部评分

签到天数: 2981 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 142 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1560 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 39 天

[LV.5]常住居民I

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

使用道具 举报

签到天数: 1755 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2501 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1308 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 187 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1746 天

[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 | 显示全部楼层
增加烧录支持(其实是之前遗漏了兼容性)
回复 支持 反对

使用道具 举报

签到天数: 1170 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1140 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3419 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1341 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3115 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 488 天

[LV.9]以坛为家II

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

使用道具 举报

签到天数: 6 天

[LV.2]偶尔看看I

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

( y( K9 M' D' l5 |! Z1 I! PTec.PNG (8.05 KB, 下载次数: 0)
, d+ G/ w# d6 Y' q( s9 q! S% ?; |, i: \' P7 t: K
下载附件  保存到相册
+ k. n) u7 T# _7 \3 n
& m% ?( e: U' }2020-3-13 13:33 上传! F8 E8 k3 r0 @% y9 `' @1 e& M
得到的文件解压后放在任何FC模拟器即可玩。NES上最优秀的篮球游戏!1 _8 G6 w! F: Z  ^" u7 _) S
" j0 p7 j; ~9 j修改内容:
  f$ O! L' y0 D8 q& U1)游戏时按START键可以开启或关闭怎样射球都进篮,全场照进!- t9 S2 d" W3 p& \  s  c5 m0 Q' |8 a% ?: N0 M; j
4 N# A* o  K& S. i2 c" {$ U$ M' n1 W2 \+ @+ w" P- o
不过开启了是双方面的,看到电脑拿着球赶快关闭!(有声音提示)。" p1 M) ?$ I+ `) P* f2
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 07:19 , Processed in 1.144531 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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