Hallo, guten tag.
Wie kann man bitte mit read eine bestimmte Datazeile anspringen beim VIC20?
Gibt es dafür ein Trick?
Danke Gruss
You are about to leave Forum64 to get redirected to the following address:
Please note, that the target website is not operated by us. We are not responsible for it's content nor does our privacy policy apply there.
Hallo, guten tag.
Wie kann man bitte mit read eine bestimmte Datazeile anspringen beim VIC20?
Gibt es dafür ein Trick?
Danke Gruss
Wie kann man bitte mit read eine bestimmte Datazeile anspringen beim VIC20?
Entweder RESTORE, und alles noch mal in eine Dummy-Variable einlesen, bis ausschließlich Zeile X.
Oder in der Zeropage den Zeiger für das nächste DATA-Element auf das Ende (die Null) der Zeile vor Zeile X setzen. Allerdings ist dieses nach dem Editieren vor dieser Zeile wieder woanders.
Beide Varianten sind suboptimal. Besser wäre eine BASIC-Erweiterung. Ansonsten sollte man die Organisation des Programms von vornherein so planen, dass man anfangs alle nötigen Daten einliest und die belegten Variablen nicht überschreibt, solange man sie noch braucht. Bei Bedarf legt man von den Daten eine Kopie in anderen Variablen an, die man dann verändern kann.
Das kann man leider nichtmal mit dem Basic im C64.
C64: Irgendwo in einem Data Becker Buch gab's aber eine Basic Erweiterung dazu zum abtippen, die genau so 'was konnte, so dass man ein Read mit einer bestimmten Data Zeile verkünpfen konnte.
So dass man schreiben konnte: "Read G", dann sucht das Basic nach einer Zeile mit Äquivalent also mit bzw. nach einem "Data G".. . "Read H" -> "Data H" usw. (egal welcher Buchstabe bzw. Variable).
Finde das aber selber nicht mehr wieder, in keinem Buch. Habe aber noch alle beisammen (Bücher). Da suche ich schon länger genau danach, zufällig.
Weiß also jmd. zufällig wo das zu finden war, in welchem der Bücher ?
Ich kenne so eine Routine aus dem Text-Adventure Inka. Damit konnte man ein Restore mit Zeilennummer machen.
Die Datas dazu sehen so aus. Ich hab mir die nicht angekuckt, einer kopiert vermutlich das ROM ins RAM, der andere ändert dann den RESTORE-Befehl:
Die Pokes setzen die Adresse 709 in die Speicherstellen 40996/40997.
Ab 264:
Ab 704:
Ich empfehle mal an dieser Stelle Literatur zum VC20. Findet man in der Wolke.
Bei dem Adventure Robox hat man das mit den Data Zeilen so gemacht. Siehe Code.
Eine (zugegebenermaßen sehr langsame) Idee wäre, jede Datazeile bzw. jeden Block von Datazeilen mit einem Identifier beginnen zu lassen, nach dem man suchen kann:
Wenn man dann einen bestimmten Block lesen will, kann man jederzeit das hier machen:
Danke. jetzt funktioniert es .
Mit der Data "asm" werden mit sys40960 2048 byte copiert.
Gruss
OK, für diesen Fall (nur Bytewerte) würde ich das weiter optimieren, z. B. so:
Vorteil: In den DATA-Zeilen muss nicht mehr stehen, wie viele Bytes zu behandeln sind. Da die "Block-Marker" negative Zahlen sind reicht es bis zur nächsten negativen Zahl zu lesen. Die Startadresse wird in "n" gespeichert, der zu lesende Block in "c".
Jetzt noch die ganzen Leerzeichen weglassen, dann wird's noch ein wenig schneller.
[EDIT]
Zeilen 990 und 10070 ergänzt.
[/EDIT]
Danke für die Info.
Gruss
Es gibt auch eine Variante mit entsprechenden Hilfsroutinen des Interpreters (ohne extra Maschinencode-Routine):
Der Aufruf usr(95) ruft die Find-Line-Routine auf $C613, das das Ergebnis auf $14/$15 ablegt. PEEK zerstört nicht $14/$15 (Inhalt wird zwischendurch gerettet!) Die usr()-Aufrufe suchen nach der Zeile in $14/$15 mit Ergebnis in FAC#1, $5F/$60 (95/96), wobei der Eingabeparameter gleichzeitig der Retourwert ist, auf dem dann PEEK() arbeitet. D.h. PEEK kann auf das Ergebnis zugreifen, bevor der Interpreter den Wert wieder zerstören kann. Allerdings muss zu die Suchroutine 2 Mal aufgerufen werden. Das Vermindern um 1 wird dann in BASIC gemacht.
Ja , danke.
Gruss
Aber ging's jetzt zwischendrin wieder um Lösungen für deinen VC 20 oder immernoch um C64 ? Das wurde nie dazugesagt. Wenn nur für C64, dann bringt's für dein Problem ja nix.
Es laufen die auf VIC20.
GRuss
CommieSurfer schau doch mal in welcher Rubrik wir uns befinden😉 und in letzter Zeit frägt er sowieso für vc20
CommieSurfer schau doch mal in welcher Rubrik wir uns befinden😉 und in letzter Zeit frägt er sowieso für vc20
Nicht nur das, im 1. Posting steht es ja auch explizit:
Wie kann man bitte mit read eine bestimmte Datazeile anspringen beim VIC20?
CommieSurfer schau doch mal in welcher Rubrik wir uns befinden😉 und in letzter Zeit frägt er sowieso für vc20
Was sol das denn ? XXXXXXX edit cp2 -Beleidigung entfernt-.., erstmal von Anfang an lesen bitte ! Mir war schon in meinem ersten Post hier bewusst, dass er nach VC 20 fragt. Deswegen der Einleitsatz ("Leider nichtmal der C64 kann das bzw. das Basic, nicht nur der VC 20 nicht", so ist der Satz gemeint) von mir und auch noch das "C64:" für jetzt kommt 'was für C64 only leider und nicht VC 20.
Da ist euer trollen wohl gewaltig nach hinten losgegangen was ? Voll ins Fettnäpfchen gesetzt habt ihr euch.. !
Endurions Post habe ich dann weiterhin als etwas für C64 only wahrgenommen, als Antowrt oder Fortführung auf meinen Post und Frage. Deswegen fragte ich, ab wann denn hier ab welchem Post wieder zum VC 20 geswitcht wurde. Ganz einfach.
Auch wenn das ggf. doch auf den VC 20 bezogen war (dachte es handelt sich um ein C64 Textadventure, dabei war's ggf. etwas für VC 20).
-Aber wenn Endurion etwas sagt und Code postet, einer der sich vornehmlich nur mit dem C64 u. nicht gerade mit dem VC 20 so intensiv beschäftigt, dann gehe ich zu 100% davon aus dass er gerade von C64-Bsp. erzählt.-
CommieSurfer : mäßige Deinen Ton - BITTE!
Hoppla, hab' zu spät gesehen, dass VC20 gemeint war. Sorry!
Sach ich ja , also ab wann ging's wieder um den VC 20 (nicht dass die anderen nach Endurion z.T. auch noch um C64 sich drehen.. u. der Threaderöffner daher eben damit nichts verwendbares mit anfangen kann, wie ich schon sagte) - um zur klärenden Frage von mir zurückzukommen ? (Ok, es sind auch ein paar allgemein anwendbare Bsp. dazwischen, die von Kinzi.)