普鲁士蓝的卡西欧fx-991CN...

物理
普鲁士蓝的卡西欧fx-991CN X拼字教程(及一些其他bug)帖

用户头像
Fe4[Fe(CN)6]3 更新于2025-6-5 15:32:46
欢迎来到普鲁士蓝的卡西欧教程帖!本帖主要以拼字为主,另加一些知识延伸到小技巧,用于你在日常学习中整蛊同学(划掉)

本文介绍对象为卡西欧fx-991CN X VerC,CN CW请移步其他大佬的帖子。对于VerF用户,操作可能稍有不同,不同之处会备注出来。

卡西欧fx-991CN X是一款相当成功的函数机,尽管现在已逐步被CN CW替代,但相信大部分人(包
括笔者在内)都更喜欢CN X 的操作逻辑。CN CW连分数转小数都塞进二级菜单的用户体验确实不佳,因此笔者仍在用991CN X作为主力计算器。

CN X一共发售了6版,从VerA到VerF。其中VerC与VerF存量最大(当然如果你翻百度fx-es吧等专业论坛,也会发现许多古早用户研究VerA与VerB),而VerC早已停产,仅能在一些货源较旧的店铺找到,而VerF在官网仍然有售。尽管6个版本在正常使用上完全没有区别,但在一些小bug上区别较大,而这些bug正是我们要利用的。因此,在学习操作前务必确保你使用的是正确的版本。查询版本的方法在后文有讲述。






(一)自检模式
991CN X 中存在一个自检模式,供计算器检查各项功能是否正常。当进入自检模式后,无论是否正常退出,计算器都会在退出后重置(似乎比$oxed{shift}$+$oxed{9}$的重置更加彻底),这种重置有不可忽视的作用,如美元符号锁机的情况下,开机后会进入“假死机”状态,任何按钮都没有反应,这时候进入自检强行重置即可恢复正常使用。自检模式的用法如下,在任何一步中按下$\boxed{开机}$键都能退出:

在计算器关机的状态下,同时按下$\boxed{shift}$、$\boxed{7}$、$\boxed{开机}$即可进入自检,显示如下:
-------------------------
DIAGNOSTIC


Press AC
-------------------------

此时按下$\boxed{AC}$会退出自检模式,但要继续自检,按下$\boxed{9}$,显示如下:
-------------------------
8888888888888888


    8.888888889$ imes 10^{15}$
-------------------------

此时连按5次$\boxed{shift}$,屏幕在亮暗之间闪动,按下第5次后显示如下:
-------------------------
CY-239 VerC



Press AC
-------------------------

“CY-239”为处理器名称,“VerC”即为计算器版本号。此时按下$\boxed{AC}$并不会退出,而是显示如下:
-------------------------
00



-------------------------
在这个界面下,需要从左到右、从上到下地按下计算器的每一个按钮,当按钮被依次按下时,示数会递增至这个按钮的编号。而当前一个按钮未按下就按后一个时,示数将不会变化,直到你把前一个按钮按下为止。最后一个按钮$\boxed{=}$的编号是49。

按下所有按钮后会进入如下界面:
---------------------------------------------
Contrast
14h
Light                                      Dark 
[<]                                           [>]
---------------------------------------------
当前界面可以调整屏幕对比度,第二行的14h(14为十六进制数字)即为当前对比度值。调整完成后自检就结束了,会显示如下界面:
---------------------------------------------
TEST OK

Reset All
Press AC
---------------------------------------------
示意计算器已重置,按下AC即可退出自检。
收起
3
4
共4条回复
时间正序
用户头像
Fe4[Fe(CN)6]3
1天前
后续更新移步评论区,编辑帖子太容易吞$\LaTeX$了
用户头像
Fe4[Fe(CN)6]3
18小时前
(二)拼字原理

正如学习有机化学前要先学会热力学原理,学习一些基本的输入逻辑也是很必要的。当然如果你是学业繁忙的竞赛党,也可以跳过这一部分直接学习拼字。不过为了后续操作的方便还是建议大家学习一下。

所有输入程序都要对字符进行编码,无论是计算器还是电脑都是如此。卡西欧计算器采用2位/4位16进制数(即1字节/2字节)的存储方式,分为“一级字符”与“二级字符”。“一级字符”是你通过按键输入的符号,如求和符号、积分、数字等,而“二级字符”是计算器文本使用的,如设置菜单里的汉字全部都是二级字符。由于一级字符与二级字符都是使用2位/4位十六进制数存储,因此可能一个码位对应一个一级字符和一个二级字符。拼字的本质就是在程错情况下通过输入一级字符输出二级字符(如字母与汉字)。

说了这么多,现在我们来聊聊卡西欧的输入逻辑。

刚刚说到,卡西欧的字符存储是2位+4位的,2位存储基本运算符号,4位存储单位换算、变量记忆与一堆程错产物。4位字符均以F开头,因此为了避免读错,2位字符的F0~FF是空缺的。下面是一些字符及其编码:
$\boxed{1}$    31
$\boxed{Pa--atm}$    FE1A
$\boxed{r_e}$    FD3A
$\boxed{M+}$    FB1A
完整的字符表会在下方给出。特别地,字符00标记字符串的结束,这一字符与光标的进退息息相关,因此后文会讲到形如FE00与FF00的字符会产生奇妙的效果。

卡西欧的光标操作分为两部分:编辑器与显示器。编辑器负责增删移插,而显示器负责告诉你操作结果。由于显示器的显示逻辑与编辑器的控制逻辑稍有不同,因此经常会出现“光标卡住”的情况。显示器的逻辑是:

1、从字符串的开头读起,如果光标在字符上,就显示光标;
2、取一个字节,如果它以F开头,就接着取下一个;(聪明的你已经想到了,这一步是在读取光标所在的字符)
3、如果这个字符是00,那么就退出(结束显示),在线性模式下,上文提到的Fx00型字符可以退出;
4、否则,就把这个字符显示在屏幕上,并向右移动1或2字节(取决于第2步的读数);
5、回到第2步。

不难想到,如果光标在一步移动后卡在了双字节字符中间,或移到了00后面(如|FE 00 33 -> FE 00|33),显示器是无法显示光标位置的。此时的光标在数学模式下会停在上一个正确字符的位置,线性模式下会移到最左边。千万不要被光标的位置骗到!这时的光标显示未必反映光标的真实位置。
1条评论
用户头像
Fe4[Fe(CN)6]3
16小时前

顶一下

用户头像
Fe4[Fe(CN)6]3
17小时前
接下来我们讲讲编辑器的逻辑。先从左右移动开始:

左移:
1、如果在历史记录区或在数学模式中且光标在开头,就移到第一个00处(显然这是从字符串头部移到尾部);
2、否则,如果前面第2个字节以F开头就左移2字节,否则左移1字节。
右移:
1、如果在历史记录区或在数学模式中且光标在00处,就移到开头(显然这是从字符串尾部移到头部);
2、否则,如果当前第1个字节以F开头就右移2字节,否则右移1字节。

左移右移的规则还是很好理解的,而且符合计算器的存储逻辑。右移2字节可以有效防止光标卡在双字节字符中间导致阅读紊乱。然而bug恰恰出在这里。现在考虑一个形如FxFx的字符,后面跟着一个单字节字符:
Fx Fx ab|
按$\boxed{←}$,光标会把Fxab认为是一个双字节字符,向前移2个字节:
Fx| Fx ab
这样我们就把光标插入一个双字节字符中间。如果我们要产生双字节字符Fxcd,只需要在当前位置再输入一个单字节字符cd,计算器就会将其识别为两个双字节字符:
Fx cd| Fx ab

然而,形如FxFx的字符是无法直接输入的。我们只能通过特殊方法产生它。这里就要隆重介绍卡西欧入门工具,百度fx-es吧的跨时代发现:
$\huge{字符转换器}$

字符转换器在花屏bug中出现过,就是利用单位转换“lbf/in²→kPa(编号FE23,输入方式为$\boxed{shift}$ $\boxed{8}$ $\boxed{↓}$ $\boxed{2}$ $\boxed{7}$)”产生程错。在输入1lbf/in²→kPa后,按$\boxed{=}$ $\boxed{↑}$,在历史记录里会存下如下信息(为什么23被吞了?下文会提到):
31 FE 00 00
FE00没有字符模型,因此历史记录里只能看到一个“1”。按$\boxed{←}$,光标移到第一个00左边:
31 FE| 00 00
此时光标卡在FE00中间了,由于FE00是不可见的,因此这时光标似乎在“1”上。不要管光标的诡异位置,在原地输入$\boxed{1}$,输入区变成:
31 FE 31| 00 00
此时显示的是$\boxed{1 l.y.→m_{FE31}}$(显而易见,l.y.→m是一个把光年转换成米的单位转换,但在991上被废弃了,使用这个换算要么产生数学错误,要么出现奇怪的结果),这样一来,我们就打出了字符FE31。

那么,有什么方法能打出单字节字符呢?(如在实数计算模式下打出$i$)这里就要再次借助双字节字符:
回到上一步,输入字符$\boxed{Pa→kgf/in²}$(FE20),输入区变为:
31 FE FE 20| 00 00
这时计算器会认为FEFE为一个字符,20为一个字符,输出$\boxed{1_{31}Unknow_{FEFE}i_{20}}$,这样就产生了一个$i_{20}$。
按$\boxed{←}$,光标卡在FEFE中间,此时由于光标的读取规则,屏幕上的光标不会移动。
31 FE| FE 20 00 00
再按一次按$\boxed{←}$,光标移动到FEFE上:
31| FE FE 20 00 00
按$\boxed{→}$,光标移动到i上:
31 FE FE| 20 00 00
这样我们就能删去字符FEFE了。如果在FEFE与20之间插入$\boxed{Ran}_{FD18}$,按$\boxed{←}$:
31 FE FE| FD 18 20 00 00
此时输入一个$\boxed{1}$:
31 FE FE 31| FD 18 20 00 00
显然,此时计算器会读出字符FE31,按$\boxed{DEL}$删去FE31:
31 FE| FD 18 20 00 00
此时显示$\boxed{1_{31} 叽里咕噜的一堆乱码_{FEFD} @_{18}}$,光标没有移动是因为卡在了FEFD中间。
快速进行以下几部操作:
光标移到18上:
31 FE FD| 18 20 00 00
输入任意双字节字符(以$\boxed{Ran}_{FD18}$为例)
31 FE FD FD 18| 18 20 00 00
删除18与FD18:
31 FE| FD 20 00 00
输入$\boxed{1}$:
31 FE 31| FD 20 00 00
此时显示$\boxed{1_{31} l.y.→m_{FE31} an_{FD20}}$,删掉前面两个字符就得到了an。这个字符在后面会有很大的用处。
1条评论
用户头像
Fe4[Fe(CN)6]3
16小时前

下标的十六进制数为该字符的编码,不是字符显示的一部分

用户头像
Fe4[Fe(CN)6]3
16小时前
说完字符转换器,我们聊聊第二种产生特殊字符的方法----基本溢出。

基本溢出是利用字符00导致的阅读错误产生溢出,字符溢出的触发方法如下:
1、使用字符转换器,在31 FE 00 00中从最左边连按两次$\boxed{→}$,光标卡在两个00之间,导致溢出;
2、使用字符“框”(19),在框左边按两次$\boxed{→}$会跳过两个字符,因此只要框在字符串末尾就能产生溢出。如何刷出框呢?聪明的你已经想到了,就是使用字符转换器里的FE19/FB19。
3、线性模式下的sigma求和溢出(也是拼字中使用的)
4、方程赋值法(将A赋值为$1 \times 10^{99}$,再输入x=AAin→cm,对x求解)

这里介绍一下插入字符的逻辑。假设字符串从最左侧到第一个00的长度为L(不含00),以第一个字符坐标为0,光标坐标为P,设要插入的字符串长度为N,那么会进行如下操作:
1、将第L+N个字符设为00(标记更新后的字符串的边界);
2、将[P,L)位置的所有字符移动到[P+N,L+N),空出中间的N位;
3、插入N位字符,光标移到P+N
正常情况下00只会出现在字符串末尾,因此这个方法可以良好地完成插入操作。以插入字符32为例:
31| 33 34 00 XX XX(原字符串)
31| 33 34 00 00 XX(第1步)
31| 00 33 34 00 XX(第2步)
31 32| 33 34 00 XX(第3步)
然而,当00出现在字符串中间时,就会出现一些奇怪的错误,以插入33为例:
31 00 32| 34 35 00(原字符串,L=1,P=3,N=1)
31 00 00| 34 35 00(第1、2步,由于P>L,无法移动字符串)
31 00 00 33| 35 00(第3步)
由此,我们产生了一个额外的00,同时用33替代了34。

说到这里,到底“框”有什么用?下一期我们就用框演示an的另一种刷法。