diff options
| author | salmonik <salmonik@tuta.io> | 2026-08-17 19:56:24 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-08-17 19:56:24 +0200 |
| commit | 126d5b2e55dca93e024f5654fed6fae37a012369 (patch) | |
| tree | a74ad41c98c121a7bc37299b8a4d1d336e0cd2c5 /CONTEXT.md | |
| parent | wm: keep windows in place when the console scrolls beneath them (diff) | |
| download | rs-dos-126d5b2e55dca93e024f5654fed6fae37a012369.tar.gz rs-dos-126d5b2e55dca93e024f5654fed6fae37a012369.zip | |
Terminal-app design (ADR 0005) + disk-write controller
- ADR 0005: persistent home terminal (full-screen, chrome-less,
bottom-pinned), F1 terminal windows, per-instance vt/tty/shell,
queue-based input for all terminals, and the disk controller
- Glossary: add the Terminal term; update Task/App for the new model
- Add a re-entrant disk lock (DiskGuard over the preemption-depth
counter) and wrap all fs/fat mutating operations per-call
Diffstat (limited to 'CONTEXT.md')
| -rw-r--r-- | CONTEXT.md | 14 |
1 files changed, 11 insertions, 3 deletions
| @@ -113,9 +113,16 @@ The action that destroys a window and ends its app. | |||
| 113 | 113 | ||
| 114 | A task that owns exactly one window and receives input events through its | 114 | A task that owns exactly one window and receives input events through its |
| 115 | message queue. A GUI program is an app; there is no separate "process" | 115 | message queue. A GUI program is an app; there is no separate "process" |
| 116 | concept — the app is its task plus its window. The console is app 0 | 116 | concept — the app is its task plus its window. The home terminal is app 0 |
| 117 | (window 0). | 117 | (window 0). |
| 118 | 118 | ||
| 119 | ## Terminal | ||
| 120 | |||
| 121 | A program that presents a command line in a window: a text terminal | ||
| 122 | emulator plus a shell command loop, rendered into the window's pixel | ||
| 123 | buffer. The home terminal is the persistent full-screen chrome-less | ||
| 124 | desktop; additional terminals are ordinary windows (F1). | ||
| 125 | |||
| 119 | ## Focus | 126 | ## Focus |
| 120 | 127 | ||
| 121 | The single window (if any) that receives keyboard and mouse input. Focus | 128 | The single window (if any) that receives keyboard and mouse input. Focus |
| @@ -142,8 +149,9 @@ address-space separation — all tasks share the one identity-mapped | |||
| 142 | space and the kernel's facilities (TempleOS-style, not a process). | 149 | space and the kernel's facilities (TempleOS-style, not a process). |
| 143 | Tasks are preemptively round-robin-scheduled on the 100 Hz PIT tick; | 150 | Tasks are preemptively round-robin-scheduled on the 100 Hz PIT tick; |
| 144 | the shell is task 0 and an idle `hlt` task is the always-ready | 151 | the shell is task 0 and an idle `hlt` task is the always-ready |
| 145 | fallback. A task may sleep, yield, and log to serial/klog; only the | 152 | fallback. A task may sleep, yield, and log to serial/klog; disk access |
| 146 | shell touches the disk, filesystem, and terminal. A panicking or | 153 | is serialized by a shared disk controller (a re-entrant lock), and each |
| 154 | terminal is its own program instance. A panicking or | ||
| 147 | stack-overflowing task dies gracefully (logged, marked done, slot | 155 | stack-overflowing task dies gracefully (logged, marked done, slot |
| 148 | reaped) without taking the kernel down. | 156 | reaped) without taking the kernel down. |
| 149 | 157 | ||
