Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
z9001:basic [2010/07/23 07:27] – angelegt volkerpz9001:basic [2013/06/12 06:59] – Link mit z9001:module:192k_modul geändert zu z9001:module_sonstige:192k_modul volkerp
Zeile 1: Zeile 1:
-====== BASIC ======+====== KC-BASIC ======
  
 Ein wesentliches Unterscheidungsmerkmal der verschiedenen Z9001-Varianten ist die jeweils verwendete KC-BASIC Version. Während beim Z9001 und KC85.1x noch das BASIC von Kassette geladen werden musste oder als separates Steckmodul zugekauft werden konnte, ist beim KC87 das BASIC bereits im Grundgerät enthalten. Ein wesentliches Unterscheidungsmerkmal der verschiedenen Z9001-Varianten ist die jeweils verwendete KC-BASIC Version. Während beim Z9001 und KC85.1x noch das BASIC von Kassette geladen werden musste oder als separates Steckmodul zugekauft werden konnte, ist beim KC87 das BASIC bereits im Grundgerät enthalten.
Zeile 23: Zeile 23:
   * Etwa 6K-Byte der Software (Kern) wurde so gelassen der Rest wurde überarbeitet/ergänzt/verbessert.   * Etwa 6K-Byte der Software (Kern) wurde so gelassen der Rest wurde überarbeitet/ergänzt/verbessert.
   * Insbesondere wurden einige Fehler beseitigt, die schon in der MS-Version steckten und wesentliche Sprachkomponenten wurden angepasst (bei MKD durch Keller/Busch)   * Insbesondere wurden einige Fehler beseitigt, die schon in der MS-Version steckten und wesentliche Sprachkomponenten wurden angepasst (bei MKD durch Keller/Busch)
-  * In die Spracherweiterung flossen Gedanken mehrerer Mitarbeiter (auch von RED) ein, vor allem aber die Erfahrungen, die bei MKD mit dem Tischrechner hp9548B (IBM-PC-Vorläufer) gesammelt wurden (von diesem BASIC wurden einige Sprachkomponenten übernommen.)+  * In die Spracherweiterung flossen Gedanken mehrerer Mitarbeiter (auch von RED) ein, vor allem aber die Erfahrungen, die bei MKD mit dem Tischrechner hp9548B (IBM-PC-Vorläufer)(vp: sicherlich HP 9845B) gesammelt wurden (von diesem BASIC wurden einige Sprachkomponenten übernommen.)
   * 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 sich mehrfach geringfügig geändert haben, ohne die Kompatibilität zu beeinflussen   * Die Erweiterung (zu 10K-Basic) enthielt dann hardware-bezogene Ergänzungen, die sich mehrfach geringfügig geändert haben, ohne die Kompatibilität zu beeinflussen
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, wobei die "BASIC-üblichen" und die "Betriebssystem- üblichen" Aufzeichnungsverfahren anwendbar sind. Eine durchgehende Behandlung von OPEN und CLOSE ist dabei gewährleistet. Bei der Anwendung von Treiberprogrammen für serielle Schnittstellen (V24, IFSS) oder parallele Schnittstellen (CENTRONICS) mit verschiedenen Protokollen ist Datenaustausch mit gleichen und anderen Rechnern möglich. 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, wobei die "BASIC-üblichen" und die "Betriebssystem- üblichen" Aufzeichnungsverfahren anwendbar sind. Eine durchgehende Behandlung von OPEN und CLOSE ist dabei gewährleistet. Bei der Anwendung von Treiberprogrammen für serielle Schnittstellen (V24, IFSS) oder parallele Schnittstellen (CENTRONICS) mit verschiedenen Protokollen ist Datenaustausch mit gleichen und anderen Rechnern möglich.
  
-Mir sind bislang 2 verschiedene Revisionen dieser Erweiterung bekannt: Aus dem [[z9001:module:192k_modul|]] und von einer Kassette. Beide verzichten auf den RENUMBER-Befehl, enthalten dafür Blockungsalgorithmen für die Kassettenarbeit.+Mir sind bislang 2 verschiedene Revisionen dieser Erweiterung bekannt: Aus dem [[.:module_sonstige:192k_modul|]] und von einer Kassette. Beide verzichten auf den RENUMBER-Befehl, enthalten dafür Blockungsalgorithmen für die Kassettenarbeit.
  
 ===== CP/M-BASIC ===== ===== CP/M-BASIC =====
Zeile 116: Zeile 116:
 Für den 8K-Kern habe ich nur den Quelltext "HC-BASIC ROM-Version 7. 1. 1987"; die verschiedenen 2K-Erweiterungen sowie die RAMBASIC-Version und BASIC-84 habe ich reassembliert. Eine komplette interne Beschreibung des BASICs ist leider nirgendwo mehr auffindbar. Für die 2K-Erweiterung des originalen Z9001-BASIC habe ich noch einige (extrem schlecht lesbare) Blätter als thermokopierte Unterlagen, in denen Details der Implementierung erläutert werden. Auch wird auf weitere Dokumente verwiesen "...(vergl. ERWEI.HC Seite 26/27, BASIC.HC Seite 44/45)..." Für den 8K-Kern habe ich nur den Quelltext "HC-BASIC ROM-Version 7. 1. 1987"; die verschiedenen 2K-Erweiterungen sowie die RAMBASIC-Version und BASIC-84 habe ich reassembliert. Eine komplette interne Beschreibung des BASICs ist leider nirgendwo mehr auffindbar. Für die 2K-Erweiterung des originalen Z9001-BASIC habe ich noch einige (extrem schlecht lesbare) Blätter als thermokopierte Unterlagen, in denen Details der Implementierung erläutert werden. Auch wird auf weitere Dokumente verwiesen "...(vergl. ERWEI.HC Seite 26/27, BASIC.HC Seite 44/45)..."
  
-<note important>**Wer noch Dokumente zum BASIC hat, möge sich bitte mit mir in Verbindung setzen.**</note>+<WRAP center round important 60%> 
 +Wer noch Dokumente zum BASIC hat, möge sich bitte mit mir in Verbindung setzen 
 +</WRAP>
  
 Ich habe die diversen BASIC-Varianten reassembliert und auch ein bisschen Zusatzmaterial zur Erweiterung aufbereitet. In diesem Paket {{:z9001:basic.zip|}} sind von mir reassemblierte Quellcodes der verschiedenen BASIC-Varianten des Z9001 enthalten. Ich habe die diversen BASIC-Varianten reassembliert und auch ein bisschen Zusatzmaterial zur Erweiterung aufbereitet. In diesem Paket {{:z9001:basic.zip|}} sind von mir reassemblierte Quellcodes der verschiedenen BASIC-Varianten des Z9001 enthalten.
Zeile 150: 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
 +
 +<code>
 +; 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   0e7d8h
 +sub_E7D8:       ld      a, (6Bh) ; BLNR
 +                dec     a
 +                jp      nz, 0F46Fh ; wenn nicht Block 1
 +                ld      bc, 1770h ; sonst: langer Vorton
 +                jp      0F472h ; fuer ersten Block
 +</code>
  
    
Zeile 239: Zeile 272:
  
 ===== Internas ===== ===== Internas =====
 +
 +7.8.2012: Das Zahlenformat des BASIC entspricht dem SKR-Standardformat.
 +s. Lampe/ Jorke/ Wengel: Algorithmen der Mikrorechentechnik, VEB Verlag Technik, Berlin, 1983, S. 82ff.
 +
  
 <code> <code>
Zeile 310: Zeile 347:
 Länge des Feldes = 1 (Byte f. Dimensionen) + n (Anzahl Diemensionen) + Anzahl Folgebyte Länge des Feldes = 1 (Byte f. Dimensionen) + n (Anzahl Diemensionen) + Anzahl Folgebyte
 Bei der Zählung der Dimensionszahlen ist zu beachten, daß mit 0 begonnen wird: 0..n = (n+1) Werte! Bei der Zählung der Dimensionszahlen ist zu beachten, daß mit 0 begonnen wird: 0..n = (n+1) Werte!
 +
 +#------------------------------------------------------------------------------
 +# Zahlen
 +#------------------------------------------------------------------------------
 +
 +20.2.2011: In Büchern war nichts über das intere Zahlenformat zu finden. 
 +Dehalb habe ich das analysiert. Und so kompliziert ist es gar nicht:
 +
 +BASIC speichert Zahlen generell als Gleitkommazahlen einfacher Genauigkeit 
 +in 4 Byte ab (7 Bit Exponent mit Vorzeichen, 24 Bit Mantisse)
 +(floating point number, single precision, a signed seven bit exponent 
 +and a signed 24 bit mantissa):
 +
 +        -----------------
 +        | 1 | 2 | 3 | 4 |
 +        -----------------
 +        |   Zahlenwert  |
 +        -----------------
 +
 +Schreibt man die Bytes in umgekehrter Reihenfolge (4 3 2 1), so erhält man
 +
 +        ----------------------------------------------------------------------
 +        | 4                              |            2              |
 +        ----------------------------------------------------------------------
 +        | Exponent                       | Mantisse                          |
 +        ----------------------------------------------------------------------
 +        | 1 Bit expVorzeichen, 7 Bit exp | 1 Bit Vorzeichen, 23 Bit Mantisse |
 +        ----------------------------------------------------------------------
 +        | VZ, Bit7...Bit0                | VZ,(Bit2^-2)...Bit(2^-24)         |
 +        ----------------------------------------------------------------------
 +
 +
 +Die Mantisse liegt immer im Bereich 2^(-1)<=mantisse<2^0
 +Das erste Bit(2^-1) ist daher immer 1, und wird deshalb als Vorzeichenbit genutzt.
 +
 +Mantisse Vorzeichen = "+", wenn bit==0, "-" wenn bit==1
 +stelligkeit=2^exp, wenn expVorzeichen = 1
 +stelligkeit=2^(exp-128), wenn expVorzeichen = 0 (Zweierkomplement)
 +
 +Zahl = 0.1Bit(2^-2)...Bit(2^-24) * stelligkeit
 +
 +Das Exponent-Vorzeichen ist beim KC genau andersherum als üblich!
 +
 +Beispiel Umrechnung in internes Format:
 +
 +0.1 dezimal 
 +nächstgrößere 2er-Potenz ist 2^-3=0.125
 +0.1/0.125=0.8
 +0.8*2^24=13421772,8 ~ 13421773 = 110011001100110011001101b 
 +
 +Exponent 
 +-3 = -000011b, 2er Komplement 1111101 (=bitweise negiert + 1)
 +Vorzeichen "-" -> 0
 +=> 0-1111101 
 +
 +Mantisse 
 +von 110011001100110011001101b erste 1 weglassen, dafür Vorzeichen
 +=> 0-10011001100110011001101
 + 
 +Gesamtzahl
 +0-1111101|0-10011001100110011001101=7D4CCCCDh
 +
 +Ablage im Speicher als CD,CC,4C,7D
 +
 +Mit einem kleinen BASIC-Programm kann man das verifizieren:
 +
 +10 A=0.1:!als erste Variable anlegen
 +100 VI=DEEK(983):!ADR. VON A
 +1000 PRINT "A=";A;" ";
 +1010 PRINT PEEK(VI+2);" ";PEEK(VI+3);" ";PEEK(VI+4);" ";PEEK(VI+5)
 +
  
  
Zeile 375: 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 bestimmbar 
 +(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
  • z9001/basic.txt
  • Zuletzt geändert: 2021/05/25 05:44
  • von volkerp