爱读小说
繁体版

第二十章 破解6502密码(下)(1/2)

爱读小说域名已更新,请记住:www.52dus.cc

    在完成了基础步骤之后,王秋阳所编撰的6502同显最大发色数的谜底,也水到渠成。和同色号发色一样,渐近色号也能够通过相同的原理完成同屏发色。

    比如死机的花屏颜色,现在已经排除了黑阶,灰阶两种色号。如果再人为的制造花屏,电脑会自动寻找剩下的颜色,比如蓝屏,红屏都很正常。

    接下来,就是使用渐近色号,取代原本电脑默认的花屏色号。比如用02色号深蓝取代12号湛蓝,又比如用07号深红取代05号正红。

    只要在重新Hack游戏的时候,把五十二种色号全部排选一遍,最后在理论上就能够使用任何一个色号。这就是6502同显六十四色号的原理。

    这套汇编理论,也是二十一世纪的百度达人“周哥”完成的。王秋阳曾经用它Hack过好几款游戏,记忆尤深,如今也能把它很明晰的描述了出来。

    首先,

    ch_join:;色号(02)进栈

    inc p_stack

    bne ch_join02

    inc p_stack

    ch_join02:

    ldy #$00

    sta (p_stack),y

    rts

    然后,留存进栈数据,到达另一个栈,也就是临时贮存器’

    get_stack03:;色号出栈到(02’)

    ldy #$00

    lda (p_stack),y

    ldy p_stack

    dey

    sty p_stack

    cpy #$ff

    bne get_stack

    dec p_stack

    rts

    接下来,新色号再次指定入栈条件

    Inftosuf04:

    cmp #12;“’“

    bne inftosuf #12’

    jsr ch_join ;遇“’”时直接入栈’

    jmp inftosuf02 ;返回02循环

    最后,得出栈顶算符优先级别,在(top_lev)中

    ldy #$00

    sty top_lev

    lda (p_stack),y

    cmp #12;“(“

    beq stack_lev06 ;把栈中的“(”设为0级

    cmp #$00

    beq stack_lev06

    ldx #$ff

    如此一来,电脑原本显示蓝屏的色号,就由12替换成02,都是蓝屏。

    湛蓝的色号是12。

    假设X等于3

    lda $2002, x;

    从内存地址($2002+3)处载入数据,即从$2005处;

    假设Y等于2

    lda $2000, y;

    从内存地址$2002处载入数据

    其中:load和store指令可以采用一个标签作为基地址。

    通过代码:

    somelabel:.incbin “our.pal“;显示一个pal文件,

    标签即为它的首地址lda somelabel, x;

    从标签表示的地址+X处向12载入一个值y.

    于是色号02被锁死,但贡献出12这个色号可以任意使用。

    再重复一遍这个步骤,把12色号锁死,用22色号代替。这个时候02色号将获得释放,它和22色号将能够达到同显,于是发色数又增加了一款!

    在理论上,6502的五十二款色号,将有一个将永远无法使用。而实际上,在排选的过程中,可以通过释放灰阶00和10两个色号,将被锁死的色号由两个相同灰阶色号中的30取替,就像最开始释放02的时候一样。

    这个时候,再进行第二遍排选。

    6502的黑色色号有十一款之多,分别是0D至3D,0E至3E,1F至3F。由此可以相继贡献出十款被锁死,从而取替出十种可使用的彩色色号。

    最后6502锁定了一款灰阶和十款黑色,单片机除了显示最初不占用内存,也就是肉眼判定为黑色(0D),白色(灰阶20)两款色号之外,还能使用剩余彩色中的任意二十二款色号。

    这就是FC现在能够达到的最顶尖的机能。

    “好吧,我对此无话可说。”横井俊平放下了日志本,感觉好像看了一场大片一样。他整个人都有些虚脱,但又有一种难言的满足感。

    “二十四色!能够真正运用于-->>

本章未完,点击下一页继续阅读

打开支付宝首页搜索“510274334” 立即领双份红包