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

Seiten: 1 ... 6 7 [8] 9 10 ... 90
141
Lowlevel-Coding / Re: In Videospeicher schreiben
« am: 03. May 2014, 11:32 »
Ein nachgestelltes "b" oder ein führendes "0b" gibt an, dass es sich um eine Binärzahl handelt. "h" bzw. "0x" markieren eine hexadezimale Darstellung.

Es gibt 16 mögliche Vordergrundfarben. Um die binär zu unterscheiden, brauchst du 4 Bit - darum die 4 Y.
142
Lowlevel-Coding / Re: Mehrere chars zusammenfügen
« am: 25. April 2014, 19:05 »
Ein "char" ist (auf allen hier relevanten Plattformen und C als Programmiersprache) eine 8 Bit große Zahl. Die kannst du schon addieren, aber dann kommt halt trotzdem eine Zahl dabei raus. Stringverarbeitung in C ist nicht schön. Entweder, du schreibst dir deine Hilfsfunktionen selbst oder du nutzt die, die dir Compiler oder Betriebssystem schon mitgeben.

Die entsprechenden Funktionen gibt es in C in "string.h", für C++ in "iostream". Ansonsten würde ich dir mal den IRC-Channel empfehlen, da kann man sowas vermutlich besser besprechen. Außerdem empfehle ich meine Standardempfehlung: Gehe mal in die örtliche Bücherei und besorge dir ein gutes Buch über C, und dann lernst du programmieren, und dann kennst du die Antworten. ;-)
143
OS-Design / Re: Scheduler, Speicherverwaltung,...
« am: 23. April 2014, 00:59 »
Teste alle Einzelteile gründlich, damit du nicht am Ende vor einem großen Haufen "geht nicht" stehst.
144
Offtopic / Re: Hardware Design lernen
« am: 21. April 2014, 21:48 »
Da gibt's verschiedene Ebenen.

Man nehme einen FPGA (am besten im Dev-Board), und dazu VHDL oder Verilog als Programmiersprache, und entwickle dann einen CPU-Core und die entsprechende Zusatzlogik darin. FPGA-Devboards sind aber nicht billig. Wenn man ein älteres System "nachbaut", kann man die Software dafür benutzen.

Oder man nehme einen älteren Prozessor (bis etwa 1993, neueres Zeug geht nicht so einfach), einen Haufen ICs* für die Zusatzlogik und löte das ganze so zusammen, wie man es damals getan hat. Das erfordert wesentlich mehr Aufwand und mehr Ahnung, ist dafür aber mehr "hands-on". Die ganzen ICs sind aber nicht billig. Wenn man ein älteres System nachbaut, kann man die Software dafür benutzen.
(* die Zusatzlogik kann man auch mit einem CPLD oder sogar FPGA machen, dann wieder mit z.B. VHDL)

Oder man nehme einen modernen Mikrocontroller, der einen CPU-Kern und die Zusatzlogik für das meiste schon enthält, schließe Peripherie an und programmiere sich einen Computer. Nicht jeder Mikrocontroller ist dafür geeignet (AVR und PIC eher nicht, ARM Cortex-M dagegen schon). Die Hardware ist relativ billig zu bekommen. Allerdings gibt es dann keine Software dafür, es sei denn, man schreibt sie selbst.

Oder man programmiert einen Emulator in einer Sprache nach Wahl, z.B. nach den Datenblättern eines 80er-Jahre-Computers (solche Systeme kann man komplett verstehen, und es gibt genug Doku dazu). Das ist nur Software, kostet nix, und wenn man ein älteres System nachbaut, kann man die alte Software verwenden. Außerdem muss man sich nicht mit Spannungen und Strömen rumschlagen und magischen Rauch gibt es auch nicht. :-)

Zu einem Computer führen viele Wege, für einen davon entscheiden musst du dich alleine.

Wenn du "Hardware-Design" lernen möchtest, dann leih dir ein Buch über VHDL oder Verilog oder beides aus der örtlichen Bibliothek; wenn du einen Computer bauen möchtest, dann such dir einen der Wege aus (oder einen derjenigen, die ich vergessen habe).
145
Lowlevel-Coding / Re: Wie die BDA auslesen
« am: 14. April 2014, 17:16 »
Ein Typecast ist eine Typüberschreibung. Wenn du in C (oder C++) eine Variable deklarierst, dann hat die einen Typ (sowas wie "int", "struct datensatz_s", "uint32_t" usw). Mit einem Typecast kannst du den Compiler zwingen, an einer Stelle einen anderen Typ zu benutzen, weil du es besser weißt. In den meisten Fällen ist es schlechter Stil oder eine elegante Abkürzung, aber bei hardwarenaher Programmierung kommt man daran nicht immer vorbei.

Ein "unsigned short" hat 2 Byte. Für den Eintrag an Adresse 0x49 müsstest du dir einen Typ (oder eine Struktur) mit 30 Byte definieren, auf die du dann casten kannst, also etwa in der Art:
struct vinfo_s {
  unsigned char mode;
  unsigned short cols;
  unsigned short pagesize;
  ... /* hier der rest */
} __attribute__((packed));

Es ist übrigens hilfreich, wenn du C einigermaßen beherrschst, auch wenn du C++ verwenden möchtest.
146
OS-Design / Re: Ordentliche ms genaue Sleep Funktion (Delay)
« am: 14. March 2014, 03:12 »
Der übliche Weg ist es, im Betriebssystem eine Art "Uhrzeit" zu definieren, z.B. in "Millisekunden seit Systemstart". Damit kannst du dann nicht nur relative Wartezeiten (1 Sekunde ab jetzt), sondern auch absolute Wartezeiten (alle fünf Minuten) sinnvoll abbilden. Wenn du nämlich immer nur 1 Sekunde wartest, hast du jedesmal eine Ungenauigkeit von ein paar ms, und der Fehler wird immer größer.

Um eine Sekunde zu warten, wartest du dann nicht eine Sekunde, sondern du stellst dir einen Wecker auf "in einer Sekunde" und legst dich schlafen, bis der Wecker klingelt. Ganz wie im realen Leben.
147
Lowlevel-Coding / Re: Anfängerprobleme mit GRUB 2 + Kernel
« am: 02. March 2014, 05:50 »
Mir ist außer Grub2 kein Multiboot2-fähiger Bootloader bekannt, und der kann auch normales Multiboot. Ich sehe bisher nicht wirklich einen Grund für Multiboot2. Du kannst aber beide Header in deinen Kernel integrieren und beim Start nachschauen, welche Zahl der Bootloader ins Register geschrieben hat, um die beiden zu unterscheiden. Die Initialisierung brauchst du dann zweimal.

Kleine Codeschnipsel kannst du in deine Forenbeiträge direkt einfügen (Code-Tags).
Der Code zum Leeren des Bildschirms passt so.
148
Lowlevel-Coding / Re: Anfängerprobleme mit GRUB 2 + Kernel
« am: 02. March 2014, 03:12 »
Seit wann ist dein Kernel denn ein Linux? :-)

Dein Kernel ist ein Multiboot-Kernel, den musst du auch als solchen in deiner GRUB-Konfiguration eintragen. (Beachte, dass GRUB2 auch Multiboot 2 unterstützt. Das ist auch falsch.)
149
Offtopic / Re: ISO erstellen will nicht so Recht
« am: 01. March 2014, 18:53 »
Aber das Target für iso gibt es doch: iso: $(COS).iso
Diese Zeile sagt make, dass es, wenn du "make iso" machst, eine $(COS).iso braucht. Aber es nicht beschrieben, wo make die Datei herbekommt: Es gibt keine Zeile, wo $(COS).iso links vom Doppelpunkt steht.

Grundsätzlich ist make auch nicht allwissend, du musst ihm schon sagen, was es tun soll.
Die meisten Regeln dafür sehen so aus:
zu_erzeugende_datei: alle_dafuer_benotigten_dateien
befehl_um_datei_aus_benoetigten_dateien_zu_erzeugen
noch_ein_befehl_dazu
und_weils_so_schoen_war_gleich_noch_einer

(Beachte: Links von den Befehlen müssen Tabs stehen, keine Leerzeichen!)
Dein "make iso" ist eine Besonderheit, weil es keine Befehle braucht.
150
Offtopic / Re: ISO erstellen will nicht so Recht
« am: 26. February 2014, 15:02 »
Dein Makefile ist unvollständig.

Das Target "cos" fehlt. "$(kernel)" und "$(OBJS)" sind nicht bestimmt. Es fehlen die Befehle für die Targets "$(kernel).bin" und "iso".

Und "rm -rf" im "make clean"-Zweig ist fahrlässig. Ich habe so schon mehrfach meinen Sourcetree verloren, während ich an Makefiles bastelte. "rm -f" reicht aus. :-)
151
OS-Design / Re: Qemu = ok, echt Hardware = Auaa... ;(
« am: 11. February 2014, 08:30 »
Linux kennt eine Funktion panic(), die den Kernel tötet. Wenn keine Tasks vorhanden sind, dann solltest du deinen Kernel töten. Dein Leerlauf-Task schützt den Kernel dann vor dem out-of-tasks-panic. :-)

In die Endlosschleife solltest du wenigstens ein __asm__ volatile("hlt") reinmachen, damit dein Qemu nicht 100% CPU-Leistung vom Host saugt, wenn in deinem System nichts zu tun ist. Wenn das nur eine Endlosschleife sein soll, dann solltest du die auch nur dann aufrufen, wenn es sonst keine lauffähigen Tasks gibt.
152
OS-Design / Re: Qemu = ok, echt Hardware = Auaa... ;(
« am: 10. February 2014, 18:11 »
Wer startet neue Tasks, wenn kein Task läuft?
Deine Idle-Schleife wird das eher nicht tun.
153
OS-Design / Re: Qemu = ok, echt Hardware = Auaa... ;(
« am: 02. February 2014, 19:04 »
Wie kann ich Qemu nach EIP fragen?
"info registers".

Debug-Ausgabe habe ich mit kprintf(); gemacht und dabei ist mir aufgefallen, dass er bei dem zuvor geposteten Codeabschnitt hängt.
Und wo genau?

Exeption wird von Qemu nicht ausgelöst.
Mit "nmi" schon.

Bei richtiger Hardware kommt es wohl zum Triple Fault und somit kann keine Exeption ausgelesen werden!
Das ist schlecht. Wobei ich bezweifle, dass dir Debugging auf der realen Hardware weiterhelfen würde.

Um das Paging brauch ich mich im Moment auch nicht zu kümmern, da Paging noch nicht aktiv ist, wenn Qemu einfach so stehen bleibt ohne weitere Aktion.
Das war mir nicht klar, ist aber dennoch ein gut gemeinter Rat für später. :-)
154
OS-Design / Re: Qemu = ok, echt Hardware = Auaa... ;(
« am: 02. February 2014, 01:25 »
Dann heißt es weitersuchen. Wenn der Kernel hängt, kannst du Qemu nach EIP fragen, um zu erfahren, wo genau er hängt. Da sollte sich eine Endlosschleife befinden, möglicherweise ausgeführt als Denkfehler.

Debug-Ausgaben sind sehr hilfreich. Je nachdem, wie aussagekräftig dein Exception-Handler ist, kannst es nützlich sein, den #NM-Handler zu missbrauchen. Einen NMI kann man in der Qemu-Konsole auslösen. Da Paging ebenfalls ein regelmäßig wiederkehrender unerschöpflicher Quell der Freude ist, solltest du deinem VMM-Code viel Aufmerksamkeit widmen und dessen Ergebnisse mit "info mem" und "info tlb" auf Korrektheit prüfen.
155
OS-Design / Re: Qemu = ok, echt Hardware = Auaa... ;(
« am: 31. January 2014, 17:23 »
Und jetzt bitte genauer suchen. :-) Wenn du weißt, wo genau es hängt, dann kriegst du vermutlich auch raus, warum dort hängt.
Ich würde mal auf pmm_free() tippen.
156
tyndur / Re: Download
« am: 28. January 2014, 13:13 »
Du kannst dir den tyndur-Code auf http://git.tyndur.org auch online anschauen.
157
Lowlevel-Coding / Re: ISR Common Stub -> INT13
« am: 27. January 2014, 03:52 »
Und bitte, bitte, bitte... nenne es nicht INT13. Das verwechselt sich so leicht mit dem "int 13h".
Das Gerät nennt man Exception, genauer gesagt #GP oder General Protection Fault.
158
Lowlevel-Coding / Re: Floppy Kabel für 5'25 Zoll gesucht
« am: 27. January 2014, 03:47 »
"Schuss abgekriegt" = "nicht mehr heil, aber noch nicht ganz kaputt".
Die Meldung klingt entweder nach BIOS oder nach DOS, aber was genau, schreibst du netterweise auch nicht hin. Überhaupt passt irgendwie das alles (in meinem Kopf) nicht zusammen, was du schreibst.

Wie gesagt, ich für meinen Teil gehe davon aus, dass
- du nicht alles hinschreibst
- du was falsch machst
- das System (ein bisschen) kaputt ist
- das Diskettenlaufwerk (ein bisschen) kaputt ist
oder
- es sich um ein Problem handelt, das ich noch nie gesehen habe

Bedenke, dass du da mit ca. 30 Jahre alter Technologie rumhantierst. Die ist nicht unbedingt taufrisch und braucht vielleicht ein bisschen Starthilfe. Im Vintage-Computing-Forum wird dir vielleicht geholfen, hier wahrscheinlich nicht mehr. Ich hab jedenfalls keine Ideen mehr.

Gruß,
Svenska
159
Lowlevel-Coding / Re: Floppy Kabel für 5'25 Zoll gesucht
« am: 26. January 2014, 12:38 »
"Fehler 02B0" sagt mir nichts. Was ist das für eine Fehlermeldung, wo taucht sie auf, wie sieht sie aus, was hast du versucht? Disketten- und (ATAPI-)CD-Laufwerke haben normalerweise nichts miteinander zu tun und es gibt auch keinen Grund für Konflikte.

Irgendwas passt hier nicht zusammen. Entweder, du machst was falsch oder das System hat einen Schuss abgekriegt.
160
Lowlevel-Coding / Re: Floppy Kabel für 5'25 Zoll gesucht
« am: 22. January 2014, 13:08 »
Du musst den Typ des Diskettenlaufwerks im BIOS eintragen.
Wenn da ein Passwort ist, musst du es wegkriegen - Google ist dein Freund.
Seiten: 1 ... 6 7 [8] 9 10 ... 90

Einloggen