aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 6c1ca6cf47a13156a30e0aa20c98b890fd52e981 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# kindle-doom -- a port of PrBoom for the Kindle 4 [issues](/kindle-doom/tree/.issues/) - [releases](/releases/kindle-doom/)

## Description

This repository contains the source code for a port of the [PrBoom](http://prboom.sourceforge.net/) project to the Kindle 4. It is **not** intended as anything more than a proof-of-concept: the Kindle's e-ink display is absolutely not adapted to gaming.

## Installing & playing

Prerequisites: copy your `doom.wad` and `prboom.wad` to the root of your Kindle USB partition. `prboom.wad` can be found [here](data/prboom.wad).

1. Download the latest release
2. Make sure you installed [KUAL](https://www.mobileread.com/forums/showthread.php?t=203326) on your Kindle.
3. Extract the release to the root of your Kindle USB partition
4. Run KUAL and run "Simon's Fun Land -> PrBoom"

The controls are as follows:

- Keypad to move
- "OK" button to shoot
- "Menu" to open doors / activate switches
- "Back" to toggle the menu (mapped to Escape)
- "Keyboard" to select an entry in the menu (mapped to Enter)
- "Home" button to quit

## Compilation

If you want to build the project for yourself, you will need an `armv7` GCC toolchain. I successfully used Bootlin's [`armv7-eabihf`](https://toolchains.bootlin.com/releases_armv7-eabihf.html) "musl" toolchain. Compiling with the glibc toolchain also works, but the `libc` on the Kindle is too old and it will refuse to start.

Export `CC` to the location of the GCC cross-compiler and run `make`.

```shell
$ export CC=/home/simon/armv7-eabihf--musl--stable-2020.08-1/bin/arm-linux-gcc
$ make -j8
```

## Changes

Based on [`prboom-2.5.0`](https://sourceforge.net/projects/prboom/files/prboom%20stable/2.5.0/).

The main change is the addition of `src/KINDLE/`, which defines most Kindle-specific functions. I basically copied `src/SDL/` and modified everything to remove dependencies on SDL and instead work directly on the Kindle's framebuffer.

Resolution is hardcoded to 800x600 widescreen and cannot be changed.

I removed all the autoconf stuff and wrote a Makefile by hand.

## Known bugs

- Demo playback doesn't seem to work correctly. I think this is due to tick calculation, but I'm not sure.
- Because of this, it is not really possible to load the game directly, you have to "warp" to the beginning of the first level.

## Limitations

- The code is horrible, I only tried to hack together something that works.
- There's no sound support, because my Kindle doesn't have speakers / aux output.
- The game is basically unplayable because of the e-ink refresh mode, but it's still a nifty demo nevertheless.