hallo, kennt jemand einen C Compiler der direkt für einen Z80 code erzeugt, also ogne Betriebssystem?
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?
QC Musst du nur bei der Runtime Lib aufpassen und ggfs dein eigenes putchar und getchar liefern
Max Schauzer schrieb: > na einfach den code aufs eeprom packen und dann den Z80 ausführen lassen Also einen Cross-Compiler. MfG Klaus
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
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.
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.
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
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.
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
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?)
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).
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.
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
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.
Sorry, dass ich diesen Thread ausgrabe. Aber wo gibt es diesen Q/C Compiler zum Download?
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.
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? :-)
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.
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.
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.
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...
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
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().
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 :-)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.