DESIGN

Aus C64-Wiki

Wechseln zu: Navigation, Suche
DESIGN
Format: 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
Shortcut: keiner
Verwandte Befehle
MOB SET - @ - CMOB


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

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

Der Befehl DESIGN dient zwei ganz unterschiedlichen Zwecken: Man kann damit den Typ und den Speicherort von Sprites festlegen, aber auch den Speicherort eines bestimmten Zeichens eines Zeichensatzes anwählen. In jedem Fall muss in den auf diesen Befehl unmittelbar folgenden Zeilen die Definition des Aussehens des Sprites oder Zeichens folgen. Definitionen werden mit dem Zeichen @ eingeleitet.

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

[Bearbeiten] 1. Definition eines Sprites

Lautet der Wert des ersten DESIGN-Parameters 0 oder 1, so verwendet man als Programmierer die "Sprite-Abteilung" des Befehls. Der Wert 0 legt fest, dass ein hochauflösendes Sprite aus 24x21 Pixeln definiert werden soll (siehe auch Hires). Eine 1 als Parameterwert teilt dem Interpreter dagegen mit, dass man ein Multicolor-Sprite aus 12x21 Doppelpixeln erzeugen möchte (siehe auch Multicolor).

Der zweite Parameter selektiert den Ort im Speicher des C64, an dem die Pixel der @-Definitionszeilen abgelegt werden sollen (64 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 die gleichen wie auch im C64 ohne Basic-Erweiterung:

Block 13 (ab 832/$0340)
Block 14 (ab 896/$0380)
Block 15 (ab 960/$03C0)
Block 32 (ab 2048/$0800) bis hin zu
Block 255 (ab 16320/$3FC0)
(Achtung: alle Blöcke ab 32 liegen im gleichen Bereich, in dem auch das Basic-Programm selbst abgelegt wird!)

Im Simons'-Basic-Grafikmodus sieht das etwas anders aus:

Block 16 (ab 50176/$C400)
Block 17 (ab 50240/$C440)
Block 18 (ab 50304/$C480)
Block 19 (ab 50368/$C4C0)
Block 48 (ab 52224/$CC00) bis hin zu
Block 63 (ab 53184/$CFC0) und dann
Block 253 (ab 65344/$FF40)
Block 254 (ab 65408/$FF80)
Block 255 (ab 65472/$FFC0)

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

Block 0 (ab 49152/$C000) bis hin zu
Block 19 (ab 50368/$C4C0) und dann
Block 192 (ab 61440/$F000) bis hin zu
Block 255 (ab 65472/$FFC0)
Beispiel 1: 

; 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
; 
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 komplettes Anwendungsbeispiel beim Simons-Basic-
Befehl MOB SET (Beipiel 2).

Multicolor mit DESIGN 1
Beispiel 2: 

; definiert ein Multicolor-Sprite für den Simons'-Basic-Textmodus
; die Zeile 1750 legt weitere Eigenschaften des Sprites fest und macht 
; es schließlich sichtbar
; 
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: MMOB 2,0,0,s8,z8,2,200
1760 END PROC

(entnommen aus dem "Trainingsbuch zum Simon's Basic")

[Bearbeiten] 2. Definition eines Zeichens

Werte von 2 oder 3 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 gerade Parameter steht für den hochauflösenden Modus (s. Hires), der ungerade für Multicolor (s. dort).

Beachten: Leider lässt sich der Multicolormodus für den Textbildschirm in Simons' Basic nicht zusammen mit MEM einschalten (auch nicht mit einem POKE), so dass DESIGN 3 zwar vom Interpreter akzeptiert wird, aber nicht die gewünschte Wirkung erzielt.

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

Beispiel 3: 

; ersetzt das Zeichen Pfund mit dem Zeichenmuster für ß
; funktioniert nur nach dem Befehl MEM
; 
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
Persönliche Werkzeuge