DESIGN
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.
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.
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.
$ | % | @ | ANGL | ARC | AT | AUTO | BCKGNDS | BFLASH | BLOCK | CALL | CENTRE | CGOTO | CHAR | CHECK | CIRCLE | CMOB | COLD | COLOUR | COPY | CSET | DELAY | DESIGN | DETECT | DIR | DISABLE | DISAPA | DISK | DISPLAY | DIV | DOWN | DRAW | DUMP | DUP | ELSE | END LOOP | END PROC | ENVELOPE | ERRLN | ERRN | EXEC | EXIT | EXOR | FCHR | FCOL | FETCH | FILL | FIND | FLASH | FRAC | GLOBAL | GRAPHICS | HI COL | HIRES | HRDCPY | INKEY | INSERT | INST | INV | JOY | KEY | LEFT | LIN | LINE | LOCAL | LOOP | LOW COL | MEM | MERGE | MMOB | MOB OFF | MOB SET | MOD | MOVE | MULTI | MUSIC | NO ERROR | NRM | OFF | OLD | ON ERROR | ON KEY | OPTION | OUT | PAGE | PAINT | PAUSE | PENX | PENY | PLACE | PLAY | PLOT | POT | PROC | RCOMP | REC | RENUMBER | REPEAT | RESET | RESUME | RETRACE | RIGHT | RLOCMOB | ROT | SCRLD | SCRSV | SECURE | SOUND | TEST | TEXT | TRACE | UNTIL | UP | USE | VOL | WAVE