★ APPLICATIONS ★ PROGRAMMATION ★ TURBO-SPRITES (COMPUTE MIT) ★![]() |
Turbo-Sprites (Compute Mit) | Applications Programmation |
Für viel Speicherpkitz gibt es Tempo! Sprite-Routinen für den Schneider gibt es mittlerweile eine ganze Menge. Doch diese haben meistens einige Nachteile. Entweder wird der Hintergrund gelöscht oder mit XOR verknüpft, oder die Routine ist zu langsam. Nun, unsere Sprite-Routine hat auch einen Nachteil, sie verbraucht sehr viel Speicherplatz. Dafür ist sie aber SEHR schnell und von Basic und Maschinensprache aus zu benutzen. Außerdem sind die meisten Basic-Compiler in der Lage, das MC-Programm mit zu verwenden. Um die hohe Geschwin-digkeit der Sprites (eigentlich Shapes) zu erreichen, mußten einige Besonderheiten eingebaut werden. Der Bildschirmspeicher wird an die Adresse &4000 gelegt und verbraucht somit nochmals 16K.Sprites können nur in MODE 0 dargestellt werden. Ein Sprite muß auf jeder Seite zwei nicht gesetzte Pixel haben. Und, last not least, es gibt waagerecht 80 und senkrecht 100 Positionen, auf denen ein Sprite gesetzt werden kann. Haben wir also ein Sprite mit der Größe 16 mal 16 Punkte definiert, kann dieser auf die Positionen 0-72 und 0-92 gesetzt werden. Dies errechnet sich aus der Koordinate minus der halben Größe des Sprites. Wie wurde nun erreicht, daß der Hintergrund nicht zerstört wird? Nichts einfacher als das. Man muß nur auf die Idee kommen. Wie bereits weiter oben gesagt, ist der Bildschirminhalt ab Adresse &4000 nochmals abgespeichert. Um das Sprite herum mußte eine Zone aus zwei gelöschten Pixeln definiert werden. Ein Sprite, das mit der Größe 16 mal 16 definiert wurde, kann also maximal 12 mal 12 Punkte groß sein. Um den Hintergrund beim Setzen des Sprites nicht zu zerstören, passiert folgendes: Ist in einem Byte der Sprite-Daten ein Wert ungleich Null enthalten, dann wird das Byte in den Bildschirmspeicher kopiert. Ist das Daten-Byte aber Null, dann wird aus dem zweiten Bildschirmspeicher ein Byte gelesen und in den eigentlichen Bildschirm geschrieben. Auf diese Weise können sich die Sprites auch überlappen, ohne daß ein Rest stehen bleibt. Soviel zu der verwendeten Technik. Wie kann die Sprite-Routine nun aber genutzt werden? Um die Routinen für den Basic-und auch für den MC-Program-mierer verwendbar zu machen, wurde auf eine Befehlserweiterung mittels RSX verzichtet, Die gesamte Benutzung erfolgt mittels POKE- und CALL-Befehlen. Es folgt nun eine Auflistung der einzelnen Routinen:
Speicherstellen mit Werten versorgt worden sein:
Die Sprite-Adresse wird vom Spritedesigner ausgegeben. Diese sollte man sich aufschreiben. Um einen Sprite über den Bildschirm zu bewegen, ist es nicht nötig, diesen vor der nächsten Bewegung zu löschen. Dies geschieht beim Setzen an die neue Position von selbst, wenn der Sprite nicht mehr als einen Punkt weit bewegt wird. Um einen Sprite ganz zu löschen, verwendet man einen ein-fachen Trick: Es wird einfach ein Sprite definiert, der aus lauter Null-Bytes besteht. Wird dieser jetzt an die Position des zu löschenden Sprites gesetzt, dann verschwindet er. Dazu sehen Sie sich am besten mal das Demo an. Hier noch eine wichtige Information für die MC-Programmierer: Folgende Speicherbereiche sind belegt:
Der Sprite-Designer Dieser ist ein einfacher Editor für Sprites, welcher mit dem Joystick und den Tasten des Zehner-Blocks gesteuert wird. Nach dem Start des Programms werden Sie nach der Sprite-Größe gefragt. Haben Sie diese eingegeben, dann wird die Matrix gedruckt und der Cursor erscheint. Die Farbe, in der gezeichnet wird, ist nun auf PEN 1 eingestellt. Dies kann durch Drücken der Taste 1 (alle Tasten auf dem Zehner-Block) geändert werden. Durch Drücken von Taste 2 kann der Farbwert eines PEN's geändert werden. Durch die Taste 3 kann man sich die Matrix des Sprites auf dem Drucker ausgeben lassen. Mit der Taste . (Punkt) wird der Sprite in den Speicher geschrieben. Durch Betätigen der kleinen ENTER-Taste können die Sprites abgespeichert werden. Punkte werden durch das Drücken des Feuerknopfes gesetzt. Will man Punkte löschen, dann muß vorher PEN 0 gewählt werden. Oben links auf dem Bildschirm erscheint der Sprite in Originalgröße. In der Mitte steht die Adresse des Sprites, welche später der Sprite-Routine übergeben werden muß. Aus diesem Grund sollte man sich diese Adresse aufschreiben. Abgespeicherte Sprites lassen sich vom Basic aus mit dem Befehl LOAD “NAME"&8000 laden. Dies geht allerdings erst dann, wenn die Sprite-Routine, welche in Form eines Data-Loaders vorliegt, mit RUN gestartet und somit initialisiert wurde. Danach muß sofort der Befehl CALL &9250 gegeben werden, sonst gibt es Programmabstürze! Noch ein Wort zum Demo. Dieses darf erst dann gestartet werden, nachdem die Sprite-Routine gestartet wurde. So, nun kann ich Ihnen nur noch viel Spaß und professionelle Programme wünschen. Ottfried Schmidt, Compute Mit
|