Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
z9001:basic [2011/02/20 16:34] – internes Zahlenformat entschlüsselt volkerp | z9001:basic [2013/06/12 06:59] – Link mit z9001:module:192k_modul geändert zu z9001:module_sonstige:192k_modul volkerp | ||
---|---|---|---|
Zeile 23: | Zeile 23: | ||
* 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 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 ===== | ||
Zeile 152: | Zeile 152: | ||
| basic-2le.rom | BASIC-Erweitwerung von L.Elßner, Version 1.00 | | | basic-2le.rom | BASIC-Erweitwerung von L.Elßner, Version 1.00 | | ||
| 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 | ||
+ | </ | ||
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 |