EMU618社区

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

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

[复制链接]

签到天数: 39 天

[LV.5]常住居民I

发表于 2019-11-29 20:25:37 | 显示全部楼层 |阅读模式
本帖最后由 yandagui 于 2019-12-4 21:31 编辑 ; ^9 T4 A  u' [+ [8 G7 I9 E

' \. F6 Z" ^! D7 U! _: w9 V4 @* F$ E2 t[FC][魂斗罗][最佳可视化]1 m* S" k$ |" C
时间:2019.11.30% o4 L0 o4 y, |3 H
作者:FlameCyclone5 `4 X& e8 j0 ]' Y2 O/ }
内容:
; B" Y0 O! O' ?( y6 }4 K5 u+ c 1.可视化:    & c0 j" a: ^7 M9 ~+ e" ]" r2 r
     (1)暂停时按选择键进入菜单7 f3 t& C- C  r/ p. c, H5 m
     (2)方向键选择功能: B键开启: A键关闭: 选择键交换,开始键退出  |7 h, t1 h) s4 r3 O# g
     1.1.透明无敌: 透明无敌, K2 J/ G0 Q9 G% m* p& r8 _9 L
     1.2.加强无敌: 金身无敌  U4 u6 p# l0 H. o7 M7 u
     1.3.生命锁定: 生命锁定3条  k& }- G& x5 @
     1.4.武器锁定: 武器保持不变8 n/ E6 g; W8 ^7 o; }( V1 L
     1.5.武器切换: 游戏时按选择键切换武器
: D5 B/ [1 D/ {$ O     1.6.无限跳跃: 跳跃无限触发
* E8 J% X" L% K2 \3 g5 j     1.7.快速移动: 行走速度加倍' H0 H' `4 O& B4 y' c& a( {
     1.8.皮肤切换: 交换玩家肤色: @- B0 m! v: m+ g8 [
     1.9.公平子弹: 玩家子弹可以与敌人子弹对打9 D) S# ^( @  C( _4 T( Z" z
     1.10.强力子弹: 子弹打中敌人后继续穿透
: J  s' u1 r/ i7 d     1.11.一击必杀: 敌方中弹一发必死
2 s3 f' E7 H; J: k2 k$ J8 I/ s- R* `+ ^/ C     1.12.全屏击杀: 开枪时全屏可击中目标必死& Z" W( {$ w; Z6 T, ^4 u5 m( F; T
     1.13.玩家双控: 两个玩家的任意一方均可同时控制两个玩家+ d- k: h+ [3 B" Y5 r
     1.14.移除电网: 移除2,4关的电网' V7 _- ~, B1 C8 V9 o7 J2 V
     1.15.掉坑不死: 掉坑后不会死亡2 w4 c* t5 c. s  ]
     1.16.跳过关卡: 跳转到下一关+ R; D6 e4 z7 p
  1. ;[FC][魂斗罗][最佳可视化]8 v( I; a1 Q' {9 ^7 ~4 Y
  2. ;201911294 n2 X+ d  w5 g) k
  3. ) {& r1 ]/ ?  |) B  [  q5 K
  4. ;程序开始地址
    2 r7 {4 i& `; v- |9 ^8 I( \: p
  5. .ORG $9000& Y3 I2 ]1 o5 q8 D9 ]

  6. ' N$ R  I' \1 W) _& k; f; ]3 H1 y
  7. ;==================================================
    9 t6 D0 f- x/ D$ ~9 [9 f
  8. ;==================================================
    # I5 |8 j, y# r4 W" O
  9. ;是否双人玩家+ C/ U, l9 s" P; N* {; E3 }- u
  10. FC_IS_DOUBLE_PLAYERS = 1: C  w* n* z2 ?9 A) r. [
  11. 0 `. Z$ r, y/ V6 ^# l9 e$ ^
  12. ;==================================================* b7 \* J+ u  R% ?
  13. ;PPU缓冲地址配置$ j$ v1 r% i4 n1 o9 V' @) A
  14. FC_PPU_Buffer = $0300
    2 w" [/ ]2 c9 E- z. D& |! g/ l
  15. ;PPU地址配置+ p8 t1 f" l: x6 S, o
  16. FC_PPU_Cursor = $00
    % h3 ]: w) E6 S
  17. FC_PPU_Status = FC_PPU_Cursor+$01
    ( d8 ?0 I) @! R
  18. FC_PPU_Data_Cnt = FC_PPU_Status + $01
    % z0 r1 Q* w8 P( B6 L
  19. FC_Data_Port_A_L = FC_PPU_Data_Cnt + $017 J  Z1 b% @6 }8 P$ W  ]
  20. FC_Data_Port_A_H = FC_Data_Port_A_L + $01
    3 o0 _; b" c% j2 O, F, C: A
  21. FC_Data_Port_B_L = FC_Data_Port_A_H + $01
    ) e% K) @( ]$ X( R- c
  22. FC_Data_Port_B_H = FC_Data_Port_B_L + $01
    1 K  _6 R7 J8 M9 `
  23. ;==================================================8 I3 y. U7 a, }9 {. e

  24. ' j6 t6 c3 \9 i0 l
  25. ;==================================================6 N  e" V2 L% L7 y0 y' Y
  26. ;选择项地址配置
    - q0 w# F: e( Z: g6 D: k9 A
  27. FC_Select_Index = FC_Data_Port_B_H + $01! w% [1 t+ ~6 c" E! {
  28. FC_Select_Temp = FC_Select_Index + $02
    8 o( W! Q& P3 w- D, i# Q: H
  29. ;NMI循环计时器/ a0 u- Z9 t) w) ?
  30. FC_Time_Count = FC_Select_Temp + $01- t4 |& u& P1 ~. w! Y
  31. ;==================================================; I3 K  F# d" g& k

  32. 6 i5 ?* {" d* c8 ~- f
  33. ;==================================================
    % _) |" @* m. r0 t# |- o
  34. ;光标配置
    & h" i$ F* }/ U7 `. T1 h3 T
  35. FC_Cursor_Addr_L = FC_Time_Count + $01
    5 I1 J, P( z; X$ ?" A: P. _
  36. FC_Cursor_Addr_H = FC_Cursor_Addr_L + $01
    3 E, u, z9 F6 v( y! U3 l0 H/ V
  37. FC_Cursor_X = FC_Cursor_Addr_H + $01
    " Z; Z' Y* ]4 v% O
  38. FC_Cursor_Y = FC_Cursor_X + $01
    6 m' {+ g* n) s$ N7 |; B
  39. ;----------------------------------------: [# i  d* h$ D+ F: a9 z5 s
  40. ;光标图形号
    & L) o. l1 z/ }; V" f( u9 j
  41. FC_CURSOR_TILE = $3E# w3 V; F9 Q. q
  42. ;光标偏移像素值
    9 I( Z" y/ x/ @* q4 F; D% b
  43. FC_CURSOR_OFFSET_X = 12* O9 }& x# V5 R7 g3 }
  44. FC_CURSOR_OFFSET_Y = 1
      m$ g; @* n( Y) ?
  45. FC_FUNCTION_OFFSET = 21
    ) \2 u+ n$ V, s* R. M
  46. FC_ON_TILE = $3D
    # O9 f3 u6 y, u8 U& }7 D* g
  47. FC_OFF_TILE = $3C
    ; @9 X8 K% o- p% i( H3 F; M
  48. ;==================================================
    % Q8 u9 l3 p* p4 H6 H4 L0 E

  49. ; q3 S1 S& d0 C+ E; o3 r
  50. ;==================================================
    5 [. L) _" |, w% a
  51. ;翻页配置
    4 a8 q* E+ n2 P, [. [  r5 Y
  52. FC_Page_Old = FC_Cursor_Y + $015 K9 F# S  r! _( k
  53. FC_Page_Cur = FC_Page_Old + $01* O2 A4 w9 H7 H+ u6 w' W
  54. FC_Page_Item_Count = FC_Page_Cur + $01
    - M; k1 T6 P8 H
  55. FC_Page_Item_Buffer = FC_Page_Item_Count + $01% x: o$ G& n9 J9 W. K. V- g
  56. ;----------------------------------------, S% P6 ^4 {8 H$ m3 o
  57. ;翻页属性
    0 K6 `* H$ O( Y5 q& }5 O
  58. FC_PAGE_SIZE = 104 y. x# [9 e8 P: P/ X; u
  59. ;PPU单次写入缓冲项数
      |' z- w& f6 m  I. M$ B5 M
  60. FC_PAGE_BUF_SIZE = 25 o! T" Y  {+ Q( n2 g
  61. ;----------------------------------------
    ( a$ E1 D$ A( w2 g  y) t+ f4 S
  62. ;显示项最大索引属性
    ( @$ V& ]2 L5 {: Q$ p
  63. FC_ITEM_SUM = 16 - 1% ?, i6 f) i; {4 S* L
  64. ;最大页索引属性4 {, N1 z( H# d/ p, z% R/ v
  65. FC_PAGE_MAX = FC_ITEM_SUM/FC_PAGE_SIZE*FC_PAGE_SIZE+ y7 V2 h4 R! a9 h3 u
  66. ;==================================================5 N0 E) E0 t7 o2 {

  67. - D8 Y* S- J8 d0 Z+ S- P  }, l
  68. ;==================================================; a3 a, ?8 M6 ^9 d# T6 _1 }; f
  69. ;按键配置: I( ^( a7 R; S& Z0 }( b/ w
  70. Button_Keep = FC_Page_Item_Buffer + $01
    8 b8 a' O8 o3 U/ I; k4 f$ O. T
  71. Button_Once = Button_Keep+$022 @  ~1 V" e9 t1 f- O! q
  72. Button_Temp = Button_Once+$021 ~2 v7 A- F# U# t9 C& u& N
  73. Button_Buf = Button_Temp+$02
    5 `+ K, s; G, L0 n. \% H
  74. Button_Status = Button_Buf+$02# I9 y! R/ [: m" G
  75. Button_Auto_Delay = Button_Status+$02+ E$ F: v/ o1 |7 R  ]
  76. ;----------------------------------------
    $ c% q' A' p, D( y
  77. BUTTON_DELAY_MAX = $181 i+ x' d. \1 V( z2 D7 _
  78. BUTTON_DELAY_SPEED = $08; V' P, _3 }: d0 W1 _1 y  }7 Z+ {

  79.   i) Q- ~8 S7 n
  80. BTN_UP = $08
    8 l1 W' O2 Q) n! e
  81. BTN_DOWN = $04
    5 r9 _: M  v: B* P$ j
  82. BTN_LEFT = $02
    0 p& ]( n" C2 T; W- h/ V
  83. BTN_RIGHT = $01
    ! I, O* n; q8 |& V6 B
  84. BTN_SELECT = $20
    $ r& r: @3 L% ]  \# ?: }4 B, Z
  85. BTN_START = $102 A8 C0 ?" L# ?) d( s4 h
  86. BTN_B = $40
    9 r+ f; @- Y; U. K) i( g! p, E: L
  87. BTN_A = $80
    - A& W& G! M# @" H. g
  88. ;==================================================
    0 T2 ~  U) T: w' Z, {& J( r) y
  89. & `, Q0 w% V  X+ V; a" L
  90. FC_Copy_Addr = Button_Auto_Delay + $018 i1 ~+ o$ r$ m/ j  o, w
  91. ;----------------------------------------% d5 d5 t+ L3 n) Z; z
  92. FC_Clear_Val   = FC_Copy_Addr+$00      ;清除模式覆盖值6 E2 U# O3 v& v! P' C2 `
  93. FC_Cpy_From_L   = FC_Copy_Addr+$00     ;复制来源地址低位
    , W3 h" C; }+ W3 W% i
  94. FC_Cpy_From_H   = FC_Copy_Addr+$01     ;复制来源地址高位
    ' Q/ g9 B! X9 U- Q
  95. FC_Cpy_To_L     = FC_Copy_Addr+$02     ;复制目的地址低位! U/ H: }& g3 m8 G
  96. FC_Cpy_To_H     = FC_Copy_Addr+$03     ;复制目的地址高位( c+ h- T3 o  I7 O4 o
  97. FC_Cpy_Count_L = FC_Copy_Addr+$04      ;复制长度低位
    ; ~2 x% _( W! d+ q/ [: @
  98. FC_Cpy_Count_H = FC_Copy_Addr+$05      ;复制长度高位( j7 M9 u& v+ ?/ q2 G: P4 [
  99. FC_Cpy_Port_L   = FC_Copy_Addr+$06     ;配置地址低位9 }0 S+ G6 t" L+ v2 i  a7 u( @
  100. FC_Cpy_Port_H   = FC_Copy_Addr+$07     ;配置地址高位
    / a4 \4 R5 s2 H2 y7 f
  101. ;----------------------------------------# ?: s9 I; @$ d/ h
  102. FC_MODE_RAM_TO_RAM     = $00  ;复制RAM到RAM模式
    # \! z  b4 F/ p3 }, D
  103. FC_MODE_RAM_TO_PPU     = $01  ;复制RAM到PPU模式: r- L$ N; G" A6 X5 H, a3 @% x' v* S1 w6 }
  104. FC_MODE_PPU_TO_RAM     = $02  ;复制PPU到RAM模式
    , T' Q2 e& R* X& @- P* ^6 L
  105. FC_MODE_PPU_CLEAR     = $03  ;清除PPU模式
    2 Z- k' A+ g- B" ^3 D
  106. " C. |* y, f3 _
  107. ;==================================================" i9 w* ^& y9 x
  108. Rom_Nmi_Addr = $FF
    - p/ d6 @* |- O* {; T: o0 }
  109. Rom_Btn_Once = $F5" i8 D$ l$ w$ p1 S
  110. Rom_Btn_Keep = $F9
    , s+ [) h* e1 B  F' e* ^6 O
  111. Rom_Pause_Addr = $25
    ( }# _- Q, m1 w* E9 H1 ]
  112. Rom_Pause_Val = $01
    & c! U+ `; \: I0 P+ U4 r! `$ _# g
  113. Rom_Pal_Addr = $07C01 |" [* s9 Y" m
  114. ;----------------------------------------
    , X* D9 s1 {/ M7 b3 j
  115. Save_Zero_Addr = $6200; j3 I/ ], a! C2 h2 \) E1 T
  116. ;==================================================% M, A; p( H: ^  }- d! ~% W
  117. ;==================================================
    - ^' w! F* L+ B! X1 \; \  Y# i
  118. , J% ~2 ~! A: N3 ~
  119. ;程序入口
    2 X& D5 t& R* R* M# C+ l) n+ r
  120. Enter:) v/ Z( H  X2 j! `6 g; m+ g
  121. LDA Rom_Pause_Addr# d) @/ U5 j* o; a# D; j: F
  122. AND #Rom_Pause_Val1 u; v& N: J: H  [( f
  123. BEQ Quit_End
    $ \' {; l/ A2 l" g
  124. LDA Rom_Btn_Once
    & B4 S# a+ Q7 g( c
  125. CMP #BTN_SELECT; M& R9 s4 M$ ]. d1 R4 ^
  126. BNE Quit_End
    6 }( U5 E2 v1 ~2 Q" K
  127. PHA
    * Z( q7 b& i$ h
  128. TXA7 g" A- U. _+ U/ P4 q
  129. PHA
    % k/ ~2 c! ]$ l" E
  130. TYA8 B; _& C& F/ }, Y% Y
  131. PHA+ ^8 ?. H. K* U0 N& m% [1 Q
  132. JSR Wait_Sound_Stop
    $ Q% C/ H6 o0 l& g/ _1 {
  133. JSR Save_Screen, H3 o; V+ R# L$ d: L. u
  134. JSR Program_Begin
    & H1 Z, E, i) A, L8 f5 k* C! ]& ]
  135. JSR Load_Screen
    + Q$ }1 _7 y' k# w% e. a: z
  136. LDA #$10
    . q+ Q( S+ A, l
  137. STA Rom_Btn_Keep
    4 N1 J" y# S; L% A: V7 @& D1 t
  138. LDA #$00
    ( s. E6 q9 i9 R* i+ h0 E8 K
  139. STA Rom_Btn_Once
    ' ^# s# v% {+ t" z+ W2 o2 h
  140. Quit:/ U2 a* @4 _" D0 o
  141. PLA
    / g/ F: ~3 b1 z' S; ?$ L! H
  142. TAY% b3 M- j2 G" n0 M; h
  143. PLA7 ?* D; u# N  c, ?# x, F
  144. TAX
    ; H% T  L# ^9 c- Q
  145. PLA
    ; g$ t9 p* M$ I. r8 S7 f9 t7 k" Z  i
  146. Quit_End:+ S% O$ e1 J3 e) v  J; @$ p" I
  147. RTS9 B8 b7 N4 y/ W: [* ?

  148. 0 R2 ?1 g4 z* B  I% v
  149. ;==================================================
    - u8 {* t0 |6 e( a
  150. ;等待音乐结束
    9 S; ~% M: Z/ ^9 r. b
  151. Wait_Sound_Stop:
    + s) Z; G9 k3 O- t
  152. Wait_Sound_Stop_Check:" d8 |9 I  u$ s7 \: F
  153. JSR NMI_Wait
    & Y6 D. j3 O& z9 }7 I' Z+ x) ~* H
  154. JSR $F825; w5 b2 d! ~8 @4 L: e( |. S
  155. LDA $010A) e) w+ {8 z+ s( r6 ], A
  156. BNE Wait_Sound_Stop_Check$ ~! k8 ~* D; M, G( m
  157. RTS
      D# E, B8 ]9 d$ d  T

  158. 8 p2 ~1 G# k& j7 Q$ [
  159. ;==================================================) O3 n- Y: W6 ]% B' v
  160. ;保存屏幕数据1 k  d! D" c7 K6 M* r
  161. Save_Screen:
    ( |% m4 _( O7 c4 R+ k7 }
  162. JSR Screen_Off
    " U+ i: w5 }! z* I
  163. JSR Save_Zero: J, |, f* k2 P
  164. JSR Save_Ram- |; z  g' y' g
  165. JSR Save_Ppu8 F0 G/ o" `' `* V
  166. JSR Ram_Init7 D. L7 F; R& M0 C7 z) S
  167. JSR Sprites_Init5 N; C0 u( ?2 b& ?4 C* h  O
  168. JSR Clear_Ppu2 ~6 h4 z, O: X. N
  169. RTS
    6 y2 ]+ [2 u  b# \

  170. - x$ g* j- q" {: |# }) V# e
  171. ;==================================================1 g& b( H  A4 Y8 [9 f
  172. ;加载屏幕数据# c6 t2 t* a. D7 t+ d
  173. Load_Screen:
    % q1 U6 I7 T2 K& X* }# i7 @
  174. LDA #$00
    1 u  h( P8 G4 C5 r. Q0 D7 \8 M7 M
  175. STA $20017 r3 l9 v3 I" U  q
  176. JSR NMI_Wait# j! D( `; r0 {* m# h, N
  177. LDA #$02
    + J0 E% J+ B+ b1 i5 _6 Z
  178. STA $4014- m) e; q8 o2 b* b$ R' d0 [
  179. JSR Load_Ram) c' C3 f" m2 n  L. s( A, D
  180. JSR Load_Ppu! ?8 Z8 B% {9 l* T  ^9 r4 ?
  181. JSR Load_Zero7 ?1 s& l$ r3 e4 }* e: u3 h
  182. JSR NMI_Wait2 Q3 h$ V( @4 q! r8 H
  183. JSR Load_Palette( R( p" f" T) [: E
  184. JSR Screen_On( r! p# o2 p. b4 ~
  185. RTS
    ) f: q- t& ?6 i0 L. M) `
  186. / \% K5 V: |: d9 V
  187. ;==================================================
    . M, q6 r: |1 W5 j
  188. ;关闭屏幕
    3 P4 q$ \6 O0 W8 \% x
  189. Screen_Off:9 ]; s2 ?# L" m! C6 L
  190. LDA Rom_Nmi_Addr
    , f6 |7 m. X# ~5 J' n0 z. s
  191. AND #$7F
    . J$ W' v) `: s. {
  192. STA $2000
      c2 z$ x5 ]3 i9 X, ^
  193. JSR NMI_Wait9 ?7 f; y% W& u( ^, w2 h7 u
  194. LDA #$00# w9 b& g1 c1 ^& x! f5 ]
  195. STA $2000( m7 }5 V, P6 w3 O3 d
  196. STA $2001( D4 y% h" p. Q4 [5 ?
  197. RTS  ^& p& T- k7 T) I! ]* Q

  198. - K+ K- X+ S. O* a* [
  199. ;==================================================
    $ R; X1 J( Z# T' }8 ]
  200. ;开启屏幕% d; {6 y, J9 U& S8 P  k, g
  201. Screen_On:
    : ~$ a% I7 y# W. T& O+ N$ p
  202. LDA Rom_Nmi_Addr2 N* G7 J: U- x( L/ o9 O
  203. STA $2000& r0 w; G7 t/ G% `% |! k
  204. RTS. ^# j# e3 A$ h( O& X* n& L

  205. 2 Y+ F/ H9 \' C  t9 z/ v# K
  206. ;==================================================) o" ]+ S2 Y% P( H( U! R
  207. ;清空占用RAM
    . @" D/ c5 I0 d
  208. Ram_Init:% P4 D8 X; V5 n
  209. LDX #$00/ I  U' B8 P: ~/ F
  210. LDA #$000 u8 n7 s* d# D* Z: m0 _; {) }, j
  211. Ram_Init_Set:
    3 I  z4 C! b' Q6 S
  212. STA $00,X1 ^- {6 s* f* i
  213. INX
    7 T( j! B6 ~; n- t
  214. CPX #$40
    3 k" p: T( j7 [
  215. BCC Ram_Init_Set
    ( n9 P6 w7 m: C* j" G3 k/ ~$ z
  216. RTS3 V  g. X7 J3 S# o- B: `
  217. 0 U2 V. `8 H% E% d  n0 S
  218. ;==================================================% M0 U& Q6 C0 R: |
  219. ;清空占用RAM
    " R4 h& ]0 x# j8 H4 _3 a
  220. Sprites_Init:
    " F/ S- f2 Y3 Z' Y; X
  221. LDA $2002
    8 n1 M- }' `) D
  222. LDX #$003 a* }) a4 p% X" c+ Z1 y
  223. STX $2003
    ( p, q% h: l& p( O% S
  224. LDA #$F8
    : Q2 _/ H; M) p2 F. f
  225. Sprites_Init_Set:( @& y2 J& D0 x5 q- W6 Z
  226. STA $2004- B2 Q" h7 V1 }, |* f  f
  227. INX
    ) S: {, r$ x. C" t0 ^' l
  228. BNE Sprites_Init_Set2 D. ?  U' `0 z/ w7 L5 i
  229. RTS# U( q9 P/ V* d1 @* \& ^
  230. 9 A; v$ R/ H: Q" b
  231. ;==================================================
    5 V; z( z* {! j; Z
  232. ;保存零页数据
    1 D: j( H! o- z
  233. Save_Zero:4 O5 ?) e( A6 O$ @
  234. LDX #$00
      j# l- o, f7 S3 y/ S6 @0 d8 D) n
  235. Save_Zero_Set:
    - @! h- N7 h) P! V8 N8 l, t6 V
  236. LDA $00,X
    2 [/ _2 ]% {# _$ o" p. ^
  237. STA Save_Zero_Addr,X* b1 M) s' p  p7 V
  238. INX
    1 c* ?( Y/ m" M9 x" z
  239. BNE Save_Zero_Set2 G) k$ O8 E7 g" o9 W3 \
  240. RTS1 S% X7 [: Y- g8 a: N, p

  241. ! Y  E9 P1 V2 m: }) E
  242. ;==================================================
    & A5 r; f/ p& I+ l) H
  243. ;加载零页数据( B* K! ^3 w$ X5 y
  244. Load_Zero:2 [8 q/ f& r% d9 g" x( H' O
  245. LDX #$00# R% W- ^+ S* z5 b3 O- P* b0 q9 D
  246. Load_Zero_Set:8 A$ C- }5 E, `- K& [, _
  247. LDA Save_Zero_Addr,X; V- E5 J7 T6 q$ G, z/ Z" V+ h7 F! S; d
  248. STA $00,X
    & G# T4 V$ e/ q
  249. INX, `7 O' b2 ?( i: a
  250. BNE Load_Zero_Set
    ' }) E3 _) O2 F! V+ f- g- N
  251. RTS
    % x/ W" ^- m7 l: |! x0 [( R  u
  252. 5 l2 P0 j* g2 v0 ^' k. }" R
  253. ;==================================================+ @% |5 A, c" w1 K( n! e: l6 c6 K
  254. ;恢复调色板7 @0 q. a! c5 g9 \3 L! h
  255. Load_Palette:- X+ R2 O; W+ \# W5 I& R5 t
  256. LDA #$3F
    . d+ C7 J; g; U
  257. STA $20066 v1 t$ c9 {6 ?' m
  258. LDA #$00
    6 _) c( @) P  R2 |# b0 ~
  259. STA $2006
    0 a$ h& f+ C9 a, @
  260. LDX #$00
    * d% E: G1 |# o5 s0 V
  261. Load_Palette_Set:
    / {, n* W  _8 T- g2 P9 y! h3 n' @
  262. LDA Rom_Pal_Addr,X) P8 H0 v, H" `7 e
  263. STA $2007
    , w4 W7 w3 s6 a% d  i% K( ^$ J
  264. INX
    5 d9 o7 r: J4 h2 r" n, M/ K
  265. CPX #$20
    * T6 z, |% M+ Q- \7 H
  266. BCC Load_Palette_Set+ |0 V; ^6 B0 \6 F0 e
  267. RTS
    # V7 j5 K- _! k/ M% P0 T- g: A

  268. 6 F* t' p  k7 n6 |1 [( ?
  269. ;==================================================9 M0 R) V2 H& e( M* L* Z& \+ G
  270. ;==================================================6 T4 m5 x$ v6 I) p
  271. ( X8 @" ^: I7 ^5 _$ w( A
  272. ;==================================================9 K& Q& P& L! `9 f6 W' A# Q
  273. ;程序开始3 y" Q$ A, l6 _1 z8 \6 u
  274. Program_Begin:
    ! q  I" [6 P7 W( U0 E" N1 a6 f5 {
  275. ;==================================================# t. e8 W9 y0 B
  276. ;图形设置3 W; v  U; d2 ~1 [
  277. JSR CHR_Set9 D! T# ?  F0 \& d! r3 P0 u- C
  278. JSR NMI_Wait* \3 n) K5 v# S& L7 n/ J" E
  279. JSR Palette_Set
    9 S9 t( ~- e1 f
  280. JSR PPU_Data_Page_Show1 Y5 N" s+ y' n0 \

  281. ! k4 d1 [# W  u2 ^. `$ Q8 W
  282. ;==================================================
    $ k# L/ i3 k4 U% R
  283. ;开启显示
    , q/ j4 T8 U/ k. |+ ]
  284. LDA #$1E
    2 F& I6 z! |5 `2 k2 b3 j" ~/ t' `' Y
  285. STA FC_PPU_Status
    ! y$ j: L0 Q: C2 b* C: U; I0 N

  286. - h/ W( i8 ]) R5 \+ R
  287. LDA #BTN_SELECT
    + X1 p+ N  c! L1 p7 g1 T
  288. STA Button_Keep
      h! X( h* I& A7 p: ~$ C
  289. ;==================================================+ j$ }1 d1 x. M
  290. ;模拟NMI循环
    , n/ n( c; z: d: \" [: g" [( n  o
  291. NMI_Loop:, F+ M9 Q2 g8 O9 m2 m6 c
  292. JSR NMI_Delay
    " @* D7 r9 Z2 @0 d4 Z( h
  293. JSR Button_Process( s. i1 c7 _! x$ e
  294. JSR Button_Auto_Press
    & ~7 H1 p4 L" `) e# ?# }5 ?( d
  295. JSR Change_Select_Item9 _) J0 i# }* ~
  296. JSR Change_Function! m* V# V$ H3 t1 M5 A* l5 m
  297. LDA Button_Once
    $ i. z: Q, K' ^2 M' ?/ D$ o
  298. CMP #BTN_START2 R! d" A: j( o7 j! V+ q+ a  |2 h
  299. BNE NMI_Loop
    + Y- D0 j# k5 M4 A) j
  300. RTS5 N, W- L+ K! o# n# Q$ z: Y
  301. 6 F: p! s7 {; t4 \
  302. ;==================================================3 e8 m8 q, g1 z
  303. ;模拟NMI中断. _7 z& `, j* u  E+ }5 `, z
  304. NMI_Delay:# K% O) r# w2 Z4 D3 _9 i" U. }- c
  305. JSR NMI_Wait+ C8 d! c. u2 _! w
  306. JSR Show_Select_Cursor
    ; h# m) j4 u" U/ ^# E
  307. JSR FC_PPU_Process9 h; O7 [6 j! q8 a5 V
  308. RTS
    9 J; g/ A6 L4 c; U
  309. 6 `' Y& F$ `; B5 N
  310. ;==================================================4 h( f1 ]' e: Y8 A
  311. ;等待NMI中断3 F: D  q5 w& D0 T
  312. NMI_Wait:
    6 s1 `( Z" O* D3 |- V( |6 {
  313. LDA $2002
    ! D- `1 f  U- ?6 h% f9 C
  314. BPL NMI_Wait
    ! _) @3 p  ?; e2 p8 G
  315. DEC FC_Time_Count
    - X2 I  `  `1 e$ K+ N5 I
  316. RTS' W1 O  w7 J6 J: Z  I1 j

  317. ; G/ Y) X* Q4 R, H- c3 J) V
  318. ;==================================================
    - }. `) F' _6 e" F; F' X
  319. ;PPU写入模式配置属性
    / l! H  o. M+ h5 B) L& E/ G
  320. FC_PPU_MODE_CNTL = $FE               ;带计数行写入
    / |0 P1 g4 ?7 s3 ~/ j
  321. FC_PPU_MODE_CNTC = $FC               ;带计数行清除/ U9 y7 E+ S0 I* f3 O
  322. ;-------------------------------------------------
    9 B# q: `1 f( z, _) _
  323. ;PPU处理
    4 D5 c6 R+ j: f& V
  324. FC_PPU_Process:
    1 |, X+ L7 t# E& k; Y: Y
  325. LDA FC_PPU_Buffer& k: q1 w* I; M
  326. BEQ FC_PPU_Process_End: B& |1 u) a. b# E
  327. JSR FC_PPU_Process_Beg( b. [3 ~$ f$ ~. w
  328. FC_PPU_Process_End:
    ( D7 T3 `1 Q8 P6 |1 Z! s
  329. LDA #$00- {9 X3 l3 W$ i
  330. STA FC_PPU_Buffer: I* o, X4 m, q; ^
  331. STA $2006
    6 d1 R% N% u, l6 I# W
  332. STA $2006
    $ k& c. e# w3 j% D
  333. STA $2005- x, A( o/ j7 n; i% Y  M# G$ L
  334. STA $2005; J+ P! k' v+ n. T( _
  335. LDA FC_PPU_Status0 S2 }% b  N; i/ ^: ~
  336. STA $2001
    & o% p# N9 U/ X
  337. RTS
    9 K5 X% h4 z! |9 q
  338. ;----------------------------------------
    8 F( `: d5 x* Y8 |1 P/ k4 r7 s7 K
  339. ;PPU处理开始
    5 l: s+ \7 B$ A# N1 u( N
  340. FC_PPU_Process_Beg:  A1 h) J. W% G" b
  341. LDX FC_PPU_Cursor: S% ?2 i! o5 D/ N0 @! L  H$ B
  342. LDA #$00
    ) u% H9 ~4 }3 @7 i
  343. STA $2001
    0 U( ]3 P) M; j* C9 t. O% A/ f7 b
  344. STA FC_PPU_Buffer,X
    , ]; X0 A' ^, L) Z- Z/ I
  345. STA FC_PPU_Cursor$ D. L/ j8 g4 F
  346. LDX #$FF2 b8 ?8 a! g! o- A
  347. CLV
    ; b$ G. L, B. t
  348. FC_PPU_Process_Mode_Select:
    : P. i5 L& @+ Q, q7 n# j
  349. INX
    4 F5 k; T0 l9 u$ I; q  }" b& ]1 T
  350. LDA FC_PPU_Buffer,X/ [  f# A0 o4 F- h6 w2 d
  351. CMP #FC_PPU_MODE_CNTL
    $ n$ O* G( A4 ^; U- C: J
  352. BEQ FC_PPU_Process_Mode_CountLine
    0 F& J) O% X7 ~% B+ b0 y# n6 u
  353. CMP #FC_PPU_MODE_CNTC# X# H; D3 a% o) X; e  z
  354. BEQ FC_PPU_Process_Mode_CountClean
    3 X. g) P4 d  e' C* b0 _7 V6 S
  355. RTS
    / r2 i. j! ^& c  r& I, }" ?# b7 ~3 ^+ Q6 o
  356. ;----------------------------------------
    0 r4 E' |" |) k8 f
  357. ;计数行写入模式
    1 `4 {6 C5 S# ~% @1 X- f
  358. FC_PPU_Process_Mode_CountLine:
    5 L1 K$ h0 |  k$ r- z# R
  359. JSR FC_PPU_Process_Set_Addr_And_Count
      l( u* @' }& ^& L- \7 G$ ?
  360. FC_PPU_Process_Mode_CountLine_Write:
    3 B  N+ M- \5 P1 b3 O
  361. INX3 m, V" Q$ C) a. E- t% K3 c
  362. LDA FC_PPU_Buffer,X
    8 J) E6 `$ c% {5 n
  363. STA $20078 g0 P: o5 W; z) c: j7 H
  364. DEY
    % B" J9 C3 H$ j6 }& b; i: m* {& A1 J
  365. BNE FC_PPU_Process_Mode_CountLine_Write& R  ~! a$ Z1 W6 p) y9 i
  366. BVC FC_PPU_Process_Mode_Select
    ! V' u3 d7 S2 c/ s7 w# [/ |
  367. ;----------------------------------------
    ! I/ \- M, S. b. O( y( H( b8 G
  368. ;计数行清除模式3 Y; w. q: C! a% g8 u- t2 M
  369. FC_PPU_Process_Mode_CountClean:
      B9 e* p, d0 k/ m  k4 S
  370. JSR FC_PPU_Process_Set_Addr_And_Count* K% f! c' I2 k1 V" A, E, t
  371. LDA #$00' \# X6 F$ y* d; I/ N
  372. FC_PPU_Process_Mode_CountClean_Write:% s; u8 u, ~. x
  373. STA $2007
      P1 ^7 K  m: q+ A/ Z7 F
  374. DEY
    % }) a3 X! }9 \# {$ g9 \" K- }
  375. BNE FC_PPU_Process_Mode_CountClean_Write% I+ a" X( _, ?( a( {
  376. BVC FC_PPU_Process_Mode_Select
    ' K. P& O4 N0 B+ f2 [
  377. ;----------------------------------------  v4 o$ M/ |/ b7 h3 ?: Y
  378. ;设置PPU地址和写入计数
    ) C" Y( T6 [. V% u. d( ]* h+ H9 y
  379. FC_PPU_Process_Set_Addr_And_Count:
    6 r& X! N. k- d  v
  380. INX$ D& A4 q4 B( C* F: R' P$ y$ p3 w: d
  381. LDA FC_PPU_Buffer,X
    1 z- o+ R; q5 f  j' l7 Y7 Z- f: E
  382. STA $20069 u) D% f3 C" K
  383. INX: g2 q( j6 b7 ], D& M5 ^8 D
  384. LDA FC_PPU_Buffer,X* j" T9 z1 r6 A; t
  385. STA $2006
    & B( }3 X/ z; e% W2 G& x, i
  386. INX
    6 u, N4 ~4 v0 U: M3 R' I' K
  387. LDY FC_PPU_Buffer,X( t) \$ B9 u( q9 z' P: _0 e
  388. RTS
    7 J8 u8 n( r3 \
  389. 9 W/ {# m% X* q% A- d
  390. ;==================================================7 Z; ]* Q' M! ~, [
  391. ;设置CHR图形
    2 c; i) r( t, s/ y
  392. CHR_Set:2 j& C( h( s' q6 L, g- ^
  393. LDX #$05* \% m. u/ v2 |9 g
  394. CHR_Set_Data:2 W) ?0 `; F$ d, o) B2 \+ ^
  395. STX $8000% Z" n1 d: f  g3 c8 L% C& a
  396. LDA CHR_Data,x
    " W& G0 H8 n: ~4 E' E. _# e2 D
  397. STA $8001
    & g) L, z, N3 V
  398. DEX1 f: ?7 Z2 y' y  }8 R
  399. BPL CHR_Set_Data
    9 m: n2 [' R; W- D! Y
  400. RTS6 K2 d# J" H; q9 T' u; Q7 p; h
  401. ;----------------------------------------
    ! n  D; T2 [! m1 p0 j! m$ u1 F
  402. ;CHR图形bank数据. W) L& R4 a' E: y! v
  403. CHR_Data:: \) G$ F( u7 A7 ^3 f* ~
  404. .BYTE $00,$00,$00,$00,$00,$00" [7 M/ H( @, r' T8 w0 L& P, h8 w

  405. , n- J3 |) `6 O# X" h
  406. ;==================================================
    * {3 j$ Z9 N: r- F1 ]" q
  407. ;背景调色板设置) s3 G) H8 Z. j7 |8 Z9 X6 Y3 v
  408. Palette_Set:5 C6 b$ r  r/ D5 b# X2 M, o
  409. LDA #$3F) i. }4 V+ e2 W5 l5 Y. \; J, ]
  410. STA $2006
    - ]3 D- C/ F8 {, U  ?4 ]0 C% t$ o0 K
  411. LDA #$00
    1 S/ T7 |+ f3 `) H+ E5 z# U
  412. STA $20068 {& d2 N9 V  z  O; p# }, z
  413. LDX #$00
    ) H' g& C( q' P) Q  f
  414. Palette_Set_Data:
    : h+ {2 R4 @; J8 F9 P4 L
  415. LDA Palette_Data,X" c/ z6 i4 s# c5 {; r& q$ v
  416. STA $2007" Y) H' R$ J% C- t
  417. INX
    4 Y/ q7 e% |/ `* p% P9 H; e* U
  418. CPX #$20
    & _& [9 c) c- s: P2 N+ y0 W
  419. BCC Palette_Set_Data0 U) u5 h0 @- l1 X' D
  420. RTS: y( V$ D* ]2 _* t
  421. ;----------------------------------------& `  s7 Z' i4 N: B
  422. ;背景调色板数据0 [" {; \9 q# A. I
  423. Palette_Data:
    " t+ B; _3 l9 i9 k" y
  424. .DB $0F,$29,$24,$24,$0F,$20,$20,$20,$0F,$26,$26,$26,$0F,$2A,$2A,$2A" o. Q- l7 {: Y, H& D' U$ U
  425. .DB $0F,$20,$26,$16,$0F,$24,$24,$24,$0F,$26,$26,$26,$0F,$2A,$2A,$2A
    . D$ G* F  H; R/ e
  426. 5 f7 J2 {5 j5 Q0 x+ B& U- }
  427. , t. s3 C0 _( I5 E# k
  428. ;==================================================
    * g/ \: H) x3 z' }
  429. ;按键扫描0 C0 Y+ X' I5 }( K# ]# J
  430. Button_Process:* s; \' D% X) K+ m3 I  h
  431. LDX #$01
    " F1 `# n0 S/ S2 L1 n+ g9 m) n
  432. Button_Process_Beg:" q4 x7 o$ W' d) v
  433. JSR Button_Scan: h( N% x/ O: ^3 r2 `, \0 P; Q0 s
  434. LDA Button_Keep,X
    " B9 u% f0 `" `& q0 D
  435. STA Button_Temp,X
    6 z5 A* M3 E, o0 }0 ^0 F
  436. JSR Button_Scan
    ; S$ a/ J( }: P
  437. LDA Button_Keep,X
    ! V( T. _& f. i0 [* |6 ]! T) Z
  438. CMP Button_Temp,X
    ) |' |% @, A9 Q$ C5 R
  439. BEQ Button_Get_Once
    # B% `/ q  l& }! Y" n
  440. LDA Button_Buf,X0 l- ?5 R+ X' x* W
  441. STA Button_Keep,X1 u  o, Z  }# L3 G  E
  442. Button_Get_Once:8 C, N" f" [/ c8 ~8 q* w7 Z4 C
  443. TAY
    6 G- D- S% r' `* R& O
  444. EOR Button_Buf,X* \+ Y1 w8 h3 W& d0 n
  445. AND Button_Keep,X
    % ^. _" R8 s1 i0 f5 `& u
  446. STA Button_Once,X3 c$ c, a3 i- _; `" w3 h5 Q
  447. STY Button_Buf,X
    8 d. m, R" N5 q
  448. DEX
    - \7 m- A: G1 e1 l9 J, d% \
  449. BPL Button_Process_Beg
      ~- I% d' Q) y- K- |
  450. RTS
    $ i/ W# {5 W. P# j5 ~5 O
  451. ;----------------------------------------$ e/ @/ e* N' ~7 d" K$ v
  452. Button_Scan:
    5 A. ^. r9 U  b
  453. LDA #$01
    5 P# \! z. E* x$ c  L. ]% k/ J+ g& t
  454. STA $40168 J1 t% ^) c) a. ~! A* }1 H, {( h
  455. LDA #$00* z1 U% r, b! Z9 Y- ^! l7 ?* K
  456. STA $40160 ]* ]# U1 t3 T
  457. LDY #$08
    & a3 K1 m; `1 Y
  458. Button_Value:; Y" L2 C# x8 [8 [; Z6 \
  459. LDA $4016,X0 O$ q' N, h& G0 D/ p5 t& q7 a
  460. STA Button_Status,X& R- ~6 ]5 K0 F( i1 M" n
  461. LSR) z; ]! E% \4 I  A8 F- g$ L
  462. ORA Button_Status,X. x$ f9 N2 `- a/ ?) ^
  463. LSR5 R4 t2 t; L0 Y, l
  464. ROL Button_Keep,X8 B; [3 A3 q' t: ^  u: U& V" k
  465. DEY, ~! n" z& Y; C$ M) s8 s4 `
  466. BNE Button_Value
    9 {, k; Y- ?6 h5 r0 i( a
  467. RTS
    , P$ r7 S* j) W' ]' T3 T. R
  468. . ^- f) j  Z- Y0 s; q  H
  469. ;==================================================
    7 P$ f" i1 ~' M5 o1 o
  470. ;按键自动按压
    0 h+ W% f7 |' _% j2 f
  471. Button_Auto_Press:1 f) G9 t! `$ W4 y  B; E; U
  472. LDA Button_Keep: u' Z* N3 m7 O2 h  y
  473. ORA Button_Keep + 1
    ; m: i2 [/ m$ ]1 J4 j6 h
  474. BEQ Button_Auto_Press_End/ K/ d. A# Y! k  t7 \" J4 }
  475. INC Button_Auto_Delay. L5 i, P3 H" |
  476. LDA Button_Auto_Delay
    . c/ t0 Z$ N# c. }. }  x% K
  477. CMP #BUTTON_DELAY_MAX
    1 P2 x/ k* Y; q& X) x* a
  478. BCC Button_Auto_Press_No_Active, ~6 t1 T; w1 `+ t4 O
  479. LDA Button_Keep
    2 s& a8 V& g3 A/ T0 F* M
  480. STA Button_Once
    ) @5 Q4 k# y3 b' m
  481. LDA Button_Keep + 1, a+ u0 F0 E' a+ R; X; h% f9 R6 ~
  482. STA Button_Once + 12 I0 z4 T/ P6 k4 B% @3 E" p
  483. LDA Button_Auto_Delay! @6 O: h! S- H. M6 I" ~
  484. SEC
    % f1 k# j6 u; R+ O) Z. e
  485. SBC #BUTTON_DELAY_SPEED
    1 Y, k1 t+ ~1 x' ]- H
  486. STA Button_Auto_Delay; O0 v! l8 n# ?) g4 X
  487. Button_Auto_Press_No_Active:
    $ y) y0 ]% W7 @+ K" E
  488. RTS) |7 l2 ]) f: T8 A& G: A
  489. ;----------------------------------------
    7 J& ~% T- S9 C9 L2 T
  490. ;未按压按键
    ! A( e( }) H. Q1 P" e1 B4 i
  491. Button_Auto_Press_End:6 G$ y, C/ ]) `/ ]
  492. LDA #$00. C' n9 m  f! b
  493. STA Button_Auto_Delay1 q: C) B3 h# _
  494. RTS
    7 U7 G0 p0 H; b7 O& ]  a

  495. ; f/ F1 a1 t$ k! u/ V# }
  496. ;==================================================
    ' D) l+ i: D# b+ C9 m
  497. ;设置PPU写入模式7 ^3 M5 G3 T1 G+ g/ F1 p, X' M
  498. Set_PPU_Mode:4 _; U  }% G; [& N. Q6 W/ H! A
  499. LDX FC_PPU_Cursor
    . X5 V7 G' O/ o- e& i" W
  500. STA FC_PPU_Buffer,X
    ; b* [  ^3 @. _# P
  501. INX2 m3 y8 {) X2 j- B' }" E4 {8 W
  502. STX FC_PPU_Cursor
    / r, E- P4 v* J2 }3 a5 p
  503. RTS
    : f# P% A; c/ e4 t! s
  504. " ~8 T& T+ `2 ?; ]" R, T; D. u
  505. ;==================================================' m5 _% i' f  ?8 ?7 [  w+ P/ ?
  506. ;写入单独一行文本2 x: k  ^* Q3 U  @7 G. g) m
  507. Set_Select_Addr:
    4 h6 I" |6 m; A
  508. LDX FC_PPU_Cursor
    4 S4 Z9 M7 C2 Z) F  M$ q- B& U
  509. LDA FC_Select_Temp. }# m4 K" H% g# i9 i7 H
  510. ASL$ o* Z0 q9 Z8 C# R% N' j: n( n
  511. TAY+ Z# A4 i1 e0 B4 T; T+ g( c- D1 c
  512. INY; C" n0 n1 k/ \( y9 N! L1 |" `
  513. LDA Text_PPU_Addr,Y9 ~8 f' B( S# O' ^; t/ t: k6 G
  514. STA FC_PPU_Buffer,X
    % t, q! A  e3 k( ?; U# r
  515. INX! c0 p( e' r, u- W
  516. DEY& d" e0 V( A! n& o4 A5 Z2 ^
  517. LDA Text_PPU_Addr,Y
    # t4 g7 U5 S2 V9 P
  518. STA FC_PPU_Buffer,X+ x+ Q! W3 T& L
  519. INX
    # ]! ?! R3 G/ a, e9 a( p* G
  520. STX FC_PPU_Cursor" p' O# [# c5 Y8 D' K: G2 j) F
  521. RTS# e. `+ R% e( y+ t
  522. % B- |( V# x1 R
  523. ;==================================================* C! w: ]. A5 d" J6 z# A9 Y5 }
  524. ;写入单独一行文本
    ) R; I. @; K1 A% u) Q  b: Z
  525. Set_Select_Data:4 D0 n0 h3 z; h# A- z9 F# R
  526. LDA FC_Select_Temp% S- \0 Y  |+ q* t5 i! N
  527. CLC; U. D6 A, |. A1 S7 f
  528. ADC FC_Page_Cur
    $ A6 z& s- G' m/ Q" N
  529. ASL
    1 W9 u0 G7 ?! u4 U8 E( y& i" Y
  530. TAY2 a# s# l! q( J% V
  531. INY- z) z6 \2 v! O* U
  532. LDA Text_Data_Addr,Y
    $ |6 t* g, o; h, g  l8 r3 P
  533. STA FC_Data_Port_A_H2 O6 P9 I, w; Y8 {' T5 T) s) W2 X
  534. DEY
    * I& C8 L% {! H0 `1 d5 R
  535. LDA Text_Data_Addr,Y
    , `9 h3 c( Y; Q& g; Q7 |
  536. STA FC_Data_Port_A_L9 o8 ]1 v( h' g) [* u  o
  537. RTS
    3 J2 H% s) O: V, o9 V

  538. ; c' ]) W1 L) N( Z4 C* ?- m+ c
  539. ;==================================================  ]8 q3 G& f0 p( ?
  540. ;清除旧文本
    ( j+ L; w/ V+ K6 v1 X9 r
  541. Set_Select_Data_Clean:
    9 t8 s- b/ [4 o& \! W
  542. LDA FC_Select_Temp
    ! J* ~) n& w; p( a0 b( c! H2 g( p
  543. CLC
    ) e/ |( A3 `* n* `* r; V0 b* z5 e
  544. ADC FC_Page_Old, C) \& a) v* s7 s
  545. ASL
    1 w# {1 H9 _' p1 M$ K
  546. TAY9 v6 l! u" }8 ?2 b5 \3 v( Z, N
  547. INY' k& W) w5 }: {4 D# B8 n
  548. LDA Text_Data_Addr,Y
    # s, k1 i+ E5 F4 Q4 a
  549. STA FC_Data_Port_A_H4 Y* A: H' p- G2 B5 X
  550. DEY
    " L, M0 U6 d' F1 N
  551. LDA Text_Data_Addr,Y! w4 j; w) ~$ F+ N& G! n
  552. STA FC_Data_Port_A_L
    ; d4 N( S' [$ q" T6 @3 \3 }, V
  553. RTS" i7 a% p2 x' \" [& h- c: H. f

  554. : o8 K  Y: a- n7 W
  555. ;==================================================
    & [6 i) {3 g, p8 _
  556. ;写入单独一行文本
    8 O6 m0 R: |6 `$ E; J! z8 p
  557. PPU_Data_Write_Item:
    * K4 A* Y, m1 L/ ?+ r5 a, u' X
  558. LDA FC_Select_Temp
    ! k5 q! h+ T9 @* \% X3 d
  559. CLC
    7 {0 F, W7 W( y& Z5 @( m/ X
  560. ADC FC_Page_Cur
    3 b- a5 T1 T3 }
  561. CMP #FC_ITEM_SUM
    ' A4 J) n2 u* i
  562. BEQ PPU_Data_Write_Item_Set
    : s7 I$ h" ~7 h8 i8 E: C
  563. BCS PPU_Data_Write_Item_End7 ^' O. F6 b& ?/ V
  564. PPU_Data_Write_Item_Set:- r- o# X( X9 C! D3 C3 a
  565. LDA #FC_PPU_MODE_CNTL
    3 R% s. H5 g, i7 Q, O! R8 m
  566. JSR Set_PPU_Mode
    / V  J( f, f' d" }
  567. JSR Set_Select_Addr) q6 K7 L" `0 T" u8 f/ @
  568. JSR Set_Select_Data
    0 g( v& w% p' t
  569. JSR PPU_Data_Write_Line# E( X/ [/ B0 s* c) }) c
  570. PPU_Data_Write_Item_End:
    , C) s/ I: e; `6 K* `8 Y
  571. RTS3 o; {: P  v, r3 e! H* \( q

  572. # |, o- L! Y* z2 b5 X0 P+ t3 C9 t
  573. ;==================================================
    . x0 D; p* u2 ^! J0 X1 W. z" ]
  574. ;清除单独一行文本
    ( K' b  a0 Y6 i6 h# k) b
  575. PPU_Data_Clean_Item:
    2 o, D! O( a: j" `* S0 ^
  576. LDA FC_Select_Temp
    6 B( x4 @9 H% V; W! e
  577. CLC
    & s% j) S* }" B: h$ f0 r
  578. ADC FC_Page_Old6 ~( ?; {* |- g8 g# L
  579. CMP #FC_ITEM_SUM" |7 r2 V3 m& ~/ Y8 P$ B
  580. BEQ PPU_Data_Clean_Item_Set. {% j, b9 V1 P/ m* Q6 `0 p5 y, I# T
  581. BCS PPU_Data_Clean_Item_End; {2 I( a' `, l, ^# i  g
  582. PPU_Data_Clean_Item_Set:. O7 q( q( V; M- B
  583. LDA #FC_PPU_MODE_CNTC/ Q9 S! p  f* P/ l7 V) C
  584. JSR Set_PPU_Mode3 c9 \6 K. a( d+ q, J! n3 A
  585. JSR Set_Select_Addr
    0 L& a1 t& Y# f! b, _
  586. JSR Set_Select_Data_Clean  w% K6 p# h' y5 F
  587. JSR PPU_Data_Clean_Line
    - W/ C$ F* B+ J  Z7 A
  588. PPU_Data_Clean_Item_End:* z& N+ K  Y; @: d3 s
  589. RTS0 X3 }/ q/ F! ?2 [" r! d- S

  590. $ G; a3 L* x" {/ {  k
  591. ;==================================================2 B2 K8 L9 P, ?$ K% z+ ?# \
  592. ;页内容写入
    * o$ K8 z6 d$ i( Z
  593. PPU_Data_Page_Show:
    - W  v3 F9 C$ s3 [& F
  594. LDA #FC_PAGE_SIZE/ S0 e: }, q6 ^
  595. STA FC_Page_Item_Count
    3 L/ A. ]" b) i( ~5 t
  596. LDA #$00
    ; U- G3 L! K2 s7 Q8 v( F& r5 \- S
  597. STA FC_Page_Item_Buffer# Z) a, A7 {! q- g
  598. STA FC_Select_Temp( C' O5 D2 b9 q2 H2 }
  599. PPU_Data_Page_Item_Set:
    - _6 K  `! ?: n1 z1 s0 k  A1 V
  600. JSR PPU_Data_Clean_Item" M2 d5 @# M. t& b# R) a0 _* t! Y7 N  @
  601. JSR PPU_Data_Write_Item5 `/ o* t% s% N/ N
  602. JSR Function_Status_Clean7 q. n5 ^- X' j8 E, {5 j
  603. JSR Function_Status_Show. D  S* A+ s% T" k$ M
  604. INC FC_Select_Temp
    ; c7 y7 r# \2 W  O! e  [: m' W& j
  605. INC FC_Page_Item_Buffer: L: D$ S! s1 Z5 L
  606. LDA FC_Page_Item_Buffer
    ; }  n/ Y% P1 @# P" w% _' k
  607. CMP #FC_PAGE_BUF_SIZE
    & J. b+ R- _; E3 c# J! ?
  608. BNE PPU_Data_Page_Item_Set_Check9 u% ]) G, W$ G/ M
  609. JSR NMI_Delay
    , @) {$ }5 r# j6 i  P" V7 u
  610. LDA #$00
    - a9 k' Q, J5 V0 o, u$ S+ u
  611. STA FC_Page_Item_Buffer
    4 \7 x. H! I% i9 F# v1 Y& G
  612. PPU_Data_Page_Item_Set_Check:9 ~0 C7 [+ T; m
  613. DEC FC_Page_Item_Count+ H" @' P3 s" s
  614. BNE PPU_Data_Page_Item_Set
    : Y/ a- Z3 q: u. k+ |6 g
  615. PPU_Data_Page_Show_End_Check:
    & ?5 R7 y3 M4 t; D- P: ^
  616. LDA FC_Page_Item_Buffer1 J: v7 ~+ Y9 ^2 Q, C
  617. BEQ PPU_Data_Page_Show_End
    ' `3 _. M" v# [: w+ n( ^
  618. JSR NMI_Delay
    9 C' j2 `9 w6 h: ~! i, @; P- [
  619. PPU_Data_Page_Show_End:
    6 d1 ~; w  o( f4 G( k+ d2 Y
  620. RTS, l) Z0 t+ J8 k4 w; L/ Y3 [' Z# t

  621. : w/ K, I' I! w2 B7 L. U9 P
  622. ;==================================================
    3 m  ]% `# D! |/ _9 m( ?
  623. ;PPU单行数据写入接口  Z2 B+ ?, }: S( ]- f0 `
  624. PPU_Data_Write_Line:7 z2 P1 z0 u( K& `$ \9 y+ P4 R- f
  625. LDX FC_PPU_Cursor( X: }3 g- A- D" c
  626. LDY #$00
    , |2 C* m: w9 U: H4 y( Y6 o5 n$ Y) P
  627. LDA (FC_Data_Port_A_L),Y
    7 P: ?. s  }' K$ p, j$ ?2 e
  628. STA FC_PPU_Buffer,X
    & \: ]( W' b! q. e- n
  629. STA FC_PPU_Data_Cnt3 R/ [' t. D. u+ p* a! d
  630. INX8 R* g/ f$ [- i0 T% D1 M$ u
  631. STX FC_PPU_Cursor
    ! B% G- T8 }9 ]8 D* q, T) [
  632. INY. {1 k  Z' \: i2 {( z) D7 f
  633. PPU_Data_Write_Line_Set:
    , p+ r) R7 f' S
  634. LDA (FC_Data_Port_A_L),Y9 K) Y# [0 J' x& X; x% q8 f+ u
  635. TAX
    % q+ s, P8 g: Z6 ^9 n* p9 |0 y& d
  636. LDA Char_Rom,X ( j1 J- p6 d+ ?1 X4 E! E
  637. LDX FC_PPU_Cursor
    . p5 ?) p$ b& h- Y1 x
  638. STA FC_PPU_Buffer,X/ ]# j3 o$ l1 ]$ }3 p6 t2 A
  639. INX
    0 b6 T: F; {! k8 i& Q
  640. STX FC_PPU_Cursor0 z0 T, S+ i' \$ Z
  641. INY# w1 f) ^) w1 i. h# E4 L! i2 Q3 [
  642. DEC FC_PPU_Data_Cnt4 e/ C% q; `% ^- k1 ~9 T) I9 K
  643. BNE PPU_Data_Write_Line_Set
    : a- i! Q+ B# D/ V
  644. STX FC_PPU_Cursor
    8 H5 x/ u9 i) k
  645. RTS# C& t& e+ Z- {- T; R" C, C* o
  646. 3 O4 N5 W1 J1 j- `% f/ t7 z4 d+ ^
  647. ;==================================================! i7 D# A4 A1 I" P3 H
  648. ;PPU单行数据清空接口5 `3 p2 X7 N! k
  649. PPU_Data_Clean_Line:
    , i! V* Z! [4 x* [& _4 r3 J% ?' L# G& Z
  650. LDX FC_PPU_Cursor
    1 }, D9 ^8 m5 s1 N, s
  651. LDY #$00
    9 @, C. B# c7 [2 I
  652. LDA (FC_Data_Port_A_L),Y# @/ m" d2 A, z7 C/ G
  653. STA FC_PPU_Buffer,X
    ; C( a' X; p$ d! ~' I& P7 U- v
  654. INX
    & }1 q6 \+ `2 Q$ }3 J& Z
  655. STX FC_PPU_Cursor- X2 b5 g6 Q( L$ q' H$ D  x3 i
  656. RTS
    + \' I- D1 @. a. h- m) J

  657. ( x" k+ l- [& C0 k
  658. ;==================================================0 f- d& J, Z9 C) ?% S6 T/ j5 w6 l
  659. ;更改选择项9 _" ~1 L; R+ `. s
  660. Change_Select_Item:5 r- F4 f! p4 J  |; N3 o# {. H
  661. Change_Previous_Page:
    " D8 O0 l8 K1 N; A" F, O: }) b) O
  662. LDA Button_Once& |, v9 M5 S3 ]+ L
  663. ORA Button_Once + 1# J: `9 X' y$ Y  p( N4 N
  664. AND #$02( V4 f, G$ c) c8 S
  665. BEQ Change_Next_Page1 |) u$ l/ p2 d$ k
  666. JSR Change_To_Previous_Page
    + M" q4 t7 L2 P
  667. Change_Next_Page:5 `3 N) ?3 v9 y+ Q6 Z9 _
  668. LDA Button_Once
    $ V+ j+ J! R1 Z$ Y5 a: {0 Z: ]
  669. ORA Button_Once + 1/ ?4 e$ k8 g" o5 z& `
  670. AND #$01
    ) r3 u5 I* P4 ]) _( v8 I3 i
  671. BEQ Change_Previous_Item
    . ~) r+ ~$ j. _' `& e4 Q) H# Q$ t+ ?
  672. JSR Change_To_Next_Page
    , Q! r1 W  @) C! ~& c9 x& Q
  673. Change_Previous_Item:
    4 y; N. O3 n$ o3 a/ K$ z7 d' r2 y
  674. LDA Button_Once
    . U) |; Q* L1 u+ O: ^
  675. ORA Button_Once + 1) R$ a6 h/ k( O% J5 I9 N
  676. AND #$08
    9 E; m' G" o) t' M
  677. BEQ Change_Next_Item+ j4 k; h: \( t0 W0 s- s. N9 k
  678. JSR Change_To_Previous_Item
    % b7 u  A0 U3 Z. `+ j/ L
  679. Change_Next_Item:
    * W' K; S/ y/ \3 K9 x
  680. LDA Button_Once  R5 q5 W0 @1 Y' j7 P# b' W  i
  681. ORA Button_Once + 1& v! y* l5 p/ m% @6 h( k2 A
  682. .IF FC_IS_DOUBLE_PLAYERS8 e/ X: `) s2 h& v6 B
  683. AND #$04
    5 L" z$ [4 a; Q" b
  684. .ELSE' @5 n( z0 F# x0 P4 g' U. X+ u" Q0 o
  685. AND #$24  F9 [- T5 p/ Z' j. N
  686. .ENDIF
    1 Z% q* e8 L0 k+ ]. R4 K2 a$ [
  687. BEQ Change_Select_Item_End
    3 ]8 y$ {# I% `1 b$ h# {
  688. JSR Change_To_Next_Item
    8 K, o/ V2 J# g* A1 i& P
  689. Change_Select_Item_End:
    * D7 C! t/ f1 Q5 ]
  690. RTS+ Y$ L  i1 M( R7 @% {+ B& J4 m1 k
  691. ) F9 N  X) i6 K
  692. ;==================================================( A$ @4 A" Q4 ^
  693. ;切换到上一个选项$ P9 f& M9 A, }7 u6 ]5 m% ^4 C
  694. Change_To_Previous_Item:
    : |" b& C8 J# c, d3 ~
  695. LDA FC_Select_Index* ?  b7 v; k. a. ]
  696. BNE Change_To_Previous_Item_Set
    ) f+ _- _) F  w9 _; |" U
  697. ;----------------------------------------( L- F2 I& F5 \$ e4 Z+ F
  698. ;切换到末页最后一项
    0 W0 a$ v7 e% D, @4 ]; ?8 h; z
  699. Change_To_Previous_Item_Set_Last_Page:1 W" S1 ?' h) ?; a. q2 v
  700. JSR Record_Last_Page_Index
    0 Q# Y, q  \! j4 i8 L( U# W' ]
  701. LDA #FC_ITEM_SUM2 `/ J$ u1 T- l$ |7 x
  702. STA FC_Select_Index
    7 B% b& E6 b5 T( B1 ]( Q
  703. LDA #FC_PAGE_MAX. G3 G, ^+ g# H% g: Y3 Z5 A: I( l
  704. STA FC_Page_Cur; m2 R- @$ W3 q/ ]
  705. JSR Update_Page_Content
    * ~, ~! n  G. v7 q( r
  706. RTS# H8 G% v5 e: N2 \' B
  707. ;----------------------------------------
    9 Q4 s+ y" d+ c0 j- \
  708. ;切换到上一个
    5 M* l: o* Y3 I9 E  ^' c: T
  709. Change_To_Previous_Item_Set:
    8 s% e- E8 ^- f0 r- u8 S8 k# j6 {
  710. ;检查是否需要换页8 }8 b; c" T6 X+ e3 @9 |
  711. LDA FC_Select_Index# X' l+ ^6 u+ z
  712. CMP FC_Page_Cur5 `. _! }. E# M' V: Y! w
  713. BNE Change_To_Previous_Item_Set_No_Page+ k- z& a8 k: H
  714. ;----------------------------------------
    $ e5 K: n3 O' C+ c2 x5 \
  715. ;切换到上一个(需换页)2 G) r+ t. s/ R9 V
  716. Change_To_Previous_Item_Set_Page:& p: {, I4 @, e+ W% i4 G
  717. JSR Record_Last_Page_Index3 }$ o' n) i# K. J9 E4 i, j! J) R
  718. LDA FC_Page_Cur
    ' ^  V" T0 f+ @4 Z0 {
  719. SEC' }/ Q/ N) i' ?& x
  720. SBC #FC_PAGE_SIZE
    ' g  P( x2 ~% b, O* J  t  N- g
  721. STA FC_Page_Cur
    : N" B4 i0 b9 y8 F9 U1 v) r
  722. DEC FC_Select_Index
    5 \- }6 s6 ~8 r& H7 g
  723. JSR Update_Page_Content) U6 C/ a  R6 J' X6 W  o% l
  724. RTS
    4 L2 |. e3 P$ W) j' R: g6 b
  725. ;----------------------------------------
    : v7 ^0 H- L; b  A2 N4 \- o! e
  726. ;切换到上一个(无换页)
    : K4 D) r" B" d
  727. Change_To_Previous_Item_Set_No_Page:
    ) Q2 `! I/ @, K3 Y5 ], U- ^
  728. DEC FC_Select_Index
    8 }, K. f1 k2 b# s8 z
  729. RTS
    7 k* m$ \9 H3 m; V5 n( v

  730. / v% W, y1 A" a9 g! B6 u
  731. ;==================================================" I; F2 g- J0 e; G4 {
  732. ;切换到下一个选项
    ( m3 _9 H6 I6 t& o
  733. Change_To_Next_Item:
    5 z8 W& ^" Z: \# C3 I; u
  734. LDA FC_Select_Index" u% C7 \8 y2 g( q4 g# F# N$ B7 T
  735. CMP #FC_ITEM_SUM
    2 k+ ^! U) G' ?, f9 k/ [: V: w2 u
  736. BNE Change_To_Next_Item_Set, L# _: ?! H7 D! ]7 t- ~
  737. ;----------------------------------------! H- p$ k+ k1 e
  738. ;切换到起始页第一个
      j0 L, w% ^" K0 v7 x' `
  739. Change_To_Next_Item_Set_Begin_Page:
    $ s7 W' D: o  [: [* X6 M1 P' I
  740. JSR Record_Last_Page_Index
    1 |* z: o% U; O- b* R
  741. LDA #$00
    4 @* V- L: w' K2 @
  742. STA FC_Select_Index$ ^; r. X9 @) ?1 u% E; \
  743. STA FC_Page_Cur# h4 G* s7 ~5 q: x: K* k5 M% @
  744. JSR Update_Page_Content
    ) x5 l' b% S3 p! U8 I
  745. RTS
    1 Q) F1 [7 X+ S5 q$ J! z2 s7 x
  746. ;----------------------------------------
    7 l% c  b# M7 R% `
  747. ;切换到下一个
    5 n, h3 N, e7 K2 y- p: \
  748. Change_To_Next_Item_Set:; g0 l" v. u( x2 [! I
  749. INC FC_Select_Index
    - S/ M- J' a4 l  ]$ c& j, I( B* v
  750. LDA FC_Page_Cur
    # ~4 @( e6 J# M. @3 u2 Z
  751. CLC
    1 s$ }* T# D/ j
  752. ADC #FC_PAGE_SIZE8 D# _6 l' ^: f+ s& e
  753. CMP FC_Select_Index- r8 S/ u& S: C6 E
  754. BNE Change_To_Next_Item_Set_End
    8 _7 z, N, Q; u$ H5 N3 ^
  755. ;----------------------------------------! \- H0 U+ p$ w1 c- c" [3 [
  756. ;切换到下一个(需换页). F, n7 p2 u) X# t
  757. Change_To_Next_Item_Set_Page4 T1 K+ r7 M/ Q
  758. JSR Record_Last_Page_Index
    ( m8 ^) S' Y" m2 f3 {( ^
  759. LDA FC_Page_Cur# K" Y7 s, ^  b' l3 ]7 _2 X
  760. CLC+ r9 H' i. i- m* b3 B
  761. ADC #FC_PAGE_SIZE
    : P- t  ~& u) Z9 s1 _* A  y
  762. STA FC_Page_Cur
    - X2 v( Z: r6 Z( {0 h& Z
  763. JSR Update_Page_Content4 D) ]: v% Q9 R, @
  764. Change_To_Next_Item_Set_End:
    9 A% X0 Q# d3 v; \( c0 B9 D4 k
  765. RTS
    3 F! E$ Y& b: `* l* H6 `% g
  766. $ T1 q* O/ R/ K+ p
  767. ;==================================================7 I9 A8 s: X, t' R2 u1 P
  768. ;切换到上一页2 ?; F- M' I5 f! r8 P. A
  769. Change_To_Previous_Page:
    ; q/ O) e6 A9 |
  770. LDA FC_Page_Cur* \7 b0 D& H: F# h
  771. BEQ Change_To_Previous_Page_Set_Last_Page: Z" O5 u$ U$ a
  772. JSR Record_Last_Page_Index
    : x6 i- f& o  L( S& ]+ D2 G5 n
  773. LDA FC_Page_Cur# p/ w" u9 l) f  f
  774. SEC5 G" |6 I. X- Y/ s7 \6 L! q# k
  775. SBC #FC_PAGE_SIZE
    0 ?0 m7 s4 p& b9 E7 L$ w; m5 s
  776. STA FC_Page_Cur" Z, ^8 B8 U: q9 x( ?
  777. LDA FC_Select_Index$ F( m' d, ~& e! g: t
  778. SEC
    2 B0 j0 f& ]& {* g9 f& ~
  779. SBC #FC_PAGE_SIZE  h" c- S" n6 X  S. G8 k6 k- `
  780. STA FC_Select_Index
    : x9 f4 @" s. e; I# V9 m6 r9 C
  781. JSR Update_Page_Content2 d  h: D# x$ G- z3 X+ q0 H
  782. Change_Select_Last_Page_End:4 G/ `1 G: d6 f0 V
  783. RTS
    & ?6 P5 k6 Q. P2 P( H6 x/ V# ?) K
  784. ;----------------------------------------
    2 u) E5 S) S0 \8 Q* R- l4 a2 `. I
  785. ;切换到最后一页
    - q/ n$ s& Z6 m& q  n, k) n
  786. Change_To_Previous_Page_Set_Last_Page:5 y4 S7 h% c) w9 \8 B# r1 _/ C
  787. LDA #FC_PAGE_MAX1 P. S' u+ n; L4 |( I9 Z1 T
  788. BEQ Change_To_Previous_Page_Set_Begin_Item
    5 s: X  y4 U* b! Z0 B/ W+ T
  789. JSR Record_Last_Page_Index
    & @1 J( X- A6 |, j* e: m3 d" h
  790. LDA FC_Select_Index! @: l4 u6 p; h
  791. SEC
    ; e9 i. }# H) Z( V
  792. SBC FC_Page_Cur
    / N: d  ~$ W2 a1 k2 y
  793. CLC
    + ]0 J& g0 W& ^/ N" t
  794. ADC #FC_PAGE_MAX
    . S- Q1 C$ R4 ^0 {, D2 x9 e
  795. STA FC_Select_Index
    4 a% L* G+ r0 E* R2 `
  796. LDA #FC_PAGE_MAX5 i, C1 F8 `4 o% V" s2 s
  797. STA FC_Page_Cur
    / C5 Y" n& W- o& E/ r  Z
  798. LDA FC_Select_Index
    3 P9 o6 ?9 Z* Y" h2 q. m' `5 q: T5 F
  799. CMP #FC_ITEM_SUM
    5 @8 V% S$ Q6 P! n& q  e5 k
  800. BCC Change_To_Previous_Page_Set_Last_Page_End- K" c9 {: `* E
  801. ;----------------------------------------# S/ S% R; d1 p% c0 q
  802. ;切换到最后一项
    # j3 H: Y. M9 D7 m
  803. Change_To_Previous_Page_Set_Last_Item/ D% R' Z! {+ Q" t2 `2 o
  804. LDA #FC_ITEM_SUM; P4 ]' W7 r9 S; m$ X
  805. STA FC_Select_Index
    % M0 W& {/ j8 D8 V
  806. Change_To_Previous_Page_Set_Last_Page_End:! _2 j: l9 S& K2 ~5 N# x5 V# {
  807. JSR Update_Page_Content1 I, \' H9 D+ @+ p, t$ e: {
  808. RTS8 e4 F, P: }9 b4 s+ Y  z
  809. ;----------------------------------------  I1 d' |! }- g
  810. ;切换到起始项(最大页只有一页时)) v+ n# g5 a$ m) w3 [5 v3 i
  811. Change_To_Previous_Page_Set_Begin_Item:
    0 d3 S/ y9 [: e1 W9 r6 Q# _2 A
  812. LDA #$00
    2 i; v& `% i( M4 t7 X
  813. STA FC_Select_Index1 }4 g8 a5 g- w( {4 u# s9 u
  814. RTS& s0 D# a2 J$ Q  K# _5 N/ Z; ~7 V
  815. # |4 b" P' |( E6 \
  816. ;==================================================
    + p  N; w6 W- W/ P# K. T
  817. ;切换到下一页
    " Q# a# s2 x  c- W3 h+ z
  818. Change_To_Next_Page:
    ) T4 }  q1 a( S/ ]! I, W
  819. LDA #FC_PAGE_MAX) |" B- W# j8 w7 \
  820. BEQ Change_To_Next_Page_Set_Last_Item2 ~: l; `4 F% k3 E, z$ ?
  821. LDA FC_Page_Cur7 r! y9 T+ S& L; S4 g8 v1 X
  822. CMP #FC_PAGE_MAX4 g' o, m6 V5 F" K/ k( `3 K- W; e4 r% @
  823. BEQ Change_To_Next_Page_Set_Begin_Page9 I7 O3 a1 m+ {7 E# K' }
  824. ;----------------------------------------" I. X* S% k- i" A
  825. ;切换到下一页
    3 ?4 L5 U5 _7 \2 W' r+ S6 S
  826. Change_To_Next_Page_Set:0 U8 O. |+ U5 n8 ]
  827. JSR Record_Last_Page_Index! M; k5 @; |$ q( L! ^) X
  828. LDA FC_Page_Cur  W& U: H8 q  g& d+ h
  829. CLC; }* s6 l8 {0 M
  830. ADC #FC_PAGE_SIZE( o* j0 a0 n: F; v/ C6 f
  831. STA FC_Page_Cur
    : B! ^  N7 T7 \% y
  832. LDA FC_Select_Index
    * Y! D  ?& q$ m
  833. CLC
    7 [* s+ K+ P/ `
  834. ADC #FC_PAGE_SIZE
    1 ?2 T& N; v& [6 y' d
  835. STA FC_Select_Index/ q6 F4 a/ a, H) j% m' p
  836. LDA FC_Select_Index- p# G+ {% r5 \% z! H+ P0 [0 f
  837. CMP #FC_ITEM_SUM+ e; @$ E  J5 n
  838. BCC Change_To_Next_Page_Set_End
    8 W. c! m8 F; h: }
  839. ;----------------------------------------
    , v0 B5 N9 t8 f! B6 K/ ^7 @
  840. ;切换到最后一项
    # J: s  m" g0 M* t+ y
  841. LDA #FC_ITEM_SUM
    8 s9 ]1 |$ q. [- _
  842. STA FC_Select_Index+ i6 X7 g. {5 a8 l  k
  843. Change_To_Next_Page_Set_End:' @* ~; ?# R; V( x. y; {
  844. JSR Update_Page_Content$ K& p2 p4 o) a# t5 O
  845. RTS+ G1 \+ l  n" E1 h
  846. ;----------------------------------------
    + j7 p$ F3 F) W
  847. ;切换到起始页
    , P) W( s! k; n9 g4 J' I
  848. Change_To_Next_Page_Set_Begin_Page:
    , z0 t8 @1 j; ]' C! L
  849. JSR Record_Last_Page_Index
    ' |/ j( a$ h' c$ T' V5 G
  850. LDA FC_Select_Index
    / n, q0 V. i2 ]# u7 w4 e1 d$ B
  851. SEC7 w3 h, e, c3 u4 T
  852. SBC FC_Page_Cur0 \( G3 T9 h+ [+ O" U3 E
  853. STA FC_Select_Index
    + U6 b7 B: S6 a. e$ U  l: h+ V
  854. LDA #$004 f9 ?# [: w& A
  855. STA FC_Page_Cur
    ) R) l0 V9 u  u. N0 X2 L5 q
  856. JSR Update_Page_Content& v; r) y5 D) m( g
  857. RTS
    7 Q7 i3 l  z1 Q: h# n
  858. ;----------------------------------------1 ]- ^7 e0 H% X" S
  859. ;切换到最后一项(最大页只有一页时)
    0 s  g* z. c2 v" S
  860. Change_To_Next_Page_Set_Last_Item:
    % b1 O- j) R7 g; U0 x
  861. LDA #FC_ITEM_SUM9 q& t# F* C, P+ y
  862. STA FC_Select_Index
    & x2 M- F8 [* \9 k: }% H; \6 B
  863. JSR Update_Page_Content
    / E' o6 f# I- ^( u
  864. RTS6 H+ A9 u- S- {4 S2 {/ {$ H
  865. : ]5 C/ a: u/ G' m6 j/ _% J8 b
  866. ;==================================================$ B: H" [3 L. [- [& |1 r
  867. ;更新页面内容1 k( h0 b' b7 R, c! |
  868. Update_Page_Content:
    1 M5 m+ z0 }! e- s# `3 @& |$ i
  869. LDA FC_Page_Cur; p" C. h5 M8 ?0 x% y, v+ e
  870. CMP FC_Page_Old* \% T9 t' E+ X: b1 K- w
  871. BEQ Change_Update_Page_End  W% F, F* n8 |2 K, r7 ]
  872. JSR PPU_Data_Page_Show
    1 `1 p2 B3 F  \* A8 F
  873. Change_Update_Page_End:
    , p7 O( Y# s" j4 L% g
  874. RTS
    2 N! d5 b2 \% I9 r
  875. 3 S# o8 z6 y+ M5 A% z' o5 Q
  876. ;==================================================+ r! z- T- t7 @8 K7 r7 @  K( ?; F! G
  877. ;记录上次页索引% n) m: p9 Q2 |" N4 w* [
  878. Record_Last_Page_Index
    ! j4 w* [5 o/ c2 ?- K- H
  879. LDA FC_Page_Cur
    - @2 \5 l) x# S: ^" w: _2 E) m
  880. STA FC_Page_Old9 W! y8 D9 M; ]2 Q. C
  881. RTS
    + c* g6 F$ C( {0 W

  882. % x4 J& N3 D1 Z( T7 _  A' Q
  883. ;==================================================
    - `. h7 C) y& O) O7 t( N( U
  884. ;显示当前选择项光标
    ( t5 U* u3 S% i2 ^% d
  885. Show_Select_Cursor:
    ! ?, O' o' ?, H) a' p
  886. LDA FC_Select_Index' I' D) V* R) q6 s4 B" t6 L2 L! w
  887. SEC' y2 Q1 _  p* H' F! W: c
  888. SBC FC_Page_Cur. s  y& o$ r8 ?6 j  [, A6 Z9 Q) d
  889. ASL
    , m7 b# Z1 ^$ Z% {
  890. TAY
    8 x: L: @) S; M3 T5 Y; S
  891. INY
    4 o" F/ \5 h8 |3 {* L& s$ K' P1 v2 l
  892. LDA Text_PPU_Addr,Y5 T5 G& M: F5 I
  893. AND #$03; `4 L! g; [6 k* P* z
  894. STA FC_Cursor_Addr_H9 t) L  s* ^5 u5 m# u: \
  895. INX
    4 I) u& d2 @- l. o( f1 V
  896. DEY
    " K# ~: P- C% {* p* E
  897. LDA Text_PPU_Addr,Y
    $ F7 E; z4 u3 t0 n' g! e
  898. STA FC_Cursor_Addr_L
    * h; i, v( Q- @* S) F7 {) J
  899. ;----------------------------------------
    9 j* R) f. A- M$ r) k3 n# j/ t
  900. ;计算光标X坐标" k7 i+ q9 c/ X- h9 H1 _) k
  901. Show_Select_Cursor_Set_X:* b+ I. E: t$ a1 l- L% C/ b# Z
  902. LDA FC_Cursor_Addr_L  y$ P  |' M+ _( v# K
  903. AND #$1F6 U3 C; v( c0 Y
  904. ASL& w. k% v6 R& S  A
  905. ASL
    2 ?2 s$ |. F2 ?
  906. ASL! ~# L2 m$ {& ?
  907. STA FC_Cursor_X
    ' `0 [+ b: V" `1 j$ X
  908. LDA FC_Cursor_Addr_L
    5 a- b2 Q, s0 ^! {
  909. AND #$E0) O: b, ]5 K, o9 N1 Z8 q" n7 a
  910. STA FC_Cursor_Addr_L
    3 Z) X0 Z0 `9 k" ~& L& c
  911. ;----------------------------------------
    ( q, b$ x6 d9 w3 |9 f& m4 P
  912. ;计算光标Y坐标
    2 F: n2 x$ ?' j3 h; q3 e+ D% e
  913. Show_Select_Cursor_Set_Y:
    9 g2 O+ r" l: p2 g8 W0 I; p( t  g
  914. LDX #$05
    $ N/ O9 j, l- o/ {: P+ j
  915. ROR FC_Cursor_Addr_H
    5 j' y. H# D1 l7 O% s- }& G* m
  916. ROR FC_Cursor_Addr_L
    " @% V# T0 @3 s% v* V: m
  917. ROR FC_Cursor_Addr_H
    1 [  E# \" a# _, W9 ]- O: g0 z8 [
  918. ROR FC_Cursor_Addr_L1 e! E/ e3 R3 K) i) C' {6 U: t
  919. LDA FC_Cursor_Addr_L4 f4 c% @4 C& G- v& y1 `; j. }
  920. STA FC_Cursor_Y/ m( }% S- w$ ^$ y5 k
  921. ;----------------------------------------
    4 F# N9 `' F# h+ F" \! n$ W) x6 a5 f+ v
  922. ;写入光标
    9 O) u! Q) E# J0 T) C; p6 K: \$ s
  923. Show_Select_Cursor_Set:
    " q6 K* F  ^, g
  924. LDA #$00
    " f. V. T; F% J3 Q9 r0 G( T( v
  925. STA $20035 \4 b& v+ y* I5 R$ o" o3 X4 M8 o0 w5 s
  926. LDA FC_Cursor_Y
    ! |4 h3 c1 B/ T
  927. SEC, [2 A& g; b/ P% }, K
  928. SBC #FC_CURSOR_OFFSET_Y7 O0 }& |# h) _. g0 M
  929. STA $2004
    ; \# h- j" k7 T# m. l
  930. LDA #FC_CURSOR_TILE
    ) N8 m5 L, F7 E% N, ]0 v- k
  931. STA $2004
    0 B- H% b' x6 j
  932. LDA #$00" G+ n+ Y2 w: E
  933. STA $2004/ u% z1 g0 J# _( Y
  934. LDA FC_Cursor_X6 ]4 W# B9 `! ?# v0 I' v
  935. SEC) }( [& d7 @% k6 e- ?! q' S
  936. SBC #FC_CURSOR_OFFSET_X" |5 K% @* ^$ _$ z% u2 ?
  937. STA $2004, r! [; A, _  J' T/ }: }
  938. RTS! ]8 F1 K: t4 C9 ^' @. Y5 K
  939. ! S& c" W: T" t' r- T: \6 L
  940. ;==================================================
    9 z- Z) y0 N" ?3 O$ B! {2 M
  941. ;切换功能
    4 Q' ~2 B( D& }7 D! i5 G
  942. Change_Function:
    2 G9 |% g1 q: d, f# N: R
  943. ;----------------------------------------) _" }$ ^* h# X2 u0 \# o- B
  944. ;开启功能A5 j, V( b3 J( P9 M* S
  945. Change_Function_On_A:2 B! U3 O) L# b5 }( c
  946. LDA Button_Once! j6 O, e9 z7 n7 s
  947. CMP #$40  v1 m1 Z. F2 X( \
  948. BNE Change_Function_On_B
    , l# z& ^% {6 E; O) F. B
  949. JSR Change_Function_To_On_A
    6 |4 f7 O9 t( u+ m
  950. JSR Function_Status_Update% X/ r) I$ @/ K0 X* Q9 g# F
  951. ;----------------------------------------7 ^$ N1 ~6 p+ T3 x0 J
  952. ;关闭功能B+ ~. N! l5 [5 C) F% C# j
  953. Change_Function_On_B:
    + x2 X; Z( D2 z4 F4 h) R
  954. .IF FC_IS_DOUBLE_PLAYERS
    ( ~1 _7 @9 U3 a
  955. LDA Button_Once + 1# v6 D3 D9 `3 u4 C
  956. CMP #$40: _6 j9 ~+ w8 B
  957. BNE Change_Function_Off_A
    7 [. `9 Y7 K6 d/ h2 ]1 r
  958. JSR Change_Function_To_On_B
    1 [4 |" D% A3 X' B; U
  959. JSR Function_Status_Update
    ! a* s5 R3 b; M' [' u
  960. .ENDIF& b: p4 t( E2 J4 L
  961. ;----------------------------------------
    & G8 ^" f' G  @
  962. ;关闭功能A' P" C8 C, d  Q% U2 K
  963. Change_Function_Off_A:3 W8 u5 F3 S: V$ D2 x
  964. LDA Button_Once. I- R8 U, @6 q4 @! k; p
  965. CMP #$801 q' @( a2 B% S: s: ^; B
  966. BNE Change_Function_Off_B
    - v0 s" q: ]$ Y8 s5 Q) G1 u% Z5 d+ p" C
  967. JSR Change_Function_To_Off_A
    , @1 G* j; D# _9 Q# e
  968. JSR Function_Status_Update3 v9 q( O' V  \& I1 z
  969. ;----------------------------------------
    6 ^8 G5 P  q% k5 `: B1 a) L
  970. ;关闭功能B+ w' z& j& k4 r( u: l
  971. Change_Function_Off_B:% N: {8 J' C. {% e- ]+ r
  972. .IF FC_IS_DOUBLE_PLAYERS& g: r1 q. P* \2 b# b
  973. LDA Button_Once + 1" Q- I& U, L" Q+ T4 I5 f4 ]0 D2 P
  974. CMP #$80
    ( m( `7 u" x" k* U: c
  975. BNE Change_Function_Swap( V) I7 r* W* j& v4 w
  976. JSR Change_Function_To_Off_B
    2 M. @6 C* O2 a  t! u. B6 o6 G! [! A
  977. JSR Function_Status_Update" z8 R2 a6 Q1 N, A4 p
  978. .ENDIF
    0 R! T8 t' U3 f* k
  979. ;==================================================2 [: u3 F' f8 B" K' b2 j, b
  980. ;交换开关! s- x! X; J7 ^% K1 p) o( d# w6 h4 g
  981. Change_Function_Swap:# Y3 S  o) [& Q  z4 ]. ^# N" O) z; t
  982. .IF FC_IS_DOUBLE_PLAYERS( o' F* s; o4 e
  983. LDA Button_Once
    " n  F8 i# a! ~6 |& N
  984. ORA Button_Once + 1
    ! ?- E+ i" V+ n1 \0 e
  985. CMP #$20
    * Q; ~/ N1 D' _( w" p- _6 {
  986. BNE Change_Function_End
    & |  k" c6 @3 V
  987. JSR Change_Function_To_Swap1 U# V' |4 ?: Z( J: f% |+ V
  988. JSR Function_Status_Update
    ) C8 z1 [& O# g( `' |: B
  989. .ENDIF& f1 D/ }* o9 N- C; R: Y
  990. Change_Function_End:
      ?9 D7 s+ T) i
  991. RTS
    2 X# P0 O  R9 A$ a' W; t: A
  992. , k3 z1 c3 E; J/ m% Z
  993. ;==================================================. N& D+ v" Q9 K3 w( D! B+ h) ]
  994. ;交换开关状态4 \, V* O$ _+ `7 o
  995. Change_Function_To_Swap:5 L1 ]. j- ?1 W% i4 m% D8 a' c
  996. .IF FC_IS_DOUBLE_PLAYERS
    ' u  Z2 i$ d* b
  997. LDA FC_Select_Index6 C9 z6 T$ y' u. ]' K' J! e
  998. SEC
    * Q7 N) W: e3 ?3 V+ x) |2 F7 d
  999. SBC FC_Page_Cur
    5 `& @& V( J( @7 E: K* ~
  1000. STA FC_Select_Temp
    " c6 `9 K* I( Z! c. w
  1001. JSR Set_Function_Port
    : @8 ]9 A. _; X
  1002. LDY #$00
    2 k5 N9 i+ Z* _( T& c
  1003. LDX FC_Select_Index
    " y& l) q9 G& B1 J7 M0 d
  1004. LDA (FC_Data_Port_A_L),Y' y9 B! S# x2 ^+ F" u6 K
  1005. EOR (FC_Data_Port_B_L),Y
    ( z+ S& o6 W5 Q( A$ m/ b! f7 L4 }9 g
  1006. AND Function_Check,X
    , R) b2 n. X/ W2 p: B; q4 }4 {
  1007. BEQ Change_Function_To_Swap_End9 F; W$ l6 B. w5 k% \
  1008. LDA (FC_Data_Port_A_L),Y
    4 Q3 E4 T/ Z; h" q0 _- v
  1009. EOR Function_Check,X
    8 T( s3 ~% B5 s1 {
  1010. STA (FC_Data_Port_A_L),Y
    0 _4 i' L0 g* u3 {' A
  1011. LDA (FC_Data_Port_B_L),Y
    ' L* Z0 ~6 h. |, |2 [7 d
  1012. EOR Function_Check,X
    & G- g4 z: d6 t3 ^1 e# g
  1013. STA (FC_Data_Port_B_L),Y
    . q9 v. _, [1 z- |( h! e& \* C/ c
  1014. Change_Function_To_Swap_End:, u$ O& \" _! k0 T$ k5 J. k
  1015. RTS
    : e8 y7 }" T9 k7 ?. `
  1016. .ENDIF7 {% Y& v0 `# C. J/ v; C( j+ Z8 B/ E8 x

  1017. 7 B. N8 |+ N1 T5 i2 l
  1018. / G  n( s7 {6 z9 D
  1019. ;==================================================
    - z  `- s, }5 H7 k9 Y: M) ^
  1020. ;更新功能状态
    * \. s- s! M# N+ T. A# e9 N) ~% i* t
  1021. Function_Status_Update:, G3 \  s- H' e, Y
  1022. LDA FC_Select_Index
    # ]/ a! z7 [9 [. f. \( t8 k
  1023. SEC7 j, d+ o1 t- L, G9 d
  1024. SBC FC_Page_Cur/ c- O& q$ L) }$ J& e8 Z
  1025. STA FC_Select_Temp
    . d3 t* |# o, B# N
  1026. JSR Function_Status_Show3 h0 p$ m# Z* a6 J
  1027. RTS/ S, U4 G5 X6 O5 U) E3 b
  1028. . R6 N2 x. f, O3 f) F& R4 |
  1029. ;==================================================
    + ~: \! d7 P0 m9 K+ m# Z
  1030. ;设置功能地址端口
    ; F; e4 f# a% W
  1031. Set_Function_Port:
    ! n/ e1 t1 a8 d9 t6 @
  1032. LDA FC_Select_Temp  e0 m( g' \7 r( F
  1033. CLC
    , v' Z% t6 z9 w+ G& M
  1034. ADC FC_Page_Cur, r5 X. H2 s& x1 I+ Y+ ^
  1035. ASL
    ! P8 F. Z2 p; O9 ^" e9 R
  1036. TAY9 w* E6 z3 [, p5 m! U( U
  1037. INY# ^/ n( L& d1 \' p. l
  1038. LDA Function_Addr_A,Y. |: {- L7 L: N  P- a
  1039. STA FC_Data_Port_A_H
    * r$ O$ [) A+ j( [" d, ~8 H
  1040. .IF FC_IS_DOUBLE_PLAYERS8 X5 O. j2 n4 \% M# y
  1041. LDA Function_Addr_B,Y
    3 R4 g0 w0 |" [3 `7 \* W" n
  1042. STA FC_Data_Port_B_H
    ! ?. K$ u$ E7 ]; U- G3 L, i) g
  1043. .ENDIF
    : R- m6 I5 @7 X: i) T( C
  1044. DEY
    5 \, z8 o* C; i+ d' i0 V( b
  1045. LDA Function_Addr_A,Y
    ) a9 T- _$ G# @; z! m+ [
  1046. STA FC_Data_Port_A_L9 N2 g5 r' \4 M
  1047. .IF FC_IS_DOUBLE_PLAYERS
    0 P7 ~: n8 y  G$ B
  1048. LDA Function_Addr_B,Y0 n" E( _: F: L
  1049. STA FC_Data_Port_B_L
    1 r: F3 j6 U0 Y7 T
  1050. .ENDIF
    6 Y  Z- Y5 }4 Y. i) n+ }2 W
  1051. RTS9 ~3 b, O5 B2 t7 C& b6 x9 D7 s6 m! u

  1052.   Y& Y& W6 e% _) ?6 ^$ K, S# e
  1053. ;==================================================
    ) o3 t' T- [& ]4 r
  1054. ;设置功能临时索引* Y4 k, i( ], p( l' ^2 J6 s& ~! h9 t
  1055. Set_Function_Temp_Index:
    % E  [( U  d# R+ ^7 Y
  1056. LDA FC_Select_Index
    3 w5 Q5 g4 n( G: f* t1 W0 N1 F
  1057. SEC
    1 ~8 S. z0 I2 o
  1058. SBC FC_Page_Cur
    " b& M' p# T4 F2 n
  1059. STA FC_Select_Temp, O9 F3 u+ h8 h) o) u8 w* v
  1060. RTS" ^' D- h' d( J

  1061. / Z+ k! M& b+ o8 @1 L8 \& z# f8 t
  1062. ;==================================================
    & ?, C# ^! z+ K9 S
  1063. ;开启功能A1 N, ?( [; V; l8 Q# K
  1064. Change_Function_To_On_A:
    1 l% \. V! i5 j) X- f
  1065. JSR Set_Function_Temp_Index
    $ @7 r3 Z: s3 V# e1 v' d6 z, e
  1066. JSR Set_Function_Port5 C: b6 B; w% [4 i! `
  1067. LDX FC_Select_Index9 i5 B3 J# k5 p* B$ _- T
  1068. LDY #$00
    6 G4 a9 u, w  |
  1069. LDA (FC_Data_Port_A_L),Y
    * G9 M, j! n% e$ Z
  1070. ORA Function_Check,X1 ^  M( [( K; y9 }
  1071. STA (FC_Data_Port_A_L),Y
    . z; Y" a4 M4 G( L) P
  1072. RTS
    ! e6 k; {2 h3 A, i/ I
  1073. ;----------------------------------------
    2 c4 X& l  S2 b. }6 w2 {
  1074. ;开启功能B1 J* }4 `1 X4 I* P: S; ~0 I0 I! d/ c
  1075. .IF FC_IS_DOUBLE_PLAYERS6 w9 H! s# m$ w2 a1 X
  1076. Change_Function_To_On_B:
    , r' Y, v8 J( C( _
  1077. JSR Set_Function_Temp_Index' z" U  c( \$ z/ D
  1078. JSR Set_Function_Port
    4 W% l' J4 l0 J2 u; s8 z
  1079. LDX FC_Select_Index
    ) V- r5 W- h6 ~: R1 Q/ f: H2 ]
  1080. LDY #$00
    1 V4 j" g3 t/ S6 B& {1 K3 A
  1081. LDA (FC_Data_Port_B_L),Y
    ! x6 y- f9 c$ g) P( p0 ?
  1082. ORA Function_Check,X
    + I: e" a5 b7 W1 y# n
  1083. STA (FC_Data_Port_B_L),Y6 V, e7 l, w3 S* V& D- z
  1084. RTS
      `. n* P5 m% t7 A/ A/ w
  1085. .ENDIF
    ( d. L% Q: A% z, W, T+ b) [6 G
  1086. ;----------------------------------------+ e( [8 }2 M$ S9 k
  1087. ;关闭功能A" A' D9 @  D2 s8 U. e* m
  1088. Change_Function_To_Off_A:
    % d0 k7 o; q8 F! H
  1089. JSR Set_Function_Temp_Index
    % J8 y4 s; T8 ]4 E% p
  1090. JSR Set_Function_Port
    8 a( h2 A* b" [5 e: N
  1091. LDX FC_Select_Index7 J  q6 A2 A- _# V8 F# X
  1092. LDY #$00
    / y- E# X# y4 D' ]' v. H$ E5 p
  1093. LDA Function_Check,X/ t& K1 U* w5 I5 _, Z$ ]' L9 p" g6 z
  1094. EOR #$FF, o7 f9 h, c. b' N2 b" {! b
  1095. AND (FC_Data_Port_A_L),Y% Q/ B( ]8 I. N; n; R
  1096. STA (FC_Data_Port_A_L),Y% j/ A2 H) }7 r, q; }1 z) V
  1097. RTS% e9 r" ]1 ^) z* ^) V# p
  1098. ;----------------------------------------7 {& O- _/ D6 B2 q
  1099. ;关闭功能B! \  L1 x) |  s, S1 d6 o
  1100. .IF FC_IS_DOUBLE_PLAYERS
    3 ?& p- J! x9 @! V
  1101. Change_Function_To_Off_B:
    2 p6 x4 F, m  r, _, `6 |1 }& C
  1102. JSR Set_Function_Temp_Index9 w0 o3 I. }6 i+ x
  1103. JSR Set_Function_Port/ Z+ ?2 P1 n1 e% |# }# K2 |
  1104. LDX FC_Select_Index7 }* j8 ~1 P" B" n, `5 T
  1105. LDY #$00
    ; h6 z8 `" b2 i+ l5 }% ]& d0 F
  1106. LDA Function_Check,X
    + C: M) ^) `8 h" l/ U+ M1 ?1 o. `) E
  1107. EOR #$FF1 N- f- q0 Q& \# f; D' t6 a3 V5 y& V
  1108. AND (FC_Data_Port_B_L),Y- q9 b5 U6 V0 P, B# P2 H( [, ^( A
  1109. STA (FC_Data_Port_B_L),Y
    7 G3 j7 [- E6 c* V
  1110. RTS8 f/ {8 d& _$ N4 ]" B# S
  1111. .ENDIF, |1 x, F. f* A1 `6 T$ {

  1112. 5 p( ~9 p; R6 _4 c* E
  1113. ;==================================================( O+ N. U4 y1 q6 c+ C
  1114. ;设置功能状态PPU地址8 e! ^5 b8 Q, `$ d
  1115. Set_Function_Status_Addr:
    3 ~8 \( X' u  h2 i1 M* Z$ X( M
  1116. LDX FC_PPU_Cursor
    0 X+ E  V8 S' A0 M) N* S
  1117. LDA FC_Select_Temp
    ) v% Y# f3 i4 u2 k) ]
  1118. ASL
    ; [+ @* p) r. T6 G2 Y% D: _: }
  1119. TAY2 h; _) y* x) v% f  p
  1120. INY/ y* ~* B: A! ?" q3 \" X
  1121. LDA Text_PPU_Addr,Y
    - }, x+ ?" d" G9 M
  1122. STA FC_PPU_Buffer,X+ [$ L9 i# J/ u
  1123. INX
    & Y* L: o4 K$ ^( i6 S( b+ d3 \
  1124. DEY
    ' ]1 z& M7 D( a9 ?. }
  1125. LDA Text_PPU_Addr,Y4 A6 ^; z) u& @; b+ H
  1126. CLC
    , E0 L5 Y! ^. z; ~& H  P
  1127. ADC #FC_FUNCTION_OFFSET
    % Q2 ]/ x0 o: d; I
  1128. STA FC_PPU_Buffer,X# w) ^0 K6 ~4 V: J8 a$ D
  1129. INX
    & _' O1 t, S; a2 b; i( _" s6 S1 M
  1130. .IF FC_IS_DOUBLE_PLAYERS
    % J; Y+ h. f& Y  D
  1131. LDA #$02
    * i$ d8 O6 b5 \5 d; X
  1132. .ELSE
    6 s  h6 d# B( L2 Q
  1133. LDA #$01! y" Y) V  I7 J
  1134. .ENDIF
    $ s$ X, ~; }# e5 l
  1135. STA FC_PPU_Buffer,X
    9 {9 G# K7 O/ `9 @1 L4 j
  1136. INX
    5 l4 J7 n) E& M; d0 v6 \
  1137. STX FC_PPU_Cursor0 f" N9 E$ G0 d0 K6 p
  1138. RTS, F! Q# `( |+ X# n8 Q
  1139. 4 x, a) O0 X) e, H0 b! f5 Z- }: R# L
  1140. ;==================================================
    + w8 ?4 x7 g0 N" a
  1141. ;获取当前选择索引9 Z+ q8 ^; x( T2 j
  1142. Get_Select_Index:) A' }. I( [) i) H  ?6 |
  1143. LDA FC_Select_Temp2 J( W( z8 S& E: ~; s" E' h
  1144. CLC+ ]7 s/ l3 m% P; Y8 t4 A
  1145. ADC FC_Page_Cur
    ! A+ n0 I. V' Y! ?
  1146. TAX5 v) B" K; W) _6 S$ {0 f
  1147. RTS
    & G! J' z( W% l' M2 e
  1148. 3 C" \2 q8 h( h; M) x5 ?- l$ X& p
  1149. ;==================================================
    9 v& N* O7 T' T; v6 b2 {8 d
  1150. ;清除状态文本
    % K: |5 u+ w0 I% Q) i0 j* ^& P
  1151. Function_Status_Clean:0 `3 c6 j. `6 X3 N/ s2 `( F
  1152. LDA #FC_PPU_MODE_CNTC7 m. }6 \  m, R. d9 N
  1153. JSR Set_PPU_Mode
    - G. ~+ I* g3 J/ T
  1154. JSR Set_Function_Status_Addr
    1 x! |4 g: l. v/ ~2 r  u
  1155. RTS% \! _0 I4 ^. j7 k

  1156. ' m* L* ~. v9 M$ g- U" @" z
  1157. ;==================================================  L) e" h/ p4 [8 }
  1158. ;显示开关状态+ h: X6 k6 Z& M, j
  1159. Function_Status_Show:. z) L0 G; F& G# J: N5 ~# i
  1160. JSR Get_Select_Index/ x' P/ M5 o* R0 a/ _8 G& g6 C
  1161. CPX #FC_ITEM_SUM: t5 \' u! _# H) s3 Y
  1162. BEQ Function_Status_Show_Set' {  j; ]2 f- k9 X
  1163. BCS Function_Status_Show_End
    $ J2 V( P7 G/ t& d3 {, U2 G' v
  1164. Function_Status_Show_Set:
    & q9 I* u- B0 N) c6 `9 L
  1165. LDA #FC_PPU_MODE_CNTL
    7 c: s2 W' F# t7 P
  1166. JSR Set_PPU_Mode6 |! V- h; D5 t5 M  F
  1167. JSR Get_Select_Index
    6 d* s$ n" ]' k/ N' C
  1168. JSR Set_Function_Status_Addr
    : @1 G8 \7 \: O. }6 u
  1169. JSR Set_Function_Port8 i) ]+ k$ B8 ?5 A1 L/ _
  1170. JSR Function_Status_Show_Check_A
    6 o$ V& F$ C" _& a' O
  1171. .IF FC_IS_DOUBLE_PLAYERS5 j1 {1 U/ T4 C1 N3 @. {
  1172. JSR Function_Status_Show_Check_B4 ]* B; [" w6 X; a5 l
  1173. .ENDIF
    7 J  f; ~5 Q+ c. A  q# D; E
  1174. Function_Status_Show_End:
    % }, E3 Y7 U0 K* B/ ]9 a* r
  1175. RTS
    3 P/ a5 M( h2 a& i' D
  1176. ;----------------------------------------
    7 d& J, C9 y* G  [4 U* t
  1177. ;检查功能A状态
    ! e8 x5 D  J; ?) m: |; @! {" U
  1178. Function_Status_Show_Check_A:2 k, _  j- e0 d# F* P5 [
  1179. JSR Get_Select_Index
    9 F% f# q5 |" N8 d
  1180. LDY #$00
    7 C5 [2 _" r" I. x3 P6 M- [
  1181. LDA (FC_Data_Port_A_L),Y0 S6 ]" E# B1 i4 Y3 Y
  1182. AND Function_Check,X  N! v) E4 W2 v; X3 J. ~  A
  1183. BEQ Show_Function_Status_Off
    / ~& m3 n0 d, J: F! f3 W
  1184. JSR Show_Function_Status_On
    : x6 w8 B( ^% y7 d4 R* w6 A
  1185. RTS: o# i8 g$ v$ s$ @2 R  x
  1186. ;----------------------------------------
    & n: i) z& G: E5 L  O
  1187. ;检查功能B状态
    ) I. O; O6 L8 d; H7 c
  1188. .IF FC_IS_DOUBLE_PLAYERS) v2 \& Y; X. f; h
  1189. Function_Status_Show_Check_B:) }/ C: r2 R" S; e1 g' T& n' F
  1190. JSR Get_Select_Index5 {& q5 S" x& }1 K) ^
  1191. LDY #$00
    5 u$ G* @4 S5 }  B1 s6 H
  1192. LDA (FC_Data_Port_B_L),Y
    : i# q" J* F# x/ c* N
  1193. AND Function_Check,X9 a0 W8 s0 x( R
  1194. BEQ Show_Function_Status_Off
    % U. z8 e$ X, }' r" U& @" O
  1195. JSR Show_Function_Status_On
    / m1 z" Z3 h; i* p
  1196. RTS
      d/ r1 t9 a9 L8 H" @
  1197. .ENDIF
    $ s' x! Q' {7 p7 R! P5 |
  1198. 1 x& L! S9 Q! ?, [- ]3 C
  1199. ;----------------------------------------: f; h. G1 v$ T' \/ T, w/ C, h
  1200. ;显示功能开启状态6 x! P  N+ Y" t) n9 p
  1201. Show_Function_Status_On:
    9 c7 P, V4 Y; l: u) K' g  T) O% w4 P
  1202. LDX FC_PPU_Cursor
    # ^0 {$ N& K6 w' M7 h( k
  1203. LDA #FC_ON_TILE7 Q5 m6 I' O. @- O
  1204. STA FC_PPU_Buffer,X
    6 o0 |/ Z* i( I$ j
  1205. INX8 N* Y* u) t3 t- Z& b; `5 Z
  1206. STX FC_PPU_Cursor
    7 |  R' O' ?, t3 Q
  1207. RTS
    ' z8 C% X' a9 z5 E
  1208. ;----------------------------------------* t  I3 Y; X1 f% g9 l. G
  1209. ;显示功能关闭状态
    3 M3 ]! j) N. v- p2 ^/ G
  1210. Show_Function_Status_Off:
    . j# ~1 H" U# E7 N3 d5 H
  1211. LDX FC_PPU_Cursor
    5 k4 Z% H0 [+ u% i. a# g
  1212. LDA #FC_OFF_TILE, W- C. [' q4 c- r. ]- j! T
  1213. STA FC_PPU_Buffer,X# U  `  o5 B" A. s2 h6 U
  1214. INX( Z8 o7 E) }9 }4 x
  1215. STX FC_PPU_Cursor: v% F0 X: T9 l6 H
  1216. RTS
    , j9 b# ?- P" @. E. T* [6 f0 P' a4 [
  1217. ' ]7 K4 i! O. Z& G- K2 u# m

  1218. 3 g; E& t/ Q& O, }
  1219. ;-------------------------------------------------------------
    ! E) g% X( a4 t) a' ]0 a6 }2 O
  1220. FC_Data_Copy:    ;数据拷贝参数设置
    % ^/ [2 H5 R7 \. ?& I* @9 p
  1221. STX FC_Cpy_Port_L
    8 C3 g9 J( T4 q, s
  1222. STY FC_Cpy_Port_H6 F; _& w+ @: L& d8 P9 T
  1223. LDY #$00
    & e3 p* ^2 m# e' ~
  1224. LDX #$06
    / L) a  h; J6 a3 d5 Y9 u0 s- G. a4 H
  1225. FC_Data_Copy_Addr_Set:    ;从指定地址读入参数/ J" s$ t" e1 X2 c, r) \
  1226. LDA (FC_Cpy_Port_L),Y
    6 F; f% S4 l% [6 J! g3 l4 g# M! L
  1227. STA FC_Cpy_From_L,Y. u1 N. h0 }5 T, h% d
  1228. INY
    4 s+ m. V5 Z. g5 i- d2 T) C0 O
  1229. DEX
    2 S1 F  y7 {) m3 c
  1230. BNE FC_Data_Copy_Addr_Set/ F7 X7 K6 w+ a: N
  1231. LDA (FC_Cpy_Port_L),Y
    : U7 {9 Z+ d9 @7 R! U' E, F
  1232. CLV
    : i$ _. U9 W7 l' M' s' h$ p
  1233. LDY #$00
    ) P  S0 Q; J; @8 `3 ~% c3 }
  1234. ;----------------------------------. m. l$ B% c0 P! @: \
  1235. FC_Data_Copy_Mode:   ;复制模式校验
      Q5 j& t  |4 r+ ^8 |% H
  1236. CMP #FC_MODE_RAM_TO_RAM" t( O) {1 y% m5 `5 s4 I! r5 @
  1237. BEQ FC_Ram_To_Ram_Mode; Y) p* k3 A6 W9 T
  1238. CMP #FC_MODE_RAM_TO_PPU
    ' b. g* _9 f# k) Y9 ^5 b
  1239. BEQ FC_Ram_To_Ppu_Mode
    8 W5 ^! k" {: i' ~* G" P$ s% w
  1240. CMP #FC_MODE_PPU_TO_RAM. h: _" c9 f- \- \6 `) E
  1241. BEQ FC_Ppu_To_Ram_Mode5 }+ e* U. c* w# C$ C) I
  1242. CMP #FC_MODE_PPU_CLEAR/ [1 Y5 y, R8 Y& l$ w. m* ]3 D+ J
  1243. BEQ FC_Ppu_Clear_Mode
    + |  o: H, l2 }5 ^5 l4 K8 h& O/ t' c
  1244. RTS
    2 _) |7 j. J& ^) l
  1245. ;----------------------------------------
    6 {- }0 g0 T* x/ b0 W2 K
  1246. FC_Ram_To_Ram_Mode:   ;复制RAM到RAM模式" C' F; j# D% P! }; n  i1 X- j
  1247. LDX FC_Cpy_Count_L
    ! B) v  g& L* n2 S" T0 P) h6 o
  1248. INX
    * {0 w4 D/ V, z% q. p0 p
  1249. FC_Ram_To_Ram_Count:   ;剩余计数检查% L. r8 r, l* G
  1250. DEX
    8 o: o+ d- q! e
  1251. BNE FC_Ram_To_Ram_Copy* Z' s* j# X$ b0 u% O- [
  1252. DEC FC_Cpy_Count_H
    $ Q  I5 n% P8 r! \3 a/ B: e+ z
  1253. BMI FC_Ram_To_Ram_Over9 B/ D0 k' ]& c& o0 U( r
  1254. FC_Ram_To_Ram_Copy:   ;开始复制数据& ^5 X7 K/ Y$ A/ y0 I1 B$ H0 E
  1255. LDA (FC_Cpy_From_L),Y
    7 V0 }# ]4 E  D2 \  N: t
  1256. STA (FC_Cpy_To_L),Y; x4 [$ N2 j5 \9 S
  1257. FC_Ram_To_Ram_From_Set:    ;源地址递增
    4 N2 H4 V9 q+ G
  1258. INY
    * ]8 [- a2 U/ ?% l3 }' d" }
  1259. BNE FC_Ram_To_Ram_Count
    5 p% Q$ x; k' r' m7 s% g6 c5 T6 A
  1260. INC FC_Cpy_To_H) _& r3 {8 C# y/ l
  1261. INC FC_Cpy_From_H
    : f* e( `1 V. F
  1262. BVC FC_Ram_To_Ram_Count6 G7 ?2 _6 \1 y$ t$ z, [
  1263. FC_Ram_To_Ram_Over:    ;结束数据复制1 F/ W& L2 }. b+ E! u+ \
  1264. RTS
    & m% P. h0 [. c

  1265. & \  f  ~% w& f. Z
  1266. ;----------------------------------------
    - Q* T# U9 ?4 u! z7 u% A
  1267. FC_Ram_To_Ppu_Mode:   ;复制RAM到PPU模式, w/ d  d8 s2 L$ k" q! P5 r- K7 d
  1268. LDA FC_Cpy_To_H
    6 d. ^  f' f/ P
  1269. STA $2006( {/ Y; x3 g7 F$ r: }
  1270. LDA FC_Cpy_To_L
    ) H3 K' E3 X: w
  1271. STA $20069 T- N2 K$ U# _
  1272. LDX FC_Cpy_Count_L
    $ `6 W5 n; e' m4 v% ^2 [# }
  1273. INX" g& p+ U, l1 B+ V
  1274. FC_Ram_To_Ppu_Count:   ;剩余计数检查4 u: ~8 f4 f6 e* z2 [. D9 `# N: E9 z
  1275. DEX* _2 P+ {1 A- e
  1276. BNE FC_Ram_To_Ppu_Copy
    4 X% E$ S4 [; {* E
  1277. DEC FC_Cpy_Count_H
    ! S) Q. ]: J8 X6 a- T! ^6 ~3 a
  1278. BMI FC_Ram_To_Ppu_Over
    2 f) t  {. m7 J, Z
  1279. FC_Ram_To_Ppu_Copy:   ;开始复制数据
    ! N; ^5 s! b; W. i, m
  1280. LDA (FC_Cpy_From_L),Y) D  m4 v6 n; z2 v& t
  1281. STA $2007% w7 L8 P/ W! p% h9 y4 }
  1282. FC_Ram_To_Ppu_From_Set:    ;源地址递增( P: w$ l/ M- U1 F! J
  1283. INY# L3 [3 t: r7 p/ e8 W
  1284. BNE FC_Ram_To_Ppu_Count
    $ j7 ]# G  ?' k0 m/ m' ?2 C& e
  1285. INC FC_Cpy_From_H6 b0 i3 H- V1 w* z9 G4 p
  1286. BVC FC_Ram_To_Ppu_Count" K. K5 {- i8 v  {# R( [- N7 [
  1287. FC_Ram_To_Ppu_Over:    ;结束数据复制3 j, ?- v$ e) t4 R6 x8 T
  1288. RTS. v+ _4 R1 R7 E* m  V

  1289. 6 g" ?6 N5 y" t8 m  @' X: i- f
  1290. ;----------------------------------------
    2 I0 B/ q# N- s% z3 c) t
  1291. FC_Ppu_To_Ram_Mode:   ;复制PPU到RAM模式
    7 \4 t# d5 Z7 P- ], y+ v
  1292. LDA FC_Cpy_From_H
    : T1 G9 n! @, b3 S
  1293. STA $2006" q" W' z* @% G# Q5 j& a) K4 G
  1294. LDA FC_Cpy_From_L5 G% Z% C* _. X
  1295. STA $2006/ h8 r8 \4 ~5 \7 L
  1296. LDA $2007
    ; j) z8 s$ l, |, h  U9 Q5 v9 g
  1297. LDX FC_Cpy_Count_L# H. y2 f. f5 q0 M9 {' g" l
  1298. INX9 f1 M- H0 k( _. E3 P% k
  1299. FC_Ppu_To_Ram_Count:   ;剩余计数检查: o% j: ?/ @* ^+ q* Q0 }
  1300. DEX
    # u. P, t6 r/ D" m; `
  1301. BNE FC_Ppu_To_Ram_Copy
    % w7 C7 P$ o! z1 |. q' w
  1302. DEC FC_Cpy_Count_H9 d  o9 J& M4 I( e
  1303. BMI FC_Ppu_To_Ram_Over
    + S0 S& H1 c0 M" c: o/ z
  1304. FC_Ppu_To_Ram_Copy:   ;开始复制数据" ?2 F6 \, x! k7 i. W" U4 l
  1305. LDA $20070 ^7 ]. m6 p% ?$ ?! G, r
  1306. STA (FC_Cpy_To_L),Y" y: K' o' d( V! q; R9 l
  1307. FC_Ppu_To_Ram_To_Set:    ;目的地址递增
    0 n/ B1 O8 o. F/ \
  1308. INY
    9 z9 r5 m3 o8 k, M0 u
  1309. BNE FC_Ppu_To_Ram_Count
    ( c1 N9 C9 g: o: K/ w8 c' O4 c
  1310. INC FC_Cpy_To_H
    1 i; o" N, U; y5 ~- d* ^
  1311. BVC FC_Ppu_To_Ram_Count
    - R) Y- `& x# I9 \0 y# }
  1312. FC_Ppu_To_Ram_Over:    ;结束数据复制% o8 p7 w, C) K, G  X6 P
  1313. RTS
    & r: {4 ~+ f- v1 j; ]

  1314. * u/ q( k: |" _
  1315. ;----------------------------------------% t( O2 f& g0 F' F8 e# o
  1316. FC_Ppu_Clear_Mode:   ;清除PPU模式
    0 g4 j9 [/ O# A5 `9 a$ W, F! F9 p+ u4 X
  1317. LDA FC_Cpy_To_H2 S" v' g5 @& Q4 f7 A
  1318. STA $2006
    / @: p5 C! F( G3 a
  1319. LDA FC_Cpy_To_L/ ?# ?; {3 R: N: K! F- ]& e
  1320. STA $2006; i& r& Z; E* V) O; g' C
  1321. LDX FC_Cpy_Count_H# K1 @  F) c' U* @2 A1 Y& L- B
  1322. LDY FC_Cpy_Count_L
    " X/ ]4 y7 [9 [2 J0 T
  1323. LDA FC_Clear_Val( Y0 p' o! t. s  g# C7 O
  1324. FC_Ppu_Clear_Count:   ;剩余计数检查3 [0 O$ {2 T# f! v; X2 h+ I
  1325. BNE FC_Ppu_Clear_Copy
    % p- r7 G+ z) U8 \1 n3 o
  1326. DEX9 \6 W. h/ H2 v$ D9 I
  1327. BMI FC_Ppu_Clear_Over; a; r: |- P. V1 d/ @
  1328. FC_Ppu_Clear_Copy:   ;开始清除PPU
    0 s' p- M. J4 X5 Z
  1329. STA $20079 c/ d. i1 ^8 ~# I# H3 |, L
  1330. DEY
    $ S* `" [1 Q* @2 J& J5 K! O! b
  1331. BVC FC_Ppu_Clear_Count
    2 U0 [, l. A. _
  1332. FC_Ppu_Clear_Over:    ;结束数据复制" w  W; g7 b* Z0 A5 b; D
  1333. RTS6 V+ L( G) h7 G2 V

  1334. 8 ^2 T3 F  L! T) J0 W; T
  1335. ;==================================================7 i" I  r/ Q$ I6 A2 L: Y
  1336. ;保存RAM数据
    " O" o" C& V1 R3 e2 V$ J1 y7 C
  1337. Save_Ram:! ^5 W( i7 q, G
  1338. LDX #<Save_Ram_Data
    7 D/ p' s" ?- x3 `# c0 O+ E
  1339. LDY #>Save_Ram_Data
    : j/ A) f; }9 ^3 o! C
  1340. JSR FC_Data_Copy1 L/ x( ]  L) H6 G
  1341. RTS
    & ?) Z# c4 @% N7 E2 P5 h9 K6 ]
  1342. ) H4 C# {5 `2 [9 a3 O; t
  1343. ;加载RAM数据2 |+ p1 b! T4 h# X; O
  1344. Load_Ram:
    : m( D. T2 Z* g* ?9 J
  1345. LDX #<Load_Ram_Data  @9 E7 x  ~: C$ x: |0 [& b! h8 @
  1346. LDY #>Load_Ram_Data
    % S- b# ^, x. _6 c
  1347. JSR FC_Data_Copy
    1 a% ~6 i* n( V2 ^
  1348. RTS% s8 K5 l0 ?/ y7 c$ a

  1349. / {/ c. o3 Q" y! }) ^
  1350. ;保存PPU数据
    : Q7 z- q1 O$ M7 K
  1351. Save_Ppu:
    7 h2 K2 G4 m! k# O# w8 {
  1352. LDX #<Save_PPU_Data
    - A1 J$ N7 j, N# N. K) g
  1353. LDY #>Save_PPU_Data2 R( w# a& V" a/ c4 b+ \# G' O
  1354. JSR FC_Data_Copy
    # _7 K% i) b6 f# x3 _$ l: w
  1355. RTS
    + R' X5 e; D2 h$ O
  1356.   S6 L* O: J4 l. }
  1357. ;加载PPU数据3 ]( y. t1 f0 z. e# b  V4 ~) u
  1358. Load_Ppu:
    / j: J! `( L9 f! N+ _$ W# O& L, y
  1359. LDX #<Load_PPU_Data
    7 z5 b) ?1 `6 t# [! ?" @! X8 o' U$ x
  1360. LDY #>Load_PPU_Data
    4 O, [( o! U3 ]7 J
  1361. JSR FC_Data_Copy
    9 J" n  D' I  ?6 o& g% a: L, l- L8 |
  1362. RTS
    0 D% q( T) E6 q: [# G6 Y

  1363. ! Z- M! J& w2 O- f" P% v- u& g
  1364. ;清空PPU数据
    $ D  B* a* T* u/ `+ a; o2 B# q
  1365. Clear_Ppu:
    * [4 R5 L/ f2 }% C2 l
  1366. LDX #<Cln_PPU_Data
    1 d7 A+ z' x: B% F- e2 o+ t
  1367. LDY #>Cln_PPU_Data2 j% ^! {: _, F  s4 ?- |+ e9 j4 T- h
  1368. JSR FC_Data_Copy
    * _1 f% O7 z* L, T$ _
  1369. RTS3 X3 @0 I7 C, {- q
  1370. % u8 e5 K8 i+ I6 Y
  1371. ;==================================================0 K6 P) ~9 E( h( `7 e8 f5 F' H5 p
  1372. ;数据配置# S; R  }' W# [4 [7 ~& c. j
  1373. Save_Ram_Data:
    9 u5 T( H) e" O% i4 `. x1 L2 v/ r2 s& R
  1374. .DB $00,$03,$00,$63,$00,$01,FC_MODE_RAM_TO_RAM8 p0 S! D. _# u, i  i+ n
  1375. Load_Ram_Data:
    ! C& c2 S( A1 X- R6 L. L
  1376. .DB $00,$63,$00,$03,$00,$01,FC_MODE_RAM_TO_RAM
    5 d6 _) l) P# z
  1377. Save_PPU_Data:
    : F1 |  u9 n/ _) {! K" C& a
  1378. .DB $00,$20,$00,$64,$00,$04,FC_MODE_PPU_TO_RAM
    % y7 ?, ]' C2 t/ h
  1379. Load_PPU_Data:+ N, l# `& l/ Y
  1380. .DB $00,$64,$00,$20,$00,$04,FC_MODE_RAM_TO_PPU7 S& i6 K6 p# I( o1 ^% l8 A2 u" W
  1381. Cln_PPU_Data:4 T* l: o& w: J7 z
  1382. .DB $00,$00,$00,$20,$00,$04,FC_MODE_PPU_CLEAR) e7 x% K7 O% w4 W- l  K7 Q3 p8 G( w
  1383.   @$ m% B7 F6 B( o" Z

  1384. ! @9 L$ z0 t8 [4 ~0 x4 }8 V
  1385. ;==================================================' U8 \- V$ ?  k
  1386. ;文本数据PPU显示地址
    * v" Z" `* a' E
  1387. Text_PPU_Addr:
    ; U$ C; b4 U! U. `- [4 E% J; s
  1388. .WORD $20C5$ e4 w7 b" I( j
  1389. .WORD $2105
    $ R  J( P( n* [
  1390. .WORD $2145
    ; s. W; b+ D0 P/ l
  1391. .WORD $2185' P/ X4 f6 G) t+ ^5 {7 B+ Z/ X
  1392. .WORD $21C5) Z9 w! p! z1 h; h2 G/ O/ _" W8 V3 e3 h, u
  1393. .WORD $22055 {( s  f" `) U) R
  1394. .WORD $2245
    ( E$ v. x/ i" m6 l$ s$ g
  1395. .WORD $2285
    ! X" X) l1 c8 K1 z) s, V! H4 m- n
  1396. .WORD $22C55 [6 s+ e8 }: R
  1397. .WORD $2305
    0 Q3 w( G! t+ p/ s+ [
  1398. .WORD $2345% [( v6 L3 [+ b

  1399.   H' A9 {7 D& s0 V3 R7 i3 K* u
  1400. ;==================================================
    ; ]3 A. n- G2 B8 d
  1401. ;文本数据PPU数据地址/ T6 g& F3 h: w$ K* R
  1402. Text_Data_Addr:
    - x6 P. H1 {; I. L' O8 a
  1403. .WORD Text_Data_01
    8 K+ W' M" ~7 J( V
  1404. .WORD Text_Data_02
    / e; ^: m. H2 \* w
  1405. .WORD Text_Data_039 z2 F/ P4 y0 F$ M
  1406. .WORD Text_Data_042 C* M; Z) H  c5 X3 A) U; _/ D
  1407. .WORD Text_Data_05% ~. m5 p4 b* x7 \6 t
  1408. .WORD Text_Data_06: m( c6 K: f0 \, J2 q, `
  1409. .WORD Text_Data_07
    8 P2 S7 c4 q4 P
  1410. .WORD Text_Data_08
    ! P2 D. a7 @" Q
  1411. .WORD Text_Data_09
    " `& {( T9 y9 c7 G6 N6 O/ |% G
  1412. .WORD Text_Data_10$ C6 r; s6 j& G: }, l+ N
  1413. .WORD Text_Data_115 d' c9 Q% `1 ]+ S8 g) ?1 ~& T( |- j& C
  1414. .WORD Text_Data_12% T% e! Q- h1 h0 D: z" X! m
  1415. .WORD Text_Data_13, B; D, B' s" ^1 @
  1416. .WORD Text_Data_14
    - ]1 L5 G  Y8 T: v* j1 q5 |
  1417. .WORD Text_Data_15- {! H5 d/ h! w5 Q7 N
  1418. .WORD Text_Data_164 c$ G; r2 G: M
  1419. 4 `* Y7 q+ v! h
  1420. ;==================================================3 S0 N6 `  \8 w" n; R, e+ s; o
  1421. ;文本数据
    # Q* V' H; Q7 T- k
  1422. Text_Data:( K1 E- }) Q' P+ ^4 P* A* C8 Z9 f
  1423. Text_Data_01:. Q* G* C/ d/ G: @/ L: v* k, f0 @7 Z6 t  t
  1424. .STR "01.INVINCIBLE"
    * x6 |# u1 D, c1 {. r! ?
  1425. Text_Data_02:( k* C" G8 {/ q# e1 O
  1426. .STR "02.INVINCIBLE PLUS"' Y1 x: [4 M2 P& T! L7 e! s' e" }
  1427. Text_Data_03:+ A8 G# s4 {8 t# D% Q
  1428. .STR "03.LOCK LIFE"& v3 q# Z! |7 o8 Y+ g
  1429. Text_Data_04:, U* m* u. J" q! [1 O$ [
  1430. .STR "04.LOCK WEAPON"
    # B! m1 _! n; I  R
  1431. Text_Data_05:
    . w0 ^, m5 F9 e7 p% I9 ~
  1432. .STR "05.SEL CHANGE WEAPON"
    0 y/ C6 `" \0 @7 S) t) a  Q* I+ `
  1433. Text_Data_06:
    : v! e6 T* t0 W! M
  1434. .STR "06.UNLIMITED JUMP"& Z5 N0 l8 e0 d; J( f" k
  1435. Text_Data_07:
    5 J: f0 V* J# d0 _, U
  1436. .STR "07.MOVE FAST"
    ) z8 Q$ e. |- l# g- `+ g/ @
  1437. Text_Data_08:+ K9 H; }/ S8 P6 a
  1438. .STR "08.SWAP SKIN"
    + g0 C9 D3 ^! q
  1439. Text_Data_09:, A. e' W: i1 ?) D, d; @' V3 |
  1440. .STR "09.EQUAL BULLET"
    $ `4 b- x9 R: A- \. `( n
  1441. Text_Data_10:$ G+ s0 X) m5 y8 O# J
  1442. .STR "10.STRONG BULLET"
    ) }. E7 k* Y7 N! f
  1443. Text_Data_11:
    7 [. ]0 `% Q0 U7 m9 u: H4 a
  1444. .STR "11.KILL BY ONCE"
      J! t3 d( N" e0 h! l
  1445. Text_Data_12:
    * }7 f" B4 H8 g. C0 f
  1446. .STR "12.FULL SCREEN KILL"
    & i# y2 l3 b& Q/ {3 t: U8 I( Z
  1447. Text_Data_13:
    # d' b$ v! a% n, ?
  1448. .STR "13.DOUBLE CONTROL"
    # U$ o  b1 N& D7 O+ D
  1449. Text_Data_14:
    / l1 z! D  j/ h! k2 ?
  1450. .STR "14.REMOVE E-GRID"
    1 d6 a. j) f8 ~0 j/ q0 p! B
  1451. Text_Data_15:  y4 L2 ]( f6 q8 z7 ?
  1452. .STR "15.FALL INVINCIBLE"
    ( t* b2 Z2 Z  p$ l1 k$ Z& r8 z
  1453. Text_Data_16:6 y& y: |( K+ w9 @! u
  1454. .STR "16.NEXT STAGE"! x. U- {: F* O9 G: ^8 |8 q
  1455. 4 ?5 D2 f% c% h4 ]
  1456. ;==================================================7 G8 V' l0 `. w8 E9 l+ C8 D  S
  1457. ;功能开关检查地址
    " h. w: }  f+ o# m# g2 R2 g2 q3 k6 b
  1458. Function_Addr_A:
    1 u! w7 ]# q5 S# y1 _# m/ P
  1459. .WORD $01C0
    7 [) ~' y6 [* O
  1460. .WORD $01C05 @7 a9 `7 C4 x2 {5 y
  1461. .WORD $01C0
    . b4 I3 i7 F) L. z
  1462. .WORD $01C0
    + f) E% j4 Z$ z! t
  1463. .WORD $01C01 K& w; U& z0 M( C5 `; J# b5 f9 v
  1464. .WORD $01C0* \! n+ e; w& U# ~+ r! s% G+ y
  1465. .WORD $01C08 v1 i( f/ g$ H# I: _- b
  1466. .WORD $01C0
    ' \5 N0 A, [; q: z1 h
  1467. .WORD $01C4: e+ @* _  N! m. I& v4 I- b
  1468. .WORD $01C4/ U7 \0 Z; {# ]! F
  1469. .WORD $01C4( @2 a/ z' r  p, ~
  1470. .WORD $01C4
    ( J  e+ X9 B: L! n
  1471. .WORD $01C4+ }. Q9 r. y4 Q: u, d( p) |
  1472. .WORD $01C4
    . C4 e3 X. V5 o: ~4 ^
  1473. .WORD $01C2
    & m- E: b6 l2 D6 F) G7 x; R- L
  1474. .WORD $01C4
    5 g( y6 ^5 T. n
  1475. 0 w: ~. A% b$ n6 u: h
  1476. ;功能开关检查地址
    & H6 N9 R+ t; M& ?' L% b+ K
  1477. Function_Addr_B:
    * e# R+ s: [0 D3 W3 l# @# Y3 [0 z2 J
  1478. .WORD $01C19 I1 q0 s' ]: f* w- `
  1479. .WORD $01C1* d) X  ^' `0 j0 s3 o# K4 X
  1480. .WORD $01C1
    $ x. A$ K$ c/ l! L
  1481. .WORD $01C1
    1 V& r! A5 s3 p: u4 \+ b
  1482. .WORD $01C1( l% j3 i6 @# M. R1 L  _% J" T
  1483. .WORD $01C1' P5 r  r7 y6 |: |* g: M* u
  1484. .WORD $01C1
    / T9 w0 T9 _0 \9 x# B2 f/ z4 N6 f
  1485. .WORD $01C1
    ! j1 D# E  [" O6 a3 v2 _' z
  1486. .WORD $01C4
    . v7 Z% j5 |% ^& H  p$ u2 z6 m
  1487. .WORD $01C4
    # T3 l, y0 C9 R) Z! p( ~
  1488. .WORD $01C4
    ! w8 A" ^  d; w) s+ }5 t8 `
  1489. .WORD $01C43 F) s5 R  I( P0 X3 J  H
  1490. .WORD $01C4
    $ w8 |/ y; {9 X6 F$ K% s
  1491. .WORD $01C4
    5 l- w1 ?6 L- t% r/ b2 C  q
  1492. .WORD $01C3
    2 f+ y/ D; D/ j: a
  1493. .WORD $01C43 [: \6 Q" p% z' M4 u

  1494. * q0 D! H# f: ~1 Q3 V  @7 b
  1495. ;==================================================
    % g6 `; K) V6 Y! Y/ Q2 i& ^3 M) e
  1496. ;功能开关检查数据9 Y2 A- b! T. N& u
  1497. Function_Check:
    ( {3 J/ i; `3 Q( ~
  1498. .DB $01& y' g% k+ c: D: Z6 t
  1499. .DB $02
    ) I4 m% `) o2 A% q
  1500. .DB $04( j* {2 }' q" V8 M4 j9 t5 A
  1501. .DB $08
    0 M( T  L2 s  c; g- z/ C
  1502. .DB $10& }/ K0 u# u2 b" }
  1503. .DB $20" E' ~1 Y, K$ o$ F
  1504. .DB $40
    6 H3 |. e. P+ W1 d, m
  1505. .DB $80
    7 o- `" j; X! C
  1506. .DB $01
    : i: B  O. t& q& Y8 b
  1507. .DB $02
    $ z* o. P2 a" t5 ?  ^
  1508. .DB $04
      H. o, L: _( J
  1509. .DB $08% w% {& S4 t+ m
  1510. .DB $10- H2 o# }/ x8 r1 v( V
  1511. .DB $20, I. ?' M9 A$ b7 S4 L( V$ j; _
  1512. .DB $40! Y$ x. F2 {' D# x) U: x& R8 V& i
  1513. .DB $804 ]  B' J) w; @8 }. j0 J
  1514. , m; U! X; P% s& a3 L
  1515. Char_Rom:5 w8 O7 V  ]2 s: r% R6 r5 [; \
  1516. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    ) B9 A4 N3 |2 e* V  A0 S! F& Y% n
  1517. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
    / A' ?7 j( {7 P# a) ~. f3 R# y
  1518. .DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3B,$25,$00% v, u: x6 F# l* G1 @( [
  1519. .DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$00,$00,$00,$00,$00,$00- d' A2 U  Z$ N: }  ?
  1520. .DB $00,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19. U5 t0 C; i, p- m6 L" B" b4 [! s" v& B
  1521. .DB $1A,$1B,$1C,$1D,$1E,$1F,$20,$21,$22,$23,$24,$00,$00,$00,$00,$00
    . l6 _2 \7 g* {5 |: U' t
  1522. , {! Z8 u1 [, F8 T6 E2 |8 d; {  o% \

  1523. / v/ Y* n, g6 K( e8 e0 V
复制代码

2 v( A) ^) B  T; k) V& z
游客,如果您要查看本帖隐藏内容请回复
) B# z: h+ F4 }1 U7 e" V7 d# S
flamecyclone.ys168.com: @3 f& b* ]+ [& U; j
www.nesbbs.com

本帖子中包含更多资源

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

x

评分

2

查看全部评分

签到天数: 3134 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 142 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1663 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 39 天

[LV.5]常住居民I

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

使用道具 举报

签到天数: 1764 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 2632 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1453 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 187 天

[LV.7]常住居民III

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

使用道具 举报

签到天数: 1865 天

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

使用道具 举报

签到天数: 1252 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 1163 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3576 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 1341 天

[LV.10]以坛为家III

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

使用道具 举报

签到天数: 3270 天

[LV.Master]伴坛终老

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

使用道具 举报

签到天数: 5 天

[LV.2]偶尔看看I

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

使用道具 举报

签到天数: 616 天

[LV.9]以坛为家II

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

使用道具 举报

签到天数: 8 天

[LV.3]偶尔看看II

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

' y1 S8 l0 G" W9 _6 ^Tec.PNG (8.05 KB, 下载次数: 0)" L' r: b% M- H. d7 @+ A; o

3 y7 E5 v. n8 n4 [  }下载附件  保存到相册! l9 b3 A" q7 y" Q3 C
0 W' H9 D* v& |5 J) J
2020-3-13 13:33 上传0 }( u, F# w  S1 }$ i
得到的文件解压后放在任何FC模拟器即可玩。NES上最优秀的篮球游戏!1 _8 G6 w! F: Z  ^" u7 _) S) P( s: [* g9 d; k
修改内容:
5 r8 g6 N, P, q2 w1)游戏时按START键可以开启或关闭怎样射球都进篮,全场照进!- t9 S2 d" W3 p& \  s
  s0 g) o& e" `- V/ _% G9 R4 N# A* o  K& S. i2 c/ `2 ?# m) n5 X4 U. i* p( ^2 }- N
不过开启了是双方面的,看到电脑拿着球赶快关闭!(有声音提示)。" p1 M) ?$ I+ `) P* f2
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-26 02:35 , Processed in 1.133789 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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