DESIGN
Aus C64-Wiki
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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).
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
