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

Seiten: 1 2 3 [4] 5 6 ... 81
61
Offtopic / Re: Wohin kann man mit Werten?
« am: 21. May 2014, 19:10 »
Also entweder ist die Frage schlecht formuliert, oder die Antwort lautet einfach Variable.

Vielleicht kann ja auch mal jemand, der ein Buch über Programmiersprachen gelesen hat, ein brauchbares für Anfänger empfehlen.

Ich kann leider nur auf existierende Listen verweisen:

Auf C++.de gibt es eine Liste von Büchern: http://www.c-plusplus.de/forum/f65
Im Wiki haben wir auch ein paar Bücher: http://www.lowlevel.eu/wiki/Literatur
Und natürlich gibt es bei Amazon was zu C/C++ oder allgemein Programmieren etwas für jeden Geldbeutel.
62
Lowlevel-Coding / Re: Das OS und die Strings
« am: 16. May 2014, 22:53 »
Im Allgemeinen musst du sowas selbst implementieren, außer du hast genügend Kenntnisse von der "String Lib".
63
OS-Design / Re: YourOS
« am: 16. May 2014, 22:52 »
Cool, mein OS. Hahaha ...

Ich seh da CDI. Funktioniert das schon?
64
Offtopic / Re: ARM oder x86?
« am: 13. May 2014, 18:53 »
x86, weil wir dafür Tutorials haben.
65
Offtopic / Re: RAM auslesen bis 4GB
« am: 12. May 2014, 19:15 »
Das wirst du auf (modernen x86-Systemen) durch einfaches Auslesen (Probing) des physischen Adressraums nicht herausbekommen. Da befindet sich nämlich nicht nur der RAM, sondern auch andere Hardwaregeräte sind direkt darüber ansprechbar. Außerdem hat der Speicher Lücken. Im besten Fall kriegst durch so eine Methode falsche Angaben, im schlimmsten Fall verstellst du etwas an der Grafikkarte.

Die Informationen über den Arbeitsspeicher stellt das BIOS bereit. Wenn du Multiboot nutzt, bekommst du diese Information ganz einfach heraus. Dazu steht auch einiges in unserem Wiki: http://www.lowlevel.eu/wiki/Teil_7_-_Physische_Speicherverwaltung
66
Offtopic / Re: RAM auslesen bis 4GB
« am: 12. May 2014, 17:54 »
Um die Frage direkt zu beantworten: In C könnte man den gesamten Adressraum wie folgt auslesen:
unsigned char *p = (unsigned char *)0; // Bei Adresse 0 anfangen.
do {
     unsigned char b = *p;             // Byte Auslesen

     // Hier byte verarbeiten

     p++;                              // Zur nächsten Adresse gehen
} while (p != 0);                      // Wenn wir wieder am Anfang sind, sind wir fertig.

Falls dir diese Antwort komisch vorkommt, liegt das daran, dass ich immer noch nicht weiß, was du vorhast.
67
Offtopic / Re: RAM auslesen bis 4GB
« am: 12. May 2014, 14:03 »
Warum die Einschränkung auf 4 GB? Was hast du vor?
68
Vielleicht war die Intention des Autors dadurch den Videospeicher und die Multibootinfo zu mappen. Möglicherweise will er auch GDT (trickgdt) kurzzeitig nochmal mappen.
69
NASM und GAS haben unterschiedliche defaults, wenn die Sektion keine der Standardsektionen (.text, ...) ist. Keine Ahnung aus welchem Grund die sich da unterscheiden. Vermutlich ist das einfach nicht spezifiziert.
70
Laut objdump ist die .setup-Section in der GAS-start.o nicht allocatable. Versuch mal .section .setup,"a" (oder ggf. .section .setup,"a",@progbits).
71
mov 0x10,%ax muss mov $0x10,%ax heißen, sonst liest er von Speicheradresse 0x10. Selbe Geschichte bei mov sys_stack, %esp. Der Sprung zum Neuladen von CS muss außerdem ein Far Jump sein, also ljmpl $0x08, $higherhalf.
72
Lowlevel-Coding / Re: Ports und Index
« am: 09. May 2014, 19:45 »
2. Gibt es nicht viele unterschiedliche Methoden um Inline-Assembler zu nutzten?
Du musst trotzdem die richtige Methode verwenden, die im Handbuch des Compilers dokumentiert ist. Ich weiß nicht, wo du das mit den runden Klammern her hast, aber der erste Versuch sah ein wenig wie Code vom Microsoft Compiler aus. Ich nehme aber an, dass du GCC nutzt, und du musst dich deswegen an dessen Regeln halten.

EDIT: Wo wir grade bei Ports und I/O sind ...
... kann so was funktionieren?:
Nope.

Wenn du Martins Makros verwenden willst, und du deine Aufteilung in .cpp und .h behalten willst, muss deine io.cpp so aussehen:

// Beachte, dass ich das einfach aus seinem Post kopiert habe.
#define OUTB( PORT, DATA) asm volatile ("outb %0, %1" : : "a" ((uint8_t)DATA), "Nd" ((uint16_t)PORT));
#define INB( PORT,DATA ) asm ("inb %1, %0" : "=a" (DATA) : "Nd" (PORT));

// Beachte: Nicht inline!
void out(unsigned port1, unsigned wert1)
{
    return OUTB(port2, wert2);
}

void iut(unsigned port2, unsigned wert2)
{
    return INB(port2, wert2);
}

Das kryptische Zeug aus dem Inline Assembler ist hier dokumentiert: http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html und hier nochmal ein bisschen erläutert: http://www.lowlevel.eu/wiki/Inline-Assembler_mit_GCC

In die io.h kommt dann:

extern void out(unsigned port1, unsigned wert1);
extern void iut(unsigned port2, unsigned wert2);

Beachte, dass die Funktionen auch hier nicht inline sind.

Oder du kopierst einfach die beiden Zeilen von ihm in deine io.h und benennst die Makros um, wenn die unbedingt out und iut heißen sollen:

#define out( PORT, DATA) asm volatile ("outb %0, %1" : : "a" ((uint8_t)DATA), "Nd" ((uint16_t)PORT));
#define iut( PORT,DATA ) asm ("inb %1, %0" : "=a" (DATA) : "Nd" (PORT));

In die io.cpp kommt dann nichts bzw. die löscht du dann halt.

Und wenn es doch unbedingt inline-Funktionen sein soll, dann kannst du dir beispielsweise das hier mal durchlesen: http://openbook.galileocomputing.de/c_von_a_bis_z/009_c_funktionen_021.htm#mj333c4b82169d962e6176638f6644e310
73
Lowlevel-Coding / Re: Ports und Index
« am: 09. May 2014, 17:37 »
Funktioniert das überhaupt? Ist das nicht AVR Programmierung?
Tjahaa ^^
74
Lowlevel-Coding / Re: Ports und Index
« am: 08. May 2014, 16:52 »
Derartigen Code habe ich noch nie gesehen. Für welche CPU und welchen Compiler soll das sein?

Ansonsten zur Frage, falls sich das auf CGA bezieht: Es können nach Spezifikation nur Indizes 14 bis 17 gelesen werden. Register 0 ist nicht lesbar. Möglicherweise gibt es zwar Adapter, die das ermöglichen, aber warum willst du die Register überhaupt auslesen?
75
Softwareentwicklung / Re: [All In One]-Question lolxdfly
« am: 07. May 2014, 20:03 »
Es liegt definitv daran, dass was Falsches im Page Directory steht. Der Crash an der Stelle, an der Paging aktiviert wird, heißt nämlich, dass der Code direkt nach dem Aktivieren nicht mehr ausgeführt werden konnte. Das heißt, dass was da eigentlich sein sollte (Code) ist nicht mehr da.

Die Ursachen dafür können vielfältig sein, und du solltest mal den Prozess des Erstellens und Befüllens des Page Directories debuggen.
76
Softwareentwicklung / Re: [All In One]-Question lolxdfly
« am: 06. May 2014, 21:28 »
Der Qemu log sagt folgendes:
check_exception old: 0xe new 0xe
     3: v=08 e=0000 i=0 cpl=0 IP=0008:0010188e pc=0010188e SP=0010:001fff90 EAX=80000011
Das ist bereits der zweite Fault. Der Registerdump, der mit check_exception old: 0xffffffff new 0xe anfängt, ist der interessante, weil es der erste ist. In diesem Fall scheints aber keinen Unterschied zu machen.

Zitat
Dann habe ich mein Kernel disasm.:
  10187b: 0f 22 c0              mov    %eax,%cr0
  10187e: c9                    leave 
  10187f: c3                    ret   
Wie man sieht scheint der gleiche Fehler, wie hier beschrieben vorzuliegen: http://www.lowlevel.eu/wiki/Teil_9_-_Paging#Paging_aktivieren
Falls du das Tutorial befolgst: Hast du den Rest des Artikels abgearbeitet, also ein sinnvolles Page Directory erstellt? Falls du das Tutorial nicht befolgst: Du musst ein sinnvolles Page Directory erstellen, das den Kernel sowie alle sonstigen Datenstrukturen, auf die der Kernel zugreift (beispielsweise das Page Directory, alles was deine alloc-Funktion zurückgibt, ...) mappen.

In "meiner" Source findet man bezüglich der Speicheradresse das hier:
// end ist im linker script definiert!
extern uint32_t end;
uint32_t placement_address = (uint32_t)&end;
Wie kommst du zu der Folgerung, dass sich die Speicheradresse auf diesen Ausschnitt bezieht? Du hast ja eben noch das kurze Schnipsel Assemblercode gezeigt, das für mich eher danach aussieht.

Zitat
Ich denke mal ich hab das was im Linker Script bezüglich end falsch gemacht:
Sieht eigentlich alles richtig aus. Du könntest ein
        . = ALIGN(4096);davor tun, um die Adressen auf ein vielfaches von 4096 zu runden, falls dein Code das nicht selbst tut.
77
Softwareentwicklung / Re: [All In One]-Question lolxdfly
« am: 06. May 2014, 20:53 »
EDIT3:Habs gefunden, nicht gefixt :/
Ist genauso wie hier: nur mit 10187e: http://www.lowlevel.eu/wiki/Teil_9_-_Paging#Paging_aktivieren

EDIT4: Dürfte am link script liegen... die Adresse ist ein externes Symbl aus dem Link Script:
  end = .; _end = .; __end = .;soll ich dass einfach ans Ende dranklatschen? Hab leider überhaupt keine Ahnung was Link Scripte angeht :S
Das verstehe ich nicht. Ist an der Adresse 10187e das Symbol "end"?
78
Lowlevel-Coding / Re: In Videospeicher schreiben
« am: 04. May 2014, 17:15 »
0x0
79
Lowlevel-Coding / Re: In Videospeicher schreiben
« am: 03. May 2014, 21:30 »
Wie bereits gesagt wurde, lässt sich dieselbe Zahl unterschiedlich darstellen. Wenn du 13 Äpfel vor dir liegen hast, und versuchst die Anzahl in der Dezimaldarstellung auszudrücken, wirst du "13" sagen. Wenn du versuchst, das in Hexadezimaldarstellung auszudrücken, dann wirst du "0xD" sagen. Wenn du versuchst das in der Binärdarstellung auszudrücken, dann wirst du "0b1101" sagen.

Wenn jemand mit Kenntnis der Hexadezimaldarstellung zu dir kommt, und behauptet "Da liegen 0xD Äpfel", dann kannst du das bestätigen.
Wenn jemand mit Kenntnis der Binärdarstellung zu dir kommt, und behauptet "Da liegen 0b1101 Äpfel", dann kannst du das bestätigen.

Zwei unterschiedliche Behauptungen mit "unterschiedlichen Zahlenangaben" wurden gemacht, und trotzdem sind beide richtig. Wie kann das sein? Weil "0xD" und "0b1101" die Darstellung ein und derselben Zahl sind. Die Zahl, die die Anzahl Äpfel, die da liegen, angibt. Die verändert sich ja nicht, nur weil jemand den Wert anders ausdrückt.

Compiler kennen meistens sowohl Hexadezimal-, Dezimal- und teilweise auch Binärdarstellung. Deswegen ist es absolut egal, wie du es ihm sagst, weil er den Zahlenwert aus der Darstellung ermitteln kann. Also es ist egal, welche Darstellung du für den Programmcode nimmst, weil der Computer mit dem Zahlenwert arbeitet und nicht mit der Darstellung der Zahl. Ich nehme meist die Hexadezimaldarstellung, weil sie übersichtlicher als die Binärdarstellung ist.

Zusammengefasst also: Wenn jemand beispielsweise "Hexadezimalzahl" sagt, meint er "Hexadezimaldarstellung einer Zahl", und die Darstellung hat keinen Einfluss auf den Wert, sondern dient nur als Mittel zur Kommunikation.
80
Lowlevel-Coding / Re: In Videospeicher schreiben
« am: 03. May 2014, 14:31 »
Um es nochmal zu sagen: Es gibt 16 Farben. In Binärdarstellung braucht man deswegen 4 Bits.

Wenn die Farben in der einen Tabelle als Hexadezimalzahlen dargestellt werden und in der anderen Erläuterung als Binärzahlen, dann musst du gedanklich immer noch den Übertragungsschritt mitmachen. Entscheidend bei einer Zahl ist ja nicht die Darstellung, sondern der Wert. Zur Erläuterung gibt es beispielsweise bei bei Wikibooks Artikel zum Zehner-, Binär- und Hexadezimalsystem.
Seiten: 1 2 3 [4] 5 6 ... 81

Einloggen