A new operating system for an old Casio PDA
Glaze is a microkernel OS written from scratch for the Casio Cassiopeia BE-300, with a touch interface in the style of the first iPhone. It boots from the device's own flash through the stock boot ROM.
The browser version is the BE-300 emulator on linux4be.com. Choose Glaze under System image, then press Boot.
On the screen
Every picture here is a screenshot of Glaze running in the BE-300 emulator, shown pixel for pixel at the device's 240 by 320.

NotesSaved as you type, on the device's flash. 
PhotosA camera roll with cached thumbnails. 
MusicMP3 and WAV, decoded on the device. 
BrowserIts own HTML and CSS engine, with HTTPS. 
CalendarMonth view with reminders. 
App StoreFree apps that install over the network. 
MinesweeperFrom the App Store. Hold a square to flag it. 
SolitaireFrom the App Store. Drag cards or tap to move them. 
ClockWorld clock, stopwatch and timer.
What's inside
- Kernel
- A small microkernel with synchronous message passing, shared memory, threads and paged virtual memory.
- Apps
- Share their libraries through a dynamic linker. More install as packages from the App Store, onto flash or a memory card.
- Storage
- littlefs on a NAND flash translation layer with error correction and bad-block handling. CompactFlash cards appear as /Card.
- Network
- lwIP over an NE2000 PCMCIA Ethernet card: DHCP, DNS, TCP and UDP. The clock sets itself by NTP.
- Web
- A browser engine of its own, with HTTPS through wolfSSL.
- Sound
- MP3 and WAV playback and system sounds through the device's audio DMA.
The hardware
- Device
- Casio Cassiopeia BE-300
- Processor
- NEC VR4131 (MIPS)
- Screen
- 240 by 320, 16-bit colour, touch
- Memory
- 16 MB
- Flash
- 16 MB NAND
Build it yourself
Glaze runs in the be300 emulator, which also provides the MIPS cross-compiler as a Docker image.
Build the emulator and the cross-compiler image.
git clone https://github.com/jroark/be300 cd be300 cmake -S . -B build-host && cmake --build build-host docker compose build mips-devBuild Glaze. The result is a 16 MB NAND image,
out/glaze.bin.git clone https://github.com/jroark/glaze-os cd glaze-os ./build.shBoot it, with the emulated Ethernet card for networking.
../be300/build-host/be300 --nand out/glaze.bin --rtc-host-time --ne2000