Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
elektronik:z8671:basic_debug [2021/11/17 10:49] – angelegt volkerp | elektronik:z8671:basic_debug [2022/08/04 06:37] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden volkerp | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
BASIC/DEBUG ist eine Tiny-BASIC-Implementierung für den Z8. Entstanden ist sie vermutlich 1979/ | BASIC/DEBUG ist eine Tiny-BASIC-Implementierung für den Z8. Entstanden ist sie vermutlich 1979/ | ||
- | In nur 2 KByte ROM steckt ein vollwertiges BASIC mit folgenden Eigenschaften: | + | In nur 2 KByte ROM des [[elektronik: |
* Editor | * Editor | ||
Zeile 11: | Zeile 11: | ||
* Direktzugriff auf Register und Speicher | * Direktzugriff auf Register und Speicher | ||
- | Das BASIC ist im Handbuch | + | Das BASIC ist im Zilog-Handbuch |
Das Basic orientiert sich sehr stark an das TINY-BASIC von Tom Pittman (http:// | Das Basic orientiert sich sehr stark an das TINY-BASIC von Tom Pittman (http:// | ||
Literatur und Programme zu den dort beschriebenen BASICs für 1802, 6502, 6800-Controller passen auch zum BASIC/DEBUG des Z8671. | Literatur und Programme zu den dort beschriebenen BASICs für 1802, 6502, 6800-Controller passen auch zum BASIC/DEBUG des Z8671. | ||
+ | 11/2021: Tom Pittman hat mir bestätigt, dass er dieses BASIC Ende der 70er im Auftrag von Zilog programmiert hat. | ||
+ | |||
+ | ===== Downloads ===== | ||
+ | |||
+ | * {{ : | ||
+ | * Z8 assembler source | ||
+ | * IL source + IL Makros | ||
+ | * IL Decompiler (perl) | ||
+ | * {{ : | ||
+ | |||
+ | zur Anpassung an andere Systeme und andere Adressen sowie Erweiterungen s. [[tiny: | ||
===== Aufbau ===== | ===== Aufbau ===== | ||
Zeile 24: | Zeile 35: | ||
Das BASIC selbst ist nur 432 Byte groß. | Das BASIC selbst ist nur 432 Byte groß. | ||
- | In Z8-Code ist der Interpreter für diese Codesprache enthalten sowie Initialisierung und In/ | + | In Z8-Code ist der Interpreter für diese Codesprache enthalten, sowie Initialisierung und In/ |
Diese Art der Implementierung ist extrem speichersparend. Nur so konnten die umfangreichen Fähigkeiten | Diese Art der Implementierung ist extrem speichersparend. Nur so konnten die umfangreichen Fähigkeiten | ||
- | des BASIC/DEBUG in nur 20248 Byte untergebracht werden. | + | des BASIC/DEBUG in nur 2048 Byte untergebracht werden. |
- | Das Zwiebelmodell beschreibt sehr schön den Ablauf: Das BASIC-Anwenderprogramm | + | Das Zwiebelmodell |
wird vom BASIC-Interpreter (in TBIL) interpretiert. Dieser wiederum wird vom TBIL-Interpreter (in Z8-Code) interpretiert, | wird vom BASIC-Interpreter (in TBIL) interpretiert. Dieser wiederum wird vom TBIL-Interpreter (in Z8-Code) interpretiert, | ||
<WRAP clear/> | <WRAP clear/> | ||
Zeile 38: | Zeile 49: | ||
* Autostart eines Programms nach RESET | * Autostart eines Programms nach RESET | ||
* Editierzeichen für DEL, Zeilenende-Zeichenfolge frei vergebbar | * Editierzeichen für DEL, Zeilenende-Zeichenfolge frei vergebbar | ||
- | * eigene I/O-Treiber anstelle der Z8-SIO | + | * eigene I/O-Treiber anstelle |
===== Literatur ===== | ===== Literatur ===== | ||
- | * z8671_basic_debug.pdf von Zilog. (der Hochpfeil in der Doku ist das Zeichen " | + | * {{ : |
+ | * Buch „Mikroprozessoren in der Meß- und Regeltechnik. Funktion - Aufbau und Programmierung“ von Gerhard Ledig, Franzis-Verlag 1988 | ||
- | Literatur zu Tiny-BASIC: | + | weitere |
orig. Scans | orig. Scans | ||
Zeile 59: | Zeile 71: | ||
* The First Book of Tiny BASIC Programs\\ | * The First Book of Tiny BASIC Programs\\ | ||
* Tiny Basic Experimenters Kit\\ | * Tiny Basic Experimenters Kit\\ | ||
- | * Buch „Mikroprozessoren in der Meß- und Regeltechnik. Funktion - Aufbau und Programmierung“ von Gerhard Ledig, Franzis-Verlag 1988 | ||
* originale Scans und Beispiele und weitere Dokumente\\ http:// | * originale Scans und Beispiele und weitere Dokumente\\ http:// | ||
| | ||
Zeile 131: | Zeile 142: | ||
jp xxxx ; IL_1E | jp xxxx ; IL_1E | ||
jr xxxx ; IL_1F 101Eh; | jr xxxx ; IL_1F 101Eh; | ||
+ | |||
+ | ; Basic-Pgm | ||
+ | org 1020h | ||
+ | db 0, | ||
+ | db ... own syntax by own IL ... | ||
+ | db 0ffh, | ||
+ | |||
+ | ; costant block | ||
+ | org 1100h ; must be xxx0-address | ||
+ | db hi(il) ; 0 00650h | ||
+ | db lo(il) ; 1 | ||
+ | db 20h ; 2 stack reserve | ||
+ | db 8 ; 3 backspace code | ||
+ | db 1Bh ; 4 cancel code | ||
+ | db 0Dh ; 5 line separator sequence terminating with 0FEh | ||
+ | db 0Ah ; 6 | ||
+ | db 0FEh ; end of constant block | ||
+ | |||
+ | ; own IL program: | ||
+ | il: ... | ||
</ | </ | ||
+ | Es ist nicht bekannt, ob das für die Entwicklung gedacht war oder ob es erweiterte IL-Programme gibt. | ||
+ | |||
+ | ===== IL Source ===== | ||
+ | |||
+ | Tom Pittman beschreibt in http:// | ||
+ | |||
+ | ^ Code ^ Beschreibung ^ Bemerkungen ^ | ||
+ | | 0A | CC, stop if cancel code | gibt es nicht in TBEK | | ||
+ | | 0B x | LB, push literal byte to TOS | in TBEK 09 | | ||
+ | | 0C x | LN, push addr (00xxh) to TOS | in TBEK 0A.\\ Z8671: Es wird nur das niederwertige Byte genommen. Das höherwertige Byte wird 00 gesetzt. ((Das spart ein paar Bytes, aber schränkt den Code bzgl. Adressen ein. USR-Funktionen müssen im Bereich 00xx liegen)) | | ||
+ | | 0D | DS, duplicate stack top | in TBEK 0B | | ||
+ | | 0E | TS, pop Stack | in TEBEK 0C | | ||
+ | | 0F | TS, test sign; skip next IL if TOS is positive | in TBEK reserviert | | ||
+ | | 19 | reserviert, extern 1018h | in TBEK substract | | ||
+ | | 1E | reserviert, extern 101Bh | in TBEK reserviert | | ||
+ | | 1F | reserviert, extern 101Eh | in TBEK list program | | ||
+ | | 25 | PH, print hex number | ||
+ | | 26 | HN, convert hex number | ||
+ | | 28 | SN, put current line number on stack | in TBEK reserviert | | ||
+ | | 29 | FL, follow line; goto next line | in TBEK reserviert | | ||
+ | |||
+ | < | ||
+ | Z8671 TINY BASIC | ||
+ | reconstructed Volker Pohlers 10/2021, Germany, Neustadt i.H. | ||
+ | |||
+ | ; THE IL CONTROL SECTION | ||
+ | |||
+ | 0650 000: 62 | ||
+ | 0651 001: 7A | ||
+ | 0652 002: 6F | ||
+ | 0653 003: 24 BA | ||
+ | 0655 005: 27 | ||
+ | 0656 006: E1 | ||
+ | 0657 007: 5B | ||
+ | 0658 008: D3 | ||
+ | 0659 009: 0F | ||
+ | 065a 00A: 60 | ||
+ | 065b 00B: 10 | ||
+ | 065c 00C: 0D | ||
+ | 065d 00D: 16 | ||
+ | 065e 00E: 28 | ||
+ | 065f 00F: 0E | ||
+ | 0660 010: 2A | ||
+ | 0661 011: 51 | ||
+ | 0662 012: 10 | ||
+ | 0663 013: 11 | ||
+ | 0664 014: 0C 00 | ||
+ | 0666 016: 16 | ||
+ | 0667 017: 28 | ||
+ | 0668 018: 0F | ||
+ | 0669 019: 60 | ||
+ | 066a 01A: 0E | ||
+ | 066b 01B: 2C | ||
+ | |||
+ | ; STATEMENT EXECUTOR | ||
+ | |||
+ | 066c 01C: 8F 47 CF | ||
+ | 066f 01F: 9B 54 CF BC GOSB " | ||
+ | 0672 022: 35 1C | ||
+ | 0674 024: E0 | ||
+ | 0675 025: 10 | ||
+ | 0676 026: 11 | ||
+ | 0677 027: 0F | ||
+ | 0678 028: 60 | ||
+ | 0679 029: 16 | ||
+ | 067a 02A: 50 | ||
+ | 067b 02B: 60 | ||
+ | 067c 02C: 9D 49 C6 | ||
+ | 067f 02F: 34 E8 | ||
+ | 0681 031: 84 54 48 45 CE BC S2 " | ||
+ | 0686 036: 1C | ||
+ | 0687 037: 1D | ||
+ | 0688 038: C1 | ||
+ | 0689 039: 4A | ||
+ | 068a 03A: 41 | ||
+ | 068b 03B: 89 53 55 C2 | ||
+ | 068f 03F: 34 FF | ||
+ | 0691 041: E0 | ||
+ | 0692 042: 28 | ||
+ | 0693 043: 14 | ||
+ | 0694 044: 54 | ||
+ | 0695 045: 80 C0 | ||
+ | 0697 047: 34 F0 | ||
+ | 0699 049: 7A | ||
+ | 069a 04A: 9B 4C 45 D4 | ||
+ | 069e 04E: A6 | ||
+ | 069f 04F: 80 BD | ||
+ | 06a1 051: 34 ED | ||
+ | 06a3 053: 13 | ||
+ | 06a4 054: 71 | ||
+ | 06a5 055: 84 DE | ||
+ | 06a7 057: 35 25 | ||
+ | 06a9 059: 55 | ||
+ | 06aa 05A: 9A C0 | ||
+ | 06ac 05C: 0C 81 | ||
+ | 06ae 05E: 35 1E | ||
+ | 06b0 060: 80 BD | ||
+ | 06b2 062: 34 DC | ||
+ | 06b4 064: 2E | ||
+ | 06b5 065: 0E | ||
+ | 06b6 066: E1 | ||
+ | 06b7 067: 1D | ||
+ | 06b8 068: 83 BA | ||
+ | 06ba 06A: 3B B0 | ||
+ | 06bc 06C: 82 A2 | ||
+ | 06be 06E: 7B | ||
+ | 06bf 06F: 9D 50 52 49 4E D4 | ||
+ | 06c5 075: 83 BA | ||
+ | 06c7 077: 23 | ||
+ | 06c8 078: 51 | ||
+ | 06c9 079: EE | ||
+ | 06ca 07A: 68 | ||
+ | 06cb 07B: 83 BB | ||
+ | 06cd 07D: E7 | ||
+ | 06ce 07E: 1D | ||
+ | 06cf 07F: 83 AC | ||
+ | 06d1 081: 22 | ||
+ | 06d2 082: 5A | ||
+ | 06d3 083: 23 | ||
+ | 06d4 084: 41 | ||
+ | 06d5 085: 82 BA | ||
+ | 06d7 087: 42 | ||
+ | 06d8 088: 85 A2 | ||
+ | 06da 08A: 21 | ||
+ | 06db 08B: 60 | ||
+ | 06dc 08C: 4E | ||
+ | 06dd 08D: 74 | ||
+ | 06de 08E: 88 48 45 58 A8 | ||
+ | 06e3 093: 35 16 | ||
+ | 06e5 095: 25 | ||
+ | 06e6 096: 44 | ||
+ | 06e7 097: 34 A7 | ||
+ | 06e9 099: 17 | ||
+ | 06ea 09A: 0F | ||
+ | 06eb 09B: 63 | ||
+ | 06ec 09C: 24 AD | ||
+ | 06ee 09E: 61 | ||
+ | 06ef 09F: 17 | ||
+ | 06f0 0A0: 20 | ||
+ | 06f1 0A1: 54 | ||
+ | 06f2 0A2: 8C 52 45 D4 | ||
+ | 06f6 0A6: 83 55 52 CE BC S15 " | ||
+ | 06fa 0AA: E0 | ||
+ | 06fb 0AB: 15 | ||
+ | 06fc 0AC: 16 | ||
+ | 06fd 0AD: 1D | ||
+ | 06fe 0AE: 60 | ||
+ | 06ff 0AF: 86 53 54 4F D0 | ||
+ | 0704 0B4: E0 | ||
+ | 0705 0B5: 2D | ||
+ | 0706 0B6: 85 52 55 CE | ||
+ | 070a 0BA: 3B 56 | ||
+ | 070c 0BC: 85 4E 45 D7 | ||
+ | 0710 0C0: E0 | ||
+ | 0711 0C1: 2B | ||
+ | 0712 0C2: 84 52 45 CD | ||
+ | 0716 0C6: 1D | ||
+ | 0717 0C7: 9D 49 CE | ||
+ | 071a 0CA: 86 50 55 D4 BC S17 " | ||
+ | 071e 0CE: A0 | ||
+ | 071f 0CF: 10 | ||
+ | 0720 0D0: 63 | ||
+ | 0721 0D1: A0 | ||
+ | 0722 0D2: 10 | ||
+ | 0723 0D3: E6 | ||
+ | 0724 0D4: 24 3F A0 | ||
+ | 0727 0D7: 27 | ||
+ | 0728 0D8: E1 | ||
+ | 0729 0D9: 5A | ||
+ | 072a 0DA: 81 AC | ||
+ | 072c 0DC: 34 62 | ||
+ | 072e 0DE: 13 | ||
+ | 072f 0DF: 11 | ||
+ | 0730 0E0: 82 AC | ||
+ | 0732 0E2: 4E | ||
+ | 0733 0E3: 3B 81 | ||
+ | |||
+ | 0735 0E5: 8C 4C 49 53 D4 | ||
+ | 073a 0EA: 28 | ||
+ | 073b 0EB: E8 | ||
+ | 073c 0EC: 0C FF | ||
+ | 073e 0EE: 17 | ||
+ | 073f 0EF: 0C 7F | ||
+ | 0741 0F1: 67 | ||
+ | 0742 0F2: 3B 5A | ||
+ | 0744 0F4: 34 46 | ||
+ | 0746 0F6: E0 | ||
+ | 0747 0F7: 03 | ||
+ | 0748 0F8: 01 | ||
+ | 0749 0F9: 03 | ||
+ | 074a 0FA: 02 | ||
+ | 074b 0FB: 16 | ||
+ | 074c 0FC: 28 | ||
+ | 074d 0FD: 0E | ||
+ | 074e 0FE: 23 | ||
+ | 074f 0FF: 0A | ||
+ | 0750 100: 74 | ||
+ | 0751 101: 0D | ||
+ | 0752 102: 0B 03 | ||
+ | 0754 104: 28 | ||
+ | 0755 105: 1C | ||
+ | 0756 106: 6E | ||
+ | 0757 107: 28 | ||
+ | 0758 108: 0F | ||
+ | 0759 109: 6A | ||
+ | 075a 10A: 20 | ||
+ | 075b 10B: 24 A0 | ||
+ | 075d 10D: 21 | ||
+ | 075e 10E: 63 | ||
+ | 075f 10F: 24 A2 | ||
+ | 0761 111: 5B | ||
+ | 0762 112: 29 | ||
+ | 0763 113: 4A | ||
+ | 0764 114: 0E | ||
+ | 0765 115: 0E | ||
+ | 0766 116: 16 | ||
+ | 0767 117: 1D | ||
+ | 0768 118: 1D | ||
+ | |||
+ | ; SUBROUTINES | ||
+ | |||
+ | 0769 119: 34 25 | ||
+ | 076b 11B: 8E BC | ||
+ | 076d 11D: 84 BD | ||
+ | 076f 11F: 0B 06 | ||
+ | 0771 121: 76 | ||
+ | 0772 122: 84 BE | ||
+ | 0774 124: 0B 05 | ||
+ | 0776 126: 71 | ||
+ | 0777 127: 0B 04 | ||
+ | 0779 129: 6E | ||
+ | 077a 12A: 89 BE | ||
+ | 077c 12C: 84 BD | ||
+ | 077e 12E: 0B 03 | ||
+ | 0780 130: 67 | ||
+ | 0781 131: 0B 01 | ||
+ | 0783 133: 64 | ||
+ | 0784 134: 80 BD | ||
+ | 0786 136: 0B 02 | ||
+ | 0788 138: 67 | ||
+ | |||
+ | 0789 139: 34 01 | ||
+ | 078b 13B: 62 | ||
+ | 078c 13C: 34 02 | ||
+ | 078e 13E: 97 AC | ||
+ | |||
+ | 0790 140: 85 AD | ||
+ | 0792 142: 34 14 | ||
+ | 0794 144: 17 | ||
+ | 0795 145: 64 | ||
+ | 0796 146: 81 AB | ||
+ | 0798 148: 34 0E | ||
+ | 079a 14A: 85 AB | ||
+ | 079c 14C: 34 0A | ||
+ | 079e 14E: 18 | ||
+ | 079f 14F: 5A | ||
+ | 07a0 150: 86 AD | ||
+ | 07a2 152: 34 04 | ||
+ | 07a4 154: 17 | ||
+ | 07a5 155: 58 | ||
+ | 07a6 156: 0D | ||
+ | 07a7 157: 2F | ||
+ | |||
+ | 07a8 158: 34 24 | ||
+ | 07aa 15A: 85 AA | ||
+ | 07ac 15C: 34 20 | ||
+ | 07ae 15E: 1A | ||
+ | 07af 15F: 5A | ||
+ | 07b0 160: 92 AF | ||
+ | 07b2 162: 17 | ||
+ | 07b3 163: 0F | ||
+ | 07b4 164: 67 | ||
+ | 07b5 165: 34 17 | ||
+ | 07b7 167: 0F | ||
+ | 07b8 168: 71 | ||
+ | 07b9 169: 1B | ||
+ | 07ba 16A: 17 | ||
+ | 07bb 16B: 4E | ||
+ | 07bc 16C: 17 | ||
+ | 07bd 16D: 34 0F | ||
+ | 07bf 16F: 0F | ||
+ | 07c0 170: 65 | ||
+ | 07c1 171: 1B | ||
+ | 07c2 172: 47 | ||
+ | 07c3 173: 94 DC | ||
+ | 07c5 175: 57 | ||
+ | 07c6 176: 17 | ||
+ | 07c7 177: 0F | ||
+ | 07c8 178: 63 | ||
+ | 07c9 179: 4F | ||
+ | 07ca 17A: 17 | ||
+ | 07cb 17B: 0F | ||
+ | 07cc 17C: 60 | ||
+ | 07cd 17D: 53 | ||
+ | |||
+ | 07ce 17E: 8A 55 53 52 A8 | ||
+ | 07d3 183: 33 B4 | ||
+ | 07d5 185: 80 A9 | ||
+ | 07d7 187: 2E | ||
+ | 07d8 188: 2F | ||
+ | 07d9 189: 89 41 4E 44 A8 | ||
+ | 07de 18E: 0C 3C | ||
+ | 07e0 190: 33 AA | ||
+ | 07e2 192: 52 | ||
+ | 07e3 193: 87 C0 | ||
+ | 07e5 195: 0C 47 | ||
+ | 07e7 197: 33 E5 | ||
+ | 07e9 199: 0D | ||
+ | 07ea 19A: 4C | ||
+ | 07eb 19B: 84 DE | ||
+ | 07ed 19D: 33 DF | ||
+ | 07ef 19F: 61 | ||
+ | 07f0 1A0: A2 | ||
+ | 07f1 1A1: 12 | ||
+ | 07f2 1A2: 2F | ||
+ | 07f3 1A3: 83 A5 | ||
+ | 07f5 1A5: 26 | ||
+ | 07f6 1A6: 2F | ||
+ | 07f7 1A7: C1 | ||
+ | 07f8 1A8: 2F | ||
+ | 07f9 1A9: 80 A8 | ||
+ | 07fb 1AB: 33 93 | ||
+ | 07fd 1AD: 80 A9 | ||
+ | 07ff 1AF: 2F | ||
+ | </ | ||
+ | |||
+ | Aufgrund der Beschränkungen bei LN (nur Werte 00xxh möglich) muss bei LIST ohne Parameter ein wenig gezaubert werden: Die Werte auf dem Stack werden durch Manipulation in kleinste und größtmögliche Zeilennummer gewandelt. Das entspricht dann dem Aufruf "LIST 1, | ||
+ | |||
+ | Die Division ist nur als vorzeichenlose 16-Bit-Division implementiert. Deshalb muss in der IL die Fallunterscheidung bzgl. Vorzeichen und Division durch 0 erfolgen. | ||
+ | |||
+ | Um Bytes zu sparen, wurden Unterprogramme verlegt und Codes zusammengeführt. Das erzeugt leider auch schwerer lesbaren Spaghetti-Code, |