DESIGN

Aus C64-Wiki
Zur Navigation springenZur Suche springen
DESIGN
Syntax: DESIGN <n>, <ad>
Parameter
n: 0, 1, 2 oder 3
ad: Speicheradresse
Einordnung
Typ: Anweisung
Kontext: Sprites oder Zeichensatz
Aufgabe: Definiert Typ und Speicherort eines Sprites oder Zeichens
Abkürzung: keine (TSB: deS)
Token: $64 $62 (100 98)
Verwandte Befehle
MOB SET - @ - CMOB - MEM - MOBCOL


Dieser Artikel beschreibt das Simons'-Basic-Schlüsselwort DESIGN.

Typ: Anweisung
Syntax: DESIGN <n>, <ad>

Der Befehl DESIGN dient zwei ganz unterschiedlichen Zwecken: Einerseits füllt er den bei MOB SET als Speicherort <ad> angegebenen Sprite-Block mit den Darstellungsdaten. Andererseits hat er die gleiche Funktion für den Speicherort <ad> eines bestimmten Zeichens in einem selbstdefinierten Zeichensatz. Auf diesen Befehl folgen unmittelbar die Zeilen der Definition des Aussehens des Sprites oder Zeichens. Definitionszeilen werden mit dem Zeichen @ eingeleitet.

DESIGN und @ sind untrennbar miteinander verknüpft. Das eine ohne das andere führt zu einem ?SYNTAX ERROR (keine DESIGN-Zeile) bzw. ?TOO FEW LINES ERROR oder ?BAD CHAR FOR A MOB ERROR (keine oder zu wenige @-Zeilen).


Definition eines Sprites[Bearbeiten | Quelltext bearbeiten]

Lautet der Wert des ersten DESIGN-Parameters <n> 0 oder 1 (bei TSB auch 5), so verwendet man als Programmierer die "Sprite-Abteilung" des Befehls. Der Wert 0 legt fest, dass ein hochauflösendes Sprite aus 24×21 Pixeln definiert werden soll (siehe auch Hires). Eine 1 (oder 5) als Parameterwert teilt dem Interpreter dagegen mit, dass man ein Multicolor-Sprite aus 12×21 Doppelpixeln erzeugen möchte (siehe auch Multicolor und die Erläuterungen zu @).

Der zweite Parameter <ad> selektiert den Ort im Speicher des C64, an dem die Pixel der @-Definitionszeilen abgelegt werden sollen (Anzahl: 63 Bytes). Welche Speicherbereiche dies sein können, hängt davon ab, welche Speicherbank der Videochip des C64 (VIC) gerade anzeigt. Dies können unter Simons' Basic standardmäßig zwei Bereiche sein: Bank 0 (im Textmodus) von $0000 bis $3FFF und Bank 3 (im Grafikmodus bzw. bei verändertem Zeichensatz) von $C000 bis $FFFF. Die Adresse eines solchen Definitionsblocks errechnet sich nach folgender Formel: ad = Bankbasisadresse + 64 * Block.
Für ein Sprite in Block 19 im Grafikmodus käme dann heraus: ad = $C000 + 64 * 19 = $C4C0.

Die freien Speicherbereiche (Blöcke) in Bank 0 sind (fast) die gleichen wie auch im C64 ohne BASIC-Erweiterung:

Block Adresse dezimal
11 $02C0 704
13 $0340 832
14 $0380 896
15 $03C0 960
32 $0800 2048
.. + $40 + 64
255 $3FC0 16320

Achtung: Alle Blöcke ab Block 32 liegen im Bereich des im Speicher befindlichen BASIC-Programms! In TSB wird Block 11 auch von INSERT verwendet.

Im Simons'-Basic-Grafikmodus sieht das so aus:

Block Adresse dezimal
16 $C400 50176
.. + $40 + 64
19 $C4C0 53184
48 $CC00 50176
.. + $40 + 64
63 $CFC0 65344
253 $FF40 50176
.. + $40 + 64
255 $FFC0 65472

Achtung: Anders in TSB! Dort wird der Bereich von $C400 bis $C4FF für CALL und EXEC verwendet. Wenn PROCs im Programm vorkommen, steht aufsteigend immer weniger Platz für Sprites zur Verfügung. Das bedeutet, dass Block 16 gar nicht eingesetzt werden darf und die drei anderen nur dann, wenn es die Anzahl der PROCs erlaubt.
Die Blöcke 48 bis 63 dürfen in TSB auf keinen Fall verwendet werden, da dann Code gelöscht würde.

Wenn man mit MEM einen neuen Zeichensatz aktiviert, sieht der Plan der freien Speicherblöcke unter Simons’ Basic wiederum anders aus:

Block Adresse dezimal
0 $C000 49152
.. + $40 + 64
19 $C4C0 50368
192 $F000 61440
.. + $40 + 64
255 $FFC0 65472

Achtung: Auch hier trifft die Einschränkung im Bereich $C400 bis $C4FF unter TSB zu.

Beispiel 1[Bearbeiten | Quelltext bearbeiten]

Dieses Beispiel definiert ein hochauflösendes Sprite für den Simons'-Basic-Textmodus.
Die Zeile 1750 legt weitere Eigenschaften des Sprites fest und macht es schließlich sichtbar. In TSB können die vier letzten Parameter von MMOB auch wegfallen.

Hires mit DESIGN 0 (weißer Rahmen)
1700 PROC sprite
1710   DESIGN 0, 15*64
1720   @bbbbbbbbbbbb............
1721   @bbbbbbbbbbbb............
1722   @bb........bb............
1723   @bb........bb............
1724   @bb........bb............
1725   @bb........bb............
1726   @bb........bb............
1727   @bb........bb............
1728   @bb........bb............
1729   @bb........bb............
1730   @bbbbbbbbbbbb............
1731   @bbbbbbbbbbbb............
1732   @........................
1733   @........................
1734   @........................
1735   @........................
1736   @........................
1737   @........................
1738   @........................
1739   @........................
1740   @........................
1750   MOB SET 1,15,1,0,0: s8=38: z8=80: MMOB 1,s8,z8,s8,z8,0,0
1760 END PROC

Ein weiteres Anwendungsbeispiel beim Simons-Basic-Befehl MOB SET Beipiel 2.

Beispiel 2[Bearbeiten | Quelltext bearbeiten]

Dieses Beispiel definiert ein Multicolor-Sprite für den Simons'-Basic-Textmodus.
Die Zeile 1750 legt weitere Eigenschaften des Sprites fest. 1765 macht es schließlich sichtbar.

Multicolor mit DESIGN 1
1700 PROC msprite
1710   DESIGN 1, 14*64
1720   @...bbbbb....
1721   @.bbb...bbb..
1722   @bb.cc.cc.bb.
1723   @bb...c...bb.
1724   @bb...c...bb.
1725   @.bbbcccbbb..
1726   @...bbbbb....
1727   @b...ddd.....
1728   @bb..ddd.....
1729   @bbbbdddbb...
1730   @..bbdddbb...
1731   @....ddd.bb..
1732   @....ddd..bb.
1733   @....ddd...b.
1734   @....ddd.....
1735   @..ccc.ccc...
1736   @.ccc...ccc..
1737   @.cc.....cc..
1738   @ccc.....ccc.
1739   @ccc.....ccc.
1740   @bbbbbbbbbbbb
1750   COLOUR 9,9: MOB SET 2,14,8,0,1: CMOB 7,6: s8=300: z8=205
1765   MMOB 2,0,0,s8,z8,2,200
1760 END PROC

Entnommen aus dem "Trainingsbuch zum Simon's Basic".


Definition eines Zeichens[Bearbeiten | Quelltext bearbeiten]

Werte von 2 oder 3 (in TSB auch 7) für den ersten Parameter von DESIGN führen in die Interpreter-Abteilung "Festlegen eines Zeichens für einen neuen Zeichensatz". Auch hier gilt: der mathematisch gerade Parameter steht für den hochauflösenden Modus, der ungerade für Multicolor. DESIGN 2 oder 3 funktioniert nur nach Anwendung des Befehls MEM.

Beachten: Der Multicolormodus für den Textbildschirm in Simons' Basic ist nicht ohne Weiteres nutzbar, da der Auswahlbefehl für den Zeichensatz (CSET) die Änderungen von MEM bei Simons' Basic wieder rückgängig macht und die gewünschte Wirkung nicht erzielt wird (in TSB ist dieser Mangel behoben).

Der zweite DESIGN-Parameter selektiert die Adresse des Bitmusters des zu definierenden Zeichens. Die Simons'-Basic-Basisadresse für eigene Zeichensätze (normalerweise $E000) muss bei der Berechnung ausdrücklich eingeschlossen werden, so dass die folgende Formel für alle Zeichen geeignet ist: ad = $E000 + 8 * Bildschirmcode.
Beispiel: Die Adresse des Zeichens "x" lautet also ad = $E000 + 8 * 24 = $E0C0.

Das Bitmuster selbst wird in den auf DESIGN folgenden Code-Zeilen nach einem einleitenden @-Symbol definiert. Die auf @ folgenden zulässigen Zeichen sind im Artikel zu @ beschrieben.


Beispiel

Dieses Beispiel ersetzt das Zeichen Pfund (£) mit dem Zeichenmuster für ß.

1700 PROC eszett
1710   DESIGN 2, $E000 + 8 * 28
1720   @........
1721   @..BBBB..
1722   @.BB..BB.
1723   @.BBBBB..
1724   @.BB..BB.
1725   @.BB..BB.
1726   @.BBBBB..
1727   @.BB.....
1760 END PROC

Da nach MEM der Bereich der Grafikbefehle ($E000 bis $FFFF) zur Hälfte mit dem veränderten Zeichensatz belegt ist, darf Grafik nicht mit HIRES eingeschaltet werden (sondern nur mit CSET 2) und nur eingesetzt werden ab Y-Koordinate 104 (Speicherbereich ab $F000), sonst zerstört sie den Zeichensatz.