Improve ad astra description

This commit is contained in:
Andras Schmelczer 2022-09-25 20:17:27 +02:00
parent 6553d7ef11
commit 51e073ee51
No known key found for this signature in database
GPG key ID: 0EA1BC97D0AB076E

View file

@ -6,7 +6,7 @@ import adAstraWebM from '../media/webm/ad_astra.webm';
import { GitHub, videoPosterAltText } from '../shared';
export const adAstra: TimelineElementParameters = {
title: 'Gaming on an ATtiny85',
title: 'Embedded game engine',
date: '2020 spring',
figure: new Video({
poster: adAstraPoster,
@ -15,11 +15,13 @@ export const adAstra: TimelineElementParameters = {
altText: videoPosterAltText,
}),
description:
'A simple game engine with a sample game set in space. The greatest challenge was to overcome the very limited resources of the hardware, this was also the most rewarding part.',
"I've always wanted to combine graphics and microcontrollers, so the obvious next step was making a game engine for the ATTiny85. The video shows how I created an enjoyable game using my engine, literally, from scratch.",
more: [
'For reducing complexity while maintaining performance, a balance had to be found between object-oriented and structural programming. For example, a simple prototype-based inheritance is used for the game objects; meanwhile, an optimised SIMD utilising low-level driver is used for rendering to the display. I think, the codebase is quite readable and at the same time also fast, with the maximum frame times being between 15 and 20 milliseconds at a clock speed of 8 MHz. That means, it runs quite stably at 50-60 FPS.',
'As for the hardware, it is quite simple. Aside from the ATtiny85V, a D096-12864-SPI7 display is used for output and a TSOP4838 for input. The circuit runs on 3.3V, so a regulator is also needed. It uses a current of 8mA to 11mA on full brightness and around 1.5mA on standby mode.',
'There is also fault-tolerant persistent data storage utilising the built-in EEPROM. For creating sprites (which are also stored in EEPROM), I made a tool to convert PNG-s into C array definitions. This can also be found on GitHub along with the entire project.',
"Besides overcoming the hardware's minimal resources, the greatest challenge was designing and manufacturing the PCB; this was also the most rewarding part. The hardware setup is straightforward. Aside from the ATtiny85V, I used a D096-12864-SPI7 OLED display as output and a TSOP4838 IR receiver as input. The circuit runs on 3.3V, so a regulator is also needed. The system is very low-power, with its peak consumption at around 31mW on full brightness, and there is also a standby mode with a current draw of just 1.5mA.",
"Even though I used C for programming, I tried striking a balance between object-oriented and structured programming to reduce complexity while maintaining performance. For example, I used prototype-based inheritance for the game objects, allowing easy code reuse. Meanwhile, I created a high-performance driver for the display, which uses SIMD techniques to process 4 pixels at once (it's an 8-bit ALU). Thanks to this, the maximum frame times are between 15 and 20 milliseconds at a clock speed of 8 MHz. This means that the lowest FPS during gameplay never dips below 50 FPS.",
'There is also fault-tolerant persistent data storage (with atomic commit) utilising the built-in EEPROM for storing game state. To create sprites (which are also stored in the EEPROM), I made a tool that converts PNG-s into C array definitions. These scripts can also be found on GitHub, along with the entire project.',
],
links: [GitHub('https://github.com/schmelczer/ad_astra')],
};