NKC Forum
Register | FAQ | Search | Who is online? | Member list | Today's posts | Calendar | Login



Author Topic: Projekt C-Crosscompiler
retroniker
Stammgast
**
ID # 243


  Posted on December 24, 2025 12:44 AM (#122)  |  Quote Quote   PM PM   E-mail E-mail
... naja, was soll ich sagen ... irgendwie tut es :D




ABER: Ich glaube es gibt noch Einiges zu tun. Das File TEST3.68k funktioniert, aber die Ausgabe kommt erst, wenn ich eine Taste drücke :D

Anfangs dachte ich es läuft nicht, weil nach dem Start lange nichts passierte (32,9kB - MC68008) dann kam aber der Eingabeprompt wieder blinkend ... und ich habe exit eingegeben, um aus JADOS raus zu kommen, bei der Eingabe von exit kam, dann die Ausgabe, die ich erwartet habe ... deshalb sieht man oben auf dem Bild "exit". :D :D :D

Aber immerhin ...

So jetzt ist aber Schluß
Schöne Grüße

-----------------------
68008/GDP64HS/BootRAM68k/KEYr4/IOEenh mit 2xSD-Karte/Sound3/UHR3/IOEenh mit Joystick/BUS3 ;)

Posts: 190 | Member since: February 2025 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 25, 2025 08:16 PM (#123)  |  Quote Quote   PM PM   E-mail E-mail
Ich bin dir mit der Linux-Umgebung auf den Fersen (hinke aber noch hinterher).

Wir müssen am Ende mal gucken wie wir da eine wirklich runde Anleitung draus machen. Ich füge mal ein paar Notizen an, die mir heute aufgefallen sind. Verbunden mit der Frage, ob das bei dir auch so war (und in den Stichworten oben fehlt) oder ob ich unterwegs irgendwo falsch abgebogen bin... :)
  • Unter /opt nutzt du den Pfad /opt/m68k-toolchain. Den legst du im Schritt 7. an (sudo cp -R m68k-toolchain /opt). Bei mir heißen die Ordner anders, ich habe so aber vermutlich deinen Stand erreicht: cd m68k-elf-toolchain/opt; sudo cp -R m68k-elf /opt/m68k-toolchain
  • Du schreibst es auch schon hier und dort: Aus dem diversen Makefiles müssen die ganzen .EXE raus
  • Dann bekomme ich beim Compilieren der nkc/nkc.h einen Typkonflikt bei "read" und "write": _ssize_t vs. int (gelöst über Anpassungen in m68k-elf/sys-include/sys/config.h; int statt _ssize_t; muss sich später noch zeigen ob das so auch klappt)
  • Beispiel HelloW von oben: Die Pfade im Makefile müssen auf /opt/m68k-toolchain/u.s.w. angepasst werden

Bis hier kann ich nun schon mal die libnkc compilieren. Muss jetzt erst einmal Essen machen. Später weiter...

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
redo
Stammgast
**
ID # 245


  Posted on December 25, 2025 09:18 PM (#124)  |  Quote Quote   PM PM   E-mail E-mail   HP HP
Hallo,
ich bereite den Umstieg ja auch vor auf Linux.
Dazu habe ich das noch gefunden:
https://www.mikrocontroller.net/articles/GCC_M68k
In einem früheren Post von Andi ging es ja umd GCC Version, die wenn sie jünger werden, immer mehr Overhead produzieren, der nicht benötigt wird.
Welche Version setzt ihr gerade für euren Umstieg ein?
VG Jürgen

PS: Bei mir wird es vermutlich Suselinux Leap werden.

-----------------------
Nach vielen Jahren ging es mit dem NKC wieder los.... Sehr spannend!

Posts: 239 | Member since: June 2025 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 25, 2025 09:29 PM (#125)  |  Quote Quote   PM PM   E-mail E-mail
Das ist derzeit eine Version 13.4.1. Also recht neu.

Mal gucken, ob und wie man später ggf. auch ältere Versionen hinbekommt...

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 25, 2025 10:07 PM (#126)  |  Quote Quote   PM PM   E-mail E-mail
So, jetzt sind wir vermutlich ungefähr auf dem gleichen Stand. Meine letzten Schritte (muss alles noch hübsch werden):
  • Installieren der nkclib.a nicht in den Unterordner "m68000" sondern direkt in "lib" (mal wieder eine Anpassung im Makefile)
  • Dann bekam ich auch die Warnungen bzgl. der doppelten Definitionen in der soundchip.h: Hier reicht es, die erste von @Andi in Post #118 genannte Zeile auszukommentieren; die zweite definiert die Adresse und die lasse ich mal stehen

So kann ich nun die HelloW auch erfolgreich compilieren und ausführen. Die Zeichen der Ausgabe erscheinen nur jeweils nach Tastendrücken. Das war oben schon mal Thema glaube ich...

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
andi
Voll in Gange
***
ID # 213


  Posted on December 25, 2025 10:48 PM (#127)  |  Quote Quote   PM PM   E-mail E-mail
Hallo Allerseits,
ich hab mal den GitHub-CoPilot (Programmier-KI) gefragt woran das liegen könnte dass die Ausgabe erst nach einem Tastendruck erscheint. Hier ist die Antwort:
Quote:
Das Verhalten kommt daher, dass newlib stdout standardmäßig gepuffert (voll? oder zeilenbasiert) behandelt. Wenn stdout nicht als TTY erkannt wird, ist es meist voll gepuffert ? Ausgaben bleiben im Buffer und werden erst bei fflush(), bei vollem Buffer, beim \n (nur bei Zeilenpufferung) oder beim Lesen von stdin (weil Streams ?tied? sind) zum Host geschickt. Das erklärt, warum alles erst nach einem Tastendruck sichtbar wird: der getchar()/read?Aufruf führt dazu, dass libc stdout vor dem Lesen automatisch flushed.

Ursache detailliert

newlib/GCC entscheidet Pufferstrategie anhand von isatty(fileno(stdout)). Ist das 0 (kein Terminal), wird stdout typischerweise voll gepuffert.
Viele Retarget?Implementationen (embedded) liefern _isatty/_write/_read selbst. Wird isatty nicht korrekt implementiert oder gibt 0 zurück, passiert Full?Buffering.
libc kann außerdem stdout an stdin ?binden? (tie), so dass ein anschließender Eingabewunsch stdout flushed ? daher erscheint die Ausgabe beim Tastendruck.



isatty fehlt aktuell in meiner Stdlib implementierung darum wird stdio sicherlich gepuffert sein. Ich denke da hat sich das Verhalten des relativ neuen Compilers den ihr da verwendet (gegenüber der alten Version die ich unter Windows habe) ein wenig geändert. Versucht doch mal als W/A den Buffer von stdio abzuschalten (setbuf(stdout, NULL); setbuf(stdin, NULL); )

Posts: 528 | Member since: May 2021 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 25, 2025 11:05 PM (#128)  |  Quote Quote   PM PM   E-mail E-mail
Den setbuf-Kram hatte ich zwischenzeitlich schon mal eingebaut.

Das führte dann direkt nach Start des Programms zum Absturz und wahlweise Warm- oder Kaltstart des NKC :)

Aber ich gebe dir Recht, dass es in die Richtung gehen muss...

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
andi
Voll in Gange
***
ID # 213


  Posted on December 25, 2025 11:09 PM (#129)  |  Quote Quote   PM PM   E-mail E-mail
Hallo,
Oh ich fürchte dann gibt's inkompatiblitäten bei der newlib implementierung mit dem neuen compiler.
Da sind doch einige Generationen dazwischen. Da muss man sich in die Liste der Änderungen einlesen und sich da durchkämpfen.
Hab ich aktuell leider nicht die Zeit dafür

Posts: 528 | Member since: May 2021 | IP address: not saved
retroniker
Stammgast
**
ID # 243


  Posted on December 25, 2025 11:10 PM (#130)  |  Quote Quote   PM PM   E-mail E-mail
Hi tuti,
... du bist ja echt fleißig. Ich komme erst jetzt dazu und habe heute auch nicht mehr viel Zeit - morgen bin ich dann auch erstmal verhindert - vielleicht spät abends dann noch einmal.

Das hört sich zunächst alles so an wie bei mir - auch das mit dem typenkonfikt read / write.
Ich habe noch eine wichtige Info seit meinem Post #96: Ich habe die libnkc.a zu diesem Zeitpunkt noch nicht compilieren können - das ging erst als ich versuchsweise folgende Ordner von der SysGcc-Strukur rüberkopiert habe.
Unter
/opt/m68k-toolchain/m68k-elf
folgende Ordner mit allen Unterordnern und Dateien rüberkopieren:

- include
- lib
- sys-include

Ich habe die alten Ordner einfach umbenannt und stehen gelassen, um zu schauen was passiert.
Damit war es dann möglich die libnkc.a zu compilieren.
(die fpgatimer.h umbenennen nicht vergessen)

Wenn ich dich richtig verstehe, hast du einen anderen Weg gefunden.

Das ist alles was ich noch dazu beitragen kann - du scheinst auf dem Stand zu sein, den ich auch habe.
Ich bin aber zuversichtlich, dass man die letzten Hürden auch noch hinbekommen kann.

Soweit mal Grüße
Daniel

-----------------------
68008/GDP64HS/BootRAM68k/KEYr4/IOEenh mit 2xSD-Karte/Sound3/UHR3/IOEenh mit Joystick/BUS3 ;)

Posts: 190 | Member since: February 2025 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 25, 2025 11:17 PM (#131)  |  Quote Quote   PM PM   E-mail E-mail
Ich korrigiere (nachdem ich es jetzt noch einmal nur mit dem einen oder nur dem anderen setbuf probieren wollte)!

Der Absturz resultierte wohl aus einer fehlerhaften Übertragung des Binary.

Bewirken tun beide setbufs aber nichts. Die Ausgabe erfolgt weiter geblockt.

Mehr probiere ich heute aber nicht mehr...

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
retroniker
Stammgast
**
ID # 243


  Posted on December 25, 2025 11:21 PM (#132)  |  Quote Quote   PM PM   E-mail E-mail
... na ich seh' schon ... Ihr seid da einfach auf einem anderen Level unterwegs :)
(danke auch an andi für's mitdenken)

-----------------------
68008/GDP64HS/BootRAM68k/KEYr4/IOEenh mit 2xSD-Karte/Sound3/UHR3/IOEenh mit Joystick/BUS3 ;)

Posts: 190 | Member since: February 2025 | IP address: not saved
retroniker
Stammgast
**
ID # 243


  Posted on December 25, 2025 11:33 PM (#133)  |  Quote Quote   PM PM   E-mail E-mail
Hi tuti,
bei deinem Post 123 stimme ich Dir bei allen Punkten zu - das passt so (war bei mir auch so). Aber ich habe den JADOS-TEST (test.c) als Versuchs-file genommen - HelloW - sagt mir grad nix.
Die ganzen Abstürze mit Kalt- Warmstart hatte ich seit dem compilieren der libnkc.a nicht mehr.

Schönen Abend

-----------------------
68008/GDP64HS/BootRAM68k/KEYr4/IOEenh mit 2xSD-Karte/Sound3/UHR3/IOEenh mit Joystick/BUS3 ;)

Posts: 190 | Member since: February 2025 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 26, 2025 08:22 AM (#134)  |  Quote Quote   PM PM   E-mail E-mail
Quote by retroniker:
... na ich seh' schon ... Ihr seid da einfach auf einem anderen Level unterwegs :)
(danke auch an andi für's mitdenken)


Bzgl. @Andi stimme ich dir zu. Aber bei mir täuscht du dich. Ich stochere hier auch eher im Nebel. Kann mich aber festbeissen beim Stochern... :D

Quote by retroniker:
HelloW - sagt mir grad nix
Die ganzen Abstürze mit Kalt- Warmstart hatte ich seit dem compilieren der libnkc.a nicht mehr.


Die HelloW ist nur ein printf. Hatte @smed oben irgendwo mal angehängt und ich war nur zu faul, selbst zu tippen. :rolleyes:

Der Absturz lag am Ende nicht am Compiler. Die Datei war wohl beim Übertragen kaputt gegangen.

Heute steht erst einmal Verwandten-Besuch an. Mal gucken ob/wann ich später nochmal an den Rechner komme.

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 26, 2025 10:31 AM (#135)  |  Quote Quote   PM PM   E-mail E-mail
Hat mir keine Ruhe gelassen und ich wollte mal schnell einen Minimalstversuch mit verschiedenen Optimierungsleveln machen.

Habe das aber sehr schnell abgebrochen. Schon mein erster Versuch mit "-O0" compilierte gar nicht mehr durch was mein Vertrauen sehr schmälerte (ohne das weiter untersucht zu haben).

Vielleicht wird es ein besserer Ansatz sein, lieber gleich die Version, die auch in @Andi s SysGCC steckt, zu verwenden? Laut der XML in der SysGCC.zip wohl eine 4.8.0? Dann hätten wir eine gemeinsame und nicht zu moderne Basis. Ich muss da mal drauf rumdenken.

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 26, 2025 03:04 PM (#136)  |  Quote Quote   PM PM   E-mail E-mail
Kurzes Blitzlicht auf meine Tätigkeiten neben den Vorbereitungen der Familienzusammenkunft:

Im Windows-SysGCC steckt eine Version 4.8.0 des GCC (und vermutlich 2.0.0 der Newlib).

Der Versuch, einen GCC 4.8.0 mit dem aktuellen GCC (13.3.0) zu compilieren schlägt mit Fehlern und noch mehr Warnungen fehl.

Mit einer parallel installierten Version 4.8.5 des GCC unter Linux Mint kann ich den 4.8.0 zumindest schon mal übersetzen. So ganz sauber ist diese Installation des 4.8.5 wohl nicht.

Was Newlib (noch aktuell) und die Delta-Patches dazu sagen? Das wird sich noch zeigen müssen... :confused:

Und ob das am Ende überhaupt was an dem printf-Problem ändert sowieso... :eek:

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 26, 2025 08:40 PM (#137)  |  Quote Quote   PM PM   E-mail E-mail
Also...

Ich hänge hier gerne mal meine Mitschrift der Installation einer Crosscompiler-Umgebung mit der Version 4.8.0 an:

Spickzettel.txt

Funktioniert so auch. Am Ende verhält sich das Ding aber genauso wie das was wir vorher schon hatten. :(

Daher mache ich die Mitschrift jetzt auch nicht "schön". Da sind einige Schleifen drin, die man noch optimieren könnte.

In dieser Version steckt allerdings noch eine Newlib 4.1.0 drin und nicht die 2.0.0 (wie wohl in der SysGCC-Version unter Windows).

Mein nächster Versuch wird in die Richtung gehen, die ältere Newlib einzubauen.

Wenn das auch nicht klappt, wird in die Untiefen der Newlib bzw. der newlib_stubs abzutauchen sein...

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 26, 2025 11:26 PM (#138)  |  Quote Quote   PM PM   E-mail E-mail
Ich habe den Newlib-Kram erst einmal (noch) nicht weiter verfolgt. Erscheint mir sehr komplex.

Stattdessen habe ich ein wenig mit verschiedenen kleinen Beispielen rumprobiert und Folgendes festgestellt (mit meiner aktuellen 4.8.0-Crosscompiler-Version):

fprintf(stdout, "Tralala\n\r");
erzeugt eine zeichenweise Ausgabe, bei der das nächste Zeichen immer durch einen Tastendruck kommt.

fprintf(stderr, "Tralala\n\r");
bringt die Ausgabe sofort ohne Tastendruck. Wie man es eben erwartet.

Alles andere (puts, iprintf) geht halt immer auf stdout und verhält sich daher auch so komisch!

Mit dieser Erkenntnis beschließe ich den heutigen Abend... :)

Nachtrag: setbuf(stdout, NULL); bewirkt übrigens weiterhin nichts. Aber hier liegt der Hase im Pfeffer! Vielleicht benötigen wir mein 4.8.0-Gebastel am Ende gar nicht?

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
andi
Voll in Gange
***
ID # 213


  Posted on December 27, 2025 01:53 AM (#139)  |  Quote Quote   PM PM   E-mail E-mail
Hallo,

hab mich heute mal mit dem 68k-GCC unter Linux gespielt.
Hab den GCC 6.3.0 bei mir aufgesetzt. Damit compiliert der Jados_test nun einwandfrei und läuft auch (fast) genauso wie der unter windows compilierte. Das Phänomen mit der Ausgabe die nur nach einem Tastendruck erscheint hab ich da nicht. Lediglich der Cursor erscheint bei der Linux-Version nicht. Das muss ich noch weiter untersuchen, versteh ich den Grund dafür grad nicht. Das unter Linux compilierte 68k file hat 46kB, das von Windows (GCC 4.8.0) hat ca. 31kB. Das liegt an den erheblich umfangreicheren Libraries.
Ich stell jedenfalls mal in nächster Zeit ein Package zusammen.

Posts: 528 | Member since: May 2021 | IP address: not saved
tuti
Voll in Gange
***
ID # 225


  Posted on December 27, 2025 08:24 AM (#140)  |  Quote Quote   PM PM   E-mail E-mail
Hi, Andi.

Das klingt prima!!! Muss halt doch der Profi ran... :D

Welche Newlib-Version hast denn du da eingebaut?

-----------------------
Definitiv sind Frösche und Himbeeren am besten!

Posts: 588 | Member since: July 2022 | IP address: not saved
andi
Voll in Gange
***
ID # 213


  Posted on December 27, 2025 01:56 PM (#141)  |  Quote Quote   PM PM   E-mail E-mail
Hallo,

ich hab GCC in der Version 6.3.0 und newlib 3.3.0
Damit kann ich meine Programme (und auch die nkclib) alle anstandslos compilieren. Diese werden lediglich etwas größer, laufen aber einwandfrei bei mir. Ich hab aktuell den compiler und das restliche Framework (nkclib etc.) in getrennten Verzeichnissen. Ich merge das noch zusammen in ein gemeinsames Verzeichnis, zippe das dann und stell das dann auf github. Hoffe dass das dann auch bei euch läuft (Ich habe Linux Mint 21.3 bei mir laufen).

Posts: 528 | Member since: May 2021 | IP address: not saved



| https://nkcforum.de | Board rules | Privacy policy


Tritanium Bulletin Board 1.8
© 2010–2021 Tritanium Scripts


Site created in 0.032383 seconds
Processed 18 files
gzip compression enabled
2495.33 KiB memory usage