C Crossentwicklung - Teil 1: Textmode

  • Links:

    http://vincent.riviere.free.fr/soft/m68k-atari-mint/

    https://tho-otto.de/crossmint.php <- win32

    https://github.com/freemint/libcmini

    https://github.com/paulwratt/tosemu


    Ich arbeite unter Linux Mint 20.1 mit Hatari 2.3.1 als Emulator.

    Installieren mit:


    Die so übersetzen Programme werden allerdings ziemlich groß:


    ich@ich-Lenovo-Y50-70:~/Atari/C$ ./b hello

    -rwxrwxr-x 1 ich ich 132422 Aug 29 10:01 hello.tos <- Ohne strip

    -rwxrwxr-x 1 ich ich 114675 Aug 29 10:01 hello.tos <- Gestripped


    ich@ich-Lenovo-Y50-70:~/Atari/C$ ./x hello

    -rwxrwxr-x 1 ich ich 2722 Aug 29 10:01 hello.tos -< mit libcmini compiliert


    Deshalb habe ich auch noch die libcmini probiert mit guten Ergebnissen.


    Und zu guter Letzt gibt es mit tosemu sogar noch eine Emu-Wrapper Programm, womit man diese Programme für Atari ST

    dann direkt unter Linux ausführen kann - ohne erst Hatari anwerfen zu müssen ;)


    Im ZIP ist alles außer den m68k-atari-mint Tools/Compiler enthalten, inkl. ein paar kleinen Beispielprogrammen.

    Das 'b' Script nutzt NICHT die libcmini. Das 'x' Script nutzt die libcmini.


    Viel Spaß.

    Da oben auch eine ncurses lib zur Verfügung steht, sollten sich auch solche Programme compilieren lassen.


    VG Peter


    PS: Ich plane mind. noch einen Teil 2 mit SDL.

  • Ich hatte vor einem Jahr auch mal mit dem cross gcc herumgespielt - hauptsächlich mit den Versionen von Thorsten Otto, da es einfach die aktuelleren GCC Versionen mit den neueren unterstützten C++ Sprachfeatures sind. Mir ging es auch wirklich um modernes C++ und nicht um reines C.


    Dazu ein Hinweis von meiner Seite, falls jemand in ähnliche Probleme reinläuft: Die GCC-Version 10.1.0 (getestet mit gcc-10.1.0-mint-bin-cygwin64.tar.xz) auf Thorstens Seite hat leider einen Bug! Konstruktoren und Destruktoren von globalen Objekten werden nicht aufgerufen. Testbar ist das mit dem folgenden Code-Schnipsel


    Die erwartete Ausgabe vom Schnipsel wäre:

    Code
    ctor called!
    main reached!
    destructor called!

    Tatsächlich gibt das Kompilat jedoch nur die "main reached!" Zeile aus.

    Bei Thorstens GCC Version 9.3.1 (getestet mit "gcc-9.3.1-mint-bin-cygwin64.tar.xz") funktioniert das hingegen noch korrekt.


    Insgesamt waren meine Erfahrungen ein wenig ernüchternd. Mein Ziel war eigentlich hardwarenahe Programmierung unter modernem C++ für einen Standard 1040er mit 1MB Ram unter TOS mit möglichst wenig Bibliotheks-overhead. Die Mintlib fand ich unglaublich aufgebläht. Libcmini sah nach einem guten Kompromiss aus. Aber ich hab's damals lt. meiner Erinnerung nicht geschafft gehabt, selbst relativ triviale C++ Programme damit kompiliert zu bekommen.

    PeterSieg hast du das irgendwie hinbekommen?


    Experimentiert hatte ich auch mit compiler settings wie "-nostdlib -lgcc", aber dann fehlen gleich beim linken so völlige basics wie Implementierungen von new- und delete-operatoren und solche gcc interna wie __cxa_throw_bad_array_new_length()...


    Später hab ich dann noch das Projekt hier gefunden: atari-gcc-startup

    Aber damit herumgespielt hab ich dann nicht mehr...