Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - iUse

Seiten: [1]
1
Lowlevel-Coding / Re: IDT - Bei Exception Reset [BOCHS]
« am: 19. August 2009, 12:35 »
Super!
Danke ;)
2
Lowlevel-Coding / Re: IDT - Bei Exception Reset [BOCHS]
« am: 19. August 2009, 12:31 »
Aber wie krieg ich jetzt die unschoenen Warnings weg ?
3
Lowlevel-Coding / Re: IDT - Bei Exception Reset [BOCHS]
« am: 19. August 2009, 12:28 »
Nein, habs total vergessen ^^
Danke ... ich werde es jetzt testen :P

Edit: Es geht :P

4
Hey,

wenn ich eine Exception hervorrufe (z.B. eine Divison durch Null) gibt
es in Bochs einen Reset. Ich kann den Fehler einfach nicht finden.  :roll:

Beim Compilen gibt es folgende Warnings:

Welcome to the iUse BuildCreatr v0.1 RC1


        » Initializing the enviroment
        » Compiling the ASM-Code
        » Compiling the C-Code
In file included from main.c:5:
inc/gdt.c: In function 'gdt_install':
inc/gdt.c:59: warning: assignment makes integer from pointer without a cast
In file included from main.c:6:
inc/idt.c: In function 'idt_install':
inc/idt.c:55: warning: assignment makes integer from pointer without a cast
        » Linking the  Files into one
        » Creating ISO with GRUB and mkisofs

Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 922
Total directory bytes: 4704
Path table size(bytes): 34
Max brk space used 4000
128 extents written (0 Mb)


FINISH!

Der Compiler ist ein GCC-elf-Crosscompiler V.4.4.0 unter Windows
Unter Linux tritt aber der selbe Fehler auf.

Hier das LOG-File von Bochs
[...]

00056321310e[CPU0 ] interrupt(): gate descriptor is not valid sys seg (vector=0x00)
00056321310e[CPU0 ] interrupt(): gate descriptor is not valid sys seg (vector=0x08)
00056321310i[CPU0 ] CPU is in protected mode (active)
00056321310i[CPU0 ] CS.d_b = 32 bit
00056321310i[CPU0 ] SS.d_b = 32 bit
00056321310i[CPU0 ] EFER   = 0x00000000
00056321310i[CPU0 ] | RAX=0000000000000000  RBX=00000000000329c0
00056321310i[CPU0 ] | RCX=00000000001fffc0  RDX=0000000000000000
00056321310i[CPU0 ] | RSP=00000000001fffd0  RBP=00000000001fffe8
00056321310i[CPU0 ] | RSI=0000000000026ac0  RDI=0000000000101560
00056321310i[CPU0 ] |  R8=0000000000000000   R9=0000000000000000
00056321310i[CPU0 ] | R10=0000000000000000  R11=0000000000000000
00056321310i[CPU0 ] | R12=0000000000000000  R13=0000000000000000
00056321310i[CPU0 ] | R14=0000000000000000  R15=0000000000000000
00056321310i[CPU0 ] | IOPL=0 id vip vif ac vm RF nt of df if tf sf ZF af PF cf
00056321310i[CPU0 ] | SEG selector     base    limit G D
00056321310i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D
00056321310i[CPU0 ] |  CS:0008( 0001| 0|  0) 00000000 ffffffff 1 1
00056321310i[CPU0 ] |  DS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
00056321310i[CPU0 ] |  SS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
00056321310i[CPU0 ] |  ES:0010( 0002| 0|  0) 00000000 ffffffff 1 1
00056321310i[CPU0 ] |  FS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
00056321310i[CPU0 ] |  GS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
00056321310i[CPU0 ] |  MSR_FS_BASE:0000000000000000
00056321310i[CPU0 ] |  MSR_GS_BASE:0000000000000000
00056321310i[CPU0 ] | RIP=00000000001009e8 (00000000001009e8)
00056321310i[CPU0 ] | CR0=0x60000011 CR2=0x0000000000000000
00056321310i[CPU0 ] | CR3=0x00000000 CR4=0x00000000
00056321310i[CPU0 ] 0x00000000001009e8>> idiv eax, dword ptr ss:[ebp+0xfffffff4] : F77DF4
00056321310e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
00056321310i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called
00056321310i[CPU0 ] cpu hardware reset

[...]

Das OS wird von GRUB schon in den Protected Mode geladen.

Hier der Link zum SVN (hier koennt ihr den Code finden,waere xtrem viel Copy&Paste :wink:):
klick

Ich kann den Fehler einfach nicht finden >.<
Wie soll ich jetzt vorgehen ?

Nach dem Laden von GDT und IDT gibt es keinen Reset.
Erst wenn eine Exception auftritt (in dem Fall Devision durch NULL).

Irgendwelche vorschlaege ?

Danke im Vorraus

iUse

5
Lowlevel-Coding / Re: Probleme RM VESA initialisierung
« am: 06. July 2009, 06:53 »
thx :)
6
Lowlevel-Coding / Re: Probleme RM VESA initialisierung
« am: 21. June 2009, 23:01 »
Hey :)
Habe gerade den PC gewechselt und das ganze kompiliert ..
Funktioniert 1a ...

Aber wegen vm86:

Kennt jmd. ein gutes Tut oder hat jmd. einen Beispielcode zum
switchen in den vm86 (virtual 8086 mode) + initialisieren von vesa (vbe)?
7
Lowlevel-Coding / Re: Probleme RM VESA initialisierung
« am: 21. June 2009, 22:50 »
Ja, der Code zum RM-Switchen ist zwar nicht sonderlich "robust",
aber es funktioniert :)

Hmm ...
Wir fahren ja mehrgleisig ...
Ich versuche z.B. Memory-Managment und die CDI u implementieren ;)
(Der Code oben ist natuerlich noch laengst nicht alles, sondern nur ne art Experiment fuer VESA ;) )



9
Lowlevel-Coding / Re: Probleme RM VESA initialisierung
« am: 21. June 2009, 22:41 »
kk .. mal mit 0x004f probieren ... :)
doch nicht 0x4f00 .. oder ?
Vesa INT 10 ist 0x004f
10
Lowlevel-Coding / Re: Probleme RM VESA initialisierung
« am: 21. June 2009, 22:35 »
Hey ...
Aber ich habe extra -masm=intel als Parameter gewaehlt um die Intel-ASM-
Syntax zu nutzen ... Deshalb sollte es doch auch mit hex funktionieren ...
Oder etwa nicht ?


Ja, spiderschwein hat die Vesa Bios Extension (VBE) gemeint.

Wie muss die Adresse sonst heisen (ohne 00h) ?
11
Lowlevel-Coding / Re: Probleme RM VESA initialisierung
« am: 21. June 2009, 21:40 »
Hey, ich bin der 2.te Programmierer bei unserem OS...

Hier noch ein paar Zusatz-Infos:

Das ganze OS wird vom Grub geladen, weshalb es schon im PM ist.

Neben dem obigen Code, haben wir noch folgendes in ASM (welches den C-Kernel laedt- das ganze wird mit ld gelinkt):

global loader
extern main   
 
FLAGS    equ 0
MAGIC    equ 0x1BADB002       
CHECKSUM equ -(MAGIC + FLAGS)
 
section .text
align 4
MultiBootHeader:
  dd MAGIC       
  dd FLAGS       
  dd CHECKSUM   
 
loader:
  mov esp,0x200000
  push eax       
  push ebx         
  call main       
 
  cli
  hlt


Mit dem Code im Kenrel
asm("cli\n\t"

        "mov     eax,cr0\n\t"
        "and     al,not 1\n\t"
        "mov     cr0,eax\n\t"


        "sti\n\t");

deaktivieren wir das 0-bit (das Protected-Mode-Enable-Bit (PE)) im Register 0 um in den Real Mode zu kommen. Ist das so ausreichend ?


Seiten: [1]

Einloggen