DOOMarkable
This is a doom port intended for the reMarkable 1.
Demo Video on rM 1 | Demo Video on rM 2 (not recommended)
What's mainly used and how it's done
It is composed out of a lot of different compontents:
- doomgeneric-rs - Rust bindings for doomgeneric
- doomgeneric - An awesome and easy to use doom port made by @ozkl
- libremarkable - Drawing to the display and reading inputs
- blue-noise - An amazing dithering algorithm to fake grayscale output
The meat of the work was to port doom to rust (doomgeneric-rs) and dithering the image and doing that as fast as possible! The dither speed was achived through forcing better optimizations and caching the code. The dithering is actually done at compile time for a 320x200 source image and the results (for upscaling 4x) are put into the generated binary itself. The binary then just needs to decompress this and look up the results for each pixel.
Current state
The game currently runs at about 11-14 FPS on the device. It's not using the low latency drawing even though it's pretty simple to use since the image has no gray shades. The reason is that using an A2-Like refresh has less artifacts and ghosting. I personally find this worth the extra latency when playing.
The game currently runs fine but there are still some things to do:
- Making it easy to get the game resources (semi done)
- Properly exit the game without requiring killing the process
- Adjusting gamma to make dithered visuals clearer for certain rooms
- Add an battery indicator (this sucks a lot of juice ..ahem.. blood)
- Package it up for toltec and inclusion in launchers
- Consider a smaller size for the rM 2, so the eink software driver doesn't die trying to update that many dots
How to run
- Download the latest binary from the release page (the file without any extension)
- Copy the file to e.g.
/home/root
on your reMarkable (e.g. using FileZilla or WinSCP) - Find an appropriate IWAD file (game resources) and put it in the same directory (more details)
- Log into the device using ssh (e.g. with Putty) and go into your chosen directory
- Make the binary executable by running
chmod +x doomarkable
- Ensure no other UI is running (e.g. stop the default UI with
systemctl stop xochitl
and start it later using start instead of stop) - Run the binary:
./doomarkable
(on the rM 2, you'll need rm2fb and prefix that command withrm2fb-client
) - DOOM should now run on your device. If the game doesn't come up, view the output for any errors or enable debugging by adding
RUST_LOG=debug
before the command