Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| tiny:es40:basic_debug [2022/08/04 06:37] – gelöscht - Externe Bearbeitung (Unknown date) 127.0.0.1 | tiny:es40:basic_debug [2022/08/04 06:37] (aktuell) – ↷ Seite von tiny:basic_debug nach tiny:es40:basic_debug verschoben volkerp | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== BASIC/DEBUG für ES4.0 ====== | ||
| + | |||
| + | BASIC/DEBUG ist ein kleines (nur 2048 Byte!) und extrem leistungsfähiges TINY-BASIC. | ||
| + | Es umfasst ein Basic mit Editor/ | ||
| + | |||
| + | Das Original ist im ROM des [[elektronik: | ||
| + | |||
| + | angepasst an Tiny ES4.0, V. Pohlers Nov. 2021: | ||
| + | * Speicherbereich 8000-87FF, Start auf 8000h | ||
| + | * USR-Funktionen zum Laden/ | ||
| + | * neue Funktion RND(n) | ||
| + | |||
| + | ===== Download ===== | ||
| + | |||
| + | * {{ : | ||
| + | ===== Beschreibung ===== | ||
| + | |||
| + | siehe das sehr gute Handbuch von Zilog {{ : | ||
| + | Das meiste daraus auf deutsch steht hier [[elektronik: | ||
| + | |||
| + | Der abw. Adressbereich und abw. Fehlernummern (s.u.) sind zu beachten! | ||
| + | |||
| + | Nach dem Start (auf Adr. 8000h) wir ein Autostart-Programm gesucht. Wird kein Programm auf Adresse 9020h gefunden, sendet das BASIC/DEBUG des Z8671 einen ':' | ||
| + | < | ||
| + | :10 PRINT "HALLO TINY" | ||
| + | :LIST | ||
| + | :RUN | ||
| + | </ | ||
| + | ===== Erweiterungen/ | ||
| + | |||
| + | **Laden und Speichern** erfolgt über USR-Funktionen: | ||
| + | LOAD: | ||
| + | SAVE: | ||
| + | |||
| + | Die Funktion **RND**(n) liefert eine Zufallszahl zwischen 0 und n-1. | ||
| + | A=RND(88) | ||
| + | Achtung: Es wird die RND-Funktion des ES4.0 genutzt. Diese überschreibt leider die Register %70..%77, genau den Bereich, den BASIC/DEBUG intern für den expression stack benötigt. RND darf deshalb nicht in zu tief verschachtelten Funktionen genutzt werden, möglichst nur per Direktzuweisung an Variablen. | ||
| + | 10 A=1+2*(0+0*(0+0*(RND(88)+1))) | ||
| + | ist daher nicht zulässig und produziert fehlerhafte Ergebnisse. | ||
| + | |||
| + | **Speicherbereiche** | ||
| + | Programm 8000-87FF | ||
| + | Autostart-ROM-Basic-Programm ab 9020h | ||
| + | Basic-Programm | ||
| + | |||
| + | Der **Basic-Beginn** kann geändert werden (Reg8+9), z.B. | ||
| + | PRINT HEX(^8) : REM Anzeige Inhalt Doppelregister %8,9 | ||
| + | LET ^8=%A000 : neuer Basic-Beginn auf A000h | ||
| + | Hinweis: Das Ende sollte dann auch geändert werden: ^4=Endadr+20h (oder größer), sonst kein insert/ | ||
| + | |||
| + | **RENEW**, stellt nach Neustart das Programm wieder her: | ||
| + | ^^8=1 (setzt erste Zeilennummer von FFFF auf 1) | ||
| + | |||
| + | **Beenden** mit Reset oder | ||
| + | GO@0 | ||
| + | | ||
| + | USR-Funktionen zur **Einzelzeichen-Ein- und -Ausgabe** | ||
| + | input | ||
| + | output | ||
| + | |||
| + | **CLS** | ||
| + | LET X=USR(%805E, | ||
| + | |||
| + | **JTC-Emu**-Hinweis: | ||
| + | |||
| + | jtc-Dateien laden, dann Endadr+20h (oder größer) nach %4,5, sonst kein insert/ | ||
| + | ^4=%89FF | ||
| + | |||
| + | ===== Beispiele ===== | ||
| + | |||
| + | **LIST** innerhalb Programm zur Textausgabe (aus Z8671 BASIC/DEBUG Manual) | ||
| + | |||
| + | < | ||
| + | 100 REM THIS PROGRAM PRINTS A MESSAGE N TIMES | ||
| + | 110 IF N>0 THEN 200 | ||
| + | 120 : PRINT "HOW MANY TIMES"; | ||
| + | 130 : INPUT N | ||
| + | 200 REM BEGIN LOOP | ||
| + | 210 : LET N=N-1 | ||
| + | 220 : LIST 1000, 1070 | ||
| + | 230 : IF N>0 THEN 210 | ||
| + | 240 STOP | ||
| + | 1000| This is a message saved in memory. | ||
| + | 1010|printed when the program is RUN. If you tried to | ||
| + | 1020|execute lines 1000 to 1070 you would get an error | ||
| + | 1030|message. | ||
| + | 1040|executed, | ||
| + | 1050| | ||
| + | 1060| (Signed) | ||
| + | 1070| | ||
| + | </ | ||
| + | |||
| + | **MASTERMIND**, | ||
| + | |||
| + | * Einsatz der zusätzlichen Funktion RND | ||
| + | * ^10+2 = YY22 Pointer auf Variable A. Durch Direktzugriff im Speicher kann auf die Variablen A..D,E..H indiziert zugegriffen werden, es sind Schleifen möglich. (als Array-Ersatz) | ||
| + | * THEN, LET, PRINT vor "", | ||
| + | * " | ||
| + | |||
| + | < | ||
| + | 10 REM MASTERMIND | ||
| + | 40 A=RND(10): | ||
| + | 50 "": | ||
| + | 100 "GUESS ",:IN E,F,G,H | ||
| + | 110 I=I+1 | ||
| + | 300 J=^10+2: | ||
| + | 301 L=0 | ||
| + | 302 R=0:P=0 | ||
| + | 310 IF ^J=^K LET P=P+1 | ||
| + | 320 J=J+2: | ||
| + | 330 J=^10+2: | ||
| + | 331 L=0 | ||
| + | 340 IF ^J=^K LET R=R+1: | ||
| + | 341 J=J+2 | ||
| + | 350 L=L+1: IF 4>L GOTO 340 | ||
| + | 351 J=^10+2 | ||
| + | 352 L=0 | ||
| + | 360 K=K+2:IF ^10+17>K GOTO 340 | ||
| + | 363 J=^10+2: | ||
| + | 366 IF ^J>9 LET ^J=^J-10 | ||
| + | 367 J=J+2 | ||
| + | 368 IF ^10+9>J GOTO 366 | ||
| + | 369 Y=1:N=0 | ||
| + | 370 "RIGHT "; | ||
| + | 380 IF 4>P GOTO 100 | ||
| + | 390 X=0:Y=1 | ||
| + | 400 "RIGHT IN "; | ||
| + | 410 IF X=Y GOTO 10 | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Fehlermeldungen ===== | ||
| + | |||
| + | Durch die erweiterte IL verschieben sich die Fehlernummern gegenüber dem Original: | ||
| + | |||
| + | < | ||
| + | 11 Program line has a line number 0 or greater than 32768. | ||
| + | 17 Memory full; new line not inserted. | ||
| + | 27 No program to RUN. | ||
| + | 38 GOTO is not at the end of program line. | ||
| + | 42 Cannot GOTO negative or zero line number. | ||
| + | 45 Line number in GOTO does not exist. | ||
| + | 67 GOSUB is not at the end of the line. | ||
| + | 72 Unrecognizable statement type beginning with GO. | ||
| + | 82 Unrecognizable statement type, or ' | ||
| + | 100 LET is missing its ' | ||
| + | 142 Quote missing in PRINT statement. | ||
| + | 173 RETURN is not at the end of the line. | ||
| + | 174 GOSUB stack underflow. | ||
| + | 177 The GOSUB for this RETURN no longer exists. | ||
| + | 183 STOP is not at the end of the line. | ||
| + | 209 INPUT variable name is missing. | ||
| + | 212 IN or INPUT expects variable name. | ||
| + | 250 LIST is not at end of line. | ||
| + | 313 Unrecognizable relation in IF statement. | ||
| + | 349 Out of memory on GOSUB or expression evaluation. | ||
| + | 384 Divide by zero. | ||
| + | 394 Missing parenthesis in AND, RND or USR call. | ||
| + | 441 Syntax error in expression, or unrecognizable statement type. | ||
| + | 445 Missing right parenthesis in expression. | ||
| + | </ | ||
| + | |||