| Zeile 33: | Zeile 33: | ||
<c> | <c> | ||
| − | + | void kbc_write_inbuf(uint8_t data) | |
{ | { | ||
| − | + | uint32_t to = 255; | |
while ( inb(0x64) & 0x02) | while ( inb(0x64) & 0x02) | ||
{ | { | ||
| Zeile 51: | Zeile 51: | ||
<c> | <c> | ||
| − | + | uint8_t kbc_read_outbuf() | |
{ | { | ||
| − | + | uint32t to = 255; | |
while ( ! (inb(0x64) & 0x01) ) | while ( ! (inb(0x64) & 0x01) ) | ||
{ | { | ||
| Zeile 70: | Zeile 70: | ||
<c> | <c> | ||
| − | + | void kbc_send_cmd (uint8_t cmd) | |
{ | { | ||
| − | + | uint32_t to = 255; | |
| − | + | uint8_t kbc_status = inb(KBC_STATUS); | |
while ( inb(0x64) & 0x02) | while ( inb(0x64) & 0x02) | ||
{ | { | ||
| Zeile 116: | Zeile 116: | ||
<c> | <c> | ||
| − | + | void mouse_send_cmd(uint8_t cmd) | |
{ | { | ||
kbc_send_cmd(KBC_CMD_MOUSE); | kbc_send_cmd(KBC_CMD_MOUSE); | ||
| Zeile 139: | Zeile 139: | ||
<c> | <c> | ||
| − | + | uint8_t mouse_read_data() | |
{ | { | ||
return kbc_read_outbuf(); | return kbc_read_outbuf(); | ||
| Zeile 151: | Zeile 151: | ||
#define ACK 0xFA | #define ACK 0xFA | ||
| − | + | void mouse_install() | |
{ | { | ||
| − | + | uint8_t command_byte; | |
| − | + | //leere den Daten Puffer | |
while ( inb(0x64) & 0x01) | while ( inb(0x64) & 0x01) | ||
{ | { | ||
| Zeile 161: | Zeile 161: | ||
} | } | ||
| − | + | //aktiviere die Maus beim Keyboard Controller | |
kbc_send_cmd(0xA8); | kbc_send_cmd(0xA8); | ||
| − | + | //Bit 1 im Command Byte setzen | |
kbc_send_cmd(0x20); | kbc_send_cmd(0x20); | ||
cb = kbc_read_outbuf(); | cb = kbc_read_outbuf(); | ||
| Zeile 171: | Zeile 171: | ||
kbc_write_inbuf(cb); | kbc_write_inbuf(cb); | ||
| − | + | //Standards setzen | |
mouse_send_cmd(0xF6) | mouse_send_cmd(0xF6) | ||
| − | if ( mouse_read_data() != ACK) | + | if( mouse_read_data() != ACK) |
{ | { | ||
kprintf(“mouse error!”); | kprintf(“mouse error!”); | ||
| Zeile 179: | Zeile 179: | ||
} | } | ||
| − | + | //das Senden von Daten aktivieren | |
mous_send_cmd(0xF4); | mous_send_cmd(0xF4); | ||
| − | if ( mouse_read_data() != ACK) | + | if( mouse_read_data() != ACK) |
{ | { | ||
kprintf(“mouse error!”); | kprintf(“mouse error!”); | ||
| Zeile 217: | Zeile 217: | ||
<c> | <c> | ||
| − | + | uint8_t cycle=1; | |
| − | + | uint8_t flags; | |
int x_mov, y_mov; | int x_mov, y_mov; | ||
| − | + | void irq_12_handler() | |
{ | { | ||
| − | + | uint32_t val; | |
switch (cycle) | switch (cycle) | ||
{ | { | ||
| Zeile 239: | Zeile 239: | ||
case 2: | case 2: | ||
val = mouse_read_data(); | val = mouse_read_data(); | ||
| − | val &= ( | + | val &= (uint32_t )0xFF; //es dürfen wirklich nur die ersten 8 Bits belegt sein! |
if (flags & 0x10) | if (flags & 0x10) | ||
x_mov = (val | 0xFFFFFF00); | x_mov = (val | 0xFFFFFF00); | ||
| Zeile 248: | Zeile 248: | ||
case 3: | case 3: | ||
val = inb(0x60); | val = inb(0x60); | ||
| − | val &= ( | + | val &= (uint32_t )0xFF; |
if (flags & 0x20) | if (flags & 0x20) | ||
y_mov = - (val | 0xFFFFFF00); | y_mov = - (val | 0xFFFFFF00); | ||