C Compiler für Z80?

Gast #4150630
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
#4150642
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.
Gast #4150679
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.
Gast #4150747
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
#4150999
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).
Persönliche Seite #4151444
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.
Gast #6159776
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...
Gast #6160185
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
#6160462
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().
Gast #6160477
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 :-)
#6161745
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.
#6162715
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?).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren