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

Seiten: 1 2 3 [4] 5 6
61
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 15:32 »
OK wenn das stimmt, wie ist aber der Befehl dafür, dass er weis das asm Code kommt und wo gibt es eine liste aller Befehle? Oder der wichtigsten.  :?
62
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 14:54 »
Ich hab doch noch eine Frage, wie kann man assembler Befehle bei diesem Compiler benutzen. Normalerweise ist das ja
(mir sind der Int und der out & in Befehle am wichtigsten)
asm{
xor eax,eax
xor ebx,ebx
};
Nur er mag das nicht. Was muss man da einstellen, oder wie geht das?
63
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 14:25 »
So ich habs. Dem einen Zeiger muss noch die Adreese zuaddiert werden wo der Kernel ist. Bei mit 0x10000
const int Adresse = 0x10000;
int main()
{
char *Text = "Welcome to Protected Mode"+Adresse; 
char *VideoMem = (char*)0xB8000; 

while(*Text) 

    *VideoMem++ = *Text;
    *VideoMem++ = 7;
    Text++;


return(0);
}
Danke für die Hilfe :-)
64
Lowlevel-Coding / Re: C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 13:46 »
Wo ist den das Tutorial Subforum? :?
65
Lowlevel-Coding / C Kernel Main Funktion funktioniert nicht.
« am: 18. January 2007, 12:57 »
 Ich hab schon die Datein so programmiert, wie im Tutorial „C Kernel starten“, jedoch wird der Text nicht ausgegeben, aufrufen und zurückspringen tut er wohl, und in der Main Funktion ist er scheinbar auch. Nur auf den Bildschierm schreibt er nur ein

int main()
{
    char *Text = "Welcome to Protected Mode";
    char *VideoMem = (char*)0xB8000;
    while(*Text)
    {
        *VideoMem = *Text;
        *VideoMem++;
        *VideoMem = 7;
        *VideoMem++;
        *Text++;
    }
    return(0);
}

Und muss „*VideoMem++;“ nicht „VideoMem++;“ sein (wie die beiden anderen auch), die Adresse muss doch Höher werden und nicht der Wert an der Adresse, so würde das vielleicht eine Sinn machen, aber wenn ich es umändere ist das gleiche wie vorher. Ich weis nicht wo der Fehler ist. :?
66
Lowlevel-Coding / Re: Frage zum Multitasking
« am: 08. January 2007, 16:32 »
Es funktionier jetzt da war nur eine dumme keine blöde Adresse falsch, er hat immer denselben Task geladen, geht ja nicht. Und das mit dem Stack ist egal, weil ESP und SS beim Taskstart und Taskwechsel neu geladen werden.
Trotzdem Danke. :-)
67
Lowlevel-Coding / Re: Frage zum Multitasking
« am: 05. January 2007, 19:07 »
Eine Frage was ist der Longmode? Und beim Hardware Multitasking braucht man doch nicht so viel machen und noch eine letzte Frage was muss ich ESP zuaddieren (um den Interrup Aufruf auszubügeln) 10 (0xA) oder 12?
EIP + CS + EFLAG = 10 bei mir. :?
68
Lowlevel-Coding / Re: Frage zum Multitasking
« am: 05. January 2007, 18:18 »
EOI hab ich gemacht.
Ist das Tutorial dann irgendwie falsch? :?
69
Lowlevel-Coding / Re: Frage zum Multitasking
« am: 05. January 2007, 17:43 »
Mich irritiert aber, dass der Beispiel Code im Multitasking Tutorial die Daten nach dem Taskwechsel vom Stack holt. :?

; Daten des zu ladenden Tasks
MOV ESI,[tasking_current] ; Offset laden
ADD ESI,0x00000002 ; zur Deskriptornummer navigieren
LODSW ; Nummer in AX laden
POP ESI
PUSH EDI
MOV EDI, tss_switch_label ; Offset laden
ADD EDI,0x00000005 ; zum Operanten navigieren
STOSW ; neuen Wert eintragen
tss_switch_label:
JMP DWORD 0x1234:0x12345678 ; springen!
POP EDI
POP EAX
70
Lowlevel-Coding / Frage zum Multitasking
« am: 05. January 2007, 16:33 »
Ich hab Multitasking im mein OS eingebaut. Taskwechsel macht er auch, aber nur einmalt und zwar, weil keine Hardware Interrups mehr aufgerufen werden. Ich frag mich nämlich wie der Taskwechsel funktionieren soll, denn der Timer Interrup lauft nicht bis zum ende durch so kann ja auch nicht sti und die Daten vom Stack geholt werden, ich weis nicht, wie das zu lösen ist und noch eine andere Frage was muss im TSS für das EFlag stehen, da muss ja auch das IF (Interrup Enable Flag) gesetzt sein.
 :?
71
Lowlevel-Coding / VESA Super VGA benutzen
« am: 18. June 2006, 14:31 »
Tut mir leid, aber ich hab die Seite durchgesehen und nicht das gefunden ,was ich suche.
Kann mir jemand eine direkten Link geben oder so etwas? Das währe sehr nett.
 :?:
72
Lowlevel-Coding / VESA Super VGA benutzen
« am: 17. June 2006, 16:33 »
Ich hab jetzt ein bisschen gesucht, aber ich hab nur herusgefunden das ich die richtige Adresse mit irgent einer VESA 01h funktion bekommen soll. Nur das Problem ist ich weiss nicht welche funktion es jetzt wirklich ist. Das ist jetzt nur noch mein Problem.  :?:
73
Lowlevel-Coding / VESA Super VGA benutzen
« am: 17. June 2006, 14:48 »
Ich will die VESA Funktionen benutzen. Soweit hab ich auch kein Problem, aber wenn ich z. B. den Ganzen Bildschirm mit einer Farbe füllen will werden die unteren Punkte nicht angezeigt.
So sieht erst einmal der Test Code aus:
mov ax, 4f02h
mov bx, 103h
int 10h

;...
;In den PMode wird geschaltet
;...

mov esi, 0xA0000
mov ecx, 800*600
k:
mov byte [esi], 7
inc esi
loop k

h:
jmp h

Worin liegt der Fehler, dass die Letzten Punkte nicht gezeichnet werden? :?:
74
Lowlevel-Coding / Befehle des Linkers Ld.exe
« am: 21. May 2006, 17:38 »
Ich hab versucht ein C-Kernel zu schreiben mit Unterstützung verschiedener Tutorials, aber es funktioniert nicht, das heiß: nur der Teil der in C ist. Wenn der CALL aufruf zu ende ist und zurück gesprungen wird werden noch ASM Befehle ausgeführt. Dies funktioniert aber nur unter Bochs so beim echtem PC stürzt der Computer beim Aufruf der Main Funktion ab. Meiner Ansicht nach liegt der Fehler darin, dass die Dateien vom Linker falsch gelinkt werden, aber ich kenne mich nicht mit den Syntax des Linkers (ld.exe von Djgpp) aus. Wo kann ich genauere Beschreibungen zum Linker bekommen (alle Befehle & etc.) am besten direkte Links. Hab zwar schon etwas gefunden aber keine richtige Beschreibung.
Hier noch mal die Verlinkung die als Parameter mit dem Linker gestartet wird: (ld -T link.txt -o c32kernel.bin)
OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}
75
Lowlevel-Coding / Problem mit Linken
« am: 09. April 2006, 17:13 »
Die Ausgabe im ASM Teil funktioniert noch, aber der Aufruf der Main Funktion nicht.

Und wenn ich die Main Funktion durchlaufen lasse und danach in ASM Bildschiermausgabe mache. Wird bei Bochs das "A" ausgegeben (das andere aber nicht) und der echte PC stützt ab. :?:
76
Lowlevel-Coding / Problem mit Linken
« am: 08. April 2006, 19:31 »
Das ist zwar richtig,  aber der der Kernel ist aber an der Adresse 0x10000. Das steht auch so im Tutorial und ich hab schon beide Varianten ausprobiert, weil ich mir nicht so sicher war. Und beide Funktionieren auch nicht.
77
Lowlevel-Coding / Problem mit Linken
« am: 08. April 2006, 18:05 »
Es funktioniert immer noch nicht. Auf dem Bildschirm wird nichts angezeigt und ich weis nicht warum und warum der PC abstürzt oder bei Bochs stehen bleibt. Hier vielleicht noch mal der Kernel32, der die Mainfunktion aufruft:
[Bits 32]
extern _main
global start

start:
call _main
stop:
jmp stop

Vielleicht weis jemand woran es lieben kann.
78
Lowlevel-Coding / Problem mit Linken
« am: 06. April 2006, 16:50 »
Also mit dem Linken funktioniert jetzt, aber es stürzt beim echten PC immer ab und bei Bochs bleibt es stehen. Ich hab auch schon verschiedene Varianten ausprobiert z. B. nur return; (return 0;) aber es funktioniert irgendwie nicht. :?:
79
Lowlevel-Coding / Problem mit Linken
« am: 04. April 2006, 12:56 »
Ich hab mir das Tutorial "C-Kernel" durchgelesen und nach einigen Problemen beim Linken im Forum gefunden, dass die kernel.c falsch sein soll und umgeändert.
void main()
{
   int i;
   char Text[] = "Welcome to Protected Mode";
   char *VideoMem = (char*)0xA8000;

   for(i = 0; Text[i] != 0; i++)
   {
      VideoMem[i] = Text[i];
      VideoMem[++i] = 7;
   }
}

Aber ich bekomme immer noch eine Fehlermeldung
CKernel.obj:kernel.c:(.text+0x2c): undefined reference to `_memcpy'
Aber ich weis nicht genau was der Linker damit meint.
Hier noch mal meine link.txt:
OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}
80
Lowlevel-Coding / Was kann in der LDT eingetragen werden.
« am: 10. February 2006, 21:28 »
Was für Systemsegemente und normale Segemente können in der LDT eingetragen werden? :?:
Seiten: 1 2 3 [4] 5 6

Einloggen