★ APPLICATIONS ★ PROGRAMMATION ★ SUPRA-BASIC (COMPUTE MIT) ★ |
Supra-Basic (Compute Mit) | Applications Programmation |
Spiel, Utility & Erweiterung erweitert den Schneider Befehlssatz um 32 neue Befehle, hier in alphabetischer Reihenfolge: BANK, BIGOFF, BIGON, BYE, CALM, COPY, CRUNCH, DISPLAY, DOKE, ESY, EX, FAST, FIELD, HELP, HIDE, INV, LFIN, LFOUT, LTURN, NI, NOISE, PEY, PICO, QUAD, RTURN, SHOW, SPRITE, STRETCH, SYM, TRAP, WOWN, WUP. Allgemein: "*SUPRA-BASIC*" wurde für den CPC 464 geschrieben. Die Befehlserweiterung ist so ausgelegt, daß sie auch auf dem CPC 464 mit angeschlossenem Diskettenlaufwerk voll funktionsfähig ist, wobei man bei den Kassettenbefehlen FAST, LFIN und LFOUT natürlich Einschränkungen machen muß : FAST erhöht zwar die Schreibgeschwindigkeit auf 3500 Baud, zur Beschleunigung des Diskettenlaufwerks ist der Befehl jedoch ungeeignet, ebenso wie sich LFIN und LFOUT nur auf Kassettenfiles beziehen. "*SUPRA-BASIC*" belegt den Speicher von &A000 bis &A520. Da es jedoch möglich ist, Sprites und Pictures zu definieren, kann der Speicherplatz nochmals um 4 KByte verkleinert werden, weil die Picture-DATAs von &9000 bis &97FF und die Sprite-DATAs von &9800 bis & 9FFF abgelegt werden. Es ist also das Kommando MEMORY &8FFF erforderlich, um die DATAs nicht zu überschreiten; arbeitet man jedoch ohne Sprites und Pictures, genügt natürlich MEMORY 8c 9FFF. Einige Befehle arbeiten mit Variablen. Diese Variablen müssen vorher schon benutzt worden sein, weil sonst bei (Klammeraffe) z $ (als Beispiel) ein "Improper argument” ausgegeben wird. Es emphielt sich, die Befehlserweiterung als binäre Datei abzuspeichern, um schnell darauf zu-rückgreifen zu können. Hierfür muß man eingeben: POKE &A000,1 : SAVE "SB.BIN", b, &A000, &520 Man kann "*SUPRA-BASIC*" dann mit LOAD "SB.BIN", & A000 schnell wieder laden, z. B. vom Programm aus, wie es ja auch bei MADGOON'S RACE" geschieht. Überhaupt ist dieses Demo-Program in die beste Möglichkeit, die Wirkung der Befehle zu illustrieren. Die Spielidee selbst ist natürlich uralt, sie ist von "FROGGER" übernommen, das Männchen darf auf seinem Weg zum oberen Bildrand Nichts berühren, was sich bewegt. Die Musik kann mit der Leertaste an- und ausgeschaltet werden, wonach das Programm ein wenig schneller abläuft, da die SOUND-Routine doch ein bißchen Zeit in Anspruch nimmt, das Spielgeschehen aber nicht direkt beeinflußt. Das Programm hat eine eigene TOP-TEN Verwaltung, die auf Diskettenbetrieb ausgelegt ist. Die nötige Änderung für die Kassette ist jedoch kein Problem. Man läßt in Zeile 2520 alles bis zur FOR-NEXT Schleife weg und setzt in den Zeilen 1080 und 2500 an die Stelle von "toptenüP nur "!top ten.fil. Beim Abspeichern der neuen TOP-TEN muß die Kassette natürlich wieder an die riehtige Stelle zurückgespult worden sein. Die Version von "MAGDON'S RACE" auf der beigefügten Kassette ist so nicht lauffahig, da auf dem Band weder die Binärform von ”*SUPRA-BASIC*” noch die TOP-TEN-FILE vorhanden ist. Überspielen Sie das Programm bitte auf Diskette, speichern Sie wie beschrieben "*SUPRA-BASIC*" als Binärdatei ab und SAVEn Sie dann die TOP-TEN wie folgt: FOR l = 1 TO 10: nam$(1) -"SUPRA-SOFT": pu(1) = 0: day$ (1) - "01.01.1986": NEXT: OPENOUT "topien.fil”: FOR l = 1 TO 10: ? #9, nam$(1): ? #9, pu(1): ? #9, day$(1): NEXT: CLOSEOUT.Erläuterungen der Befehle: BANK, wert Dieser Befehl wählt die angegebene Bildschirmbank (1 oder 3). Ist der übergebene Wen 1, wird Bank 1 gewählt (&4000 - &7FFF), bei allen anderen Werten Bank 3. Will man beide Bildschirminhalte gleichzeitig benutzen (siehe auch COPY und DISPLAY), empfiehlt es sich, anfangs bei jeder Bildschirmbank ein MODE-Kommando zu setzen, um den eventuell verschobenen Offset auf den Ausgangswert zu bringen. BIGOFF, BIGON siehe unter SPRITE. BYE Nach diesem Kommando ist die Befehlserkennung durch RSX unmöglich, die Maschinenroutinen sind jedoch noch vorhanden (ab &A104). CALM Erzeugt eine Pause beim SOUND. Die unterbrochene Melodie kann jedoch mit NOISE lückelos fortgesetzt werden. COPY Kopiert den Inhalt von Block 3, also dem Bildschirmspeicher von &C000 - &FFFF, in Block 1 (von &4000 - &7FFF). CRUNCH Dieser Befehl ist an sich nur während des Programmierens nützlich. Sobald die Zeileneingabe durch >ENTER< beendet wird, werden alle überflüssigen Leerzeichen in dieser Zeile entfernt, wenn vorher CHRUNCH eingeben wurde. Das nochmalige Verwenden des Befehls hebt den Effekt wieder auf. DISPLAY Das Gegenstück von COPY. Der Inhalt von Block 1 wird in den Block 3 kopiert. DOKE, adresse, zwei-byte-zahl Poked Zwei-Byte-Zahlen in den Speicher. Das Lowbyte wird an >adresse<, das Highbyte an >adresse + 1< abgelegt, also gebrauchsfertig für ein MC-Programm. ESY, reihe von picturenummern Siehe unter SYM. EX, status (Klammeraffee) variable 1, (Klammeraffee) variable 2 Vertauscht die beiden Variablen, d. h. deren Inhah. Der Status gibt an, um welchen Variablentyp es sich handelt (2 = INTEGER, 3 = STRING, 5 = REAL). FAST Dieser Befehl erhöht die Schreibgeschwindigkeit auf die Kassette auf 3500 Band FIELD, spalt, zeiile, (Klammeraffee) integervariable Der ASCII-Code des Zeichens an der übergebenen Cursorposition wird in der Variablen von TYP INTEGER gespeichert. Dieser Befehl gibt dem User also die bisher fehlende Möglichkeit, den Bildschirm abzufragen. HELP Ein nützlicher Befehl, wenn der Computer verrückt spielen sollte. HELP bewirkt folgendes: MODE 1: BORDER 1: PAPER 0: PEN 1: CLS, alle INKs werden wieder initialisiert, ebenso die komplette Tastatur. SPEED INK und SPEED KEY werden auf die Anfangswerte gesetzt, jeder Break-Schutz wird aufgehoben, sowie jeder SOUND endgültig abgewürgt. Ein völliges Reset durch CTRL+SHIFT + ESC ist wieder möglich. Programm und Variablen werden von HELP beeinflußt HIDE Hat man ein Programm im Speicher, das man nicht zerstören will, möchte aber zwischendurch ein anderes bearbeiten (z. B. ein Spiel), gibt man HIDE ein und lädt das zweite Programm. Ist man damit fertig, braucht man, um an das alte Programm zu kommen, nur SHOW einzugeben. Das eben gespielte Spiel ist verschwunden - das alte Programm ist wieder im Speicher!!! INV Vertauscht PAPER und PEN. Die gleiche Wirkung hätte z. B. PRINT CHR$(24). LFIN, (Kiammeraffee) stringvariable Der Name des letzten Programmes, das von Kassette geladen wurde, wird in der Stringvariablen gespeichert oder auf den Bildschirm ausgegeben, wenn man nur LFIN einrippt. LFOUT, (Klammeraffee) stringvariable Wie LFIN, nur daß der Befehl ich auf das letzte auf Band gesavete Programm bezieht. LTURN, reihe von Zeilennummern Die angegebenen Zeilen werden um ein Byte nach links gescrollt. NI, sekundenzahl Der Interpreter wartet die angebene Anzahl von Sekunden, ehe er mit dem Programm weitermacht. Während der Wartezeit (max. 255 Sekunden) ist der Rechner nicht beeinflußbar. NOISE Siehe unter CALM. PEY Dieses Kommando hält den Interpreter so lange an, bis irgendeine Taste gedrückt wird. PICO, spalte, zeile, pen, picturenummer Siche unter SYM. QUAD, links, rechts, oben, unten, wert Zeichnet Rechtecke in der übergebenen Farbe (Die Farbtabelle ist im Programm angegeben). Die ersten vier Parameter-werte beziehen sich auf Cursorpostionen, Beispiele: Im Mode 0 ergibt QUAD, 1,20, 1, 2, 240, das die beiden obersten Zeilen mit schwarz gefüllt werden, im Mode 1 ergibt QUAD, 21, 40, 13, 25, 255, daß das Bildschirmviertel rechts unten mit hellrot gefüllt wird. RTURN, reihe von zeilennummern Wie LTURN, die Zeilen werden nur nach rechts geschoben. SHOW Siehe unter HIDE SPRITE, spalte, zeile, spritenummer "*SUPRA-BASIC*" ermöglicht die Handhabung von Sprites, d. i. Multicolorzeichen im Mode 0. Es ist möglich, mit den Befehlen BIGON und BIGOFF zwischen großen und kleinen Sprites zu wählen. Ein kleiner Sprite belegt ein Cursorfeld, ein großer 2x2 Cursorfelder. Die kleinen benötigen 32, die großen demnach viermal so viel, nämlich 128 Farbwerte (d. i. Bytes im Speicher). Der Platz für diese Farbdaten liegt zwischen &9800 und &9FFF, man kann also gleichzeitig bis zu 16 BIGSPRITES (Nummer 0 bis 15) oder maximal 64 (!) kleine Sprites (0-63) verwalten, beides ist natürlich kombinierbar. Beispiel für die Benutzung von SPRITE, BIGON und BIGOFF: Neben den Befehlsroutinen wird auch ein Beispielsprite in den Speicher gepoked. Meldet sich der CPC nach Programmende mit Ready, bitte MODE 0 eingeben und nach der erneuten Ready-Meldung >ENTER< drücken. Nach der Eingabe von SPRITE, 6,1,0 wird rechts neben dem READY der SPRITE ausgegeben. Tippt man nun BIGOFF und anschließend |SPRITE, 13, 3, 2, so erscheint anstelle der 0 nun der linke untere Teil des BIGSPRITES. Nach |BIGNON: spritc, 19,24,0 erscheint ganz rechts unten wieder der große Sprite. Bei großen Sprites bezeichnet die übergebene Cursorposition immer den linken Teil des Sprites, bei kleinen direkt das Ausgabe feld. STRETCH, spalte, zeile, zeichenanzahl Ab der angegebenen Position wird nach rechts gehend bei der übergebenen Anzahl von Cursorfeldern deren Inhalt auf doppelte Höhe gestreckt. Beispiel: Nach Programmende wie oben MODE 0 und nochmals >ENTER< eingeben, dann |STRETCH, 2, 1, 3 tippen, so werden bei Ready ab dem e (Position 2,1) das e selbst, sowie a und d um den Faktor zwei gestreckt (3 Buchstaben). Es ist auch möglich, Sprites zu strecken! Deutlich wird das, wenn man eingibt |BIGON: |SPRITE, 16,1,0: |STRETCH, 16,2,2. Der untere Teil des Sprites ist nun doppelt so hoch. Einen ganzen Sprite strecken Sie so (z. B.): MODE 0: |SPRITE, 19, 12, 0: |SPRITE, 19, 13, 0: |STRETCH, 19, 12, 2: |STRETCH, 19,14, 2 In den beiden anderen Modi ist der Befehl umständlicher zu handhaben, der Effekt stellt sich natürlich auch ein, hauptsächlich wurden die Befehle ftir die graphischen Tricks allerdings für den MODE 0 konzipiert. SYM, reihe von ascii-werten, picturennummer "*SUPRA-BASIC*” erlaubt auch die Verwendung von sog. Pictures, was als Kette von ASCII-Zeichen zu verstehen ist (max. 32 pro Picture). Es können auch Zeichen mit einem ASCII-Code < 32 verwendet werden. Ein Picture wird über SYM definiert, mit PICO ausgegeben und muß mit ESY gelöscht werden, ehe an seiner Stelle ein neues erstellt werden kann. Beispiel: Die folgenden Basic-Ausdrücke: a$ - CHR$(255) + CHR$(254) + CHR$(8) + CHR$(8) + CHR$(10) + CHR$(253) + CHR$(252): PEN 2: LOCATE 21, 14: PRINT a$sehen mit Pictures so aus: |SYM, 255, 254, 8, 8, 10, 252, 0: |PKO, 21, 14, 2, 0 Das erzielt den gleichen Effekt! Als Picturenummer wurde hier 0 verwendet, man kann natürlich andere (0 bis 63) verwenden. Die Werte sind im Speicher von &9000 bis &97FF abgelegt. Soll Picture 0 neu definiert werden, muß zuerst ESY, 0 eingegeben werden, um die ursprünglichen Daten völlig zu löschen, bevor man das Picture neu definiert. ESY löscht auch mehrere Pictures, zum Beispiel ESY, 8, 15, 16, 33, 50. TRAP, wert Bei TRAP, 0 wird der Transparentmodus aus-, bei TRAP, 1 eingeschaltet. WOWN, links, rechts, oben, unten, wert Parameter wie bei QUAD. Das so definierte Textfenster wird nach unten gescrollt, der Paper der neuen Zeile entspricht dem letzten Wert. WOWN ist unabhängig von Basic-Windows! WVP, links rechts, oben, unten, wert Wie bei WOWN, nur wird hier auch oben gescrollt. Anleïrung fur den Spritegenerator Nach dem Anfangsbild wird der Bildschirm schwarz, ein Rechteck wird gezeichnet, über welchem die Farbanzeige zu sehen ist - um Anfang ein dunkelblaues Rechteck (INK 0). Durch Drücker der Space-Taste kann die INK-Nummer erhöht werden. Wenn man z. B. jetzt drückt, erscheint hellgelb (INK 1), dann helles Blaugrün (INK 2) usw. Nach INK 15 wird wieder bei 0 begonnen. Die Farbe des Rechtecks ist die momentane Zeichenfarbe. Drückt man gleich zu Beginn die COPY-Taste, so wird das Cursorfeld links oben (wo der gelbe Punkt ist) blau. Steuert man den gelben Punkt mit den Cursortasten auf das Feld rechts daneben, drückt dreimal die Leertaste, so daß die Zeichenfarbe auf hellrot wechselt und drückt dann COPY, wird ein rotes Feld gesetzt. Die beiden Punkte dieses BIGSPRTTES wären links oben dann dunkelblau und hellrot Man kann also einen großen oder vier kleine Sprites in diesem Spritegenerator erstellen. Die Farbwahl kann jedoch auch direkt erfolgen. Um von hellrot wieder auf dunkelblau zu kommen, müßte man über zehnmal die Leertaste drücken. Man kann jedoch den kleinen gelben Punkt mit den Cursorn auf das blaue Feld lenken und "W" drückcn. Dunkelblau als Zeichenfarbe wird dann direkt gewählt, ist der Sprite fertig, drückt man "E", es erscheint das Wort "Calculating". Das Maschinenprogramm berechnet aus den INK-Werten, die mit der Funktion TEST (X,Y) abgefragt und dann in den Speicher gepoked wurden, die 128 codierten Werte in ca. 0,1 Sekunden (die entsprechende Basic-Routine wäre esu 200mal langsamer). Nach der Codierung wird der Sprite gezeigt. Das Programm fragt dann, ob man weitermachen oder die Arbeit beenden will Drückt man WR” für RUN, wird man aufgefordert, dem Sprite einen Namen zu geben, unter dem dieser dann abgesaved wird. Das Programm erstellt vier DATA-Zeilen (Nummer 1 - 4), die als Datei gespeichert und mit dem Befehl MERGE "SPRITENAME.spr" in jedes Programm eingebunden werden können. Jede dieser Zeilen enthält 32 codierte Farbwerte.
|