16 Bit Programm kompilieren



  • Ich hab schon öfter mal ein kleines Betriebssystem in Assembler geschrieben
    (nich mehr als HelloWorld)

    nun möcht ih das mal mit C machen
    am einfachsten wird sein nen Assembler BootLoader zu machen, der dann den C-Teil aufruft
    aber wie kann ich C 16 Bit kompilieren?
    das muss ja irgendwie gehen, dos braucht ja auch 16 Bit

    natürlich könnte man auch einfach in den Protected Mode wechseln
    aber ich will das eigentlich erstmal im Real-Mode ausprobieren

    Ich find aber nur Tutorials in denen der C Teil 32 Bit compiliert wird
    und unter Dos zu programmieren hab ich auch keine Lust



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum Compiler-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ich hab jetzt bei gcc was gefunden:

    -b <machine>

    damit kann man einstellen für welchen Prozessor das ganze kompiliert werden soll
    als Beispiel steht aber nur arm-elf dran
    wie sag ich ihm jetzt dass das ein 16-Bit Prozessor ist?



  • such mal in der FAq nach den links fürs OS proggen irgendwo wird eins in C mit dem GCC und dem LD geproggt ansonstenm guck dir mal den 16-bit port DJGPP an..
    www.delorie.com/djgpp..glaub ich jedefalls

    Mfg SHade37337
    p.s. der Gcc is im netz verdammt gut dokumentiert... alsoi mal Googeln oder in den wikis der GNU/FSF/SF.net usw schauen...



  • gcc kann ja gar kein 16 bit kompilieren also fällt der mal sowiso raus
    und in diesen ganzen C Kernel FAQs gehts nur darum mit Assembler in den 32 Bit Modus (Protected Mode) zu schalten um dann den C Kernel zu starten

    DJGPP hab ich, aber wi soll man mit dem 16 Bit kompilieren?
    der benutzt ja auch gcc



  • ich würd nen alten borlander nehmen

    turbo c o.ä.

    hier:
    http://bdn.borland.com/article/0,1410,20841,00.html



  • watcom
    oder digital mars
    z.b.:entwickeln unter win32 - compilieren für win16, win32, os2 und weitere

    nur 16bit pacific c, borland museum turbo c 2.0 und cpp 1.0

    dann gibt es noch schulversionen im netz turbo c++ 3.0 oder 3.1

    mfg f.-th.



  • watcom hab ich hier grade
    das dumme ist das Ding spuckt nur .obj Dateien aus
    die ich dann aber mit ld linken müsste
    (ich brauch ein bestimmtes format das nur ld hat "flat format binary" oder so)

    aber ld nimmt meine .obj Dateien nicht (die werden auch nicht unterstützt)
    kann man die vielleicht umwandeln?

    turbo c hatte ich schon, muss nochmal nachgucken was da schief gelaufen is
    aber wegen irgendwas ging der auch nich



  • ich hab jetzt alle möglichen Compiler ausprobiert
    turbo c, watcom, usw.

    die Dinger produzieren alle .obj Dateien
    aber die nimmt ld nicht

    kann man ld irgendwie dazu bringen die zu nehmen?
    irgendwie umwandeln oder so?

    ld ist leider der einzige Linker der "flat format binary" erzeugen kann
    und das brauch ich



  • ich hab jetzt noch nen Linker gefunden, der "flat format binary" erzeugen kann:
    JLoc

    allerdings ist die downloadseite schon lange down
    hat den vielleicht jemand? => PN



  • wie wars mit GNU GCC als compiler??
    GNU AS86 und ich glaub Nasm produziert auch akzeptable objectdatein in flat**binaries...

    Mfg Shade37337



  • hast du mal gelesen was ich geschrieben hab?

    gcc unterstützt keine 16 Bit
    und nasm hat keinen Linker, also was bringt mir das für C?

    weiß jetzt sogar das Problem
    ld untersützt keine 16 Bit, ich dachte das wär beim Linker egal isses aber nich





  • Ich hab jetzt endlich eine Möglichkeit gefunden mit gcc 16 Bit Code zu erzeugen:
    http://www.tldp.org/HOWTO/Assembly-HOWTO/gas.html

    Binutils (2.9.1.0.25+) now fully support 16-bit mode (registers and addressing) on i386 PCs. Use .code16 and .code32 to switch between assembly modes.

    Also, a neat trick used by several people (including the oskit authors) is to force GCC to produce code for 16-bit real mode, using an inline assembly statement asm(".code16\n"). GCC will still emit only 32-bit addressing modes, but GAS will insert proper 32-bit prefixes for them.

    allerdings macht gcc da nicht mit, ich hab versucht folgenden Quellcode zu kompilieren:

    __asm__ (".code 16\n");
    
    int main()
    {
    }
    

    aber ich bekom immer die gleiche Fehlermeldung:

    Assembler messages:
    Error: unknown pseudo-op: `.code'

    Ich dachte ich könnte jetzt endlich 16 Bit Code machen und dann will das Ding nich

    EDIT:

    okay hat sich erledigt
    es muss

    __asm__ (".code16\n");
    

    und nicht

    __asm__ (".code 16\n");
    

    heißen


Anmelden zum Antworten