docs(twitter): add 1687257354490818561 corpus (NOTimothyLottes SPC project intro + Steam Deck HID)

7-post thread, 6 images. SPC project intro: 'like a Pico8, but turns
the Steam Deck into an actual console for exclusive GPU assembly
projects. The way consoles had been done before silly portability
became the only focus.' GPU-accessible KEY + GAMEPAD input; no
functions, no API, fixed VA address + data format. Steam Deck +
3 generations of PlayStation HID brought up; Xbox controllers aren't
HIDs so skipping for now. Hot plug via epoll, every-second open
attempt; {product, vendor} not unique enough (aliasing), use packet
size too. Up to 4 device outputs collected for GPU; Steam Deck
controls always last for docking. Audio deferred, networking skipped
for v1. 2000 lines of C, no includes. Next: GPU-side assembler +
data editor (binary at first).
This commit is contained in:
ed
2026-07-27 01:58:31 -04:00
parent a642db922d
commit eed1590d1e
8 changed files with 181 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 662 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 KiB

@@ -0,0 +1,53 @@
---
title: "For anyone tuning in now, SPC is kind of like a Pico8, but instead of being a po"
author: "NOTimothyLottes"
handle: "@NOTimothyLottes"
post_url: "https://x.com/NOTimothyLottes/status/1687257354490818561"
post_id: "1687257354490818561"
timestamp: "2023-08-04 00:21:15"
post_count: 7
reply_count: 0
repost_count: 0
like_count: 5
view_count: 415
---
# @NOTimothyLottes — For anyone tuning in now, SPC is kind of like a Pico8, but instead of being a po
## Post 1 (2023-08-03 23:54:23)
SPC: Left off with KEY and GAMEPAD input GPU-accessable. NOP design, no functions, no API, just a fixed VA address and data format to read, dead easy.
![Media 1](./media/1687250591813079041_1.jpg)
![Media 2](./media/1687250591813079041_2.jpg)
## Post 2 (2023-08-03 23:58:52) — reply to Post 1
Wrote some console data dumping to aid in bringing up HID parsers for Deck and three generations of PlayStation controllers. Apparently XBox controllers aren't HIDs so not sure how one is supposed to access those.
![Media 1](./media/1687251721032978432_1.jpg)
![Media 2](./media/1687251721032978432_2.jpg)
## Post 3 (2023-08-04 00:03:13) — reply to Post 2
Supporting hot plug was a bit of a mess, just trying to open devices every second. Adding open devices to an epoll. {Product, vendor} isn't enough to ID a device, too much aliasing, so I use packet size as well.
![Media 1](./media/1687252813468852225_1.jpg)
## Post 4 (2023-08-04 00:05:43) — reply to Post 3
Open devices with matching packet size get set in a bit array, and I collect up to 4 of those device outputs to sent to the GPU. Special logic to always place Steam Deck controls last to make docking work well.
![Media 1](./media/1687253442643755008_1.jpg)
## Post 5 (2023-08-04 00:09:57) — reply to Post 4
I'll have to tackle audio at some point, but I'm skipping networking for version 1. But otherwise SPC is good to move on to the next step, which is to build out the GPU side assembler & data editor. Which will be written in binary at first.
## Post 6 (2023-08-04 00:14:04) — reply to Post 5
Project is roughly 2000 lines of C at this point. With no includes. Anyone have any suggestions for hosting let me know. Source will be released.
## Post 7 (2023-08-04 00:21:15) — reply to Post 6
For anyone tuning in now, SPC is kind of like a Pico8, but instead of being a portable fantasy console, SPC turns the Steam Deck into an actual console for exclusive GPU assembly projects. The way consoles had been done before silly portability became the only focus.
@@ -0,0 +1,128 @@
{
"root_post_id": "1687257354490818561",
"posts": [
{
"post_id": "1687250591813079041",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "SPC: Left off with KEY and GAMEPAD input GPU-accessable. NOP design, no functions, no API, just a fixed VA address and data format to read, dead easy.",
"timestamp": "2023-08-03 23:54:23",
"media_urls": [
"https://pbs.twimg.com/media/F2pRdu9WgAABCLE?format=jpg&name=orig",
"https://pbs.twimg.com/media/F2pReKsXoAAPvow?format=jpg&name=orig"
],
"reply_to_id": null,
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 3,
"view_count": 1397
}
},
{
"post_id": "1687251721032978432",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Wrote some console data dumping to aid in bringing up HID parsers for Deck and three generations of PlayStation controllers. Apparently XBox controllers aren't HIDs so not sure how one is supposed to access those.",
"timestamp": "2023-08-03 23:58:52",
"media_urls": [
"https://pbs.twimg.com/media/F2pSfIHXcAMI-IQ?format=jpg&name=orig",
"https://pbs.twimg.com/media/F2pSfzAWcAMo6t7?format=jpg&name=orig"
],
"reply_to_id": "1687250591813079041",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 1,
"view_count": 197
}
},
{
"post_id": "1687252813468852225",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Supporting hot plug was a bit of a mess, just trying to open devices every second. Adding open devices to an epoll. {Product, vendor} isn't enough to ID a device, too much aliasing, so I use packet size as well.",
"timestamp": "2023-08-04 00:03:13",
"media_urls": [
"https://pbs.twimg.com/media/F2pTfekWYAAAwSi?format=jpg&name=orig"
],
"reply_to_id": "1687251721032978432",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 2,
"view_count": 197
}
},
{
"post_id": "1687253442643755008",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Open devices with matching packet size get set in a bit array, and I collect up to 4 of those device outputs to sent to the GPU. Special logic to always place Steam Deck controls last to make docking work well.",
"timestamp": "2023-08-04 00:05:43",
"media_urls": [
"https://pbs.twimg.com/media/F2pUEG0XwAEwYvP?format=jpg&name=orig"
],
"reply_to_id": "1687252813468852225",
"quote_of_id": null,
"metrics": {
"reply_count": 2,
"repost_count": 0,
"like_count": 0,
"view_count": 237
}
},
{
"post_id": "1687254511239221249",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "I'll have to tackle audio at some point, but I'm skipping networking for version 1. But otherwise SPC is good to move on to the next step, which is to build out the GPU side assembler & data editor. Which will be written in binary at first.",
"timestamp": "2023-08-04 00:09:57",
"media_urls": [],
"reply_to_id": "1687253442643755008",
"quote_of_id": null,
"metrics": {
"reply_count": 1,
"repost_count": 0,
"like_count": 0,
"view_count": 211
}
},
{
"post_id": "1687255546372493313",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "Project is roughly 2000 lines of C at this point. With no includes. Anyone have any suggestions for hosting let me know. Source will be released.",
"timestamp": "2023-08-04 00:14:04",
"media_urls": [],
"reply_to_id": "1687254511239221249",
"quote_of_id": null,
"metrics": {
"reply_count": 2,
"repost_count": 0,
"like_count": 2,
"view_count": 402
}
},
{
"post_id": "1687257354490818561",
"author": "NOTimothyLottes",
"handle": "NOTimothyLottes",
"text": "For anyone tuning in now, SPC is kind of like a Pico8, but instead of being a portable fantasy console, SPC turns the Steam Deck into an actual console for exclusive GPU assembly projects. The way consoles had been done before silly portability became the only focus.",
"timestamp": "2023-08-04 00:21:15",
"media_urls": [],
"reply_to_id": "1687255546372493313",
"quote_of_id": null,
"metrics": {
"reply_count": 0,
"repost_count": 0,
"like_count": 5,
"view_count": 415
}
}
],
"source_url": "https://x.com/NOTimothyLottes/status/1687257354490818561"
}