Daten im Speicher abspeichern und später nachladen

Es gibt 8 Antworten in diesem Thema, welches 212 mal aufgerufen wurde. Der letzte Beitrag (17. November 2025 um 17:30) ist von 8R0TK4$T3N.

  • Hi,

    Ich habe folgendes Problen: Ich hatte in BASIC Bitmaps (Zeichen) in DATA Zeilen gespeichert und der VIC hatte wohl etwas durcheinander geworfen. Beim Laden der Programme (mt den DATAs) kann ich diese nicht ändern; am Ende hängt eine (von mir nicht eingegebene) Zeile.

    1980 DATA 168,168,186,250,104,104,160,32
    9999 DATA -1
    78 GOTO]

    Das gibt einen syntax error in 78


    Will ich diese Zeile löschen, hängt sich der Rechner auf.

    Gebe ich eine neue DATA Zeile (2000 DATA xxxxx) ein, passiert das gleiche.


    Aber die Daten (aus den vorhandenen DATAs) sind immerhim im Speicher (ab 5120 ($1400), max 256 Zeien).

    Und ich kann die Daten problemlos nach $2000 ff. kopieren.

    a. Wie speichere ich die Daten (als .prg) ab? Ohne Monitor.

    b. Wie lade ich die geretten Daten wieder in den Speicher (ohne das bereits vorhandene Programm) zu zerstören?

    Thomas

  • Hast du das kaputte Basic Programm als gespeicherte Datei? Kannst du das hier anhängen?

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • $2000 ist nicht weit hinter dem Basic Programmstart. Wahrscheinlich kopierst du dir selber die Daten über den Programmbereich drüber.

    Ja, Code würde helfen.

    YouTube Kanäle über Basic, den C128 und den VDC-Chip
    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.
    Commodore 8-Bit Projekte
    auf Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. zu Commodore 8-bit Hardware
    auf printables.com
  • a. Wie speichere ich die Daten (als .prg) ab? Ohne Monitor.

    Bitte melde dich an, um diesen Link zu sehen. siehe Abschnitt "Beliebigen Adressbereich abspeichern".

    Edit: Oh VC20? K.A. dann :/

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Oh VC20? K.A. dann :/

    Oje, genau das denke ich auch.
    Ich tippe darauf, das er sich sein Programm selber überschreibt. Sieht zu mindestens verdächtig danach aus wenn nach der letzten Zeile Datenmüll kommt.

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • Hallo, die Daten erzeuge ich mit dem BASIC-Programm welches bei $2001 liegt.
    Und zwar nach $1300 wo sie der VIC1 verwenden kann.
    Nach Soft-Reset sind die Daten ja noch da (ab $1300), und ich kann sie problemlos nach $2000 oder sonstwohin kopieren / verschieben. Hauptsache sie stehen nicht unmittelbar im Weg.

    Basic nach poke 44,32: poke 8192,0:new


    Irgendetwas passierte beim Speichern (VICE), evtl. ist der VICE dran schuld?


    Ich habe eben mal nachgeschaut:

    Version Data 1-5 fehlerhaft,

    Version Data 1-6 in Ordnung.

    Version Data 1-7 in Ordnung

    Version Data 1-8 fehlerhaft

    Version Data 11 fehlerhaft


    Ich speichere ab und zu. Seltsamerweise ist V1-5 "kaputt", und V1-7 in Ordnung.

  • So ganz verstehe ich den Sinn der Aktion nicht:

    Willst Du (mit einem nicht gezeigten Teil des Basic-Programms) die Bytes aus den Data statements in den Speicher poken und wenn Bildschirmspeicher: Wenn das dort dann auch im Bild erscheint und Du mit dem Cursor drüber gehst, dann wird das -egal wie falsch es auch aussehen mag- als Programmzeile übernommen...

    Wenn nicht Bildschirmspeicher, wozu dann?

    Assembler-Programm??

    Dann musst Du aber VOR dem Laden des Loaders schon einige Vektoren ändern, ich denke nicht, dass da das eine Byte "44" reicht... Zudem "wachsen" jegliche im Programm verwendeten Variablen vom Basicende her nach unten Richtung echtes Programmende, wenn es zur Überlappung kommt, käme ein out of memory-error, aber dafür muss das Basic auch wissen, wo das Programm genau zu Ende ist und wenn zu wenig Platz für Variablen frei ist oder drüber gar kein physischer Speicher vorhanden ist, dann schmiert die Kiste eben ab...

    Die Vorgehensweise, um mittels eines Basic-"Loaders" Maschinencode oberhalb (oder auch unterhalb) des Basic-Bereichs abzulegen ist in vielen Artikeln in der 64er sowie den div. Data-Becker-"Bibeln" beschrieben und mit Beispielen befüllt.

    Diese gelten grundsätzlich sowohl für den VC20 als auch den C64, nur die Speichermap ist natürlich ne Andere und muss passend berücksichtigt werden.


    n.B.: Wenn man Programme speichert, nachdem man die Basic-Grenzen verändert hat, muss man diese später absolut, d.h. mit Load"meinPRG",x,1 laden, sonst landen die am dann aktuell gültigen Basic-Anfang, zum Speichern muss man sowohl den Anfang als auch das Ende modifizieren und den Variablenpointer meines Wissens nach auch noch (und Platz dafür lassen...), bevor man normal speichert, absolut speichern konnte Basic V2 noch nicht... (ist für Assembler-Routinen sinnvoll, die man mittels Data einpoked, aber dann als eigenes PRG abspeichern will...)

    Wenn Du den ganzen Quellcode angibst, dann kann man Dir hier helfen, wenn es nur drum geht, den defekten Code zu reparieren, dann musst Du mit ein paar Print (Char$Peek(xyz))) mal rausfinden, wo das Ende der letzten gewollten Zeile ist und danach dann mehrere Bytes mit 0 per Poke anfügen... Anstelle der erkannten Basic-Befehle/Statements bekommst Du natürlich deren Token zurück, die brauchen nur ein Byte, eine Art Kompression wie auch Vorverarbeitung für den eigentlichen Interpreterlauf...

  • Nun, das Seltsame ist, dass das Programm fehlerhaft gespeichert ist.

    Den veränderderten Charset habe ich mit Excel erstellt, und aus dem Binärcode dezimale Zahlen erstellt.

    Und diese hatte ich in Data Zeilen verpackt (je Zeichen 1 Zeile) und in den Speicher "gepoked".

    Was ich möchte: Den Datensatz (11 x 4 Zeichen) = 44 Zeichen retten (z.B. nach $3000 poken) und als .prg File sichern.

    Mehr nicht.

  • Also so in etwa? Die POKE & SYS-Werte beziehen sich allerdings auf den C64. Ob die am VC-20 identisch oder unterschiedlich sind, kann Mike eventuell etwas zu sagen.

    block save from $3000-$3FFF:

    BASIC
    1 SYS 57812 "FILENAME",8,1 : REM SET PARAMETERS FOR LOAD
    2 POKE 193,0 : POKE 194,48 : REM $3000 IS START ADDRESS
    3 POKE 174,0 : POKE 175,64 : REM $4000 (-1) IS END ADDRESS
    4 SYS 62957 : REM PERFORMS SAVE

    Block load:

    BASIC
    1 POKE 147,0 : REM LOAD/VERIFY FLAG, 0 MEANS LOAD
    2 SYS 57812 "FILENAME",8,1 : REM SETLFS IN KERNAL SETS PARAMETER
    3 SYS 62631 : REM LOAD

    "Führungskräfte verrichten keine Arbeit." — Schülerduden Physik