- Interessanter Beitrag
Hallo zusammen,
angeregt durch die Kommentare zur 20 Zeilen Basic Compo habe ich mal versucht, in BASIC farbige Rasterbars und einen Spritemultiplexer zu basteln. Das geht tatsächlich! Als Dateianhang findet Ihr ein ZIP-Archiv mit zwei BASIC-Programmen "basicraster.prg" und "basicmultiplex.prg" plus Quelltexte.
Bitte melde dich an, um diesen Anhang zu sehen.
Bitte melde dich an, um diesen Anhang zu sehen.Bitte melde dich an, um diesen Anhang zu sehen.
Wie funktioniert's?
Allgemein bekannt ist, dass Rasterbars und Spritemultiplexer eigentlich ganz simpel sind: Man muss nur "schnell genug" verschiedene Farben nach 53280 schreiben bzw. die Sprite-X- und -Y-Koordinaten schnell genug neu setzen, und das immer wieder, 50 mal pro Sekunde, möglichst an genau derselben Rasterposition wie vorher, damit es nicht flackert. Das Schreiben der Farbe oder das Setzen der Sprite-Koordinaten macht man in BASIC natürlich mit POKE.
Leider schafft BASIC in einer 1/50 Sekunde gerade mal 2 oder 3 POKE-Befehle. Was nun?
Die Idee kam mir, als ich meinen Beitrag "B-Bert" zur 20 Zeilen Basic Compo programmiert habe: Man kann in BASIC mittels POKE648,x dem BASIC weismachen, dass die Zeichen des Textbildschirms nicht wie üblich ab 1024 im Speicher liegen, sondern an einer anderen Stelle. Als andere Stelle nehme ich nun 53248, d.h. die Adresse des VIC! Ab jetzt muss ich natürlich sehr vorsichtig sein, denn alle "Bildschirmausgaben" werden in den Speicherbereich ab 53248 geschrieben, d.h. in VIC-Register. Nun kann ich mit PRINT"{Home}A"; zum Beispiel eine 1 in die Adresse 53248 schreiben. (Das Zeichen "A" hat den Bildschirmcode 1.) Auf diese Weise kann ich mit PRINT natürlich auch gleich mehrere Zeichen hintereinander schreiben. Oder ich kann mit PRINT"A{Left}B{Left}C"; direkt nacheinander die Werte 1, 2 und 3 in dieselbe Speicherstelle schreiben.
Schaut Euch mal die beiden Programm bzw. die Quelltexte an, um am Beispiel zu sehen, wie ich das meine.
Wenn Ihr die Programme laufen lasst, könnt Ihr leider nicht mehr mit RUNSTOP+RESTORE zurück, denn dabei wird der veränderte Wert in 648 nicht zurückgesetzt. Das BASIC will dann also den Bildschirm löschen und "READY." ausgeben, schreibt dabei aber munter in VIC-Register, so dass man nur noch einen leeren Bildschirm erhält und quasi gar nichts mehr geht.