Autor Thema: OS in Pascal  (Gelesen 9289 mal)

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« am: 03. November 2009, 19:01 »
Hallo an alle!

Ich weiß es gibt Tutorials zur OS-Programmierung in Pascal, aber die sind alle recht kurz  :|
Hat hier jemand schon ein kleines OS in Pascal programmiert, dass er mir zur Verfügung stellen könnte, um daran rumzuspielen? Es soll nicht groß sein, da ich sonst wahrscheinlich den Überblick verliere.

Danke schon mal im Voraus an alle, die antworten

mfg AUSTRIA

Cool-Andy

  • Gast
Gespeichert
« Antwort #1 am: 03. November 2009, 19:25 »
Ich weiß ja nicht ob folgender Link so was ist, was du suchtst und ich versteh auch kein Wort Pascal, aber vielleicht hilft dir das:

http://wiki.osdev.org/Pascal

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 03. November 2009, 19:43 »
Also ich hätte ja noch einen Pascal-Kernel rumliegen, aber der stammt aus meinen OS-Dev-Anfangszeiten und ist sicher noch kaputter als alles andere, was ich der Öffentlichkeit so zugemutet habe. Viel mehr als ein bisschen Multiboot-Info verarbeiten und Speicherverwaltung macht der aber nicht.

Letztendlich wirst du nicht darum herumkommen, C soweit zu lernen, dass du es verstehen kannst. Die Mehrheit spricht nunmal C und da solltest du nicht ausgeschlossen bleiben. Wenn du dann C lesen kannst, kannst du den Code auch ohne weiteres nach Pascal übersetzen.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 03. November 2009, 19:45 »
C lesen hab ich kein Problem mit, aber ich würde gerne einfach in ein kleines funktionsfähiges, in Pascal geschriebenes OS schauen können. Es soll nicht mehr können als einfach ein Zeichen auf den Bildschirm malen.

mfg AUSTRIA

PS: Übrigens danke für den Link, werd ich mir mal anschauen :)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 03. November 2009, 21:59 »
Wenn's nur ein Zeichen auf den Bildschirm sein soll - warum in die Ferne schweifen, ist das Gute doch so nah? ;)

http://lowlevel.brainsware.org/wiki/index.php/Pascal
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 05. November 2009, 16:45 »
http://wiki.osdev.org/Pascal
Zitat
ld -Tlinker.script -o kernel.obj stub.o kernel.o multiboot.o system.o console.o

Das check ich nicht. Was ist ld für ein programm?
Bis hier hin bin ich gekommen.

mfg AUSTRIA

PS: den Wiki-Artikel hier habe ich schon gelesen, werd ich auch mal ausprobieren :)

Cool-Andy

  • Gast
Gespeichert
« Antwort #6 am: 05. November 2009, 17:19 »
Also, in gcc ist "ld" ein Programm, mit dem man verschiedene Binärcodes zusammenfügt, wie das in Pascal ist, hab ich keine Ahnung!

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 05. November 2009, 17:42 »
ld ist der linker und teil der binutils(nicht gcc).
Er verbindet dir die einzelnen Objektdateien(*.o) - unter bestimmten Regeln(linker.script) - zu einer (kernel.obj) Datei.


„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 05. November 2009, 18:10 »
OK, dann werd ich mich im gcc-ordner mal nach ld umschauen.
Ich benutze Windows dafür. Heißt das Prog da vielleicht anders?

mfg AUSTRIA

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 05. November 2009, 20:02 »
Wenn du nen "normalen" Port hast, eher nicht. Und vorhanden sein sollte es, ich wüsste nicht wie nen gcc dir sonst was ausführbares produzieren sollte ;)
Was verwendest du denn alles für deine Entwicklungsumgebung?
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 05. November 2009, 20:03 »
Entwicklungsumgebung: Notepad++, NASM, FPC 2.2.2, gcc hab ich mir eben gezogen, Windows 7 RC

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 05. November 2009, 20:16 »
Welchen GCC? Also woher haste den?
Dieser Text wird unter jedem Beitrag angezeigt.

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 06. November 2009, 14:01 »
gcc 4.4.2
Hab ich gerade auf meiner externen gefunden. Das ganze zu laden ist ja ne Ewigkeit. Ist n riesiges Archiv.

mfg AUSTRIA

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 06. November 2009, 18:00 »
Jetzt kommt mir bei ld folgende Meldung:
Zitat
ld: cannot find .\fpc\source\rtl\units\i386-linux\si_prc.o

Weiß nichts mit ihr anzufangen :S
Hab bis jetzt alles so gemacht wies im Tutorial steht.
Ist das weil ich Windows verwende?

mfg AUSTRIA

DaCodaaa

  • Gast
Gespeichert
« Antwort #14 am: 07. November 2009, 19:57 »
ld teilt dir damit unmissversändlich mit, dass si_prc.o nicht in dem ordner source\rtl\units\i386-linux vorhanden ist. Ich glaube, dass du keinen Pfad zu der o-datei angegeben hast und ld daher im Stammordner sucht. :wink:

AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 07. November 2009, 20:06 »
Ich hab davor aber mit chdir in den Ordner in dem die OS-Dateien liegen gewechselt. Es gibt keine si_prc.o bei den OS-Dateien und wird auch nirgens benötigt :S

kann das mal jemand von euch versuchen zu kompilieren. Ist das Beispiel vom Link zum osdev-wiki in einer der ersten antworten.

mfg AUSTRIA

DaCodaaa

  • Gast
Gespeichert
« Antwort #16 am: 07. November 2009, 20:19 »
Warum lässt du ld dann si_prc.o mitlinken?!? :?

an deiner Stelle würde ich das Organisieren. Z.B. einen Ordner wo du deine Quelldateien hast und einen Ordner wo alle Obj Dateien reinkommen. Dann ein Linkerskript ungefähr so:

OUTPUT_FORMAT(elf32-i386)
INPUT(     o-Dateien mit vollem Pfad und durch leerzeichen getrennt     )
OUTPUT(     Datei die rauskommen soll also *.bin oder so (mit Pfad)     )
ENTRY( Symbol im Code das zuerst aufgerufen werden soll)

phys = 0x00100000;

SECTIONS
{
kernel_start = .;
.text phys : AT(phys)
{
code = .;
*(.text)
. = ALIGN(4096);
code_end = .;
}
.data : AT(phys + (data - code))
{
data = .;
*(.data)
. = ALIGN(4096);
data_end = .;
}
.rodata : AT(phys + (rodata - code))
{
rodata = .;
*(.rodata)
. = ALIGN(4096);
rodata_end = .;
}
.bss : AT(phys + (bss - code))
{
bss = .;
*(COMMON)
*(.bss)
. = ALIGN(4096);
bss_end = .;
}
  kernel_end = .;
}

und dann noch ne Batch datei, die alles Kompiliert assembliert, linkt und wasweißichnoch damit anstellt. Ungefähr so:
gcc -Wall -Werror ...  Pfad zum Quellcode ordner\Name.c -o Pfad zum Objekt ordner\Name.o

...

ld ld -T Pfad zum Linkerscript\link.ld


AUSTRIA

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 07. November 2009, 21:09 »
vielen Dank! Daran könnte das Problem liegen :D

mfg AUSTRIA

 

Einloggen