Update readme with moon example

two-pixels-per-word
Luke Wren 2021-01-23 17:29:02 +00:00
rodzic 38ded59624
commit adecd9d3a2
2 zmienionych plików z 15 dodań i 9 usunięć

Wyświetl plik

@ -9,7 +9,7 @@ Quick links:
[Board Schematic](hardware/board/picodvi.pdf)
[Software Readme](software/)
[Software Readme and Example Photos](software/)
About this Project
-----------------

Wyświetl plik

@ -28,14 +28,6 @@ Example Apps
Plays the Touhou music video at 720p 30FPS (no sound). Because the video is largely black and white silhouettes, it's highly compressible, and there is a shortcut for encoding full-res TMDS scanlines with a 2-colour palette ([check the source](apps/bad_apple/rle_decompress.S)). Currently around 1 minute of video fits in 16 MiB of flash, with per-scanline RLE compression. Eventually I'd like to fit the whole video.
### Terminal
![](../img/example_app_terminal.jpg)
Display text with an 8x8px black and white font, displayed at full resolution (so 80x60 characters at 640x480p 60 Hz, or 160x90 characters at 720p30). This works by storing the font as a set of canned 8-symbol pre-balanced TMDS sequences, so the scanline rendering takes only around 30% of one core. This is a fairly practical way to add a DVI terminal/console to an existing project.
One drawback of this technique is the memory footprint of the pre-balanced font: 256 bytes per 8x8 pixel character, so around 24 kB for all printable ASCII characters. There is an alternative technique for encoding directly from a 1bpp image, so the memory footprint can be reduced, at the cost of more CPU cycles spent on TMDS encode.
### Vista
![](../img/example_app_vista.jpg)
@ -44,6 +36,20 @@ Full-resolution VGA RGB565 image viewer. As each raw image is over 600 kB, only
If you define the symbol `TMDS_FULLRES_NO_DC_BALANCE` then you can remove the DC balance feedback from the TMDS encode, which *may* give you enough time to do something more interesting with full-resolution RGB graphics, provided your DVI signals are DC-coupled, and your TV is feeling lenient. This is absolutely forbidden by the standard, but don't worry, I won't tell anyone if you do this.
### Terminal
![](../img/example_app_terminal.jpg)
Display text with an 8x8px black and white font, displayed at full resolution (so 80x60 characters at 640x480p 60 Hz, or 160x90 characters at 720p30). This originally worked by storing the font as a set of canned pre-balanced TMDS sequences, but this had a significant memory footprint. There is now fast generic full-res encode ([code here](https://github.com/Wren6991/PicoDVI/blob/6bafa3c3e3f6796b49eb599476ee2a43ae5ccf67/software/libdvi/tmds_encode.S#L176)) which again subverts the intent of the DVI specification to cheat and still get compliant output, so you can display text over DVI with about 30% of a core.
### Moon
![](../img/example_app_moon.jpg)
Use the full-res 1bpp encode to display a dithered black/white image of the Earthrise from Apollo 8. The same encoded buffer is sent out on all 3 lanes during the horizontal active period, but the encode is fast enough that you can do bitplaned RGB111 if you like. There's a 640x480 and a 1280x720 version.
Two variants of this app are built: `moon.uf2` and `moon_pio_encode.uf2`. All the other examples use software TMDS encode, but the second variant uses [this PIO program](https://github.com/Wren6991/PicoDVI/blob/master/software/libdvi/tmds_encode_1bpp.pio) to offload the encode to a fourth state machine, which is then bounced through memory via DMA to the three serialiser state machines.
### Hello DVI
Minimal DVI example. Displays a scrolling QVGA RGB565 test card with a 640x480p 60Hz DVI mode.