VC 20
Tips & Tricks
6/84, S. 118-119

Tips und Tricks für den VC 20

Nützliche ROM- und RAM-Adressen für den VC 20 wurden schon mehrfach veröffentlicht. Dieser Artikel bringt nun Beispiele, wie diese auch sinnvoll eingesetzt werden können. Denn was nützt das beste ROM-Adressenlisting mit den tollsten Erläuterungen, wenn man keinen Anwendungszweck findet?

Beginnen wir mit der Tonerzeugung. Mancher VC 20-Besitzer hat das möglicherweise schon so oft gelesen, daß er in der Nacht von den Adressen träumt. Tongenerator 1 bis 3: 36874 bis 36876, Generator für weißes Rauschen: 36877, Lautstärke: 36878. Doch die wenigsten wissen, daß man mit der Lautstärke auch den Klang eines Tones entscheidend beeinflussen kann, indem man ihn langsam auf- oder abschwellen läßt.

In der Praxis sieht das so aus, daß man einen bestimmten Ton wählt, dann die Lautstärke langsam aufdreht, eine Weile hält und schließlich wieder langsam abdreht. Wenn man den Ton sofort voll aufdreht und gleich danach langsam abschwellen läßt, klingt es, als ob man auf einem Instrument einen Ton anschlägt, der dann langsam ausklingt. Listing 1 zeigt ein Beispielprogramm mit einer bekannten Melodie.

Die bekannteste Nutzungsmöglichkeit der Lautstärke dürfte wohl die Explosion sein. Man wählt ein tiefes Rauschen und läßt es langsam leiser werden. Das so entstehende Explosionsgeräusch kann sehr gut für Spiele verwendet werden. Das kleine Programm in Listing 2 erzeugt zum Beispiel bei jedem Tastendruck ein anderes Explosionsgeräusch.

Farbige Anleitung

Da wir gerade von Spielen sprechen: Zu einem Spiel gehört auch eine Spielanleitung (auf dem Bildschirm). Und wenn man da einmal etwas ganz besonderes haben will, gibt es die Möglichkeit, innerhalb eines Buchstabens mehrere Farben zu verwenden. Wie geht das? In der Speicheradresse 646 steht die momentan benutzte Farbe. Zulässig sind Werte von 0 bis 7. Addiert man zu einem dieser Werte 8, so wird auf Vierfarbenmodus umgeschaltet und es entstehen bunte, verzerrte Buchstaben.

Diese lassen sich zwar schlechter lesen, ergeben aber zum Beispiel bei Spielprogrammen einen interessanten Effekt (für Textverarbeitung sind sie weniger geeignet).

Save-Schutz

Die Buchstaben setzen sich aus vier Farben zusammen: Aus Hintergrundfarbe, Rahmenfarbe, Hilfsfarbe und der gewählten Zeichenfarbe aus der Adresse 646. Die Hilfsfarbe wird mit den Bits 4 bis 7 aus 36878 definiert. Es ist unbedingt notwendig, daß die Hintergrundfarbe nur einmal dabei vorkommt. Ist nämlich eine dieser Farben gleich der Hintergrundfarbe, so entstehen Lücken in den Buchstaben, und der Text wird so stark verstümmelt, daß er sich nicht mehr lesen läßt. Das Rücksetzen erfolgt einfach durch Umschalten der Zeichenfarbe mit der CTRL-Taste.

Doch nun zu einem anderen Thema: Im VC 20 gibt es einen Vektor, der jedesmal bei der Ausführung des SAVE-Befehls benutzt wird. Er steht in 818/819 und zeigt auf die SAVE-Routine des VC 20. Durch Ändern dieses Vektors kann man die Ausführung des SAVE-Befehls und damit eventuell das unerlaubte Kopieren eines Programms, verhindern. Zum Beispiel kann dieser Vektor durch POKE 818,116:POKE 819,196 auf $C474 gesetzt werden. Nach Eingabe des SAVE-Befehls erscheint dann immer direkt READY, ohne daß etwas passiert. Eine andere Möglichkeit ist, eine Fehlermeldung auszugeben. Dies geschieht durch POKE 818,53:POKE 819,196, wodurch der Zeiger auf $C435 gesetzt wird. Nach der Eingabe von SAVE erscheint »OUT OF MEMORY ERROR«.

Doch die wirksamste Möglichkeit wird wohl die sein, das Programm durch den SAVE-Befehl zu löschen, indem man den SAVE-Vektor auf $FD22 setzt. Dies geschieht durch POKE 818,34: POKE 819,253. Nach Eingabe des SAVE-Befehls erscheint die Einschaltmeldung, und das Programm ist gelöscht.

Leider ist es mit diesen zwei POKE-Befehlen nicht getan. Denn durch gleichzeitiges Drücken der STOP- und RESTORE-Taste werden sie sofort wieder rückgängig gemacht. Es muß also zusätzlich noch die RESTORE-Taste abgestellt werden. Das geht einfach mit POKE 37150,2. Danach hat die RESTORE-Taste keine Funktion mehr. Wenn nötig, kann sie durch POKE 37150,130 wieder eingeschaltet werden. Dieser POKE-Befehl schreibt in das Interrupt-Enable-Register des VIA 6522 # 1 des VC 20, der für den NMI zuständig ist.

Doch nun wollen wir keine Tasten außer Betrieb setzen, sondern welche abfragen. Oft steht man vor dem Problem, mehrere Funktionen gleichzeitig zu steuern. Leider kann man in Basic immer nur eine Taste auf einmal abfragen, weitere gedrückte Tasten werden normalerweise nicht erkannt.

Zehn Tasten gleichzeitig abfragen

Aber glücklicherweise gibt es beim VC 20 eine Möglichkeit, sieben Tasten auf einmal abzufragen. Die Bits 1 bis 7 der Speicherstelle 145 entsprechen folgenden Tasten: Der linken Shift-Taste, X, V, N, ≠, ? und Cursor up/down. Die Taste ist gedrückt, wenn das entsprechende Bit gelöscht ist.

Nun läßt sich das ganze mit der Speicherzelle 653 noch erweitern. Bit 0 entspricht den Shift-Tasten, Bit 1 der Commodore-Taste und Bit 2 der CTRL-Taste. Im Gegensatz zu den sieben anderen Tasten sind hier jedoch die entsprechenden Bits bei Tastendruck gesetzt.

Der Computer unterscheidet übrigens zwischen der rechten und der linken Shift-Taste. Mit der Abfrage PEEK (145) AND 2 OR PEEK (653) AND 1 kann man zwischen beiden Shift-Tasten unterscheiden. Sie ergibt normalerweise 2, beim Drücken der linken Shift-Taste 1 und beim Drücken der rechten Shift-Taste 3. Shift lock entspricht der linken Shift-Taste.

(Thomas Gruber/ev)
1 rem ton-demo
2 rem ========
3 rem
4 rem
5 dim t(5)
10 for x=1 to 5:read t(x):next
15 read t,d:poke 36875,t(t):poke 36876,t(t)
20 if d=-1 then end
25 for x=15 to 0 step -1
30 poke 36878,x
35 for y=1 to 3*d:next y
40 next x
45 goto 15
50 rem
55 rem
60 data 195,201,207,209,215
65 data 5,1,3,1,3,6,4,1,2,1,2,6
70 data 1,1,2,1,3,1,4,1,5,1,5,1,5,6
75 data 5,1,3,1,3,6,4,1,2,1,2,6
80 data 1,1,3,1,5,1,5,1,1,6,0,1
85 data 2,1,2,1,2,1,2,1,2,1,3,1,4,6
90 data 3,1,3,1,3,1,3,1,3,1,4,1,5,6
95 data 5,1,3,1,3,6,4,1,2,1,2,6
100 data 1,1,3,1,5,1,5,1,1,6
105 data 0,-1
Ton-Demo
1 rem explosionen
2 rem ===========
3 rem
4 rem
10 g=36877:l=36878:x=rnd(1)*100+130
15 for i=15 to 0 step -1
20 poke g,x+i:poke l,i
25 for d=1 to 240-x:next d
30 next i
35 poke g,0:poke l,0
40 get a$:ifa$="" then 40
45 run
Explosionen
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →