C 64 / VC 20
Checksummer

Checksummer — keine Fehler mehr beim Abtippen von Listings

Das Programm Checksummer 64 ist für all die Leute gedacht, die sich manchmal vor Verzweifelung »die Haare raufen« könnten. Da sitzt man mehrere Stunden, um ein gutes Programm aus dem 64’er Magazin abzutippen, und dann: ein Fehler in der DATA-Zeile oder ein falscher Buchstabe… und schon geht die Fehlersuche los. Hier soll der Checksummer 64 weiterhelfen.

Der Checksummer 64 ist ein kleines Maschinenprogramm, das, wenn es aktiviert ist, Sie sofort davon unterrichtet, ob Sie die jeweilige Programmzeile korrekt eingegeben haben.

  1. Tippen Sie den Basic-Lader sorgfältig ein. Es gibt zwei Versionen: eine für den Commodore 64 und eine für den VC 20.
  2. Bevor Sie »RUN« eingeben, speichern Sie den Basic-Lader bitte erst ab, denn wenn Sie zum Beispiel einen Fehler bei den eingetippten POKE-Anweisungen gemacht haben, ist es möglich, daß der Rechner aussteigt. Heben Sie sich den abgespeicherten Checksummer 64 auf — Sie werden ihn immer wieder brauchen, wenn Sie ein Basic-Programm aus dem 64’er Sonderheft oder in Zukunft aus dem 64’er Magazin eintippen wollen.
  3. Der Checksummer 64 überprüft sich selbst. Wenn Sie einen Fehler in den DATAs gemacht haben, listen Sie die fehlerhafte Zeile einfach, korrigieren sie und starten dann das Programm neu.
  4. Nach Initialisierung des Maschinenprogramms ist der Checksummer 64 aktiviert. Er steht innerhalb des Betriebssystems und verbraucht kein einziges Byte Speicherplatz. Es sei hier für Interessierte gesagt, daß selbst alle Sprungvektoren unverändert bleiben, das Programm also mit einer Vielzahl von anderen Programmier-Spracherweiterungen wie etwa Exbasic Level II problemlos zusammenarbeitet. Achten Sie aber darauf, daß bestimmte Spracherweiterungen das hinter dem ROM liegende RAM für Hires-Grafiken benutzen. Wird zum Beispiel eine Hires-Grafik von Simons Basic aus angesprochen, so wird der Checksummer 64 zerstört.
  5. Wenn Sie den Checksummer 64 zwischenzeitlich nicht benutzen, können Sie ihn jederzeit mit »POKE 1, 55« desaktivieren. Auch durch Drücken der Run-Stop- und der Restore-Taste wird der Checksummer 64 desaktiviert. Wollen Sie, daß der Checksummer 64 auch noch nach Drücken dieser Tastenkombination erhalten bleibt, so geben Sie bei aktiviertem Checksummer 64 »POKE64982, 53« ein. Der Checksummer 64 ist dann nur durch »POKE 1, 55« abschaltbar.
    Wollen Sie den Checksummer 64 wieder einschalten, so geben Sie bitte »POKE 1, 53« ein.
    Das Maschinenprogramm bleibt solange erhalten, bis der Computer ausgeschaltet, oder wenn von anderen Programmen auf das hinter dem ROM liegende RAM zugegriffen wird.
  6. Eine Checksumme wird nur dann ausgegeben, wenn der Commodore 64 (VC 20) eindeutig erkennt, daß Sie eine Zeile bestehend aus der Zeilennummer und zumindestens einem alphanumerischen Zeichen eigegeben haben. Ansonsten reagiert der Commodore 64 normal.

Hinweis: Wenn Sie bei aktiviertem Checksummer 64 ein Programm mit »LOAD« in den Speicher holen, wird auch eine Checksumme ausgegeben. Dies liegt jedoch an rechnerinternen Routinen und hat keine weitere Bedeutung, stellt insbesondere keine Gefahr für das geladene Programm dar, da alle Pointer richtig gesetzt werden.

Nach Eingabe von RUN wird zunächst einmal das ROM in das RAM des Commodore 64 verschoben, wonach der Basic-Interpreter modifiziert wird. Dadurch hat man den Vorteil, trotz einer zusätzlichen Routine das gesamte RAM des Rechners zur Verfügung zu haben. Nach ordnungsgemässem Ablauf des Programms können Sie sofort mit Eingaben beginnen. Für Maschinensprache-Spezialisten weise ich darauf hin, daß ich ausnutze, daß die Einschaltmeldungen des Rechners nur nach einem Reset generiert wird. Der Textbereich, in dem die Meldung steht, wird von dem erzeugten Maschinenprogramm überschrieben.

Alle veröffentlichten Listings sind mit einer Checksumme versehen, die am Ende jeder Programmzeile steht. Diese Checksumme steht zwischen < und >. Sie wird beim Eintippen des Programms nicht mit eingegeben. Die Zahl zwischen den beiden Zeichen stellt lediglich eine Information für Sie dar. Wenn Sie diese Checksumme dennoch mit eintippen, werden Sie schnell bemerken, daß Sie etwas falsch gemacht haben. Bei aktiviertem Checksummer 64 wird nämlich nach Eingabe einer Basic-Zeile, die mit Return beendet wird, in die linke obere Bildschirmecke die Checksumme eingeblendet, die mit der Summe aus dem veröffentlichten Listing übereinstimmen muß. Ist das nicht der Fall, haben Sie die Zeile anders eingegeben, als sie im Listing dargestellt ist. Vergessen Sie also bitte nicht, daß die am Ende einer Zeilein < und > stehendePrüfsumme nicht mit eingegeben werden darf.

Der Checksummer 64 ist so ausgelegt, daß er abhängig von der Zeilennummer und dem Text der Zeile eine Checksumme ausgibt. Beim Bilden dieser Checksumme werden Spaces (Leertaste) überlesen, was für Sie bedeutet, das es egal ist, wieviel Leerzeichen Sie zwischen den Worten lassen, da Sie für den Programmablauf ohnehin keine Bedeutung haben. Aber manchmal ist das richtige Setzen von Leerzeichen doch wichtig, besonders innerhalb von Strings (Zeichenketten), die gedruckt werden sollen. Seien Sie deshalb besonders genau bei Leerzeichen, die innerhalb von Anführungszeichen stehen, denn meistens ermöglichen nur die richtig gesetzten Spaces eine sinnvolle Textausgabe auf dem Bildschirm.

Beachten Sie auch, daß es durchaus erlaubt ist, Abkürzungen für die Commodore-Befehlswörter zu verwenden. So führt die Eingabe von » ? « als Kurzschreibweise für »PRINT« nicht etwa zu einem Checksummen-Fehler, sondern wird korrekt verarbeitet und dementsprechend die Checksumme generiert. Nachdem Sie ein Listing eingegeben haben, sollten Sie es aus Sicherheitsgründen vor dem Starten abspeichern. Sie brauchen hierfür jedoch nicht den Checksummer 64 zu desaktivieren.

Hinweise zum Lesen von Listings

Die Listings haben sich ein wenig im Ausdruckformat verändert, um Ihnen das Eingeben von Programmen wesentlich zu erleichtern.

— Cursorsteuerzeichen und andere Steuerzeichen, die schwer zu lesen sind, werden von nun an in Klartext in speziellen Klammern gesetzt.
Tritt mehrmals hintereinander dasselbe Steuerzeichen auf, so wird diese Steuerzeichen-Sequenz zusammengefasst, indem zuerst das Steuerzeichen und dann die Anzahl der Wiederholungen dieses Steuerzeichens in Klartext ausgegeben wird.
— alle Commodore-Grafikzeichen, die über Shift zu erreichen sind, werden nicht mehr als Grafikzeichen, sondern als Klartextzeichen dargestellt. Dabei wird aus dem Zeichen, das Sie auf dem Bildschirm sehen, wenn Sie die Tastenkombination Shift und »A« ansprechen, wieder ein »A«. Um dieses »A« vom normalen »A« unterscheiden zu können, ist es etwas kleiner als das gewöhnliche »A« und ist außerdem mit einem Unterstreichungszeichen versehen. Diese Vereinbarung gilt auch für sämtliche andere Commodore-Grafikzeichen, die über Shift zu erreichen sind.
— entsprechendes gilt für sämtliche Commodore-Grafikzeichen, die über die Commodore-Taste zu erreichen sind. Hier wird jedoch das jeweilige Klartextzeichen nicht unterstrichen, sondern überstrichen.

Erläuterungen zu den Cursorsteuerzeichen

Cursorsteuerzeichen werden, wie schon oben erwähnt, umdefiniert. Sie sehen hier eine Liste der möglichen Ausdrücke, die für ein Cursorsteuerzeichen im Listing auftauchen können. Gleichzeitig ersehen Sie aus der Tabelle, welche Taste beziehungsweise Tastenkombination zu drücken ist, damit dieses Steuerzeichen richtig in Ihr Programm übernommen wird. Beachten Sie, daß Sie die Steuercodes nur dann als reverses Zeichen sehen können, wenn der Rechner im »Quote-Modus« arbeitet, das heißt er sich im Gänsefüßchenmodus befindet.

Wenn Sie lesen ! drücken Sie
CTRL steht für Control-Taste, so bedeutet[CTRL-A], daß Sie die Control-Taste und die Taste »A« drücken müssen. Im folgenden steht:
[down] ! Taste neben rechtem Shift, Cursor unten
[up] ! Shift-Taste & Taste neben rechtem Shift, Cursor hoch
[clear] ! Shift-Taste & 2. Taste ganz rechts oben
[inst] ! Shift-Taste & Taste ganz rechts oben
[home] ! 2. Taste von ganz rechts oben
[del] ! Taste ganz rechts oben
[right] ! Taste ganz rechts unten
[left] ! Shift-Taste & Taste unten rechts
[space] ! Leertaste
[f1] ! grauer Tastenblock rechts
[f3] ! grauer Tastenblock rechts
[f5] ! grauer Tastenblock rechts
[f7] ! grauer Tastenblock rechts
[f2] ! grauer Tastenblock rechts & Shift
[f4] ! grauer Tastenblock rechts & Shift
[f6] ! grauer Tastenblock rechts & Shift
[f8] ! grauer Tastenblock rechts & Shift
[return] ! Shift-Taste & Return
[black] ! Control-Taste & 1
[white] ! Control-Taste & 2
[red] ! Control-Taste & 3
[cyan] ! Control-Taste & 4
[purple] ! Control-Taste & 5
[green] ! Control-Taste & 6
[blue] ! Control-Taste & 7
[yellow] ! Control-Taste & 8
[rvson] ! Control-Taste & 9
[rvoff] ! Control-Taste & 0
[orange] ! Commodore-Taste & 1
[brown] ! Commodore-Taste & 2
[ligred] ! Commodore-Taste & 3
[grey 1] ! Commodore-Taste & 4
[grey 2] ! Commodore-Taste & 5
[lig.green] ! Commodore-Taste & 6
[lig.blue] ! Commodore-Taste & 7
[grey 3] ! Commodore-Taste & 8
Wenn Sie sich erst einmal an die in Klartext geschriebenen Steuerzeichen gewöhnt haben, werden Sie den Vorteil dieser Schreibweise erkennen. Der zu dem jeweiligen Steuerzeichen gehörende Klartext ist so verfaßt, daß Sie leicht die Taste beziehungsweise die Tastenkombination finden, die Sie drücken müssen.

Checksummer VC 20

Der Checksummer VC 20 ist im Prinzip genauso aufgebaut wie der Checksummer 64. Da beim VC 20 jedoch nicht die Möglichkeit besteht, das ROM softwaremässig zu modifizieren, mußte ein anderer Weg als beim Commodore 64 gewählt werden, um die Checksumme zu generieren.

In ihrer Funktionsweise unterscheiden sich der Checksummer VC 20 und der Checksummer 64 nicht. Es gelten folgende Sonderregelungen bei der Benutzung des Checksummer VC 20:

ACHTUNG: Nehmen Sie keine Kassetten-Operationen vor, wenn der Checksummer VC 20 eingeschaltet ist. Da das Betriebssystem den Kassettenpuffer mit Daten belegt, kann der Checksummer VC 20 überschrieben werden, was zur Folge hat, daß sich der Rechner bei aktiviertem Checksummer VC 20 »aufhängt«. Wollen.Sie deshalb ein Programm auf (von) Kassette abspeichern (laden), so müssen Sie erst den Checksummer VC 20 abschalten (SYS 58459).

Daraufhin kann der Kassettenpuffer mit Daten überschrieben werden, ohne daß der Rechner »aussteigt«.

Als Sicherung wird bei der Initialisierung geprüft, ob das zuletzt angesprochene Peripherie-Gerät der Kassettenrecorder war. Ist das der Fall, so werden die Betriebssystemroutinen LOAD und SAVE für die Benutzung gesperrt. Der Rechner meldet bei Aufruf einer dieser beiden Routinen READY, ohne weitere Aktionen durchzuführen. Diese Sicherung kann man nach der Tipparbeit aufheben, wenn man den Checksummer VC 20 mit SYS 58459 abschaltet. Dadurch wird der Kassettenpuffer für andere Daten freigemacht. Weiterhin wird dann durch gleichzeitiges Drücken der Tasten »Run-Stop & Restore« erreicht, daß die Betriebssystemroutinen LOAD und SAVE wieder eingerichtet werden.

Viel Spaß beim Eintippen von Programmen mit dem neuen Checksummer!

(F. Lonczewski / gk)
0 rem *******************************
1 rem *                             *
2 rem *       checksummer 64        *
3 rem *                             *
4 rem *  copyright oktober 1984 by  *
5 rem *                             *
6 rem *      frank lonczewski       *
7 rem *                             *
8 rem *******************************
9 print"{clr}             {rvon}checksummer 64{rvof}"
10 print"{down} written october 1984 by f. lonczewski"
11 print"{down}{down}    ich arbeite! bitte etwas geduld."
12 fori=40960to49151:pokei,peek(i):next
13 fori=57344to65535:pokei,peek(i):next
14 poke1,53:poke42289,96:poke42290,228
15 fori=58464to58554:gosub21:pokei,a
16 ps=ps+a+1:nexti
17 ifps<>11187thenprint"pruefsummenfehler !":end
18 print"{down}{down}{down}{down}         checksummer aktiviert."
19 print"{down}{down}ausschalten : poke1,55"
20 print"{down}anschalten  : poke1,53":new
21 reada$:iflen(a$)<>2thenprint"tippfehler in zeile"peek(63)+peek(64)*256:end
22 a1=asc(a$):a2=asc(right$(a$,1))
23 ifa1<48ora1>57thenifa1<65ora1>70then30
24 ifa2<48ora2>57thenifa2<65ora2>70then30
25 ifa1>64thena1=a1-55:goto27
26 ifa1<58thena1=a1-48
27 ifa2>64thena2=a2-55:goto29
28 ifa2<58thena2=a2-48
29 a=a1*16+a2:return
30 print"ungueltiger hexcode in zeile"peek(63)+peek(64)*256:end
31 data a0,02,a9,00,85,02,b1,5f
32 data f0,0f,c9,20,d0,03,c8,d0
33 data f5,18,65,02,85,02,4c,6e
34 data e4,c0,04,30,f1,c6,d6,a5
35 data d6,48,a2,03,a9,20,9d,01
36 data 04,bd,b7,e4,20,d2,ff,ca
37 data 10,f2,a6,02,a9,00,20,cd
38 data bd,a9,3e,20,d2,ff,68,85
39 data d6,20,6c,e5,a9,8d,20,d2
40 data ff,4c,80,a4,5c,48,20,c9
41 data ff,aa,68,90,01,8a,60,09
42 data 3c,12,13
0 rem****************
1 rem*              *
2 rem* checksummer  *
3 rem* version vc20 *
4 rem*              *
5 rem*  copyright   *
6 rem* oktober 1984 *
7 rem*              *
8 rem*f. lonczewski *
9 rem****************
10 print"{clr}  {rvon}checksummer  vc-20{rvof}"
11 print"{down} written october 1984    by f. lonczewski"
12 print"{down}einen moment, bitte..."
13 fori=827to993:gosub21:pokei,a
14 ps=ps+a+1:nexti
15 ifps<>20612thenprint"{down}pruefsummenfehler !":end
16 sys955:print"checksummer aktiviert."
17 print"an :sys955"
18 print"{down}aus:sys58459, bei cas-    sette zusaetzlich     run/stop & restore"
19 print"{down}bei aktiviertem check-summer kein";
20 print" cassetten-betrieb (load, save)  erlaubt!":new
21 reada$:iflen(a$)<>2thenprint"tippfehler in zeile"peek(63)+peek(64)*256:end
22 a1=asc(a$):a2=asc(right$(a$,1))
23 ifa1<48ora1>57thenifa1<65ora1>70then30
24 ifa2<48ora2>57thenifa2<65ora2>70then30
25 ifa1>64thena1=a1-55:goto27
26 ifa1<58thena1=a1-48
27 ifa2>64thena2=a2-55:goto29
28 ifa2<58thena2=a2-48
29 a=a1*16+a2:return
30 print"ungueltiger hexcode in zeile"peek(63)+peek(64)*256:end
31 data 20,5f,03,86,7a,84,7b,20
32 data 73,00,aa,f0,f3,a2,ff,86
33 data 3a,90,0a,a2,00,86,ff,20
34 data 79,c5,4c,e1,c7,a2,01,86
35 data ff,4c,9c,c4,a6,ff,e0,01
36 data f0,03,4c,60,c5,a0,02,a9
37 data 00,85,fe,b1,5f,f0,0f,c9
38 data 20,d0,03,c8,d0,f5,18,65
39 data fe,85,fe,4c,76,03,c0,04
40 data 30,f1,c6,d6,a5,d6,48,a2
41 data 03,a9,20,9d,01,04,bd,b7
42 data 03,20,d2,ff,ca,10,f2,a6
43 data fe,a9,00,20,cd,dd,a9,3e
44 data 20,d2,ff,68,85,d6,20,87
45 data e5,a9,8d,20,d2,ff,a2,00
46 data 86,ff,f0,ae,09,3c,12,13
47 data a9,3b,8d,02,03,a9,03,8d
48 data 03,03,a5,ba,c9,01,d0,10
49 data a9,74,8d,30,03,8d,32,03
50 data a9,c4,8d,31,03,8d,33,03
51 data ad,88,02,8d,90,03,60
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →