Neuer Checksummer 64 — blitzschnell und kürzer
Das Programm Checksummer kennen die meisten unserer Leser bereits aus dem 64’er Sonderheft und den Ausgaben 1 und 2/85. Der Checksummer überprüft jede eingegebene Basic-Zeile und erspart Ihnen deshalb eine langwierige Fehlersuche. Und neu ist der Checksummer, weil die Initialisierung zirka einhundertmal schneller vonstatten geht als bei der alten Version.
Es gab eine riesige Resonanz auf den Checksummer und zwar ausschließlich positiv. Jedoch brauchte das Programm eine ganze Weile, bis es initialisiert war, eine Herausforderung für eine Unmenge von Lesern! Der nebenstehende Leserbrief setzt sich drastisch, aber nicht ganz so ernst gemeint, mit diesem Problem auseinander und gibt eine Lösung, die zirka einhundertmal schneller ist als die bisherige Version. Dieser Brief und der neue, schnelle Checksummer steht übrigens für eine ganze Reihe von Leserzuschriften, die auch entsprechende Verbesserungen eingeschickt haben.
Der Checksummer 64 ist ein kleines Maschinenprogramm, das, wenn es aktiviert ist, Sie sofort davon unterrichtet, ob Sie die jeweilige Programmzeile korrekt eingegeben haben.
- 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.
- Vergessen Sie nicht das Abspeichern vor dem Start (RUN)!
- Wenn Sie den Checksummer 64 zwischenzeitlich nicht benutzen, können Sie ihnjederzeit mit »POKE 1,55« desaktivieren. Auch durch Drücken der Run-Stop- und der Restore-Taste wird der Checksummer 64 desaktiviert.
Wollen Sie den Checksummer 64 wieder einschalten, so geben Sie bitte »POKE 1,53« ein.
Das Maschinenporgramm bleibt solange erhalten, bis der Computer ausgeschaltet, oder, wenn von anderen Programmen auf das hinter dem ROM liegende RAM zugegriffen wird.
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 Zeile in < und > stehende Prü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, daß es egal ist, wieviel Leerzeichen Sie zwischen den Worten lassen, da Sie für den Programmablauf ohnehin keine Bedeutung haben.
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 geschweiften Klammern gesetzt.
Tritt mehrmals hintereinander dasselbe Steuerzeichen auf, so wird diese Steuerzeichen-Sequenz zusammengefaßt, indem zuerst die Anzahl der Wiederholungen dieses Steuerzeichens und dann das Steuerzeichen 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« (nur im abgedruckten Listing). 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.
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äßig 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 VC20:
- Da der Basic-Bereich nicht belegt werden soll, ist das Programm im Kassettenpuffer abgelegt.
- Angeschaltet wird der Checksummer VC 20 mit »SYS 955« und abgeschaltet mit »SYS 58459«.
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.
- Bei Benutzung einer Diskettenstation brauchen Sie nicht darauf zu achten, daß bei LOAD beziehungsweise SAVE der Checksummer VC 20 überschrieben wird, da der Kassettenpuffer für die Diskettenstation normalerweise nicht genutzt wird. Deshalb können Sie die beiden Routinen weiterhin normal nutzen, sofern der Rechner bei der Initialisierung des Checksummer VC 20 feststellt, daß das zuletzt angesprochene Peripherie-Gerät nicht der Kassettenrecorder war.
- Bedingt durch den anderen Aufbau des Checksummer VC 20 wird anders als beim Checksummer 64 nach der LOAD-Routine keine Checksumme ausgegeben.
- Wird eine Zeile gelöscht, also eine Zahl zwischen 0 und 63999 eingegeben, und danach Return gedrückt, so wird eine Checksumme ausgegeben, die aber keine Bedeutung hat.
Viel Spaß beim Eintippen von Programmen mit dem neuen Checksummer!
(F. Lonczewski/gk)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. |
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
10 rem ******************************* 20 rem * * 30 rem * checksummer 64 * 33 rem * * 36 rem * (version 2.0) * 40 rem * * 50 rem * 64'er * 60 rem * * 70 rem * commodore 64 * 80 rem * * 90 rem ******************************* 100 print"{clr} {rvon}checksummer 64{rvof}" 110 print 121 sa=820:fori=satosa+6:reada:pokei,a:nexti 122 data133,95,134,96,76,191,163 130 poke88,0:poke89,192:poke90,0:poke91,192:poke780,0:poke781,160:syssa 140 poke88,0:poke89,0:poke90,0:poke91,0:poke780,0:poke781,224:syssa 150 poke1,53:poke42289,96:poke42290,228 160 fori=58464to58554:reada:pokei,a:nexti 190 print"{down}{down}{down}{down} checksummer aktiviert." 200 print"{down}{down}ausschalten : poke1,55" 210 print"{down}anschalten : poke1,53":new 320 data160,2,169,0,133,2,177,95 330 data240,15,201,32,208,3,200,208 340 data245,24,101,2,133,2,76,110 350 data228,192,4,48,241,198,214,165 360 data214,72,162,3,169,32,157,1 370 data4,189,183,228,32,210,255,202 380 data16,242,166,2,169,0,32,205 390 data189,169,62,32,210,255,104,133 400 data214,32,108,229,169,141,32,210 410 data255,76,128,164,92,72,32,201 420 data255,170,104,144,1,138,96,9 430 data60,18,19