The story started back in April 2022: I started an ambitious project called "Emu8-z80", which aims to emulate a CASIO scientific calculator on TI-83+/84+, but I was so naive... I didn't realize how hard it could be, considering I had no idea how to properly emulate an U8 at all, and I was new to Z80 ASM programming (I still am at this point
). After a few months, I realized it is not doable to (past) me, so I moved to writing an emulator in C to learn how emulation works & to make a "reference implementation".
Eventually (I mean 3 years later), I have a working nX-U8/100 emulator, written in C, and is very portable. I was going to call it something like "SimUl8r", but to emphasize that it emulates a U8, I went with "SimU8" (and later I learned OKI(the designer of this CPU) had been calling their emulator "SimU8"... well that's unfortunate, but I will keep it this way.) Recently, I have finally fixed one last bug in DIV instruction, and I think it's ready for its own post, so here we go!
What is it?
SimU8 emulates an RISC ISA from OKI/Lapis, called nX-U8/100. This is the architecture used in recent CASIO scientific calculators (including ES, ES PLUS, EX/CWI and CW/CWII series), and that's the main reason why I wrote it
What can it do?
It's more like a library than a standalone program. SimU8 itself only contains code that emulates the CPU(either U8 or U16, only configurable at compile time) and memory space so it could run something. Everything else is up to you to discover (and implement). On the other hand, it makes SimU8 free from most dependencies so it's very portable, and highly customizable, as you can add whatever peripherals you like, or change the memory mapping, etc.
It doesn't sound immediately useful to me...
Yes sir, yes. With great flexibility comes great cost. But! Here(on GitHub) is a sketched-up frontend for it, that I've been using for testing in the past few months. It's very simple and crude, but it does work! I've also tried porting it to RP2040(RP2 Pico to be accurate), and it works there too!
What does it look like?
Here are some images showing it running on different platforms:
(Freshly-installed WinXP SP3, WSL Debian, Termux, RP2 Pico+off-the-shelf LCD, RP2 Pico+custom PCB+clone LCD)



Source code?
The source code of SimU8 is available on GitHub, and is open-sourced under GPL-3.0 license.
How do I use it?
I'm sorry that I still haven't decided how to design the API, so it's still subject to change. If you want to follow it, you can check README.md in the main repository, there're some notes about porting it to other platforms.
There are lots of compromises in this project:
And, I'd like to thank lots of people for helping & supporting me during the days:
Also, There are other better U8/U16 emulators lying around, so maybe you want to check them out!

Eventually (I mean 3 years later), I have a working nX-U8/100 emulator, written in C, and is very portable. I was going to call it something like "SimUl8r", but to emphasize that it emulates a U8, I went with "SimU8" (and later I learned OKI(the designer of this CPU) had been calling their emulator "SimU8"... well that's unfortunate, but I will keep it this way.) Recently, I have finally fixed one last bug in DIV instruction, and I think it's ready for its own post, so here we go!
What is it?
SimU8 emulates an RISC ISA from OKI/Lapis, called nX-U8/100. This is the architecture used in recent CASIO scientific calculators (including ES, ES PLUS, EX/CWI and CW/CWII series), and that's the main reason why I wrote it

What can it do?
It's more like a library than a standalone program. SimU8 itself only contains code that emulates the CPU(either U8 or U16, only configurable at compile time) and memory space so it could run something. Everything else is up to you to discover (and implement). On the other hand, it makes SimU8 free from most dependencies so it's very portable, and highly customizable, as you can add whatever peripherals you like, or change the memory mapping, etc.
It doesn't sound immediately useful to me...
Yes sir, yes. With great flexibility comes great cost. But! Here(on GitHub) is a sketched-up frontend for it, that I've been using for testing in the past few months. It's very simple and crude, but it does work! I've also tried porting it to RP2040(RP2 Pico to be accurate), and it works there too!
What does it look like?
Here are some images showing it running on different platforms:
(Freshly-installed WinXP SP3, WSL Debian, Termux, RP2 Pico+off-the-shelf LCD, RP2 Pico+custom PCB+clone LCD)





Source code?
The source code of SimU8 is available on GitHub, and is open-sourced under GPL-3.0 license.
How do I use it?
I'm sorry that I still haven't decided how to design the API, so it's still subject to change. If you want to follow it, you can check README.md in the main repository, there're some notes about porting it to other platforms.
There are lots of compromises in this project:
- The lookup table for instructions is only 256-entries long. This is because it was aimed to be ported to memory-restricted systems(like TI-Z80
) where a 64KiB-long LUT is not feasible.
- The code memory space defaults to read-only. It is my fault because I was lazy... But in the case of CASIO scientifics, the code segments are indeed read-only, so it fits my needs. If you're going to emulate an fx-5800P, then yeah you probably have to change the logic...
- Undocumented instructions & coprocessor instructions are not implemented. It's mainly because I don't know how to implement them properly. I do know every `Fg?0 aaaa` acts like `B g:aaaa` but that's as far as I could get...
And, I'd like to thank lots of people for helping & supporting me during the days:
- Zeroko, calc84maniac, Tari, c4ooo and more in Cemetech that answered lots of questions like Braille characters and C standard functions to me;
- Fraserbc, gamingwithevets, totalynce, Hieuxyz (from a Discord server called CCH) for bug reports, feedbacks and testing;
- user202729, Xyzstk, mc_sdx, Natsuki_Min, telecomadm1145 (mainly active on Baidu Tieba) for reverse-engineering & documenting calculator hardware.
Also, There are other better U8/U16 emulators lying around, so maybe you want to check them out!
- u8_emu by FraserBc. It's written in C, UI is implemented with ncursesw. It uses a larger instruction LUT, and a more flexible memory mapping mechanism. It's more efficient than my emulator, too.
- CasioEmuMsvc by telecomadm1145. It's a fork of LBPHacker & user202729's CasioEmu, written in C++, the GUI is Dear ImGui. Currently, it's the most powerful CASIO calculator emulator, and is pretty portable despite the name says "Msvc". Some outstanding features are: Debugger, Memory View, ROP injection, Realistic LCD emulation and runtime model selection.