C 64
Tips & Tricks

Auto-Save

Wenn Ihnen beim Abtippen eines Programms schon mal der Strom ausgefallen ist, dann ist das folgende Programm genau das richtige für Sie.

Die abgedruckten Listings in den Fachzeitschriften sind ja eine willkommene Programmquelle. Allerdings ist das Abtippen der oft sehr langen Programme eine sehr mühselige Angelegenheit. Besonders groß wird der Ärger, wenn ein Stromausfall beziehungsweise ein Hardware-Defekt stundenlange Tipparbeit zunichte machen. Abhilfe schafft hier nur das umständliche Zwischenspeichern in gewissen Abständen, doch das wird oft vergessen oder aus Bequemlichkeit unterlassen.

Das hier vorgestellte Programm nimmt nun dem geplagten Computer-Benutzer diese Arbeit ab. Es speichert automatisch das bisher Getippte in Intervallen oder auch auf Knopfdruck ab. Bitte tippen Sie vor der Benutzung Listing 1 mit dem MSE und Listing 2 mit dem Checksummer ab. Vergessen Sie das Speichern nicht!

Hinweise zur Benutzung:

Geladen wird das Programm mit LOAD"AUTO-SAVE",8 und anschließendem RUN. Der Maschinensprachteil wird nachgeladen und dann der Name des einzutippenden Programms erfragt. Keine beziehungsweise Eingabe von Leerzeichen wird abgefangen.

Bei der Eingabe des Speicher-Intervalls ist folgendes zu beachten: Die Intervalle werden nicht durch die Zeit, sondern durch die Speicherbelegung gesteuert. Dies geschieht durch eine Abfrage der Speicherstelle 46. Diese enthält das High-Byte des Zeigers auf den Variablen-Anfang (=Programmende). Gibt man also als Intervall zum Beispiel 4 ein, so wird immer dann, wenn 1 KByte Programmtext neu im Speicher stehen, zwischengespeichert. Um außerdem besonders schwierige Programmteile, zum Beispiel Bildschirmmasken oder mathematische Formeln, sofort zu speichern, gibt es die Möglichkeit, per Knopfdruck ein Speichern auszulösen.

Dies geschieht durch Drücken der @-Taste (Klammeraffe) und anschließendem RETURN. Diese Funktion kann mit POKE 49177,ASC("taste") leicht auf jede andere Taste verlegt werden.

Beendet werden kann das Programm durch RUN STOP/RESTORE oder einen Reset, neu wird es gestartet mit SYS 49152.

Erläuterungen zum Programm: »SAVE.OBJ«:

Die Gliederung des Maschinenprogramms läßt sich am besten anhand einer Tabelle durchführen:

Speicherbereich hexadezimal Belegung
$C000-C014 INIT
$C015-C02A BEFEHL
$C02B-C037 AUTO
$C038-C0A6 SAVE
$C0A7-C0D2 Textmeldung
$C0D3 Sollwert
$C0D4 Intervall
$C0D5 Namenlänge
$C0D6 Namenlänge+ 2
$C0D7-C0D8 "S:"
$C0D9 Programmname

INIT: Zwei Vektoren werden umgeändert und damit das Maschinenprogramm aktiviert.

BEFEHL: Dieser Teil wird über den Vektor "Neuen Basic-Befehl ausführen" (dez. 776-777) angesprungen. Er prüft, ob der Klammeraffe beziehungsweise die festgelegte Taste gedrückt wurde. Falls ja, wird zu SAVE verzweigt, ansonsten wieder in die Interpreterschleife.

AUTO: Diese Routine wurde über den "Zeiger auf Tastatur-Dekodiertabelle" (dez. 655-656) eingebunden. Bei jedem Tastendruck wird der Inhalt der Speicherstelle 46 mit dem Sollwert (siehe oben) verglichen und bei Gleichheit wiederum SAVE angesprungen.

SAVE: Der eigentliche Hauptteil des Programms. Er wird von den oben genannten Routinen angesprungen und hat mehrere Aufgaben:

— »Sollwert« um »Intervall« erhöhen

— bisherigen Programmteil löschen

— neuen Programmteil speichern

— Textmeldung ausgeben.

Um den »Replace«-Befehl mittels Klammeraffen, der bekanntlich seine Tücken hat, zu umgehen, wurde der etwas umständlichere Weg gewählt, vor dem Speichern einen »Scratch«-Befehl an das Laufwerk zu senden und somit das alte Programm zu löschen.

Die Meldung »Saving« des Interpreters wird unterdrückt und statt dessen der Text »Programm wird abgespeichert« ausgegeben. Wem diese Meldung nicht gefällt, der kann sie leicht ändern, indem er sie im ASCII-Format in den oben genannten Speicherbereich schreibt.

(Manfred Lins/bs)
PROGRAMM : SAVE-OBJ       C000 C0D5
-----------------------------------
C000 : A2 15 A0 C0 8E 08 03 8C   BB
C008 : 09 03 A2 2B A0 C0 8E 8F   0A
C010 : 02 8C 90 02 60 20 73 00   92
C018 : C9 40 F0 06 20 79 00 4C   65
C020 : E7 A7 20 73 00 20 38 C0   B5
C028 : 4C 7B A4 A5 2E CD D3 C0   32
C030 : D0 03 20 38 C0 4C 48 EB   F8
C038 : A9 01 A2 08 A0 6F 20 BA   87
C040 : FF A9 00 20 BD FF 20 C0   F6
C048 : FF A9 08 20 B1 FF A9 6F   C3
C050 : 20 93 FF A2 00 BD D7 C0   5D
C058 : 20 A8 FF E8 8A CD D6 C0   DD
C060 : D0 F3 A9 08 20 AE FF A9   60
C068 : 01 20 C3 FF AD D3 C0 18   17
C070 : 6D D4 C0 8D D3 C0 A2 00   F7
C078 : BD A7 C0 20 D2 FF E8 8A   23
C080 : C9 2C D0 F4 A9 00 A2 08   67
C088 : 20 BA FF A2 D9 A0 C0 AD   5A
C090 : D5 C0 20 BD FF A9 00 85   DD
C098 : 9D A9 2B A6 2D A4 2E 20   9A
C0A0 : D8 FF A9 80 85 9D 60 11   DB
C0A8 : 20 20 20 20 20 12 20 50   98
C0B0 : 52 4F 47 52 41 4D 4D 20   BA
C0B8 : 57 49 52 44 20 41 42 47   75
C0C0 : 45 53 50 45 49 43 48 45   C6
C0C8 : 52 54 20 92 20 20 20 20   63
C0D0 : 20 20 11 01 08            BD
Listing 1. »SAVE.OBJ« wird von Listing 2 »AUTO-SAVE« nachgeladen. Bitte beachten Sie die Eingabehinweise auf Seite 7.
1 rem  ********************************
2 rem  *                              *
3 rem  *          auto - save         *
4 rem  *                              *
5 rem  *      1985 by manfred lins    *
6 rem  *              reitacker 1     *
7 rem  *         6492 zuentersbach    *
8 rem  *                              *
9 rem  ********************************
10 :
11 :
12 rem  maschinen-programm nachladen
13 if r=0 then r=1:load"save-obj",8,1
14 :
16 print chr$(147)chr$(18)"             auto - save                "
19 print:print:print
21 :
22 rem  name eingeben
23 print"  programmnamen (max. 16 zeichen) ein-"
24 print"  geben :"
25 :
26 s=10:z=6:gosub 62
27 if a$="" or left$(a$,1)=" " then 26
28 :
29 rem  namen und laenge abspeichern
30 n$="s:"+left$(a$,16):l=len(n$)
31 poke 49365,l-2:poke 49366,l
32 :
33 for i=1 to l:poke 49366+i,asc(mid$(n$,i,1)):next i
36 print:print
39 rem  intervall eingeben
40 print"  abspeicher-intervall (256 byte = 1)"
41 print"  eingeben :"
43 s=13:z=10:gosub 62
46 rem  intervall abspeichern
47 i=val(a$):if i<1 then i=1
48 poke 49363,8+i:poke 49364,i
51 rem maschinenprogramm initialisieren
52 sys 49152
53 :
54 rem  ladeprogramm loeschen
55 new:end
60 rem  unterprogramm stringeingabe
62 print chr$(144):open 1,0
63 poke 214,z:poke 211,s:sys 58640
64 input#1,a$
65 close 1:print chr$(154):return
Listing 2. »AUTO-SAVE«: Sicherheit bei Stromausfall
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →