Improve ad astra description
This commit is contained in:
parent
6553d7ef11
commit
51e073ee51
1 changed files with 7 additions and 5 deletions
|
|
@ -6,7 +6,7 @@ import adAstraWebM from '../media/webm/ad_astra.webm';
|
||||||
import { GitHub, videoPosterAltText } from '../shared';
|
import { GitHub, videoPosterAltText } from '../shared';
|
||||||
|
|
||||||
export const adAstra: TimelineElementParameters = {
|
export const adAstra: TimelineElementParameters = {
|
||||||
title: 'Gaming on an ATtiny85',
|
title: 'Embedded game engine',
|
||||||
date: '2020 spring',
|
date: '2020 spring',
|
||||||
figure: new Video({
|
figure: new Video({
|
||||||
poster: adAstraPoster,
|
poster: adAstraPoster,
|
||||||
|
|
@ -15,11 +15,13 @@ export const adAstra: TimelineElementParameters = {
|
||||||
altText: videoPosterAltText,
|
altText: videoPosterAltText,
|
||||||
}),
|
}),
|
||||||
description:
|
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: [
|
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.',
|
"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.",
|
||||||
'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.',
|
"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')],
|
links: [GitHub('https://github.com/schmelczer/ad_astra')],
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue