Skip to content

Instantly share code, notes, and snippets.

@bczhc
Created April 24, 2024 07:17
Show Gist options
  • Save bczhc/405a4c70b596449b2e7cb11218f4c5e3 to your computer and use it in GitHub Desktop.
Save bczhc/405a4c70b596449b2e7cb11218f4c5e3 to your computer and use it in GitHub Desktop.
Casio 991 CN X study
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