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 - RedEagle

Seiten: 1 ... 9 10 [11] 12 13
201
Lowlevel-Coding / Kernel wird nicht mehr geladen...
« am: 29. March 2006, 18:26 »
Vielen Dank;
werd es mal ausprobieren.
202
Lowlevel-Coding / Kernel wird nicht mehr geladen...
« am: 29. March 2006, 16:25 »
Hi
Ich habe für mein OS eine kleine Konsole geschrieben, um den code zu testen, den ich schreibe (z.B. Treiber)

Jedenfalls lade ich jetzt beim booten nicht 32Sektoren, sondern 40.
ABER, seit dieser kleinen änderung im bootloader gibts ein Problem.

Unter Bochs läuft alles so, wie es soll, aber jetzt wollte ich es auf einem Echten PC testen, und das geht nicht.:
Das Disketttenlaufwerk (bzw der Motor) ist aktiv, da das lämpchen läuchtet, aber sonst tut sich NICHTS!!
woran liegt das?? an den 40 Sektoren, am BIOS, ...??

hier mal der Codeausschnitt:
loadkernel:
   ; Diskdrive reset (Interrupt 0x13,0)
   push ds      ; Sichere DS
   mov ax, 0      ; Funktion 0 (reset)
   mov dl, [bootdrv] ; Dieses Laufwerk ist gewünscht (bootlaufwerk)
   int 0x13      ; Interrupt ausführen
   pop ds      ; DS wiederherstellen
   jc loadkernel    ; Geht nicht? -> Noch mal!

  load1:
   mov ax, 0x1000    ; ES:BX = 1000:0
   mov es, ax
   mov bx, 0

   ; Sektoren lesen (Interrupt 0x13, 2)
   mov ah, 2      ; Funktion 2 (Lesen)
   mov al, 40      ; Lese 40 Sektoren (0x0000 -> 0xxxx) !!ICH HABE NUR DIE ZAHL GEÄNDERT
   mov cx, 2      ; Cylinder=0, Sector=2
   mov dx, 0      ; Head=0, Lauferk=0
   int 0x13      ; ES:BX = Daten vom Laufwerk
   jc load1      ; Fehler? -> Noch mal!

   retn


Ich hoffe ihr könnt mir helfen...
203
OS-Design / Von Text zur Grafik, aber wann??
« am: 26. February 2006, 11:39 »
Zitat
PorkChicken:
ich will damit sagen: wer braucht bitteschoen textausgabe?

Ich würde gerne beim Booten nen richtig schönen (ASCII-Art - mäßigen) ladebildschiorm haben, mit bunten ASCII-Zeichen und so weiter. Genau dafür brauche ich den 25×80 - Textmode.

Wenn ich das jetzt alles richtig verstanden habe, muss ich mich jetzt erstmal um den Virtual Real Mode kümmern, und in diesem modus dann mit int 13 arbeiten....

Auf jeden fall danke für die zahlreichen links :)
204
OS-Design / Von Text zur Grafik, aber wann??
« am: 19. February 2006, 15:15 »
Hi
Wann muss/kann ich anfangen, einen (oder mehrere) Pixel auszugeben??

Ich möchte ähnlich wie unter win98, während des Bootens, den 80×25-Textmodus beibehalten, um da einige textausgaben zu machen. Wenn ich dann "fertig" mit booten bin (Treiber und so geladen habe) möchte ich in einen 800×600 oder 1024×768 Grafikmodus wechseln (VESA2). Das problem: Ich habe hier im Forum öfters gelsesen, das man das "nur" im RealMode machen kann, und NACH dem Setzten des VModuses erst in den PM wechseln soll.

wie ist das bei win98 gelöst?? wie kann ich im PM nach dem laden des Tastaturtreibers, usw. in den Grafikmodus wechseln??
205
Lowlevel-Coding / Assembler
« am: 18. February 2006, 09:19 »
Ich benutze Vim 6.3 für Windows.
206
OS-Design / C - Kernel in anderer Farbe
« am: 11. February 2006, 09:04 »
Wie man es selber Bildet:

Das Obere (4..7) nibble ist für den Hintergrund, das untere (0..3) für den Fordergrung:

Bit 0 -> B-Wert
Bit 1 -> G-Wert
Bit 2 -> R-Wert
Bit 3 -> Intensität (Hell/Dunkel)
..
Bit 7 -> Entweder Intensität, oder Blinken an/aus
207
Lowlevel-Coding / Problem mit CS bei JMP
« am: 30. January 2006, 14:19 »
Zitat von: bitmaster
Na ja, du springst mit einem Jump zur Funktion und willst mit ret zurückspringen. [...]

#-o Soooooooo ein blöder Fehler...  :oops:

DANKE
208
Lowlevel-Coding / Problem mit CS bei JMP
« am: 29. January 2006, 08:34 »
00356892916i[CPU0 ] | EIP=00010000 (0000ffff)
so stehts im log-file...
Wie kann ich das verhindern??

ich lade den kernel an 1000:0
  mov ax, 0x1000    ; ES:BX = 1000:0
   mov es, ax
   mov bx, 0


d.h. mein Kernel darf noch ~60 KB groß sein
209
Lowlevel-Coding / Problem mit CS bei JMP
« am: 29. January 2006, 00:11 »
Dieser teil des OSs läuft im RealMode. Bis auf die sache mit dem A20Gate habe ich vorher nichts großartiges gemacht. Die größe der binary beträgt 1.5 KB
210
Lowlevel-Coding / Problem mit CS bei JMP
« am: 28. January 2006, 21:28 »

; . . .

REOSCONSOLE:

  mov  si, msg_prompt
  call fnc_writestring

  mov  ah, [opt_cmdcolor]         ; Farbe für den command
  mov  al, [opt_paramcolor]       ;   "    "  die Parameter
  call fnc_getcommand


  mov  si, cmd_test
  call fnc_cmpcmd    ; 0 wenn gleich
  jz fnc_cmd_test  ;;HIER GIBTS DAS PROBLEM


jmp REOSCONSOLE

;;;;;;;;;,,,,,,,,,;;;;;;;;;;;;

   ENDLESS:
   jmp ENDLESS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FUNKTIONEN                              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

fnc_cmpcmd:
   mov  di, cin_command
   call fnc_strcmp
   or   al, al
   ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

fnc_cmd_test:

   ret

; . . .


Hi wenn ich zur funktion "fnc_cmd_test" springen möchte, gibts bochs folgende Meldung aus:
[CPU0 ] prefetch: RIP > CS.limit

woran liegt das??
wie bringe ich das zum laufen??
211
Lowlevel-Coding / Problem mit inlineassambler und lidt
« am: 21. January 2006, 20:52 »
sry für die Späte antwort, hatte aber in letzter Zeit andere Probleme...

Ich habe jetzt ein sturct genommen:

typedef struct
{
 WORD       limit;
 INTERRUPT *base;
} __attribute__ ((packed)) IDTR;


IDTR idtr;

//-----------------------------------------------------------------------------------

bool LoadIDT()
{
// static IDTR idtr;
 idtr.limit = (sizeof(INTERRUPT)*256)-1;
 idtr.base  = idt;

 IDTR *pidtr = &idtr;
 asm volatile ("LIDT (%0) ": :"p" (pidtr)); //undefined reference to $_idtr

 return true;
}


immernoch undefined reference...
Wenn ich idtr lokal mache (wie hier wegkommentiert ist) lässt es sich zwar kompilieren, habe aber die Selbe reaktion als wenn ich es Global mache, und den asm-teil weglasse (beides verursacht einen reboot)

Ich bin langsam am verzweifeln.

Ich habe mir mal den Code von "Pirat" angesehen, (wie man an meinem code evtl sieht ;) ) und da scheint es so zu funktionieren... warum aber bei mir nicht ??
212
Lowlevel-Coding / Problem mit inlineassambler und lidt
« am: 29. December 2005, 09:48 »
Mein code:
INTERRUPT idt[256];
DWORD     ptr_idtr[3];

bool LoadIDT()
{
 ptr_idtr[0] = (sizeof(INTERRUPT)*256) << 16;
 ptr_idtr[1] = (DWORD)idt;
 
 __asm__ __volatile__ ("LIDT (%0) ": :"p" (&ptr_idtr[3]) );

 return true;
}


Bei dem asm-teil gibts ein Linkererror:
\idt.obj(.text+0x4e):idt.cpp: undefined reference to '$_ptr_idtr'
\idt.obj(.text+0x260):idt.cpp: undefined reference to '$_ptr_idtr'


Wenn ich den asm-teil rauskommentiere gibt's keine Probleme...

Wo ist mein Fehler??
213
Lowlevel-Coding / Fehler bei PIC oder IRQ, aber wo/was genau??
« am: 26. December 2005, 16:58 »
Es scheint nicht am Code zu liegen, sondern ein generelles Problem zu sein:
Aber in diesem Fall tritt der Fehler hier auf:
__asm__ __volatile__ ("LIDT (%0) ": :"g" ((char*)idtr+2));

Meine "Generelle" aufteilung:

Header:
#ifndef HEADERXY
#define HEADERXY

#define xy ab

namespace name
{
 void funktion();
}

#endif


Codefile:
#include "headerxy.hpp"

int x; //OK
int *y; //OK
int z[2]; //FEHLER !?

namespace name
{

 void funktion()
 {
  x = 1; //OK
  z[0] = x; //LINER-ERROR
  *y = 2; //OK
  z[1] = 3; //LINER-ERROR
  return;
 }

}
214
Lowlevel-Coding / Fehler bei PIC oder IRQ, aber wo/was genau??
« am: 26. December 2005, 10:27 »
Danke, du hast mir gut geholfen.

Aber neues Problem:
Wieder ein Problem mit Globalen Variablen.
Wenn ich ein Array mit 2 Elementen (Global) haben möchte:
DWORD  idtr[2] = {0,0};
Wird "idtr" vom Linker nicht erkannt
Wenn ich nur einen einfachen Pointer verwende:
DWORD *idtr;
macht der linker kein Probem.

Allerdings finde ich es eher weniger gut, einen Pointer irgendwohin zeigen zu lassen.
Woran liegt das??
PS.: Wenn ich ein lokale Array static machen möchte passiert ähnliches.
Warum hasst mein linker Arrays??
215
Lowlevel-Coding / Fehler bei PIC oder IRQ, aber wo/was genau??
« am: 25. December 2005, 11:17 »
Erstmal generelles ablauf
1. In den PMODE wechseln
2. Zum CKernel Springen
3. Interrupts ausschalten (wurde vorher auch schonmal gemacht, aber zur sicherheit nochmal, da zwischen dem 1. Ausschalten (PMODE) und dem Kernel noch ne menge Passiert/Passieren soll)
4. PIC
5. IRQa ausschalten (0xFF)
6. IDT "bauen"
7. Interrupts einschalten
8. IRQs aktivieren (0x00)

Fehler
Bist einschlißlich Punkt 7 Läuft alles wie es soll (zumindest passiert nichts ungewöhnliches)
Nach Punkt 8 Startet bochs neu.

Ausgabe der Konsole bei bochs
***e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
***i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
***i[APIC0] local apic in CPU apicid=00 initializing
***i[BIOS ]  rombios.c,v 1.138.2.1 2005/07/06 19:30:36 vruppert Exp $
***i[KBD  ] reset-disable command received
VGABios &Id: vgabios.c,v 1.62 2005/07/02 18:39:43 vruppert Exp $
***i[CLVGA] VBE known Display Interface b0c0
***i[CLVGA] VBE known Display Interface b0c3
***i[VBIOS] VBE Bios $Id: vbe.c,v 1.47 2005/05/24 16:50:50 vruppert Exp $


Frage
Wo muss ich nach dem Fehler suchen, was läuft falsch??
Könnte der Fehler beim laden der IDT auftreten??
216
Lowlevel-Coding / Ende meines C-Kernels??
« am: 20. December 2005, 16:40 »
Vielen Dank für die Schnelle Antwort
217
Lowlevel-Coding / Ende meines C-Kernels??
« am: 20. December 2005, 15:21 »
Hi
Wie kann ich die Adresse, an der mein Kernel im Speicher aufhört, in eine Variable speichern. (bzw. erstmal herrausfinden)??
218
Lowlevel-Coding / C/C++ - Kernel ruft keine Funktionen auf :(
« am: 15. December 2005, 18:18 »
OUTPUT_FORMAT("binary")
INPUT(d:\reos\_ckernel\kernelexe.obj d:\reos\_ckernel\kernelc.obj d:\reos\_ckernel\lowio.obj d:\reos\_ckernel\bootio.obj)
ENTRY(start)
SECTIONS
{
  .text 0x11E00 :
  {
    code = .; _code = .; __code = .;
    *(.text)
    *(.rodata)
    . = ALIGN(1);
  }
  .data  :
  {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}


Geht trotzdem noch nicht
219
Lowlevel-Coding / C/C++ - Kernel ruft keine Funktionen auf :(
« am: 15. December 2005, 12:16 »
Hab den Fehler gefunden. Es lag nicht am stack, aber scheinbar gibts da nen Problem mit Globalen Variablen:
char *VRAM = (char*)0xB8000;

void test3()
{
//char *VRAM = (char*)0xB8000;
VRAM[8] = '3';
VRAM[9] = 0xCE;
return;
}


So läuft wird nichts ausgegeben. Wenn VRAM aber local ist, gibts keine Probleme mehr. Woran liegt das??
220
Lowlevel-Coding / C/C++ - Kernel ruft keine Funktionen auf :(
« am: 11. December 2005, 09:31 »
Hab den code jetzt mal so geändert, das möglichst wenig code existiert:
void test();
void test2();

int main()
{
 test2();
 test();
 return 0;
}

void test()
{
char *VRAM = (char*)0xB8000;
VRAM[2] = '#';
VRAM[3] = 0xCE;
return;
}

void test2()
{
 return;
}

test() wird tatsächlich aufgerufe, es wird auch kurtzzeitig die '#' angezeigt, aber dann startet bochs neu.
Wenn ich vorher test2() aufrufe, wird die Raute garnicht mehr angezeigt.
=> Es gibt probleme beim Verlassen einer Funktion (return)
Seiten: 1 ... 9 10 [11] 12 13

Einloggen