Erschienen in 64'er Magazin, Ausgabe 01/1994 · Originaldatei: BESTOF.TXT
Hinweis: Dies ist das an die Redaktion eingereichte Manuskript, nicht der gedruckte Endtext. Layout, Bildunterschriften, Korrekturen und Kürzungen der Redaktion können in der veröffentlichten Fassung abweichen.
| Objekt | 64'er Magazin |
|---|---|
| Ausgabe | 01/1994 |
| Rubrik | Leserforum-Extra |
| Redakteur | AW Arnd |
| Autor | Nicki Heusler, XXX/XXXXXX |
| Datum | 30.10.93 |
| Thema | Best of 64'er Leserforum |
Markt & Technik proudly presents
Das Beste aus dem 64'er Leserforum
Eine geballte Ladung Tips und Tricks haben wir in den letzten Jahren im Leserforum veröffentlicht - gefunden von Ihnen, unseren Lesern. Sozusagen als kleine Zwischenbilanz finden Sie auf den nächsten Seiten nur das Beste aus unserer Service-Rubrik.
von Nikolaus Heusler und Arnd Wängler
Das Leserforum ist der ideale Treffpunkt für unsere Leser. Sie können einen exotischen (oder auch nicht exotischen) Drucker nicht anpassen? Er druckt einfach nur Müll? Ihr Floppy-Laufwerk mag nicht mehr? Sie finden keine Software für Ihr Problem oder Ihren Rechner? Irgend ein auf dem Flohmarkt erworbenes unbekanntes Produkt soll Kontakt mit dem C 64 aufnehmen? Sie suchen Tips zu einem Spiel? Für das selbstgeschriebene Programm fehlt eine wichtige Routine? Vielleicht geht es auch nur darum, wie man einen anderen Monitor anschließt, Software für andere Computer umschreibt oder die Adresse einer Firma aufzutreiben. All das sind klare Fälle für das 64'er Leserforum.
Fast zweitausend Anfragen haben wir in den letzten knapp zehn Jahren im Forum veröffentlicht. Grund genug, zurückzublicken und das Beste, Wichtigste und am meisten Gefragte noch einmal hervorzuholen. Auf den nächsten sechs Seiten finden Sie viele »Evergreens«. Damit in diesem Berg an Wissen Ordnung herrscht, haben wir die Anfragen geordnet nach Themengebieten: Basic, Assember, Grafik, Floppy, Drucker, Hardware, Spiele, Sonstiges. Im Gegensatz zum »normalen« Leserforum, das Sie natürlich auch in dieser Ausgabe finden, wurden hier nur Fragen mit Antwort zusammengestellt.
Auch in Zukunft nehmen wir gern Ihre Anfragen und Antworten entgegen. Leider erreichen uns oft Briefe, die wir nicht sofort veröffentlichen können. Bitte rechnen Sie vier oder fünf Monate, die vergehen können, bis Ihre Anfrage im Heft erscheint. Bei einem Posteingang von etwa 200 bis 300 Briefen pro Woche können wir einfach nicht schneller sein - auch wenn wir es für Sie fieberhaft versuchen. Manche Briefe beantworten wir persönlich. Sie erleichtern uns die Arbeit erheblich, wenn Sie jede Frage an uns auf einen eigenen Bogen schreiben und jedes Blatt deutlich mit Ihrem Namen und der vollen Anschrift versehen. Geben Sie an, zu welchem Thema Sie fragen, oder auf welche Frage in welcher Ausgabe sich Ihre Antwort bezieht. Dadurch beschleunigen Sie die Bearbeitung, und Sie erhalten noch eher eine Antwort.
Bitte richten Sie Briefe für das Leserforum nur an den Markt & Technik Verlag, Redaktion 64'er, Stichwort: Leserforum, z.Hd. Herrn N. Heusler, 85540 Haar. Wir freuen uns auf noch mehr Post!
Abschließend noch ein herzliches Dankeschön an alle Einsender, die Ihr Leserforum zu dem gemacht haben, was es heute ist: Der Treffpunkt für C 64-Anwender - fast schon mit Erfolgsgarantie. Doch nun: hinein ins Vergnügen!
Nikolaus Heusler/aw BILDER: Bild. Die »Watchdog-Schaltung« sorgt für Sicherheit am Userport ((Zeichnung liegt bei)) Bild. Auch bei der Vogelwelt sehr beliebt: der C 128D ((bitte aus 64'er 6/91 Seite 54 übernehmen)) ### Basic ###
Nur Nebel
Bei vielen Programmen (meist Spielen) erscheint nach der Eingabe von LIST nur eine Zeilennummer (evtl. eine Jahreszahl) und eine SYS-Anweisung (z.B SYS 2062). Was soll das bedeuten?
Adamitz Normen, Ilfeld/Wiegersdorf
Bei solchen Programmen handelt es sich um compilierte, gepackte oder in Assembler geschriebene Listings, die mit der unter dem SYS-Befehl angegebenen Adresse gestartet werden. Der einzige echte Basic-Teil solcher Programme ist die erwähnte Kopfzeile mit der SYS-Anweisung. Vor dem »echten« Programmcode und hinter der SYS-Anweisung sind im Listing drei Nullbyte untergebracht, die den LIST-Vorgang sofort abbrechen, wenn der C 64 darauf stößt. Es hätte aber auch wenig Sinn, sich Assembler- oder Compiler-Codes als Basic-Listing anzeigen zu lassen, das Resultat wären wirre Zeichenfolgen auf dem Bildschirm.
DIE RED.
Glücklich vereint
Wie kann man ein Programm im Speicher mit einem anderen ab dessen kleinster Zeilennummer, nach dem Laden, verbinden?
Werner Schmitz, Moers
In Basic funktioniert dies nur, wenn das nachzuladende Programm als kleinste Zeilennummer eine immer noch höhere Zahl als die letzte Zeile des Basic-Programms im Speicher besitzt. Ein Beispiel: Wenn das erste Programm bei Zeile 20000 endet, darf das anzufügende Listing frühestens ab Zeile 20001 beginnen.
Das MERGEn (Zusammenfügen) läuft folgendermaßen ab:
1. Erstes Programm laden.
2. Im Direktmodus eingeben (jede Eingabe mit RETURN abschließen):
POKE 251, PEEK(43) POKE 252, PEEK(44) POKE43,(PEEK(45)+256*PEEK(46)-2)AND255 POKE44,(PEEK(45)+256*PEEK(46)-2)/256
3. Nun muß das zweite Programm von Diskette geladen werden.
4. Wenn die READY-Meldung erscheint, ist noch folgende Eingabe im Direktmodus notwendig:
POKE 43, PEEK(251) POKE 44, PEEK(252)
Die beiden Basic-Programm sind damit lauffähig miteinander verbunden. Man kann damit z.B. ständig wiederkehrende Routinen oder Spritedaten in eigene Programmentwicklungen einbauen, ohne sie erneut eintippen zu müssen. Es gibt allerdings auch Utilities, die ein auf Diskette gespeichertes Basicprogramm nach Zeilennummern geordnet in ein im Speicher stehendes Programm einordnen, zum Beispiel das »Line-Utility« von Nikolaus Heusler.
DIE RED.
Wiederbelebungsversuche
Ab und zu stürzt mein C 64 ab. Ärgerlich, wenn's beim Abtippen eines Programms passiert. Ich betätige den Resettaster und beginne von vorne. Mir ist aber bekannt, daß gespeicherte Daten durch einen Reset nicht gelöscht werden. Das geschieht nur beim Ausschalten des Computers. Gibt es eine Formel, ähnlich den SYS-Zahlen oder Trainer-POKES, die Programme wieder zum Leben erwecken?
Daniel Christoph, Duisburg-Rheinhausen
Abgesehen von einer großen Anzahl RENEW- und OLD-Routinen in Maschinensprache läßt sich ein Basic-Programm jederzeit mit folgendem Einzeiler wieder zurückholen:
POKE 2050,8: SYS 42291: POKE 46,(PEEK(35)-PEEK(781)>253: POKE 45,PEEK(781)+2AND255: CLR
Beachten muß man dabei, daß es sich um einen »echten« Einzeiler handelt: Die Anweisung darf nur im Direktmodus erfolgen und muß unbedingt innerhalb einer einzigen Eingabezeile (maximal 80 Zeichen) stehen. Aus diesem Grund sollte man die Abkürzungen der Basic-Befehle laut C-64-Handbuch benutzen (z.B. für POKE und PEEK). Außerdem darf man nach dem Reset oder einem »NEW« vor dieser Rückhol-Anweisung keine anderen Basic-Zeilen oder Variablen eintippen.
Nikolaus Heusler, München-Solln
Wenn das Wörtchen Wenn nicht wäre...
Ich will einen 20-Zeiler in Basic schreiben und habe so viel Programmcode wie möglich in die jeweiligen Basiczeilen gepackt. Vom Umfang her paßt es, leider treten beim Programmablauf ungeahnte Probleme auf: Ganze »IF - THEN«-Anweisungen werden plötzlich vernachlässigt! Ein Beispiel:
10 S=S+7: IF GR=4 THEN END: IF GR=0 THEN 13
Obwohl die Variable GR nachweislich »0« war, sprang das Programm nicht in Zeile 13, sondern arbeitete auch Zeile 11 und 12 ab. Auch FOR..NEXT-Schleifen schaffen ständig Fehler:
8 FOR J=1 TO 4: IF T(J)=F(J) THEN GOSUB 19: NEXT 19 RETURN
Hier erhalte ich den Fehler RETURN WITHOUT GOSUB. Darf das NEXT nicht in der selben Zeile stehen wie FOR?
Heiko Worm, Buschhoven
Doch. Der Grund, warum es nicht funktioniert, liegt in der Plazierung der IF-THEN-Anweisungen im Programm. Der Basic-Interpreter überprüft den Wert, der nach IF angegeben ist. Nur wenn er zutrifft, werden die weiteren Befehle nach THEN in derselben Basiczeile abgearbeitet. Ansonsten verläßt Basic diese Zeile und sucht sich die folgende. Richtig ist (erst jetzt wird zu Zeile 13 verzweigt):
10 S=S+7: IF GR=4 THEN END 11 IF GR=0 THEN 13
Ebenso gefährlich ist es, nach einer IF-Anweisung Rücksprungbefehle wie GOSUB und NEXT unterzubringen. Der Fehler in Ihrem Programm tritt auf, wenn die Bedingung nach IF nicht zutrifft. Zunächst wird die Anweisung GOSUB nicht interpretiert, außerdem die Schleife nicht weitergeführt, da auch das NEXT nicht zum Zuge kommt. Obwohl dies nicht immer nötig ist, muß in dem Fall NEXT in einer eigenen Zeile stehen:
8 FOR J=1 TO 4: IF T(J)=F(J) THEN GOSUB 19 9 NEXT 19 RETURN
Bedeutend leichter tun sich hier C 128-Besitzer mit dem Basic 7.0 und der Anweisung ELSE (verzweigt, wenn die Bedingung nicht erfüllt ist). ELSE darf nach der IF-THEN-Abfrage in derselben Programmzeile stehen, ein korrekter Programmablauf ist gewährleistet.
DIE RED.
Die von der Redaktion erläuterte Methode ist natürlich richtig und die Lösungsvorschläge sind machbar. Da jedoch soviel Programmcode wie möglich in eine Zeile passen soll, ist die vorgeschlagene Aufsplittung der Zeile nur eine Notlösung. Um Speicherplatz zu sparen, sollte man die Vergleichsabfrage vereinfachen. Statt:
10 S=S+7: IF GR=4 THEN END 11 IF GR=0 THEN 13
verwendet man besser:
10 S=S+7: ON -(GR=0) GOTO13: IF GR=4 THEN END
Das ist eine Variante des ELSE-Befehls im Basic 7.0 des C 128. Nur bei GR=0 wird verzweigt: Der Vergleich ergibt »—1« (wahr). Ist GR=4 (oder GR<>0), heißt der bei der Vergleichsabfrage entstehende Wert »0« (unwahr). ON-GOTO wird nicht ausgeführt.
Für die Zeilen 8 und 9 bietet sich ebenfalls eine komfortablere Lösung an. Nicht so gut ist:
8 FOR J=1 TO 4: IF T(J)=F(J) THEN GOSUB 19 9 NEXT
Hiermit benötigt man nur eine Zeile:
8 FOR J=1 TO 4: ON-(T(J)=F(J)) GOSUB 19: NEXT 19 RETURN
Die NEXT-Anweisung wird auf alle Fälle aufgeführt, da das Programm bei fehlerhaftem Vergleich (wenn T(J)<>F(J) ist) bei NEXT weitermacht und nach dem RETURN in Zeile 19 bei wahrem Vergleich ebenfalls zu NEXT zurückspringt. Achtung: Der Programmierer muß dafür sorgen, daß der GOSUB-Befehl zur Zeile 19 im Programm enthalten ist.
Hagen Edlich, Coswig/Anhalt
Ist jemand da?
Innerhalb eines Basic-Programms will ich eine Abfrage einbauen, ob am seriellen Ausgang des C 64 ein Drucker mit der Geräteadresse 4 angeschlossen ist. Gibt es dazu einen Trick (z.B. mit PEEK), diese Information im Programmablauf zu erhalten?
@ar:Thomas Meyer, Wittenberge
Es existieren eine Menge Adressen im C 64, die Auskunft darüber geben, ob und welches Peripheriegerät am Computer angeschlossen ist.
Da ist zunächst die Tabelle der Gerätenummern, die von den geöffneten Files angesprochen werden: ab Adresse 611 bis 620. Außerdem sollte man sich der Vektoren auf die Routine zur Ausgabe der Fehlermeldungen im Basic-Interpreter bedienen: $E38B (58251). Diese Adresse ist als Low- und High-Byte in den Zeigern $0300 (768) und $0301 (769) abgelegt. Ebenso von Bedeutung ist in diesem Zusammenhang die Systemvariable ST (Inhalt von Adresse 144: 0 = kein Fehler aufgetreten). Innerhalb einer Programmroutine (egal, ob in Basic oder Assembler) muß man diese Abfrage deaktivieren (POKE 768,185), die eigene aufrufen und anschließend die Systemabfrage wieder zulassen (POKE 768,139).
Folgende Zeilen kann man als Unterprogramm (Aufruf durch GOSUB) ins eigene Basic-Programm einbauen und damit die gewünschte Abfrage der Druckeradresse sowie eine Fehlerabfangroutine realisieren, falls der Drucker nicht eingeschaltet oder nicht am Computer angeschlossen ist (ein »DEVICE NOT PRESENT ERROR« wäre die Folge und würde zum Abbruch des Hauptprogramms führen):
100 PRINT "PERIPHERIE-ABFRAGE" 110 GOSUB 50000: END 50000 POKE 611,4 50010 OPEN 16,PEEK(611) 50020 POKE 768,185 50030 PRINT #16: CLOSE 16 50040 POKE 768,139 50050 IF ST<>0 THEN PRINT "GERAET NR.";PEEK(611);"NICHT ANGESCHLOSSEN!": RETURN 50060 PRINT "GERAET NR.";PEEK(611);"IST AKTIVIERT!": RETURN
Ebenso denkbar ist die Abfrage einer zweiten Floppystation mit Geräteadresse 9. Hierzu muß man lediglich in Zeile 50000 den Wert »9« in die Speicherstelle 611 POKEn.
DIE RED. ### Assembler/Maschinensprache ###
Resetschutz umgehen
Der Assembler »Giga-Ass« (64'er-Sonderheft 53) steht nach dem Laden resetfest im Speicher. Da ich es leid war, nach Beendigung der Arbeit mit dem Assembler den Computer jedesmal ausschalten zu müssen, bin ich auf folgende Befehlsfolge im Direktmodus gestoßen, die das Problem löst:
POKE 32772,0: SYS 64738 POKE 56,128
Durch das Beschreiben der Speicherstelle 32772 mit einem Nullbyte kann der C 64 bei einem Reset die Zeichenfolge »CBM80« nicht mehr finden und kehrt ins normale Basic 2.0 zurück.
Das Ganze läßt sich wieder rückgängig machen mit:
POKE 32772,195: SYS 64738
Statt des SYS-Befehls genügt es auch, den Resettaster zu betätigen.
Hilmi Sönmez, Laudenbach
Hexadezimale Umrechnung
Wie kann ich hexadezimale Zahlen in das Dezimalformat umrechnen? Welche Bedeutung haben die Adressen $FFF6 bis $FFF9 im System des C 64?
Stephan Rupprecht, Dortmund
Es gibt bereits eine Menge kurzer Utilities zum Umrechnen von Hex-Zahlen in das Dezimalformat. Falls Sie keines besitzen, kann der Computer trotzdem die Rechenarbeit übernehmen. Man muß lediglich wissen, welche Wertigkeit die einzelnen Stellen besitzen. Eine Hexzahl besteht normalerweise aus einer Mischung von Ziffern 0 bis 9 und Buchstaben A (entspricht 10) bis F (entspricht 15). Je nachdem, an welcher Stelle die Zahl oder der Buchstabe steht, müssen die Dezimalwerte mit den Werten aus folgender Tabelle multipliziert werden:
1. Stelle: 4096 2. Stelle: 256 3. Stelle: 16 4. Stelle: 1
Soll beispielsweise die Zahl $AB1E (das Dollarzeichen kennzeichnet Hex-Zahlen) umgerechnet werden, rechnen Sie so: $AB1E = $A*4096 + $B*256 + $1*16 + $E*1 = 10*4096 + 11*256 + 1*16 + 14*1 = 43806.
Die Adressen $FFF6 bis $FFF9 enthalten die Ascii-Zeichenfolge »RRBY« und haben mit dem Ablauf des Betriebssystems nichts zu tun. Vermutlich wollten sich die Programmierer des Betriebssystems durch Ihre Kennbuchstaben (wie Maler durch die Signatur) hier verewigen.
DIE RED.
Pseudo-Befehl
Im ROM-Listing des C 128 habe ich die Anweisung »Quit« entdeckt. Was macht dieser Befehl?
Daniel Widrig, Diepoldsau
Nach Eingabe dieser Anweisung erhalten Sie die Befehlsmeldung »Unimplemented command«, da die entsprechende Maschinenroutine zur Abarbeitung der Anweisung fehlt. Offensichtlich hatten die Software-Entwickler des Betriebssystems zum C 128 ursprünglich geplant, diese Anweisung in die Liste der Basic-Befehle aufzunehmen.
DIE RED.
Keine Routine
Wo liegen im C 64 die Assemblerroutinen des Basic-Interpreters? Mich interessiert vor allem, in welchem Bereich die Routine für die Anweisung RUN zu finden ist.
Albert Ulmer, A-Feldkirch
Die Tabelle der Routinenadressen für die Befehlswörter des Basic 2.0 finden Sie ab Speicherstelle $A00C (40972), die der Basic-Funktionen (z.B. FRE, USR, PEEK usw.) ab Adresse $A052 (41042), abgelegt als Low- und Highbyte. Das Lowbyte muß um »1« erhöht werden. Die RUN-Routine umfaßt lediglich 18 Bytes und liegt im Speicherbereich von $A871 (43121) bis $A882 (43138). Mit einem Maschinensprache-Monitor (z.B. SMON) können Sie sich die gewünschten Speicherinhalte anzeigen lassen.
DIE RED.
Basic-Variablen erzeugen
Ich habe mit meinem C 128 eine komfortable Input-Routine in Assembler programmiert. Doch dies nützt alles nichts, wenn die Eingabe nicht auch als String an eine Variable für ein Basic-Programm zurückgegeben werden kann. Gibt es irgendeine Betriebssystem-Routine, die dies erledigt?
Michael Vorburger
Ab Adresse $7AAF (31407) im Basic-ROM des C 128 finden Sie die Routine »Variable suchen/anlegen«. Leider kann diese nicht problemlos in Ihr Assemblerprogramm eingebaut werden, da sie von der Hauptschleife des Basic-Interpreters ($4A9F) aufgerufen wird, die den umzuwandelnden String im Eingabepuffer ab $0200 (512) sucht.
Folgendes Beispiel kopiert einen Eingabestring (ab $1500) mit vorangestelltem Variablennamen (ab $1400) in den Eingabepuffer. Dort wird er automatisch vom Basic-Interpreter an die richtige Stelle im Variablenspeicher des C 128 (Bank 1) gebracht und kann in einem Basic-Programm wie gewohnt verwendet werden. Als Startadresse haben wir $1300 gewählt:
1300 LDX #$00 ;Eingabepuffer 1302 TXA ;ab $0200 - 1 1303 STA $01FF,X ;löschen 1306 INX ;(160 Nullbytes 1307 CPX #$A1 ;(eintragen) 1309 BNE $1303 130B TAX 130C LDA $1400,X ;Variablennamen 130F STA $0200,X ;in Eingabepuffer 1312 INX ;(4 Zeichen: 1313 CPX #$04 ;A$=") 1315 BNE $130C 1317 LDY #$00 ;Eingabestring 1319 LDA $1500,Y ;anfügen 131C STA $0200,X 131F INX 1320 INY 1321 CMP #$00 1323 BNE $1319 1325 LDA #$FF ;CHRGET-Routine 1327 STA $3D ;ab $0380 1329 LDA #$01 ;an Pufferanfang 132B STA $3E ;setzen ($0200 - 1) 132D JSR $4A9F ;Interpreterschleife 1330 RTS 1400 41 24 B2 22 00 1500 36 34 27 45 52 2D 4D 41 1508 5A 49 4E 00 00 00 00 00
Bei der »Übersetzung« der Eingabe springt die Interpreterschleife zur Routine LET ($53C6), die nach $7AAF verzweigt. Durch diesen Vorgang wird die Variable so angelegt, als wäre diese direkt eingegeben worden. Bei der Definition der Variablennamen ist zu beachten, daß das Ist-Gleich-Zeichen (=) bereits als Token angegeben werden muß ($B2, nicht $3D). Außerdem muß hinter den Textbytes ab $1400 und $1500 ein Nullbyte stehen ($00).
Starten Sie dieses Beispiel mit »SYS 4864«. Mit dem Befehl »PRINT A$« wird der String »64'ER-MAGAZIN« ausgegeben.
DIE RED.
Maschinenprogramme im RAM unterm ROM
Gibt es eine Möglichkeit, Assemblerprogramme ab den Adressen $A000 bis $BFFF und $D000 bis $FFFF ins entsprechende RAM zu laden und dort zu starten, oder diese Bereiche als Textspeicher zu benutzen? Welche Bedeutung hat die Speicherzelle 1 in diesem Zusammenhang?
Stephan Rupprecht, Dortmund
Für den ersten Bereich ($A000 bis $CFFF) funktioniert dieses Vorhaben unter bestimmten Voraussetzungen: In Speicherstelle 1 des C 64 muß aufs RAM unterm Basic-ROM umgeschaltet werden. Das Assemblerprogramm darf auf keine Routinen des Basic-Interpreters zugreifen, da dieser Bereich dann nicht aktiv ist. Bedeutend schwieriger ist es, eine Maschinenroutine im Bereich ab $D000 unterzubringen. Hier befinden sich die Ein- und Ausgabe-Register des C 64, der Originalzeichensatz, sowie ab $E000 das eigentliche Betriebssystem (Kernal). Wenn Sie diesen ROM-Speicher ausschalten, um ein Maschinenprogramm in RAM unterm ROM zu starten, sägen Sie den Ast ab, auf dem Sie sitzen: Der C 64 stürzt sang- und klanglos ab.
Bei der Ablage von Grafik- oder Textdaten hingegen gibt es keine Probleme, diese werden beim Speichern durch Ihr Programm automatisch ins RAM geschrieben und können auch von dort wieder geholt werden (Voraussetzung: Vor Beginn der Übertragung muß man den Interrupt gesperren und in Adresse 1 aufs RAM unterm Kernel-ROM schalten).
Die Speicherzelle 1, welche den Prozessor-Port steuert, legt die Belegung verschiedener Speicherbereiche fest. Für die unteren drei Bit dieser Zelle gilt folgender Zusammenhang:
Wert Bit 2 1 0 $A000-$BFFF $D000-$DFFF $E000-$FFFF
0 0 0 0 RAM RAM RAM
1 0 0 1 RAM CHAR RAM
2 0 1 0 RAM CHAR KERNAL
3 0 1 1 BASIC CHAR KERNAL
4 1 0 0 RAM RAM RAM
5 1 0 1 RAM I/O RAM
6 1 1 0 RAM I/O KERNAL
7 1 1 1 BASIC I/O KERNAL
Der Normalwert (7) steht in der letzten Zeile. »CHAR« meint den Zeichensatz, »I/O« steht für Ein/Ausgabe (VIC,. SID, CIAs).
DIE RED. ### Grafik ###
Text im Bildschirmrahmen?
Kann man in den Rahmen des C 64-Bildschirms schreiben?
Stephan Rupprecht, Dortmund
Grundsätzlich kann der Bildschirmrahmen nicht mit Text oder anderen Zeichen des C 64 beschrieben werden. Allerdings lassen sich durch bestimmte Tricks Sprites darin anzeigen. Bestehen diese Sprites aus Buchstaben oder Wortsilben, kann man so »Text« im Bildschirmrahmen darstellen, wenn auch nur in begrenztem Umfang.
Amica-Paint-Grafiken
Ich möchte Grafiken für ein Spiel mit Amica Paint entwerfen. Wo liegen diese im Speicher, sind sie gepackt?
Andreas Tscharner
Um Grafiken dieses Malprogramms in eigenen Programmen nutzen zu können, ist wichtig, daß die Grafikdaten im VIC-Block 3 abgelegt sind.
Das Bildschirm-RAM beginnt bei $C000 (49152), die Sprite-Zeiger liegen ab $C3F8 (50168), dahinter die Sprite-Daten. Um dafür genügend Platz zu bekommen, habe ich die Routine »SHOW PIC.52480« von $CD00 (52480) nach $1D00 (7424) verlegt (sie funktioniert auch in jedem anderen Bereich!). So erhalte ich ab $CC40 (52288) Speicherplatz für 15 Sprite-Daten (Block 49 bis 63).
Rainer Theuerkorn, Rostock
Sprite-Special Teil 1
Zur Ablage meiner Spritedaten verwende ich als Basic-Programmierer die Speicherbereiche 704 bis 760 und 832 bis 1022 im C 64. Leider passen hier nur vier Spritemuster hinein. Wie kann ich mehr Spritedaten unterbringen?
Markus Maciaszek, Bottrop
Ich kann mein Programm, in dem ich Sprites verwende, nicht weiterschreiben, da ab 10 KByte keine Spritedaten mehr gelesen werden können.
Martin Lipphardt, Edertal-Wellen
Spritedaten lassen sich prinzipiell im gesamten RAM-Bereich des C 64 unterbringen. Damit sie jedoch aktiviert und sichtbar gemacht werden können, sind einige Einschränkungen zu beachten:
1. Im Normalzustand des C 64 lassen sich immer nur acht Sprites gleichzeitig einschalten.
2. Alle Daten der Spritemuster müssen sich innerhalb eines zusammenhängenden Bereichs von 16 KByte (16384 Byte) befinden, den der VIC-Chip überblicken kann.
3. Die Lage der Spritedaten in diesem 16 K-Bereich muß in den Spritezeigern (Sprite-Pointer) definiert sein. Normalerweise sind dies die Adressen 2040 bis 2047 im 1 KByte (1024 Byte) großen Bildschirm-RAM. Wird es verschoben, verrücken sich auch die Spritezeiger entsprechend.
Um mindestens acht Sprite zu definieren, benötigt man exakt 512 (8 x 64) Byte. Da die Spritedaten das normale Basic-Hauptprogramm nicht stören sollten, muß man sie entweder ganz unten am Basic-Anfang (ab Adresse 2048) oder am Ende des 16 K-Bereichs des VIC-Chip (ab Adresse 15782) unterbringen. Ein Beispiel (die REM-Kommentare dienen nur zur Erläuterung und müssen nicht abgetippt werden):
10 POKE 2040,248: REM Sprite-Pointer auf Adresse 15872 20 POKE 53269,1: REM Sprite 1 einschalten 30 POKE 53248,160: POKE 53249,125: REM Spritekoordinaten Bildschirmmitte
Bei dieser Methode ist jedoch Voraussetzung, daß das Basic-Hauptprogramm nicht länger als 13248 Byte ist. Diese Tatsache beantwortet sicher auch die Frage von Martin Lipphardt.
Beim ersten Vorschlag muß man Basic hochsetzen. Dies darf nur in Schritten von 256 Byte geschehen:
POKE 43,1: POKE 44,10: POKE 2560,0: NEW
Der Inhalt von Sprite-Pointer 1 (Adresse 2040) lautet jetzt »32«. Wenn Sie nun die acht Spritemuster in den Bereich von 2048 bis 2559 und anschließend das Hautprogramm laden, verfügen Sie außerdem mit den bereits verwendeten Spritebereichen (z.B. im Kassettenpuffer) über insgesamt zwölf Spritemuster.
DIE RED.
Sprite-Special Teil 2
Wie stellt man mehrfarbige Sprites in Basic dar?
Frank Kocher, Wolframs-Eschenbach
Wie kontrolliere ich die Multicolorfarben von Sprites?
Werner Janjic, Ludwigshafen
Auch bei Multicolor-Sprites behalten die bekannten Spriteregister im VIC-Chip ihre Gültigkeit (Sprite einschalten, Sprite-Positionen usw.). Zum Einschalten des Multicolor-Modus der Sprites sowie der zwei zusätzlichen Farben sind folgende Register verantwortlich:
$D01C (53276) zum Aktivieren der acht möglichen Multicolor-Sprites, wobei man nach dem Binärsystem verfährt. Folgende Speicherinhalte (oder die Summe mehrerer) bedeuten: 1 = Sprite 1, 2 = Sprite 2, 4 = Sprite 3, 8 = Sprite 4, 16 = Sprite 5, 32 = Sprite 6, 64 = Sprite 7 und 128 = Sprite 8. Ein Beispiel: Sind Sprite 3 und Sprite 7 als Multicolor-Sprites definiert, muß der Inhalt von Adresse 53276 »68« lauten (4 + 64). Wenn alle acht Sprites aktiviert werden, muß in Speicherstelle 53276 der Wert »255« stehen.
Es stehen zusätzlich noch zwei Spritefarben zur Verfügung, deren Farbcode (0 bis 15) in den Adressen $D025 (53285) und $D026 (53286) abgelegt wird. Ansonsten gelten die Sprite-Farbregister von Adresse $D027 (53287) bis $D02E (53294).
DIE RED.
Senkrechter Interrupt
Kann man den Bildschirm mit einem Rasterzeileninterrupt nicht nur waagrecht, sondern auch senkrecht teilen?
Stephan Rupprecht
Eine direkte Abfrage der horizontalen Position des Rasterstrahl ist leider nicht möglich. Vielmehr muß man durch geschicktes Timing dafür sorgen, daß der Strahl exakt eine bestimmte Position innerhalb der Rasterzeile erreicht hat. Dazu erschien eine Routine in der 64'er 6/89, Seite 90. Anschließend sollte eine weitere Assembler-Routine folgen, die in jeder Rasterzeile für die gewünschte Umschaltung sorgt (auch sie muß exakt getimet sein).
Dieses Verfahren hat jedoch einige Nachteile: Die Umschaltung muß in jeder Rasterzeile erfolgen, in der z.B. Text und Grafik gemischt auftreten sollen. Der Computer ist in dieser Zeit für andere Aufgaben blockiert - er verliert eine Menge Geschwindigkeit. Außerdem muß man berücksichtigen, daß bei gleichzeitiger Darstellung von Text und Grafik ein bis zwei Register bis zu zweimal pro Rasterzeile manipuliert werden muß. Wenn Sie bedenken, daß dem C 64 in einer Rasterzeile nur sehr wenig Zeit bleibt und vier Umschaltungen vorzunehmen sind, werden Sie schnell zu dem Schluß kommen, daß brauchbare Ergebnisse nahezu unmöglich sind. Der erforderliche Programmieraufwand steht in keinem Verhältnis zum Ergebnis.
Thomas Binder, Friedberg
Grafik mit Koala-Painter
Ich suche ein Programm, mit dem man farbige Grafiken von Koala-Painter auf einem Farbdrucker ausgeben kann.
Frank Cordes
Benutzen Sie dazu das Druckprogramm »Giga-Print V2.0« von Markt & Technik. Damit lassen sich problemlos farbige Grafiken mit dem Commodore-Drucker MPS 1550-C zu Papier bringen. Der Vorteil ist, daß man Koala-Painter-Grafiken ohne Umwandlung direkt verarbeiten kann. Der Drucker muß im »Set Up« auf die Emulation Epson JX-80 eingestellt und sowohl Line Feed (LF) sowie Carriage Return (CR) aktiviert werden. Verwenden Sie ein Parallelkabel am Userport des C 64. »Giga-Print« ist zwar eine Erweiterung zu »Giga-Paint«, ist aber eigenständig lauffähig. Sie erhalten es als Bookware: »Tools für Giga-Paint« (Markt & Technik). Ein Tip: Auf den beiden Disketten zum Buch findet man noch zusätzlich das Programm »Sticker-Print«, mit dem Sie Etiketten, Visiten- und Grußkarten bedrucken können.
Rainer Büscher, Moers ### Floppy ### ((HINWEIS: DIE RUBRIKEN FLOPPY UND DRUCKER SIND JEWEILS ZIEMLICH KURZ. ES KÖNNTE SINNVOLL SEIN, SIE ZU EINER GEMEINSAMEN RUBRIK "FLOPPY UND DRUCKER" ZUSAMMENZUFASSEN"))
Floppy-Reset
Wie kann ich per Software einen Reset der Floppy 1541 auslösen? Geht das auch in Basic?
Christian Blaich, Geretsried
Für die Floppy 1541 und 1541-C muß man folgende Anweisung im Direktmodus eingeben:
OPEN 1,8,15,"UJ": CLOSE1
Besitzen Sie die Diskettenstation 1541-II, ist statt »UJ« die Buchstabenfolge »UI« zu verwenden. Der Befehl kann z.B. eingesetzt werden, um das Blinken der Floppy-LED nach einem Fehler abzustellen.
Nikolaus Heusler, München-Solln
Eine Neun wäre schön...
Vor kurzem habe ich eine gebrauchte Floppy 1571 gekauft, sie dient mir als zweites Laufwerk. Leider besitze ich keine Bedienungsanleitung. Wie kann ich die Diskettenstation hardwaremäßig auf Geräteadresse 9 einstellen?
Werner Stangl, Regensburg
An der Gehäuserückseite der 1571 befinden sich zwei DIP-Schalter, die je nach Einstellung alle Geräteadressen von 8 bis 11 aktivieren, wobei die Schalterstellungen »ON« nach oben und »OFF« nach unten bedeuten:
..4tk
Links Rechts Geräteadresse ON ON 8 OFF ON 9 ON OFF 10 OFF OFF 11
DIE RED.
Fehlerabfrage funktioniert
Frage ich bei meiner Floppy 1581 den Fehlerkanal ab, bleibt das Laufwerk oft mitten in der Datenübertragung per seriellem Bus hängen und ist nicht mehr ansprechbar. Nur noch Ausschalten hilft.
Martin Gebert
Nicht nur bei der Fehlerkanalabfrage, auch beim Lesen umfangreicher SEQ-Files trat bei mir ebenfalls dieser Fehler auf. Es war unmöglich, mit der 1581 vernünftig zu arbeiten. Durch Ändern der Adresse $EE08 (60936) im Kernel des C 64 von $10 auf $07 konnte ich das Problem lösen. Dadurch wird die Zeit der Verzögerungsschleife in der Betriebssystem-Routine »Unlisten senden« verkürzt. Am besten ersetzt man das Original-Kernel durch ein EPROM (beim alten C 64 über einen Adaptersockel), das die geänderte Speicherstelle enthält. Ohne Eingriff in die Hardware können Sie das Basic- und Kernel-ROM softwaremäßig ins RAM kopieren, die Änderung mit
POKE 60396,7
ausführen und anschließend über Adresse 1 des C 64 auf RAM-Betrieb umschalten (POKE 1,53).
Norbert Ramek, A-Salzburg
»Disk Wizard« mit Macke
Dieses komfortable Disketten-Tool (64'er 5/86) hat eine »Zeitbombe« versteckt, die allerdings nur unter folgenden Voraussetzungen explodieren kann:
Wenn man im Menüpunkt »Dir-Sorter« unter »Insert« einen neuen Directory-Eintrag erzeugt, dabei gleichzeitig nichts löscht, das Directory um die maximale Länge vergrößert hat (gültig seit dem letzten Formatieren mit ID), und kein »Validate« durchführt.
Die Folge: Sporadischer Datenverlust auf manchen Disketten und Störungen bei Kopierprogrammen, die »BAM selected« arbeiten. Mein Rat: Nach jeder Manipulation des Directory muß ein Validate ausgeführt werden! Falls das Programm nämlich eigenständig die Directory-Kette verlängern muß (keine Vorgabe der Verkettung durch das DOS), nimmt es den niedrigsten freien Disekttensektor, belegt diesen aber nicht in der BAM! Dadurch interpretiert das DOS den von »Disk Wizard« belegten Block als freien Speicher und überschreibt diesen beim Speichern anderer Dateien gnadenlos. Die von »Disk Wizard« eingerichtete Blockverkettung des Directory ist damit hinfällig, manche Einträge kann man eventuell nur noch mit einem Diskettenmonitor wieder zurückholen.
Dipl.-Ing. Hans Peter Kastner, Castrop-Rauxel
Floppyverleih
Kann man das interne Laufwerk des C 128D als externe Floppystation für den C 16 verwenden, indem man einfach die seriellen Ports miteinander verbindet?
Thorsten Reichelt, Langenfeld
Die Zweckentfremdung der internen C 128D-Floppy als externes C 16-Laufwerk ist problemlos möglich, wie uns ein Test bewies.
DIE RED. ### Drucker ###
Druckertip zu Amica Paint
Mit diesem Tip möchte ich allen Lesern helfen, die den Drucker Epson LX-800 mit einem Görlitz-Interface 8422 besitzen und Schwierigkeiten haben, damit Grafikbilder aus dem Malprogramm Amica Paint zu Papier zu bringen. In der Druckerroutine »[W]Hardcopy« muß die Sekundäradresse auf »4« geändert werden (statt »0«). Man findet diese mit einem Maschinensprache-Monitor in Adresse $4133 (16691).
Joachim Feigl, Crailsheim
Wagenrücklauf
Wie läßt sich mit dem C 64 und dem Drucker Epson LQ 400 ein Wagenrücklauf erzeugen?
Mario Odenbach, Wilgartswiesen
Dies kann in Basic sehr leicht realisiert werden. Wichtig ist, den Linearkanal des Druckers bzw. den des angeschlossenen Interfaces als Sekundäradresse anzugeben (bei Epson-Druckern ist dies in der Regel »1«):
OPEN 4,4,1: CMD4: PRINT#4,CHR$(13);: CLOSE4
Je nach Einstellung der DIP-Schalter wird noch zusätzlich ein Zeilenvorschub-Code an den Drucker gesandt: CHR$(10). Diese Programmsequenzen gelten jedoch nur dann, wenn der Drucker über ein Interface am seriellen Port des C 64 angeschlossen ist.
DIE RED.
Geos mit dem MT-81
Wer kennt sich mit dem Mannesmann Tally MT-81 aus und weiß, welcher Geos-Druckertreiber sich am besten dafür eignet?
Sven Mark
Versuchen Sie doch die Anpassung des Megatreibers für den Star LC-10 mit dem Printer Creator: Grafikmodus, letzte Zahl in »4« ändern (statt »3«), gleiche zu sendende Bytes in »1« (statt »3«), Anschläge beliebig 1 bis 4. Die DIP-Schalterstellung des Wiesemann-Interface 9200-G müßte wie folgt aussehen: 1 = on, 2 = off, 3 = on, die restlichen off. Folgende Druckertreiber sollten ebenfalls funktionieren: Epson FX 80, Epson FX 80 ds, Epson FX 80 qs.
Stefan Schröder, Hamburg
Ich besitze ebenfalls den MT-81 und habe ihn über ein Centronics-Userport-Kabel am Computer angeschlossen. Dazu benutze ich folgende Treiber:
*fx-80/100+(gc) mit der DIP-Schaltereinstellung: 01011000/1011,
!!Star/Epson (gc), DIP-Schalter: 00011000/1011 (wobei »0« OFF und »1« ON bedeutet). Ein serieller Anschluß mit dem Interface Merlin C+ ist mir leider nicht gelungen.
Heiko Auer, Deizisau
Mir ist es bei der Arbeit mit Geos häufig passiert, vor dem Ausdrucken unter DeskTop den aktuellen Treiber (z.B. mit oder ohne Interface usw.) einzustellen. Daher habe ich mir einen entsprechenden »Universaltreiber« programmiert. Ich bin gerne bereit, das Programm für alle Interessenten mit Epson-kompatiblem Drucker anzupassen.
Carsten Preuß, Waake
Störenfried
Zum Drucken verwende ich das Wiesemann-Interface 92000/G mit dem Kassettenportstecker. Dies beeinträchtigt jedoch Kopierfunktionen meiner Floppy. Was muß ich tun, um nicht ständig den Stecker herausziehen zu müssen?
Die einzige Möglichkeit besteht darin, die Stromzufuhr des Steckers abzuschalten. Dazu bieten sich zwei Versionen an:
1. Pin A-1 (GND) muß über einen einpoligen Schalter zwischen Stecker und Leitung geführt werden, wo sich die Stromzufuhr nach Wunsch aktivieren oder abschalten läßt.
2. Haben Sie damit keinen Erfolg, hilft nur noch ein merhpoliger Schalter, der alle belegten Pins unterbricht.
Die beiden Vorschläge lösen zwar das Problem an sich nicht, es ist jedoch zweifellos bekömmlicher für die Hardware, einen Schalter zu betätigen, als einen Stecker aus- und einzustecken.
Michael Bausch, Reutlingen
Geos und der Präsident
Wenn ich den Druckertreiber »Commodore Compatible« von Geos 2.0 mit meinem Präsident 6320 benutze, funktioniert nur die Standardschrift.
Harald Ladusch
Um andere Schriftarten drucken zu können, benötigt man den Treiber »Epson LX-80«. Die DIP-Schalter am Präsident sollten wie folgt eingestellt sein:
ON: 6-1, 6-2, 7-2, 8-1, 9-1, 11-2, 13-2, 18-2. OFF: 7-1, 8-2, 9-2, 10-1, 10-2, 11-1, 12-1, 12-2, 13-1, 14-1, 14-2, 15-1, 15-2, 16-1, 16-2, 17-1,17-2, 18-1.
Diese Konfiguration arbeitet außerdem mit Mastertext V2.0 einwandfrei zusammen.
Verwendet man den Treiber »Epson FX 80«, gilt folgende DIP-Schalterstellung:
ON: 6-1, 8-1, 9-1, 11-1, 13-2, 14-2, 18-2 OFF: 5-1, 5-2, 6-2, 7-1, 7-2, 8-2, 9-2, 11-2, 13-1, 14-1, 18-1
Klaus P. Gelbke, Gummersbach und Thomas Arnhold, Leipzig ### Hardware ###
Drucker hemmt Floppy
Wenn mein Drucker eingeschaltet ist, werden einige Programme überhaupt nicht oder unvollständig geladen.
Ingo Klöckner
Jeder Drucker, der »On line« geschaltet ist, sendet ein Signal. Bei der Mehrzahl von Druckern ruft dies keine Störungen im Betrieb einer ebenfalls angeschlossenen Floppy hervor. Ansonsten kann man mit trickreichen Laderoutinen bei der Floppy 1541 und 1571 dieses Signal umgehen. sonst hilft leider wirklich nur, die Diskettenstation vorher auszuschalten. Als leuchtendes Beispiel dienen die Laderoutinen, die Geos verwendet: Hier gibt es bei keinem Drucker Komplikationen. Die 1581 spielt auch bei geänderten Laderoutinen überhaupt nicht mit.
Christian Twigg-Flesner, Gronau
Unschuldiger Port
Wenn ich meinen Joystick in Port 2 nach oben bewegen will, zeigt sich keine Reaktion mehr. Am Joystick selbst kann ich keine Beschädigung feststellen. Ich vermute, daß der Joystick-Port 2 im Eimer ist. Weiß jemand Rat?
Daniel Schrägle
Bei mir trat das Problem auf, daß mein Joystick in Port 1 bei einer Bewegung des Hebels nach links überhaupt nicht mehr reagierte. Zunächst dachte ich ebenfalls, daß der Joystick-Port kaputt sei, bis ich den gleichen Fehler auch in Port 2 feststellte. Nun erst öffnete ich den Joystick und sah, daß das Kontaktplättchen eines Mikroschalters zerbrochen war. In solchen Fällen genügt es, diesen Schalter zu ersetzen - eine Arbeit, die selbst von Laien durchgeführt werden kann.
Michael Hunze, Heusenstamm
Fragen zum Sound-Chip SID
Was bedeutet »Rosa Rauschen«? Kann man die Tonwiedergabe des SID verbessern? Wie kann ich Töne mit ganz bestimmter Frequenz erzeugen? Lassen sich zwei Stimmen auf getrennte Ausgänge legen?
Michael Winterberg
»Rosa Rauschen« ist der technisch-physikalische Ausdruck für eine pseudo-zufällige Folge von Tönen verschiedener Höhe: Das Ohr nimmt tatsächlich nur ein Rauschen wahr. Die Töne laufen zwar scheinbar wild durcheinander, gehorchen jedoch einer bestimmten Formel. Der C 64 kann nur »Weißes Rauschen« erzeugen. Dabei wird ebenfalls eine Tonfolge unterschiedlicher Höhe gebildet, die aber echt zufällig und mathematisch nicht vorhersehbar ist. Der Unterschied besteht in der Wahrscheinlichkeits-Verteilung: Bei Rosa Rauschen ist die Wahrscheinlichkeit, daß eine Frequenz in dem Rauschspektrum auftritt, indirekt proportional zur Frequenz, beim weißen Rauschen ist die Wahrscheinlichkeit konstant.
Um die Tonqualität zu verbessern, sollten Sie versuchsweise einen neuen SID-Chip in den C 64 einbauen. Andere Möglichkeiten sind auszuschließen, da der gesamte Tongenerator des SID für den Anwender unzugänglich ist. Eventuell kann auch die Treiberstufe um den Transistor Q8 erneuerungsbedürftig sein.
Eine Tabelle mit Tonfrequenzen und entsprechenden POKE-Werten finden Sie im C-64-Handbuch, Anhang P. Folgende Formel dient zur Umrechnung von Frequenzen in den POKE-Wert:
Wert=17.0294699 * Frequenz
Ein Beispiel: Für den Kammerton A (440 Hz) erhält man den Wert »7493« (gerundet). Mit dieser Berechnungsformel zerlegt man ihn in High- und Lowbyte:
inte = int(wert) high = int(inte/256) low = inte - high * 256
Beide Zahlen muß man in die Tonhöhe-Register des SID POKEn. Folgende POKEs erzeugen einen Ton (400 Hz auf Stimme 1, 410 Hz auf Stimme 2):
Wert (400 Hz)=6812= 155 (Low) / 26 (High), Wert (410 Hz)=6982= 70 (Low) /27 (High): poke 54272,155 poke 54273,26 poke 54279,70 poke 54280,27 poke 54296,15 poke 54278,240 poke 54285,240 poke 54276,17 poke 54283,17
Will man den Ton wieder abschalten, müssen die beiden letzten POKE-Werte »16« lauten (statt »17«).
Die vier Stimmen des SID (drei interne, eine externe) werden im Chip noch vor der Behandlung durch das Lautstärke- und Filterregister (54296) auf einen Addierer gelegt und gemischt. Daher ist es leider nicht möglich, Stimme 1 und 2 einzeln abzutasten.
Nikolaus Heusler, München
Geheimnisvolle Computer-Chips
Welche Bedeutung haben folgende Bausteine im neuen C 64-II: 901225-01, 8500 und LH5062B? Welche Funktion erfüllen sie?
Klaus Bertram, Leipzig
Beim Chip mit der Aufschrift 901225-01 handelt es sich um ein Betriebssystem-ROM (z.B. Basic-Interpreter, Zeichensatz usw.). Der Baustein 8500 ist das Herz des C 64-II, die CPU. Den relativ umfangreichen Chip LH5062B bezeichnet man als Logical Areal. Er ersetzt eine Vielzahl an TTLs. Genaueres darüber erfahren Sie in unserem Reparaturkurs im 64'er Magazin.
DIE RED.
Modul abschalten
Bei eingestecktem Simon's-Basic-Modul stürzt das Spiel »Omidar« (64'er-Sonderheft 37) nach kurzer Spielzeit ständig ab. Wenn ich das Modul entferne, läuft das Spiel einwandfrei. Gibt es eine Möglichkeit, über einen bestimmten Tastendruck oder softwaremäßig (z.B. einen Befehl im Programm) die eingesteckte Erweiterung ein- und auszuschalten?
Jürgen Bierwagen, Duisburg
Per Tastendruck oder durch eine Programmanweisung kann man das Simon's-Basic-Modul nicht abschalten. Diese Funktion ist in dieser als Maschinenprogramm im Modul-EPROM gespeicherten Software nicht vorgesehen. Hier könnte lediglich ein Umbau der Hardware des Moduls (z.B. ein Druckschalter) helfen.
DIE RED.
128 + 1750 = 512
Was bringt die RAM-Erweiterung 1750 zum C 128? Ist es nicht so, daß der Arbeitsspeicher von 128 KByte unverändert bleibt und die RAM-Floppy nur als Datenspeicher benutzt werden kann, in den man nach Wunsch Daten schreibt oder daraus lädt? Wäre es nicht besser gewesen, den 128-KByte-Speicher gegen einen 512-KByte-Speicher auszutauschen?
Dr. Walter Schwab, Oberalm
Die RAM-Erweiterung zum C 128 (die leider nicht mehr hergestellt wird) bringt erhebliche Vorteile gegenüber der Floppy, da große Datenmengen in Sekundenbruchteilen in den Arbeitsspeicher transferiert werden können. Einen 512 KByte großen Arbeitsspeicher zu adressieren, dürfte dem Mikroprozessor des C 128 allerdings ziemlich schwer fallen (der höchste für ihn zu erreichende Adreßwert ist »65535»).
DIE RED.
PEEK-Geheimnis gelöst
Wie kommt es, daß ich bei einer PEEK-Abfrage zur Speicherstelle 54272 zwei verschiedene Ergebnisse erhalte, wenn ich lediglich die Eingabeart ändere (alle Anweisungen in eine Zeile geschrieben oder jeder Befehl einzeln)?
Christian Engelhardt Dieser interessante tritt auch auf meinem Uralt-C 64 auf. Probieren Sie folgende Eingabe:
poke 54272,200: for i=0 to 100: next: printpeek(54272)
Bevor die bewußte Speicherstelle (SID Stimme 1, Tonhöhe low), wieder ausgelesen wird, zählt der Computer bis »100« (das dauert in Basic eine kleine Weile). Dann zeigt sich ein seltsamer Wert (z.B. 136, 200 minus 64, also Bit #6 gelöscht). Experimentieren Sie doch ein wenig mit dem Wert »100«. Bei relativ kleinen Werten (unter »30«) ergibt die PEEK-Abfrage den Originalwert »200«, bei Zahlen über »500« erscheint eine Null. Offensichtlich besitzen die SID-Register die Eigenschaft, gePOKEte Werte nur kurze Zeit zu behalten und diese allmählich Bit für Bit zu löschen. Hardwaremäßig liegt dies sicher am Kondensator, der sich langsam entlädt.
Nikolaus Heusler, München
Wachhund
Mit meinem Uralt-Computer CBM 3032 regle ich die Wohnungsheizung. Aber was ist, wenn der Computer einmal abstürzt? Dann ist es vorbei mit der Heizungsregelung. Gibt es dafür eine optische oder akustische Warnvorrichtung?
Erhard Zanner
Am besten verwenden Sie dazu eine sog. »Watchdog« (Wachhund)-Schaltung: Ein Bit des Userports oder der Datasetten-Schnittstelle führen Sie auf ein externes Mono-Flop (Bild). Wichtig ist, daß es sich dabei um einen Typ handelt, den man »retriggern« kann. Solange vor dem Abfalls des Mono-Flops der nächste Impuls eintrifft, bleibt es aktiviert. Dies wird durch eine Software-Schleife realisiert, die in vernünftigen Abständen einen »Stromstoß« an diesem Pin erzeugt. Bleibt der Computer stehen, fehlt der Impuls fürs Mono-Flop: Es fällt ab. Dieses Signal können Sie mit dem NMI-Eingang des CBM 3032 verbinden (notfalls innen auf der Pfostensteckleiste). Dazu müssen Sie eine Software-Routine entwickeln, die das Programm zur Heizungsregelung wieder startet. Etwas schwierig ist die korrekte Handhabung des Stapelspeichers innerhalb der NMI-Routine, das Verhalten des übrigen Systems beim Einschalten sowie die Manipulation des NMI-Impulses.
Dr. Peter Kittel, Frankfurt
Chip ist kaputt
Beim Einschalten meines C 64 erscheinen nur noch die Bildschirmfarben, sonst tut sich nichts mehr. Nur, wenn ich den Feuerknopf des Joysticks in Port 1 drücke, erscheint die Einschaltmeldung. Dafür macht der Cursor jedoch wieder nicht, was ich will. Außerdem kann man nichts mehr über die Tastatur eingeben.
Thomas Singer
Vieles deutet darauf hin, daß der Baustein CIA 1 defekt ist. Er ist direkt mit den Joystickports verbunden und hat vermutlich durch den Kurzschluß Schaden genommen. Allerdings frage ich mich, wie man sowas zwischen Audio/Video und Joystickport 2 überhaupt schafft! Die fehlende Einschaltmeldung, der viel zu schnell blinkende Cursor und das Verweigern der Tastatureingabe: Das sind alles Symptome, die bei einem zerstörten CIA 1 (Steckplatz U1) auftreten. Eine endgültige Diagnose läßt allerdings erst stellen, wenn man den Chip ausgewechselt und mit einem Logiktester untersucht hat.
Thomas Binder, Friedberg ### Spiele ### ((WENN DU SCHARF AUF BILDER BIST, KANNST DU IRGEND EIN BELIEBIGES SPIEL FOTOGRAFIEREN (SCREEN-COPY) UND LEO BITTEN, IRGEND EINEN KURZEN TIP DAZU ZU SCHREIBEN - ODER UMGEKEHRT))
Roboter läuft wieder
Wie muß ich es anstellen, daß der Roboter im Adventure »Robox« aus dem Elektronikraum herauskommt?
Ralf Kranich
Man gibt dem Roboter das Sprachmodul, das man im Computerraum entdeckt: Schau Computer, schau Modulschacht, nimm Modul. Im Elektronikraum gilt folgende Befehlseingabe: Gib Robbie Modul weiter. Der Roboter wird Ihnen jetzt auf Schritt und Tritt folgen.
Michael Vögler, Hamburg
Tips zur Erbschaft
Zum Adventure »Die Erbschaft«: Nachdem ich mit dem Taxi zum Flughafen gefahren bin und gemäß Anweisung die Taste W drücke, steht ein Code auf dem Bildschirm. Was soll ich damit anfangen?
Jörg Finger
Notieren Sie sich den Code. Laden und starten Sie das Programm neu (nach dem Ausschalten oder einem Reset des C 64) und wählen Sie dann den Punkt 2 (Am Flughafen). Geben Sie nach dem Nachladen durch die Floppy den vorher notierten Code »blind« ein, da der Bildschirm nach wie vor schwarz bleibt. Anschließend baut sich der zweite Level auf (Flughafen). Vergessen Sie nicht, etwas zu essen und die grüne Zeitung zu kaufen. Beides ist lebenswichtig. Der Code für Teil 2 lautet »AAAAHAJB«, für den dritten Teil »EFJDN«.
Christian Muschiol, Peißenberg und Dirk Hein, St. Augustin
Possible Mission II
Wie kann ich einen der acht Towers aus »Impossible Mission II« von EPYX verlassen?
Jörg Flenschenberg
Zum Verlassen eines Turms braucht man eine von Tower zu Tower unterschiedliche Codezahl (dreistellig). Deren Elemente findet man in den Räumen. Mit dem Menü im Aufzug stellt man die Zahl ein. Bei der Meldung »FOUND« stimmen eine oder zwei der eingestellten Ziffern, bei »COMPLETE« stimmen alle drei.
In jedem Tower muß ein Tresor mit der Zeitbombe aufgesprengt werden. Man erhält ein Musikstück, das automatisch auf dem Cassettenrekorder aufgezeichnet wird. Man muß sex verschiedene Stücke aufzeichnen. In den acht Türmen verbirgt sich also in den Tresoren von zwei Türmen nichts: Ein Tresor enthält gar kein Musikstück, ein andere ein doppeltes, das an anderer Stelle auch zu finden ist. In diesem Fall muß das Tape um 25 Einheiten zurückgespult werden. Hat man alle sechs Musikstücke, begibt man sich in das Verbindungsstück zwischen zwei Türmen (zwischen zwei Löwen) und drückt den Joystick nach oben. Hat man nicht alle sechs Musikstücke, bewirkt diese Aktion den Tod. Sonst klappt eine geheime Tür auf, und man gelangt in den neunten Tower.
Jetzt sollten die Roboter stillgelegt werden, besorgen Sie sich eine Bombe und springen oben rechts vom fahrenden Aufzug nach links ab. Sprengen Sie über die beiden Roboter ein Loch in den Boden und lassen sich fallen. Nun ist man in drei benachbarten Terminals. Zwei davon sind tödlich, das dritte beendet das Spiel. Tip: »Personally, I don't like those odd ones«. Eines kommt gerade RECHT. Man gelangt auf das Dach, wo bereits Oberschurke Elvin Atombender auf seine verdiente Strafe wartet. Eine kleine Überraschung wartet noch...
Nikolaus Heusler, München-Solln
Trainer-POKE für Crillion II
Kann mir jemand einen Tip oder Kniff geben, wie ich beim Spiel »Crillion« unendliche oder zumindest mehr Leben erhalte?
Matthias Müller, CH-Bern
Für die erste Ausgabe des Spiels »Crillion« kennen wir leider keinen Cheat-Modus, bei »Crillion 2« (64'er-Sonderheft 54) muß man unmittelbar nach dem Laden eingeben: POKE 7705,173.
Nikolaus Heusler, München-Solln
Doch, es gibt auch zu »Crillion 1« einen POKE: Unmittelbar nach dem Laden muß man folgendes eingeben:
POKE 2517,47
Damit erhält man immerhin 245 Leben. Das Spiel läßt sich anschließend wie gewohnt mit RUN starten.
Hilmi Sönmez, Laudenbach ### Sonstiges ###
Datenaustausch
Kann man den C 64 mit einem PC-10 III (8088-1, 16-Bit-CPU) verbinden? Der PC besitzt eine serielle RS232- und eine 8-Bit-Centronics-Parallelschnittstelle. Lassen sich Programme oder andere Dateien vom C 64 zum PC übertragen?
Daniel Keßler, Frankfurt/Oder
Es funktioniert nach dem Prinzip der Datenfernübertragung (DFÜ). Voraussetzung: Entsprechende Software und Kabelverbindung (RS232-Kabel vom Userport des C 64 zur RS232-Schnittstelle des PC). Die Bauanleitung fürs Kabel sowie Software zum C 64 finden Sie beispielsweise als »Convert 64« in unserem Hardware-Sonderheft 67. Auch in der Profi-Corner in 64'er 11/93 steht ein Artikel zu diesem Thema. Als »Empfänger« kann jedes R232-fähige Terminalprogramm für den PC eingesetzt werden (z.B. XTALK).
Nikolaus Heusler, München-Solln ((HIER KÖNNTE MAN UNTER UMSTÄNDEN DAS BILD AUS DER PROFI-CORNER 64'ER 11/93 (SCHALTPLAN) BRINGEN!))
Eingabehilfe
Mir ist aufgefallen, daß viele Programme aus dem 64'er-Magazin in Maschinensprache geschrieben sind. Braucht man eigene Programme, um diesen Maschinensprachecode abzuschreiben oder irgendwelche Hardware? Wie ein Basic-Programm lassen sich diese Zeilen nämlich nicht eingeben.
Andreas Stoje, Kirchberg
Grundsätzlich lassen sich diese speziellen Maschinencodefolgen aus den 64'er-Magazinen nur mit unserem eigens dafür geschaffenen Maschinensprache-Editor MSE V2.1 eingeben. Diese Eingabehilfe wandelt die Programmzeilen des Listings nach dem Eintippen in einen für den Prozessor des C 64 verständlichen Objektcode. Dieser befindet sich beim späteren Laden dann in dem Speicherbereich, dessen Anfangs- und Endadressen in der Kopfzeile des Listings angegeben sind. Der »MSE« kann über BTX abgerufen oder als Listing nach Zusendung eines frankierten Freiumschlags bei der Redaktion angefordert werden.
DIE RED.
Urheberrecht beachten
Die beiden Grafik-Adventures Zak Mc Kracken und Maniac Mansion von Lucasfilm Games kennt bestimmt jeder. Diese Spiele benutzen ein spezielles Eingabesystem für Befehle: Man klickt die Verben, Objekte und Gegenstände mit dem Mauszeiger an. Darf man dieses Eingabesystem in eigenen Programmen verwenden und diese zur Veröffentlichung anbieten?
Andreas Nagele, Waidhofen/Th. (Österreich)
Die Programmiertechnik, nach der diese Eingaberoutine arbeitet, stammt nicht von Lucasfilm Games, sondern wird in unzähligen anderen C 64-Programmen angewandt. Falls Sie entsprechende Kenntnisse in Assembler besitzen und eine gleichartige Routine selbst programmieren, wird niemand etwas gegen eine Veröffentlichung einwenden. Anders sieht es dagegen aus, wenn man die von Lucasfilm Games entworfene Routine Byte für Byte aus einem der genannten Adventures »klaut«, in eigene Spiele übernimmt und solche Programme ohne Zustimmung des Urhebers weitergibt, veröffentlicht oder vermarktet. In diesem Fall dürfte ein klarer Verstoß gegen das Copyright-Gesetz vorliegen.
DIE RED.
Identifiziert
Vor einiger Zeit habe ich einen alten Siemens-Computer geschenkt bekommen. Wer weiß, was das für ein Gerät ist?
Tobias Pölleth
Es handelt sich um ein ziemlich betagtes Datensichtgerät (DSG), das von Siemens schon lange nicht mehr hergestellt wird. Es besteht im wesentlichen aus Monitor mit ASCII-Controller, Tastatur und Schnittstelle. Damit wird es an einen Zentralrechner angeschlossen, der mehrere DSGs bedienen kann und mit dem Betriebssystem SINIX (Siemens-Unix) arbeitet. Da dieses Datensichtgerät keinen eigenen Mikroprozessor besitzt, können Sie ohne Zentral-Computer keine Reaktion auf irgendwelche Eingaben erwarten.
Christian Treffler, Neusäß
Mein C 128 hat 'nen Vogel!
Ich bin fast 21 Jahre alt, begeisterter Fan eines C 128D sowie eines C 16 mit 64K RAM und eines computerverrückten Vogelweibchens Marke Wellensittich (Melopsittacus undulatus), das »Anke« heißt. Seht Euch mal das Foto an (Bild), dann erkennt Ihr, daß dieses Tier Computer genauso liebt wie ich. Das Bild ist nicht gestellt, sondern völlig realistisch (ratet mal, wer mich gerade beim Tippen dieses Briefes an Euch stört?). Das Foto dient als Warnung an alle Computerfreunde, die sich einen Wellensittich anschaffen wollen. Nicht nur, daß sie ständig auf der Tastatur herumhüpfen - sie haben auch einen fast unstillbaren Appetit auf Computerpapier! Setze ich mich an den C 128 und lasse Anke im Käfig, macht sie einen derartigen Lärm, daß man sie auch bei geschlossenem Fenster bis auf die Straße hinaus hört. Dann lasse ich das Vögelchen lieber mittippen! Wie kann ich Anke ablenken, daß ich beim Computern meine Ruhe habe?
Ralf Justinger, Hermeskeil
Wir kennen das Problem. Auch wir besitzen ein Reaktionsmaskottchen, das auf den Namen »Leo« hört und den ganzen Tag mit gespanntem Blick vor dem Bildschirm sitzt. Beruhigen läßt sich dieses possierliche Tierchen nur, wenn es ein heißes Actiongame nach dem anderen in den C 64 laden darf. Im Umgang mit dem Joystick hat es Leo allerdings schon zu einer bewundernswerten Bravour gebracht. Wir empfehlen: Lesen Sie die Kleinanzeigen in der 64'er und versuchen Sie, für Anke ebenfalls einen Computer zu bekommen. Ein VC 20 wäre genau das Richtige fürs Vögelchen. Wer weiß, vielleicht programmiert Anke sogar eines Tages das »Listing des Monats«?
DIE RED.
Simon's-Basic-Modul abschalten
Wie kann man das aktive Modul softwaremäßig abschalten?
Jürgen Bierwagen
Es muß nicht gleich ein hardwaremäßiger Umbau des Moduls sein, um den gewünschten Effekt zu erzielen. Zwei Befehlseingaben erzielen die geforderte Konfigurationsänderung:
SYS 64760 (Modul abschalten) SYS 64738 (einschalten)
Allerdings ist dabei zu beachten, daß nach dem Abschaltbefehl noch der High-Byte-Zeiger auf die oberste Basic-Grenze zurechtgerückt werden muß:
POKE 56,160
Jetzt stehen die gewohnten 38911 Basic-Byte zur Verfügung (auch wenn der Bildschirm nur 30719 anzeigt).
Übrigens: Zur erneuten Aktivierung von Simon's Basic genügt statt der Eingabe von SYS 64738 auch ein Druck auf die RESTORE-Taste.
Roland Bauer, Forst