Repository navigation
Expand file tree
/
Copy pathroadmap.html
More file actions
135 lines (135 loc) · 8.05 KB
/
Copy pathroadmap.html
File metadata and controls
135 lines (135 loc) · 8.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>KX-88 Roadmap</title>
<link rel="icon" href="favicon.png">
<style>
:root { --ink: #16181C; --paper: #F1F2F4; --white: #FFFFFF; --hot: #D7262E; --cobalt: #1F4FA8; --g6: #5C6068; --alu2: #C9CDD3; }
html { background: var(--paper); }
body { margin: 0; color: var(--ink); font: 19px/1.6 Georgia, "Iowan Old Style", "Times New Roman", serif; }
main { max-width: 46rem; margin: 0 auto; padding: 32px 16px 80px; }
nav { font: 600 16px/1.4 ui-monospace, "SF Mono", Menlo, Consolas, monospace; margin-bottom: 40px; }
nav a { color: var(--cobalt); }
h1 { font: 800 48px/1.05 "Helvetica Neue", Helvetica, Arial, sans-serif; letter-spacing: -0.02em; margin: 0 0 24px; }
h2 { font: 800 28px/1.2 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 48px 0 12px; border-top: 4px solid var(--hot); padding-top: 12px; }
h3 { font: 700 21px/1.3 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 32px 0 8px; }
a { color: var(--cobalt); }
code { font: 0.85em ui-monospace, "SF Mono", Menlo, Consolas, monospace; background: var(--white); padding: 1px 5px; border-radius: 4px; }
pre { background: var(--white); border: 1px solid var(--alu2); padding: 14px 16px; overflow-x: auto; border-radius: 6px; }
pre code { padding: 0; background: none; }
table { border-collapse: collapse; width: 100%; font-size: 17px; display: block; overflow-x: auto; }
th, td { text-align: left; padding: 8px 10px; border-bottom: 1px solid var(--alu2); vertical-align: top; }
th { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
</style>
</head>
<body>
<main>
<nav><a href="index.html">KX-88 home</a> · <a href="guide/index.html">Guide</a> · <a href="readme.html">README</a> · <a href="roadmap.html">Roadmap</a></nav>
<h1>KX-88: roadmap and next steps</h1>
<p>Working checklist. Tick items as they land and log them in the BUILDLOG.
Design reasons live in <code>KX88-PLAN.md</code>; the visual editor has its own plan
in <code>EDITOR-PLAN.md</code>.</p>
<h2>Phase 0: done (2026-10-18)</h2>
<ul>
<li>[x] Engine core, band renderer, 115 host tests</li>
<li>[x] Desktop simulator with hot reload and tweaks, three example games</li>
<li>[x] ST77916 QSPI adapter, ST7789/ILI9341 SPI adapter (untested)</li>
<li>[x] <code>KX88Runtime</code> sketch compiles for ESP32-S3</li>
<li>[x] macOS app bundle with icon, MIT licence, pushed to GitHub</li>
<li>[x] Name kept in one place (<code>brand.env</code>) so a rename is cheap</li>
</ul>
<h2>Next session: build without hardware (queued 2026-10-18)</h2>
<p>Work these in order. Each can be written and host-tested now; anything
touching a real panel or chip stays marked untested until Phase 1.</p>
<ol>
<li>[x] KX Script: methods on classes and image literals in <code>.kx.ts</code>
(KXSCRIPT-PLAN.md), with tests and an updated example.</li>
<li>[x] Tilemaps as asset slots: send tilemaps over USB/WiFi like images
so they no longer need a reflash (CLI <code>kx88 push</code>, Studio, device).</li>
<li>[x] Panel adapters: GC9A01 (round 240x240), ST7735, ST7796, plus their
sim shapes. Untested on hardware.</li>
<li>[x] Touch: CST816 driver mapped to <code>mouseX/mouseY/mouseIsPressed</code>,
sim mouse already covers the API. Untested on hardware.</li>
<li>[x] CI: Windows and Linux builds of Studio.</li>
<li>[ ] Website (local only, never pushed): game gallery and starter kits
list. Deferred to a later session.</li>
</ol>
<h2>Phase 1: first run on real hardware (next)</h2>
<p>Board: ESP32-S3R8 (16 MB flash, 8 MB OPI PSRAM) with the 360x360 ST77916
round panel, same pins as the <code>st77916</code> driver project.</p>
<ol>
<li>[ ] Plug the board in with a data cable. <code>arduino-cli board list</code> should
show a <code>/dev/cu.usbmodem*</code> port.</li>
<li>[ ] <code>tools/flash.sh</code> (pong by default). It copies the game into the
sketch, compiles with the board settings, uploads, then opens the serial
monitor. If upload fails: hold BOOT, tap RESET, release BOOT, retry.</li>
<li>[ ] Check the picture:</li>
<li>[ ] Anything at all on screen. If black: backlight pin (5), reset pin
(4), then try a lower clock (<code>hz</code> 40 MHz in <code>KxSt77916Config</code>).</li>
<li>[ ] Colours right. Red/blue swapped means flip <code>bgr</code>. Wrong-looking
colours overall means byte order (<code>swap</code>) is wrong.</li>
<li>[ ] Orientation and no offset or tearing at band edges.</li>
<li>[ ] Read the serial stats (every 5 s): fps, draw and raster time per
frame. Write the numbers into the BUILDLOG. Target: 30 fps for pong.</li>
<li>[ ] Try <code>shooter.cpp</code> and <code>tiles.cpp</code> (heavier scenes).</li>
<li>[ ] Buttons: wire real buttons or a joystick to free GPIOs and map them
to <code>KX_BTN_*</code> in the sketch. The <code>BUTTONS[]</code> table in
<code>KX88Runtime.ino</code> is ready; fill in the pins once wired.</li>
<li>[ ] Touch, if the panel has a touch chip (CST816 is common on these
boards): map it to <code>mouseX/mouseY/mouseIsPressed</code>.</li>
<li>[x] Tweaks over serial: the device reads <code>name=value</code>, <code>tweaks</code>,
<code>reset</code>, <code>clear</code>. <code>kx88 run --port</code> forwards the tweaks file, and
Studio's Live tweaks sliders drive the sim and a linked board. Still to
try on a real board (opening the port may reset an ESP32-S3).</li>
<li>[x] One-click push: Studio's Board button compiles and uploads with
arduino-cli, and <code>tools/flash.sh</code> takes a <code>.kx.json</code> (runs <code>kx88 gen</code>).
Upload still to be tried on a real board.</li>
<li>[ ] More panels: test ST7789 and ILI9341 on real hardware, then add
GC9A01 (round 240x240), ST7735, ST7796.</li>
</ol>
<h2>Phase 2: live coding on the device</h2>
<ul>
<li>[ ] <code>elf_loader</code> spike: load a game into a running ESP32-S3 without
reflashing the runtime (tier 3 in the plan). Measure load time.</li>
<li>[x] Asset slots: images and tilemaps sent separately from code (tier
2). Map push untested on a board.</li>
<li>[x] WiFi transport and the device link protocol (plan section 9), with
a pairing code. Untested on hardware.</li>
</ul>
<h2>Phase 3: KX-88 Studio (visual editor)</h2>
<p>See <code>EDITOR-PLAN.md</code>. Tauri desktop app: scene editor, behaviours, event
sheets, sprite and map painter, tweak sliders, one-click play on device.</p>
<h2>Phase 4: community</h2>
<ul>
<li>[x] KX Script: <code>.kx.ts</code> TypeScript subset compiled to C++ by <code>kx88</code>
(KXSCRIPT-PLAN.md), <code>games/dodge.kx.ts</code> example, tsc typings. Methods on
classes and <code>image([...])</code> literals added 2026-10-18.</li>
<li>[x] Audio: 8-voice synth in the engine (presets, tones, 8 instruments,
RTTTL melodies), cpal output in the sim, I2S amp or passive buzzer on the
board, <code>kx88 synth</code> (keyboard/MIDI, records RTTTL), Studio melody action.
Board output and MIDI not yet tried on real hardware.</li>
<li>[x] Studio Sound tab: piano (mouse, keys, MIDI), record to RTTTL,
ringtone tester, SFX and tone tester, echo to a linked board, Hear it
button on Play sound actions.</li>
<li>[ ] Docs site, game gallery, starter kits list. A local draft of the
project site exists in <code>website/</code> (gitignored); decide where to host it
when the repo goes public</li>
</ul>
<h2>Housekeeping (any time)</h2>
<ul>
<li>[x] CI on GitHub Actions: host tests, <code>cargo build</code>, <code>tools/flash.sh</code>
with <code>NO_UPLOAD=1</code> for the ESP32 compile check</li>
<li>[x] Signed macOS Studio build: <code>tools/build-mac.sh</code> with
<code>APPLE_SIGNING_IDENTITY</code> (Developer ID, hardened runtime)</li>
<li>[x] Notarized: <code>NOTARY_PROFILE=kx88</code> on the same script (keychain
profile made with <code>notarytool store-credentials</code>)</li>
<li>[ ] Windows and Linux builds of the desktop app</li>
<li>[ ] Make the GitHub repo public when phase 1 runs on hardware</li>
<li>[ ] Trademark search: optional. Open source and fine without it; if a
conflict ever shows up, rename via <code>brand.env</code> (see CLAUDE.md)</li>
</ul>
</main>
</body>
</html>