|
楼主 |
发表于 2012-11-27 08:54:46
|
显示全部楼层
本帖最后由 sdiencelee 于 2012-11-29 17:33 编辑 , o+ t3 C. c) w3 ]. |. L& r2 O0 A
9 s) H7 K; Y9 h% j2 K9 A下面,我试试看看到底在后面加零的,成功与否,我也不知,开头说是实践,有错误就要如实写出来。若要暂时放弃此处也会写出来的。在原来我们可以基本确定a03几-a06几这段是在后面加零的,在vnes下,点击pc为??时暂停(执行断点,下同),点击执行后30条指令,之后发现30条不够,慢慢加到近100条,出现了$a065之后的$a067,就出现了18,01就是280的价格.而在a033之后,发现了a059的跳转.A046的跳转,没办法,直接看机器码或是6502的反编译器,暂时找不到6502反汇编器,没办法,先使用fceu的指令记录器(正好顺便教一下这个用法).如图,设置两个执行断点(原来不知道这样设置或是条件不允许如此设置,记录为文件时很大,除了editplus打开快点外,其他都很慢),这次用的120的wooden hat,这是记录出来的东西,我先自己研究研究.
, H1 N+ I5 z0 N+ f/ D4 W4 UFCEUX 2.1.6-interim svn2248 - 痕迹记录文件
. z6 h$ _& r% J4 l; P$8BDE:BD E2 8D LDA $8DE2,X @ $8E29 = #$0C A:47 X:47 Y:00 S:DC P:nvUBdIzc
$ s z8 A5 R% o. N3 a$8BE1:29 7F AND #$7F A:0C X:47 Y:00 S:DC P:nvUBdIzc+ a! w5 [$ [' s! W7 A. \; t S
$8BE3:AE 0F 6E LDX $6E0F = #$00 A:0C X:47 Y:00 S:DC P:nvUBdIzc, N, }% H3 d* ]8 y8 X$ V
$8BE6:20 35 A0 JSR $A035 A:0C X:00 Y:00 S:DC P:nvUBdIZc
0 h, W% L5 V$ L# j/ d% f$A035:8D 11 6E STA $6E11 = #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc
+ \; T* i$ K1 ^1 x' V& W( W2 a( G$A038:A9 00 LDA #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc
# Q! l5 F- I& u. r0 h, X$A03A:8D 12 6E STA $6E12 = #$78 A:00 X:00 Y:00 S:DA P:nvUBdIZc# u+ z! y2 G0 T
$A03D:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc! E* ~ q4 |2 E, E
$A040:8D 14 6E STA $6E14 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=a,$6e12-$5e14=0(初始化)3 n, ^& i6 `1 o0 B! s
$A043:4E 11 6E LSR $6E11 = #$0C A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=$6e11/2( i, \/ e6 Q) A
$A046:90 16 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIzc //能除开则跳转16个地址即执行A05E,不行则继续执行A048' b: S3 {6 z8 |4 \& N6 C
$A05E:16 00 ASL $00,X @ $0000 = #$0A A:00 X:00 Y:00 S:DA P:nvUBdIzc) y- D9 F0 T( R8 C c! O5 \
$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc
' H. _8 A7 k' M" ^$A062:AD 11 6E LDA $6E11 = #$06 A:00 X:00 Y:00 S:DA P:nvUBdIZc
0 R8 |* U5 s/ m9 o# u( a G$A065:D0 DC BNE $A043 A:06 X:00 Y:00 S:DA P:nvUBdIzc
9 J0 p/ g: g3 e$A043:4E 11 6E LSR $6E11 = #$06 A:06 X:00 Y:00 S:DA P:nvUBdIzc
j, g: m2 }# K8 t/ {: ]0 R; w, W$A046:90 16 BCC $A05E A:06 X:00 Y:00 S:DA P:nvUBdIzc
( J/ |: q/ m) B2 S1 }1 {* o$A05E:16 00 ASL $00,X @ $0000 = #$14 A:06 X:00 Y:00 S:DA P:nvUBdIzc: j4 ^4 u2 l/ L! V! u) A0 i
$A060:36 01 ROL $01,X @ $0001 = #$00 A:06 X:00 Y:00 S:DA P:nvUBdIzc1 T: x$ e/ H( p
$A062:AD 11 6E LDA $6E11 = #$03 A:06 X:00 Y:00 S:DA P:nvUBdIZc
/ P i! S; D0 e4 e9 X* r$A065:D0 DC BNE $A043 A:03 X:00 Y:00 S:DA P:nvUBdIzc k2 G7 p* C* e% M/ J
$A043:4E 11 6E LSR $6E11 = #$03 A:03 X:00 Y:00 S:DA P:nvUBdIzc( n7 S- x' s1 ~, H. g
$A046:90 16 BCC $A05E A:03 X:00 Y:00 S:DA P:nvUBdIzC
2 {6 J0 O; F: ^! L2 _9 ^$A048:B5 00 LDA $00,X @ $0000 = #$28 A:03 X:00 Y:00 S:DA P:nvUBdIzC* y% n) w% P6 V! p+ {5 a3 Z
$A04A:18 CLC A:28 X:00 Y:00 S:DA P:nvUBdIzC
/ c% h$ _" L+ ~$A04B:6D 12 6E ADC $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc
9 u& e' m+ i q ?# `. k$A04E:8D 12 6E STA $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc
4 a7 ^! W, E" ^/ F. f) f5 ~- K. u$A051:B5 01 LDA $01,X @ $0001 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc
+ T$ n3 n* I' ~# W% S$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc( Z$ X1 k O- }9 S+ Y' E# s }1 m
$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc5 d" ~+ e9 V% I
$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc! C( |+ r' \( P; U* ?) }4 ?( E
$A05E:16 00 ASL $00,X @ $0000 = #$28 A:00 X:00 Y:00 S:DA P:nvUBdIZc
+ L4 j$ B: s5 O+ T' N$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc/ E2 }; ^# Q8 g6 P
$A062:AD 11 6E LDA $6E11 = #$01 A:00 X:00 Y:00 S:DA P:nvUBdIZc
' H, V. d$ _, O. M! O$ E4 `. K$A065:D0 DC BNE $A043 A:01 X:00 Y:00 S:DA P:nvUBdIzc
y! _3 m: u" Q& q( U2 m: c$A043:4E 11 6E LSR $6E11 = #$01 A:01 X:00 Y:00 S:DA P:nvUBdIzc
6 E# n( L/ e/ D& y$A046:90 16 BCC $A05E A:01 X:00 Y:00 S:DA P:nvUBdIZC
3 ]0 b5 r' Q8 f" t, u$A048:B5 00 LDA $00,X @ $0000 = #$50 A:01 X:00 Y:00 S:DA P:nvUBdIZC I% Z# ^' G9 v: [( Y3 O- f
$A04A:18 CLC A:50 X:00 Y:00 S:DA P:nvUBdIzC
. R0 t8 z, S4 h6 t' y0 Q# y5 |, f$A04B:6D 12 6E ADC $6E12 = #$28 A:50 X:00 Y:00 S:DA P:nvUBdIzc9 V6 x: e" `6 c: n" \- D
$A04E:8D 12 6E STA $6E12 = #$28 A:78 X:00 Y:00 S:DA P:nvUBdIzc
) r/ ?& N. u! Z' A1 P% D5 y3 G$A051:B5 01 LDA $01,X @ $0001 = #$00 A:78 X:00 Y:00 S:DA P:nvUBdIzc
* N( B2 B% ~' F8 K- `- g$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc, Z3 m& X) q# E/ C- k
$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
3 G# B% _) x' e$ r% [0 R0 L" z2 P$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc
$ f2 V9 Z/ w p5 F$A05E:16 00 ASL $00,X @ $0000 = #$50 A:00 X:00 Y:00 S:DA P:nvUBdIZc7 X7 B+ i/ a1 h$ w7 p# m
$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:NvUBdIzc6 M+ t2 t, \7 e6 q/ @
$A062:AD 11 6E LDA $6E11 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
6 y1 e7 X" W- U4 k: s$A065:D0 DC BNE $A043 A:00 X:00 Y:00 S:DA P:nvUBdIZc" U- B; r5 m" p! `( Y
其实呢,这段机器码很短($A035-$A065),即使对于菜鸟我来说,慢慢来可以一步步写出。即使没有6502的反汇编器(到必要时,才知道某些软件是干什么的,比如这个6502的反汇编器)无非就是慢慢查一下汇编指令的机器码.先慢慢读这段码吧
9 i( M s/ g4 ^【转到了我的qq空间发一下看看如何】$ R0 t5 I' }3 u" @! s3 g
下面我试图解释一下,是菜鸟,出错了有相当大可能。8 i9 z" w' j( S/ c* W
( n( z7 ^" p L
A043-A046:$6e11=$6e11/2,能除开则跳转16个地址即执行A05E,不行则继续
2 W# _3 v# O' t+ o, g5 j) A
! \1 J9 c1 r7 {) f* i6 w8 D7 D: tA048,将$00的值(哪里来的?),赋给寄存器a
) a& I' `0 q& R' B$ gA04A -A056 清位
7 m3 Z8 O% Z% t) F$ S8 L# P! _, Y |
|