⚙️Zeichenroutinen in Z80
Sechs Wege, ein Software-Sprite auf den Bildschirm zu bringen – jeder als lauffähiges Programm im Emulator, mit Einzelschritt, „Schritt zurück“, Haltepunkten und gemessener Laufzeit.
c) Maskiert (AND Maske / OR Sprite)
Zu jedem Byte gehört ein Masken-Byte (1 = Hintergrund bleibt). AND (HL) stanzt die Figur aus, OR (HL) setzt sie ein. Vorher wird der Hintergrund gesichert, beim Bewegen zurückgeschrieben.
bench_start und bench_end steht der gemessene Aufruf – „Zeitlupe“ oder Einzelschritt zeigen, wie die Figur Zeile für Zeile entsteht.📊 Wie viele Sprites passen in ein Bild?
Ein Bild dauert bei 50 Hz 19 968 µs (312 Rasterzeilen × 64 µs). Auf dem CPC hält das Gate Array den Z80 so an, dass jeder Befehl ein Vielfaches von 1 µs dauert (4 Takte = 1 „NOP“). Die Zahlen unten sind nicht geschätzt, sondern im Emulator gemessen – mit der gemessenen Befehlstabelle von Kevin Thacker. Rechnung: ⌊19 968 µs × Anteil ÷ Kosten⌋, Interrupts nicht abgezogen.
| Routine | zeichnen (µs) | Sprites/Bild | bewegen (µs) | Sprites/Bild | Bytes | Bewegen heißt |
|---|---|---|---|---|---|---|
| a · Kopieren (LDI) | 695 | 28 | 1390 | 14 | 64 | alte Stelle mit Hintergrund überschreiben + neu zeichnen |
| b · XOR | 1255 | 15 | 2510 | 7 | 64 | alt wegXORen + neu zeichnen |
| c · Maske AND/OR | 1511 | 13 | 2901 | 6 | 192 | wiederherstellen 695 + sichern 695 + zeichnen 1511 µs |
| d · Tabelle (Tinte 0) | 1722 | 11 | 3112 | 6 | 384 | wiederherstellen + sichern + zeichnen |
| e · vorverschoben (+1 Pixel) | 2042 | 9 | 3592 | 5 | 400 | wie d, aber 5 statt 4 Bytes breit (auch Sichern/Wiederherstellen) |
| f · kompiliert | 565 | 35 | 1955 | 10 | 466 | wiederherstellen + sichern + Code ausführen |
Bytes: a/b Sprite; c Maske+Sprite verschränkt + Hintergrundpuffer; d/e zusätzlich die 256-Byte-Tabelle (e mit beiden Fassungen); f = Größe des erzeugten Codes. Echte Spiele sparen weiter: INC E statt INC DE bei bekannter Ausrichtung, Zeilenzähler im Code, Sprites über den Stapelzeiger (POP) lesen – die Reihenfolge bleibt aber typisch.