Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
z9001:basic [2011/02/20 16:34] – internes Zahlenformat entschlüsselt volkerp | z9001:basic [2021/05/25 05:44] (aktuell) – [BASIC-Varianten] volkerp | ||
---|---|---|---|
Zeile 5: | Zeile 5: | ||
===== Geschichte ===== | ===== Geschichte ===== | ||
- | Das Basic {{: | + | Das Basic {{: |
Dr. Keller hat mir Januar 2008 folgende Informationen mitgeteilt: | Dr. Keller hat mir Januar 2008 folgende Informationen mitgeteilt: | ||
Zeile 20: | Zeile 20: | ||
Nach Übernahme der Dummerstorfer BASIC-Version geschah etwa folgendes: | Nach Übernahme der Dummerstorfer BASIC-Version geschah etwa folgendes: | ||
- | * Die Software stellt sich als Mischung (Sinclair, MS) heraus, wobei einige Passagen offensichtlich | + | * Die Software stellt sich als Mischung (Sinclair, MS) heraus, wobei einige Passagen offensichtlich |
* Etwa 6K-Byte der Software (Kern) wurde so gelassen der Rest wurde überarbeitet/ | * Etwa 6K-Byte der Software (Kern) wurde so gelassen der Rest wurde überarbeitet/ | ||
* Insbesondere wurden einige Fehler beseitigt, die schon in der MS-Version steckten und wesentliche Sprachkomponenten wurden angepasst (bei MKD durch Keller/ | * Insbesondere wurden einige Fehler beseitigt, die schon in der MS-Version steckten und wesentliche Sprachkomponenten wurden angepasst (bei MKD durch Keller/ | ||
- | * In die Spracherweiterung flossen Gedanken mehrerer Mitarbeiter (auch von RED) ein, vor allem aber die Erfahrungen, | + | * In die Spracherweiterung flossen Gedanken mehrerer Mitarbeiter (auch von RED) ein, vor allem aber die Erfahrungen, |
* In Ergänzung zu dem 6K-Kern wurde dann eine 8K-Version erarbeitet, die im Wesentlichen nicht mehr geändert wurde. | * In Ergänzung zu dem 6K-Kern wurde dann eine 8K-Version erarbeitet, die im Wesentlichen nicht mehr geändert wurde. | ||
* Die Erweiterung (zu 10K-Basic) enthielt dann hardware-bezogene Ergänzungen, | * Die Erweiterung (zu 10K-Basic) enthielt dann hardware-bezogene Ergänzungen, | ||
Zeile 33: | Zeile 33: | ||
* der fertige Kassettentreiber wurde dann (etwa 12/83 oder 01/84 an Mühlhausen übergeben, so dass zur Frühjahrsmesse 84 bereits die Kompatibilität bezüglich der Datenübernahme gesichert war. | * der fertige Kassettentreiber wurde dann (etwa 12/83 oder 01/84 an Mühlhausen übergeben, so dass zur Frühjahrsmesse 84 bereits die Kompatibilität bezüglich der Datenübernahme gesichert war. | ||
* später gab es durch Hobbyisten (z.B. im ZKI) schnellere und stabilere Kassettentreiber, | * später gab es durch Hobbyisten (z.B. im ZKI) schnellere und stabilere Kassettentreiber, | ||
- | * Auch darüber hinaus wurden im BASIC seitens MKD wesentliche | + | * Auch darüber hinaus wurden im BASIC seitens MKD wesentliche |
Der 8k-Kern wurde (meines Wissens) fast identisch von Mühlhausen genutzt. Die Unterschiede in den Sprachkomponenten wurden in die 2k-Erweiterungen gesteckt. | Der 8k-Kern wurde (meines Wissens) fast identisch von Mühlhausen genutzt. Die Unterschiede in den Sprachkomponenten wurden in die 2k-Erweiterungen gesteckt. | ||
Zeile 60: | Zeile 60: | ||
* **RAM-Basic 1984 (BASIC84): | * **RAM-Basic 1984 (BASIC84): | ||
* **Basic-Modul 1984 (BASIC84)**: | * **Basic-Modul 1984 (BASIC84)**: | ||
- | * **Basic-Modul ab 1985 (BASIC85)**: | + | * **Basic-Modul ab 1985 (BASIC85)**: |
* **Basic-Modul ab 1986 (BASIC85P)**: | * **Basic-Modul ab 1986 (BASIC85P)**: | ||
- | * **KC87.1x (BASIC85)**: | + | * **KC87.1x (BASIC85)**: |
- | * **Plotter-Modul (BASIC86)**: | + | * **Plotter-Modul (BASIC86)**: |
* **KC87.2x/ | * **KC87.2x/ | ||
* außerdem ist noch ein leicht anderes Plotter-Modul-Basic aufgetaucht (" | * außerdem ist noch ein leicht anderes Plotter-Modul-Basic aufgetaucht (" | ||
- | Die praktischen Unterschiede zwischen RAM-BASIC und dem BASIC-Modul sind marginal (also zwischen BASIC84 und BASIC85), die Unterschiede zum neuen BASIC-Modul (Plotter, KC87.2x) (BASIC86) betreffen einen erweiterten Sprachumfang (es gibt zusätzliche Grafikbefehle zur Ansteuerung des Plotters bzw. der Vollgrafik; hier wird aber noch ein zusätzlicher Treiber benötigt, s. [[z9001: | + | Die praktischen Unterschiede zwischen RAM-BASIC und dem BASIC-Modul sind marginal (also zwischen BASIC84 und BASIC85), die Unterschiede zum neuen BASIC-Modul (Plotter, |
Hinweis: Leider wird beim BASIC86 beim Speichern auf Kassette ein unnötiger und mit zufälligen Zeichen belegter Startblock mit Blocknummer 0 geschrieben. Dieser Block bringt manches Kopierprogramm aus dem Tritt, außerdem verbraucht er zusätzlichen Platz auf der Kassette und das Schreiben und Einlesen dauert auch einen Block länger. | Hinweis: Leider wird beim BASIC86 beim Speichern auf Kassette ein unnötiger und mit zufälligen Zeichen belegter Startblock mit Blocknummer 0 geschrieben. Dieser Block bringt manches Kopierprogramm aus dem Tritt, außerdem verbraucht er zusätzlichen Platz auf der Kassette und das Schreiben und Einlesen dauert auch einen Block länger. | ||
Zeile 79: | Zeile 79: | ||
</ | </ | ||
- | zur Bestimmung der vorliegenden Version (RAM oder ROM). VS ist der Offset, der zu den Speicheradressen addiert wird, z.B. in Programmen mit Maschinencodeteil wie in CAVE, KNOSSOS oder MAZOGS | + | zur Bestimmung der vorliegenden Version (RAM oder ROM). VS ist der Offset, der zu den Speicheradressen addiert wird, z.B. in Programmen mit Maschinencodeteil wie MAZOGS |
< | < | ||
20 DOKE9, | 20 DOKE9, | ||
</ | </ | ||
- | + | ||
===== Die Erweiterung von Lutz Elßner ===== | ===== Die Erweiterung von Lutz Elßner ===== | ||
Zeile 96: | Zeile 96: | ||
Die Anweisungen PRINT#, LIST#, LOAD#, INPUT# sind mit den Gerätenummern 0 ,2 ,3 und CLOAD, CLOAD*, CSAVE, CSAVE* mit beliebigen zugewiesenen Peripheriegeräten funktionstüchtig, | Die Anweisungen PRINT#, LIST#, LOAD#, INPUT# sind mit den Gerätenummern 0 ,2 ,3 und CLOAD, CLOAD*, CSAVE, CSAVE* mit beliebigen zugewiesenen Peripheriegeräten funktionstüchtig, | ||
- | Mir sind bislang 2 verschiedene Revisionen dieser Erweiterung bekannt: Aus dem [[z9001:module: | + | Mir sind bislang 2 verschiedene Revisionen dieser Erweiterung bekannt: Aus dem [[.:module_sonstige: |
===== CP/M-BASIC ===== | ===== CP/M-BASIC ===== | ||
- | Für CP/M gab es von Rossendorf bzw. Robotron angepasste BASIC-Varianten. (ZBASIC, ZBASICT oder auch | + | Für CP/M gab es von Rossendorf bzw. Robotron angepasste BASIC-Varianten. (ZBASIC, ZBASICT oder auch |
Das KC-BASIC für den Betrieb unter CP/M modifiziert (aufrufbar als ZBASIC oder BAS). Ausgangspunkt für die Modifikation war das sog. RAM-BASIC. Volle Kompatibilität ist gegeben, sofern diese zum RAM-BASIC gegeben war (d.h. Basic-Programme mit Maschinencode-Anteil laufen i.A. nicht!). Bei der Arbeit mit Disketten ist auf Großschreibung der Dateinamen zu achten, andernfalls kann es insbesondere für den ungeübten Nutzer zu Problemen kommen. Die Dateinamen können max. 8 Zeichen lang sein (Buchstaben, | Das KC-BASIC für den Betrieb unter CP/M modifiziert (aufrufbar als ZBASIC oder BAS). Ausgangspunkt für die Modifikation war das sog. RAM-BASIC. Volle Kompatibilität ist gegeben, sofern diese zum RAM-BASIC gegeben war (d.h. Basic-Programme mit Maschinencode-Anteil laufen i.A. nicht!). Bei der Arbeit mit Disketten ist auf Großschreibung der Dateinamen zu achten, andernfalls kann es insbesondere für den ungeübten Nutzer zu Problemen kommen. Die Dateinamen können max. 8 Zeichen lang sein (Buchstaben, | ||
Zeile 153: | Zeile 153: | ||
| basea.rom | BASIC-Erweitwerung von L.Elßner, vermutlich ältere Version (kleine Unterschiede in den Merkzellen für die Kassettenroutinen) | | | basea.rom | BASIC-Erweitwerung von L.Elßner, vermutlich ältere Version (kleine Unterschiede in den Merkzellen für die Kassettenroutinen) | | ||
- | + | ||
+ | ===== Patch BASIC86 ===== | ||
+ | |||
+ | um das o.a. Problem beim BASIC86, einen sinnlosen Kopfblock zu schreiben, zu umgehen, gibt es einen kleinen Patch. Der kleine Nachteil dieser Lösung ist, das jetzt wieder direkt interne Monitoraufrufe getätigt werden. | ||
+ | |||
+ | -> weitere Patches s. Assemblerquellcode bm608p.asm | ||
+ | |||
+ | < | ||
+ | ; Patch in BASIC-Erweiterung BM608 für write tape | ||
+ | ; nicht OPENW nutzen, das (schreibt nur sinnlosen (!!!) Block 0 | ||
+ | org 0E68Bh | ||
+ | call 0F593h | ||
+ | ld a, 1 | ||
+ | ld (6Bh), a ; BLNR | ||
+ | nop | ||
+ | nop | ||
+ | ; | ||
+ | org 0E6EEh | ||
+ | push de | ||
+ | call sub_E7D8 | ||
+ | pop de | ||
+ | |||
+ | |||
+ | org | ||
+ | sub_E7D8: | ||
+ | dec a | ||
+ | jp nz, 0F46Fh ; wenn nicht Block 1 | ||
+ | ld bc, 1770h ; sonst: langer Vorton | ||
+ | jp 0F472h ; fuer ersten Block | ||
+ | </ | ||
+ | |||
+ | |||
===== Übersicht Basic-Module (Dank an T. Paul) (Bilder s.o.): ===== | ===== Übersicht Basic-Module (Dank an T. Paul) (Bilder s.o.): ===== | ||
Zeile 241: | Zeile 272: | ||
===== Internas ===== | ===== Internas ===== | ||
+ | |||
+ | 7.8.2012: Das Zahlenformat des BASIC entspricht dem SKR-Standardformat. | ||
+ | s. Lampe/ Jorke/ Wengel: Algorithmen der Mikrorechentechnik, | ||
+ | |||
< | < | ||
Zeile 331: | Zeile 366: | ||
----------------- | ----------------- | ||
- | Schreibt die Bytes in umgekehrter Reihenfolge (4 3 2 1), so erhält man | + | Schreibt |
- | ----------------------------------------------------------------------- | + | ---------------------------------------------------------------------- |
- | | 1 Bit Vorzeichen exp, 7 Bit exp | 1 Bit Vorzeichen, 23 Bit Mantisse | | + | | 4 | |
- | ----------------------------------------------------------------------- | + | ---------------------------------------------------------------------- |
+ | | Exponent | ||
+ | | ||
+ | | 1 Bit expVorzeichen, 7 Bit exp | 1 Bit Vorzeichen, 23 Bit Mantisse | | ||
+ | ---------------------------------------------------------------------- | ||
+ | | VZ, Bit7...Bit0 | ||
+ | ---------------------------------------------------------------------- | ||
+ | |||
+ | |||
+ | Die Mantisse liegt immer im Bereich 2^(-1)< | ||
+ | Das erste Bit(2^-1) ist daher immer 1, und wird deshalb als Vorzeichenbit genutzt. | ||
- | Mantisse Bit0 := 1 per Default (normalisierte Darstellung), | ||
Mantisse Vorzeichen = " | Mantisse Vorzeichen = " | ||
- | exponent=2^+exp, wenn expVorzeichen = 1 | + | stelligkeit=2^exp, wenn expVorzeichen = 1 |
- | exponent=2^-(2^7-exp), wenn expVorzeichen = 0 | + | stelligkeit=2^(exp-128), wenn expVorzeichen = 0 (Zweierkomplement) |
- | Zahl = 0.1Bit-1...Bit-23*2^exponent | + | |
+ | Zahl = 0.1Bit(2^-2)...Bit(2^-24) * stelligkeit | ||
Das Exponent-Vorzeichen ist beim KC genau andersherum als üblich! | Das Exponent-Vorzeichen ist beim KC genau andersherum als üblich! | ||
Zeile 438: | Zeile 483: | ||
Es gibt keine direkte Möglichkeit zu ermitteln, ob es sich um | Es gibt keine direkte Möglichkeit zu ermitteln, ob es sich um | ||
- | ein Zahlen- oder Stringfeld handelt. Auch die Größe ist nicht bestimmbar | + | ein Zahlen- oder Stringfeld handelt. Auch die Größe ist nicht direkt |
+ | (mit ein paar Programmtricks geht es aber -> total commander plugin listtap2 zeigt auch Felder an!) | ||
84 85 7C 3F A$(0) je 4 Byte pro Feldwert | 84 85 7C 3F A$(0) je 4 Byte pro Feldwert | ||
Zeile 497: | Zeile 543: | ||
</ | </ | ||
- | \\ | + | \\ |
---- | ---- | ||
12.5.03 Dank an Lutz Elßner für das " | 12.5.03 Dank an Lutz Elßner für das " | ||
+ |