Forum: Mikrocontroller und Digitale Elektronik C Compiler für Z80?


von Max S. (maximus-minimus)


Lesenswert?

hallo,
kennt jemand einen C Compiler der direkt für einen Z80 code erzeugt, 
also ogne Betriebssystem?

von Bastler (Gast)


Lesenswert?

SDCC

von Route_66 H. (route_66)


Lesenswert?

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?

von Georg G. (df2au)


Lesenswert?

QC
Musst du nur bei der Runtime Lib aufpassen und ggfs dein eigenes putchar 
und getchar liefern

von Max S. (maximus-minimus)


Lesenswert?

na einfach den code aufs eeprom packen und dann den Z80 ausführen lassen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

"Bastler" hat um 17:42 schon die richtige Antwort gegeben:
SDCC.

von Klaus (Gast)


Lesenswert?

Max Schauzer schrieb:
> na einfach den code aufs eeprom packen und dann den Z80 ausführen lassen

Also einen Cross-Compiler.

MfG Klaus

von Georg (Gast)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

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.

von Jay (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

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.

von Frank K. (fchk)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Georg G. schrieb:
> QC gibt es als Quältext.

Was magst Du damit meinen? Wofür steht für Dich das TLA "QC"?

(Es gab mal einen DOS-Compiler von Microsoft, der als QC "Quick-C" 
bezeichnet wurde, meinst Du etwa den?)

von Georg G. (df2au)


Lesenswert?

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).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ah. Hmm. Ob man einen C-Compiler von 1985 wirklich verwenden will?
Der kennt prinzipbedingt nur das grausliche "K&R"-C vor C89, das keine 
Funktionsprototypen und also auch so gut wie keine Typüberprüfungen 
kennt ...

Brr. Ich denke, daß da SDCC eindeutig zu bevorzugen sein sollte.

von Georg (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von HN3 (Gast)


Lesenswert?

Sorry, dass ich diesen Thread ausgrabe. Aber wo gibt es diesen Q/C 
Compiler zum Download?

von Georg G. (df2au)


Lesenswert?

HN3 schrieb:
> wo gibt es

Welche Geschmacksrichtung suchst du? Native für CP/M oder Cross für PC 
(aber nicht 64Bit Systeme). IIRC lief er unter XP noch.

Schick mal eine PM mit deiner Email Adresse.

von Chris (Gast)


Lesenswert?


von Georg G. (df2au)


Lesenswert?

Das ist nicht die neueste Version, aktuell ist 4.0.

von S. R. (svenska)


Lesenswert?

Georg G. schrieb:
> Das ist nicht die neueste Version, aktuell ist 4.0.

Gibt's die irgendwo? Kannst du die evtl. an den Peter zur 
Veröffentlichung auf der Seite schicken? :-)

von Harald N. (Gast)


Lesenswert?

Bitte Zusatzinfo: Peter? Seite?

von Georg G. (df2au)


Lesenswert?

S. R. schrieb:
> Veröffentlichung auf der Seite schicken

Ich muss mal forschen, ob ich das Original noch habe. Hier ist nur eine 
modifizierte Version, die als Crosscompiler auf WIN32 läuft. Sie ist mit 
LCC32 entstanden. Das ist alles Jahrzehnte alt. Muss ich sehr tief 
graben.

von S. R. (svenska)


Lesenswert?

Harald N. schrieb:
> Bitte Zusatzinfo: Peter? Seite?

Chris schrieb:
> http://www.z80.eu/c-compiler.html

Ganz unten auf der Seite:
"Copyright (c) 2005-2016 Peter Dassow. All rights reserved."

Gefolgt von der Kontaktadresse.

von Georg G. (df2au)


Lesenswert?

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.

von Harald N. (Gast)


Lesenswert?

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...

von Bernd (Gast)


Lesenswert?

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

von S. R. (svenska)


Lesenswert?

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().

von Harald N. (Gast)


Lesenswert?

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 :-)

von Philipp Klaus K. (pkk)


Lesenswert?

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.

von S. R. (svenska)


Lesenswert?

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?).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.