Um genau zu sein entwickle ich mit C ein Betriebssystem. Bin im Protected Mode etc, aber das ist für dieses Problem wenig relevant. Da es sich um ein algemeines C-Problem handelt stell ich die Frage mal hier:
Also, ich habe einen Keyboard-Treiber der mir je anch Taste n' Integer Wert übergibt. Nun die Funktion dies auswerten soll:
Allerdings funktioniert die Ausgabe nicht.
Ich bekomme das angezeigt:
$è@
Tipp ich auf ne Taste, dann wird @ mit dem Buchstaben ersetzt der zuerst gedrückt wurde. also ich tippe e
dann steht da: $èe.
ich kann nur Mutmaßen wie das in C ist, aber könnte es sein das das Der Code (in Maschienensprach oder wie die heißt^^) für z.B. e ist? Wie gesagt, ich bn mir nicht sicher...
Nun lautet die Ausgabe schlicht "$" .Egal was ich drück, es rührt nix.
2.Edit:
Hab das mit der 1 und der 0 übersehen was du sagtest. Das heißt er zeigt gar nichts an. Auch nicht bei Tastendruck.
Edit: BTW: Der Keyboard-Treiber würde mich interessieren..
Im Grunde ist es recht einfach. Es gibt einen Interrupt Detection (?) Table kurz IDT. Ich kann den *alten* aus dem Real-Mode nicht mitnehmen (und will es auch nicht) und kann so keine Standart BIOS-Ints mehr im Protected Mode nutzen. Also lege ich mir selbst einen an. Nun trage ich da ein das beim Tastendruck die Funktion IRQ_1 ausgeführt wird (IRQ 1 ist der Keyboard-Int ^^)
Mein Treiber ist zwar nicht alzu besonders, aber hier ist mal ne Version:
Das anlegen des IDT ist hier etwas komplizierter. Wenn dich das interressiert, dann kannst du ja mal den Code von mir ansehen. Zum kompilen brauchst du djgpp (nicht die System-Varis vergessen) und nasm (beides kostenlos). Auserdem rawwrite ums auf eine Diskette zu schreiben und evt. Bochs ums zu Emulieren. Allerdings funktioniert das Teil noch nicht besonders auf manchen PC's (z.B. i686er Architekturen)
warum weiß ich nicht, wird sich noch ändern -.-!
Wem das zuviel ist kanns ja unter Linux kompilen. GCC ist unter Linux schon bald standart. Nasm (zumindest bei Fedora nicht, aber man kannst ja downloaden).
Unter Linux müsst ihr euch halt die Befehle aus der Compile.bat ziehen und dann in ne Make schreiben.
Allerding muss ich sagen es liegt nicht am "Treiber". Wenn amn statt den
case x: console[pos] = 'x'; break;
ein case x: printf("x"); break;
einfügt klappt es.
Edit 3:
Mhm... wenn ich statt dem \0 bei der Schleife einfach nur 0 eingebe und dann hallo eingebe bekomme ich das angezeigt:
Der Fehler war 1. Das das 1. Zeichen ein \0 war und deshalb nix ausgegeben wurde. Das mit dem h0a ist so zu erklären. Wenn kein Zeichen kommt wird pos +1 gemacht, aber in Console wird nix geändert. Das heißt in Console steht dann
h\0a was natürlich keine Ausgabe erzeugt
Edit x [sind schon zu viele...]:
Hab das ganze nun mal in ner billig-Konsole umgesetzt: [Bild]
Passt zwar nicht ganz zum threadthema, aber was solls ...
Weiss einer, wie man bootfaehige CDs fuer eigene Betriebssysteme erstellt ?
Also sowas wie rawwrite fuer CDs ? Dieweil ich hab kein Diskettenlaufwerk -__-
Soweit ich weiß hat z.B. Nero (bzw. Nero Express) die Option bootfähige CDs zu erstellen. Genaueres kann ich leider nicht sagen, da ich dieses Feature noch nie verwendet habe.
Passt zwar nicht ganz zum threadthema, aber was solls ...
Weiss einer, wie man bootfaehige CDs fuer eigene Betriebssysteme erstellt ?
Also sowas wie rawwrite fuer CDs ? Dieweil ich hab kein Diskettenlaufwerk -__-
Gruss Luki
...
Hatte ich auch nicht... ahbs von nem Freund bekommen und musste mir nur noch das total überteuerte Kabel kaufen [Das Flachband].
Naja, wenns nur drum geht etwas zu testen kannst du ja mit Bochs n' PC emulieren und's darauf laufen lassen:
btw: hab wieder geupt. Jetzt hab ich die Befehle info und exit zur Konsole hinzugefügt
Auserdem hab ich mir n' paar Ansätze für n' Floppy-Treiber überlegt. [Der wird dringend nötig sein und in Verbindung mit dem Datentreiber (Das ist dann das Teil was "weiß" wie Fat aufgebaut ist und es an den Floppy-Treiber leitet) die Grundlage fürs ausführen von Programmen sein.
--
Signature.
Geändert von Crash-Override (20.04.2005 um 15:36 Uhr)
Ich habs leider nicht auf die Reihe gebracht, das unter Windows mit gcc (Nicht djgpp) zu compilieren. Wär nett, wenn du entweder alle benötigten Downloadlinks und/oder eine fertig compilierte Version liefern könntest.
Compilte Version liegt bei also, zuerst MUSST du den Bootloader auf ne Diskette kopieren. Das heißt: Ins Bootloader Verzeichniss gehen und Bootf.bat ausführen. Dafür benötigst du den Freeware Assembler nasm und das Programm PartCopy. NASM Homepage. Partcopy
Die Datei nasmw.exe in nasm.exe umbenennen (ich machs so, weil in Linux heißt sie nur nasm) und ins Windows verzeichniss oder ins Bootloader Verzeichniss damit (Partcopy auch). Dann kopierst du aus dem Out Verzeichniss die Kernel.bin auf die Diskette (du kannst sie ganz normal mit Windows reinkopieren da ich Fat12 als Filesystem ahb =).
sry für den Doppelpost, aber sonst würde wohl niemand mehr in den Thread reinsehen, oder?
Also, neues Problem. Ich will meine Konsole nun auf Großbuchstaben erweitern...
Hier der relevante Keyboard-Treiber abschnitt:
(Am Konsolen-Code liegts nicht, denn der gibt einfach aus was er zurückbekommt.)
Das Problem ist folgendes: Wenn ich Caps an hab dann schreibt er einwandfrei große-Buchstaben, wenn ich allerdings Caps aus ist, dann gibt er sobald die Taste gedrückt wird die Taste als kleinbuchstaben aus, wenn ich die Taste loslasse, dann gibt er die selbe Taste als Großbuchstabe aus. KA woran das liegt.
Ach ja: Ich werde Fat12 (weil es eben DAS Disketten-Format ist) als mein 1. Filesystem verwenden. Das heißt man kann nur DOS-Datei-namen im 8:3 Format verwenden. Ich dachte mir man könnte es ja wie bei Linux machne und Dateien am Header erkennen lassen. Das hieße dann das ich bis zu 11-Zeichen Dateinamen nutzen kann. Das hieße auf Dateiendungen weitgehend zu verzichten. Was haltet ihr davon?