Created
April 24, 2024 07:17
-
-
Save bczhc/405a4c70b596449b2e7cb11218f4c5e3 to your computer and use it in GitHub Desktop.
Casio 991 CN X study
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
110an: | |
5行+14 | |
124an: | |
7行+5 | |
栈的存取是两字节对齐的,an的偏移只能为偶数。栈顶也要为奇数!!! | |
F. xx xx xx xx xx yy xx x10 xx (后8个字符) | |
@= 1.0000 xx xx xx yy xx x10 xx (前6个字符) | |
*注意:标注yy的地方,不能含16进制的字母,并且,14个字符必须打满! | |
利用这两个公式,可以刷出 6+8=14个特殊字符 | |
构造 | |
x in>cm: | |
x: | |
x in>cm: | |
@ = ...... | |
CALC,四下[=],第一条历史记录 | |
110an | |
31313131313131313131313131313131 | |
31313131313131313131313131313131 | |
31313131313131313131313131313131 | |
31313131313131313131313131313131 | |
31313131313131313131313131313131 | |
31313131313131313131313131313131 | |
A631313131313131313131313131FD20 | |
2:20FE拼字 | |
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
2020202020202020202020202020202020 | |
FE203230 | |
48656c6c6f202020202020202020202020 | |
2020202020202020202020202020202020 | |
FE203230 | |
二、三行拼字(17+17字符) | |
ROP: | |
smart_strcpy | |
2:21A8 | |
2:21AE | |
2:21A8 | |
2:205C | |
(freeze) | |
A82121FE | |
1030 | |
AE212230 | |
A82121FE | |
20FD | |
5C202248 | |
op: [x]ee[S]8340 | |
[S][÷]e20 | |
[×]ee[s]8[Down]28 | |
[S]73xi2x | |
完整示例: | |
; 二、三行拼字示例:(~和剪刀符号各一行) | |
; mode: 110an | |
; 在经过smart_strcpy后,ER0会变为输入区(0xd180) | |
7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E ;17个“~” | |
E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 ;17个剪刀 | |
A82121FE ; (2:21A8) POP ER0 + Return,将会:0x3010 -> ER0即0x10 -> R0 让R0为0x10 | |
1030 | |
AE212230 ; (2:21AE) 偏移16(0x10)像素(第二行)打印ER2,此时ER2会后移17字节 | |
A82121FE ; (2:21A8) POP ER0 + Return,会让R0为0x20 | |
20FD | |
5C202248 ; (2:205C) 偏移32(0x20)像素(第三行)打印ER2 | |
; 2:205C打印完成后,会冻结计算器 | |
; “变态!” | |
操作: | |
大字体,线性/线性,复数模式 | |
进110an | |
用字符转换器刷十六进制字符,写1.0000F17BF17021x10^23,赋值给A | |
刷@(4D),写: | |
@=A:x | |
calc,两下[=] | |
上 | |
此时屏幕上能看见的只有一个“e” | |
在最前边打7个i,最后边打7个i和15个任意单字节字符 | |
最后边紧跟着: | |
[×]ee[s]844 | |
[S]73xi2x | |
[Calc][=] | |
; mode: 110an | |
20202020202020 F17BF17021 20202020202020 | |
313131313131313131313131313131 | |
A82121FE ; (2:21A8) | |
18FD | |
5C202248 ; (2:205C) 打印 | |
; 2:205C打印完成后,会冻结计算器 | |
刷r | |
进入字符转换器 | |
[S]8下12 | |
左左右 | |
打Ran# | |
左 单 删 | |
左右 | |
双 右 删删 | |
右左 单 删删 | |
在变量C的小数部分以二级字符表打印(手动指定ER2的值来打印) | |
比如C被赋值为1.mmmmmm,就打印出mmmmmm | |
008FC2 1E F2 POP ER2 | |
008FC4 8E F2 POP PC | |
先令1.F17BF17021 -> C | |
ROP: | |
; mode: 110an,线性/线性,复数 | |
3131313131313131313131313131313131 | |
3131313131313131313131313131313131 | |
C28F2020 | |
43D3 | |
; ER2=D343h | |
A82121FE ; (2:21A8) | |
18FD | |
5C202248 ; (2:205C) 打印 | |
op: | |
需要用4D刷出的:C28FD3 | |
垫34数字,打:<C2><8F>ii | |
(var b)<D3> | |
[×]ee[s]844 | |
[S]73xi2x | |
二三行拼字 Hello there! | |
48656C6C6F 202020202020202020202020 | |
2020202020202020202020 746865726521 | |
A82121FE ; (2:21A8) | |
10FD | |
AE212230 ; (2:21AE) | |
A82121FE ; (2:21A8) | |
20FD | |
5C202248 ; (2:205C) 卡死打印 | |
第二行 | |
################# | |
################# | |
A82121FE ; (2:21A8) | |
10FD | |
5C202248 ; (2:205C) 卡死打印 | |
BE213230 | |
; mode: 124an | |
7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E ;17个“~” | |
E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 ;17个剪刀 | |
7E7E7E7E7E7E7E7E7E7E7E7E7E7E ;14个“~” | |
A82121FE ; (2:21A8) POP ER0 + Return | |
0130 | |
AE212230 ; (2:21AE) 打印 | |
A82121FE ; (2:21A8) POP ER0 + Return,将会:0x3010 -> ER0即0x10 -> R0 让R0为0x10 | |
1030 | |
AE212230 ; (2:21AE) 打印 | |
A82121FE ; (2:21A8) POP ER0 + Return,会让R0为0x20 | |
20FD | |
5C202248 ; (2:205C) 偏移32(0x20)像素(第三行)打印ER2 | |
; 2:205C打印完成后,会冻结计算器 | |
显示条纹,然后等待按Shift,按一下Shift打印一个“变态!”,打印满四行卡死 | |
; mode: 110an | |
20202020202020 F17BF17021 20202020202020 | |
313131313131313131313131313131 | |
BE213230 ; (2:21BE) 显示条纹并等待Shift | |
C28F2020 ; 重置ER2值到输入缓冲区,因为“显示条纹”操作会改变ER2值 | |
80D1 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
01FD | |
AE212230 ; (2:21AE) 打印 | |
C4213230 ; 等Shift | |
C28F2020 | |
80D1 | |
A82121FE ; (2:21A8) | |
10FD | |
AE212230 ; (2:21AE) 打印 | |
C4213230 ; 等Shift | |
C28F2020 | |
80D1 | |
A82121FE ; (2:21A8) | |
20FD | |
AE212230 ; (2:21AE) 打印 | |
C4213230 ; 等Shift | |
C28F2020 | |
80D1 | |
A82121FE ; (2:21A8) | |
30FD | |
5C202248 ; (2:205C) 打印 | |
; 2:205C打印完成后,会冻结计算器 | |
三行拼字 | |
; mode: 128an | |
3131313131313131313131313131313131 | |
3232323232323232323232323232323232 | |
3333333333333333333333333333333333 | |
31 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
01FD | |
AE212230 ; (2:21AE) 打印 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
10FD | |
AE212230 ; (2:21AE) 打印 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
20FD | |
5C202248 ; (2:205C) 打印 | |
; 2:205C打印完成后,会冻结计算器 | |
同理,四行拼字 | |
; mode: 144an | |
3131313131313131313131313131313131 | |
3232323232323232323232323232323232 | |
3333333333333333333333333333333333 | |
3434343434343434343434343434343434 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
01FD | |
AE212230 ; (2:21AE) 打印 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
10FD | |
AE212230 ; (2:21AE) 打印 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
20FD | |
AE212230 ; (2:21AE) 打印 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
30FD | |
5C202248 ; (2:205C) 打印 | |
; 2:205C打印完成后,会冻结计算器 | |
显示条纹,然后按Shift在中间显示“变态” | |
真机操作已成功 | |
; mode: 124an | |
20202020202020 F17BF17021 20202020202020 ; 19 | |
3131313131313131313131313131313131313131313131313131313131 ; 29 | |
BE213230 ; (2:21BE) 显示条纹并等待Shift | |
0E883130 ; (1:880E) 重置ER2值到输入缓冲区,因为“显示条纹”操作会改变ER2值 | |
80D1 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
18FD | |
5C203248 ; (2:205C) 打印 | |
; 2:205C打印完成后,会冻结计算器 | |
要刷的字符F1 7B F1 70 BE 0E 88 80 D1 | |
F.BE0E8880D12121 [x10^] 21->x | |
@=1.0000F17BF17021 [x10^] 21 | |
显示条纹,按下Shift显示一行字,再按Shift显示另外一行字,再按Shift以条纹重填充屏幕并显示最后一行字。然后过一小会自动关机。 | |
(最后一步不能按CALC,直接按[=]就好了。) | |
可惜要刷的字符太多了,在真机中没法运行。 | |
ROP: | |
; mode: 128an,线性/线性,复数 | |
45 69 6E 20 4C 61 6D 61 202020202020202020 ; 17 | |
20 69 6E 20 59 6F 6B 6F 68 61 6D 61 2020202020 ; 17 | |
54 68 61 6E 6B 20 79 6F 75 21 20202020202020 ; 17 | |
31 ; 1 | |
BE213230 ; (2:21BE) 显示条纹并等待Shift (经调试R1为0xd5) | |
0E883130 ; (1:880E) 重置ER2值到输入缓冲区,因为“显示条纹”操作会改变ER2值 | |
80D1 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
10FD | |
AE213230 ; (2:21AE) 打印 | |
C4213230 ; 等待Shift按下 | |
0E883130 ; (1:880E) 重置ER2值到输入缓冲区,因为“显示条纹”操作会改变ER2值 | |
91D1 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
28FD | |
AE213230 ; (2:21AE) 打印 | |
C4213230 ; 等待Shift按下 | |
F4863030 ; (0:86F4) POP ER0, POP PC | |
29D5 ; 设置R1为D5,这是显示条纹的样式。R0为29,是调试得来的。因为ROM中没找到`POP R1, POP PC`的地方 | |
AE7E3030 ; (0:7EAE) 显示条纹并返回 | |
0E883130 ; (1:880E) 重置ER2值到输入缓冲区,因为“显示条纹”操作会改变ER2值 | |
A2D1 | |
A82121FE ; (2:21A8) 设置打印开始像素 | |
18FD | |
5C203248 ; (2:205C) 打印并冻结 | |
; Q佬知乎示例 | |
; mode: 124an | |
;;.label1: | |
6c 6f 76 65 20 79 6f 75 ; "love you" | |
20 20 20 20 20 20 20 20 | |
e2 30 31 30 ; initial SP; ER2 <- d180h (input area) | |
20 20 80 d1 30 30 30 30 | |
ae 21 32 30 ; printline | |
c4 21 32 30 ; waitkey | |
e2 30 31 30 ; ER2 <- .label2 (d574h) | |
20 20 74 d5 30 30 30 30 | |
;;;;;;;;;;;;;;;;;;;;;;;;;; initial sp | |
ae 21 32 30 ; printline | |
c4 21 32 30 ; waitkey | |
e2 30 31 30 ; ER2 <- d180h, ER0 <- d522h | |
22 d5 80 d1 30 30 30 30 | |
c8 03 32 30 ; smart_strcpy | |
72 0d 32 30 ; pop er14 | |
22 d5 ; .label1?? | |
7a 23 32 30 ; mov sp, er14; pop qr8; pop qr0 | |
;;.label2: | |
46 6f 72 20 65 76 65 72 ; "Forever" | |
;;00 00 00 ... ; "input range" unfilled | |
; "hello" "world"按Shift循环打印 | |
; 结束后直接按等于,按CALC貌似大概率会卡死 | |
; mode 110an | |
68 65 6C 6C 6F 20 20 20 20 20 20 20 20 20 20 20 20 ; "hello" | |
77 6F 72 6C 64 20 20 20 20 20 20 20 20 20 20 20 20 ; "world" | |
e2 30 31 30 ; er2 <- d180h, er0 <- 3020h | |
203080d1 30303030 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 30 ; er2 <- d191h, er0 <- 3020h | |
203091d1 30303030 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 30 ; er2 <- d180h, er0 <- d522h | |
22d580d1 30303030 | |
c8 03 32 30 ; smart_strcpy | |
72 0d 32 30 ; pop er14 | |
34d5 | |
7a 23 32 48 ; mov sp, er14; pop qr8; pop qr0 | |
; "hello" "world"按Shift循环打印 | |
; 最开始显示条纹 | |
; 结束后直接按等于,按CALC貌似大概率会卡死 | |
; mode 110an | |
68 65 6C 6C 6F 20 20 20 20 20 20 20 20 20 20 20 20 ; "hello" | |
77 6F 72 6C 64 20 20 20 20 20 20 20 20 20 20 20 20 ; "world" | |
BE213230 ; (2:21BE) 显示条纹并等待Shift | |
e2 30 31 30 ; er2 <- d180h, er0 <- 3020h | |
203080d1 30303030 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 30 ; er2 <- d191h, er0 <- 3020h | |
203091d1 30303030 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 30 ; er2 <- d180h, er0 <- d522h | |
22d580d1 30303030 | |
c8 03 32 30 ; smart_strcpy | |
72 0d 32 30 ; pop er14 | |
38d5 | |
7a 23 32 48 ; mov sp, er14; pop qr8; pop qr0 | |
; "hello" "world"按Shift循环打印 | |
; 最开始显示条纹 | |
; mode 124an | |
; 124an版本的,依然按CALC卡死 | |
20 20 20 20 20 20 68 65 6C 6C 6F 20 20 20 20 20 20 ; "hello" | |
20 20 20 20 20 20 77 6F 72 6C 64 20 20 20 20 20 20 ; "world" | |
2020202020202020202020202020 ; 14 | |
BE213230 ; (2:21BE) 显示条纹并等待Shift | |
e2 30 31 fd ; er2 <- d180h, er0 <- 3018h | |
183080d1 30303030 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 fd ; er2 <- d191h, er0 <- 3018h | |
183091d1 30303030 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 30 ; er2 <- d180h, er0 <- d522h | |
22d580d1 30303030 | |
c8 03 32 30 ; smart_strcpy | |
72 0d 32 30 ; pop er14 | |
46d5 | |
7a 23 32 48 ; mov sp, er14; pop qr8; pop qr0 | |
; eof | |
"Abs(Neg(sinh(sinh(sinh^-1(isin(sinh^-1(e^(sinh(Not(" | |
<be> e20 k010 [Ran] <80><D1>0000 | |
[nCr]e20 <c4>e20 | |
k010 | |
[Ran]<91><d1>0000 | |
[nCr]e20 <c4>e20 | |
k010 [pi]<d5><80><81>0000 | |
[frac]<03>20 | |
[e^]<0d>20 | |
E<d5> | |
[sin^-1][:]2x | |
be 80 d1 c4 91 | |
d1 c4 d5 80 d1 03 | |
0d d5 | |
"@@ ->t h Identity( ->t h 2 @ ->t @@2" | |
D=1.00006564202020[x10]20 | |
M=1.2020be80d120c4[x10]91 | |
F=1.d1c4d580d10320[x10]20 | |
x=1.202020200d20d5[x10]20 | |
111:M:x:@(4D)=D:@(4F)=F | |
; "hello" "world"按Shift循环打印 | |
; 最开始显示条纹 | |
; mode 110an | |
; 预先复制到e9e0h内存 | |
68 65 6C 6C 6F 20 20 20 20 20 20 20 20 20 20 20 20 ; "hello" | |
77 6F 72 6C 64 20 20 20 20 20 20 20 20 20 20 20 20 ; "world" | |
e2 30 31 30 ; er2 <- d180h+34, er0 <- e9e0h | |
e0e9a2d1 30303030 | |
c8 03 32 30 ; smart_strcpy | |
; jpop .label1 | |
72 0d 32 30 ; pop er14 | |
eae9 | |
7a 23 32 48 ; mov sp, er14; pop qr8; pop qr0 | |
;.label1 | |
BE213230 ; (2:21BE) 显示条纹并等待Shift | |
e2 30 31 30 ; er2 <- d180h, er0 <- 3020h | |
203080d1 30303030 | |
;.label2 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 30 ; er2 <- d191h, er0 <- 3020h | |
203091d1 30303030 | |
AE213230 ; print | |
c4213230 ; wait key | |
e2 30 31 30 ; er2 <- d180h+34, er0 <- e9e0h | |
e0e9a2d1 30303030 | |
c8 03 32 30 ; smart_strcpy | |
72 0d 32 30 ; pop er14 | |
fae9 | |
7a 23 32 48 ; mov sp, er14; pop qr8; pop qr0 | |
422345a5312e30303030333133313331 | |
333133312d33312340a5312e33323332 | |
333233323332333233322d33322347a5 | |
312e3333333333333333333333333333 | |
2d33332348a5312e3334333433343334 | |
3334333433342d3334a6312e33353335 | |
333533353335333533352d333520 | |
31313123606040d0d02348234da545234fa547 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment