FABRIC.md/ROADMAP.md/ttf_words.c: scope console REPL (4.4), obsolete M8, flip TTF to Cartesian y
FABRIC.md: renumber Artemis-last boundary 4.4 -> 4.5, add new 4.4 REPL item (console visual design scoped this session -- CANVAS is one shared region above the REPL strip, 640x480 scroll box centered within it, stroke font, ANSI color, VM-identity + ACL-identity prompt segments, ~1000-line scrollback), linked to repl-mockup.png. ROADMAP.md: mark M8 section OBSOLETE -- replaced by FABRIC.md 4.4, kept for history only. ttf_words.c: TTF-TEXT's y argument now Cartesian (origin bottom-left of the physical framebuffer, y increasing upward) instead of raw framebuffer coordinates, translated once via fb_height() - y. Verified via amd64 screendump (logs/20260811-070418/), text renders right-side-up with increasing y moving up the screen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
8e2c5dae5f
commit
20801ded72
@@ -4367,8 +4367,9 @@ document and committing that amendment as its own item.*
|
|||||||
> note below: glyph rendering (stroke-based font capsules), not yet scoped.
|
> note below: glyph rendering (stroke-based font capsules), not yet scoped.
|
||||||
|
|
||||||
> **Sequencing noted 2026-08-07, not yet scoped:** keyboard input (4.3.5–4.3.5f) →
|
> **Sequencing noted 2026-08-07, not yet scoped:** keyboard input (4.3.5–4.3.5f) →
|
||||||
> glyph rendering (stroke-based font capsules) → REPL — in that order, before the 4.4
|
> glyph rendering (stroke-based font capsules) → REPL — in that order, before the 4.5
|
||||||
> Artemis boundary. Recorded so the order is not lost between sessions; neither glyph
|
> Artemis boundary (renumbered from 4.4, 2026-08-11 — REPL now has its own 4.4 section).
|
||||||
|
> Recorded so the order is not lost between sessions; neither glyph
|
||||||
> rendering nor REPL has *Done when* criteria yet. Per §25.0 rule 2, each gets scoped in
|
> rendering nor REPL has *Done when* criteria yet. Per §25.0 rule 2, each gets scoped in
|
||||||
> detail at its own checkpoint, not now.
|
> detail at its own checkpoint, not now.
|
||||||
|
|
||||||
@@ -4973,11 +4974,23 @@ document and committing that amendment as its own item.*
|
|||||||
> `KEY-EVENT` (4.3.5f) isn't yet wired into the REPL's character source
|
> `KEY-EVENT` (4.3.5f) isn't yet wired into the REPL's character source
|
||||||
> (`console_getc()`), and `KEY`/`?TERMINAL` remain the dead stubs already noted above.
|
> (`console_getc()`), and `KEY`/`?TERMINAL` remain the dead stubs already noted above.
|
||||||
|
|
||||||
⋯ *(4.3.x is open-ended — more items get appended here as Console work is scoped item by*
|
⋯ *(4.3.x is open-ended — more items get appended here as framebuffer/keyboard Console work*
|
||||||
*item, developed on the fly per §25.0. 4.4 below is unaffected by anything added above*
|
*is scoped item by item, developed on the fly per §25.0. 4.4 below is a new, independent*
|
||||||
*this marker.)*
|
*section for the REPL itself — separate because the REPL is independent of the screen-output*
|
||||||
|
*and keyboard work above. 4.5 (renumbered from 4.4, 2026-08-11) is unaffected by anything*
|
||||||
|
*added above this marker.)*
|
||||||
|
|
||||||
- [ ] **4.4 — Artemis last.** It works today; it is the thing that cannot be broken.
|
- [ ] **4.4 — REPL.** *(Scoped 2026-08-11; independent of the 4.3.x framebuffer/keyboard work.*
|
||||||
|
*This item replaces `docs/lithosananke/ROADMAP.md`'s M8 section entirely — M8 is marked*
|
||||||
|
*OBSOLETE there as of 2026-08-11, kept for history only. Detailed spec and punch-list*
|
||||||
|
*sub-items to be written up in the same style as 4.3.x.)*
|
||||||
|
*Refs:* §25.5, §27.6.
|
||||||
|
|
||||||
|
Original visual mockup (Captain Bob, 2026-08-11): [`repl-mockup.png`](repl-mockup.png) —
|
||||||
|
CANVAS label, scrollable output region, separate REPL input strip with cursor at the
|
||||||
|
bottom. Source image for the CANVAS/REPL-strip geometry described below.
|
||||||
|
|
||||||
|
- [ ] **4.5 — Artemis last.** It works today; it is the thing that cannot be broken.
|
||||||
*Refs:* §10.
|
*Refs:* §10.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -5484,7 +5497,8 @@ of slot.
|
|||||||
### 27.6 Glyph rendering, UTF-8 Latin, capsule-loaded (4.3.6–4.3.6g)
|
### 27.6 Glyph rendering, UTF-8 Latin, capsule-loaded (4.3.6–4.3.6g)
|
||||||
|
|
||||||
Scoped 2026-08-09, next after the 4.3.5f checkpoint, per the 2026-08-07 sequencing note
|
Scoped 2026-08-09, next after the 4.3.5f checkpoint, per the 2026-08-07 sequencing note
|
||||||
(§25.5): keyboard input → glyph rendering → REPL, before the 4.4 Artemis boundary.
|
(§25.5): keyboard input → glyph rendering → REPL, before the 4.5 Artemis boundary (renumbered
|
||||||
|
from 4.4, 2026-08-11 — REPL now has its own 4.4 section).
|
||||||
|
|
||||||
**Purpose and boundary.** Render text onto the CANVAS region of the Stadium UI (per the
|
**Purpose and boundary.** Render text onto the CANVAS region of the Stadium UI (per the
|
||||||
reviewed mockup: a fixed REPL strip at the bottom of the screen, a separate large CANVAS
|
reviewed mockup: a fixed REPL strip at the bottom of the screen, a separate large CANVAS
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Capsule Block Manifest — Auto-generated
|
# Capsule Block Manifest — Auto-generated
|
||||||
<!-- Generated by mkcapsule --manifest 2026-08-11T03:17:24Z -->
|
<!-- Generated by mkcapsule --manifest 2026-08-11T11:02:46Z -->
|
||||||
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
|
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
|
||||||
<!-- Hand-written justifications and immutability notes live -->
|
<!-- Hand-written justifications and immutability notes live -->
|
||||||
<!-- in MANIFEST.md alongside this auto-generated index. -->
|
<!-- in MANIFEST.md alongside this auto-generated index. -->
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ M5 Timer ██████████████████
|
|||||||
M6 Heap ████████████████████ COMPLETE
|
M6 Heap ████████████████████ COMPLETE
|
||||||
M7 VM Parity ████████████████████ COMPLETE
|
M7 VM Parity ████████████████████ COMPLETE
|
||||||
M7.1 Capsules ████████████░░░░░░░░ DESIGN COMPLETE
|
M7.1 Capsules ████████████░░░░░░░░ DESIGN COMPLETE
|
||||||
M8 REPL ░░░░░░░░░░░░░░░░░░░░ PLANNED
|
M8 REPL ░░░░░░░░░░░░░░░░░░░░ OBSOLETE — see FABRIC.md §25.5 item 4.4
|
||||||
M9 Block I/O ░░░░░░░░░░░░░░░░░░░░ PLANNED
|
M9 Block I/O ░░░░░░░░░░░░░░░░░░░░ PLANNED
|
||||||
M10 Networking ░░░░░░░░░░░░░░░░░░░░ FUTURE
|
M10 Networking ░░░░░░░░░░░░░░░░░░░░ FUTURE
|
||||||
```
|
```
|
||||||
@@ -234,6 +234,11 @@ APIC Timer: started
|
|||||||
|
|
||||||
## Phase 4: Interactive Forth (M8)
|
## Phase 4: Interactive Forth (M8)
|
||||||
|
|
||||||
|
> **⚠ OBSOLETE (2026-08-11).** This entire M8 section is superseded by
|
||||||
|
> `FABRIC.md` §25.5 item 4.4 (REPL). The console/REPL design has moved past
|
||||||
|
> what's scoped here — do not use this section as a source for REPL or
|
||||||
|
> CANVAS design decisions. Kept in place for history only.
|
||||||
|
|
||||||
### M8: REPL + Interactive Forth
|
### M8: REPL + Interactive Forth
|
||||||
|
|
||||||
**Status:** Scoped 2026-08-11 (this section). Substrate (interrupt-driven keyboard
|
**Status:** Scoped 2026-08-11 (this section). Substrate (interrupt-driven keyboard
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@@ -94,7 +94,7 @@ static void ttf_word_text(VM *vm) {
|
|||||||
cell_t color, size, y, x, u, addr_cell;
|
cell_t color, size, y, x, u, addr_cell;
|
||||||
vaddr_t a;
|
vaddr_t a;
|
||||||
cell_t remaining;
|
cell_t remaining;
|
||||||
uint32_t pen_x;
|
uint32_t pen_x, baseline_y;
|
||||||
q48_16_t scale;
|
q48_16_t scale;
|
||||||
|
|
||||||
if (vm->dsp < 5) {
|
if (vm->dsp < 5) {
|
||||||
@@ -123,6 +123,11 @@ static void ttf_word_text(VM *vm) {
|
|||||||
a = VM_ADDR(addr_cell);
|
a = VM_ADDR(addr_cell);
|
||||||
remaining = u;
|
remaining = u;
|
||||||
pen_x = (uint32_t) x;
|
pen_x = (uint32_t) x;
|
||||||
|
/* Caller-facing (x,y) is Cartesian: origin at the bottom-left of the physical
|
||||||
|
* framebuffer, y increasing upward. fb_put_pixel() takes framebuffer coordinates
|
||||||
|
* (origin top-left, y increasing downward), so flip once here per-call rather
|
||||||
|
* than at every blit site. */
|
||||||
|
baseline_y = fb_height() - (uint32_t) y;
|
||||||
scale = q48_div(q48_from_u64((uint32_t) size), q48_from_u64(g_ttf_font.units_per_em));
|
scale = q48_div(q48_from_u64((uint32_t) size), q48_from_u64(g_ttf_font.units_per_em));
|
||||||
|
|
||||||
while (remaining > 0) {
|
while (remaining > 0) {
|
||||||
@@ -138,7 +143,7 @@ static void ttf_word_text(VM *vm) {
|
|||||||
for (px = 0; px < bmp.width; px++) {
|
for (px = 0; px < bmp.width; px++) {
|
||||||
if (bmp.pixels[py * bmp.width + px]) {
|
if (bmp.pixels[py * bmp.width + px]) {
|
||||||
fb_put_pixel(pen_x + px - TTF_CACHE_MARGIN,
|
fb_put_pixel(pen_x + px - TTF_CACHE_MARGIN,
|
||||||
(uint32_t) y + py - (uint32_t) size - TTF_CACHE_MARGIN,
|
baseline_y + py - (uint32_t) size - TTF_CACHE_MARGIN,
|
||||||
(uint32_t) color);
|
(uint32_t) color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user