|
|
楼主 |
发表于 2012-11-27 08:54:46
|
显示全部楼层
本帖最后由 sdiencelee 于 2012-11-29 17:33 编辑
1 i: w3 Z% F! A% Y& ~$ C, N Q* o6 N" h1 L( y* C% o H
下面,我试试看看到底在后面加零的,成功与否,我也不知,开头说是实践,有错误就要如实写出来。若要暂时放弃此处也会写出来的。在原来我们可以基本确定a03几-a06几这段是在后面加零的,在vnes下,点击pc为??时暂停(执行断点,下同),点击执行后30条指令,之后发现30条不够,慢慢加到近100条,出现了$a065之后的$a067,就出现了18,01就是280的价格.而在a033之后,发现了a059的跳转.A046的跳转,没办法,直接看机器码或是6502的反编译器,暂时找不到6502反汇编器,没办法,先使用fceu的指令记录器(正好顺便教一下这个用法).如图,设置两个执行断点(原来不知道这样设置或是条件不允许如此设置,记录为文件时很大,除了editplus打开快点外,其他都很慢),这次用的120的wooden hat,这是记录出来的东西,我先自己研究研究.+ q4 k/ t# L4 C) K2 v- l
FCEUX 2.1.6-interim svn2248 - 痕迹记录文件
' r3 s4 \1 w) o% l3 a8 @0 }& P$ @$8BDE:BD E2 8D LDA $8DE2,X @ $8E29 = #$0C A:47 X:47 Y:00 S:DC P:nvUBdIzc6 M6 K- b* f- n- x! a8 Q9 K6 @3 S
$8BE1:29 7F AND #$7F A:0C X:47 Y:00 S:DC P:nvUBdIzc
6 w4 J! q, Y5 n# M; X! y$8BE3:AE 0F 6E LDX $6E0F = #$00 A:0C X:47 Y:00 S:DC P:nvUBdIzc
* R" _" W9 l Y! H7 }' G$8BE6:20 35 A0 JSR $A035 A:0C X:00 Y:00 S:DC P:nvUBdIZc U$ z `% H1 J. g
$A035:8D 11 6E STA $6E11 = #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc! ]3 _) ^3 A# n# K0 P" Y
$A038:A9 00 LDA #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc7 O& v+ o; F% E% ~0 p' {3 t5 s: P
$A03A:8D 12 6E STA $6E12 = #$78 A:00 X:00 Y:00 S:DA P:nvUBdIZc
% I9 x, ~, o f t$A03D:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
2 z8 }' Q7 c$ f5 d1 s" R: |$ \; ]$A040:8D 14 6E STA $6E14 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=a,$6e12-$5e14=0(初始化)' H5 z. i+ D! p. k
$A043:4E 11 6E LSR $6E11 = #$0C A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=$6e11/2; \3 x( Q* w7 d6 A) [
$A046:90 16 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIzc //能除开则跳转16个地址即执行A05E,不行则继续执行A048& _7 T2 ~$ V( A. ?' ?1 o+ q
$A05E:16 00 ASL $00,X @ $0000 = #$0A A:00 X:00 Y:00 S:DA P:nvUBdIzc8 ^4 u% K( R! ~. h
$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc
+ |8 @! ?, ^' L( I; `$A062:AD 11 6E LDA $6E11 = #$06 A:00 X:00 Y:00 S:DA P:nvUBdIZc
" {( O, x+ O. z: n6 `% p$A065:D0 DC BNE $A043 A:06 X:00 Y:00 S:DA P:nvUBdIzc% Y6 x) a2 \$ f
$A043:4E 11 6E LSR $6E11 = #$06 A:06 X:00 Y:00 S:DA P:nvUBdIzc8 Z* X( Z! c9 |& v4 }6 Z
$A046:90 16 BCC $A05E A:06 X:00 Y:00 S:DA P:nvUBdIzc
4 S/ e4 n* n. J, W3 n: i$A05E:16 00 ASL $00,X @ $0000 = #$14 A:06 X:00 Y:00 S:DA P:nvUBdIzc6 N' C3 D4 x* R+ o. N/ C
$A060:36 01 ROL $01,X @ $0001 = #$00 A:06 X:00 Y:00 S:DA P:nvUBdIzc
( x, `# U( h, L7 t4 P$A062:AD 11 6E LDA $6E11 = #$03 A:06 X:00 Y:00 S:DA P:nvUBdIZc
6 G( p$ f! N" \' I$A065:D0 DC BNE $A043 A:03 X:00 Y:00 S:DA P:nvUBdIzc
/ ~; i5 x6 A0 C5 S$A043:4E 11 6E LSR $6E11 = #$03 A:03 X:00 Y:00 S:DA P:nvUBdIzc; Q! i2 @/ \8 }3 _+ q0 Z- a4 ^: ?
$A046:90 16 BCC $A05E A:03 X:00 Y:00 S:DA P:nvUBdIzC# a: n/ Z$ F% N+ x2 L) ^
$A048:B5 00 LDA $00,X @ $0000 = #$28 A:03 X:00 Y:00 S:DA P:nvUBdIzC8 s+ \# F9 ?; V1 b' l+ N
$A04A:18 CLC A:28 X:00 Y:00 S:DA P:nvUBdIzC
1 O5 M0 c4 b% t. A7 q0 Z/ Q$A04B:6D 12 6E ADC $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc
, q% j+ y1 h, ?% x* r$A04E:8D 12 6E STA $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc4 G. z, m9 s4 ]: ]
$A051:B5 01 LDA $01,X @ $0001 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc, \" S1 }& S+ l9 L' j% T
$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc* L4 c' }/ t. @$ _' Z2 j% b
$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc# L% M/ H- j( l7 A
$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc2 Z4 U1 H9 t, K1 d$ U
$A05E:16 00 ASL $00,X @ $0000 = #$28 A:00 X:00 Y:00 S:DA P:nvUBdIZc5 B' ? k8 w+ t/ F$ U
$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc; ^0 g( { v; _% ^* c5 I
$A062:AD 11 6E LDA $6E11 = #$01 A:00 X:00 Y:00 S:DA P:nvUBdIZc8 n; \. Q: o( r/ O" }
$A065:D0 DC BNE $A043 A:01 X:00 Y:00 S:DA P:nvUBdIzc# B+ { j6 R0 \; l3 T5 T. A: _) K, ^
$A043:4E 11 6E LSR $6E11 = #$01 A:01 X:00 Y:00 S:DA P:nvUBdIzc- p; D& Y9 @. e
$A046:90 16 BCC $A05E A:01 X:00 Y:00 S:DA P:nvUBdIZC
: K F( C9 \; t. w! M$A048:B5 00 LDA $00,X @ $0000 = #$50 A:01 X:00 Y:00 S:DA P:nvUBdIZC
; q, T x5 ]7 K2 z' o2 o$A04A:18 CLC A:50 X:00 Y:00 S:DA P:nvUBdIzC
. t" M# a# {1 c/ q9 o$A04B:6D 12 6E ADC $6E12 = #$28 A:50 X:00 Y:00 S:DA P:nvUBdIzc: F$ T y! L' V! ^) y- `; l
$A04E:8D 12 6E STA $6E12 = #$28 A:78 X:00 Y:00 S:DA P:nvUBdIzc
# ~5 _7 `& ^- r% `3 O6 e$A051:B5 01 LDA $01,X @ $0001 = #$00 A:78 X:00 Y:00 S:DA P:nvUBdIzc
! B7 j6 D7 @' _" C: S* O' g$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc6 c- ?( Y/ h; E
$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
0 z; I3 X) |" t$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc
( ?; Z) g- W9 i6 u! l& J; B) C' P. p$A05E:16 00 ASL $00,X @ $0000 = #$50 A:00 X:00 Y:00 S:DA P:nvUBdIZc$ s2 f$ s/ s; Q, ]7 O0 I+ u
$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:NvUBdIzc; `. c L+ T' m/ I+ l; K6 |% @* o
$A062:AD 11 6E LDA $6E11 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
6 T8 I) p0 `1 r5 S8 C$A065:D0 DC BNE $A043 A:00 X:00 Y:00 S:DA P:nvUBdIZc+ s6 K0 V: e, z9 F2 N! P# M
其实呢,这段机器码很短($A035-$A065),即使对于菜鸟我来说,慢慢来可以一步步写出。即使没有6502的反汇编器(到必要时,才知道某些软件是干什么的,比如这个6502的反汇编器)无非就是慢慢查一下汇编指令的机器码.先慢慢读这段码吧, b0 b5 G# _3 \" [2 g# g: L1 T
【转到了我的qq空间发一下看看如何】6 B7 _ @' d1 c5 O1 F
下面我试图解释一下,是菜鸟,出错了有相当大可能。/ s) F9 G$ P( p( \: T- g4 [- R
0 |% P5 e, x. P. N& ^% ^, g4 R
A043-A046:$6e11=$6e11/2,能除开则跳转16个地址即执行A05E,不行则继续0 `0 M/ I0 B- {$ n2 l. t8 Y
7 P( P% g; I( {# s" e
A048,将$00的值(哪里来的?),赋给寄存器a0 B* j" [" P1 ?3 j/ l
A04A -A056 清位
- a K+ c; k5 B& I- i1 G- \0 ~ |
|