28 lines
1.4 KiB
Markdown
28 lines
1.4 KiB
Markdown
# Dice game
|
|
|
|
This project is a simple dice-game running on the Adafruit Feather 328P (an
|
|
ATmega328p-microcontroller) using a simple button and a 240x240 LCD display with
|
|
the ST7789-driver over
|
|
[SPI](https://en.wikipedia.org/wiki/Serial_Peripheral_Interface).
|
|
|
|
In the game you roll a number between 1 and 10, and if you get a 10, you are
|
|
awarded a picture of a high-quality cat stored in program-memory!
|
|
|
|
This project is a direct continuation of my earlier
|
|
[slideshow](https://git.teascade.net/teascade/slideshow)
|
|
|
|
This project is written on Rust and uses a very minimal amount of libraries with
|
|
the most significant being [`atmega-hal`](https://github.com/Rahix/avr-hal), a
|
|
hardware abstraction layer for ATmega-microcontrollers. Images are stored in the
|
|
[program memory](https://en.wikipedia.org/wiki/Flash_memory) of the device and
|
|
manually read using the `lpm`-instruction using inline-assembly because Rust
|
|
itself does not produce this instruction in any scenario. The images are stored
|
|
in the [QOI-specification](https://qoiformat.org/qoi-specification.pdf) to save
|
|
space, and they are decoded on-the-fly when rendering the images. Communication
|
|
between the display and the microprocessor is done manually using a [minimal
|
|
SPI-utility](https://rahix.github.io/avr-hal/atmega_hal/spi/type.Spi.html)
|
|
within the `atmega-hal` crate.
|
|
|
|
## Demonstration
|
|
|
|
<video controls src="./demonstration.mp4" alt="demonstration"> |