Autor Thema: [gelöst] Problem mit Keybord-Treiber/IRQ1  (Gelesen 5156 mal)

X-Mind

  • Gast
Gespeichert
« am: 30. December 2009, 15:33 »
Hallo

Also, das ist mein erster Post.
Bitte nicht sauer sein wenn es nicht ganz passt, aber jetzt zu meinem problem:

Wenn ich in meinem  OS (wenn man das so nennen darf) eine taste
z.b das "S" Drücke, dann erscheint auf dem bildschirm ein großes S.

Das Problem ist jetzt aber dass Immer ein S erscheint, egal welche Taste ich drücke.

Keyboard.c

#include "keyboard.h"
#include "externs.h"
#include "util.h"

int ShiftKeyDown;

void keyboard_init()
{
    while (inportb(0x64)&1)
      inportb(0x60);
};

unsigned int FetchAndAnalyzeScancode()
{
unsigned int scancode;
while(TRUE)
{
scancode = inportb(0x60);

if ( scancode & 0x80 )
{
scancode &= 0x7F;
if ( scancode != KRLEFT_SHIFT || scancode == KRRIGHT_SHIFT )
{
    ShiftKeyDown = 0;
}
}
else
{

    if ( scancode == KRLEFT_SHIFT || scancode == KRRIGHT_SHIFT )
    {
    ShiftKeyDown = 1;
    continue;
    }
}
    break;
}
return scancode;
}

unsigned char const k_getch()
{
unsigned int scan;
unsigned char retchar;
scan = FetchAndAnalyzeScancode();
if ( ShiftKeyDown )
    retchar = asciiShift[ scan ];
else
retchar = asciiNonShift[ scan ];
return retchar;
}

void keyboard_handler()
{

   //unsigned char bufferKEY[10];
   //bufferKEY[0] = k_getch();
   //k_printf(bufferKEY, 9,0x9);

   k_printf(k_getch(), 9,0x9);
}

void keyboard_install()
{
    keyboard_init();
    irq_install_handler(1, keyboard_handler);
}

Keyboard.h

#ifndef KEYBOARD_H
#define KEYBOARD_H

#define NULL 0
#define ESC       27
#define BACKSPACE '\b'
#define TAB       '\t'
#define ENTER     '\n'
#define RETURN    '\r'
#define NEWLINE   ENTER

// Non-ASCII special scancodes // Esc in scancode is 1
#define    KESC         1
#define    KF1          0x80
#define    KF2         (KF1 + 1)
#define    KF3         (KF2 + 1)
#define    KF4         (KF3 + 1)
#define    KF5         (KF4 + 1)
#define    KF6         (KF5 + 1)
#define    KF7         (KF6 + 1)
#define    KF8         (KF7 + 1)
#define    KF9         (KF8 + 1)
#define    KF10        (KF9 + 1)
#define    KF11        (KF10 + 1)
#define    KF12        (KF11 + 1)

// Cursor Keys
#define    KINS         0x90
#define    KDEL        (KINS + 1)
#define    KHOME       (KDEL + 1)
#define    KEND        (KHOME + 1)
#define    KPGUP       (KEND + 1)
#define    KPGDN       (KPGUP + 1)
#define    KLEFT       (KPGDN + 1)
#define    KUP         (KLEFT + 1)
#define    KDOWN       (KUP + 1)
#define    KRIGHT      (KDOWN + 1)

// "Meta" keys
#define    KMETA_ALT     0x0200                                // Alt is pressed
#define    KMETA_CTRL    0x0400                                // Ctrl is pressed
#define    KMETA_SHIFT   0x0800                                // Shift is pressed
#define    KMETA_ANY    (KMETA_ALT | KMETA_CTRL | KMETA_SHIFT)
#define    KMETA_CAPS    0x1000                                // CapsLock is on
#define    KMETA_NUM     0x2000                                // NumLock is on
#define    KMETA_SCRL    0x4000                                // ScrollLock is on

// Other keys
#define    KPRNT    ( KRT + 1 )
#define    KPAUSE   ( KPRNT + 1 )
#define    KLWIN    ( KPAUSE + 1 )
#define    KRWIN    ( KLWIN + 1 )
#define    KMENU    ( KRWIN + 1 )

#define    KRLEFT_CTRL        0x1D
#define    KRRIGHT_CTRL       0x1D

#define    KRLEFT_ALT         0x38
#define    KRRIGHT_ALT        0x38

#define    KRLEFT_SHIFT       0x2A
#define    KRRIGHT_SHIFT      0x36

#define    KRCAPS_LOCK        0x3A
#define    KRSCROLL_LOCK      0x46
#define    KRNUM_LOCK         0x45
#define    KRDEL              0x53

#define MAXKEYBUFFER 64       // max keyboard buffer

// Keymaps: US International

// Non-Shifted scan codes to ASCII:
static unsigned char asciiNonShift[] = {
NULL, ESC, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 's', '´', BACKSPACE,
TAB, 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p','ü', '+', ENTER, 0,
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'ö', 'ä', '#', 0, '>',
'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '-', 0, 0, 0, ' ', 0,
KF1, KF2, KF3, KF4, KF5, KF6, KF7, KF8, KF9, KF10, 0, 0,
KHOME, KUP, KPGUP,'-', KLEFT, '5', KRIGHT, '+', KEND, KDOWN, KPGDN, KINS, KDEL, 0, 0, 0, KF11, KF12 };

// Shifted scan codes to ASCII:
static unsigned char asciiShift[] = {
NULL, ESC, '!', '"', '§', '$', '%', '&', '/', '(', ')', '=', '?', '´', BACKSPACE,
TAB, 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P',   '{', '}', ENTER, 0,
'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Ö', 'Ä', '\'', 0, '>',
'Y', 'X', 'C', 'V', 'B', 'N', 'M', ';', ':', '_', 0, 0, 0, ' ', 0,
KF1,   KF2, KF3, KF4, KF5, KF6, KF7, KF8, KF9, KF10, 0, 0,
KHOME, KUP, KPGUP, '-', KLEFT, '5',   KRIGHT, '+', KEND, KDOWN, KPGDN, KINS, KDEL, 0, 0, 0, KF11, KF12 };

#endif


externs.h


#ifndef EXTERNS_H_INCLUDED
#define EXTERNS_H_INCLUDED

#define TRUE 1
#define FALSE 0

/* This defines what the stack looks like after an ISR was running */
struct regs
{
    unsigned int gs, fs, es, ds;
    unsigned int edi, esi, ebp, esp, ebx, edx, ecx, eax;
    unsigned int int_no, err_code;
    unsigned int eip, cs, eflags, useresp, ss;
};

extern void k_clear_screen();
extern unsigned int k_printf(char* message, unsigned int line, char attribute);
extern void update_cursor(int row, int col);

extern void keyboard_init();
extern unsigned char const k_getch();
extern unsigned int FetchAndAnalyzeScancode();
extern void keyboard_handler();

extern void gdt_set_gate(int num, unsigned long base, unsigned long limit, unsigned char access, unsigned char gran);
extern void gdt_install();

extern void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags);
extern void idt_install();

extern void isrs_install();
extern void irq_install();
extern void keyboard_install();
extern void fault_handler(struct regs* r);
extern void irq_install_handler(int irq, void (*handler)(struct regs* r));
extern void irq_uninstall_handler(int irq);
extern void irq_handler(struct regs* r);
#endif // EXTERNS_H_INCLUDED


idt.c

#include "externs.h"
#include "util.h"

struct idt_entry
{
    unsigned short base_lo;
    unsigned short sel;
    unsigned char always0;
    unsigned char flags;
    unsigned short base_hi;
}__attribute__((packed));

struct idt_ptr
{
    unsigned short limit;
    unsigned int base;
}__attribute__((packed));
struct idt_entry idt[256];
struct idt_ptr   idt_register;

void idt_set_gate(unsigned char num, unsigned long base, unsigned short sel, unsigned char flags)
{
    idt[num].base_lo = (base        & 0xFFFF);
    idt[num].base_hi = (base >> 16) & 0xFFFF;
    idt[num].sel     =   sel;
    idt[num].always0 =     0;
    idt[num].flags   = flags;
}

void idt_install()
{
    // Hier legen wir die Base und das Limit der IDT fest

    idt_register.limit = (sizeof (struct idt_entry) * 256)-1;
    idt_register.base  = (unsigned int) &idt;

    k_memset(&idt, 0, sizeof(struct idt_entry) * 256); // Jetzt schmeißen wir den eintrag "IDT" raus

    // man kann mit der Funktion idt_set_gate(...) neue ISRs Hinzufügen

    asm volatile("lidt %0" : "=m" (idt_register));
}


irq.c

#include "externs.h"
#include "util.h"

extern inline void outportb(unsigned port, unsigned val);

extern void irq0();  extern void irq1();  extern void irq2();  extern void irq3();
extern void irq4();  extern void irq5();  extern void irq6();  extern void irq7();
extern void irq8();  extern void irq9();  extern void irq10(); extern void irq11();
extern void irq12(); extern void irq13(); extern void irq14(); extern void irq15();

void* irq_routines[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

void irq_install_handler(int irq, void (*handler)(struct regs* r)) {irq_routines[irq] = handler;}

void irq_uninstall_handler(int irq) {irq_routines[irq] = 0;}


void irq_remap()
{
    outportb(0x20, 0x11); outportb(0xA0, 0x11);

    outportb(0x21, 0x20);
    outportb(0xA1, 0x28);


    outportb(0x21, 0x04); outportb(0xA1, 0x02);
    outportb(0x21, 0x01); outportb(0xA1, 0x01);
    outportb(0x21, 0x00); outportb(0xA1, 0x00);
}

void irq_install()
{
    irq_remap();
    idt_set_gate(32, (unsigned) irq0,  0x08, 0x8E);   idt_set_gate(33, (unsigned) irq1,  0x08, 0x8E);
    idt_set_gate(34, (unsigned) irq2,  0x08, 0x8E);   idt_set_gate(35, (unsigned) irq3,  0x08, 0x8E);
    idt_set_gate(36, (unsigned) irq4,  0x08, 0x8E);   idt_set_gate(37, (unsigned) irq5,  0x08, 0x8E);
    idt_set_gate(38, (unsigned) irq6,  0x08, 0x8E);   idt_set_gate(39, (unsigned) irq7,  0x08, 0x8E);
    idt_set_gate(40, (unsigned) irq8,  0x08, 0x8E);   idt_set_gate(41, (unsigned) irq9,  0x08, 0x8E);
    idt_set_gate(42, (unsigned) irq10, 0x08, 0x8E);   idt_set_gate(43, (unsigned) irq11, 0x08, 0x8E);
    idt_set_gate(44, (unsigned) irq12, 0x08, 0x8E);   idt_set_gate(45, (unsigned) irq13, 0x08, 0x8E);
    idt_set_gate(46, (unsigned) irq14, 0x08, 0x8E);   idt_set_gate(47, (unsigned) irq15, 0x08, 0x8E);
}

void irq_handler(struct regs* r)
{
    void (*handler)(struct regs* r);

    handler = irq_routines[r->int_no - 32];
    if (handler) { handler(r); }

    if (r->int_no >= 40) { outportb(0xA0, 0x20); }

    outportb(0x20, 0x20);
}


Ach, außerdem kommt beim kompilieren immer die meldung:

C:\OS\nasm>gcc  -Wall -O  -c keyboard.c -o keyboard.o
keyboard.c: In function `keyboard_handler':
keyboard.c:61: warning: passing arg 1 of `k_printf' makes pointer from integer w
ithout a cast

EDIT:

Wie Benutzt man den "cast"- Operator
« Letzte Änderung: 30. December 2009, 16:53 von X-Mind »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 30. December 2009, 16:03 »
Hi,

Ach, außerdem kommt beim kompilieren immer die meldung:

C:\OS\nasm>gcc  -Wall -O  -c keyboard.c -o keyboard.o
keyboard.c: In function `keyboard_handler':
keyboard.c:61: warning: passing arg 1 of `k_printf' makes pointer from integer w
ithout a cast

Wie Benutzt man den "cast"Operator

diese Warnung solltest du nicht wegcasten. Du übergibst k_printf einen char (der Rückgabewert von k_getch() ist vom typ char), aber k_printf erwartet einen char*.

Wenn du keine andere Ausgabefunktion hast, kannst du ein einzelnes Zeichen so ausgeben:

char t[2]; // kurze zeichenkette mit 2 zeichen
t[0] = k_getch(); // das zeichen
t[1] = 0; // die zeichenkette terminieren

k_printf(t, 9, 0x09);
Dieser Text wird unter jedem Beitrag angezeigt.

X-Mind

  • Gast
Gespeichert
« Antwort #2 am: 30. December 2009, 16:13 »
Danke für den Code, PorkChicken.

Die Cast -Fehlermeldung ist weg, nur wird jetzt garnichts mehr ausgegeben.
 :-D

Also, konnte ich das prob nicht doch wegcasten??

EDIT: hier jetzt noch das Bochs - Logfile:


´00000000000i[     ] Bochs x86 Emulator 2.4.1
00000000000i[     ]   Build from CVS snapshot on June 7, 2009
00000000000i[     ] System configuration
00000000000i[     ]   processors: 1 (cores=1, HT threads=1)
00000000000i[     ]   A20 line support: yes
00000000000i[     ] CPU configuration
00000000000i[     ]   level: 6
00000000000i[     ]   SMP support: no
00000000000i[     ]   APIC support: yes
00000000000i[     ]   FPU support: yes
00000000000i[     ]   MMX support: yes
00000000000i[     ]   SSE support: 2
00000000000i[     ]   CLFLUSH support: yes
00000000000i[     ]   VME support: yes
00000000000i[     ]   3dnow! support: no
00000000000i[     ]   PAE support: yes
00000000000i[     ]   PGE support: yes
00000000000i[     ]   PSE support: yes
00000000000i[     ]   1G paging support: no
00000000000i[     ]   x86-64 support: yes
00000000000i[     ]   SEP support: yes
00000000000i[     ]   MWAIT support: no
00000000000i[     ]   XSAVE support: no
00000000000i[     ]   AES support: no
00000000000i[     ]   VMX support: no
00000000000i[     ] Optimization configuration
00000000000i[     ]   RepeatSpeedups support: yes
00000000000i[     ]   Trace cache support: yes
00000000000i[     ]   Fast function calls: yes
00000000000i[     ] Devices configuration
00000000000i[     ]   ACPI support: yes
00000000000i[     ]   NE2000 support: yes
00000000000i[     ]   PCI support: yes
00000000000i[     ]   SB16 support: yes
00000000000i[     ]   USB support: yes
00000000000i[     ]   VGA extension support: vbe cirrus
00000000000i[MEM0 ] allocated memory at 022F0020. after alignment, vector=022F1000
00000000000i[MEM0 ] 32,00MB
00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('C:\Programme\Bochs-2.4.1/BIOS-bochs-latest')
00000000000i[MEM0 ] rom at 0xc0000/40448 ('C:\Programme\Bochs-2.4.1/VGABIOS-lgpl-latest')
00000000000i[CMOS ] Using local time for initial clock
00000000000i[CMOS ] Setting initial clock to: Wed Dec 30 16:21:42 2009 (time0=1262186502)
00000000000i[DMA  ] channel 4 used by cascade
00000000000i[DMA  ] channel 2 used by Floppy Drive
00000000000i[FDD  ] fd0: 'C:\OS\nasm\MyOS.bin' ro=0, h=2,t=80,spt=18
00000000000i[PCI  ] 440FX Host bridge present at device 0, function 0
00000000000i[PCI  ] PIIX3 PCI-to-ISA bridge present at device 1, function 0
00000000000i[MEM0 ] Register memory access handlers: 0x000a0000 - 0x000bffff
00000000000i[WGUI ] Desktop Window dimensions: 1280 x 1024
00000000000i[WGUI ] Number of Mouse Buttons = 16
00000000000i[WGUI ] IME disabled
00000000000i[MEM0 ] Register memory access handlers: 0xe0000000 - 0xe0ffffff
00000000000i[CLVGA] VBE Bochs Display Extension Enabled
00000000000i[CLVGA] interval=50000
00000000000i[     ] init_dev of 'unmapped' plugin device by virtual method
00000000000i[     ] init_dev of 'biosdev' plugin device by virtual method
00000000000i[     ] init_dev of 'speaker' plugin device by virtual method
00000000000i[     ] init_dev of 'extfpuirq' plugin device by virtual method
00000000000i[     ] init_dev of 'gameport' plugin device by virtual method
00000000000i[     ] init_dev of 'pci_ide' plugin device by virtual method
00000000000i[PCI  ] PIIX3 PCI IDE controller present at device 1, function 1
00000000000i[     ] init_dev of 'acpi' plugin device by virtual method
00000000000i[PCI  ] ACPI Controller present at device 1, function 3
00000000000i[     ] init_dev of 'ioapic' plugin device by virtual method
00000000000i[IOAP ] initializing I/O APIC
00000000000i[MEM0 ] Register memory access handlers: 0xfec00000 - 0xfec00fff
00000000000i[     ] init_dev of 'keyboard' plugin device by virtual method
00000000000i[KBD  ] will paste characters every 1000 keyboard ticks
00000000000i[     ] init_dev of 'harddrv' plugin device by virtual method
00000000000i[HD   ] Using boot sequence floppy, none, none
00000000000i[HD   ] Floppy boot signature check is enabled
00000000000i[     ] init_dev of 'serial' plugin device by virtual method
00000000000i[SER  ] com1 at 0x03f8 irq 4
00000000000i[     ] init_dev of 'parallel' plugin device by virtual method
00000000000i[PAR  ] parallel port 1 at 0x0378 irq 7
00000000000i[     ] register state of 'unmapped' plugin device by virtual method
00000000000i[     ] register state of 'biosdev' plugin device by virtual method
00000000000i[     ] register state of 'speaker' plugin device by virtual method
00000000000i[     ] register state of 'extfpuirq' plugin device by virtual method
00000000000i[     ] register state of 'gameport' plugin device by virtual method
00000000000i[     ] register state of 'pci_ide' plugin device by virtual method
00000000000i[     ] register state of 'acpi' plugin device by virtual method
00000000000i[     ] register state of 'ioapic' plugin device by virtual method
00000000000i[     ] register state of 'keyboard' plugin device by virtual method
00000000000i[     ] register state of 'harddrv' plugin device by virtual method
00000000000i[     ] register state of 'serial' plugin device by virtual method
00000000000i[     ] register state of 'parallel' plugin device by virtual method
00000000000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called
00000000000i[CPU0 ] cpu hardware reset
00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0xfee00000
00000000000i[     ] reset of 'unmapped' plugin device by virtual method
00000000000i[     ] reset of 'biosdev' plugin device by virtual method
00000000000i[     ] reset of 'speaker' plugin device by virtual method
00000000000i[     ] reset of 'extfpuirq' plugin device by virtual method
00000000000i[     ] reset of 'gameport' plugin device by virtual method
00000000000i[     ] reset of 'pci_ide' plugin device by virtual method
00000000000i[     ] reset of 'acpi' plugin device by virtual method
00000000000i[     ] reset of 'ioapic' plugin device by virtual method
00000000000i[     ] reset of 'keyboard' plugin device by virtual method
00000000000i[     ] reset of 'harddrv' plugin device by virtual method
00000000000i[     ] reset of 'serial' plugin device by virtual method
00000000000i[     ] reset of 'parallel' plugin device by virtual method
00000003553i[BIOS ] $Revision: 1.231.2.1 $ $Date: 2009/06/07 07:49:09 $
00000200000i[WGUI ] dimension update x=720 y=400 fontheight=16 fontwidth=9 bpp=8
00000318042i[KBD  ] reset-disable command received
00000444800i[VBIOS] VGABios $Id: vgabios.c,v 1.69 2009/04/07 18:18:20 vruppert Exp $

00000444871i[CLVGA] VBE known Display Interface b0c0
00000444903i[CLVGA] VBE known Display Interface b0c5
00000447828i[VBIOS] VBE Bios $Id: vbe.c,v 1.62 2009/01/25 15:46:25 vruppert Exp $
00000757421i[BIOS ] Starting rombios32
00000757918i[BIOS ] Shutdown flag 0
00000758599i[BIOS ] ram_size=0x02000000
00000759077i[BIOS ] ram_end=32MB
00000799685i[BIOS ] Found 1 cpu(s)
00000818804i[BIOS ] bios_table_addr: 0x000fba88 end=0x000fcc00
00000818912i[PCI  ] 440FX PMC write to PAM register 59 (TLB Flush)
00001146609i[PCI  ] 440FX PMC write to PAM register 59 (TLB Flush)
00001474537i[P2I  ] PCI IRQ routing: PIRQA# set to 0x0b
00001474558i[P2I  ] PCI IRQ routing: PIRQB# set to 0x09
00001474579i[P2I  ] PCI IRQ routing: PIRQC# set to 0x0b
00001474600i[P2I  ] PCI IRQ routing: PIRQD# set to 0x09
00001474610i[P2I  ] write: ELCR2 = 0x0a
00001475495i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a
00001483453i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600
00001486029i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601
00001488444i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101
00001488684i[PIDE ] new BM-DMA address: 0xc000
00001489388i[BIOS ] region 4: 0x0000c000
00001491702i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680
00001491954i[ACPI ] new irq line = 11
00001491968i[ACPI ] new irq line = 9
00001491998i[ACPI ] new PM base address: 0xb000
00001492012i[ACPI ] new SM base address: 0xb100
00001492040i[PCI  ] setting SMRAM control register to 0x4a
00001656134i[CPU0 ] Enter to System Management Mode
00001656144i[CPU0 ] RSM: Resuming from System Management Mode
00001820164i[PCI  ] setting SMRAM control register to 0x0a
00001829333i[BIOS ] MP table addr=0x000fbb60 MPC table addr=0x000fba90 size=0xd0
00001831275i[BIOS ] SMBIOS table addr=0x000fbb70
00001833659i[BIOS ] ACPI tables: RSDP addr=0x000fbc80 ACPI DATA addr=0x01ff0000 size=0x988
00001836898i[BIOS ] Firmware waking vector 0x1ff00cc
00001848011i[PCI  ] 440FX PMC write to PAM register 59 (TLB Flush)
00001848855i[BIOS ] bios_table_cur_addr: 0x000fbca4
00014041771i[BIOS ] Booting from 0000:7c00
00014447414i[FDD  ] partial read() on floppy image returns 480/512
00014492369i[FDD  ] read() on floppy image returns 0
00014537324i[FDD  ] read() on floppy image returns 0
00014582279i[FDD  ] read() on floppy image returns 0
00014627234i[FDD  ] read() on floppy image returns 0
00014672189i[FDD  ] read() on floppy image returns 0
00014717144i[FDD  ] read() on floppy image returns 0
00014762099i[FDD  ] read() on floppy image returns 0
00014807054i[FDD  ] read() on floppy image returns 0
00014852009i[FDD  ] read() on floppy image returns 0
00014896964i[FDD  ] read() on floppy image returns 0
00014941919i[FDD  ] read() on floppy image returns 0
00014986874i[FDD  ] read() on floppy image returns 0
00015031829i[FDD  ] read() on floppy image returns 0
00015076784i[FDD  ] read() on floppy image returns 0
00015121739i[FDD  ] read() on floppy image returns 0
00015166694i[FDD  ] read() on floppy image returns 0
00015211649i[FDD  ] read() on floppy image returns 0
00015256604i[FDD  ] read() on floppy image returns 0
00015301559i[FDD  ] read() on floppy image returns 0
00143800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(0b)
00147400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(8b)
00159448000i[KBD  ] internal keyboard buffer full, ignoring scancode.(0c)
00165164000i[KBD  ] internal keyboard buffer full, ignoring scancode.(8c)
00188000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(10)
00190400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(90)
00196400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(11)
00198784000i[KBD  ] internal keyboard buffer full, ignoring scancode.(91)
00206188000i[KBD  ] internal keyboard buffer full, ignoring scancode.(12)
00209600000i[KBD  ] internal keyboard buffer full, ignoring scancode.(92)
00215904000i[KBD  ] internal keyboard buffer full, ignoring scancode.(13)
00219200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(93)
00227600000i[KBD  ] internal keyboard buffer full, ignoring scancode.(14)
00231200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(94)
00238400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(15)
00242000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(95)
00372628000i[KBD  ] internal keyboard buffer full, ignoring scancode.(15)
00375000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(95)
00378600000i[KBD  ] internal keyboard buffer full, ignoring scancode.(16)
00381000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(96)
00383980000i[KBD  ] internal keyboard buffer full, ignoring scancode.(17)
00386284000i[KBD  ] internal keyboard buffer full, ignoring scancode.(97)
00409800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(17)
00412200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(18)
00413400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(97)
00415468000i[KBD  ] internal keyboard buffer full, ignoring scancode.(19)
00416604000i[KBD  ] internal keyboard buffer full, ignoring scancode.(98)
00418200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(1a)
00419400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(99)
00420600000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9a)
00433308000i[KBD  ] internal keyboard buffer full, ignoring scancode.(3a)
00435576000i[KBD  ] internal keyboard buffer full, ignoring scancode.(1e)
00437256000i[KBD  ] internal keyboard buffer full, ignoring scancode.(ba)
00438364000i[KBD  ] internal keyboard buffer full, ignoring scancode.(1f)
00439800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(20)
00441000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9e)
00442200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(21)
00443400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9f)
00444600000i[KBD  ] internal keyboard buffer full, ignoring scancode.(22)
00445136000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a0)
00445800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(23)
00446260000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a1)
00447000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(24)
00447980000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a2)
00448200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(25)
00449124000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a3)
00449400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(26)
00450264000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a4)
00450600000i[KBD  ] internal keyboard buffer full, ignoring scancode.(27)
00451800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a5)
00451800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(28)
00453000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a6)
00453060000i[KBD  ] internal keyboard buffer full, ignoring scancode.(2b)
00454200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a7)
00454200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(a8)
00455400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(1c)
00456600000i[KBD  ] internal keyboard buffer full, ignoring scancode.(ab)
00457800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(9c)
00467968000i[KBD  ] internal keyboard buffer full, ignoring scancode.(2c)
00469800000i[KBD  ] internal keyboard buffer full, ignoring scancode.(2d)
00471000000i[KBD  ] internal keyboard buffer full, ignoring scancode.(ac)
00472200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(2e)
00473688000i[KBD  ] internal keyboard buffer full, ignoring scancode.(ad)
00474836000i[KBD  ] internal keyboard buffer full, ignoring scancode.(2f)
00475980000i[KBD  ] internal keyboard buffer full, ignoring scancode.(ae)
00477700000i[KBD  ] internal keyboard buffer full, ignoring scancode.(30)
00478828000i[KBD  ] internal keyboard buffer full, ignoring scancode.(af)
00479964000i[KBD  ] internal keyboard buffer full, ignoring scancode.(31)
00481680000i[KBD  ] internal keyboard buffer full, ignoring scancode.(b0)
00482820000i[KBD  ] internal keyboard buffer full, ignoring scancode.(32)
00484200000i[KBD  ] internal keyboard buffer full, ignoring scancode.(b1)
00485400000i[KBD  ] internal keyboard buffer full, ignoring scancode.(b2)

« Letzte Änderung: 30. December 2009, 16:23 von X-Mind »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 30. December 2009, 16:30 »
Wenn der Keyboard Buffer voll ist, heißt das, dass das inportb(0x60) irgendwie nicht ausgeführt wird. Daher vermute ich, dass der Interrupt Handler entweder nicht zurückkehrt, oder nicht ein weiteres mal aufgerufen wird.
Dieser Text wird unter jedem Beitrag angezeigt.

X-Mind

  • Gast
Gespeichert
« Antwort #4 am: 30. December 2009, 16:53 »
Ja, Es war der Handler.

Habe halt alle möglichen C-Source zeilen gelesen, aber nur den asm teil nicht *schäm*

 

Einloggen