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:
- 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.
- 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
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