MEMRESTORE (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
MEMRESTORE (TSB)
Syntax: MEMRESTORE <swt>
Parameter
swt: Flag für das Zurücksetzen der Transferregister
Einordnung
Typ: Anweisung
Kontext: Einbindung einer RAM-Erweiterung (REU)
Aufgabe: Umschalter für das automatische Neuladen der Zähl- und Adressregister
Abkürzung: memresT
Token: $64 $7A $8C (100 122 140)
Verwandte Befehle
MEMLOAD - MEMREAD - MEMSAVE - MEMDEF - MEMOR - MEMLEN - MEMCONT


Dieser Artikel beschreibt das TSB-Schlüsselwort MEMRESTORE (TSB).
Es gibt kein entsprechendes Simons'-Basic-Schlüsselwort.

Typ: Anweisung
Syntax: MEMRESTORE <swt>

MEMRESTORE steuert das automatische Neuladen der Übertragungsregister nach dem REU-Transfer. Der Wert

  • 0 bedeutet "nicht neu laden" und belässt alle Register auf dem zuletzt bei der Übertragung erreichten Wert.
  • 1 stellt alle Transferregister auf die vor dem Transfer eingestellten Werte zurück.

Außerdem erlaubt MEMRESTORE mit einem gesetzten Bit 7 im <swt>-Parameter, dass die Transferbefehle (MEMLOAD und MEMSAVE) auch auf das Farb-RAM zugreifen können und nicht nur auf das freie RAM darunter (ab TSB-Version 2.20826).

Beispiel[Bearbeiten | Quelltext bearbeiten]

Programm zum Anzeigen des Directory-Inhalts der REU unter GoDot:

80 cls: cset 1: d$="0123456789012345678": ls=len(d$): x$=chr$(0)
90 stringadresse holen
 
100 memdef ls,sa,0,0: memrestore 1: memload
105 f1=place(x$,mid$(d$,5,14))>0
110 f2=val(d$)=1.23456789e17:f3=asc(d$)=$c0
115 if  f1 or f2 or f3 then do
120   memclr sa,ls,$c0
125   if f3 then print "PRG wiederholt gestartet.": end
130   if f2 then print "REU nicht da.": end
135   if f1 then print "Kein GoDot-Directory gefunden.": end
140 done 

200 print "Directory of Drive 12: " mid$(d$,5,11): print
210 nx=asc(mid$(d$,2))+256*asc(mid$(d$,3)): bk=asc(mid$(d$,4))
220 for fl=1 to 119
230   mempos fl*19,0: memor sa: memload
240   p=fl: if asc(d$)=$c0 then fl=119: goto 290
245   if place(x$,mid$(d$,4)) then memclr sa,ls,$c0: goto290
250   use" ### ",fl;: print mid$(d$,4) at(lin,28)"$" $$(asc(d$) and 15);
255   print $$asc(mid$(d$,3)); $$asc(mid$(d$,2))
260   if lin=24 then keyget xx$: cls
290 next
300 print: print "Next entry at $" $$bk; $$nx; "," 120-p "entries left"
999 end

1000 proc stringadresse holen
1010 sys $8b65 d$: p=(peek(780)+256*peek(782))+1
1020 sa=d!peek(p)
1040 end proc

Erläuterungen:

  • Zeile 80 und 90: Der Anzeigestring D$ ist 19 Zeichen lang (für einen Directory-Eintrag), die Adresse von D$ steht in SA
  • Zeilen 100 bis 140: Fehlerabfangroutine (Keine REU? Vorher kein GoDot gestartet? PRG wiederholt aufgerufen?)
  • Zeilen 200 bis 300: Ausgabe des GoDot-Directorys bis zum ersten Leereintrag (Erkennung in Zeile 240) oder Directory zerstört (Zeile 245)
  • Zeilen 1000 bis 1040: Stringadresse ermitteln, Ergebnis in SA