Hello, Guest the thread was called405 times and contains 5 replays

last post from GoDot at the

Bildschirm RAM Laden und ausgeben

  • So geht das nicht, umueller-wsw !


    Das funktioniert nur so:


    Code
    1. 100 a$="br":sys57812a$,8
    2. 110 poke193,0:poke194,4:poke174,231:poke175,7:sys62957
    3. 120 a$="co":sys57812a$,8
    4. 130 poke193,0:poke194,216:poke174,231:poke175,219:sys62957

    Mit 57812 legst du nur die Fileparameter fest (lädst aber noch nicht), 173/174 ist komplett falsch (muss 174/175 sein), und das Speichern macht dann 62957. Bei Paradroid musst du noch bemerken, dass du hinterher NEW eingeben musst, sonst kriegst du "out of memory". Die Zeilen 120/130 speichern zusätzlich die Farben ab.


    Arndt

  • Hi,


    erstmal Danke. Es funktioniert alles. Da load "name",8,1 innerhalb des Programms immer zum Anfang des Programms zurückspringt habe ich hier eine Routine eingeführt.

    Den Speicherfehler "out of memory" habe ich bisher nicht erhalten?!

    Da New das ganze Programm incl. Variablen löscht, ist das innerhalb des Programms keine Lösung. Man sägt am Ast....


    Gruß Udo

  • Ein bischen robuster wird das ganze, wenn man nicht mitten ins ROM springt und 780..783 als Übergabeadressen für die CPU-Register hernimmt, anstatt auf *irgendwelche* Zeropage-Adressen zuzugreifen! Dafür gibt's schließlich die Einsprungtabelle ins ROM, und dann klappt das auch mit Schnellladern:


    Zum Speichern:

    Code
    1. SYS57812(N$),<device>:POKE193,<start_lo>:POKE194,<start_hi>
    2. POKE780,193:POKE781,<end_lo>:POKE782,<end_hi>:SYS65496

    193 und 194 werden deshalb genommen, weil die Werte am Start der KERNAL-SAVE-Routine genau dahin kopiert werden. Sie werden also quasi "in sich selbst" kopiert und man braucht keine anderen zwei Adressen in der Zeropage dazu herzunehmen. <end> ist die Adresse des letzten Bytes des zu speichernden Bereichs plus 1!


    Zum Laden (ohne "versehentlichen" Neustart des Programms oder wilde "IFA=0THENA=1:LOAD"-Konstruktionen):

    Code
    1. SYS57812(N$),<device>,1:POKE780,0:SYS65493


    Für die Anwendung im OP also:

    Code
    1. SYS57812(N$),8:POKE193,0:POKE194,4:POKE780,193:POKE781,232:POKE782,7:SYS65496
    2. bzw.
    3. SYS57812(N$),8,1:POKE780,0:SYS65493

    ... mit N$ als gewünschtem Dateinamen. In Adresse 186 steht übrigens das zuletzt genutzte Gerät. Bei der Verwendung mit SYS57812 sollte dann allerdings zuerst eine Variable damit zuweisen, als z.B. DN=PEEK(186), da die Routine in 57812 als allererstes 186 auf 1 setzt (Default Tape) bevor die Parameter in BASIC-Text abgefragt werden. Also: DN=PEEK(186):SYS57812(N$),DN (oder ,DN,1) ... usw.

  • robuster wird das ganze, wenn man nicht mitten ins ROM springt und 780..783 als Übergabeadressen für die CPU-Register hernimmt

    Natürlich! Es geht aber auch so - auf jedem C64... ;-)

    Aber ich versteh schon, was du sagen willst. Ist eigentlich auch mein eigener Standpunkt... :-)


    Arndt