C 64
Toolkit

Toolkit für Programmierer

Nicht jeder kann sich professionelle Toolkits wie zum Beispiel Ex-Basic Level II leisten. Dieses Programm hat deshalb einige der wichtigsten Funktionen, die das Programmieren sehr erleichtern.

Dieses Programm für den Commodore 64 bietet 8 leistungsfähige Befehle und 2 zusätzliche Funktionen, die bei der Programmerstellung und beim Austesten von Programmen besonders nützlich sind. Hier die Erklärung zu den einzelnen Befehlen:

!AUTO X,Y

Dieser Befehl erspart Ihnen das Eintippen der Zeilennummern. Mit X geben Sie die Anfangszeilennummer ein. Mit Y die Schrittweite, um welcher die Zeilennummern erhöht werden sollen. X kann eine positive Integerzahl sein. Y kann im Bereich von 0-255 liegen. Wenn Sie den AUTO-Befehl eingetippt haben, erscheint nach Drücken der C= Taste zusammen mit der Taste F7 die erste Zeilennummer. Schreiben Sie nun Befehle hinter die Zeilennummer und schließen Sie mit RETURN ab. Wenn Sie nun wieder die Taste C= und F7 drücken, erscheint eine um Y erhöhte Zeilennummer. Abgeschaltet wir die AUTO-Funktion mit der C= Taste zusammen mit F1. Außerdem wird diese Funktion abgeschaltet, wenn Sie RUN/STOP und RESTORE drücken.

!DUMP

Damit können Sie sich sämtliche Variablen mit ihrem aktuellen Inhalt ansehen. Indizierte Variablen werden nicht mit ausgegeben. Das Auflisten der Variableninhalte kann mit der CTRL-Taste verlangsamt, oder mit der STOP-Taste abgebrochen werden.

!FIND

Hierbei muß unterschieden werden zwischen dem Suchen in Zeichenketten und dem Suchen von Befehlen und Variablen. Zum Beispiel: »!FIND "TEST"«; »!FIND GOTO1000« oder »! FIND A$«. Es werden jeweils die kompletten Zeilen gelistet in denen der Suchbegriff vorkommt. Dieser Vorgang kann wie bei dem DUMP -Befehl mit der CTRL-Taste verlangsamt oder mit STOP ganz abgebrochen werden.

!KILL

Löscht statt einzelne Zeilen ganze Zeilenblöcke.
Beispiel:
!KILL 100-200 — löscht die Zeilen 100 bis einschließlich 200.
!KILL -300 — löscht die Zeilen vom Programmanfang bis einschließlich 300.
!KILL 1800- — löscht die Zeilen ab 1800 bis zum Programmende.

Bei diesem Befehl muß folgendes beachtet werden:

Die erste Zeilennummer muß kleiner als die Endzeilennummer sein. Weiter ist notwendig, daß die Anfangszeilennummer im Programm existiert. Andernfalls kommt die Fehlermeldung ’SYNTAX ERROR’. Bei umfangreicheren Zeilenblöcken dauert die Ausführung dieses Befehls eine Weile. Mit der Taste ’F7’ kann das Löschen von Zeilenblöcken abgebrochen weden.

!LOAD

Dieser Befehl hängt an einem im Speicher befindlichen Programm ein weiteres an. Die Syntax ist wie bei dem LOAD-Befehl. Es ist vorteilhaft, wenn das nachzuladende Programm höhere Zeilennummern hat, aber nicht unbedingt notwendig. Sie haben ja mit dem RENUM-Befehl die Möglichkeit das Programm neu zu numerieren. Nur bei gleichen Zeilennummern kann es zu Fehlern beim Umnumerieren der Sprungbefehle kommen.

!RENUM

Hiermit numerieren sie Ihr Programm mit einer von Ihnen angegebenen Schrittweite neu durch. Sie haben bei diesem Befehl mehrere Möglichkeiten.
!RENUM — ohne weitere Parameter numeriert das komplette Programm in Zehnerschritten durch. Die erste Zeilennummer ist 10.
!RENUM X,Y — Hierbei ist X die erste neue Zeile und Y die Schrittweite.
!RENUM X,Y,Z — Damit numerieren Sie nicht das komplette Programm neu, sondern ab der Zeile die in Z angegeben ist. Z muß dabei kleiner als X sein. Als Parameter werden jeweils positive Integerzahlen erwartet. Selbstverständlich werden sämtliche Sprungbefehle (GOTO, GOSUB, THEN, ON X GOTO (GOSUB), RUN) mit umnumeriert.

!TRACE

Damit können Sie ein Programm schrittweise abarbeiten. Nachdem Sie !TRACE eingegeben und ein Programm mit RUN gestartet haben, wird in den oberen beiden Zeilen des Bildschirms die Zeile gelistet, die gerade bearbeitet wird. DamitSie sehen, welcher Befehl in dieser Zeile gerade ausgeführt wird, wird dieser revers dargestellt. Zur Steuerung der TRACE-Funktion stehen Ihnen die Tasten F1 und F7 zur Verfügung. Mit F1 wird ein schneller Trace ausgeführt. Mit F7 wird immer nur der nächste Befehl bearbeitet. Verlassen können Sie die TRACE-Funktion, wenn Sie beim schnellen Trace die STOP-Taste drücken.

!OFF

schaltet die TRACE-Funktion aus.

Sämtliche Befehle können auch innerhalb eines Programms benutzt werden. Sinnvoll ist dies aber wohl nur bei ’DUMP, ’TRACE und !OFF. Zu den zwei zusätzlichen Funktionen:

  1. Trifft der Computer während des Programmlaufs auf einen Fehler, so wird automatisch die fehlerhafte Zeile gelistet. Der Cursor steht direkt unter der fehlerhaften Zeile.
  2. Beim Listen eines Programms können Sie den Listvorgang mit der Taste F7 anhalten. Sie können sich Ihr Listing nun in Ruhe betrachten. Soll der Listvorgang fortgeführt werden, so drücken Sie die SPACE-Taste. Ein mit der Taste F7 angehaltenes Listing kann mit der Taste F1 unterbrochen werden. Die STOP-Taste steht hierfür nicht zur Verfügung. Bei der Taste F1 wird BREAK und READY (wie es bei der STOP-Taste der Fall ist) nicht mit ausgegeben. Sie haben so mehr Platz für Ihr Listing. Zu dem Programm selbst. Es steht in dem Bereich ab Speicherstelle 49152. Dieser Bereich wird vom Basic nicht benutzt. Aktiviert wird das Programm mit SYS 51100. Wollen Sie ein anderes Programm in diesem Bereich nutzen, so müssen Sie das Toolkit abschalten. Dies erreichen Sie mit einem System-Reset (SYS 64738).

Nach erfolgreichem Eintippen sollten Sie das Programm (Bild 1) mit einem Maschinensprachenmonitor speichern. Die Ladezeit verringert sich dadurch erheblich. Besitzen Sie keinen solchen Monitor, so benutzen Sie das kurze Programm in Bild 2.

(Herbert Kunz / gk)
10 rem  *****************************
20 rem
30 rem     tool-kit fuer  c= 64
40 rem
50 rem     (c)  herbert kunz
60 rem          fimbergstr. 28
70 rem
80 rem          3163 sehnde 1
90 rem
98 rem  *****************************
99 rem
100 rem   *****   block 1   *****
101 data32,32,32,32,32,32,32,32,32,32
102 data32,42,42,42,32,84,79,79,76,45
103 data75,73,84,32,42,42,42,13,32,32
104 data32,32,32,32,32,32,32,32,32,40
105 data67,41,32,72,46,32,75,85,78,90
106 data32,49,57,56,52,32,32,84,82,65
107 data67,69,35,68,85,77,80,35,35,79
108 data70,70,35,35,35,70,73,78,68,35
109 data35,82,69,78,85,77,35,65,85,164
110 data35,35,35,75,73,76,76,35,0,193
111 data58,194,11,193,146,195,123,197
112 data250,194,109,196,32,68,229,162
113 data255,232,189,16,192,32,210,255
114 data224,55,208,245,169,155,141,8
115 data3,169,192,141,9,3,96,32,115
116 data0,201,33,240,6,32,121,0,76,231
117 data167,169,73,133,80,169,192,133
118 data81,160,0,140,7,192,76,98,200
119 data209,80,240,17,170,152,24,105
120 data6,201,42,240,20,238,7,192,168
121 data138,76,184,192,200,177,80,201
122 data35,240,10,32,115,0,209,80,240
123 data242,76,8,175,173,7,192,10,170
124 data189,114,192,141,241,192,232
125 data189,114,192,141,242,192,32,146
126 data195,76,132,195,234,234,234,234
127 data234,234,234,234,234,234,169
128 data22,141,8,3,169,193,141,9,3,96
129 data169,155,141,8,3,169,192,141
130 data9,3,96,165,157,240,3,76,155
131 data192,165,122,141,0,192,165,123
132 data141,1
133 s=0:fori= 49168 to 49445 :readd
134 poke i,d:s=s+d:next
135 ifs<>29085thenprint"fehler in bl. 1":stop
200 rem   *****   block 2   *****
201 data192,165,211,141,2,192,165,214
202 data141,3,192,32,135,234,165,203
203 data201,3,208,20,32,135,234,165
204 data203,201,64,208,247,169,0,141
205 data232,7,32,121,193,76,95,193,201
206 data4,208,5,169,1,141,232,7,173
207 data232,7,240,213,32,121,193,173
208 data0,192,133,122,173,1,192,133
209 data123,173,2,192,133,211,173,3
210 data192,133,214,32,108,229,76,155
211 data192,169,0,133,15,165,57,133
212 data20,133,99,165,58,133,21,133
213 data98,32,19,166,169,80,141,4,192
214 data32,102,229,169,32,32,210,255
215 data206,4,192,173,4,192,208,243
216 data32,102,229,32,209,189,160,3
217 data169,32,132,73,32,210,255,164
218 data73,177,95,201,34,208,6,165,15
219 data73,255,133,15,200,132,73,177
220 data95,208,1,96,201,255,240,227
221 data36,15,48,223,165,73,56,233,1
222 data24,101,95,141,5,192,176,8,165
223 data96,141,6,192,76,235,193,165
224 data96,24,105,1,141,6,192,173,5
225 data192,205,0,192,208,13,173,6,192
226 data205,1,192,208,5,169,18,32,210
227 data255,164,73,177,95,16,38,56,233
228 data127,170,160,255,202,240,8,200
229 data185,158,160,16,250,48,245,200
230 data185,158,160,48,5,32,210,255
231 data208,245,41,127,32,210,255,169
232 data146,76,173,193,165,15,240,5
233 data177,95,76,36,194,177,95,76,173
234 data193,165,45
235 s=0:fori= 49446 to 49723 :readd
236 poke i,d:s=s+d:next
237 ifs<>35613thenprint"fehler in bl. 2":stop
300 rem   *****   block 3   *****
301 data164,46,133,20,132,21,196,48
302 data208,2,197,47,176,24,105,2,144
303 data1,200,133,34,132,35,32,128,194
304 data32,180,194,138,16,7,32,189,194
305 data76,111,194,96,152,48,6,32,205
306 data194,76,111,194,32,214,194,169
307 data13,32,145,200,165,20,164,21
308 data24,105,7,144,193,200,176,190
309 data160,0,177,20,170,41,127,32,210
310 data255,200,177,20,168,41,127,240
311 data3,32,210,255,138,16,17,152,48
312 data10,169,64,32,210,255,104,104
313 data76,111,194,169,37,208,78,152
314 data16,4,169,36,208,71,96,32,210
315 data255,169,32,32,210,255,169,61
316 data208,58,160,0,177,34,170,200
317 data177,34,168,138,32,149,179,76
318 data208,194,32,166,187,32,221,189
319 data76,30,171,32,245,194,160,2,177
320 data34,133,37,136,177,34,133,36
321 data136,177,34,133,38,240,10,177
322 data36,32,210,255,200,196,38,208
323 data246,169,34,76,210,255,32,115
324 data0,32,235,183,142,235,7,165,20
325 data166,21,141,233,7,142,234,7,120
326 data169,26,162,195,141,20,3,142
327 data21,3,88,96,173,138,2,141,10
328 data192,169,64,141,138,2,32,135
329 data234,173,141,2,201,2,240,9,169
330 data0,234,141,138,2,76,49,234,165
331 data203,201,3,240,7,201,4,240,38
332 data76,47,195,32,122,195,173,234
333 data7,174,233,7,32,205,189,169
334 s=0:fori= 49724 to 50001 :readd
335 poke i,d:s=s+d:next
336 ifs<>32656thenprint"fehler in bl. 3":stop
400 rem   *****   block 4   *****
401 data29,32,210,255,173,233,7,24,109
402 data235,7,141,233,7,144,3,238,234
403 data7,76,47,195,32,122,195,120,169
404 data49,162,234,141,20,3,142,21,3
405 data88,76,47,195,32,135,234,165
406 data203,201,64,208,247,96,169,2
407 data56,237,7,192,144,3,32,115,0
408 data76,174,167,32,115,0,240,125
409 data201,34,240,17,162,0,142,3,192
410 data157,0,207,32,115,0,240,35,232
411 data76,160,195,160,1,140,3,192,162
412 data255,177,122,201,34,240,8,200
413 data232,157,0,207,76,179,195,32
414 data115,0,201,34,208,249,76,163
415 data195,232,169,0,157,0,207,160
416 data0,177,43,141,0,192,200,177,43
417 data141,1,192,165,43,133,95,165
418 data44,133,96,76,96,196,173,3,192
419 data141,2,192,160,0,177,95,141,0
420 data192,200,177,95,141,1,192,173
421 data0,192,133,95,173,1,192,133,96
422 data32,208,248,160,0,177,95,208
423 data6,200,177,95,208,1,96,160,3
424 data162,0,200,177,95,240,203,201
425 data34,208,8,169,1,77,2,192,141
426 data2,192,173,2,192,208,232,177
427 data95,221,0,207,208,225,232,189
428 data0,207,240,3,76,25,196,160,0
429 data132,15,200,200,177,95,133,20
430 data133,99,200,177,95,133,21,133
431 data98,169,13,32,210,255,32,19,166
432 data32,164,193,76,233,195,173,3
433 data192,141,2,192,76,6,196,234
434 s=0:fori= 50002 to 50281 :readd
435 poke i,d:s=s+d:next
436 ifs<>34230thenprint"fehler in bl. 4":stop
500 rem   *****   block 5   *****
501 data76,8,175,32,115,0,240,248,201
502 data171,208,19,160,2,177,43,141
503 data0,192,200,177,43,141,1,192,32
504 data115,0,76,159,196,32,107,169
505 data166,20,142,0,192,166,21,142
506 data1,192,201,171,208,208,32,115
507 data0,240,16,32,107,169,165,20,141
508 data2,192,165,21,141,3,192,76,183
509 data196,169,254,141,2,192,141,3
510 data192,173,3,192,56,237,1,192,144
511 data170,208,11,173,2,192,56,237
512 data0,192,144,159,240,157,173,0
513 data192,133,20,173,1,192,133,21
514 data32,19,166,144,142,169,233,141
515 data2,3,169,196,141,3,3,76,10,197
516 data173,3,192,56,237,1,192,144,11
517 data208,22,173,2,192,56,237,0,192
518 data176,13,169,131,162,164,141,2
519 data3,142,3,3,76,134,227,173,0,192
520 data133,20,173,1,192,133,21,32,19
521 data166,160,0,177,95,133,247,200
522 data177,95,133,248,177,247,208,8
523 data169,255,141,1,192,76,59,197
524 data160,2,177,247,141,0,192,200
525 data177,247,141,1,192,32,135,234
526 data165,203,201,3,240,185,160,2
527 data177,95,133,99,200,177,95,133
528 data98,162,144,56,32,73,188,32,223
529 data189,32,135,180,32,166,182,170
530 data160,0,232,202,240,10,177,34
531 data153,0,2,200,201,13,208,243,169
532 data0,153,0,2,162,255,160,1,76,134
533 data164
534 s=0:fori= 50282 to 50554 :readd
535 poke i,d:s=s+d:next
536 ifs<>33081thenprint"fehler in bl. 5":stop
600 rem   *****   block 6   *****
601 data32,115,0,240,64,32,107,169,165
602 data20,166,21,133,61,134,62,32,253
603 data174,32,107,169,165,20,166,21
604 data133,63,134,64,160,0,169,44,209
605 data122,208,17,32,253,174,32,107
606 data169,165,20,166,21,133,65,134
607 data66,76,207,197,160,2,177,43,133
608 data65,200,177,43,133,66,76,220
609 data197,169,10,133,61,133,63,169
610 data0,133,62,133,64,76,178,197,165
611 data61,197,65,165,62,229,66,176
612 data3,76,113,199,32,117,199,160
613 data1,177,67,240,56,169,255,133
614 data20,133,21,32,50,199,32,142,166
615 data76,41,198,160,0,177,67,170,200
616 data177,67,240,31,72,200,165,61
617 data145,67,200,165,62,145,67,134
618 data67,104,133,68,165,61,24,101
619 data63,133,61,165,62,101,64,133
620 data62,144,215,32,96,166,76,134
621 data227,230,122,208,2,230,123,160
622 data0,177,122,208,19,160,2,177,122
623 data240,191,165,122,24,105,5,133
624 data122,144,235,230,123,176,231
625 data201,34,208,11,32,115,0,201,0
626 data240,226,201,34,208,245,201,137
627 data240,23,201,141,240,19,201,167
628 data240,15,201,138,240,11,201,203
629 data208,190,32,115,0,201,164,208
630 data191,32,115,0,176,186,132,20
631 data132,21,233,47,144,51,170,165
632 data21,133,34,201,25,176,237,165
633 data20,10,38,34,10,38
634 s=0:fori= 50555 to 50824 :readd
635 poke i,d:s=s+d:next
636 ifs<>32153thenprint"fehler in bl. 6":stop
700 rem   *****   block 7   *****
701 data34,101,20,133,20,165,34,101
702 data21,133,21,6,20,38,21,138,101
703 data20,133,20,144,2,230,21,200,177
704 data122,201,32,240,249,201,58,144
705 data201,165,20,197,65,165,21,229
706 data66,144,62,132,206,32,50,199
707 data56,162,144,32,73,188,32,221
708 data189,160,255,200,185,1,1,208
709 data250,165,122,133,95,165,123,133
710 data96,56,152,229,206,48,28,240
711 data54,133,206,165,45,133,90,24
712 data101,206,133,88,165,46,133,91
713 data105,0,133,89,32,184,163,240
714 data30,144,48,73,255,168,200,162
715 data0,165,95,197,45,165,96,229,46
716 data176,12,177,95,129,95,230,95
717 data208,238,230,96,208,234,160,0
718 data185,1,1,240,5,145,122,200,208
719 data246,32,117,199,32,115,0,144
720 data251,160,0,201,44,208,2,169,137
721 data170,76,45,198,165,61,166,62
722 data133,99,134,98,165,67,166,68
723 data133,34,134,35,160,2,177,34,197
724 data20,200,177,34,229,21,176,37
725 data160,0,177,34,170,200,177,34
726 data134,34,133,35,177,34,240,21
727 data165,99,101,63,133,99,165,98
728 data101,64,133,98,176,4,201,250
729 data144,209,76,72,178,96,32,51,165
730 data24,165,34,105,2,133,45,165,35
731 data105,0,133,46,165,65,166,66,133
732 data20,134,21,32,19,166,165,95,133
733 data67,134,68,96
734 s=0:fori= 50825 to 51094 :readd
735 poke i,d:s=s+d:next
736 ifs<>31170thenprint"fehler in bl. 7":stop
800 rem   *****   block 8   *****
801 data169,179,141,0,3,169,199,141
802 data1,3,169,37,141,6,3,169,200,141
803 data7,3,76,128,192,138,16,3,76,116
804 data164,234,138,10,170,189,38,163
805 data133,34,189,39,163,133,35,32
806 data204,255,169,0,133,19,32,215
807 data170,32,69,171,160,0,177,34,72
808 data41,127,32,71,171,200,104,16
809 data244,32,122,166,169,105,160,163
810 data32,30,171,164,58,200,240,3,32
811 data194,189,169,118,160,163,32,30
812 data171,165,157,240,8,169,128,32
813 data144,255,76,128,164,165,57,166
814 data58,133,20,133,99,134,21,134
815 data98,32,19,166,169,0,133,15,32
816 data164,193,169,13,32,210,255,76
817 data255,199,141,15,192,140,14,192
818 data165,145,141,9,192,32,135,234
819 data165,203,201,3,240,14,172,14
820 data192,173,9,192,133,145,173,15
821 data192,76,26,167,32,135,234,165
822 data203,201,4,240,10,201,60,208
823 data243,169,0,133,198,240,223,169
824 data13,32,210,255,76,128,164,32
825 data115,0,201,147,240,3,76,184,192
826 data164,46,165,45,56,233,2,176,1
827 data136,140,1,192,141,0,192,169
828 data0,133,10,32,115,0,32,212,225
829 data165,10,174,0,192,172,1,192,76
830 data117,225,32,210,255,76,208,248
831 s=0:fori= 51100 to 51350 :readd
832 poke i,d:s=s+d:next
833 ifs<>29856thenprint"fehler in bl.8":stop
840 :
845 :
850 sys51100:rem tool-kit aktivieren
Bild 1. Der Basic-Lader erzeugt das Toolkit. Speichern Sie dieses Programm sicherheitshalber vor dem RUN ab. Nach dem Start benutzen Sie das Programm in Bild 2, um den Maschinencode zu speichern.
5 remtool-kit
10 poke183,8:rem laenge des filenamens
20 poke185,0:rem sekundaeradresse
30 poke186,0:rem geraeteadresse (8 fuer floppy)
40 poke187,peek(43)+5:poke188,peek(44):rem zeiger auf filenamen
50 poke193,16:poke194,192:rem hi- und low byte startadresse
60 poke174,151:poke175,200:rem hi- und low byte endadresse +1
70 sys62954:rem zur save - routine
80 rem laden mit load"tool-kit",1,1 (,8,1 fuer floppy)
90 rem nach dem laden new eingeben
95 rem dann mit sys 51100 tool-kit aktivieren
Bild 2. Nach erfolgreichem Abtippen und Start des Basic-Laders können Sie das Toolkit mit diesem Programm abspeichern.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →