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

Seiten: [1]
1
Lowlevel-Coding / Re: scancode AltGr
« am: 18. September 2009, 16:36 »
Danke erstmal für die Antworten. Aber kaum hat man es implementiert, gibt es schon neue Probleme. Zwei Stück genau genommen:
1.:
Die AltGr Taste funktioniert unter qemu - aber wenn ich es richtig Teste, geht sie nicht. Hab keine Ahnung woran des liegt. Im Tastaturtreiber sieht es wie folgt aus:
       //scancode-Array vorher deklariert und mit Werten belegt
       BYTE sca = inb(0x60);
if(sca != 0 && sca < 0x56 && (sca == 0x2A || sca == 0x36))
{
shift = 1;
}
/*!!!*/ else if(sca != 0 && sca == 0xE0)
/*!!!*/ {
/*!!!*/ BYTE next = inb(0x60);
/*!!!*/ if(next != 0 && next == 0x38)
/*!!!*/ {
/*!!!*/ altGr = 1;
/*!!!*/ }
/*!!!*/ else if(next != 0 && next == 0xB8)
/*!!!*/ {
/*!!!*/ altGr = 0;
/*!!!*/ }
/*!!!*/ }
else if(sca != 0 && sca < 0x56 && shift == 0 && altGr != 1)
{
//putnum(scancode[sca][0][0], 16);
//putstr(" | ");
putchar(scancode[sca][0][0]);
//putchar(' ');
}
else if(sca != 0 && sca < 0x56 && shift == 1 && altGr != 1)
{
//putnum(scancode[sca][1][0], 16);
//putstr(" | ");
putchar(scancode[sca][1][0]);
//putchar(' ');
}
else if(sca != 0 && (sca == (0x2A + 0x80) || sca == (0x36 + 0x80)))
{
shift = 0;
}
else if(sca != 0 && sca == (0xE0 + 0x80))
{
altGr = 0;
}
else if(sca != 0 && shift != 1 && altGr == 1)
{
//putnum(scancode[sca][0][1], 16);
//putstr(" | ");
putchar(scancode[sca][0][1]);
//putchar(' ');

Und zweitens:
Ich habe in der Screen-Ausgabe-Funktion, auch '\b' implementiert, soll heißen die Backspace Taste sollte auch funktionieren. Tut sie auch aber leider nicht richtig... Drückt man Backspace so wird das letzte Zeichen gelöscht, und der Cursor eine position zurück gesetzt, d.h. so wie es sein sollte. Ist der Cursor aber am Anfang der zeile, und man drückt dann BS  so springt der Cursor nicht eine Zeile höher, sondern bleibt einfach stehen. Das bringt mich echt noch um den Verstand :x Hier der Code:
void putchar(char c)
{
                BYTE backColour = 0;
BYTE foreColour = 15;

BYTE  attributeByte = (backColour << 4) | (foreColour & 0x0F);
WORD attribute = attributeByte << 8;
WORD *location;

//Backspace
/*!!!*/ if (c == '\b')
/*!!!*/ {
/*!!!*/ //Cursor_x und cursor_y sind global
/*!!!*/                        if(cursor_x != 0)
/*!!!*/ {
/*!!!*/ location = (video + (cursor_y*80 + cursor_x)) - 1;
/*!!!*/ *location = 0x0 | attribute;
/*!!!*/ cursor_x--;
/*!!!*/ }
/*!!!*/ else if(cursor_x == 0)
/*!!!*/ {
/*!!!*/ cursor_y--;
/*!!!*/ cursor_x = 80;
/*!!!*/ }
/*!!!*/ }
//Tabs
else if (c == '\t')
{
cursor_x = (cursor_x+4) & ~(4-1);
}
//Wagenrücklauf
else if (c == '\r')
{
cursor_x = 0;
}
//Zeilenumbruch
else if (c == '\n')
{
while(cursor_x < 80)
{
location = video + (cursor_y*80 + cursor_x);
*location = 0x0 | attribute;
cursor_x++;
}
cursor_x = 0;
cursor_y++;
}
//doppelte Anführungszeichen
else if(c == '\"')
{
location = video + (cursor_y*80 + cursor_x);
*location = 0x22 | attribute;
cursor_x++;
}
//einfache Anführungszeichen
else if(c == '\'')
{
location = video + (cursor_y*80 + cursor_x);
*location = 0x27 | attribute;
cursor_x++;
}
//Backslash
else if(c == '\\')
{
location = video + (cursor_y*80 + cursor_x);
*location = 0x5C | attribute;
cursor_x++;
}
//Zeichen Ausgeben
else if(c >= ' ')
{
location = video + (cursor_y*80 + cursor_x);
*location = c | attribute;
cursor_x++;
}

//Am Zeilenende,Zeilenumbruch
if (cursor_x >= 80)
{
cursor_x = 0;
cursor_y ++;
}

//Scrollen, wenn nötig
scroll();
//cursor setzen
move_cursor();
}
Hoffe jemand weiß Rat... :-)

mfg energetic
2
Lowlevel-Coding / scancode AltGr
« am: 13. September 2009, 21:54 »
Hi ich bin grad dabei ein Tastaturtreiber zu proggen.
Soll heißen ich sitze schon etwas länger davor, aber es klappt mittlerweile alles bis auf die Zeichen, die mit der Taste AltGr geschrieben werden.
Nun ich will also prüfen,ob die altGr-Taste gedrückt ist, aber welchen Scancode hat die??? :?
Durch ausgeben des Scancodes der gedrückten Taste komme ich auf folgenden: (dezimal) 2242562.
Das scheint aber nicht der richtige zu sein, was ja irgendwie nicht verwunderlich ist... Die Zahl Passt ja nicht mal in ein char.
Wie habt ihr das denn mit der altGr Taste gelöst? Kann man die überhaupt verwenden, oder geht es nur mit der normalen Alt-Taste?

Und noch ein Problem ist folgendes: Ich arbeite mit Ubuntu-Linux. Auf diesem habe ich zwei Windowmanager installiert(KDE und GNOME). Und seit neustem, wenn ich mich unter KDE einlogge funktioniert meine Tastatur nicht mehr. Ich hab das Gefühl, das kam durch den Treiber zustande. Unter GNOME geht's noch... Woran könnte das liegen?

mfg energetic
3
Lowlevel-Coding / Re: Hilfe beim booten
« am: 15. August 2009, 14:21 »
Nun, vielen dank. Die Antworten waren sehr hilfreich. Aber noch zu GRUB-Konfigurationsdatei:
wenn ich z.B. eine Linux-LiveCD einlege erscheint ja auch kein solches Menu. die wird einfach so gebootet.
4
Lowlevel-Coding / Re: Hilfe beim booten
« am: 15. August 2009, 12:40 »
Also gut, mal in allen Einzelheiten, was ich gemacht hab, was funktioniert hat, und wo ich noch fragen hab. Alles im Bezug zum Wiki, zum Thema C-Kernel mit GRUB.
  • Code genommen und mit den entsprechenden Endungen gespeichert -> erfolgreich; Vom Assemblercode verstehe ich aber (noch) nichts, er ist einfach kopiert
  • Assemblieren und kompilieren erfolgreich -> nun sind zwei *.o Dateien vorhanden
  • linken erfolgreich -> nun ist eine *.bin Datei vorhanden
Jetzt zum GRUB-Image erstellen:
  • ich führe dd if=/dev/zero of=floppy.img bs=1024 count=1440 im Verzeichnis des Betriebssystems aus -> erfolgreich; Aber ich verstehe nicht welche Inputfile und welche Outputfile da verwendet wird und warum
  • ich führe /sbin/mke2fs -F floppy.img
    ebenfalls im Verzeichnis des OS aus -> soweit ich erkennen kann erfolgreich
  • eine IMG-Datei ist nun vorhanden
Nun zur Diskette:
  • ein Verzeichnis floppy wird benötigt, aber wo? Ich hab es einfach im OS Ordner erstellt
  • mounten des Images -> erfolgreich
  • Kopieren des Images in den Floppy-Ordener erfolgreich
  • Kopieren von stage1 und stage2 aus "/boot/grub/" in den neu erstellten Ordner "floppy/grub" erfolgreich
  • GRUB-Konfigurationsdatei erstellen -> erfolgreich; speichern im Ordner "floppy/grub/" -> erfolgreich; wozu brauchen wir die überhaupt? Würde ohne die nicht auch beim reboot von der Diskette gestartet?
  • unmounten des Images erfolgreich
  • Grub muss noch in den Bootsektor: was hat das ganze auf einmal mit dem Pfad "/usr/sbin" zu tun?
  • device (fd0) floppy.img -> erfolgreich
  • root (fd0) -> erfolgrich
  • setup (fd0) -> erfolgreich
  • beim kopieren des Images auf den Folppy-Disk: dd: Schreiben in "dev/fd0": Input/putput error

So, das wars dann schon mit der Beschreibung...  :-D

Edit: Funktioniert nun doch, ich hätte aber trotzdem noch gerne ein paar Antworten auf mein Fragen
5
Lowlevel-Coding / Hilfe beim booten
« am: 14. August 2009, 21:24 »
Hi,
ich hab mir mal überlegt, dass es doch interessant wäre ein OS zu proggen...
Stimmt auch, aber leider nicht einfach :-D
Wie man sieht, denn ich hänge schon beim booten. Ich hab erstmal das OS so geschrieben wie ich es wollte, aber dies ließ sich nicht starten. Gut, liegt am Code, dachte ich, und so habe ich einfach mal den Beispielcode kopiert und es mit dem versucht. Gleiches Ergebnis. Andere Tutorials haben auch ncht geholfen. Also wollte ich mal fragen, ob mir jemand in allen Einzelheiten schildern kann wie ich mein OS boote.  Ob von Diskette, CD oder mit qemu, völlig egal. Hauptsache es geht.  Ein paar Infos noch:
  • ich will GRUB verwenden
  • Ich hab es schon geschafft ein IMG-Datei zu erzeugen
  • GRUB ist auf meiner Festplatte installiet
  • Ich verwende (Kubuntu-)Linux
  • qemu ist installiert
  • ich schreibe in C und habe (nach meiner Meinung)
    ganz gute Kentnisse; Bei Assembler leider weniger
Seiten: [1]

Einloggen