|

楼主 |
发表于 2012-11-27 08:54:46
|
显示全部楼层
本帖最后由 sdiencelee 于 2012-11-29 17:33 编辑 0 D; P) z0 i1 W3 Q1 O
# a8 F4 u, p; ^: o& \$ h
下面,我试试看看到底在后面加零的,成功与否,我也不知,开头说是实践,有错误就要如实写出来。若要暂时放弃此处也会写出来的。在原来我们可以基本确定a03几-a06几这段是在后面加零的,在vnes下,点击pc为??时暂停(执行断点,下同),点击执行后30条指令,之后发现30条不够,慢慢加到近100条,出现了$a065之后的$a067,就出现了18,01就是280的价格.而在a033之后,发现了a059的跳转.A046的跳转,没办法,直接看机器码或是6502的反编译器,暂时找不到6502反汇编器,没办法,先使用fceu的指令记录器(正好顺便教一下这个用法).如图,设置两个执行断点(原来不知道这样设置或是条件不允许如此设置,记录为文件时很大,除了editplus打开快点外,其他都很慢),这次用的120的wooden hat,这是记录出来的东西,我先自己研究研究.
k; O; |7 i* |3 D3 Z FCEUX 2.1.6-interim svn2248 - 痕迹记录文件
$ o& r- ?1 r8 @$ U3 h' a$8BDE:BD E2 8D LDA $8DE2,X @ $8E29 = #$0C A:47 X:47 Y:00 S:DC P:nvUBdIzc* ~! x; Z' o* e
$8BE1:29 7F AND #$7F A:0C X:47 Y:00 S:DC P:nvUBdIzc4 c9 V) ]( N8 D5 I0 y
$8BE3:AE 0F 6E LDX $6E0F = #$00 A:0C X:47 Y:00 S:DC P:nvUBdIzc
) @" B6 o, R; a' A" B0 d& N% }$8BE6:20 35 A0 JSR $A035 A:0C X:00 Y:00 S:DC P:nvUBdIZc
2 c' K- X, E1 X2 R# l8 c$ E$A035:8D 11 6E STA $6E11 = #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc
9 ]) p, g8 R, v% e* Z/ y$A038:A9 00 LDA #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc
. `, Z j: R/ H' R; M; O$A03A:8D 12 6E STA $6E12 = #$78 A:00 X:00 Y:00 S:DA P:nvUBdIZc5 T8 u3 _4 B1 E0 m$ A, ]0 h8 m
$A03D:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc! @, N& g4 Z0 Y+ K" Q
$A040:8D 14 6E STA $6E14 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=a,$6e12-$5e14=0(初始化)* V# P0 d4 ~- }& a# w! q, |
$A043:4E 11 6E LSR $6E11 = #$0C A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=$6e11/2
; } g* g3 Y8 P5 p$A046:90 16 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIzc //能除开则跳转16个地址即执行A05E,不行则继续执行A048
( R% b( v& I8 p7 M+ c; ^$A05E:16 00 ASL $00,X @ $0000 = #$0A A:00 X:00 Y:00 S:DA P:nvUBdIzc
# F4 M4 q7 N; t9 j/ D( \$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc
& z; F7 b) }, y/ a$A062:AD 11 6E LDA $6E11 = #$06 A:00 X:00 Y:00 S:DA P:nvUBdIZc
/ ~1 R7 M& X, B" z# i1 Q2 Y9 t E$A065:D0 DC BNE $A043 A:06 X:00 Y:00 S:DA P:nvUBdIzc
; V& J0 p8 C) \3 v! Y3 b$A043:4E 11 6E LSR $6E11 = #$06 A:06 X:00 Y:00 S:DA P:nvUBdIzc, G4 p% ^3 ?7 [
$A046:90 16 BCC $A05E A:06 X:00 Y:00 S:DA P:nvUBdIzc
6 Z' B5 E: a. o! V$A05E:16 00 ASL $00,X @ $0000 = #$14 A:06 X:00 Y:00 S:DA P:nvUBdIzc
2 e2 p0 w( h* F$A060:36 01 ROL $01,X @ $0001 = #$00 A:06 X:00 Y:00 S:DA P:nvUBdIzc
) T- ?- f, ]. G$A062:AD 11 6E LDA $6E11 = #$03 A:06 X:00 Y:00 S:DA P:nvUBdIZc
5 _, O2 u3 l" q5 d* z1 O$A065:D0 DC BNE $A043 A:03 X:00 Y:00 S:DA P:nvUBdIzc8 F4 v+ _9 Q a6 C
$A043:4E 11 6E LSR $6E11 = #$03 A:03 X:00 Y:00 S:DA P:nvUBdIzc; R% S& `% @+ m+ w
$A046:90 16 BCC $A05E A:03 X:00 Y:00 S:DA P:nvUBdIzC* e0 d7 o2 q4 u* v3 L2 l8 R. v
$A048:B5 00 LDA $00,X @ $0000 = #$28 A:03 X:00 Y:00 S:DA P:nvUBdIzC
: ]4 o9 z$ z/ i$A04A:18 CLC A:28 X:00 Y:00 S:DA P:nvUBdIzC) G D K; ~* F" ]7 z( i
$A04B:6D 12 6E ADC $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc
, j2 G5 J. s6 x: v% z/ V$A04E:8D 12 6E STA $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc! [7 g: ?% L" Y* A, S4 _" g6 s5 R
$A051:B5 01 LDA $01,X @ $0001 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc. x5 ~+ i. p8 _% b' y) O: X
$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
! S8 w! A# E3 K; q- R+ P, [$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc( p/ V/ ~ D8 c8 R
$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc
9 r( ?: |4 s8 C+ X6 E$A05E:16 00 ASL $00,X @ $0000 = #$28 A:00 X:00 Y:00 S:DA P:nvUBdIZc
) v' K8 `0 Q& G4 T$ X2 a0 }8 x$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc
. x$ W8 \9 G2 {2 ^9 b$ N$A062:AD 11 6E LDA $6E11 = #$01 A:00 X:00 Y:00 S:DA P:nvUBdIZc D. w3 P$ v) T3 V" c% D, T
$A065:D0 DC BNE $A043 A:01 X:00 Y:00 S:DA P:nvUBdIzc5 F) g9 n# \- d# ?
$A043:4E 11 6E LSR $6E11 = #$01 A:01 X:00 Y:00 S:DA P:nvUBdIzc: G. Z, ?7 A5 x! d; Y
$A046:90 16 BCC $A05E A:01 X:00 Y:00 S:DA P:nvUBdIZC, K4 ?! r) M# ]& K
$A048:B5 00 LDA $00,X @ $0000 = #$50 A:01 X:00 Y:00 S:DA P:nvUBdIZC
) H/ K9 f3 k& ?9 l4 Y, s4 z7 D$A04A:18 CLC A:50 X:00 Y:00 S:DA P:nvUBdIzC! I. S7 s/ @* V" y/ @* l
$A04B:6D 12 6E ADC $6E12 = #$28 A:50 X:00 Y:00 S:DA P:nvUBdIzc6 w5 J( C- _: O% l4 u
$A04E:8D 12 6E STA $6E12 = #$28 A:78 X:00 Y:00 S:DA P:nvUBdIzc% B1 |+ W! f+ C% _7 M2 `5 V2 E
$A051:B5 01 LDA $01,X @ $0001 = #$00 A:78 X:00 Y:00 S:DA P:nvUBdIzc5 D' J2 w f0 g e' _! w
$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
3 G$ k) g; T) d" V$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
6 ]+ y% Y7 r3 }6 L- s% Z$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc- @0 q* W, C/ G8 N, B
$A05E:16 00 ASL $00,X @ $0000 = #$50 A:00 X:00 Y:00 S:DA P:nvUBdIZc* E; X |9 G2 m7 F' ? ^2 m5 z Z
$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:NvUBdIzc
9 q' F8 G6 L3 w; V9 \- f: _$A062:AD 11 6E LDA $6E11 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc( ?4 F2 f& r$ B: G/ ]
$A065:D0 DC BNE $A043 A:00 X:00 Y:00 S:DA P:nvUBdIZc
- s. u: l6 @2 w5 b9 X其实呢,这段机器码很短($A035-$A065),即使对于菜鸟我来说,慢慢来可以一步步写出。即使没有6502的反汇编器(到必要时,才知道某些软件是干什么的,比如这个6502的反汇编器)无非就是慢慢查一下汇编指令的机器码.先慢慢读这段码吧
2 G# I# ?& k( [/ Y& g【转到了我的qq空间发一下看看如何】
# e. d# E3 O3 V1 t( i. j下面我试图解释一下,是菜鸟,出错了有相当大可能。" ?' b1 X) j" t! S) X* f& \4 \9 v
1 _( q: c' J3 V/ X) u% `4 t+ p2 i3 Q" k
A043-A046:$6e11=$6e11/2,能除开则跳转16个地址即执行A05E,不行则继续
$ j# K4 f0 B) q1 ^/ t8 }* \! g8 k
A048,将$00的值(哪里来的?),赋给寄存器a; j* n' e) F: ~- p
A04A -A056 清位2 f2 J y# A1 i9 ?, q+ o
|
|