Nikolaus Heusler Archiv

Erschienen in 64'er Magazin, Ausgabe 09/1990 · Originaldatei: 09_90.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.

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

Basic-Variablen erzeugen

Frage von Michael Vorburger aus der 64'er 3/90, Seite 77: 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?

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:

A 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 Redaktion

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 Redaktion

Neue Farben für den Hexer

Eines der besten Kopierprogramme für den C 128 ist der Hexer. Leider sind die Farben des Arbeitsmenüs nicht sehr glücklich gewählt. Bei meinem Farbmonitor kann ich die gelben Zeichen der Eingabehinweise auf dem hellgrauen Hintergrund äußerst schlecht entziffern. Wo können im Programm die Bildschirmfarben anders eingestellt werden?

Manfred Knödelseder, Hauzenberg

Das Ändern der Farben für die Textausgaben ist leider aufwendig. Durchsuchen Sie mit dem eingebauten Maschinensprache-Monitor des C 128 und der Anweisung »M« (Memory-Dump) das für Ihre Gerätekonfiguration entsprechende Programm des Hexer im Speicherbereich von $1C01 (7169) bis $4374 (17268). Meist steht der auszugebende Anweisungstext nach einem PRIMM-Befehl (JSR $FF7D) und beginnt mit dem Farbcode für die folgenden Textbytes. Finden Sie an dieser Stelle z.B. den Hexadezimalwert $9E (158), wird der Text in gelber Farbe ausgegeben. Dieses Byte können Sie in einen anderen Wert ändern (z.B. $90 für »schwarz«). Der einfachere Weg ist, die Textfarben zu belassen, wie sie sind, und nur die Hintergrundfarbe des Bildschirms zu ändern. Das entsprechende Byte finden Sie in Speicherstelle $2008 (8200). Der Originalwert ist $0E (14), der VDC-Chip interpretiert diesen Wert als »Hellgrau«. Gute Alternativfarben für einen zufriedenstellenden Kontrast mit den Farben der Schriftzeichen sind die Werte $02 (blau), $04 (grün) oder $08 (rot).

Die Redaktion

Kann's der C 64 mit dem Atari?

Ich bin Besitzer eines C 64 und eines Atari Portofolios. Ich möchte zwischen beiden Computern ASCII-Dateien austauschen. Welche Hard- und Software benötige ich, um die Kommunikation in beiden Richtungen zu bewerkstelligen?

Stefan Weber, Berlin

Pop-Hits speichern

64'er 6/90, Seite 67, »Bayern 3 aus dem C 64«: Wie kann man Musik aus dem Radio, Walkman, CD-Player usw. auf Diskette speichern?

Torsten Thöndel, Brühl

Hier hilft nur, den Sound des entsprechenden Audiogerätes zu digitalisieren und die aus diesem Vorgang erzeugten Daten auf Diskette zu speichern. Eine der bekanntesten Hard- und Software-Erweiterungen für den C 64 zu diesem Zweck ist das D.A.I.SY.-Sound-System, erhältlich bei Computertechnik Rosenplänter, Stresemannstr. 26, 3400 Göttingen. Mehr zu diesem Thema finden Sie in der 64'er 2/90, Seite 85.

Die Redaktion

Listschutz gesucht

Wie kann ich ein Basic-Programm für den C 64 schützen, damit niemand an das Listing herankommt? Welchen Code muß ich dazu eingeben?

Michael Hafen, Wehingen^N

Die gebräuchlichste Methode unter C 64-Programmierern ist das Sperren der Tastenkombination RUN/STOP RESTORE. Dazu muß das Lowbyte in Adresse $0328 (808) des Zeigers auf die STOP-Routine $F6ED im Betriebssystem in den Wert $E1 (225) geändert werden. In Basic lautet die Anweisung: POKE 808,225. Rückgängig machen Sie die Tastensperre mit POKE 808,237. Allerdings wird ein derartiger LISTschutz erst nach dem Starten des Programms aktiviert. Nur wenn das Programm nach dem Laden noch zusätzlich automatisch startet, ist ein relativ sicherer Schutz gegeben. Eine derartige Routine läßt sich allerdings nur in Assembler realisieren.

Die Redaktion

Ich programmiere in Comal (Version 2.01). Seit geraumer Zeit bin ich auf der Suche nach einem einfachen, aber wirkungsvollen LISTschutz für meine selbst entwickelten Programme. Kann mir jemand weiterhelfen?

Florian Pulkowski, Leutershausen

Floppy-»Exoten«

Wer kann mir Informationen zur sehr preiswerten Floppystation OC-118-M geben? Laut Hersteller soll diese nach einem Austausch des Betriebssystems durch ein EPROM voll kompatibel sein. Ich versuchte es zunächst mit dem DOS der 1541-C, jedoch wird nicht einmal die Initialisierung vollständig ausgeführt. Andere DOS-Versionen brachten ebensowenig Erfolg. Außerdem laufen weder Exos V3 noch Final Cartridge III mit dieser Diskettenstation.

Uwe Scheidner, Querfurt (DDR)

Ich besitze die Floppy RF-501-C für den C 64. Vergeblich habe ich bisher nach einem Floppyspeeder gesucht, der speziell mit diesem Laufwerk zusammenarbeitet. Welchen Speeder kann ich verwenden, was kostet dieser und woher bekomme ich ihn?

Jörg Friebe, Ragun

Noch nicht ganz verloren

Aus Versehen habe ich eine Diskette »weich« formatiert (ohne Angabe einer ID-Kennung) und dabei ein wichtiges Programm gelöscht. Gibt es eine Möglichkeit, dieses wieder zurückzuholen?

Jörg Giraud, Stutensee

Trotz dieses Mißgeschicks bleibt ein kleiner Hoffnungsschimmer. Beim Formatieren ohne ID wird zwar das Directory einer Diskette total gelöscht, die einzelnen Datenblöcke des »ehemaligen« Programms auf der Diskette sind jedoch unversehrt. Diese wären beim »harten« Formatieren mit der ID unwiederbringlich verloren. Der Floppy fehlen durch das gelöschte Directory lediglich die Adressen von Spur und Sektor, bei denen der erste Datenblock des »verlorenen« Programms auf Diskette gespeichert ist. Verschiedene Disk-Utilities sowie Diskettenmonitore besitzen eine »intelligente« Funktion zum Wiederherstellen des gelöschten Inhaltsverzeichnisses der Diskette. Die Blockverbindungsadressen der noch bestehenden Datenblöcke werden zurückverfolgt, der gelöschte Eintrag im Directory und die BAM rekonstruiert.

Die Redaktion

Wer programmiert Landschaften?

Durch einen Unfall bin ich teilweise gelähmt. Zu den täglichen Bewegungsübungen verwende ich ein stationäres Übungsfahrrad sowie eine Rudermaschine. Zusätzlich halte ich mich mit meinem C 64 und dem Joystick mit Hilfe von Spielen »in Bewegung«. Was ich mir wünsche, ist ein Programm mit guter Grafik, das mich auf einer Straße durch eine abwechslungsreiche Landschaft führt (ähnlich wie bei manchen Spielen, die ein Autorennen darstellen). Ich sitze dabei auf meinem Übungsrad vor dem Monitor und stelle mir vor, daß ich auf einer »echten« Straße fahre. Damit würde das monotone Pedaltreten einen Sinn erhalten und die anstrengenden Übungen mir und anderen Leidensgenossen viel leichter fallen. Wenn dann noch einige Ruhepausen auf der Strecke zum Verschnaufen eingelegt sind, bliebe nicht mehr viel zu wünschen übrig.

G.H. Braun, Walmer-Pt.Elizabeth (Südafrika)

Tips zur Erbschaft

Frage von Jörg Finger aus der 64'er 6/90, Seite 53, 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?

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

Dirk Hein, St. Augustin

Komfortablere Assembler

Frage von Alper Köker aus der 64'er 6/90, Seite 52, »Assemblerprogrammierung«: Ich habe Probleme damit, wie der von mir benutzte Assembler den Speicher im C 64 benützt. Beim Programmstart werden die Anfangsbereiche des Assemblers und des zu programmierenden Quelltextes ab $0800 belegt. Wenn nun mein geplantes Maschinenprogramm ebenfalls ab diesen Adressen (z.B. $0801) im Speicher liegen soll, muß ich bei einem Testlauf des Objektcodes jedesmal befürchten, daß dieser den Quelltext oder gar das Assemblerprogramm selbst zerstört. Es muß doch noch andere Möglichkeiten geben, als den Quelltext zu speichern, den Assembler zu verlassen, den Objektcode zum Testen zu laden, danach Assemblerprogramm und Quelltext für Verbesserungen erneut zu laden usw. usw.

Nachdem ich anfangs ähnliche Probleme hatte, programmiere ich jetzt hauptsächlich mit Turbo Ass. Dieser Assembler besitzt einen Full-Screen-Editor und befindet sich im Speicherbereich von $9000 bis $CF01. Der eigentliche Quelltext wird vor dem Assemblerprogramm, ab $8FFF rückwärts, im Speicher abgelegt. Damit dürften bei einem Testdurchlauf eines Maschinenprogramms, das z.B. bei $0801 beginnt, keine Schwierigkeiten auftreten. Außerdem hat man die Möglichkeit, den assemblierten Code direkt als Objektfile auf Diskette schreiben zu lassen. Beim Assembler Profi Ass kann man einstellen, in welchem Speicherbereich der Quelltext liegen soll. Als weitere Alternative bleibt noch, mit dem eingebauten Assembler von Magic Formel zu arbeiten. Dieser benutzt den moduleigenen Speicher.

Stephan Neumann, Brachttal

Parameter zu Umweltdateien

Wir sind eine Gruppe von 12jährigen Schülern und haben einen Naturschutzclub gegründet. Wir programmieren auch sog. »Umweltdisks«. Unsere Fragen:

1. Wir möchten in unseren Basic-Programmen einige Parameter einstellen (Schrift-, Hintergrund- und Rahmenfarbe, Geräteadresse und Laufwerksnummer). Diese Daten sollen in einer sequentiellen Datei gespeichert und bei erneutem Programmstart geladen werden. Obwohl ich alle Anweisungen laut Handbuch genau beachtet habe, hat der C 64 nach dem Neustart zwar die Parameterdatei geladen, dann aber wurde der Bildschirm schwarz und der Computer ist abgestürzt. Haben Sie eine Basic-Routine für dieses Problem?

2. Woher bekomme ich eine Programmroutine in Basic, die bestimmte Zeichen der Tastatur in deutsche Umlaute (Groß-/Kleinschrift) und das scharfe »S« umwandelt?

Sebastian Stoppe, Helmstedt^N

1. Folgende Programmzeilen mußt Du in Dein Basic-Programm einbauen. Die Zeilennummern kannst Du selbst bestimmen:

10 FOR I=0 TO 4: READ EG$(I): PRINT EG$(I);: INPUT PM$(I): NEXT
20 OPEN 2,8,2,"@0:PARAMETER,S,W"
30 FOR I=0 TO 4: PRINT#2,EG$(I): PRINT#2,PM$(I): NEXT
40 PRINT#2: CLOSE 2
100 DATA VORDERGRUND, HINTERGRUND, RAHMENFARBE, GERAETEADRESSE, LAUFWERKSNR.

Damit werden die eingegebenen Paremterzahlen als sequentielles File auf Diskette gespeichert. Zum Einlesen der Daten kannst Du folgendes Programmbeispiel verwenden:

10 PRINTCHR$(147)"DATEI EINLESEN = TASTE!"
20 POKE 198,0: WAIT 198,1
30 OPEN 2,8,2,"PARAMETER,S,R"
40 FOR I=0 TO 4: INPUT#2,EG$(I): INPUT#2, PM$(I): NEXT: CLOSE 2
50 PRINT "TESTLAUF:"
60 POKE 646,VAL(PM$(0)): POKE 53281,VAL(PM$(1)): POKE 53280,VAL(PM$(2))
70 PRINT EG$(3)PM$(3): PRINT EG$(4)PM$(4)

2. Um deutsche Umlaute oder andere Sonderzeichen zu definieren und auf dem Bildschirm darstellen zu können, müssen der Originalzeichensatz des C 64 in das RAM kopiert und die gewünschten Zeichenmuster geändert werden. Dazu kannst Du z.B. das 20-Zeiler-Siegerprogramm Zeichen-Edi aus der 64'er 2/90, Seite 44, verwenden. In den »Tips und Tricks für Einsteiger« (64'er 3/90, Seite 82) findest Du außerdem eine Menge Informationen zum Thema »Zeichensatz«.

Die Redaktion

Fragen zu Hypra-Speed (64'er 9/89)

Ich besitze den C 64 und eine Floppy 1541. Beide Geräte stammen noch aus der ersten Baureihe. Nach dem Brennen in ein EPROM wollte ich den Floppy-Speeder testen. Neue Einschaltmeldung des C 64 und Funktionstastenbelegung waren o.k. Das Betriebssystem des Laufwerks wurde entsprechend der Anleitung in der 64'er 9/89, Seite 35, geändert. Nach dem Einschalten der Floppy ist mir jedoch aufgefallen, daß die rote LED viel kürzer aufblinkt als in der Normalkonfiguration. Handelt es sich hier um einen Fehler?

Auch das geforderte Parallelkabel habe ich nach der Bauanleitung auf Seite 38 problemlos entwickelt und ordnungsgemäß angeschlossen. Trotzdem erhielt nach Druck auf die Taste F7 einen »DEVICE NOT PRESENT ERROR«. Stecke ich noch zusätzlich das serielle Kabel an, klappt alles einwandfrei, allerdings nur in der Normalgeschwindigkeit der Floppy 1541. Was habe ich falsch gemacht?

Ralf Hartl, Bad Leonfelden

Das kürzere Aufleuchten der roten LED an Ihrer Floppy ist durch das neue Betriebssytem Hypra-Speed bedingt und völlig normal.

Bei Ihrem Parallelkabel kann ein Fehler in der Verdrahtung vorliegen. Vergleichen Sie die Verbindungen Ihres Kabel noch einmal mit der Tabelle 2 in der 64'er 9/89, Seite 38.

Die Redaktion

Mehr Datensätze bei Datec 3.1

Frage von Franz Kropf aus der 64'er 7/90, Seite 95: Die komfortable Dateiverwaltung Datec 3.1 arbeitet einwandfrei mit der Floppy 1581 zusammen. Trotz der großen Speicherkapazität dieser Diskettenstation kann Datec 3.1 nur maximal 1024 Datensätze verwalten, obwohl sogar 3840 möglich wären. Wie kann ich das Programm auf diese Datenmenge erweitern?

Laden Sie Datec 3.1 wie gewohnt von der Diskette, starten Sie das Programm aber noch nicht mit RUN. Geben Sie im Direktmodus ein:

POKE 2191,15

In Adresse $088F (2191) ist das High-Byte der maximalen Anzahl der Datensätze ($0400) abgelegt, nach dem Programmstart wird es allerdings nach $8063 (32867) verschoben. Das höherwertige Byte der gewünschten Zahl »3840« ($0F00) lautet »15«. Speichern Sie nach dieser POKE-Anweisung das Programm erneut, so steht Ihnen die erweiterte Datensatzmenge künftig automatisch zur Verfügung.

Die Redaktion