## Purpose

Der emulierte Textbildschirm ist die Rendering-Grundlage für `PRINT`,
`LOCATE`, `COLOR`, `CLS` und später die Forms-Engine: Unicode-Zellenpuffer
mit dynamischer Terminalgröße und klassischer 16-Farben-Palette auf
Ratatui.

## ADDED Requirements

### Requirement: Dynamische Terminalgröße mit Mindestmaß
Der Bildschirm SHALL der Terminalgröße folgen (Puffer per `resize`
anpassbar; Inhalt bleibt oben links erhalten, Cursor wird geklemmt).
Die Mindestgröße ist 80×25: kleinere Werte werden auf 80×25 geklemmt,
und ist die Render-Fläche kleiner als 80×25, SHALL nur ein Hinweis
„Terminal zu klein" mit Ist- und Mindestgröße gerendert werden.

#### Scenario: Vergrößertes Terminal
- **WHEN** der Bildschirm auf 120×40 gesetzt wird
- **THEN** sind alle 120 Spalten und 40 Zeilen adressierbar (`LOCATE 40, 120`)

#### Scenario: Zu kleines Terminal
- **WHEN** die Render-Fläche 60×20 misst
- **THEN** erscheint statt des Puffers der Hinweis mit Minimum 80×25

### Requirement: PRINT-Semantik mit Umbruch und Scrollen
`print` SHALL Zeichen an der Cursorposition ausgeben, am rechten Rand
umbrechen und am unteren Rand des Scrollbereichs den Bereich um eine
Zeile nach oben scrollen; `\n` bricht um, `\r` setzt an den Zeilenanfang.
`VIEW PRINT oben TO unten` SHALL das Scrollen auf den Bereich begrenzen;
ohne eigene Einstellung folgt der Scrollbereich der Bildschirmgröße.

#### Scenario: Scrollen in VIEW-PRINT-Bereich
- **WHEN** der Scrollbereich Zeilen 3–5 umfasst und in Zeile 5 ein Umbruch erfolgt
- **THEN** scrollen nur die Zeilen 3–5; Kopfzeilen außerhalb bleiben unverändert

### Requirement: 1-basierte Cursor-API mit Bereichsprüfung
`LOCATE`, `CSRLIN` und `POS` SHALL 1-basiert arbeiten; `LOCATE`
außerhalb der aktuellen Bildschirmgrenzen SHALL als Fehler abgewiesen
werden (Basis für Laufzeitfehler 5).

#### Scenario: Grenzprüfung
- **WHEN** bei 80×25 `LOCATE 26, 1` aufgerufen wird
- **THEN** wird der Aufruf abgewiesen

### Requirement: Klassische Farbpalette und Blink-Simulation
Der Bildschirm SHALL die klassische Palette abbilden (Vordergrund 0–15,
Hintergrund 0–7) und auf ANSI-Indexfarben mappen (klassisch 1 = Blau ↔
ANSI 4 usw.). Blinkende Vordergrundfarben (16–31) SHALL als „hell"
simuliert werden (Farbe − 16, Intensitätsbit gesetzt) — kein echtes
Terminal-Blinken.

#### Scenario: Blink wird hell
- **WHEN** `COLOR 17, 0` gesetzt wird (blinkend Blau)
- **THEN** wird mit heller Vordergrundfarbe 9 gerendert

### Requirement: Unicode-Zellenmodell
Der Puffer SHALL Unicode-Zeichen speichern (keine CP437-Emulation);
aktuell gilt strikt 1 Zeichen = 1 Zelle. (Zeichen mit Darstellungsbreite
2 belegen künftig zwei Zellen — beschlossene Änderung, Umsetzung in
Phase 3 als eigenes Change.)

#### Scenario: Umlaute und Symbole
- **WHEN** `Ä☃` ausgegeben wird
- **THEN** belegen `Ä` und `☃` je genau eine Zelle
