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

Seiten: [1]
1
Offtopic / Was hat mehr Zukunft?
« am: 24. April 2008, 19:09 »
Hi,
Ich bin gerade an einem Zweick angekommen wo ich mir die Frage stelle was ich programmieren sollt.
Ich habe mal ein bisschen bei OS devolpment und bei Spiel Entwicklung(Windows) reingeschaut.
Was sollte ich eurer Meinung nach machen?
Bei dem OS "createn" lern ich halt nebenher noch ASM und erweitere meinen Horizont.
Bei Spiele Programmierung lerne ich halt viele Mathematischen Berrechnungen.

Wenn ich zu OS gehen würde, würde mir ein OS vorschweben, dass eine 32 u. 64Bit Architektur unterstützt und das eine normale Console besitzt mit der man z.b. kleine "Maschienen" an dem Parallel/Serial Port ansprechen kann.
Halte ihr das für realisierbar?

Bei der Spieleprogrammierung würde ich wohl mehr nach Ego-Shooter gehen (ist ja heute nichtmehr so schwierig mit den ganzen vorhandenen Engines).

MFG ReduX
2
Lowlevel-Coding / Re: undefined references
« am: 23. November 2007, 13:22 »
Zitat
Jo, das meinte ich ja. Funktioniert es denn jetzt?
Funktionieren tuts jetzt!
Zitat
Welchem den überhaupt?
Das Tut heißt "C++ im Kernel".

MFG ReduX
3
Lowlevel-Coding / Re: undefined references
« am: 22. November 2007, 21:06 »
Hi,
Mit global werden die Funktionen nun erkannt.
Ich habe dann noch die Funktionen aus der support.cpp als extern "C" deklariert ist dies auch richtig? Weil im Tut ist davon keine Rede.

MFG ReduX
4
Lowlevel-Coding / undefined references
« am: 22. November 2007, 18:42 »
Hi,
Hab heute mal mein os compilen wollen, jedoch bekomme ich beim linken folgendes:
.\compiled\kernel32.obj(.text+0x1): undefined reference to `__main'
.\compiled\kernel32.obj(.text+0xb): undefined reference to `__atexit'
.\compiled\video.obj(.text+0x1aa):video.cpp: undefined reference to `_setmem'
.\compiled\video.obj(.text+0x207):video.cpp: undefined reference to `_memcpy'
.\compiled\video.obj(.text+0x23c):video.cpp: undefined reference to `_setmem'
Ich habe das C++ im Kernel Tutorial durchgemacht!
Wegen __main und __atexit diese sind ja in der kernel32.asm als extern gemacht und in der support.cpp deklariert.
Bei den anderen funktionen:
Diese hab ich in ASM(funktion.asm) deklariert und in der headerdatei als extern C instalisiert.
Alle obj Files sind im Linker skript eingetragen warum funktioniert es nicht?

MFG ReduX
5
Lowlevel-Coding / Re: Funktionen Portieren
« am: 20. November 2007, 17:53 »
Hi,
Wegen ASM kennt da jemand ein gutes Tutorial für NASM?
Weil in google find ich fast immer nur TASM und wenns mal mit NASM ist dann nur mit Win32 Systemprogrammierung. Ich will ein Tut ohne systemprogrammierung wos halt nur um OS dev geht.

MFG ReduX
6
Lowlevel-Coding / Re: Funktionen Portieren
« am: 19. November 2007, 19:04 »
Hi,
Danke für deine Antwort!
1.)Kann ich den Bootloader dann auch in C++ machen weil dafür hab ich noch niergends en Tutorial drüber gelesen.
Falls es doch in ASM sein muss, ist es schlimm wenn ich nur weiß was mov macht?

2.)Gibt es irgendwo noch Resourcen wie  Z.b. wo der Grafikspeicher(Adresse) ist etc. Weil die kenne ich nochnicht.

3.) Wo liegt der unterschied bei der 32 und 64bit entwicklung? Muss man da auf was bestimmtes achten?

MFG ReduX
7
Lowlevel-Coding / Funktionen Portieren
« am: 19. November 2007, 17:06 »
Hi,
Habe zwei Fragen:
1.) Das Ziel ist es ja die Funktionen alle auf seinem eigenen OS bereitzustellen, nur wie mach ich das am besten? Ich hab z.b. keinen schimmer wie ich die string Funktionen von C++ erstellen kann weil das wird in meinen Büchern einfach nicht erklärt.
2.) Ich Tue mich etwas schwer mit Assembler, ich würde lieber für alles C++ verwenden ist dies möglich?

Schönen Abend noch!
MFG ReduX
8
Lowlevel-Coding / Re: Console in C
« am: 30. June 2007, 14:41 »
Hi,
Ja ich weiß das if auch keine Schleife ist!
Was ich nochnicht kann ist asm bin aber drann!
Bin heute nur en bissel daneben!
Also wegen dem Linux Format meine ich:
Wie soll ich das exteren Programm compilieren? Kenne mich mit FS nochnicht so aus! Soll ich wie den Kernel eine .bin erstellen, kann ich diese dann mit dem FS irgendwie später aufrufen?
Hoffe es ist so verständlich.

MFG ReduX
9
Lowlevel-Coding / Re: Console in C
« am: 30. June 2007, 13:18 »
Hi,
Also wie bereits gesagt bin ich auf dem stand wie im Tut C-Kernel.
So wenn ich nun als Dateisystem ext2 integriere kann ich ja dann deine Methoda anwenden oder? Oder brauch ich noch Festplattendreiber,CDTreiber?
Weil eigentlich kann ich ja dann mit dateien umgehen wenn ich ein FS habe!
Wie sieht das dann genau aus? etw. so?:
Tastatureingabe
if schleife
programm starten
rückgabe ausgeben
Nur wie funktioniert das mit den Programmen in Win mache ich beim Compilen .exe Files aber wie soll ich es da machen, also ich schreib mein Programm und dann compile ich es und hab dann ne .obj muss ich diese dann wie im TUT mit den anderen zusammen linken? Eigentlich ja nicht!
Oder hat es dann ein bestimmtes Format ähnlich wie bei Linux wo ich dann einfach über ne Funktion starten kann?

MFG ReduX
10
Lowlevel-Coding / Re: Console in C
« am: 30. June 2007, 11:29 »
Hi,
Also mit switch hätt eich gedacht z.b.:
switch(eingabe)
case"dir":
Files auflisten
break;
usw.
Hab damit nochnicht so die erfahrung, mein aktueller stand ist ich botte und lade den C-Kernel ca. so wie im C-Kernel Tutorial.

MFG ReduX
11
Lowlevel-Coding / Console in C
« am: 30. June 2007, 04:14 »
Hi,
Ich habe nun schon ein wenig rumprobiert und möchte mit einer Console in C vortführen!
Wie würdet ihr das machen?
Sollte ich da jetzt rießige switch blöcke erstellen oder gibt es eine bessere Alternative?

MFG ReduX
12
Lowlevel-Coding / Re: malloc() und free()
« am: 05. May 2007, 00:00 »
Hi,
Hier der gesamte Code der main.c:
unsigned long *page_directory = (unsigned long *) 0x9C000;
unsigned long *page_table = (unsigned long *) 0x9D000;

unsigned int read_cr0(unsigned int cr0)
{
    __asm__("movl %%cr0, %0" : "=a" (cr0));
   return cr0;
}

unsigned int write_cr0(unsigned int cr0)
{
    __asm__("push %%ebp" : "=a" (cr0));
    __asm__("movl %%esp, %%ebp" : "=a" (cr0));
    __asm__("movl 8(%%ebp), %%eax" : "=a" (cr0));
    __asm__("movl %%eax, %0" : "=a" (cr0));
    __asm__("pop %%ebp" : "=a" (cr0));
   return cr0;
}

unsigned int read_cr3(unsigned int cr3)
{
    __asm__("movl %%cr3, %0" : "=a" (cr3));
   return cr3;
}

unsigned int write_cr3(unsigned int cr3)
{
    __asm__("push %%ebp" : "=a" (cr3));
    __asm__("movl %%esp, %%ebp" : "=a" (cr3));
    __asm__("movl 8(%%ebp), %%eax" : "=a" (cr3));
    __asm__("movl %%eax, %0" : "=a" (cr3));
    __asm__("pop %%ebp" : "=a" (cr3));
   return cr3;
}

void main()
{

unsigned long address=0;
unsigned int i;

for(i=0; i<1024; i++)
{
page_table[i] = address | 3;
address = address + 4096;
};
page_directory[0] = (unsigned int)page_table;
page_directory[0] = page_directory[0] | 3;
for(i=1; i<1024; i++)
{
page_directory[i] = 0 | 2;

};

write_cr3((unsigned int)page_directory);
write_cr0(read_cr0() | 0x80000000);


  for(;;);
}

MFG ReduX
13
Lowlevel-Coding / Re: malloc() und free()
« am: 04. May 2007, 14:54 »
Hi,
Obwohl bei dem Befehl nur ein Binär Order und kein komma ist kommt trozdem immer der Fehler to few arguments for read_cr0 aber warum?
Wenn ich das ganze aufteile und den read befehl erst mit der 0x... laufen lassen und dannach dann den write mit dem 0x... dann stürzt der Rechner bei booten ab!

MFG ReduX
14
Lowlevel-Coding / Re: malloc() und free()
« am: 03. May 2007, 19:36 »
HI,
Ja da haste Recht der Code ist von Bona Fide OS Dev. aus nem Tutorial für Paging!
Beim ausprobieren hab ich dann auch gemerkt das sie keine Parameter annahmen.
Aber trozdem danke für deine Mühe!

Edit:
Noch ne kleine Frage
In dem Tutorial steht folgender Code zum ausführen:
unsigned long *page_directory = (unsigned long *) 0x9C000;
unsigned long *page_table = (unsigned long *) 0x9D000;
unsigned long address=0;
unsigned int i;

for(i=0; i<1024; i++)
{
page_table[i] = address | 3;
address = address + 4096;
};
page_directory[0] = page_table;
page_directory[0] = page_directory[0] | 3;
for(i=1; i<1024; i++)
{
page_directory[i] = 0 | 2;

};

write_cr3(page_directory);
write_cr0(read_cr0() | 0x80000000);
Ich habe aber jetzt das Problem das bei write_cr0 ja zwei Prameter übergeben werden aber die Function kann ja nur einer entgegennehmen?!?
Außerdem wir noch ein Fehler mit dem Ointer ausgegeben:
main.c:48: warning: assignment makes integer from pointer without a cast
main.c:56: warning: passing arg 1 of `write_cr3' makes integer from pointer with
out a cast

MFG ReduX
15
Lowlevel-Coding / Re: malloc() und free()
« am: 03. May 2007, 17:10 »
Hi,
Danke für deine Hilfe es funktioniert jetzt!

MFG ReduX
16
Lowlevel-Coding / Re: malloc() und free()
« am: 03. May 2007, 13:52 »
Hi,
Danke für eure Antworten.
Also ich habe es mal in C umgewandelt hier der Code:
unsigned int read_cr0()
{
    unsigned int cr0;
    __asm__("movl %%cr0, %0" : "=a" (cr0));
   return cr0;
}

unsigned int write_cr0()
{
    unsigned int cr0;
    __asm__("push %%ebp" : "=a" (cr0));
    __asm__("movl %%esp, %%ebp" : "=a" (cr0));
    __asm__("movl %%ebp+8, %%eax" : "=a" (cr0));
    __asm__("movl %%eax, %0" : "=a" (cr0));
    __asm__("pop %%ebp" : "=a" (cr0));
   return cr0;
}

unsigned int read_cr3()
{
    unsigned int cr3;
    __asm__("movl %%cr3, %0" : "=a" (cr3));
   return cr3;
}

unsigned int write_cr3()
{
    unsigned int cr3;
    __asm__("push %%ebp" : "=a" (cr3));
    __asm__("movl %%esp, %%ebp" : "=a" (cr3));
    __asm__("movl %%ebp+8, %%eax" : "=a" (cr3));
    __asm__("movl %%eax, %0" : "=a" (cr3));
    __asm__("pop %%ebp" : "=a" (cr3));
   return cr3;
}

Hab nurnoch Probleme das bei dem ebp + 8 der Fehler :
Error: junk `+8' after register kommt.
Ist der Code ansonsten korrekt? Nicht das ich später irgendwie hänge und es liegt daran!
Noch eine Frage und zwar waurm macht man z.b. hier:
    __asm__("movl %%eax, %0" : "=a" (cr3));Bei dem mov ein l hintendrann? und warum schreibt mann %o anstatt %%cr3???

MFG ReduX
17
Lowlevel-Coding / Re: malloc() und free()
« am: 02. May 2007, 21:21 »
Hi,
Danke für deine Hilfe!
Habe den Code nun nach dem Artikel geänder bekomme aber immernoch fehler.  Hier der Code:
__asm__ ("
read_cr0:
mov %eax, %cr0
retn

write_cr0:
push %ebp
mov %ebp, %esp
mov %eax, $ebp+8
mov %cr0,  %eax
pop %ebp
retn

read_cr3:
mov %eax, %cr3
retn

write_cr3:
push %ebp
mov %ebp, %esp
mov %eax, $ebp+8
mov %cr3, %eax
pop %ebp
retn");

Fehler:
main.c:5:10: warning: multi-line string literals are deprecated
c:/djgpp/tmp/cckn2Ntr.s: Assembler messages:
c:/djgpp/tmp/cckn2Ntr.s:16: Error: no such instruction: `retn'
c:/djgpp/tmp/cckn2Ntr.s:21: Error: suffix or operands invalid for `mov'
c:/djgpp/tmp/cckn2Ntr.s:24: Error: no such instruction: `retn'
c:/djgpp/tmp/cckn2Ntr.s:28: Error: no such instruction: `retn'
c:/djgpp/tmp/cckn2Ntr.s:33: Error: suffix or operands invalid for `mov'
c:/djgpp/tmp/cckn2Ntr.s:36: Error: no such instruction: `retn'

MFG ReduX
18
Lowlevel-Coding / Re: malloc() und free()
« am: 02. May 2007, 18:54 »
HI,
Danke für deine Antwort also berfor ich meinen Memory Manager nun baue brauch ich ja moch die Paging function in dem Tutorial steht ein asm Source Code dafür nun will ich ihn aber in C einbinden dzu habe ich volgendes gemacht:
__asm__ ("
[global _read_cr0]
read_cr0:
mov eax, cr0
retn

[global _write_cr0]
write_cr0:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov cr0,  eax
pop ebp
retn

[global _read_cr3]
read_cr3:
mov eax, cr3
retn

[global _write_cr3]
write_cr3:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov cr3, eax
pop ebp
retn");
CIh führe den Code direkt am Anfang in der Main function aus!
Aber es kommen sehr viele Fehlrmeldungen habe von asm leider keinen plan
Fehlermeldungen:
main.c:6:10: warning: multi-line string literals are deprecated
c:/djgpp/tmp/ccCTDQjd.s: Assembler messages:
c:/djgpp/tmp/ccCTDQjd.s:14: Warning: rest of line ignored; first ignored charact
er is `['
c:/djgpp/tmp/ccCTDQjd.s:16: Error: too many memory references for `mov'
c:/djgpp/tmp/ccCTDQjd.s:17: Error: no such instruction: `retn'
c:/djgpp/tmp/ccCTDQjd.s:19: Warning: rest of line ignored; first ignored charact
er is `['
c:/djgpp/tmp/ccCTDQjd.s:22: Error: too many memory references for `mov'
c:/djgpp/tmp/ccCTDQjd.s:23: Error: invalid char '[' beginning operand 2 `[ebp+8]
'
c:/djgpp/tmp/ccCTDQjd.s:24: Error: too many memory references for `mov'
c:/djgpp/tmp/ccCTDQjd.s:26: Error: no such instruction: `retn'
c:/djgpp/tmp/ccCTDQjd.s:28: Warning: rest of line ignored; first ignored charact
er is `['
c:/djgpp/tmp/ccCTDQjd.s:30: Error: too many memory references for `mov'
c:/djgpp/tmp/ccCTDQjd.s:31: Error: no such instruction: `retn'
c:/djgpp/tmp/ccCTDQjd.s:33: Warning: rest of line ignored; first ignored charact
er is `['
c:/djgpp/tmp/ccCTDQjd.s:36: Error: too many memory references for `mov'
c:/djgpp/tmp/ccCTDQjd.s:37: Error: invalid char '[' beginning operand 2 `[ebp+8]
'
c:/djgpp/tmp/ccCTDQjd.s:38: Error: too many memory references for `mov'
c:/djgpp/tmp/ccCTDQjd.s:40: Error: no such instruction: `retn'

Was mache ich falsch?

MFG ReduX
19
Lowlevel-Coding / malloc() und free()
« am: 01. May 2007, 20:50 »
Hi,
Ich bin noch neu im os programmieren habe aber vorher schon mit C und PHP gecodet.
Ich habe es soweit geschafft das dass OS bootet und den C Kernel lädt so nun möchte ich mir aber größerer Funktionen anschauen wie z.B. das GUI Tutorial durcharbeiten dafür brauche ich aber die malloc() und free() befehle!
Ich habe gelesen das ein Memory Manager diese Befehle verwaltet etc. nur weiß ich nicht wie man so einen Memory Manager erstellt habe zwar schon gelsesn wie er aufgebaut ist aber wie man ihn codet weiß ich nicht.
Hat jemand einen link zu einem guten Tutorial für mich?

MFG ReduX
Seiten: [1]

Einloggen