Autor Thema: C in Real-Mode  (Gelesen 8427 mal)

bscreator

  • Gast
Gespeichert
« am: 14. November 2009, 09:28 »
Hi,

kann ich einen C-Kernel eigentlich auch im Real-Mode starten ?

Grüsse,
bsc

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 14. November 2009, 09:45 »
Ja, theoretisch schon. C sagt nichts über die Wortbreite oder Speicherschutz aus.

Du brauchst nur einen C-Compiler, der auch 16-Bit-Code ausgeben kann; gcc kann das nicht wirklich. Falls du unter Windows arbeitest, wird Borland Turbo C (ein DOS-Compiler eben und daher Real Mode) oft genannt. Unter Linux gibt es zum Beispiel bcc, der oft im Paket dev86 zu finden ist.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 15. November 2009, 11:14 »
Aber warum kann ich keinen "normalen" C-Compiler, wie GCC nehmen und einen kleinen Kernel programmieren und diesen dann nach dem Bootsektor "anspringen" ?
Liegt es daran, dass man im Real-Mode nur aufgrund der 16-Bit breiten Register auch nur 16-Bit-Code ausführen kann ?

Nochwas:
Gibts auch nen kostenlosen 16-Bit C-Compiler für Windows ?
Danke,
bsc
« Letzte Änderung: 15. November 2009, 11:59 von bscreator »

XanClic

  • Beiträge: 261
    • Profil anzeigen
    • github
Gespeichert
« Antwort #3 am: 15. November 2009, 12:25 »
Man kann im Real Mode auch 32-Bit-Register verwenden, das ist nicht das Problem. Das Problem ist nur, dass der Real Mode erstens den Speicher anders als der Protected Mode anspricht (logisch) und dass "normale" Compiler für den Protected Mode sowas natürlich nicht berücksichtigen. Zweitens ist es im Real Mode allgemein so, dass man nur 16-Bit-Code ausführen kann, es ist eben ein 16-Bit-Modus.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 15. November 2009, 12:37 »
Aber warum kann ich keinen "normalen" C-Compiler, wie GCC nehmen und einen kleinen Kernel programmieren und diesen dann nach dem Bootsektor "anspringen" ?
Weil gcc einen Codegenerator für Protected-Mode- und Long-Mode-Code hat, aber nicht für den Real Mode. Vor allem fehlt Unterstützung für Segmentierung. Und ohne die wird es im Real Mode ein bisschen schade...

Zitat
Gibts auch nen kostenlosen 16-Bit C-Compiler für Windows ?
Wie gesagt, Borland Turbo C. Das gibt es mittlerweile ganz offiziell auf deren Homepage als Freeware zum Runterladen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 15. November 2009, 13:58 »
Hallo,


Der OpenWatcom-Compiler könnte auch eine Alternative sein. Der unterstützt Real-Mode, sogar mit 32Bit-Befehlen (also auf 386 und höher), Protected-Mode ohne aber auch mit Segmentierung (FAR-Pointer sind leider etwas umständlich) und alles mögliche andere auch. Zusätzlich gibts ne brauchbare IDE für Windows.

Das Problem heutiger Compiler ist das diese ein Flat-Memory-Model annehmen und entsprechenden Code generieren, der Real-Mode ist aber eben nicht flach sondern segmentiert  und daher ist es schwierig einen solchen Compiler für den Real-Mode umzustricken.

Der BCC ist übrigens wirklich gut für nur Real-Mode.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

 

Einloggen