Fragen & Antworten
Teilweiser Nachdruck aus 64'er 4/84, S. 14, 64'er 5/84, S. 10, 64'er 6/84, S. 18, 64'er 7/84, S. 10, 64'er 8/84, S. 17, 64'er 9/84, S. 11, 64'er 10/84, S. 16, 64'er 12/84, S. 14, 64'er 2/85, S. 12, 64'er 3/85, S. 16, 64'er 5/85, S. 11, 64'er 6/85, S. 12, 64'er 7/85, S. 14, 64'er 8/85, S. 18, 64'er 9/85, S. 149, 64'er 10/85, S. 12, 64'er 11/85, S. 14 und 64'er 2/86, S. 16 (jeweils einzelne Fragen und Antworten aus dem Leserforum).
Der PET-Emulator der Demodiskette
Was hat es mit dem Programm »PET-Emulator« auf der C 64-Demodiskette auf sich?
Ohne Frage läßt die Dokumentation von Commodore auch zur Demodiskette einiges zu wünschen übrig. Das Programm »Emulator« läßt sich jedoch trotzdem sehr gut verwenden. Es gibt inzwischen zwar schon eine große Auswahl an Programmen für den C 64, aber einige Probleme (zum Beispiel mathematischer Natur) sind noch nicht umgesetzt worden. Da bietet sich doch eine Übernahme der alten CBM 3032-Programme an.
Konstruktionsbedingt unterscheiden sich der 3032 und der C 64 aber stark in der Speicherbelegung, dem Speicherplatz und der Zeropage. Zum Beispiel liegt das Video-RAM des 3032 im Bereich von 32768 bis 33792. Der C 64 dagegen hat sein Video-RAM ab Adresse 1024 bis 2023 und benötigt zusätzlich noch die Information über die Zeichenfarbe. Der 3032 verfügt über 31 KByte freies RAM, der C 64 dagegen über 38 KByte.
Um nun 3032-Programme direkt und ohne Umschreibung auf dem C 64 laufen zu lassen, braucht man nur den Emulator von der Demodiskette laden und starten. Danach wird das betreffende 3032-Programm von Kassette oder Diskette geladen und ist ohne weiteres sofort lauffähig. Das gilt sowohl für Basic- als auch für reine Maschinenprogramme.
Bei einigen wenigen Maschinenprogrammen kann der Emulator aussteigen, beispielsweise wenn auf ROM-Routinen zugegriffen wird, die der Emulator nicht unterstützt. Da hilft nur eines: ausprobieren.
Der Emulator enthält übrigens einen DOS-Manager, der dem DOS 5.1 der Demodiskette entspricht.
Insgesamt ist der Emulator eine nützliche Sache. Er vergrößert die ohnehin schon bemerkenswerte Programmvielfalt für den C 64 noch um einiges.
Probleme mit Datasette
Ich habe andauernd »LOAD ERROR« bei meiner Datasette.
Bei Problemen mit Datasette hilft es oft, den Tonkopf mit Spiritus zu putzen (Wattestäbchen verwenden). Außerdem sollte man keine Chromdioxid-Kassetten verwenden. Auch die Justierung des Tonkopfes mittels der dafür gedachten Schraube bringt manchmal Erfolg.
Drucker zu langsam?
Die an meinen C 64 angeschlossene Typenrad-Schreibmaschine »Privileg 3000«, betrieben mit Textomat von Data Becker ist mir viel zu langsam. Wer kann helfen? Und wie?
Typenraddrucker sind leider nun einmal um einiges langsamer als Matrix- oder Tintenstrahldrucker. Dieser Mangel ist konstruktionsbedingt und läßt sich softwaremäßig nicht beheben. Es ist ähnlich wie mit den Autos der 18-PS-Klasse – sie sind einfach von Natur aus langsam. Die einzige Abhilfe besteht in der Anschaffung eines schnelleren Modells oder auch eines Matrixdruckers mit NLQ-Schrift.
Reset-Schalter zerstört Computer?
Ich wollte einen Reset-Schalter in meinen C 64 einbauen lassen. Mein Händler sagt aber nein dazu. Frage: Stimmt es, daß nach einem Reset durch Kurzschluß einige Bausteine im Computer zerstört werden können?
Sie sind einem Ammenmärchen aufgesessen. Ein ordnungsgemäß eingebauter Reset-Schalter kann nichts zerstören. Der Netzschalter Ihres Computers ist beispielsweise ebenfalls mit der RESET-Leitung des Prozessors verbunden, und niemand würde auf die Idee kommen zu behaupten, das Einschalten eines Computers könnte diesen zerstören.
Simons Basic und DOS 5.1
Wie kann man gleichzeitig mit Simons Basic und DOS 5.1 arbeiten?
Beide Programme arbeiten wie folgt zusammen:
— Simons Basic laden und starten.
— DOS 5.1 mit "LOAD" "DOS5.1",8.1 laden und mit SYS 52224 starten.
Es geht natürlich auch umgekehrt, kann aber dann in einigen Fällen zu Problemen führen.
Hier nun die Abhilfen:
— Sind beide Programme im Speicher, dann wird DOS mit SYS 52224 eingeschaltet.
— Werden DOS-Befehle nur mit einem müden READY beantwortet (oder überhaupt nicht), dann gibt man " #8" ein. Die »8« steht dabei für die Geräteadresse der Floppy.
Es gibt aber auch eine Simons Basic Version II, die von Anfang an problemlos mit dem DOS 5.1 läuft.
Basic-Zeilen länger als 80 Zeichen?
Die maximale Zeilenlänge beim C 64 beträgt 80 Zeichen. Bei manchen Programmen werden diese teilweise überschritten. Wie kann man das Programm trotzdem zum Laufen bringen?
Diese häufig gestellte Frage läßt sich einfach beantworten. Im Handbuch des C 64 befindet sich im Anhang D auf Seite 130/131 eine Tabelle der Abkürzung von Basic-Schlüsselwörtern. Fast jeder Basic-Befehl läßt sich durch Eingabe des ersten Buchstabens, gefolgt vom geshifteten zweiten Buchstaben des Befehls abkürzen. Zum Beispiel wird aus der Eingabe von P (Shift)O das Wort POKE, oder P (Shift)R wird zu PRINT# im Gegensatz zu »?« für PRINT. So kann eine Basic-Zeile beim Listen 80 Zeichen überschreiten. Versuchen Sie nicht, diese Zeile hinterher zu verändern, indem Sie mit dem Cursor in diese Zeile gehen und nach einer Änderung wieder mit RETURN verlassen. Dann wird automatisch der letzte Teil, der sich in der dritten Reihe befindet, anbgeschnitten. Zum Editieren geben Sie am besten die komplette Zeile mit den entsprechenden Abkürzungen noch einmal ein.
Nochmals Simons Basic
Benötigt Simons Basic einen Teil des Basic-RAMs? Wenn ja, wieviel?
Simons Basic belegt die oberen acht KByte des Anwender-RAM, der verfügbare freie Speicher für Basic-Programme reduziert sich also um diese acht KByte.
Grafik mit 1526?
Ich besitze den 1526-Drucker von Commodore. Wie kann man ihn grafikfähig machen?
Der Commodore ist hardwaremäßig nicht für hochauflösende Grafik vorgesehen, das heißt, es besteht keine Möglichkeit einer Einzelnadelansteuerung. Allerdings kann man ein Zeichen selbst definieren und so – allerdings sehr umständlich – Grafik drucken. Dazu definiert man sich das Zeichen als geeignetes Grafiksymbol, fährt durch Ausgabe einer Reihe von Blanks an die richtige Position, druckt das Zeichen und veranlaßt dann einen Wagenrücklauf ohne Zeilenvorschub. Nun wird das nächste Grafikzeichen definiert und das ganze Spiel wiederholt sich. Mit dieser Methode ist sogar eine Grafik-Hardcopy möglich (siehe 64'er, 5/84, Seite 74: »Ein eigentlich unmögliches Programm«).
Rechengenauigkeit
Warum gibt der C 64 bei »PRINT INT(3/0.03)« nicht 100, sondern 99 aus?
Mathematisch gesehen ist die INT-Funktion eine Abbildung der Menge der reellen Zahlen auf die Menge der ganzen Zahlen, mit der Eigenschaft: INT(x) ist diejenige ganze Zahl, die kleiner oder gleich (!) x ist. Anders ausgedrückt schneidet INT einfach alle Nachkommastellen einer Zahl ab. Und genau das macht auch der C 64.
Warum erhält man dann aber die falsche Antwort »INT(3/0.03) = 99«?. Dazu muß ich etwas ausholen. Testen Sie mal das folgende Programm:
10 K = 0 : FOR I = 0 TO 2 STEP 0.1
20 IF I = 1 THEN PRINT "I = 1 GEFUNDEN!" : K = 1
30 NEXT
40 IF K = 0 THEN PRINT "I = 1 NICHT GEFUNDEN"
50 END
Wenn Sie keinen Tippfehler gemacht haben und keine Sonderversion des C 64 besitzen, erhalten Sie als Ausgabe »I = 1 NICHT GEFUNDEN!«. Erstaunlich! Wie kann so etwas sein? Wenn man von Null bis Zwei in Zehntel-Schritten zählt, erreicht man doch ganz sicher auch die Eins. Nun, der C 64 scheinbar nicht. Er stellt nämlich intern alle Zahlen binär dar, also auch solche kleiner als Eins. Fatalerweise ist es nun so, daß dezimal endliche Brüche in Binärschreibweise häufig nur als nicht abbrechende, periodische Zahlen geschrieben werden können. Das ist speziell bei 0.1 und auch bei 0.03 der Fall. Also wird die interne Binärdarstellung dieser Zahlen im Computer nach einer gewissen Stellenzahl abgebrochen (gerundet). Darum gibt der Ausdruck »3/0.03« beim Computer nicht ganz exakt 100, sondern etwas weniger.
Die Differenz können Sie sich mit »PRINT 100 - 3/0.03« selbst anschauen.
Wendet man nun die INT-Funktion auf eine Zahl an, die etwas kleiner ist als 100, dann kann nur 99 dabei herauskommen.
Das auf den ersten Blick merkwürdige Ergebnis »INT (3/0.01) = 99« ist also nicht auf die INT-Funktion zurückzuführen (diese arbeitet völlig einwandfrei), sondern ist eine Folge der internen Binärdarstellung von Dezimalzahlen im C 64.
Aus diesem Grunde ist bei »IF...THEN«-Abfragen auch Vorsicht geboten. So manches selbstgeschriebene Programm arbeitet in manchen Situationen scheinbar nicht korrekt, weil einfach nicht an die nur begrenzte Rechengenauigkeit eines Computers gedacht wurde.
RENEW mit einem POKE?
Mit dem POKE 2050,10 bekommt man Programme, die mit SYS 64738, mit RESET oder mit NEW gelöscht wurden, wieder! Nach der Eingabe einer nicht belegten Programmzeile und (RETURN) ist das Programm wieder da.
Schön wär's ja, aber leider nicht ganz richtig. Zwar kann man das Programm mit diesem POKE wieder sichtbar machen, doch lauffähig ist es nicht mehr. Sobald in dem Programm eine Variable definiert wird, hat man nur noch Schrott vor sich, auch Speichern nach dem »RENEW« hilft nichts mehr. Der POKE 2050,10 setzt nämlich die Pointer nicht mehr neu.
Geht TI$ falsch?
Die eingebaute Uhr (TI$) verliert die richtige Zeit, wenn Daten oder Programme auf Kassette gespeichert werden. Nach Beendigung eines Abspeichervorganges hat die Uhr einen Sprung nach vorne getan, der jedoch leider keinerlei Beziehung zur tatsächlich vergangenen Zeit hat. Das ist bei meinem Programm-Thermometer mit stündlichem Abspeichern der Temperatur auf Kassette sehr störend.
Sowohl die interne Uhr (TI$) als auch die Kassettenoperationen werden beim VC 20 und C 64 über Interrupt gesteuert. Da es beim Laden und Speichern von Programmen und Daten auf hohe zeitliche Genauigkeit ankommt, wird die interne Uhr für die Dauer dieser Operationen einfach abgeschaltet. Nach Beendigung der Kassettenopertion kann TI$ daher einen nicht definierten Wert besitzen. Leider gibt es keine Möglichkeit, dies zu umgehen, es sei denn, man verwendet einen externen Zeitgeber.
Zeichensalat?
Es kommt sehr oft vor, daß ich nach dem LISTen eines Programms nur noch merkwürdige Zeichen und Zeilen voller unsinniger Basic-Befehle sehe, wie zum Beispiel »10 PRINTPRINTSAVELISTGET...« etc. Das Ganze wird zudem noch in vielen verschiedenen Farben angezeigt, teilweise auch in reverser Darstellung. Ich kann diese Zeichen dann auch nicht überschreiben. Woran liegt das, wie bekomme ich das weg?
Der beschriebene Effekt kann drei verschiedene Ursachen haben:
- Sie haben ein Maschinenprogramm ohne Basic-Vorspann, das mit ,8,1 geladen werden muß, nur mit ,8 geladen.
- Sie haben ein Basic-Programm, das den unteren Basic-Bereich Speicherplatz für Grafik benötigt, einfach geladen, ohne mit bestimmten POKE-Befehlen den Basic-Start hochzusetzen.
- Sie haben durch mehr oder weniger wildes POKEn in von Basic oder Betriebssystem benutzten Speicherstellen den Computer völlig irritiert.
Es gibt nun Gott sei Dank einen bemerkenswert einfachen Weg, diesen »Zeichensalat« wieder zu beseitigen: durch Aus- und Wiedereinschalten des Computers.
Eingaben von der Tastatur verhindern?
Wie verhindere ich Eingaben von der Tastatur (insbesondere die STOP-Taste)? Kann man das mit einem POKE-Befehl verhindern?
Eingaben von der Tastatur verhindert man mit POKE 649,0 (in Speicherstelle 649 ist die Größe des Tastatur-Puffers gespeichert).
Die RUN/STOP- und RESTORE-Taste sperrt man durch POKE 808,227. Die Sperre wird gelöst durch POKE 649,10:POKE 808,237.
Text und Grafik mischen
Wie kann ich in Simons Basic hochauflösende Grafik und Text gleichzeitig darstellen?
Die Darstellung von Text und gleichzeitig Grafik im Grafikmodus des Simons Basic läßt sich durch den Simons Basic-Befehl »TEXT« erreichen. Dieser ist so anzuwenden:
TEXT x,y, "Text",m,gr,ab
x = X-Koordinate;
y = Y-Koordinate;
m = Grafikmodus (m=0 oder m=1 oder m=2),
gr = Größe des darzustellenden Buchstabens;
ab = Abstand zwischen den einzelnen Buchstaben.
Um einen gleichen Abstand und eine gleiche Größe der Buchstaben wie beim normalen Textmodus zu erreichen, wird für »gr« eine 1 und für »ab« eine 7 eingesetzt. Also:
TEXT x,y, "Text",m,1,7
Dennoch läßt sich eine Eingabe von Antworten im Grafikmodus des Simons Basic nicht sehr einfach realisieren, da bei der Eingabe, jedenfalls im Grafikmodus, weder Cursor noch Eingaben sichtbar sind. Vielleicht gibt es einen Ersatzbefehl für den herkömmlichen INPUT?
Programmunterbrechung bei Druckerausgabe
Bei der Druckerausgabe erhalte ich oft einen »DEVICE NOT PRESENT ERROR«, obwohl der Drucker eingeschaltet ist.
Dieser Fehler tritt sehr häufig bei Druckern auf, die über den seriellen Bus des C 64 angeschlossen werden. Die Ursache dafür liegt in der Konzeption des seriellen Busses. Abhilfe: Statt PRINT# mit CMD arbeiten, dann tritt der Fehler nur noch äußerst selten oder gar nicht mehr auf.
Schwierigkeiten mit Softwareschutz?
Wieso ist das Programm auf einer geschützten Diskette nach einem »Backup« nicht lauffähig?
Weil der Software-Hersteller durch den Kopierschutz gerade ein »Backup« verhindern will. Zu diesem Zweck sind meist gleich mehrere Sicherungen eingebaut. Um es mit den Software-Herstellern nicht zu verderben, wollen wir Ihnen aber lieber nicht verraten, wie das im einzelnen funktioniert.
Starten und Speichern von Spielprogrammen beim Commodore 64
Wenn ich ein Spielprogramm von Kassette geladen habe, starte ich es normalerweise durch die Eingabe des Wortes RUN nebst Drücken der RETURN-Taste. In einigen Fällen funktioniert das nicht, aber ich habe bisher folgende Verfahren kennengelernt:
1. Eingabe von SYS mit Adreßzahl, wobei die Adreßzahl im meist nur einzeiligen LIST-Ausdruck steht.
2. Eingabe von SYS 64738 und dann erst SYS mit der Adreßzahl aus dem Listing.
3. Eingabe von SYS mit Adreßzahl, die nicht im Listing steht ( wie kann ich diese finden, wenn ich sie nicht kenne oder vergessen habe?)
4. Löschen der Programmzeilen mit SYS-Angaben.
5. Drücken der RUN/STOP- und RESTORE-Taste.
Mich interessiert, wie diese Startroutinen zu erklären sind und ob sie bei einem neuen Speichern des Programmes zu eliminieren sind. Häufig kann man aus einem Spielprogramm nicht in den Normalzustand zurückkehren. Mir bleibt dann nichts anderes übrig, als den Commodore ab- und wieder einzuschalten.
In manchen Fällen erscheint nach Drücken von RUN/STOP und RESTORE auf leerem Bildschirm das Wort READY und darunter der blinkende Cursor, aber nach Eingabe von Befehlen wie LOAD oder RUN wird nur die Eingabe von Befehlen wie LOAD oder RUN gelöscht, und der Cursor springt zurück. Was bedeutet das? Wie kann ich hier den Commodore wieder zu sinnvoller Reaktion veranlassen?
Manchmal passiert mir folgendes: Ich möchte ein Spielprogramm auf Kassette speichern. Obwohl das Programm mit Namen auf der Kassette ist, kann ich es mit diesem Namen nicht SAVEn. Der Commodore meldet einen Fehler. Lasse ich den Namen weg, funktioniert das Speichern einwandfrei. Wie ist das zu erklären und wie kann ich in solchen Fällen den Namen doch mitspeichern?
Zu den Fragen zum Starten von Programmnamen:
1. Hier handelt es sich um ein Maschinensprache-Programm, an das vorher eine Basic-Zeile gehängt wurde, die mit dem entsprechenden SYS-Befehl den Maschinenspracheteil startet. (Der Speicher des C 64 ist aufgeteilt in die Speicherzellen 0 bis 65535. In einer dieser Speicherzellen liegt der Beginn des Maschinenprogramms. Mit dem SYS-Befehl und der Angabe der Speicherzelle, wo das Maschinenprogramm beginnt, wird es gestartet).
2. Wenn man erst mit SYS 64738 den Computer in den Einschaltzustand bringt und dann den entsprechenden SYS-Befehl aus dem Listing eingibt, müßte eigentlich das gleiche herauskommen, wie wenn man den SYS 64738 wegläßt. Hier hat Ihnen jemand Humbug erzählt oder Ihnen ein ziemlich verpfuschtes Programm gegeben.
3. Hier wurde ein Maschinensprache-Programm abgespeichert, ohne eine Basic-Zeile mit dem entsprechenden SYS-Befehl vorne dranzuhängen. Die Adresse für den Start des Programms läßt sich am besten so finden:
— Maschinensprache lernen
— Maschinensprache-Monitor laden
— SUCHEN
4. Ist uns nicht bekannt.
5. Der sogenannte Restore-Vektor wurde vom Programmierer geändert, das heißt, bei Drücken von RUN/STOP-RESTORE wird nicht mehr die normale Betriebssystem-Routine gestartet, sondern es wird zu der Adresse gesprungen, die der Programmierer angewählt hat, in diesem Fall die Startadresse des Programms.
Zur Frage, die das Zurückkehren aus Spielprogrammen in den Normalmodus betrifft:
Das war offensichtlich Absicht der Programmierer der Spiele (aus welchem Grund auch immer). Hier hilft meistens wirklich nur das Aus- und Anschalten des Computers.
Antwort auf die Frage, die das Speichern von Programmen betrifft:
Hier reicht offensichtlich der Speicher nicht mehr aus, um den Namen dort abzulegen. (Der Fehler ist dann wohl ein OUT OF MEMORY ERROR.) Man kann sich jedoch manchmal helfen, indem man den Variablenspeicher in einen freien Speicherbereich verlegt:
LOAD »Programm«
POKE 56,207
CLR
SAVE »Name«
Für das Funktionieren dieser Maßnahme kann nicht garantiert werden, da es doch immer sehr auf das einzelne Programm ankommt.
Bits hörbar machen
Ist es beim C 64 möglich, beim Laden von Datasette die Signale hörbar zu machen?
Um die Signale, die von der Datasette kommen, hörbar zu machen, muß einfach mit POKE54296,15 die Lautstärke im SID auf 15 gesetzt werden. Nun sind die Signale beim Laden, SAVEn und VERIFYen über den Lautsprecher des Monitors zu hören (auch bei Fast- und Turbo-Tape).
Die Zwangspausen des C 64
Bei längerem Suchen in einer indexsequentiellen Datei macht der C 64 Pausen bis zu zirka fünf Minuten (bei älteren Versionen von Datamat bis zu 20 Minuten!). Woher kommen die Pausen und wie sind sie zu beseitigen?
Wenn der C 64 sehr viele Strings zu verarbeiten hat, muß er ab und zu seinen dafür benötigten Speicherplatz aufräumen. Das heißt, er überprüft, welche Variablen noch aktuell sind und benötigt werden. Den Rest schmeißt er weg. Die dadurch entstandenen Lücken werden durch die verbleibenden Werte geschlossen. Diese Vergleiche und Verschiebearbeiten sind der Grund für diese langen Wartezeiten. Den Vorgang selber nennt man auch Garbage Collection. Mehr zu diesem Thema finden Sie in der Ausgabe 1/85.
Wie schließt man Monitore an?
Frage: Wie schließe ich diverse Monitore an den C 64 oder VC 20 an?
Einen Schwarz-Grün-Monitor schließt man an, indem man aus dem Video-Port des C 64 die Drähte »GND« und »VIDEO HIGH« mit den entsprechenden Monitoreingängen verbindet. Dabei muß »GND« am Monitor-Stecker außen liegen.
C 64 und Videorecorder
Wie kann ich mit dem Videorecorder die Signale vom Computer aufnehmen?
Die Lösung ist ganz einfach: Man nehme das Antennenkabel des Computers, stecke dieses in den Antenneneingang des Videorecorders und stellte den Recorder auf den »Sender« des Computers ein. Danach braucht man nur noch wie bei der normalen Aufnahme zu verfahren.
Hardcopies mit MPS 802 und Simons Basic?
Wir haben den C 64 und den Drucker MPS 802 (Nachfolgegerät vom VC 1526), dazu Simons Basic. Ist es möglich, im HiRes- beziehungsweise Lowcol-Modus eine Kopie des Bildschirms zu erstellen?
Das könnten Sie ja eigentlich selbst ausprobieren. Aber wenn Sie mit dem Befehl HRDCPY keine Hardcopy des normalauflösenden Bildschirms erhalten sollten, könnte der Drucker defekt sein. Eine Hardcopy des hochauflösenden Grafikbildschirms hingegen ist mit dem Simons Basic-Befehl COPY nicht möglich. Das gilt auch für den weitgehend baugleichen VC 1526. Bei HiRes-Hardcopies macht der MPS 802 Schwierigkeiten, da er von sich aus nicht grafikfähig ist. Erst durch geeignete Programme läßt er sich dazu »überreden«.
Erhöhte Lebensdauer bei Dauerbetrieb?
Wie lange kann man den C 64 laufen lassen, ohne daß er Schäden nimmt?
Es gibt Computer-Benutzer, die ihren Computer niemals abschalten. Er läuft dort jahrelang, ohne daß deswegen ein Defekt auftritt. Sie begründen das damit, daß bei jedem Ein- und Ausschaltvorgang die elektronischen Bauelemente warm werden und wieder abkühlen. Da in vielen Bauelementen verschiedene Materialien verarbeitet werden, die sich bei einer Temperaturänderung unterschiedlich ausdehnen, können Spannungen auftreten. Diese andauernden thermischen Belastungen könnten die Lebensdauer vor allem der empfindlichen Halbleiter herabsetzen.
Bei einem Dauerbetrieb treten diese Belastungen nicht auf. Wenn für ausreichende Belüftung gesorgt wird und der Computer nicht noch zusätzlich auf einer Heizung abgestellt wird und vor direkter Sonneneinstrahlung geschützt ist, dürften keine Probleme entstehen.
Resettaste für VC 20?
Sind die Anschlüsse für eine Reset-Taste am User-Port von VC 20 identisch? Ist so eine Taste auch am C 64 anschließbar?
Die beiden User-Ports sind nicht 100% identisch, jedoch gibt es beim Anschluß eines Reset-Tasters keine Unterschiede. Durch Verbindung von Pin 1 und Pin 3 erfolgt bei beiden Computern ein Reset.
Raubkopien strafbar?
Darf man gekaufte Software auf Leerkassetten kopieren und verkaufen? Oder ist das gesetzlich verboten, so daß eine Bestrafung erfolgt?
Das Kopieren und Weiterverkaufen von fremder Software ist ein Verstoß gegen das Urheberrecht und wird entsprechend geahndet. Man muß in jedem Falle mit hohen Schadensersatzforderungen der Herstellerfirmen rechnen.
Programme weg beim Reset?
Ich habe in meinem C 64 eine Reset-Taste eingebaut, und wenn ich diese benutze, ist das Programm weg. Wie kann ich dieses Programm wieder hereinholen? Suche dazu die PEEKs und POKEs mit Adressen.
Nach einem Reset bleiben Maschinenprogramme nach wie vor im Speicher erhalten und können wieder mit entsprechendem SYS gestartet werden. (Dies ist jedoch nicht der Fall bei Maschinenspracheprogrammen, die im Kassettenpuffer liegen [dez. 828-1019], da dieser bei einem Reset gelöscht wird.) Bei Basic-Programmen muß man schon mehr machen, um sie wieder herzuholen:
POKE 2049,99: POKE 2050,99:POKE 45,X: POKE 46,Y: SYS42291
Dabei sind X und Y die Werte, die man vor Drücken des Reset-Knopfes durch ?PEEK(45); PEEK(46) abfragen sollte. Kommt man aus Versehen auf den Knopf und weiß den Inhalt dieser Speicherstellen nicht mehr, so empfiehlt es sich, in die Speicherstellen 45 und 46 angenommene Werte für die Programmenadresse zu POKEn (45 = Low-Byte, 46 = High-Byte).
Von Kassette auf Floppy?
Ich möchte mir demnächst eine Floppy 1541 kaufen. Kann man mehrere Programme, die man auf Kassette hat (gekaufte Spiele und anderes), auf eine einzige Diskette speichern, um Platz zu sparen? Wenn ja, wie?
Natürlich kann man auch mehrere Programme auf einer Diskette abspeichern. Kommerzielle Software auf Kassette ist jedoch in der Regel mit Autostart und einem Softwareschutz versehen, so daß ein Kopieren in der Regel nicht möglich ist.
Druckroutinen umschreiben?
Wie kann ich Programme, die für den Drucker VC 1526 geschrieben sind und dessen Fähigkeiten ausnutzen, für den VC 1525 umschreiben?
Der VC 1526 verfügt über eine Reihe komfortabler Befehle zur formatierten Ausgabe, die auf dem VC 1525 nicht vorhanden sind. Diese Formatierungsbefehle müssen für den VC 1525 durch Software ersetzt werden. Im Prinzip geht es darum, eine Art PRINT USING-Routine zu schreiben. Am besten schreibt man alle Programmteile, die Ausgaben an den Drucker liefern, völlig neu.
POKEs im Simons Basic?
Warum bringen verschiedene POKEs, die im Commodore-Basic einwandfrei funktionieren (zum Beispiel Listschutz) mit Simons Basic das Programm zum Abstürzen?
Einige Adressen der Zeropage (das sind die Speicherzellen von 0 bis 255) werden von Simons Basic anders belegt, so daß eine Reihe von POKE-Befehlen nicht mehr funktionieren oder eben zum Absturz führen.
Disketten beidseitig verwenden?
Wenn man mit einem Bürolocher auf einer einseitig beschreibbaren Diskette am linken Rand eine Stanzung in Höhe des Schreibschutzes am rechten Rand vornimmt, läßt sich dann die Diskette beidseitig auf einer Floppy-Disk 1541 verwenden? Ist die Datensicherheit dabei gewährleistet, oder spricht etwas gegen diese Methode?
Die Floppy VC 1541 interessiert sich nicht für das kleine Indexloch in der Diskette, wie andere Floppy-Stationen das in der Regel tun. Deshalb können Disketten beidseitig verwendet werden. Allerdings ist bei einseitig beschreibbaren Disketten auch nur eine Seite durch den Hersteller geprüft. Die zweite Seite kann daher unter Umständen fehlerhafte Sektoren enthalten, die aber vom Floppy-Betriebssystem dann nicht benutzt werden.
Für sehr wichtige Aufzeichnungen empfiehlt sich jedoch immer die Verwendung einseitig geprüfter Disketten, die auf der Rückseite nicht beschrieben werden.
RESET über User-Port?
Um bei meinem Commodore 64 nach einem Spiel ein anderes Programm zu laden, muß in den meisten Fällen der Computer aus- und dann wieder eingeschaltet werden. Kann man das umgehen, indem man kurzzeitig Pin 1 und 3 des User-Ports miteinander verbindet, oder führt dies zu einer Beschädigung des Computers?
Pin 1 des User-Ports liegt an Masse, Pin 3 ist die RESET-Leitung. Stellt man kurzfristig eine Überbrückung her (zum Beispiel mit einer Büroklammer oder ähnlichem), dann wird ein Reset ausgelöst, wie der Computer ihn auch nach dem Einschalten durchführt.
Der Reset an sich ist ungefährlich. Falls man jedoch beim Manipulieren am User-Port unabsichtlich andere Pins miteinander in Verbindung bringt, kann dies zu Beschädigungen des CIA-Bausteins führen. Es empfiehlt sich daher der Einsatz eines kleinen Tastschalters.
Commodore-64-Programme auf VC 20?
Sind die für den C 64 abgedruckten Programme auch für den VC 20 zu benutzen? Natürlich nur, soweit die benötigte Peripherie vorhanden ist.
Sofern es sich um reine Basic-Programme ohne POKEs und PEEKs handelt, gibt es keine Schwierigkeiten bei der Übernahme von Programmen des C 64 auf den VC 20 oder umgekehrt. Wegen der unterschiedlichen Zeichenzahl pro Bildschirmzeile (22 Zeichen beim VC 20, 40 Zeichen beim C 64) wird die Bildschirmdarstellung unter Umständen jedoch etwas unübersichtlich. Entsprechende Änderungen bei den PRINT-Befehlen sind jedoch auch für den Anfänger nicht allzu schwer zu bewerkstelligen. Falls das Programm aber POKE-Befehle oder Maschinenspracheteile enthält, ist die Anpassung ohne Kenntnis der jeweils anderen Systemadressen kaum möglich. Mehr zu diesem Thema finden Sie im Sonderheft 3/86.
Drucker/Floppy-Einschalt-Test
Mit welchen Befehlen kann ich überprüfen, ob der Drucker oder die Floppy eingeschaltet ist?
Eine Überprüfung, ob ein Drucker am seriellen Bus angeschlossen ist, läßt sich beim Commodore 64 durch folgende Befehle erreichen:
100 POKE 768, 185
110 OPEN 1,4: PRINT#1
120 POKE 768, 139
Da so jegliche Fehlermeldung unterdrückt wird, kann nun durch Abfrage der Statusvariablen »ST« geprüft werden, ob die Leerzeile (oder jeder beliebige andere Text, wie zum Beispiel nicht druckende Steuerzeichen!) vom Drucker angenommen wurde (IF ST <> 0 THEN ...). Somit kann verhindert werden, daß ein Programmlauf durch »DEVICE NOT PRESENT« abgebrochen wird. Ein Test auf Vorhandensein einer Diskettenstation kann durch entsprechende Programmänderung erfolgen.
Autostart
Wie bringe ich meine Programme dazu, daß sie nach dem Laden von Diskette oder Kassette automatisch starten?
Beim Laden von Datasette ist ein Autostart sehr einfach: Drücken Sie gleichzeitig »SHIFT« und die »RUN/STOP«-Taste. Es wird das nächste Programm von Kassette gelesen und sofort gestartet. Beim Diskettenbetrieb empfiehlt es sich, zunächst das DOS 5.1 von der Demo-Diskette zu laden. Der DOS-Befehl »↑« (Hochpfeil), gefolgt von einem Programmnamen, lädt das entsprechende Programm von Diskette und startet es automatisch. Mehr zu diesem Thema finden Sie im 64'er, Ausgabe 6, 7 und 8/84.
Komma als Satzzeichen
Kann man bei einem INPUT-Befehl das Komma als normales Satzzeichen verwenden?
Um einen INPUT-Befehl auch Kommata (und Doppelpunkte) akzeptieren zu lassen, muß man lediglich als erstes Zeichen ein Anführungszeichen eingeben, das nicht in die Variable nach »INPUT« übernommen wird. Diese Eingabe läßt sich auch automatisch über den Tastaturpuffer simulieren, indem man »POKE 631,34:POKE 198,1« vor den »INPUT« setzt. Jetzt wird das Anführungszeichen von selbst ausgegeben. Eleganter ist es natürlich, wenn eine eigene Eingaberoutine verwendet wird, wie beispielsweise »INPUTFORM« und »INPUTLINE« im EXBASIC LEVEL II.
Datasette oder Diskette?
In welchem Umfang kann – ich bin Anfänger – die Datasette ein Diskettenlaufwerk ersetzen?
Beide sind Massenspeicher – wem das Diskettenlaufwerk zu teuer ist, kann (und muß) ein Kassettenlaufwerk, also die Datasette, nehmen. Das Kassettenlaufwerk ist deutlich langsamer als das Diskettenlaufwerk. Dazu kommt ein zweiter Nachteil: Auf dem Magnetband in der Kassette werden die Daten sequentiell, also der Reihe nach hintereinander gespeichert. Im Falle einer Dateiverwaltung kommt also erst beispielsweise die Adresse von Herbert Adam, dann die von Erich Berger und so weiter. Wenn Sie die Adressen in der Reihenfolge brauchen, in der sie gespeichert sind, funktioniert das ganz gut; wenn Sie – bei alphabetischer Reihenfolge – erst die Adresse von Weber, dann die von Berger, dann die von Müller und so weiter brauchen, muß das Band immer erst zu der entsprechenden Stelle vor- beziehungsweise zurückspulen, was äußerst zeitaufwendig ist. Außerdem macht es einige Arbeit, in eine gegebene Reihenfolge später neue Adressen einzufügen. Würde als Speichermedium eine Diskette verwendet, so könnte auf jede Adresse (oder jeden anderen Datensatz) direkt zugegriffen werden (sogenannter Random Access), ohne daß ein Vor- oder Rücklauf des Bandes abgewartet werden muß.
Außerdem müssen Sie auf der Diskette die Daten nicht unbedingt in einer ganz bestimmten Reihenfolge speichern (Details sind von der Dateiorganisation und damit der Software abhängig). Faustregel: Mit einem Diskettenlaufwerk arbeitet man schneller und bequemer als mit einem Kassettenlaufwerk. Alle Anwendungen, die sich mit einem Kassettenlaufwerk realisieren lassen, sind auch mit einem Diskettenlaufwerk zu verwirklichen, während es umgekehrt eine Reihe von Anwendungen gibt, die nur mit einem Diskettenlaufwerk sinnvoll zu bewältigen sind.
Schreibmaschine als Drucker?
Welche Schreibmaschine verfügt über eine Schnittstelle für den VC 20?
Prinzipiell lassen sich alle elektrischen Schreibmaschinen, die überhaupt für den Anschluß an einen Computer vorgesehen sind, auch am VC 20 betreiben. In den meisten Fällen ist dazu ein V.24-Interface notwendig, einige Schreibmaschinen lassen sich jedoch auch direkt über den seriellen Bus des VC 20 anschließen, zum Beispiel Brother EP-20C oder Olympia Compact 2. Sie müssen sich allerdings darüber im klaren sein, daß eine Schreibmaschine weder Grafik- noch Steuerzeichen des VC 20 drucken kann.
Commodore-64-Programme in den C 16 laden?
Wie kann man Programme, die mit dem C 64 auf Kassette gespeichert wurden, in den C 16/116 laden?
Uns ist leider keine Möglichkeit bekannt, C 64- oder VC 20-Software mittels Datasette in den C 16 zu laden.
Der einzige Ausweg besteht im Umweg über ein Floppy-Laufwerk.
VC 20-Simulator gesucht
Ich interessiere mich sehr für einen VC 20-Simulator auf dem C 64. Existiert so ein Programm überhaupt?
Nein, so etwas gibt es bestimmt nicht. Der VC 20 ist sowieso im Basic identisch zum C 64, und ein Simulator kann in der Regel nur das Basic simulieren, nicht aber die völlig unterschiedliche Hardware.
Kleinschrift auf VC 1515
Ich besitze einen VC 20 mit Drucker VC 1515. Wie kann ich ein Programm-Listing im Kleinschriftmodus abdrucken?
Der VC 1515-Drucker wird mit folgender Kommandozeile zur Ausgabe eines Listings im Kleinschriftmodus veranlaßt: OPEN 4,4,7:PRINT#4,CHR$(17):CMD 4:LIST.
Vorsicht, die Angabe der Sekundäradresse 7 nicht vergessen! Mit OPEN 4,4:PRINT#4,CHR$(145)« kann man wieder in den Normalmodus zurückschalten (nachzulesen im VC 1515-Handbuch Seite 30/31.
Wie ist das mit Copyright?
Woher bekommt man das Copyright für seine Programme? Bringt es irgendwelche Vorteile, wenn man es hat?
Das Copyright besitzt man automatisch für jedes Programm, das man selbst geschrieben hat. Ein Copyright-Vermerk in einem Programm (oder in einem Buch) dient nur dazu, anderen Personen anzuzeigen, bei wem die Rechte für das Produkt liegen, und daß man das Programm (oder Buch) nicht einfach kopieren und weiterverkaufen darf. Eigene Programme dürfen Sie selbstverständlich verkaufen.
Leichter und besser als Basic?
Welche zweite Programmiersprache, die leichter zu erlernen und leistungsstärker als Basic ist, würden Sie mir empfehlen?
Eine derartige Computersprache werden Sie kaum finden. Es ist ähnlich wie mit der Frage nach einem Sportwagen, der größer, schneller und besser als ein Porsche ist, aber auf jeden Fall viel weniger kosten soll. Beide Faktoren, Leistungsstärke und leichte Erlernbarkeit, schließen sich in der Regel aus. An sich ist Basic die am leichtesten zu erlernende Programmiersprache. Einfache Grafikprogrammierung erreichen Sie mit Comal (sehr empfehlenswert, da auf Basic aufbauend) oder mit Logo. Mit Pascal läßt sich besonders »elegant« programmieren, es ist allerdings nicht ganz einfach zu lernen. Wenn es Ihnen auf Geschwindigkeit ankommt, sollten Sie sich vielleicht einmal mit Assembler oder Forth beschäftigen. Oftmals tut allerdings auch schon eine Basic-Erweiterung oder ein Compiler gute Dienste. Bei der Auswahl einer Programmiersprache kommt es halt immer darauf an, was man programmieren möchte. Dazu müßten Sie sich zuerst mal darüber klar werden, was Ihnen im Basic fehlt.
Assembler und andere Mysterien
Ich habe drei Fragen an Sie:
1. Was ist ein Assembler?
2. Was ist ein Disassembler?
3. Was ist ein Maschinensprache-Monitor?
Was kann man damit machen, und wie funktionieren sie?
Wie Sie vielleicht wissen, versteht der im C 64 arbeitende 6510-Prozessor Basic nicht direkt, sondern nur eine viel einfacher (für die Maschine) aufgebaute »Sprache«, eben die sogenannte Maschinensprache. Sie können mit Ihrem Computer nur deshalb in Basic arbeiten, weil der C 64 ein Programm, selbst in dieser Maschinensprache geschrieben, fest gespeichert hat, das einen »Basic-Prozessor« darstellt (genauso wie Sie in Basic ein Programm schreiben können, das zum Beispiel eine Dateiverwaltung darstellt).
Aber natürlich können Sie Ihren C 64 auch in Maschinensprache direkt programmieren – das ist quasi seine Muttersprache. Allerdings geht das von Basic aus nicht ganz so einfach, genauso wie Sie aus einem laufenden Dateiverwaltungsprogramm heraus schlecht in Basic programmieren können. Daher gibt es spezielle Hilfsprogramme, die das ermöglichen. In der einfachsten Form handelt es sich dabei um Maschinensprache-Monitore, mit denen man – vereinfacht gesagt – kleine Maschinenprogramme gleich in der dem Prozessor geläufigen Zahlenform eingeben kann.
Dieses Programmieren in Zahlen ist zwar für die Maschine sehr angenehm, aber weniger für den Menschen. Daher wurden zu jedem Maschinenbefehl sogenannte »Mnemonics«, also leicht merkbare Abkürzung für die Wirkungsweise des Befehls, geschaffen. Um diese Mnemonics wiederum in das der Maschine verständliche Zahlenformat zu übersetzen, gibt es wiederum andere Programme – die Assembler.
Ein Disassembler wiederum tut das Gegenteil vom Assembler: mit ihm können fertige Maschinenprogramme wieder in die Assembler-Mnemonics zurückübersetzt werden. Wenn Sie sich für Maschinensprache oder Assembler interessieren, empfehlen wir Ihnen unbedingt das 64'er-Sonderheft 8/85 oder den Kurs »Von Basic zu Assembler« im 64'er-Magazin.
Hardware-Sorgen
1. Kann ein Schaden an den Geräten (Zentraleinheit, Floppy und Farbfernseher) entstehen, wenn ich sie alle drei auf einmal einschalte oder muß ich erst den Fernseher einschalten, warten bis ein Bild da ist, dann die Zentraleinheit in Betrieb setzen und nachher das Floppy-Laufwerk einschalten?
2. Was kann an der Floppy-Station und der Diskette kaputtgehen, wenn sich eine solche während des Ein- und Ausschaltens im Laufwerk befindet? Mir ist das schon öfter passiert, aber soweit ist noch alles ganz.
3. Kann es sein, daß es den C 64 mit verschiedenen Betriebssystemen gibt? Mein Freund hat ein Spiel »Popeye«, das bei ihm einwandfrei läuft. Wenn wir es aber bei mir spielen wollen, macht es immer einen Aussteiger.
4. Was kann an der Hardware kaputtgehen, wenn ich während des Betriebs ein Verbindungskabel löse?
1. Den Geräten ist es völlig egal, in welcher Reihenfolge sie eingeschaltet werden. Besonders bequeme Menschen, wie beispielsweise die 64'er-Redakteure, lösen das Einschaltproblem besonders elegant: Alle Geräte werden an eine Steckdosenleiste mit Schalter angeschlossen. Liegt diese auch noch auf dem Boden, läßt sich mit einem einfachen Fußdruck die gesamte beschriebene Hardware (auch Drucker) einschalten. Vorsicht ist allerdings bei älteren Fernsehgeräten geboten. Diese vertragen es teilweise nicht, wenn die Netzspannung direkt und nicht über den eingebauten Schalter gesteuert wird.
2. Am Floppy-Disk-Laufwerk wird normalerweise kein Schaden entstehen. Disketten können aber theoretisch durch die plötzliche Spannungsspitze im Gerät teilweise gelöscht werden. Uns ist das bisher auch noch nicht passiert, trotzdem sollte hier Vorsicht geboten sein.
3. Es gibt verschiedene Versionen des C 64. Die Unterschiede sind allerdings minimal und treten nur vereinzelt zu Tage. So gibt es mehrere Ausführungen der CPU, was sich bei einigen eigentlich nicht vorgesehenen Maschinenbefehlen bemerkbar macht (Illegal Opcodes). Auch die Bus-, Sound- und Videobausteine werden in verschiedenen, aber fast identischen Versionen gefertigt.
4. Das sollte man tunlichst unterlassen. Gerade die Busbausteine in der 1541-Floppy sind da sehr empfindlich. Besonders gefährlich sind hier statische Aufladungen. Wer beim Umstecken seine Floppy zerstört, weil er in geladenem Zustand die Ports berührt, der darf mit Reparaturkosten bis zu 100 Mark und mehr rechnen. Das gleiche gilt für Computer (Serieller Bus, Datasetten-Anschluß, Userport und sogar Joystickanschluß) und Drucker.
Von Basic zur Maschinensprache?
Ist es möglich, ein Basic-Programm mit Hilfe eines Maschinenprogramms in ein Maschinenprogramm zu verwandeln? Wenn ja, womit?
Solche Programme gibt es tatsächlich. Sie heißen »Basic-Compiler«. Ein solcher Compiler übersetzt ein Basic-Programm in Maschinensprache, die der Computer direkt verstehen und ausführen kann. Derart übersetzte Programme sind daher um einiges schneller als entsprechende reine Basic-Programme. Einen ausführlichen Test verschiedener Basic-Compiler für den C 64 finden Sie in den 64'er-Ausgaben 2/85 und 4/85.
Was ist der MSE?
Ich verstehe den Aufbau der MSE-Sprache nicht. Warum sind in einer Zeile jeweils nur neun verschiedene Befehle?
»MSE« ist keine eigene Computersprache, sondern nur ein Eingabesystem für Programme in Maschinensprache. Diese werden in einer besonderen Form als »Hexadezimalzahlen« abgedruckt. Dieses Zahlensystem ist nicht wie die uns geläufigen Dezimalzahlen auf der Basis 10 aufgebaut, sondern auf der Basis 16. Als zusätzliche Ziffern werden dabei einfach die ersten Buchstaben des Alphabets genommen. Statt dezimal...8,9,10,11,12,13,14,15,16,... wird hexadezimal folgendermaßen gezählt:...8,9,A,B,C,D,E,F, 10,...
Jeweils zwei Hexadezimalziffern bilden ein »Byte«, also eine Zahl zwischen 0 und 255 (hexadezimal 0 und FF). Ein Byte entspricht also dem Inhalt einer Speicherzelle. In einer MSE-Zeile stehen jeweils acht Programm-Bytes. Die letzte Zahl ist eine Prüfsumme. Sie wird verwendet, um Fehleingaben in einer Zeile weitgehend auszuschließen.
Bitte lesen Sie beim Abtippen von MSE-Programmen die zugehörige Bedienungsanleitung besonders aufmerksam durch. Versuchen Sie insbesondere nie, mit dem MSE eingegebene Programme einfach mit LOAD zu laden und mit RUN zu starten. Vielmehr müssen Sie MSE-Programme (wie alle Maschinenprogramme) mit »LOAD "name",8,1« laden und in der Regel mit SYS starten.
63229 Byte free?
Ich habe den Tip bekommen, daß die Befehlsfolge »POKE 56,255 : SYS 58234« beim VC 20 einen freien Speicherplatz von über 61000 Bytes ergeben soll. Ich habe nun diese Befehlsfolge auf meinem C 64 eingegeben und erhalte tatsächlich nach der Abfrage »PRINT FRE(0) + 216« die Antwort »63229«.
Sind diese 63229 Bytes wirklich frei zum Programmieren und wird dadurch auch keine andere Funktion beeinflußt?
Na, da hat Sie aber wirklich einer an der Nase herumgeführt. Der POKE-Befehl setzt zwar (allerdings nur rein rechnerisch) die Speichergrenze für den Basic-Interpreter nach oben, aber sonst tut sich überhaupt nichts. Sie haben weiterhin Ihre knappen 38 KByte Basic-Speicher, weil Sie mit einem POKE-Befehl schwerlich Hardware-Aufbau und Betriebssystem eines Computers ändern können. Im Gegenteil, wenn Sie versuchen mit Variablen zu arbeiten, kann das sogar zu einem Absturz des Computers führen, weil dieser verzweifelt versucht, Variableninhalte im ROM abzulegen. Dies kann nachtürlich nicht gutgehen.
Der SYS-Befehl hinter dem POKE ist übrigens reine Augenwischerei, denn der bewirkt nur einen Sprung in die NMI-Routine, also dasselbe, was beim Drücken der Tastenkombination RUN/STOP-RESTORE passiert.
Ärger mit der 1541
Ich habe einige Schwierigkeiten mit meinem Floppy-Laufwerk. Wenn es längere Zeit in Betrieb und ziemlich warm geworden ist, nimmt die Diskette kein Programm mehr an. Beim Speichern meldet die Floppy dann Fehler 20 oder 27. Das Laufwerk lädt dann auch nicht mehr, auch keine Directories von anderen Disketten. Nach längerem Abkühlen kann wieder geladen werden, aber nicht mehr die Programme, die ich vorher abspeichern wollte. Auf dem Laufwerk ist noch Garantie und es war auch schon zur Reparatur beim Händler. Der sagte, es sei eine Neueinstellung vorgenommen worden. Aber der Fehler tritt immer wieder auf. Schadet es der Floppy, wenn ich einen Reset auslöse?
Ihr Problem beruht auf der thermischen Ausdehnung von Metallen. Die Mechanik des Laufwerks dehnt sich normalerweise nur minimal aus. Bei Ihnen scheint der unglückliche Extremfall vorzuliegen, daß durch diese Ausdehnung der Schreib-/Lesekopf total verstellt wird. Dann kann die Floppy-Station weder Daten lesen noch schreiben. So, wie bei Ihnen geschildert, darf dieses Problem aber unter normalen Umständen nicht auftreten. Normalerweise ist ein mehrstündiger Betrieb, solange nicht laufend formatiert wird, ohne Probleme möglich. Es gibt hier zwei Lösungsmöglichkeiten: Entweder Sie sorgen für Kühlung, indem Sie die Floppy »offen«, das heißt ohne Gehäusedeckel betreiben oder einen Lüfter verwenden. Die Alternative wäre, daß Sie auf einen Umtausch des Laufwerks bei Ihrem Händler bestehen.
Bei einem Reset am Computer wird auch in der Floppy ein Reset ausgelöst. Das hat keinerlei schädliche Folgen für Floppy und Diskette.
C 16-Sprites?
Ich besitze einen C 16 mit Datasette und wollte wissen, ob ich Sprites im Textmodus simulieren kann oder ob jemand ein Programm dafür geschrieben hat.
Der C 16 besitzt die Shape- beziehungsweise Sprite-Fähigkeit nur im HiRes-Modus, weil im TED (der Chip, der am C 16 auch für die Video-Ausgabe zuständig ist) Sprites nicht hardwaremäßig vorgesehen sind wie beim Videochip des C 64.
Falls man aus Speicherplatzgründen auf HiRes-Shapes verzichten will oder muß, kann man sich immer noch, ähnlich wie beim VC 20, mit einem selbstdefinierten Zeichensatz helfen, der nur 2 KByte vom RAM abknappst und dennoch schon beachtliche Grafikmöglichkeiten bietet. Im Übrigen finden Sie in unserem C 16-Sonderheft (3/86) auch einen Grundlagenkurs für Grafik.
Unsichtbar nachladen?
Wie schaffe ich es, in Basic ein Nachlade-Programm zu konzipieren, das bei entsprechender Menüwahl ein Teilprogramm nachlädt – und zwar ohne Ausgabe der Meldungen »Searching for« und »Loading«?
Beim Nachladen von Programmen müssen Sie folgendes speziell beachten: Der Befehl »LOAD« in einem Programm bewirkt nicht nur, wie im Direktmodus, das Laden eines Programms, sondern gleichzeitig einen Autostart. Falls das nachgeladene Programm größer ist als das ursprüngliche Programm, dann werden alle Variablen gelöscht. Sie sollten daher dafür sorgen, daß Ihr Hauptprogramm immer größer ist als das nachzuladende. Auch sollten Sie beachten, daß Strings in der Regel nicht mit übernommen werden. Wollen Sie Stringvariable dennoch ins nächste Programm übernehmen, dann müssen Sie beispielsweise im ersten Programm schreiben: A$="HALLO"+""
Dies ist deshalb nötig, weil nur Stringvariable, die mit irgendeiner Stringoperation (+, LEFT$,MID$, RIGHT$) verknüpft wurden, ihren Wert auch im nachgeladenen Programm behalten.
Um die manchmal unerwünschte Systemmeldung wie »Searching for« am Bildschirm nicht sichtbar werden zu lassen, gibt es eine sehr einfache Methode: Setzen Sie vor den LOAD-Befehl im Programm einfach die Schreibfarbe auf die Hintergrundfarbe. Sie verhindern damit zwar nicht die Ausgabe dieser Meldung, sie erscheint aber nicht sichtbar auf dem Bildschirm.
MSE-Probleme?
Es gelingt mir nicht, mit dem MSE eingegebene Programme nach dem Speichern und Wiederladen laufen zu lassen. Es ist überhaupt kein Programm mehr vorhanden. Nach LIST erscheint sofort »Ready«, ebenso nach RUN.
Der MSE dient zur einfachen und sicheren Eingabe von Programmen, die in Maschinensprache geschrieben sind. Maschinenprogramme lassen sich von Basic aus nicht LISTen und müssen mit dem SYS-Befehl statt mit RUN gestartet werden. Allerdings muß man dazu die Startadresse kennen. Diese Startadresse müssen Sie der Anleitung zum Programm entnehmen. Lesen Sie sich bitte zu jedem Maschinenprogramm die Anleitung sehr genau durch.
RUN = Syntax Error?
Läßt sich beim C 64 der Basic-Start verändern? Das Vorhandensein der Routine $A68E läßt mich dies zwar vermuten, es gelingt mir aber nicht ganz. Nach dem Heraufsetzen des Basic-Starts wird »RUN« mit »Syntax Error« beantwortet, ebenso »NEW«.
Der Syntax Error bei RUN ist schon ziemlich symptomatisch. Sie haben wahrscheinlich nicht bedacht, daß das erste Byte im Basic-Bereich immer ein Null-Byte sein muß. Vor dem SYS-Befehl müssen Sie also unbedingt einen POKE <Anfangsadresse>, 0-Befehl geben.
Diskette versehentlich formatiert?
Ich habe versehentlich eine Diskette mit vielen Programmen darauf formatiert. Wie kann ich diese Programme wieder zurückholen?
Wenn Sie die Diskette ohne Angabe einer ID formatiert haben (die Formatierung kann dann nur einige Sekundenbruchteile gedauert haben), dann ist nur das Directory gelöscht. Mit einem Diskettenmonitor (und unserem Floppy-Kurs) könnten Sie bei etwas Erfahrung in der Lage sein, das Inhaltsverzeichnis wieder zu restaurieren. Da in der Regel aber mit ID formatiert wird, sind Ihre Programme wohl verloren. Das 1541-Laufwerk beschreibt nämlich beim normalen Formatieren alle Sektoren der Diskette mit Null-Bytes. Die ursprünglich darin enthaltene Information geht dabei genauso verloren wie beim Überspielen einer normalen Musik-Kassette.
Zufallszahlen mit Wiederholung
Beim Arbeiten mit der »Zufallsformel« X=INT(RND(1)*N) + 1, durch die Zufallszahlen von 1 bis N erzeugt werden, habe ich festgestellt, daß die so erzeugten »Zufallszahlen« gar keine solchen sind. Zumindest wiederholen sie sich nach einiger Zeit in gleicher Folge. Nun meine Fragen:
Kann man überhaupt von Zufallszahlen reden, wenn sie sich nach einer gewissen Zeit in gleicher Folge wiederholen?
Kann man diese Tatsache umgehen, vielleicht durch Änderung der Formel?
Wie funktioniert eigentlich die Auswahl der Zufallszahlen?
Entscheidenden Einfluß auf die erzeugten Zufallszahlen hat die Wahl des oft als unwichtig betrachteten Arguments der RND-Funktion. Generell sind drei Fälle zu unterscheiden:
Fall 1. Die Funktion wird mit einem positiven Argument aufgerufen, also beispielsweise mit RND(1). Anstelle der 1 kann eine beliebige andere Zahl oder Variable größer als Null stehen. In diesem Falle werden die Zufallszahlen nach einem bestimmten mathematischen Algorithmus, also nach einer bestimmten Rechenvorschrift, ermittelt. In diesem Falle kommen die Zufallszahlen (oder besser die Pseudo-Zufallszahlen), die nach dem Einschalten des Computers erzeugt werden, jedesmal in genau der gleichen Reihenfolge wieder vor, was sicherlich als nachteilig zu bewerten ist. Der Vorteil dabei ist jedoch die sehr gute Gleichverteilung der erzeugten Zahlen. Es werden weder Zahlen bevorzugt noch benachteiligt.
2. Die Funktion wird mit einem negativen Wert aufgerufen (Beispiel: RND(-1) oder RND(X), falls X<0). In diesem Fall ergibt jede einzelne negative Zahl einen speziellen Zufallswert, aber eben für jede Zahl stets wieder denselben. Probieren Sie ruhig zehnmal hintereinander RND(-1) aus, Sie erhalten stets die gleiche Zahl. Haben Sie aber einmal einen als zufällig geltenden Anfangswert X, dann können Sie mit der Folge »10 X=RND(-X) : PRINT X : GOTO 10« eine beliebige Kette von zufälligen Zahlen erzeugen. Jeder verschiedene Anfangswert für X liefert bei dieser Methode eine eigene, ganz spezielle Zufallszahlenreihe.
Als Startwert kommen alle möglichen Werte in Betracht, sinnvoll ist in vielen Fällen eine Initialisierung über die Zeitvariable TI. Der Startwert ist dann von der seit dem Einschalten vergangenen Zeit abhängig und kann in den meisten Fällen wohl als ausreichend zufällig angesehen werden.
Fall 3. Die Funktion wird mit dem Argument Null aufgerufen. In diesem Falle wendet der Basic-Interpreter eine weitere Methode an: Er nimmt die Zeiten verschiedener interner Zeitgeber, verknüpft sie durch eine mathematische Formel miteinander und bildet so ebenfalls eine Zufallszahl.
Diese Zahlen sind wirklich alle paar Mikrosekunden völlig anders und liefern keine vorhersehbare Folge von Zahlen. Allerdings ist bei dieser Methode die Gleichverteilung der Zahlen um einiges schlechter, jedenfalls wenn die Zufallszahlen in einer festen Programmschleife, also in einem festgelegten Zeittakt gebildet werden. In diesem Falle werden fast unweigerlich bestimmte Zahlenwerte häufiger vorkommen als andere.
Die effektivste Methode für möglichst zufällige, aber eben auch möglichst gleichverteilte Zahlen ist die zweite. Besonders bei Initialisierung mit TI; womöglich noch durch Multiplikation oder Division mit irgendwelchen Zeropage-Inhalten verknüpft, erreicht man die besten Ergebnisse.
Copyright-Problem
Darf ich eigentlich Programmteile, die im 64'er abgedruckt sind, für meine eigenen Programme benutzen und diese dann wieder einschicken?
Da der Verlag Markt und Technik das Copyright an diesen Programmen besitzt, dürfen Sie auch einzelne Programmteile verwenden, wenn das schriftliche Einverständnis von Markt und Technik vorliegt, falls Sie Ihr Programm einem anderen Verlag anbieten.
Schicken Sie Ihr Listing aber an uns ein, dürfen Sie dieses Einverständnis natürlich immer voraussetzen.
Generell dürfen Sie einem Verlag Listings nur dann anbieten, wenn alle Rechte an dem Programm bei Ihnen liegen, das heißt in der Regel, wenn Sie es selbst geschrieben haben. Falls das Programm nur eine umgeschriebene Version eines anderen ist, oder falls einzelne Routinen aus anderen Quellen stammen, müssen Sie das unbedingt im Anschreiben erwähnen, sonst kann das unangenehme Folgen haben.
Falls Sie das Programm jedoch ausschließlich für Ihren privaten Gebrauch verwenden, dann brauchen Sie sich um solche Dinge keine Gedanken zu machen. Es entspricht aber einer guten Programmierer-Tradition und auch der allgemeinen Fairneß, bei aus anderen Programmen entnommenen Routinen die Original-Quelle und den Namen des Autoren der Routine anzugeben.
Zeichensatz verschwunden?
Aus welchem Speicherblock kann man die Daten eines geänderten Zeichensatzes PEEKen, wenn der Zeichensatz nach $E000 und das Video-RAM nach $CC00 verlegt worden ist? Ich habe den ganzen Speicher durchsucht, aber nichts gefunden.
Ab Adresse $E000 sind die 8 KByte ROM des Betriebssystems dem RAM-Bereich überlagert. Während man mit POKE auch in diesem Bereich ins »unter« dem ROM liegende RAM schreiben kann, ergibt jedes PEEKen hier nur den Inhalt des Betriebssystem-ROMs. Abhilfe ist hier nur über Maschinensprache möglich, da zum Auslesen dieses Speicherbereichs das Betriebssystem und der Basic-Interpreter abgeschaltet werden muß.
Laden mit Bild?
Während der C 64 ein Programm von Kassette lädt, zeigt er normalerweise kein Bild auf dem Monitor an. Nun habe ich aber an einigen Maschinensprache-Programmen gesehen, daß es doch möglich ist, ein Bild während des Ladens stehen zu lassen. Ist dieser Effekt auch in Basic zu erzielen oder ist dazu die Kenntnis von Maschinensprache notwendig?
Vom Basic aus ist das nicht möglich. Da der Videochip und der Prozessor abwechselnd auf denselben Datenbus zugreifen, kann es zu Zeitproblemen kommen, die das System zum Absturz bringen könnten. Um das zu verhindern, schaltet das Betriebssystem während der Dauer des Kassettenzugriffs den Videochip einfach aus, wodurch natürlich das Bild verschwindet.
Um das zu verhindern, darf man nicht auf die vorhandenen Betriebssystemroutinen zugreifen – wie es das Basic automatisch macht, sondern muß sich eigene Laderoutinen schreiben.
Das allerdings ist nur in Maschinensprache möglich.
Wieviel Strom braucht der C 64?
Welche Stromkosten verursacht ein einen Monat lang ununterbrochen laufender C 64? Bitte in DM und als Vergleich (zum Beispiel »soviel wie eine 100-Watt-Glühbirne«).
Der C 64 hat genau 15 Watt Leistungsaufnahme (steht jedenfalls auf dem Computer). Die elektrische Arbeit in kWh (Kilowattstunden) bemißt sich aus Leistung mal Zeit. Wenn Sie das Floppy-Laufwerk auch noch mit einbeziehen (50 W), haben Sie einen Verbrauch von 46,8 kWh im Monat. Das einzige, was Sie noch tun müssen, ist, Ihr Elektrizitätswerk nach dem Preis einer kWh zu fragen. Rechnet man grob etwa 20 Pfennige pro kWh, dann kostet der Dauerbetrieb von Computer und Floppy noch keine 10 Mark im Monat. Allerdings ist darin noch nicht der Stromverbrauch des ja wohl in den meisten Fällen ebenfalls eingeschalteten Monitors oder Fernsehgerätes berücksichtigt.
Negative Bytes
Auf die Eingabe »PRINT FRE(0)« antwortet mein C 64 stets mit einer negativen Zahl. Wie erhalte ich den tatsächlich freien Speicherplatz angezeigt?
Die FRE-Funktion liefert beim C 64 stets eine Integer-Zahl (16 Bit) zurück. Der größte so korrekt darstellbare Wert ist 32768 (=215). Überschreitet der zur Verfügung stehende Speicherplatz diesen Wert, dann wird auch noch das Vorzeichenbit herangezogen, und es ergeben sich negative Zahlen. Das korrekte Ergebnis erhält man in diesen Fällen, indem man 65535 (=216) zum Ergebnis der FRE-Funktion addiert, also mit »? FRE(0) + 2↑16«.
Programme nachladen?
Wenn ein Basic-Programm ein anderes nachlädt, dann entsteht ein heilloses Durcheinander. Wie kann das kommen?
Beim Nachladen von Programmen innerhalb eines anderen Programms werden die Zeiger, die auf das Programmende zeigen, nicht ordnungsgemäß nachgestellt. Falls das nachgeladene Programm länger ist als das erste Programm, dann kann es Probleme geben. Werden nämlich Variablen definiert, dann überschreiben sie das Programm. Es gibt nun zwei Möglichkeiten, dies zu verhindern:
1. Man lädt das Programm im Direktmodus. Dazu wird einfach eine Eingabe simuliert. Das geht folgendermaßen:
10 PRINT "CLR,3DOWN, 4SPACE" ; CHR$(34); "NAME" ; CHR$(34); " ,8"
20 PRINT "HOME"
30 POKE 631,131 : POKE 198,1
Zeile 30 simuliert die Eingabe der Tastenkombination SHIFT-RUN/STOP. Um zu vermeiden, daß man den Text auf dem Bildschirm lesen kann, muß nur die gleiche Farbe für Schrift und Hintergrund gewählt werden: 5 POKE 646, PEEK(53281)
2. Laden vom laufenden Programm aus mit Neusetzen der Zeiger. Die Zero-Page-Adressen 174 und 175 werden beim Laden eines Programms vom Betriebssystem benutzt und enthalten nach dem Laden die Endadresse des Programms. Wichtig für den Basic-Interpreter sind aber die Adressen 45,46. Sie zeigen ebenfalls auf das Programmende und auf den Start der Variablen. Am Anfang des nachgeladenen Programms sollte also stehen:
0 POKE 45, PEEK(174) : POKE 46, PEEK(175) : CLR
Durch CLR werden zwar leider alle Variablen gelöscht, es ist aber dennoch wichtig, denn es werden dadurch noch einige andere Zeiger korrigiert.
Probleme mit C 128
Als neuer Besitzer eines C 128 bin ich auf zwei Probleme gestoßen, bei denen ich vermute, daß mein C 128 nicht ganz in Ordnung sein könnte:
(1) Die programmierte Umschaltung auf die DIN-Tastatur mittels »POKE 1,0« (siehe Handbuch, Kapitel 4.1, Seite 2) klappt bei mir nicht.
(2) Zeichne ich im hochauflösenden Grafikmodus zum Beispiel zwei Kreise in einer bestimmten Farbe und verbinde diese dann mit einer Linie in einer anderen Farbe, so werden diese verschiedenen Farben nicht voneinander getrennt, sondern es wird gleich das ganze Umfeld der Schnittstelle neu eingefärbt. Was kann ich dagegen tun?
Zunächst eine gute Nachricht: Ihr C 128 ist, zumindest was die beschriebenen Symptome angeht, völlig in Ordnung.
(1) Versuchen Sie die Umschaltung mit »POKE 0,PEEK (0) AND 64 : POKE 1,0«.
(2) Dieser Effekt hat eine verblüffend einfache Ursache: Im hochauflösenden Grafikmodus kann der C 128 wohl einzelne Grafikpunkte setzen oder löschen, es ist jedoch nicht möglich, jedem Punkt eine individuelle Farbe zu geben. Die Farbgebung im Hochauflösungs-Modus entspricht haargenau derjenigen im Textmodus, das heißt, es kann jede Zeichenposition (25 x 40 Positionen auf dem Bildschirm) eine Farbe bekommen.
Mit anderen Worten: Die gewählte Farbe kann nicht punktweise, sondern nur pro 8 x 8-Punkte-Bereich (eben gerade eine Zeichenposition) frei gewählt werden. Innerhalb einer 8 x 8-Zeichen-Matrix haben immer alle 64 Grafikpunkte die gleiche Farbe.
Ihr spezielles Problem läßt sich nur durch Verwendung des Multicolor-Modus lösen. In diesem Vielfarbenmodus kann jeder einzelne Grafikpunkt eine von vier möglichen Farben haben. Allerdings ist die Auflösung in diesem Modus mit 160 x 200 Punkten nur noch halb so groß wie im hochauflösenden Grafikmodus.
Kabel-Geheimnis?
Wozu ist das nichtisolierte, aus dem Datasettenstecker herausragende Kabel da?
Bei dem Kabel handelt es sich um eine Erdungsleitung, die bei den großen CBM-Computern zur Abschirmung dient. Der C 64 ist durch eine über die gesamte Platine gelegten Metallfolie aber bereits ausreichend abgeschirmt, so daß Sie dieses Kabel ohne Gewissensbisse direkt am Stecker abschneiden können.
Schäden durch Floppy-Beschleuniger?
(1) Schaden Floppy-Beschleuniger der Mechanik des Laufwerkes 1541? Wenn ja, wieviel stärker ist die Belastung mit Speed Dos Plus und mit Prologic Dos?
(2) Muß die 1541-Floppy waagerecht aufgestellt werden, oder ist es auch möglich, sie senkrecht auf die Seite zu stellen?
(1) Durch die sogenannten Floppy-Beschleuniger wird ja nicht etwa die Drehzahl der Floppy erhöht, sondern nur die Übertragungsgeschwindigkeit über den seriellen Bus. Mechanische Schäden sind also nicht zu befürchten.
(2) Die 1541-Floppy ist für waagerechten Betrieb konzipiert und sollte auch nur so betrieben werden.
Chromdioxid für Datasette?
Mein Computer-Händler sagt, ich solle keine Chromdioxid-Kassetten für meine Datasette benutzen. Ist da was Wahres dran?
Chromdioxid erfordert eine andere Vormagnetisierung als Eisenoxid. Auf lange Sicht gesehen kann die Verwendung von Chromdioxid-Kassetten bei nicht dafür vorgesehenen Recordern auch eine geringere Lebensdauer des Tonkopfes zur Folge haben.
Wegen der niedrigen Aufzeichnungsrate von 300 Baud ist die Verwendung von Chromdioxid aber auch beim besten Willen nicht notwendig.
Floppy-Laufwerk reinigen?
Welche Möglichkeit habe ich, meine Floppy 1541 zu reinigen, um Lese- und Schreibfehlern vorzubeugen, und wie bekomme ich das Laufwerk 30 Sekunden lang zum Laufen, wenn ich eine Reinigungsdiskette benutzen will?
Sie können das Laufwerk für 30 Sekunden in Bewegung halten, wenn Sie es einfach fünfmal hintereinander initialisieren:
OPEN 1,8,15 : FOR I = 1 TO 5 : PRINT#1,"1" : NEXT : CLOSE 1
Von der übermäßigen Benutzung von Reinigungsdisketten möchten wir aber unbedingt abraten, da diese den Schreib-/Lesekopf mit der Zeit so verschleißen, daß er unbrauchbar wird. Greifen Sie daher bitte nur dann zur Reinigungsdiskette, wenn sehr häufig Lese- oder Schreibfehler auftreten und Sie sicher sind, daß dies am verschmutzten Schreib-/Lesekopf liegt.