原文:tieba.baidu.com/p/8876780676(具体程序实现)
tieba.baidu.com/p/8873639356(程序写入)
本教程仅在原文基础上作详细展开(因为原文太难懂了呜呜)
本教程字数4000+,虽然如此,也请各位看官耐心看完
因为本教程中含有大量计算器术语,所以在这里统一说明一下:
关于字符及对应的十六进制代码见tieba.baidu.com/p/7126603316(坟贴勿回)
xxx(数字)an模式:指在线性模式下,an前加xxx个字符后,按等于后进入的异常模式。
比如124an就是在线性模式下,an前加124个字符(科学常数、单位换算除外)后,按等于后进入的异常模式。
若无特殊说明,刷不可刷字符所用的大写A~F均为十六进制字符(粗体A~F)。
看前提醒:请将你的计算器复位并调至线性模式
本教程操作均在普通计算模式下进行
1.进入124an模式(主要是给萌新准备的,大佬请无视)
依次进行如下操作:
1 shift 8 下 2 7 = 上 左 shift 8 下 2 6 左 左 右 shift .(Ran#) 左 . del 左 右 shift .(Ran#) 右 del del 右 左 1 del del
此时屏幕中会出现1个字符“an”,将光标移至最左侧,打100个数字,+,打23个数字,等于。此时即进入124an模式。
如果你执行过拼图的程序,且没有重新安装过电池,那么步骤2~4可以直接跳过。
2.将quickcpy程序注入内存中的指定片段
进入124an模式后,我们需要一些操作来注入quickcpy程序。

这是需要注入的字符的十六进制代码(以下简称为表(1)),冒号前的4位十六进制代码表示需要注入的地址,冒号后的表示需要刷的字符,其中方括号括起来的字符为不可刷字符,即无法使用键盘直接输入的字符。
那么,有没有一种方法,能够把这些不可刷字符刷出来呢?
答案:当然是有的,只不过需要利用字符转换器。

这张表以下简称为表2
就以第一行的字符为例,我们将需要字符转换器转换的字符保留下来,写成如下形式:@DAD@
然后,我们进行如下操作:1 shift 8 下 2 7 等于 上 左 shift 7 4 9 左 左 右 shift 7 3 (-) 左 . del 左 右 shift 7 3 7 左 . del 左 右 shift 7 3 (-) 左 . del 左 右 shift 7 4 8 左 . del 左 右 del del
此时屏幕会出现预期的字符。之后,补充字符,直到变成第一行的形式。
注意:在使用字符转换器时,刷出的字符的先后顺序为从右向左。
细心的同学可以发现,在刷两个@时,我们采用了不同的刷法:
其中左边的@的刷法是shift 7 4 8,右边的@的刷法是shift 7 4 9,其实的确是这样,这是因为两个@的效果不同,我们可以利用这两个@来确保刷出尽量多的字符。
(注意:在这一步中刷不可刷字符时,左边的@的刷法一律为shift 7 4 8,右边的@的刷法一律为shift 7 4 9)
如果需要刷出16进制的A~F,我们可以使用如下刷法:
A: shift 7 3 7 ; B: shift 7 3 8 ; C: shift 7 3 9
D: shift 7 3 (-); E: shift 7 3 °’”; F: shift 7 3 x-¹(负一次方打不出来,只能这样写了)
将字符补成第一行的形式之后,按CALC,=,=,=,上,这时你的计算器会显示如下的字符:

删掉3个空格(因为在进行第5行的操作时需要保留一个空格,注意每个空格约占普通字符长度的1/3,但会使光标偏移1个普通字符长度),并将其补充成如下形式:(第一个k前需要垫48个数字)

按等于,此时计算器不会有明显的反应(不是卡死)。
于是,需要注入内存的quickcpy程序中第一行(暂且这样称呼)的操作就这样完成了。按AC键,然后进行下一步操作,此时按照表2中下一行(如果你刚才完成了第一行的操作,那么下一行就是第二行,以此类推)的刷法刷不可刷字符,并补充成如下形式:
(48个数字)k010#! ┘▸t00xnor²cosh-¹()008@20003:(后面是表1中对应行的十六进制代码所对应的字符,例如2e对应着小数点“.”)
(补充,不懂的可以跳过)当然,一般的,之后在使用相同程序时,我们都可以使用以下方法在124an模式下复制字符串:(48个数字)E2 30 31 30 (目标地址) C8 D1 30 30 A2 D5 70 D0 30 30 38 1D 32 30 30 30 33 23(需要复制的字符串),其中目标地址需要将低位放在前面,将高位放在后面,如:你要写入的地址是D234,那么在使用strcpy时使用的目标地址就是34 D2
#为你在这一行使用@所刷的不可刷字符中的第一个字符。如你在刷第二行时,#所代表的字符就是0x28(又是@😡所以卡西欧的计算器中到底有多少字符是@😡)
重复此操作直至将最后一行内容复制完成。
3.对quickcpy进行初始化
因为关于不可刷字符的刷法已经在第2步详细介绍,所以此步骤将会使用适当简略的说法。
利用字符转换器,输入12345678x:@=10.000C220A23030:@=1F086011D23,CALC,=,=,=,上,出现不可刷字符
删掉F086(表现为空白的换行符)之前多余的空格(注意:在存在F086时,输入区的字符可能看上去没删掉,请用alpha 积分(:) del来确认要删的字符已经被删掉,如果不小心删掉了其他不该删掉的字符,AC,左,CALC,=,=,=,上,重删)
补充字符到如下的形式(k前面依旧要垫48个数字,度是OPTN 2 1):

按等于,此时计算器不会有明显的反应,按AC键,
接着利用字符转换器,输入12345678x:@=10.000E9A228308F:@=11D23,CALC,=,=,=,上,出现不可刷字符
删掉多余的空格,补充字符到如下的形式(k前面依旧要垫48个数字,度是OPTN 2 1):

按等于,此时计算器不会有明显的反应,按AC键。
4.使用quickcpy将主程序注入指定内存片段
在使用quickcpy注入主程序时,我们只需使用16进制字符来注入指定的内存片段,而不必利用@刷不可刷字符
每一次进行操作时,我们需要用1 shift 8 下 2 7 = 上 左 shift 8 下 4 1来刷出@(实际上是另一个字符,与刷不可刷字符时的两个@都不同)
然后再依照下表中需要打的字符,补充对应的16进制字符(即粗体A~F)

然后,补充字符至下图的形式(以第一行为例,注意:与其他操作不同,这里不需要垫48个数字)

按等于,此时计算器不会有明显的反应,按AC键,开始下一行的操作,直至将最后一行内容复制完成
注意:使用quickcpy复制字符串到指定位置时,程序会自动将地址增加0x18,所以此时需避免重复按等于。
4.初始化参数
使用字符转换器,刷出:12345678x:@=10.00070D1A2301D:@=18023,其中@的刷法与第2步刷不可刷字符的刷法相同。然后CALC,=,=,=,上,删掉多余的空格,并补充字符成如下图的形式。(k前面要垫48个字符),然后等于,AC

接着使用字符转换器刷出12345678x:@=10.000A4D1A2301D:@=1FFFF23,然后CALC,=,=,=,上,删掉多余的空格,并补充字符成类似上图的形式(只不过最前面的cosh-¹(换成了0xA4,最后面的@换成了不可见的0xFFFF,下面以此类推),等于,将第一个@换成×(乘号),等于,将光标移到最后,del,del(把FFFF删干净),等于,AC
然后使用字符转换器再刷出12345678x:@=10.000E8D1A2301D:@=10123,然后CALC,=,=,=,上,删掉多余的空格(这次需要保留一个空格)。并补充字符成类似上图的形式,等于,将第一个@换成μ(工程符号),并将光标移到空格前,0,等于,将光标移到最后,del,del(将0和空格删掉),等于,AC
5.启动程序
注意:在进行此操作时,请将计算器字体调成小字体
因为启动程序的不可刷字符有点多,这一次我们使用变量来对@进行间接赋值
我们对以下变量进行赋值(可以分步赋值):
10.0002006BA308F STO C
11.2D1288FE93030 STO D
1F08623 STO E
然后用字符转换器,刷出:12345678x:@=C:@=D:@=E(注:这里的C,D,E都是变量,前两个@的刷法与前面刷不可刷字符时@的刷法相同,第三个@的刷法是shift 7 1 4),CALC,=,=,=,=(注意是4次等于),上,此时计算器会显示成这样:

按左两下,将第二组空格(数字0和不可见字符F086之间的空格)全部删掉(注意:F086不能删掉),第一组空格(ReP(和@之间的空格)只保留一个,显示区域大致如下图所示:

(注意:在存在F086时,输入区的字符可能看上去没删掉,请用alpha 积分(:) del来确认要删的字符已经被删掉,如果不小心删掉了其他不该删掉的字符,AC,左,CALC,=,=,=,=,上,重删)
接着,补充字符至如下图所示:

确定输入无误后,按等于,屏幕清空,此时即进入画图程序。
拼图说明:按上、下、左、右键控制画笔坐标
按1键将画笔所在像素变为黑色,按2键将画笔所在像素变为白色
按0/AC键清屏
注意事项:画笔的最初位置位于状态栏,需要按一次下才能进入主显示区
若十分钟内无任何操作,计算器将自动关机
最后在这里放一只小布真·电子宠物,以此作为该文章的结尾。

THE END