Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 OCBASIC-Update und L-Distribution Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von das |_ Team - 25.03.2017 10:57)
 Als Antwort auf Neue Version von OCBASIC von Dietmar - 20.03.2017 21:17
das |_ Team nutzt:  CC1-Unit V1.1, CC1-M-Unit V1.1, CC1-Station V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
Hallo Dietmar,

vielen Dank für deinen Hinweis und das sogleich bereit gestellte OCBASIC-Update welches das Problem behebt!

Wir nutzen die geschilderte ON..GOTO, ON..GOSUB Kombination bisher in keinem OCBASIC Programm. Vorsorglich haben wir in den letzten Tagen alle von uns mit OCBASIC 1.09a erstellten Tools erneut mit der Version 1.10a deines Kompilers kompiliert und die daraus erzeugten Kompilate mit den bereits veröffentlichten verglichen.

Ergebnis: In allen Fällen waren beide Bytekodemengen identisch und korrekt. Demnach ist keines der veröffentlichten L-Team Programme betroffen.

Die neue Version 1.10a des OCBASIC-Kompilers wollen wir in die nächste Ausgabe der L-Distribution übernehmen.
Wer nicht bis zur nächsten Ausgabe der L-Distribution warten möchte, kann das weiter unten verlinkte Zip-Archiv verwenden, um die Dateien auf den neuesten Stand zu bringen. Beim Entpacken bitte den Haken bei "Absolute Pfadangaben verwenden" setzen.


Etwas ist uns beim Kompilieren aufgefallen und wir möchten eine eine Funktionserweiterung für den OCBASIC-Kompiler vorschlagen, die speziell das 'Lbit'-Firmware betrifft. Am Beispiel des folgendes Minimalprogramms welches kompiliert einen Umfang von 400 Bytes hat (bei option ccbas).


Oben: Der Quelltext kann hier angesehen werden. Die zugehörigen Include-Dateien sind im Zip-Archiv (L-Distribution-Update) enthalten.

Warum ist der erzeugte Bytekode so groß
Fast die Hälfte des Bytekodes resultiert aus der Include-Datei L-BMCALL.pro welche zum Einsprung in das Funktionsmodul der 'Lbit'-Firmware dient.

Eine Notlösung, denn die Funktionsnummern der Exportfunktionen entsprechen festen 16-bit Adressen im oberen Bereich des Adressraums der Virtuellen Maschine.

So könnte der folgende OCBASIC-Quelltext ..


 option ccbas
 define Lget_DA1 65517' &hffed (Lbit-Exportfunktion Nr.10)
 
   PRINT " D/A_1="; LGet_DA1,


.. vom OCBASIC-Kompiler in folgenden Bytekode übersetzt werden:

05 ff de (GOSUB 65517)

Der jetzige Kompiler erzeugt aber:

14 ff de (PUSH -19)

Wir wissen nicht warum das so ist. Wahrscheinlich gibt es eine einfache Erklärung dafür.
L-BMCALL.pro fordert leider für jede definierte 'Lbit'-Funktion 3 Bytes Programmspeicher ein - egal ob die Funktion im Programm verwendet oder nicht. Aktuell sind in L-BMCALL.pro 57 Funktionen definiert. Dies führt bei mehreren OCBASIC-Programmen, die mithilfe von 'Lbit' gleichzeitig im Speicher vorgehalten werden, zu einigen hundert Bytes an unnützem Speicherplatzbedarf nur durch die Includedatei L-BMCALL.pro.

Abbildung:'Lbit'-Sitzung zeigt das Programm Get_DA.ocb (2x ausgeführt).



Obige Abbildung: 'Lbit' mit dem Programm LMEMVIEW4f.ocb welches den von Get_DA.ocb belegten Programmspeicher zeigt.

Deutlich sind die Token der GOTO Sprunganweisungen (003...) aus der Include-Datei und die (Laufzeit)-Funktionsadressen zu erkennen. Ebenfalls hervorgehoben sind einige Adressen, von denen die Funktionsaufrufe (005...) eigentlich ohne den Umweg über die Includedatei direkt in das Funktionsmodul der 'Lbit'-Firmware verzweigen könnten - wäre da nicht das PUSH im Weg... :P

Im Programm LMEMVIEW4f.ocb bewirkt die Includedatei zudem eine spürbare Verlangsamung, weil für den Ausgabeabschnitt mit 17 Zeilen 425 eigentlich überflüssige GOTO Sprünge abgearbeitet werden müssen.

Könnte man den OCBASIC-Kompiler dahingehend erweitern, dass die Includedatei entfallen kann?



Viele Grüße

das |_ Team

Passender Link: L-Distribution-Update

 Antwort schreiben

Bisherige Antworten:

Re: OCBASIC-Update und L-Distribution (von Dietmar - 25.03.2017 15:29)