Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: sfan am 21. March 2011, 16:29

Titel: Kernel in Pascal?
Beitrag von: sfan am 21. March 2011, 16:29
Hallo Leute,

Ich habe mir mal http://www.lowlevel.eu/wiki/Pascal (http://www.lowlevel.eu/wiki/Pascal) angeschaut und war neugierig wie so ein Pascal Kernel funktioniert.
Ich habe alles so wie es ist auf die Dateien kernel.pas,sytem.pas,boot.asm(von prt0.asm) verteilt.
Wenn ich den Kernel baue kommt:
kernel.pas(3,5) Fatal: Cannot find system type "HRESULT". Check if you use the correct run time library.Hat jemand Rat wie ich an dem Typ HRESULT komme?

Sfan
Titel: Re:Kernel in Pascal?
Beitrag von: DerHartmut am 21. March 2011, 16:55
Welchen Compiler benutzt du? Hast du auch angegeben keine Runtime-Lib zu benutzen?
Titel: Re:Kernel in Pascal?
Beitrag von: sfan am 21. March 2011, 17:00
Welchen Compiler benutzt du?
FPC

Hast du auch angegeben keine Runtime-Lib zu benutzen?
Ich weiss es nicht
meine Makefile ist:
all:
nasm -f elf boot.asm
fpc kernel
ld -T text=0x100000 *.o -o kernel


Sfan
Titel: Re:Kernel in Pascal?
Beitrag von: PNoob am 22. March 2011, 16:39
da du fpc ohne weitere Parameter aufrufstvermute ich das da der Fehler liegt
Titel: Re:Kernel in Pascal?
Beitrag von: sfan am 22. March 2011, 17:45
da du fpc ohne weitere Parameter aufrufst vermute ich das da der Fehler liegt
Ich auch, aber:
Zitat von: Wiki
Anschließend müssen diese drei Dateien kompiliert/assembliert und gelinkt werden. Das ist der Punkt, der mir noch nicht so ganz gefällt, weil ich ld eigentlich nicht von Hand aufrufen müssen will, um text=0x100000 setzen zu können.
nasm -felf prt0.asm
fpc kernel
ld -Ttext=0x100000 *.o -o kernel
So weit ich weiß wurde der Code von taljeth verfasst.

Sfan
Titel: Re:Kernel in Pascal?
Beitrag von: kevin am 25. March 2011, 19:37
Das ganze war für eine ältere FPC-Version. Aktuelle Versionen brauchen anscheinend etwas mehr Magie. In die system.pas folgendes zusätzlich in den interface-Teil einbauen:
type
    hresult = longint;

Außerdem müssen noch zwei leere Units fpintres.pas und si_prc.pas angelegt werden (vielleicht kann man die auch deaktivieren, hab ich nicht geprüft). Also jeweils irgendwie sowas:
unit si_prc;

interface

implementation

end.

Am geschicktesten ist es aber wahrscheinlich, kernel.pas nicht als program, sondern als unit zu deklarieren und dann das Linken von Hand mit ld zu machen, so wie man es in C auch macht.
Titel: Re:Kernel in Pascal?
Beitrag von: sfan am 26. March 2011, 11:20
Am geschicktesten ist es aber wahrscheinlich, kernel.pas nicht als program, sondern als unit zu deklarieren und dann das Linken von Hand mit ld zu machen, so wie man es in C auch macht.
Ich habe kernel jetzt zu einer unit gemacht.
So weit geht es. :)
Allerdings meckert jetzt ld:
boot.asm:(.text+0x6): undefined reference to `KERNEL_PASCALMAIN'
Aber objdump -d kernel.o sagt:
kernel.o:     file format elf32-i386


Disassembly of section .text:

00000000 <KERNEL_PASCALMAIN>:
   0: 55                   push   %ebp
   1: 89 e5                 mov    %esp,%ebp
   3: 83 ec 04             sub    $0x4,%esp
   6: c7 45 fc 00 80 0b 00 movl   $0xb8000,-0x4(%ebp)
   d: 8b 45 fc             mov    -0x4(%ebp),%eax
  10: c6 00 23             movb   $0x23,(%eax)
  13: c9                   leave  
  14: c3                   ret    
...


Sfan
EDIT:
So sieht kernel.pas jetzt aus:unit kernel;

interface

type tScreen = array[1..25, 1..80] of record
    c: char;
    attr: byte;
end;
 
implementation

procedure PASCALMAIN();
var
    screen: ^tScreen;
begin
    screen := Pointer($B8000);
    screen^[1, 1].c := '#';
end;

end.
Titel: Re:Kernel in Pascal?
Beitrag von: kevin am 26. March 2011, 18:24
Pack mal noch ein procedure PASCALMAIN; in den interface-Teil, sonst wird es wahrscheinlich nicht global.
Titel: Re:Kernel in Pascal?
Beitrag von: sfan am 28. March 2011, 15:07
Pack mal noch ein procedure PASCALMAIN; in den interface-Teil, sonst wird es wahrscheinlich nicht global.
Danke für den Hinweis!
Mit viel googlen hab ich mir einen Kernel zusammengebaut.
http://osdev.bplaced.net/paste.php?id=5 (http://osdev.bplaced.net/paste.php?id=5)
Nur ein "qemu -kernel kernel" enttäuscht mich.


Sfan
Titel: Re:Kernel in Pascal?
Beitrag von: sfan am 28. March 2011, 15:40
Ich habe den Wiki-Artikel über Pascal mal überarbeitet.
Der entscheidene Code bei dem Kernel ist gleich geblieben.
Sieht man auch bei http://www.lowlevel.eu/w/index.php?title=Pascal&action=historysubmit&diff=9636&oldid=5796 (http://www.lowlevel.eu/w/index.php?title=Pascal&action=historysubmit&diff=9636&oldid=5796).
Also, wenn es nicht funktioniert:
Nicht meine Schuld  :wink:


Sfan