C Compiler für Z80?

Gast #4150630
Max Schauzer schrieb:
> kennt jemand einen C Compiler der direkt für einen Z80 code erzeugt,
> also ogne Betriebssystem?

Das sollte jeder können:

A keine Betriebssystemaufrufe verwenden. Man kann sowas wie printf 
verwenden, wenn man die Primitiv-Routinen wie putch für die eigene 
Hardware schreibt, oder man kann auch Ausgaberoutinen für z.B. eine 
LED-Anzeige direkt programmieren. Wenn man allerdings Festplatten 
verwalten will oder einen TCP/IP Stack, sollte man sich das mit dem 
Betriebssystem nochmal überlegen.

B Die nicht benötigten Teile auch nicht dazulinken. Man kann ohne 
weiteres kein BS benutzen, aber z.B. die Floating Point Lib. Naja, nicht 
ganz ohne weiteres, Ahnung sollte man schon haben.

C Eine Alternative, die ich benutzt habe: ein Pseudo-BS mit ein paar 
Grundfunktionen wie Char I/O, oder gleich ein Tunix-BS. Geht aber nur 
mit so einfachen Systemen wie CP/M, dafür muss man kaum was ändern.

Georg
#4150642
Georg schrieb:
> Eine Alternative

Sobald man mehr als einmal da dran muss, macht man sich seine eigene 
Runtime Lib. Eine gedankliche Anleihe bei z.B. CP/M BDOS Calls schadet 
nicht und hat den Charme, dass das Testen erheblich vereinfacht wird. 
Aber das setzt Planung voraus, kostet anfangs Zeit und widerspricht 
etwas der heutigen vHiT Mentalität mit dem schnellen Erfolgserlebnis.
Gast #4150679
Route 66 schrieb:
> Max Schauzer schrieb:
>> also ogne Betriebssystem?
>
> Wie meinst Du das? sollder Z80 selbst den Quellcode über z.B. eine
> serielle Schnittstelle bekommen, und sich daraus das Maschinenprogramm
> generieren?

Was er vermutlich meint ist ein Compiler für ein sogenanntes 
Free-Standing Environment.

C unterscheidet in Hosted und Free-Standing Umgebungen. Hosted sind die, 
bei denen das fertige Programm unter einem Betriebssystem läuft und das 
Betriebssystem alle C Standardbibliotheken unterstützt.

Free-Standing Umgebungen sind die, bei denen es kein Betriebssystem 
gibt, oder das vorhandene (rudimentäre) Betriebssystem nicht wirklich 
hilft.

Das ganze ist unabhängig von:

Klaus schrieb:
> Max Schauzer schrieb:
>> na einfach den code aufs eeprom packen und dann den Z80 ausführen lassen
>
> Also einen Cross-Compiler.

Nein, das ist kein Kriterium. Zwar werden für Free-Standing Umgebungen 
normalerweise Cross-Compiler eingesetzt (es gibt sicher Ausnahmen), aber 
für Hosted-Umgebungen setzt man auch Cross-Compiler ein. Beispiel: Eine 
ARM Linux-Anwendung auf x86 kompilieren.
Gast #4150747
Jay schrieb:
> Klaus schrieb:
>> Max Schauzer schrieb:
>>> na einfach den code aufs eeprom packen und dann den Z80 ausführen lassen
>>
>> Also einen Cross-Compiler.
>
> Nein, das ist kein Kriterium. Zwar werden für Free-Standing Umgebungen
> normalerweise Cross-Compiler eingesetzt (es gibt sicher Ausnahmen), aber
> für Hosted-Umgebungen setzt man auch Cross-Compiler ein. Beispiel: Eine
> ARM Linux-Anwendung auf x86 kompilieren.

Wenn nicht Cross, dann sucht er also einen C-Compiler, der auf Z80 
läuft? Hatte da nicht Microsoft was oder BDS-C?

MfG Klaus
#4150755
Nachtrag:
QC gibt es als Quältext. Es läuft also auch als Crosscompiler. Fertige 
Binaries kenne ich für Z80-CP/M und Win32.
Die Runtime Lib ist auch im Source dabei.
Dazu ist das Paket frei und ohne Größenbeschränkungen.
#4150763
Zilog hat einen sehr schönen, kostenlosen Crosscompiler und Debugger für 
die aktuellen eZ80-Prozessoren. Der kann mit Sicherheit nicht nur Code 
für den neuen 24 Bit Modus, sondern auch für den Original-Z80-Modus 
erzeugen.

fchk
#4150999
Rufus Τ. Firefly schrieb:
> Georg G. schrieb:
> Was magst Du damit meinen? Wofür steht für Dich das TLA "QC"?

/********************************************************/
/*                                                      */
/*               Q/C Compiler (Part 1)                  */
/*                                                      */
/*     Copyright (c) 1985 Quality Computer Systems      */
/*               All Rights Reserved                    */
/*                                                      */
/*                      08/21/85                        */
/********************************************************/

Die Ausgabe ist Assembler Code, der mit einem separaten Optimizer noch 
verschönert werden kann. Michael Röhner hat dazu noch einen zweiten 
Optimizer geschrieben, der mit einer speziellen Runtime Lib für Stand 
Alone Systeme noch kompakteren Code erzeugt.

Alles uralter Kram, der aber dennoch funktioniert. Der aktuelle Source 
ist für LCC32 modifiziert (mit einigen Altlasten aus Borland-C 3.1).
Gast #4151422
Rufus Τ. Firefly schrieb:
> das keine
> Funktionsprototypen und also auch so gut wie keine Typüberprüfungen
> kennt ...

Dafür kann man ohne weiters einen Fliesskommawert mit einem Text 
multiplizieren und das Egebnis als Funktionsadresse verwenden - also 
ideal für embedded Software :-)

Georg
Persönliche Seite #4151444
Georg schrieb:
> Dafür kann man ohne weiters einen Fliesskommawert mit einem Text
> multiplizieren und das Egebnis als Funktionsadresse verwenden

Oh. Ja, dieses wichtige Sprachfeature hatte ich glatt vergessen -- 's 
ist halt schon knapp 25 Jahre her, daß ich das letzte Mal mit so einem 
K&R-Compiler arbeiten musste.

Was einem da so alles verlorengeht ... kaum zu fassen.
#6158816
Die Originaldiskette von QC 4.0a (Format IBM-PC, 5.25") habe ich 
gefunden. Leider kann ich sie nicht lesen.Entweder spinnt mein Laufwerk 
oder sie ist tatsächlich hin.
Falls jemand besser ausgerüstet ist, bitte PN, dann schicke ich ihm das 
gute Stück.
Gast #6159776
Danke S.R.; Das hatte ich nicht gesehen ;-)

Habe mir nebenbei auch den SDCC angesehen. Gibt es irgendwo eine Doku 
bzw. ein Beispiel wie man die crt0.s aufbauen muss/soll. Das Manual 
schweigt sich ja dazu aus...
Gast #6160185
Harald N. schrieb:
> Gibt es irgendwo eine Doku
> bzw. ein Beispiel wie man die crt0.s aufbauen muss/soll.
Einzelheiten hängen von Deinem System ab, aber im Groben muß ungefähr 
das passieren:
- Stackpointer setzen
- ggf. systemspezifische Initialisierungen
- ggf. data vom ROM in den RAM kopieren
- bss löschen
- main anspringen
#6160462
Harald N. schrieb:
> Habe mir nebenbei auch den SDCC angesehen.
> Gibt es irgendwo eine Doku bzw. ein Beispiel
> wie man die crt0.s aufbauen muss/soll.

In meiner Installation gibt es unter /usr/share/sdcc/lib/src/z80/crt0.s 
eine generische (Emulator-)Version für den Z80. Lasse dich davon 
"inspirieren". :-)

Ansonsten ist die crt0.s in sich system- und umgebungsabhängig. Da steht 
ungefähr folgendes drin:
- Interruptvektoren
- Initialisierung des Stackpointers
- Initialisierung globaler Variablen
- Segmentreihenfolge (was beim GCC im Linkerscript steht).

Die generische Version enthält zudem noch Implementierungen für exit() 
und _clock().
Gast #6160477
Danke. Dann muss ich vermutlich einfach mal ausprobieren. Das 
vorliegende File hab ich mir schon angesehen. Bin nur nicht schlau 
daraus geworden.

Ist halt was anderes, wenn nicht die ganze Toolchain schon vorgefertigt 
ist :-)
#6161745
Harald N. schrieb:
> Danke. Dann muss ich vermutlich einfach mal ausprobieren. Das
> vorliegende File hab ich mir schon angesehen. Bin nur nicht schlau
> daraus geworden.
>
> Ist halt was anderes, wenn nicht die ganze Toolchain schon vorgefertigt
> ist :-)

Falls es zweites Beispiel hilfreich ist: libcv einthält eine crt0 für 
die Z80-basierte Videospielkonsole ColecoVision:

http://www.colecovision.eu/ColecoVision/development/libcv.shtml

Ich schätze, dass sich bei z88dk auch noch diverse Beispiele für 
Z80-Systeme finden.
#6162715
Harald N. schrieb:
> Ist halt was anderes, wenn nicht die ganze
> Toolchain schon vorgefertigt ist :-)

Den Compiler finde ich auch super, aber der Rest der SDCC-Toolchain 
riecht etwas seltsam. Das gibt einem so das Gefühl wie der staubige 
Bastelkeller des Großvaters...

Aber gut, das Gefühl habe ich bei manchen Kommerzcompilern auch. Bin 
wahrscheinlich GNU-verseucht (verwöhnt?).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.