首頁 游戲

紅白機(jī)大時(shí)代

第二十章 破解6502密碼(下)

紅白機(jī)大時(shí)代 生煎包子 2013 2019-04-21 00:20:00

  在完成了基礎(chǔ)步驟之后,王秋陽所編撰的6502同顯最大發(fā)色數(shù)的謎底,也水到渠成。和同色號(hào)發(fā)色一樣,漸近色號(hào)也能夠通過相同的原理完成同屏發(fā)色。

  比如死機(jī)的花屏顏色,現(xiàn)在已經(jīng)排除了黑階,灰階兩種色號(hào)。如果再人為的制造花屏,電腦會(huì)自動(dòng)尋找剩下的顏色,比如藍(lán)屏,紅屏都很正常。

  接下來,就是使用漸近色號(hào),取代原本電腦默認(rèn)的花屏色號(hào)。比如用02色號(hào)深藍(lán)取代12號(hào)湛藍(lán),又比如用07號(hào)深紅取代05號(hào)正紅。

  只要在重新Hack游戲的時(shí)候,把五十二種色號(hào)全部排選一遍,最后在理論上就能夠使用任何一個(gè)色號(hào)。這就是6502同顯六十四色號(hào)的原理。

  這套匯編理論,也是二十一世紀(jì)的百度達(dá)人“周哥”完成的。王秋陽曾經(jīng)用它Hack過好幾款游戲,記憶尤深,如今也能把它很明晰的描述了出來。

  首先,

  ch_join:;色號(hào)(02)進(jìn)棧

   inc p_stack

   bne ch_join02

   inc p_stack

  ch_join02:

   ldy #$00

   sta (p_stack),y

   rts

  然后,留存進(jìn)棧數(shù)據(jù),到達(dá)另一個(gè)棧,也就是臨時(shí)貯存器’

  get_stack03:;色號(hào)出棧到(02’)

   ldy #$00

   lda (p_stack),y

   ldy p_stack

   dey

   sty p_stack

   cpy #$ff

   bne get_stack

   dec p_stack

   rts

  接下來,新色號(hào)再次指定入棧條件

  Inftosuf04:

   cmp #12;“’“

   bne inftosuf #12’

   jsr ch_join ;遇“’”時(shí)直接入棧’

   jmp inftosuf02 ;返回02循環(huán)

  最后,得出棧頂算符優(yōu)先級(jí)別,在(top_lev)中

   ldy #$00

   sty top_lev

   lda (p_stack),y

   cmp #12;“(“

   beq stack_lev06 ;把棧中的“(”設(shè)為0級(jí)

   cmp #$00

   beq stack_lev06

   ldx #$ff

  如此一來,電腦原本顯示藍(lán)屏的色號(hào),就由12替換成02,都是藍(lán)屏。

  湛藍(lán)的色號(hào)是12。

  假設(shè)X等于3

  lda $2002, x;

  從內(nèi)存地址($2002+3)處載入數(shù)據(jù),即從$2005處;

  假設(shè)Y等于2

  lda $2000, y;

  從內(nèi)存地址$2002處載入數(shù)據(jù)

  其中:load和store指令可以采用一個(gè)標(biāo)簽作為基地址。

  通過代碼:

  somelabel:.incbin “our.pal“;顯示一個(gè)pal文件,

  標(biāo)簽即為它的首地址lda somelabel, x;

  從標(biāo)簽表示的地址+X處向12載入一個(gè)值y.

  于是色號(hào)02被鎖死,但貢獻(xiàn)出12這個(gè)色號(hào)可以任意使用。

  再重復(fù)一遍這個(gè)步驟,把12色號(hào)鎖死,用22色號(hào)代替。這個(gè)時(shí)候02色號(hào)將獲得釋放,它和22色號(hào)將能夠達(dá)到同顯,于是發(fā)色數(shù)又增加了一款!

  在理論上,6502的五十二款色號(hào),將有一個(gè)將永遠(yuǎn)無法使用。而實(shí)際上,在排選的過程中,可以通過釋放灰階00和10兩個(gè)色號(hào),將被鎖死的色號(hào)由兩個(gè)相同灰階色號(hào)中的30取替,就像最開始釋放02的時(shí)候一樣。

  這個(gè)時(shí)候,再進(jìn)行第二遍排選。

  6502的黑色色號(hào)有十一款之多,分別是0D至3D,0E至3E,1F至3F。由此可以相繼貢獻(xiàn)出十款被鎖死,從而取替出十種可使用的彩色色號(hào)。

  最后6502鎖定了一款灰階和十款黑色,單片機(jī)除了顯示最初不占用內(nèi)存,也就是肉眼判定為黑色(0D),白色(灰階20)兩款色號(hào)之外,還能使用剩余彩色中的任意二十二款色號(hào)。

  這就是FC現(xiàn)在能夠達(dá)到的最頂尖的機(jī)能。

  “好吧,我對(duì)此無話可說?!睓M井俊平放下了日志本,感覺好像看了一場(chǎng)大片一樣。他整個(gè)人都有些虛脫,但又有一種難言的滿足感。

  “二十四色!能夠真正運(yùn)用于游戲中的,可以達(dá)到同顯二十四色?黑科技,黑科技,貨真價(jià)實(shí)的Hack!”

  “這是真的,數(shù)據(jù)是不會(huì)騙人的,我要見見這個(gè)人。如果他能夠改良一款游戲,我和上村先生將有理由說服社長(zhǎng),把目光重新轉(zhuǎn)移到主機(jī)之上!”

  橫井俊平坐了起來,拿起了電話,撥通了冬野美紀(jì)的公寓:“喂,美紀(jì)醬?是我,橫井叔叔。我,想見見這位寫匯編的人?!?p>  冬野美紀(jì)也并不意外:“您知道不是我寫的?”

  橫井俊平笑了笑:“你別生氣,如果是,橫井叔叔倒會(huì)驚訝了。告訴我,這個(gè)人在哪兒?”

  冬野美紀(jì)說道:“您昨天還請(qǐng)他吃過飯呢?!?p>  “什么?真的是他!”

  ……

  九月九日,星期三。

  “您好橫井先生,沒有想到又能有幸受到您的邀請(qǐng)?!?p>  這天放學(xué),冬野美紀(jì)再次將王秋陽約了出來。不過這一回并沒有帶上胖子和夏雨詩,因?yàn)檫@是比較正式的會(huì)面,發(fā)出邀請(qǐng)的正是橫井俊平。

  王秋陽的劇本很成功。不光是匯編寫得好,一步步將橫井俊平勾搭了出來。同時(shí)他也把握住了身邊的機(jī)會(huì),以冬野美紀(jì)同學(xué)的身份,蹭過一頓飯。

  果然,兩人見面沒有那么生分的感覺,橫井俊平也不再為王秋陽只是一個(gè)普通大學(xué)生感到不必要的震撼了。他掏出了那本日志,微笑著放在了王秋陽的手上。

  “年輕人,你真的把我吸引住了。沒有想到中國(guó)的留學(xué)生中,竟然還有這樣的人物,只是你的手段有些不夠漂亮。其實(shí)你直接向任天堂投稿,我也會(huì)采納你的提案。”

  王秋陽實(shí)話實(shí)說:“橫井先生請(qǐng)見諒,因?yàn)槲业降资峭鈬?guó)人,如果突然涉及到FC的匯編,恐怕會(huì)引起不必要的麻煩。所以才會(huì)出此下策?!?p>  橫井俊平聽了,也明白了王秋陽的意思:“你說得也有道理。美紀(jì)啊,你真是認(rèn)識(shí)了一位了不起的年輕人呢!”

  冬野美紀(jì)的臉色又是微微發(fā)紅,不過目光中頗有些驕傲的神采。

  橫井俊平說道:“現(xiàn)在剛剛放課,想來你們也餓了吧?我們先去吃飯,然后橫井叔叔想和王君好好討論一下FC的發(fā)展!王君,你想吃點(diǎn)什么?”

  王秋陽撓了撓頭,說道:“老是蹭飯,怪讓人不好意思的。橫井先生,如果您不介意,我想吃那個(gè)行嗎?”

  現(xiàn)在亰都還在“黃金周”,大小街道比平時(shí)更要熱鬧許多。二人順著王秋陽的手指望去,見街邊有一個(gè)手推式的面包鋪。

  “密瓜包?”橫井俊平有些哭笑不得。中國(guó)的男孩喜歡吃甜食嗎?

  王秋陽也有些不好意思,只說道:“在中國(guó)的時(shí)候就特別想嘗一嘗日夲的密瓜包了,可惜一直沒有機(jī)會(huì)。如今來了這里,又囊中羞澀……”

  “行,就吃它吧。你要幾個(gè)?”

  “六個(gè)!”

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南