在完成了基础步骤之后,王秋阳所编撰的6502同显最大发色数的谜底,也水到渠成。和同色号发色一样,渐近色号也能够通过相同的原理完成同屏发色。
比如死机的花屏颜色,现在已经排除了黑阶,灰阶两种色号。如果再人为的制造花屏,电脑会自动寻找剩下的颜色,比如蓝屏,红屏都很正常。
接下来,就是使用渐近色号,取代原本电脑默认的花屏色号。比如用02色号深蓝取代12号湛蓝,又比如用07号深红取代05号正红。
只要在重新hack游戏的时候,把五十二种色号全部排选一遍,最后在理论上就能够使用任何一个色号。这就是6502同显六十四色号的原理。
这套汇编理论,也是二十一世纪的百度达人“周哥”完成的。王秋阳曾经用它hack过好几款游戏,记忆尤深,如今也能把它很明晰的描述了出来。
首先,
ch_jo:色号(02)进栈
p_stack
bne ch_jo02
p_stack
ch_jo02:
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
接下来,新色号再次指定入栈条件
ftosuf04:
12“’“
bne ftosuf 12’
jsr ch_jo 遇“’”时直接入栈’
ftosuf02 返回02循环
最后,得出栈顶算符优先级别,在(_lev)中
ldy 00
sty _lev
lda (p_stack),y
12“(“
beq stack_lev06 把栈中的“(”设为0级
00
beq stack_lev06
ldx ff
如此一来,电脑原本显示蓝屏的色号,就由12替换成02,都是蓝屏。
湛蓝的色号是12。
假设x等于3
lda 2002, x
从内存地址(20023)处载入数据,即从2005处
假设y等于2
lda 2000, y
从内存地址2002处载入数据
其中:load和store指令可以采用一个标签作为基地址。
通过代码:
sobel:cb “ourpal“显示一个pal文件,
标签即为它的首地址lda sobel, x
从标签表示的地址x处向12载入一个值y
于是色号02被锁死,但贡献出12这个色号可以任意使用。
再重复一遍这个步骤,把12色号锁死,用22色号代替。这个时候02色号将获得释放,它和22色号将能够达到同显,于是发色数又增加了一款!
在理论上,6502的五十二款色号,将有一个将永远无法使用。而实际上,在排选的过