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.

The Glaze home screen: Calendar, Photos, Clock, Calculator, Files, Browser, Music, Videos and App Store, with Notes and Settings in the dock. The Glaze lock screen with the time, the date and a slide to unlock control.

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.

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.

  1. 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-dev
  2. Build Glaze. The result is a 16 MB NAND image, out/glaze.bin.

    git clone https://github.com/jroark/glaze-os
    cd glaze-os
    ./build.sh
  3. Boot it, with the emulated Ethernet card for networking.

    ../be300/build-host/be300 --nand out/glaze.bin --rtc-host-time --ne2000