|
|
楼主 |
发表于 2012-11-27 08:54:46
|
显示全部楼层
本帖最后由 sdiencelee 于 2012-11-29 17:33 编辑 p3 k; f8 M7 ~ Y& c+ N
5 y+ h D" }6 _& G/ X下面,我试试看看到底在后面加零的,成功与否,我也不知,开头说是实践,有错误就要如实写出来。若要暂时放弃此处也会写出来的。在原来我们可以基本确定a03几-a06几这段是在后面加零的,在vnes下,点击pc为??时暂停(执行断点,下同),点击执行后30条指令,之后发现30条不够,慢慢加到近100条,出现了$a065之后的$a067,就出现了18,01就是280的价格.而在a033之后,发现了a059的跳转.A046的跳转,没办法,直接看机器码或是6502的反编译器,暂时找不到6502反汇编器,没办法,先使用fceu的指令记录器(正好顺便教一下这个用法).如图,设置两个执行断点(原来不知道这样设置或是条件不允许如此设置,记录为文件时很大,除了editplus打开快点外,其他都很慢),这次用的120的wooden hat,这是记录出来的东西,我先自己研究研究.
/ y' T' d4 ]+ c& {+ p, ^ FCEUX 2.1.6-interim svn2248 - 痕迹记录文件
+ `, i9 U P5 E* q# [$8BDE:BD E2 8D LDA $8DE2,X @ $8E29 = #$0C A:47 X:47 Y:00 S:DC P:nvUBdIzc
! d* o( O2 I+ r. ^- E* k3 }4 s$8BE1:29 7F AND #$7F A:0C X:47 Y:00 S:DC P:nvUBdIzc* a) v9 n2 C: D: z
$8BE3:AE 0F 6E LDX $6E0F = #$00 A:0C X:47 Y:00 S:DC P:nvUBdIzc
& { r' ^4 U: u- z$8BE6:20 35 A0 JSR $A035 A:0C X:00 Y:00 S:DC P:nvUBdIZc; n3 h% q7 X( i
$A035:8D 11 6E STA $6E11 = #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc4 r7 @: y6 V4 }8 z. ?. o
$A038:A9 00 LDA #$00 A:0C X:00 Y:00 S:DA P:nvUBdIZc
, m7 b5 o/ F& F2 R% q/ U, F4 W$A03A:8D 12 6E STA $6E12 = #$78 A:00 X:00 Y:00 S:DA P:nvUBdIZc
; @ _2 t7 d4 K+ H/ _$A03D:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
5 D- }8 E0 ?, j# H3 x* V! `. v$A040:8D 14 6E STA $6E14 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=a,$6e12-$5e14=0(初始化)2 |9 _# y: m) v; }
$A043:4E 11 6E LSR $6E11 = #$0C A:00 X:00 Y:00 S:DA P:nvUBdIZc //$6e11=$6e11/2
" n5 B) P" s0 n3 \* S$A046:90 16 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIzc //能除开则跳转16个地址即执行A05E,不行则继续执行A048% ^, X; Z9 w( }( ] R
$A05E:16 00 ASL $00,X @ $0000 = #$0A A:00 X:00 Y:00 S:DA P:nvUBdIzc; v2 Y G+ ]* M* Q- Z' n5 A; B4 _
$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc
" ^, D" S" e8 Z$A062:AD 11 6E LDA $6E11 = #$06 A:00 X:00 Y:00 S:DA P:nvUBdIZc( C8 m- X$ ~! T: J" U
$A065:D0 DC BNE $A043 A:06 X:00 Y:00 S:DA P:nvUBdIzc5 F; |6 Y0 e$ g
$A043:4E 11 6E LSR $6E11 = #$06 A:06 X:00 Y:00 S:DA P:nvUBdIzc
$ V Y# ^$ s6 Z. @3 q1 A0 w$A046:90 16 BCC $A05E A:06 X:00 Y:00 S:DA P:nvUBdIzc
/ B; i! ~9 j, `8 J' G$A05E:16 00 ASL $00,X @ $0000 = #$14 A:06 X:00 Y:00 S:DA P:nvUBdIzc
! W7 D5 W' } Z, J$ Y3 }$A060:36 01 ROL $01,X @ $0001 = #$00 A:06 X:00 Y:00 S:DA P:nvUBdIzc
" C# n6 X" u0 |1 X3 ~$A062:AD 11 6E LDA $6E11 = #$03 A:06 X:00 Y:00 S:DA P:nvUBdIZc% g7 ^0 }5 _8 o, L T4 w+ }- F
$A065:D0 DC BNE $A043 A:03 X:00 Y:00 S:DA P:nvUBdIzc
+ \; e9 Q; O y1 n4 I$A043:4E 11 6E LSR $6E11 = #$03 A:03 X:00 Y:00 S:DA P:nvUBdIzc
5 e+ I, X1 Y- @8 O# U% Y9 I$A046:90 16 BCC $A05E A:03 X:00 Y:00 S:DA P:nvUBdIzC" g% T1 S: U% i9 z8 x9 y
$A048:B5 00 LDA $00,X @ $0000 = #$28 A:03 X:00 Y:00 S:DA P:nvUBdIzC
$ y8 C6 e6 @& J& ?# T" n$A04A:18 CLC A:28 X:00 Y:00 S:DA P:nvUBdIzC
1 }& {! G$ ^0 G1 Q$A04B:6D 12 6E ADC $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc
" B9 q" S, r2 q& f5 Y- s Y0 l2 U$A04E:8D 12 6E STA $6E12 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc
" f9 P( F1 j( y$A051:B5 01 LDA $01,X @ $0001 = #$00 A:28 X:00 Y:00 S:DA P:nvUBdIzc/ w. t2 ^" R5 F0 i& a
$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
6 M8 F0 W$ n) j, O) V$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
. N9 z- e! X O8 |& k$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc9 Y6 Q3 Z! c, `" ~6 X
$A05E:16 00 ASL $00,X @ $0000 = #$28 A:00 X:00 Y:00 S:DA P:nvUBdIZc
/ n8 b' @! d) s; M. S: E. P" F$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIzc
3 r% w# d5 p0 B5 C P$A062:AD 11 6E LDA $6E11 = #$01 A:00 X:00 Y:00 S:DA P:nvUBdIZc+ v0 G: J5 d4 _
$A065:D0 DC BNE $A043 A:01 X:00 Y:00 S:DA P:nvUBdIzc
- {) G1 e0 F1 {9 @4 ?$A043:4E 11 6E LSR $6E11 = #$01 A:01 X:00 Y:00 S:DA P:nvUBdIzc) {9 s _. c# F: E+ I' |
$A046:90 16 BCC $A05E A:01 X:00 Y:00 S:DA P:nvUBdIZC4 y0 O( n' F* _
$A048:B5 00 LDA $00,X @ $0000 = #$50 A:01 X:00 Y:00 S:DA P:nvUBdIZC3 ]/ |! N, z+ e1 `) F, p" [
$A04A:18 CLC A:50 X:00 Y:00 S:DA P:nvUBdIzC S" H3 t- m. L% \. }4 H$ R
$A04B:6D 12 6E ADC $6E12 = #$28 A:50 X:00 Y:00 S:DA P:nvUBdIzc
9 M. {! Y& o( H: ]! O$A04E:8D 12 6E STA $6E12 = #$28 A:78 X:00 Y:00 S:DA P:nvUBdIzc
' ~% X+ Y T- a0 n$ ?: R5 w0 X$A051:B5 01 LDA $01,X @ $0001 = #$00 A:78 X:00 Y:00 S:DA P:nvUBdIzc
/ u( v, L4 a' A; q0 X5 [" b$A053:6D 13 6E ADC $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc! G& g# p6 L' o$ _" y
$A056:8D 13 6E STA $6E13 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc
- x8 o- L% x( E8 [* [0 B$A059:90 03 BCC $A05E A:00 X:00 Y:00 S:DA P:nvUBdIZc4 O$ V# _& {! e, z( T2 S% F" w
$A05E:16 00 ASL $00,X @ $0000 = #$50 A:00 X:00 Y:00 S:DA P:nvUBdIZc
) F* X( ^8 ^) o$A060:36 01 ROL $01,X @ $0001 = #$00 A:00 X:00 Y:00 S:DA P:NvUBdIzc, K: g% k5 |9 K3 |
$A062:AD 11 6E LDA $6E11 = #$00 A:00 X:00 Y:00 S:DA P:nvUBdIZc( F" N" u0 Y$ b( Y2 k: [
$A065:D0 DC BNE $A043 A:00 X:00 Y:00 S:DA P:nvUBdIZc, d# R2 l, {& o9 q x; }
其实呢,这段机器码很短($A035-$A065),即使对于菜鸟我来说,慢慢来可以一步步写出。即使没有6502的反汇编器(到必要时,才知道某些软件是干什么的,比如这个6502的反汇编器)无非就是慢慢查一下汇编指令的机器码.先慢慢读这段码吧+ x R! g& }+ _2 J; e; r
【转到了我的qq空间发一下看看如何】6 i/ f3 j+ U& d, F
下面我试图解释一下,是菜鸟,出错了有相当大可能。: Z4 p2 q6 s- y, W v
j( f. m x3 d: e1 TA043-A046:$6e11=$6e11/2,能除开则跳转16个地址即执行A05E,不行则继续% ~, }+ u& p- k: G
+ @- P( }( X5 s( m, C0 L
A048,将$00的值(哪里来的?),赋给寄存器a! y) q6 D. y1 f. H
A04A -A056 清位
: M3 X# z8 z+ p |
|