[Book]The Little Prince

This seems like it might be a nice fit. I did spend a little time trying to get the image onto my Pokitto to have a look, but it seems I lack the correct environment to do such a thing quickly.

supertinyfont

2 Likes

Started working on it, but I won’t be doing the nice font rendering, because I will be aiming for simplicity and portability. I’d still love to see someone create this Pokitto specific reader with beautiful font rendering – I’d suggest it be done the @Pharap way, i.e. reading from SD, so that we have one lightweight/ugly reader and one bloated/beautiful one.

About storing books in flash vs SD: On the Pokitto we have the Loader and it can open the book directly if it’s in an acceptable format (ie, embedded in a bin). It’d be no problem at all to have a “books” folder with 50 bins in it.

From this point of view, loading a text reader then navigating to the text can be seen as merely a longer, redundant, process. It might actually be a good idea if the reader application is a polished and general-purpose project.

Here, however, I just wanted to see if reading large amounts of text on the Pokitto’s screen is viable. Clearly, the font rendering needs to be improved for it to be comfortable. Someone did actually read the book, so the experiment is a success, none-the-less.

The larger project I’m considering, once the font rendering issue is resolved, is going to be a reader for one book, with its own format (not plain text).

4 Likes

The engine kinda works now, so far for Pokitto, SDL and terminal (no bookmark saving yet):

image

There is a super simple 4x4 font for platforms that don’t have their own font rendering, but on Pokitto I use Pokitto font – once someone implements a nice font rendering, it can very easily be used here. This is the whole Pokitto front end. Compression is about 50%.

1 Like

Added a build to the first post with anti-aliased text, no sub-pixel rendering.
Edit: Flatland-AAFont.bin (152.3 KB)

2 Likes

image

Looks very good! Comfy reading. How did you do it? Is it hinted font rendering or just general multisampling? The ASCII art image approximations get messed up with non-fixed-width font, but I think it could be solved by simply replacing ASCII images with descriptions.

2 Likes

First:

ftview -m " | \! | \" | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \\ | ] | ^ | _ | \` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~" 10 Aileron-Regular.otf

Then I enabled sub-pixel rendering, took a screenshot, chopped it up using the pipes for reference and wrote a script that converts it into…

... a 16-color grayscale c header...

static const char * const font[] = {
"\x03\xff\xbf\xe8\x9b\xbe\xf9\x9b\xcf\xfa\xde\xbf\xe8\xfe\xff\xff",
"\x04\x8c\xd7\x9d\xd8\xce\xec\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\xff\xca\xfb\xef\xba\xfc\x9e\x76\xe9\xcf\xab\xfe\x7d\x77\xeb\xaf\xbc\xff\xae\xdb\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xdc\xff\x9e\x65\xeb\x8c\xcb\xe8\x6d\xd9\xff\xcf\x66\xfc\xff\xab\xd6\xaa\xcb\xd7\x8e\x65\xea\xff\xdc\xff",
"\x08\xff\xff\xff\xff\xff\xff\xff\xff\x7c\xe8\x8e\xfd\xc9\xc9\xb9\xff\x7c\xb7\xe9\xff\xff\x8e\xfd\xff\xff\xaa\x79\xea\xdf\xd8\xd8\xe8\x8e\xec\x79\xea\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\xbf\x77\xfb\xdf\xe7\xff\xff\x7d\xed\xc8\xef\x4a\x46\xd7\x8c\xfe\xc8\xaf\xe8\x8f\xfc\x8e\x76\xd6\xff\xff\xff\xff",
"\x02\xc8\xc9\xec\xff\xff\xff\xff\xff\xff\xff",
"\x03\xef\xfc\xcb\xae\xde\xea\xad\xdf\xea\xae\xfe\xda\xdf\xfb\xff",
"\x03\xec\xcf\xfb\xae\xee\xe9\xaf\xfd\xea\x9e\xde\xfa\xdb\xff\xff",
"\x05\xff\xff\xff\xff\xff\xff\xff\xff\xbf\xfe\xad\xaa\xfb\x7d\xeb\xbf\xad\xfe\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\xff\xec\xff\xff\xdb\xff\xad\x87\xea\xff\xdb\xff\xff\xdb\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x03\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xef\xd8\x8d\xee\xfe",
"\x03\xff\xff\xff\xff\xff\xff\xff\xbf\xd9\xff\xff\xff\xff\xff\xff",
"\x02\xff\xff\xff\xff\xff\xff\xee\xa9\xff\xff",
"\x05\xff\xff\xff\xef\xe9\xff\xad\xff\xbf\xfd\xef\xe9\xff\xad\xff\xbf\xfd\xef\xe9\xff\xde\xff\xff\xff\xff",
"\x06\xff\xff\xff\xae\x77\xfc\x8b\xde\xe7\xb9\xef\xc7\xb8\xff\xc8\xb9\xef\xc7\x8b\xde\xe7\xae\x77\xfc\xff\xff\xff\xff\xff\xff",
"\x05\xff\xff\xff\x8e\xd5\x8e\x7b\xfd\xef\xd8\xff\x8e\xfd\xef\xd8\xff\x8e\xfd\xef\xd8\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xbf\x67\xea\x8d\xee\xd7\xde\xef\xd7\xff\x9e\xea\xef\x9a\xfe\xae\xe9\xff\x4b\x87\xd8\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xae\x67\xea\x8c\xee\xd7\xff\xce\xe8\xff\x5b\xea\xee\xef\xc6\xaa\xef\xd7\x8e\x76\xeb\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\x7e\xf9\xff\x6a\xf9\xcf\xb9\xf9\x8e\xbd\xf9\x58\x68\xc5\xff\xbf\xf9\xff\xbf\xf9\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x6d\x87\xe8\x9d\xfe\xff\x8c\x99\xfd\x7b\xcd\xd6\xee\xff\xc7\x9b\xee\xd7\x8e\x76\xeb\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xbf\x68\xeb\x8d\xee\xd8\x99\x99\xfd\x78\xcd\xe6\xa9\xef\xc7\x9b\xee\xd7\x9e\x77\xfc\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x8b\x78\xc4\xff\xcf\xe8\xff\x8e\xfc\xff\x8c\xfe\xef\xc8\xff\xcf\xe9\xff\x8e\xfd\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x9e\x66\xeb\x8c\xee\xd7\x8d\xcd\xe7\x8e\x66\xea\xa9\xef\xd7\xa9\xef\xc7\x7e\x66\xea\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x9e\x77\xfb\x9a\xee\xd7\xa9\xef\xc6\x7b\xcd\xc4\xbe\xa8\xd7\xab\xde\xe8\x8e\x87\xfd\xff\xff\xff\xff\xff\xff",
"\x02\xff\xff\xa9\xee\xff\xff\xee\xa9\xff\xff",
"\x03\xff\xff\xff\x9f\xfa\xee\xff\xff\xff\xff\xef\xc8\x8d\xee\xfd",
"\x06\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xcf\xe9\xcf\xb9\xfe\x7d\xfc\xff\xef\x9a\xfc\xff\xef\xeb\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\xff\xff\xff\xad\x99\xea\xff\xff\xff\xad\x99\xea\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x05\xff\xff\xff\xff\xff\xff\xff\xcf\xea\xff\xdf\xa9\xfe\xef\x9a\xbe\xc9\xde\xec\xff\xff\xff\xff\xff\xff",
"\x05\xff\xff\xdf\x78\xd7\xb9\xaf\xe9\xff\xa9\xff\x8c\xfe\x8e\xfd\xef\xed\xff\x7d\xfe\xff\xff\xff\xff\xff",
"\x09\xff\xff\xff\xff\xff\xef\xab\xeb\xff\xdf\xc9\xce\xd8\xef\xe9\x9b\xcb\xea\xcb\xa9\x6d\x9d\xae\x7c\xcd\xd8\xea\xcb\x7a\x79\xd9\xdf\xe9\xff\xde\xff\xbf\xd9\x8c\xfc\xff\xdf\xaa\xfd\xff",
"\x07\xff\xff\xff\xff\xaf\xd5\xff\xef\x88\xfb\xff\x8c\x8c\xfe\x9f\xeb\xd7\xef\x76\x58\xfb\x8c\xfe\x8c\x9e\xfb\xef\xd7\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xdf\x75\x87\xfd\x8d\xfe\x9a\xdf\xe8\x9e\xfb\x5d\x67\xd7\xdf\xe8\xcf\xe8\x8d\xfe\x8c\xde\x75\x77\xfd\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\x8d\x78\xeb\x7d\xfd\x8e\xac\xf9\xff\xdd\xb9\xff\xff\xaf\xf9\xff\xdd\x6d\xfd\x7e\xfd\x7c\x78\xeb\xff\xff\xff\xff\xff\xff\xff",
"\x08\xff\xff\xff\xff\x5d\x77\xc7\xff\x8d\xfe\x6d\xfd\x8d\xfe\xaf\xf9\x8d\xfe\xbf\xe9\x8d\xfe\xaf\xf9\x8d\xfe\x7d\xfd\x5d\x77\xc7\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x5d\x87\xc8\x8d\xfe\xff\x8d\xfe\xff\x5d\x87\xd8\x8d\xfe\xff\x8d\xfe\xff\x5d\x87\xb8\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x5d\x87\xc8\x8d\xfe\xff\x8d\xfe\xff\x5d\x87\xe8\x8d\xfe\xff\x8d\xfe\xff\x8d\xfe\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\x7c\x78\xea\x7d\xfd\x8e\xac\xfa\xff\xee\xb9\xdf\x88\xac\xe9\xff\xb9\x7d\xfd\x5d\xfb\x7c\x88\xb9\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xdf\xe8\xff\xaa\x8d\xfe\xaf\xda\xe8\xff\xaa\x5d\x77\x57\xda\xe8\xff\xaa\x8d\xfe\xaf\xda\xe8\xff\xaa\xff\xff\xff\xff\xff\xff\xff",
"\x03\xff\xdf\xe8\x8d\xde\xe8\x8d\xde\xe8\x8d\xde\xe8\xff\xff\xff",
"\x06\xff\xff\xff\xff\xdf\xe8\xff\xdf\xe8\xff\xdf\xe8\xff\xdf\xe8\xdc\xdf\xe8\xaa\xcf\xe8\x8e\x76\xfd\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xdf\xe8\xbf\xe8\x8d\xce\xe8\xdf\xc8\xd8\xff\x6d\xc4\xff\xdf\xb6\xd7\xff\x8d\xbe\xe7\xdf\xe8\x9e\xe9\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x8d\xfe\xff\x8d\xfe\xff\x8d\xfe\xff\x8d\xfe\xff\x8d\xfe\xff\x8d\xfe\xff\x5d\x87\xb8\xff\xff\xff\xff\xff\xff",
"\x09\xff\xff\xff\xff\xdf\x93\xff\x6e\xe5\x6d\xe7\xdf\x77\xde\x88\xfd\x9b\xe8\x8d\xaa\x8e\x8c\xde\xd8\xd8\xd9\xe8\x8d\x9e\xb9\x8d\xde\xe8\x5b\xdd\xe8\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xdf\x93\xfe\xb9\x7d\xd7\x9f\xdb\xa8\xe9\xb9\x8d\x7e\x9d\xdb\xe8\x9b\xb9\x8d\xee\x78\xdb\xe8\xcf\xb2\xff\xff\xff\xff\xff\xff\xff",
"\x08\xff\xff\xff\xff\xcf\x87\xb7\xfe\x7d\xfd\x8e\xfb\x9a\xff\xcf\xe7\xb9\xff\xdf\xe6\x9a\xff\xcf\xe7\x7d\xfd\x8e\xfb\xcf\x87\xb8\xfe\xff\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xdf\x65\x77\xfd\x8d\xfe\x9b\xde\xe8\xbf\xe9\x5d\x77\xd7\xdf\xe8\xff\xff\x8d\xfe\xff\xdf\xe8\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x08\xff\xff\xff\xff\xcf\x87\xb7\xfe\x7d\xfd\x8e\xfb\x9a\xff\xcf\xe7\xb9\xff\xdf\xe7\x9a\xff\xcf\xe8\x7d\xfd\x9e\xfb\xcf\x87\x45\xeb\xff\xff\xef\xec\xff\xff\xff\xff",
"\x07\xff\xff\xff\xdf\x75\x77\xfc\x8d\xfe\x8c\xde\xe8\xcf\xe8\x5d\x77\xd7\xdf\xe8\x8e\xfc\x8d\xfe\xab\xdf\xe8\xcf\xe8\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xae\x67\xea\x8d\xee\xc8\x6d\xec\xff\xcf\x68\xeb\xff\xef\xb7\x9a\xfe\xb9\x9e\x76\xe9\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xaf\x68\x75\xe8\xff\x9c\xff\xff\xcf\xf9\xff\xff\x9c\xff\xff\xcf\xf9\xff\xff\x9c\xff\xff\xcf\xf9\xff\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xdf\xe8\xef\xd8\x8d\xfe\x8e\xdd\xe8\xef\xd8\x8d\xfe\x8e\xdd\xe8\xef\xd8\x7d\xfd\x7d\xfe\x7c\x78\xfc\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\x9f\xfb\xef\xd7\x9c\xfe\x8d\xee\xd7\xaf\xfb\x9f\xeb\xd8\xff\x9c\x9c\xfe\xef\x98\xfb\xff\x9f\xe5\xff\xff\xff\xff\xff\xff\xff\xff",
"\x0a\xff\xff\xff\xff\xff\xc8\xef\xa8\xff\xc8\x9a\xdf\x87\xee\xe8\x8d\xbe\x8b\xdd\xe8\x7e\x9d\x9d\xac\xfb\x8f\x9b\xbe\x9a\xfd\xbf\xa7\xdf\x88\xfe\xdf\xc4\xef\x86\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xbf\xe9\xcf\xe8\x8e\xeb\xd8\xff\x7d\xb8\xff\xff\x69\xfe\xff\x8d\xa8\xff\x8e\xec\xd7\xaf\xea\xcf\xe7\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\x9f\xfb\xaf\xe9\x7d\xee\xd7\xff\x9a\xaa\xff\xef\x76\xfe\xff\xaf\xfa\xff\xff\xaa\xff\xff\xaf\xfa\xff\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\x8c\x78\x94\xff\xdf\xd7\xff\x8e\xfc\xff\xa9\xfe\xcf\xe8\xff\x7d\xfd\xff\x59\x88\xb8\xff\xff\xff\xff\xff\xff",
"\x03\x7d\xdc\xfb\xbd\xdf\xfb\xbd\xdf\xfb\xbd\xdf\xfb\x8d\xfc\xff",
"\x05\xff\xff\xdf\xea\xff\xaf\xfd\xff\xbc\xff\xef\xea\xff\xaf\xfd\xff\xbc\xff\xef\xea\xff\xcf\xfe\xff\xff",
"\x03\x7b\xfe\xea\xaf\xfe\xea\xaf\xfe\xea\xaf\xfe\xea\x8b\xfe\xff",
"\x06\xff\xff\xff\xff\xff\xff\xef\xb8\xff\xdf\xab\xfe\xaf\xbd\xfc\xad\xde\xea\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x05\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x99\xfc\xff\xff",
"\x02\xff\xbb\xef\xff\xff\xff\xff\xff\xff\xff",
"\x05\xff\xff\xff\xff\xff\x8e\x77\xbd\xfa\xba\xce\x6a\xaa\xd9\xaa\xc8\x9f\xca\x87\x97\xff\xff\xff\xff\xff",
"\x07\x9b\xff\xff\xbf\xf9\xff\xff\x7b\x79\xe9\xbf\xe6\x9e\xfa\x9b\xfe\x8c\xbe\xf9\xcf\xe8\x6b\xfe\xb9\xbf\x87\xa7\xfe\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\xef\x79\xc7\xff\xaa\xde\xe7\x7e\xfc\xef\xef\xc7\xff\xff\x9f\xea\x8d\xfe\x8e\x77\xfd\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\x9f\xfc\xff\xff\xc9\xef\x79\x68\xfc\x9a\xee\xc5\x7f\xfc\x9f\xec\xc7\xff\xc8\xaf\xe9\x5e\xfc\x8e\x97\xc7\xff\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\xef\x79\xc7\xff\xaa\xdf\xe8\x6e\x87\x57\xfd\xc7\xff\xee\xaf\xea\x8c\xfe\x8e\x77\xfd\xff\xff\xff\xff\xff\xff\xff",
"\x05\xdf\x97\xfe\x9c\xfe\x8e\xa5\xfe\x9b\xff\xbf\xf9\xff\x9b\xff\xbf\xf9\xff\x9b\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\xef\x79\x68\xfc\x9a\xee\xc5\x7f\xfc\x9f\xec\xc7\xff\xc8\xaf\xe9\x5e\xfc\x8e\x97\xc7\xaf\xfb\x8e\xfd\x8d\x77\xeb",
"\x06\x9b\xff\xff\x9b\xff\xff\x7b\x67\xe9\x6b\xee\xd7\x9b\xfe\xd8\x9b\xff\xd8\x9b\xff\xd8\x9b\xff\xd8\xff\xff\xff\xff\xff\xff",
"\x02\xbc\xde\x9b\x9b\x9b\x9b\x9b\x9b\xff\xff",
"\x03\xcf\xfc\xde\xbf\xfa\xab\xbf\xfa\xab\xbf\xfa\xab\xaf\xda\xc7",
"\x06\x9b\xff\xff\x9b\xff\xff\x9b\xaf\xe9\x9b\x8c\xfe\x8b\xd7\xff\x4b\xc6\xff\x9b\x7c\xfd\x9b\xaf\xe8\xff\xff\xff\xff\xff\xff",
"\x03\xab\xbf\xfa\xab\xbf\xfa\xab\xbf\xfa\xab\xcf\xd7\xff\xff\xff",
"\x09\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6b\x78\x8b\xc7\xbf\xe7\x6b\xce\xe8\x9b\xcf\xe8\x8d\xbe\xf9\x9c\xde\xe8\x9b\xcf\xe9\x8d\xbe\xf9\x9c\xde\xe8\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\x8c\x68\xe9\x6b\xee\xd7\x9b\xfe\xd8\x9b\xff\xd8\x9b\xff\xd8\x9b\xff\xd8\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\x9e\x77\xeb\x9a\xee\xd7\xc7\xff\xa9\xc7\xff\xa9\x9a\xee\xd7\x9e\x77\xeb\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\x7b\x79\xe8\xbf\xe6\x9e\xfa\x9b\xfe\x8c\xbe\xf9\xcf\xe8\x6b\xfe\xb9\xbf\x87\xa7\xfe\x9b\xff\xff\xcf\xfb\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\xef\x79\x68\xfc\x9a\xee\xc5\x7f\xfc\x9f\xec\xc7\xff\xc8\xaf\xe9\x5e\xfc\x8e\x97\xc7\xff\xff\x9f\xfc\xff\xff\xca",
"\x04\xff\xff\xff\xff\x7b\xd8\x7b\xfe\x9b\xff\x9b\xff\x9b\xff\x9b\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\xdf\x67\xea\x9f\xeb\xda\xbf\xb6\xfe\xff\x9e\xe7\x9e\xed\xd8\xcf\x77\xe9\xff\xff\xff\xff\xff\xff",
"\x05\xff\xff\xff\x9d\xfe\x8e\xa4\xfe\x8d\xfe\xdf\xe8\xff\x8d\xfe\xdf\xe8\xff\x6d\xfa\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\xaa\xef\xd8\xaa\xef\xd8\xaa\xef\xd8\xaa\xef\xd7\x9b\xce\xd5\x8e\x86\xd7\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\x7e\xfd\x8d\xfe\xb9\xbf\xfa\xcf\xe9\xd9\xff\x8e\x8d\xfe\xff\x99\xfa\xff\xcf\xd5\xff\xff\xff\xff\xff\xff\xff\xff",
"\x0a\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7e\xed\x96\xbf\xe9\x8f\xdc\x88\x9e\xfc\xbf\xc9\x8a\x8d\xfd\xdf\xa8\x9c\x9b\xfe\xef\x88\xbd\xa7\xff\xff\x79\xde\xd4\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff",
"\x06\xff\xff\xff\xff\xff\xff\x8e\xec\xb8\xdf\xb7\xe9\xff\x59\xfd\xff\x59\xfd\xcf\xb8\xe8\x7e\xec\xb8\xff\xff\xff\xff\xff\xff",
"\x07\xff\xff\xff\xff\xff\xff\xff\x7e\xfd\x8d\xfe\xb9\xaf\xfa\xcf\xe8\xd8\xff\x8e\x8c\xfe\xff\x89\xfa\xff\xdf\xd5\xff\xff\x8d\xfe\xff\x7b\xfd\xff",
"\x06\xff\xff\xff\xff\xff\xff\xff\xff\xff\xaf\x78\xd4\xff\xaf\xea\xff\x9b\xfe\xcf\xe7\xff\x6e\x86\xd8\xff\xff\xff\xff\xff\xff",
"\x03\xae\xeb\xea\xaf\xfe\xea\xac\xee\xe9\xaf\xee\xea\xae\xfb\xff",
"\x02\xbd\xbd\xbd\xbd\xbd\xbd\xbd\xbd\xbd\xbd",
"\x03\xba\xee\xea\xad\xde\xfb\x9e\xdc\xea\xbd\xef\xea\xba\xfe\xff",
"\x06\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xbe\xec\xec\xcd\x8c\xea\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
};

… where the first byte is the width of the glyph.

My compression algorithm was meant for simple prose, not ascii art, so I’d expect that to get butchered badly. It largely disregards the text’s formatting since most books weren’t supposed to be read on such a small screen.

In the case of The Little Prince, I’d like to use markdown-style tags to embed 1-bit images and have that instead of ascii art.

2 Likes

That antialiased text is really superior, I need to do it too… vanilla Pokitto font really wouldn’t be good for longer texts. But I’ll keep it fixed width to keep the ASCII art, at least we can compare readability.

I was thinking MD too, it’s simple, a lot of modern texts are directly in it and other formats can comfortably be converted. Would be nice.

EDIT:

Or actually using a high res mode with bigger font and smaller contrast looks okayish, think I’ll leave it at this:

image

firmware.bin (144.1 KB)

3 Likes

Edit, it is stuck in that, neither of the back buttons work and pokitto loader cannot see it

is there anything special I need to do to use the Little Prince book

Loaded up Flatland and it looks nice but now I cannot change anything, lol, it doesn’t recognize the reset button

edit, I started it up several ways while plugged into the computer and finally I tried holding C and the programmer button on back and it started with a static screen and the handy little menu from , , that game where you are running, and I got it to load Pysconian

2 Likes

Sorry about that, I’ll fix it later today.
In the mean time, you can open the loader easily by holding C when turning the Pokitto on.

1 Like

Another suggestion: I think most real books (at least, every one of them I have at home) will justify paragraphs in a way there are no space remaining at the right unless said paragraph has ended. Also they tend indent the first word of a paragraph too, but that’s less consistent. I think both works as a visual clue for readers (the people ones) which might improve ease of reading:

1 Like

Automatic block justify and paragraph indenting would mess up ASCII art, tables, etc., but the plain text can be formatted in this way before the conversion (fmt etc.). All I do ATM is prevent breaking lines in the middle of words. With a special format that knows what paragraphs fancy formatting would be possible.

Reading text on a tiny screen, I prefer a variable width font, but I do see the value of a fixed width font for layouts.
Perhaps having a simple fixed/variable option for the type of document being displayed?
Also, I feel we have strayed a little from the original topic… Perhaps splitting the general text-reader chatter from this specifit book?

OK my reader is kinda finished, functionally it’s basically equal to @FManga’s original reader here, but it’s portable and runs on all my devices. I managed to fit in Free as in Freedom on over 900 Pokitto pages – can you guys test it please?

faf.zip (168.1 KB)

Once tested, I’ll make a separate post with compiled PD/free books.

3 Likes

.bin doesn’t load, it stops at 92% and I now have to connect to a computer to fix the Pokitto.

Normally a .bin bigger then 220kb won’t work.

1 Like

But it works on my Pokitto :hushed: How did you upload it? I load it from SD card.

These work?

firmware.bin (43.4 KB)

firmware.bin (145.3 KB)

1 Like

Yes I used the SD card to flash it as it’s easier when I am not in front of a computer.

I didn’t test what you just posted though. Did you made it in 2 parts?

1 Like

Actually it doesn’t work, you’re right, I was loading a different bin. Sorry for breaking your Pokitto. The other two work (they’re different books).

How come big bins don’t work? Is the exact limit known?

1 Like

From what I understood, it’s because larger bin will overwrite the loader part. From the trial and error we did, it’s looks like 220kb is the max you can go without having issues.

4 Likes

The other bin you posted are working well. And it looks great. It easy to use and the bookmark works. Now we really need some text adventure on the Pokitto :stuck_out_tongue:

4 Likes