Ich bin vom Commodore 64 auf den QL umgestiegen und stehe vor folgenden Problemen:
Ich suche eine Eingaberoutine, die es erlaubt. Feldlänge und Art der Eingabe (numerisch oder alphanumerisch) vorzugeben.
Gesucht wird eine Routine für formatierte Zahlenausgabe.
Wer hat Basic-Erweiterungen wie »mid$, left$, rightS, val, str$« und so weiter?
Ich brauche Befehle oder Routine zur Realisierung einer Random-Dateiverwaltung.
H.-U. Schreiber
Nachdem ich nach Anleitung des Sinclair-Sonderheftes 1/85 das EPROM des LPRINT III-Druckerinterfaces erneuert hatte. war — nach anfänglicher Begeisterung — die Enttäuschung groß, als doch noch, wenn auch
nicht ganz so oft. Zeichen beim Drucken verlorengingen. Nach langem Probieren fand ich heraus, daß der Fehler nicht auftaucht. wenn mit »CHR$ 5« initialisiert wird (deshalb auch nicht in Verbindung mit Tasword II). Das beruht darauf, daß bei Initialisierung mit »CHR$ 5« das EPROM nicht bei jedem zu druckenden Zeichen neu aktiviert und in den Printer-Buffer übertragen wird.
Da dann jedoch keine Sinclair-Token, also auch keine Listings druckbar sind, sah ich mir den Inhalt des EPROMs genauer an und stellte dabei fest, daß dieses durch einen emfachen POKE in Verbindung mit »CHR$ 5« doch möglich ist.
Fehlerfreies Drucken also durch Eingabe von: .LPRINT CHRS 5;: POKE 23306,30«. Diese Initialisierung wird durch den COPY-Befehl aufgehoben. Eventuell vorher festgelegter Autolinefeed oder Copymodus wird beibehalten.
S. Haustein
H. Fritz fragte in Happy-Computer 8/85 nach einer Tastaturabfrage Eine Abfrage der Tastatur kann man mit der Speicherzelle 23556 erreichen Dieses Byte kann die Werte 255 (keine oder SHIFT-Taste gedrückt). 13 (ENTER getastet). 32 (SPACE) oder die Werte 48 bis 57 sowie 65 bis 90 annehmen Die Abfrage in Assembler sieht dann so aus:
LD A. Wert in A laden (23556)
CP 65 Prüfung, ob Taste mit Wert 65 gedrückt. Wenn ja. dann Unterprogrammaufruf
CALL Z…
D. Fangmeyer
In der gleichen Ausgabe wurde von A Weber nach bewegten Figuren gefragt. Da nicht bekannt ist. welchen Computer er hat. unterstelle ich einen Spectrum Man gibt die Figur mit OVER1 aus. Beim zweiten PRINT an der gleichen Stelle ist die Figur verschwunden. S. Hunke
Langsam widert mich diese Diskussion an Es gibt keine Ausrede für unfaires Spiel. Schließlich kann ich mich bei einem Einbruch auch nicht damit herausreden. daß ich finde. Silberbestecke seien im Laden zu teuer. Wenn die GEMA-Lösung kommt, und sie kommt bestimmt, macht man es wie immer man läßt den Schaden die Leute bezahlen, die sich fair verhalten
Ingrid Majenz
Immer wenn ich mit dem Programmieren meines Atari 800XL so richtig einsteige, steigt der Computeraus. Dies kann nur an einem Fehler im Betriebssystem liegen, da dieser Fehler auch bei anderen 800XL-Computern auftritt. Speziell wenn viel editiert wird, blockiert der Computer dann plötzlich die Tastatur. Nach dem Drücken von RESET nimmt der Computer dann nur noch Zahlen an. Wodurch wird dieser Zustand verursacht? Können im RAM-Speicher befindliche Programme dennoch gerettet werden? Ist dieser Fehler auch bei den älteren Atari-Computern (400/800) vorhanden? Rainer Herget
Der Fehler ist schon länger bekannt. Beim Speichern von Programmen hängt das Betriebssystem jedesmal 16 Byte an das zu speichernde Programm an Lädt man es dann wieder, sind 16 Byte verloren Um die Gefahr des Aussteigens zumindest halbwegs zu reduzieren, empfiehlt es sich. Basic-Programme öfter mal mit LIST anstelle von SAVE zu speichern. Dann muß das Programm allerdings mit ENTER geladen und mit SAVE wieder gespeichert werden. Meist stehen anschließend einige zusätzliche Byte zur Verfügung.
Beim Atari 800, also dem alten Modell, tritt dieser Fehler zumindest nicht auf. Auch der 130XE ist verschont geblieben Uns ist aber leider keine einfache Lösung bekannt, diesen Fahler bei den 800XL-Modelien zu beheben.
In dieser Ausgabe finden Sie den kompletten Basic-Interpreter Turbo-Basic für den 800XL, bei dem dieser Betriebssystemfehler beseitigt wurde.
Gibt es eine Maus, die sich direkt, also ohne Interface, an den 800XL oder 130XE anschließen läßt? Thomas Baron
Die Maus für den Atari 520 ST läßt sich direkt an den 800XL und 130XE (somit an alle Computer mit Atari-kompatiblen Joystickanschlüssen) anschließen. Seitens Atari ist geplant, die Maus auch für die kleinen Modelle anzubieten Wann die Maus jedoch zu kaufen sein wird, steht noch nicht fest.
Sind die Diskettenlaufwerke SF354 und SF 314 untereinander kompatibel? Andre Blumberg
Ja und nein, müßte die Antwort lauten. Die beiden Laufwerke unterscheiden sich eigentlich nur darin, daß das SF 354- über einen und das SF 314-Laufwerk über zwei Schreib-/Leseköpfe verfügt Das Aufzeichnungsformat ist das gleiche. Grundsätzlich liest die SF 314 alle Programme. auch das Betriebssystem, von einer mit dem SF 354-Lauf-werk formatierten Diskette (beim Booten wird immer die Unterseite der Diskette zuerst gelesen).
Möchte man jedoch mit dem Einzelkopflaufwerk ein Programm lesen, welches sich auf der zweiten Seite befindet, gibt es zwangsläufig Schwierigkeiten. Schließlich existiert für diese Seite kein Schreib-/Lesekopf.
Soll eine Diskette von einem Einzelkopf- auf ein Doppelkopflaufwerk kopiert werden, gibt es ebenfalls Probleme Der Controller erkennt nämlich, daß es sich um zwei unterschiedliche Laufwerke handelt, und gibt eine Fehlermeldung aus. In umgekehrter Reihenfolge, also beim Kopieren von einem Doppelkopf- auf ein Einzelkopflaufwerk, gibt es ebenfalls eine Fehlermeldung. Hierbei handelt es sich um eine Sicherheitsmaßnahme, damit Programme beim Kopieren nicht verloren gehen. Würde man nämlich eine beiderseitig formatierte Diskette auf eine einfache kopieren können. wäre zwangsläufig der Inhalt der zweiten Seite verloren.
Mit etwas Geduld läßt sich aber trotzdem ein Duplikat anfertigen. Dann muß allerdings jedes Programm einzeln kopiert werden.
Wie stellt man in Basic gleichzeitig HiRes-Grafik und Text unabhängig voneinander au f dem C 64 dar? Christian Scherpe
Um HiRes-Grafiken und Text auf dem Bildschirm gleichzeitig zu realisieren, gibt es zwei Wege. Der erste arbeitet mit dem Rasterzeilen-Interrupt und scheidet von vornherein aus, da mit Maschinensprache gearbeitet werden muß. Der zweite Weg basiert darauf, daß man die Text-Zeichen in die Bit-Map übertragt. Dazu kopiert man den Zeichensatz aus dem ROM in das RAM. Mit einer Tastaturabfrage stellt man fest, welche Taste gedrückt wird und holt die entsprechenden Daten des Zeichens (8 Byte) aus dem RAM. um sie Byte für Byte in die Bit-Map einzutragen.
Der ganze Vorgang ist schwierig zu vollziehen und sprengt den Rahmen des Leserforums. Er wird demnächst in einem eigenen Kurs ausführlich erklärt.
Wie kann ich die mathematischen Grafiken aus Ausgabe 6/85 von meinem Drucker MPS 801 ausdrucken lassen?
Dieter Schneider
Die mathematischen Grafiken, die Sie in der Frage ansprechen, sind in Simons Basic programmiert. Mit COPY, einem Simons Basic-Befehl, kann man den Grafik-Bildschirm ausdrucken.
Wie läßt man beim C 64 die interne Uhr rückwärts laufen?
Horst Engel
Die interne Uhr des C 64 ist über die Variablen TI und TIS ansprechbar. Durch Differenzbildung kann man einen rückwärtslaufenden Wert erhalten. Die Variable TI wird alle 1/60 Sekunden um 1 erhöht. Zehn Sekunden entsprechen 600 Impulsen. Definieren Sie nun eine Variable T=600, stellen Sie TI auf Null und bilden Sie die Differenz D-TTI, dann läuft D von 600 an rückwärts.
Die Echtzeituhr in den beiden CIAs kann man nicht rückwärts laufen lassen, denn sie werden hardwaremäßig vorwärts gezählt. Auch hier hilft nur ein Differenzprogramm.
Im Prinzip die einfachste Lösung bietet sich mit den Timern in den CIAs Diese laufen ohnehin immer schon rückwärts.
Kann man den Lichtgriffel des Hewlett Packard C-41 an den C 64 anschließen?
Torsten Leibold, Richard-Wagner-Str. 11, 6830 Schwetzingen
Wie kann ich mehrere Zufallszahlen erzeugen, von denen keine doppelt Vorkommen darf?
Kurt Weiß
Andreas Linnebach aus Weinheim weiß hier Rat Um beispielsweise aus 49 Zahlen sieben zufällig auszuwählen, geht man folgendermaßen vor:
1 DIM a(49) 2 FOR B=1 TO 7 3 A(B)=INT(49+RND(1))+1 4 FOR C=1 TO B 5 IF A(B)=A(C) ANDB<>C THEN 3 6 NEXT:NEXT 7 FOR A=1 TO7 8 PRINT A(A) 9 NEXT
Ich besitze einen VC 20 und finde kaum noch Software und Speichererweiterungen in den Geschäften. Wer kann mir helfen?
Robert Schütz
Ein Tip: in fast jeder Ausgabe von Happy-Computer finden Sie im Computer-Markt mehrere Kleinanzeigen, die Ihr Problem sicherlich schnell lösen können.
Wieviele freie Speicherplätze gibt es in der Zeropage, und welche sind das im einzelnen? Unter welchen besonderen Voraussetzungen sind diese Speicherplätze frei?
Franz Semmler
Die Fragen sind zu komplex, als daß man sie in diesem Rahmen ausführlich beantworten kann. Generell sind die oberen vier Speicherplätze der Zeropage (Adresse 251 bis 254) frei. Wann und unter welchen Voraussetzungen weitere Register belegbar werden, hängt von vielen Faktoren ab. Um einen Überblick zu erhalten, ist es unerläßlich. sich mit weiterführender Literatur zu beschäftigen. Empfehlenswert sind zu diesem Thema das .C 64 Intern« von Data Becker oder das «Interface-System Handbuch« vom Interface Age Verlag.
Von meinen Disketten möchte ich Sicherheitskopien machen. Wer hat ein Programm für einen Disketten-Backup?
Wilfried Preuhsner
Die einfachste Art Sicherheitskopien herzustellen, besteht darin, alle Programme einer Diskette zu laden und nacheinander auf eine neue Diskette zu speichern. Es gibt aber sehr viel schnellere und komfortablere Programme. Eines der besten ist der Turbo-Nibbler 2 von Eurosystems.
Wie stelle ich fest, mit welchem Zeichen ein Sprite kollidiert ist?
Maik Gärlich
Sofort nach der Kollision liest man mit PEEK die Positionsregister aus, die das Sprite betreffen. Dabei ist auch das Register 53264 zu beachten, das Auskunft darüber gibt, ob die X-Position größer als 255 ist. Mit diesen Daten haben Sie nun den Standort des Sprites auf dem Bildschirm bestimmt, an dem die Kollision stattgefunden hat Allerdings als Punkt im Sprite-Koordinatensystem! Nun muß eine Transformation auf das normale Bildschirmsystem mit 40 Spalten und 25 Zeilen vorgenommen werden. Dazu rechnet man mit folgender Formel:
S = INT(40*(SX-24)/(344-24))
Z = INT(25*(SY-50)/(250-50))
In dieser Formel bedeutet SX die X-Position und SY die Y-Position des betreffenden Sprites. Hieraus ergibt dann S die Spalte und Z die Zeile, in der das betreffende Zeichen steht. Um jetzt herauszufinden, mit welchem Zeichen das Sprite kollidiert ist, liest man die Stelle des Bildschirm-RAMs aus, die S und Z angibt. Da jede Bildschirmzeile 40 Byte enthält, rechnet man 40*(Z-1)+S und addiert diese Zahl zur Startadresse des Bildschirm-RAM (1024-1, weil die erste Position schon enthalten ist). Der Zeichencode ergibt sich also durch:
PEEK (1023+40*(Z-1)+S
Allerdings muß man darauf achten, daß sich das Sprite nach der Kollision nicht weiterbewegt. Eventuell ist auch die Vergrößerung eines Sprite zu berücksichtigen.
Gibt es einen Umrüstsatz oder Emulator, mit dem ich meinen C 64 zum MSX-Computer umfunktionieren kann?
Lars Rompf
Ich suche Simons Basic-Listings
Karlheinz Nink
Ein längeres Simons Basic-Programm finden Sie in der Happy-Computer, Ausgabe 3/85 auf Seite 63.
Ich suche Listings, die sich mit Astrologie beschäftigen. Wer kann mir helfen?
Armin Strom