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

Seiten: 1 ... 3 4 [5] 6 7 ... 12
81
Lowlevel-Coding / Keyboard treiber und C/C++
« am: 14. June 2005, 16:03 »
Hey zusammen
ICh habe das problem das mein Linker meckert. Und es liegt daran (jedenfalls im C++ code) das er eine Methode nicht aufrufen kann.

Hier mal die Source:
C
#include "Keyboard.h"
#include "Port.h"
#include "Pic.h"
#include "gdt.h"
#include "idt.h"

void ulong_strcnv();

#define LED_NUM_LOCK 2
#define LED_SCROLL_LOCK 1
#define LED_CAPS_LOCK 4

unsigned char led_status = 0;

/* keyboard_buffer stores every key typed */
unsigned char keyboard_buffer[255];
/* keyboard_buffer_size stores the number of keys in the buffer */
unsigned char keyboard_buffer_size = 0;

unsigned char control_keys = 0;

#define CK_SHIFT 1
#define CK_ALT 2
#define CK_CTRL 4

unsigned int scan2ascii_table[][8] =
{
/* ASCII - Shift - Ctrl - Alt - Num - Caps - Shift Caps - Shift Num */
{   0, 0, 0, 0, 0, 0, 0, 0},
{ 0x1B, 0x1B, 0x1B, 0, 0x1B, 0x1B, 0x1B, 0x1B},
/* 1 -> 9 */
{ 0x31, 0x21, 0, 0x7800, 0x31, 0x31, 0x21, 0x21},
{ 0x32, 0x40, 0x0300, 0x7900, 0x32, 0x32, 0x40, 0x40},
{ 0x33, 0x23, 0, 0x7A00, 0x33, 0x33, 0x23, 0x23},
{ 0x34, 0x24, 0, 0x7B00, 0x34, 0x34, 0x24, 0x24},
{ 0x35, 0x25, 0, 0x7C00, 0x35, 0x35, 0x25, 0x25},
{ 0x36, 0x5E, 0x1E, 0x7D00, 0x36, 0x36, 0x5E, 0x5E},
{ 0x37, 0x26, 0, 0x7E00, 0x37, 0x37, 0x26, 0x26},
{ 0x38, 0x2A, 0, 0x7F00, 0x38, 0x38, 0x2A, 0x2A},
{ 0x39, 0x28, 0, 0x8000, 0x39, 0x39, 0x28, 0x28},
{ 0x30, 0x29, 0, 0x8100, 0x30, 0x30, 0x29, 0x29},
/* -, =, Bksp, Tab */
{ 0x2D, 0x5F, 0x1F, 0x8200, 0x2D, 0x2D, 0x5F, 0x5F},
{ 0x3D, 0x2B, 0, 0x8300, 0x3D, 0x3D, 0x2B, 0x2B},
{ 0x08, 0x08, 0x7F, 0, 0x08, 0x08, 0x08, 0x08},
{ 0x09, 0x0F00, 0, 0, 0x09, 0x09, 0x0F00, 0x0F00},
/* QWERTYUIOP[] */
{ 0x71, 0x51, 0x11, 0x1000, 0x71, 0x51, 0x71, 0x51},
{ 0x77, 0x57, 0x17, 0x1100, 0x77, 0x57, 0x77, 0x57},
{ 0x65, 0x45, 0x05, 0x1200, 0x65, 0x45, 0x65, 0x45},
{ 0x72, 0x52, 0x12, 0x1300, 0x72, 0x52, 0x72, 0x52},
{ 0x74, 0x54, 0x14, 0x1400, 0x74, 0x54, 0x74, 0x54},
{ 0x79, 0x59, 0x19, 0x1500, 0x79, 0x59, 0x79, 0x59},
{ 0x75, 0x55, 0x15, 0x1600, 0x75, 0x55, 0x75, 0x55},
{ 0x69, 0x49, 0x09, 0x1700, 0x69, 0x49, 0x69, 0x49},
{ 0x6F, 0x4F, 0x0F, 0x1800, 0x6F, 0x4F, 0x6F, 0x4F},
{ 0x70, 0x50, 0x10, 0x1900, 0x70, 0x50, 0x70, 0x50},
{ 0x5B, 0x7B, 0x1B, 0x0, 0x5B, 0x5B, 0x7B, 0x7B},
{ 0x5D, 0x7D, 0x1D, 0, 0x5D, 0x5D, 0x7D, 0x7D},
/* ENTER, CTRL */
{ 0x0A, 0x0A, 0x0D, 0, 0x0A, 0x0A, 0x0D, 0x0D},
{ 0, 0, 0, 0, 0, 0, 0, 0},
/* ASDFGHJKL;'~ */
{ 0x61, 0x41, 0x01, 0x1E00, 0x61, 0x41, 0x61, 0x41},
{ 0x73, 0x53, 0x13, 0x1F00, 0x73, 0x53, 0x73, 0x53},
{ 0x64, 0x44, 0x04, 0x2000, 0x64, 0x44, 0x64, 0x44},
{ 0x66, 0x46, 0x06, 0x2100, 0x66, 0x46, 0x66, 0x46},
{ 0x67, 0x47, 0x07, 0x2200, 0x67, 0x47, 0x67, 0x47},
{ 0x68, 0x48, 0x08, 0x2300, 0x68, 0x48, 0x68, 0x48},
{ 0x6A, 0x4A, 0x0A, 0x2400, 0x6A, 0x4A, 0x6A, 0x4A},
{ 0x6B, 0x4B, 0x0B, 0x3500, 0x6B, 0x4B, 0x6B, 0x4B},
{ 0x6C, 0x4C, 0x0C, 0x2600, 0x6C, 0x4C, 0x6C, 0x4C},
{ 0x3B, 0x3A, 0, 0, 0x3B, 0x3B, 0x3A, 0x3A},
{ 0x27, 0x22, 0, 0, 0x27, 0x27, 0x22, 0x22},
{ 0x60, 0x7E, 0, 0, 0x60, 0x60, 0x7E, 0x7E},
/* Left Shift*/
{ 0x2A, 0, 0, 0, 0, 0, 0, 0},
/* \ZXCVBNM,./ */
{ 0x5C, 0x7C, 0x1C, 0, 0x5C, 0x5C, 0x7C, 0x7C},
{ 0x7A, 0x5A, 0x1A, 0x2C00, 0x7A, 0x5A, 0x7A, 0x5A},
{ 0x78, 0x58, 0x18, 0x2D00, 0x78, 0x58, 0x78, 0x58},
{ 0x63, 0x43, 0x03, 0x2E00, 0x63, 0x43, 0x63, 0x43},
{ 0x76, 0x56, 0x16, 0x2F00, 0x76, 0x56, 0x76, 0x56},
{ 0x62, 0x42, 0x02, 0x3000, 0x62, 0x42, 0x62, 0x42},
{ 0x6E, 0x4E, 0x0E, 0x3100, 0x6E, 0x4E, 0x6E, 0x4E},
{ 0x6D, 0x4D, 0x0D, 0x3200, 0x6D, 0x4D, 0x6D, 0x4D},
{ 0x2C, 0x3C, 0, 0, 0x2C, 0x2C, 0x3C, 0x3C},
{ 0x2E, 0x3E, 0, 0, 0x2E, 0x2E, 0x3E, 0x3E},
{ 0x2F, 0x3F, 0, 0, 0x2F, 0x2F, 0x3F, 0x3F},
/* Right Shift */
{ 0, 0, 0, 0, 0, 0, 0, 0},
/* Print Screen */
{ 0, 0, 0, 0, 0, 0, 0, 0},
/* Alt  */
{ 0, 0, 0, 0, 0, 0, 0, 0},
/* Space */
{ 0x20, 0x20, 0x20, 0, 0x20, 0x20, 0x20, 0x20},
/* Caps */
{ 0, 0, 0, 0, 0, 0, 0, 0},
/* F1-F10 */
{ 0x3B00, 0x5400, 0x5E00, 0x6800, 0x3B00, 0x3B00, 0x5400, 0x5400},
{ 0x3C00, 0x5500, 0x5F00, 0x6900, 0x3C00, 0x3C00, 0x5500, 0x5500},
{ 0x3D00, 0x5600, 0x6000, 0x6A00, 0x3D00, 0x3D00, 0x5600, 0x5600},
{ 0x3E00, 0x5700, 0x6100, 0x6B00, 0x3E00, 0x3E00, 0x5700, 0x5700},
{ 0x3F00, 0x5800, 0x6200, 0x6C00, 0x3F00, 0x3F00, 0x5800, 0x5800},
{ 0x4000, 0x5900, 0x6300, 0x6D00, 0x4000, 0x4000, 0x5900, 0x5900},
{ 0x4100, 0x5A00, 0x6400, 0x6E00, 0x4100, 0x4100, 0x5A00, 0x5A00},
{ 0x4200, 0x5B00, 0x6500, 0x6F00, 0x4200, 0x4200, 0x5B00, 0x5B00},
{ 0x4300, 0x5C00, 0x6600, 0x7000, 0x4300, 0x4300, 0x5C00, 0x5C00},
{ 0x4400, 0x5D00, 0x6700, 0x7100, 0x4400, 0x4400, 0x5D00, 0x5D00},
/* Num Lock, Scrl Lock */
{ 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 0, 0, 0, 0, 0, 0, 0},
/* HOME, Up, Pgup, -kpad, left, center, right, +keypad, end, down, pgdn, ins, del */
{ 0x4700, 0x37, 0x7700, 0, 0x37, 0x4700, 0x37, 0x4700},
{ 0x4800, 0x38, 0, 0, 0x38, 0x4800, 0x38, 0x4800},
{ 0x4900, 0x39, 0x8400, 0, 0x39, 0x4900, 0x39, 0x4900},
{ 0x2D, 0x2D, 0, 0, 0x2D, 0x2D, 0x2D, 0x2D},
{ 0x4B00, 0x34, 0x7300, 0, 0x34, 0x4B00, 0x34, 0x4B00},
{ 0x4C00, 0x35, 0, 0, 0x35, 0x4C00, 0x35, 0x4C00},
{ 0x4D00, 0x36, 0x7400, 0, 0x36, 0x4D00, 0x36, 0x4D00},
{ 0x2B, 0x2B, 0, 0, 0x2B, 0x2B, 0x2B, 0x2B},
{ 0x4F00, 0x31, 0x7500, 0, 0x31, 0x4F00, 0x31, 0x4F00},
{ 0x5000, 0x32, 0, 0, 0x32, 0x5000, 0x32, 0x5000},
{ 0x5100, 0x33, 0x7600, 0, 0x33, 0x5100, 0x33, 0x5100},
{ 0x5200, 0x30, 0, 0, 0x30, 0x5200, 0x30, 0x5200},
{ 0x5300, 0x2E, 0, 0, 0x2E, 0x5300, 0x2E, 0x5300}
};
extern void keyb_ISR();

asm (
   ".globl keyb_ISR        \n"
   "keyb_ISR:              \n"
   "   pusha               \n" /* Save all registers               */
   "   pushw %ds           \n" /* Set up the data segment          */
   "   pushw %es           \n"
   "   pushw %ss           \n" /* Note that ss is always valid     */
   "   pushw %ss           \n"
   "   popw %ds            \n"
   "   popw %es            \n"
   "                       \n"
   "   call keyb_handler   \n"
   "                       \n"
   "   popw %es            \n"
   "   popw %ds            \n" /* Restore registers                */
   "   popa                \n"
   "   iret                \n" /* Exit interrupt                   */
);

void setleds()
{
outportb(0x60, 0xED);
while(inportb(0x64) & 2);
outportb(0x60, led_status);
while(inportb(0x64) & 2);
}

void InitKeyboard()
{
    set_vector(M_VEC+1, D_PRESENT + D_INT + D_DPL3); /* IRQ1 Handler */
    enable_irq(1);

led_status = 0; /* All leds off */
setleds();
}

void keyb_handler(void)
{
unsigned int key = inportb(0x60);
unsigned int key_ascii = 0;

if((control_keys & (CK_CTRL+CK_ALT)) && key==0x53)
{
while(inportb(0x64) & 2);

outportb(0x64, 0xFE);

asm ("cli;hlt");
}

/* 'LED Keys', ie, Scroll lock, Num lock, and Caps lock */
if(key == 0x3A) /* Caps Lock */
{
led_status ^= LED_CAPS_LOCK;
setleds();
}
if(key == 0x45) /* Num Lock */
{
led_status ^= LED_NUM_LOCK;
setleds();
}
if(key == 0x46) /* Scroll Lock */
{
led_status ^= LED_SCROLL_LOCK;
setleds();
}


if(key == 0x1D && !(control_keys & CK_CTRL)) /* Ctrl key */
control_keys |= CK_CTRL;
if(key == 0x80 + 0x1D) /* Ctrl key depressed */
control_keys &= (0xFF - CK_CTRL);
if((key == 0x2A || key == 0x36) && !(control_keys & CK_SHIFT)) /* Shift key */
control_keys |= CK_SHIFT;
if((key == 0x80 + 0x2A) || (key == 0x80 + 0x36)) /* Shift key depressed */
control_keys &= (0xFF - CK_SHIFT);
if(key == 0x38 && (!control_keys & CK_ALT))
control_keys |= CK_ALT;
if(key == 0x80 + 0x38)
control_keys &= (0xFF - CK_ALT);

if((control_keys & CK_SHIFT) && (led_status & LED_CAPS_LOCK)) key_ascii = scan2ascii_table[key][6];
else if(control_keys & CK_SHIFT) key_ascii = scan2ascii_table[key][1];
else if(control_keys & CK_CTRL) key_ascii = scan2ascii_table[key][2];
else if(control_keys & CK_ALT) key_ascii = scan2ascii_table[key][3];
else if((control_keys & CK_SHIFT) && (led_status & LED_NUM_LOCK)) key_ascii = scan2ascii_table[key][7];
else if(led_status & LED_CAPS_LOCK) key_ascii = scan2ascii_table[key][5];
else if(led_status & LED_NUM_LOCK) key_ascii = scan2ascii_table[key][4];
else if(control_keys == 0) key_ascii = scan2ascii_table[key][0];

if(key_ascii != 0)
{
if(key_ascii <= 0xFF)
{
keyboard_buffer[keyboard_buffer_size] = key_ascii;
keyboard_buffer_size++;
}
else
{
keyboard_buffer[keyboard_buffer_size] = (key_ascii & 0xFF);
keyboard_buffer[keyboard_buffer_size+1] = (key_ascii & 0xFF00);
keyboard_buffer_size += 2;
}
}

outportb(M_PIC, EOI);
}

unsigned char getch()
{
unsigned char ret_key=0;
unsigned int loop=0;

while(keyboard_buffer_size == 0);

ret_key = keyboard_buffer[0];
keyboard_buffer_size--;

for(loop=0; loop<254; loop++)
keyboard_buffer[loop] = keyboard_buffer[loop+1];

return ret_key;
}

unsigned char kbhit()
{
if(keyboard_buffer_size == 0) return 0;

return 1;
}


c++

#include "Keyboard.h"
#include "Port.h"
#include "Pic.h"
#include "gdt.h"
#include "idt.h"


Keyboard::Keyboard()
{
       
}

Keyboard::~Keyboard() {}

#define LED_NUM_LOCK        2
#define LED_SCROLL_LOCK     1
#define LED_CAPS_LOCK       4

unsigned char led_status = 0;


unsigned char keyboard_buffer[255];

unsigned char keyboard_buffer_size = 0;

unsigned char control_keys = 0;

#define CK_SHIFT    1
#define CK_ALT      2
#define CK_CTRL     4

unsigned int scan2ascii_table[][8] =
{
/*  ASCII - Shift - Ctrl -  Alt -   Num -   Caps -  Shift Caps -    Shift Num */
{   0,  0,  0,  0,  0,  0,  0,      0},
{   0x1B,   0x1B,   0x1B,   0,  0x1B,   0x1B,   0x1B,       0x1B},
/* 1 -> 9 */
{   0x31,   0x21,   0,  0x7800, 0x31,   0x31,   0x21,       0x21},
{   0x32,   0x40,   0x0300, 0x7900, 0x32,   0x32,   0x40,       0x40},
{   0x33,   0x23,   0,  0x7A00, 0x33,   0x33,   0x23,       0x23},
{   0x34,   0x24,   0,  0x7B00, 0x34,   0x34,   0x24,       0x24},
{   0x35,   0x25,   0,  0x7C00, 0x35,   0x35,   0x25,       0x25},
{   0x36,   0x5E,   0x1E,   0x7D00, 0x36,   0x36,   0x5E,       0x5E},
{   0x37,   0x26,   0,  0x7E00, 0x37,   0x37,   0x26,       0x26},
{   0x38,   0x2A,   0,  0x7F00, 0x38,   0x38,   0x2A,       0x2A},
{   0x39,   0x28,   0,  0x8000, 0x39,   0x39,   0x28,       0x28},
{   0x30,   0x29,   0,  0x8100, 0x30,   0x30,   0x29,       0x29},
/* -, =, Bksp, Tab */
{   0x2D,   0x5F,   0x1F,   0x8200, 0x2D,   0x2D,   0x5F,       0x5F},
{   0x3D,   0x2B,   0,  0x8300, 0x3D,   0x3D,   0x2B,       0x2B},
{   0x08,   0x08,   0x7F,   0,  0x08,   0x08,   0x08,       0x08},
{   0x09,   0x0F00, 0,  0,  0x09,   0x09,   0x0F00,     0x0F00},
/*  QWERTYUIOP[] */
{   0x71,   0x51,   0x11,   0x1000, 0x71,   0x51,   0x71,       0x51},
{   0x77,   0x57,   0x17,   0x1100, 0x77,   0x57,   0x77,       0x57},
{   0x65,   0x45,   0x05,   0x1200, 0x65,   0x45,   0x65,       0x45},
{   0x72,   0x52,   0x12,   0x1300, 0x72,   0x52,   0x72,       0x52},
{   0x74,   0x54,   0x14,   0x1400, 0x74,   0x54,   0x74,       0x54},
{   0x79,   0x59,   0x19,   0x1500, 0x79,   0x59,   0x79,       0x59},
{   0x75,   0x55,   0x15,   0x1600, 0x75,   0x55,   0x75,       0x55},
{   0x69,   0x49,   0x09,   0x1700, 0x69,   0x49,   0x69,       0x49},
{   0x6F,   0x4F,   0x0F,   0x1800, 0x6F,   0x4F,   0x6F,       0x4F},
{   0x70,   0x50,   0x10,   0x1900, 0x70,   0x50,   0x70,       0x50},
{   0x5B,   0x7B,   0x1B,   0x0,    0x5B,   0x5B,   0x7B,       0x7B},
{   0x5D,   0x7D,   0x1D,   0,  0x5D,   0x5D,   0x7D,       0x7D},
/* ENTER, CTRL */
{   0x0A,   0x0A,   0x0D,   0,  0x0A,   0x0A,   0x0D,       0x0D},
{   0,  0,  0,  0,  0,  0,  0,      0},
/* ASDFGHJKL;'~ */
{   0x61,   0x41,   0x01,   0x1E00, 0x61,   0x41,   0x61,       0x41},
{   0x73,   0x53,   0x13,   0x1F00, 0x73,   0x53,   0x73,       0x53},
{   0x64,   0x44,   0x04,   0x2000, 0x64,   0x44,   0x64,       0x44},
{   0x66,   0x46,   0x06,   0x2100, 0x66,   0x46,   0x66,       0x46},
{   0x67,   0x47,   0x07,   0x2200, 0x67,   0x47,   0x67,       0x47},
{   0x68,   0x48,   0x08,   0x2300, 0x68,   0x48,   0x68,       0x48},
{   0x6A,   0x4A,   0x0A,   0x2400, 0x6A,   0x4A,   0x6A,       0x4A},
{   0x6B,   0x4B,   0x0B,   0x3500, 0x6B,   0x4B,   0x6B,       0x4B},
{   0x6C,   0x4C,   0x0C,   0x2600, 0x6C,   0x4C,   0x6C,       0x4C},
{   0x3B,   0x3A,   0,  0,  0x3B,   0x3B,   0x3A,       0x3A},
{   0x27,   0x22,   0,  0,  0x27,   0x27,   0x22,       0x22},
{   0x60,   0x7E,   0,  0,  0x60,   0x60,   0x7E,       0x7E},
/* Left Shift*/
{   0x2A,   0,  0,  0,  0,  0,  0,      0},
/* \ZXCVBNM,./ */
{   0x5C,   0x7C,   0x1C,   0,  0x5C,   0x5C,   0x7C,       0x7C},
{   0x7A,   0x5A,   0x1A,   0x2C00, 0x7A,   0x5A,   0x7A,       0x5A},
{   0x78,   0x58,   0x18,   0x2D00, 0x78,   0x58,   0x78,       0x58},
{   0x63,   0x43,   0x03,   0x2E00, 0x63,   0x43,   0x63,       0x43},
{   0x76,   0x56,   0x16,   0x2F00, 0x76,   0x56,   0x76,       0x56},
{   0x62,   0x42,   0x02,   0x3000, 0x62,   0x42,   0x62,       0x42},
{   0x6E,   0x4E,   0x0E,   0x3100, 0x6E,   0x4E,   0x6E,       0x4E},
{   0x6D,   0x4D,   0x0D,   0x3200, 0x6D,   0x4D,   0x6D,       0x4D},
{   0x2C,   0x3C,   0,  0,  0x2C,   0x2C,   0x3C,       0x3C},
{   0x2E,   0x3E,   0,  0,  0x2E,   0x2E,   0x3E,       0x3E},
{   0x2F,   0x3F,   0,  0,  0x2F,   0x2F,   0x3F,       0x3F},
/* Right Shift */
{   0,  0,  0,  0,  0,  0,  0,      0},
/* Print Screen */
{   0,  0,  0,  0,  0,  0,  0,      0},
/* Alt  */
{   0,  0,  0,  0,  0,  0,  0,      0},
/* Space */
{   0x20,   0x20,   0x20,   0,  0x20,   0x20,   0x20,       0x20},
/* Caps */
{   0,  0,  0,  0,  0,  0,  0,      0},
/* F1-F10 */
{   0x3B00, 0x5400, 0x5E00, 0x6800, 0x3B00, 0x3B00, 0x5400,     0x5400},
{   0x3C00, 0x5500, 0x5F00, 0x6900, 0x3C00, 0x3C00, 0x5500,     0x5500},
{   0x3D00, 0x5600, 0x6000, 0x6A00, 0x3D00, 0x3D00, 0x5600,     0x5600},
{   0x3E00, 0x5700, 0x6100, 0x6B00, 0x3E00, 0x3E00, 0x5700,     0x5700},
{   0x3F00, 0x5800, 0x6200, 0x6C00, 0x3F00, 0x3F00, 0x5800,     0x5800},
{   0x4000, 0x5900, 0x6300, 0x6D00, 0x4000, 0x4000, 0x5900,     0x5900},
{   0x4100, 0x5A00, 0x6400, 0x6E00, 0x4100, 0x4100, 0x5A00,     0x5A00},
{   0x4200, 0x5B00, 0x6500, 0x6F00, 0x4200, 0x4200, 0x5B00,     0x5B00},
{   0x4300, 0x5C00, 0x6600, 0x7000, 0x4300, 0x4300, 0x5C00,     0x5C00},
{   0x4400, 0x5D00, 0x6700, 0x7100, 0x4400, 0x4400, 0x5D00,     0x5D00},
/* Num Lock, Scrl Lock */
{   0,  0,  0,  0,  0,  0,  0,      0},
{   0,  0,  0,  0,  0,  0,  0,      0},
/* HOME, Up, Pgup, -kpad, left, center, right, +keypad, end, down, pgdn, ins, del */
{   0x4700, 0x37,   0x7700, 0,  0x37,   0x4700, 0x37,       0x4700},
{   0x4800, 0x38,   0,  0,  0x38,   0x4800, 0x38,       0x4800},
{   0x4900, 0x39,   0x8400, 0,  0x39,   0x4900, 0x39,       0x4900},
{   0x2D,   0x2D,   0,  0,  0x2D,   0x2D,   0x2D,       0x2D},
{   0x4B00, 0x34,   0x7300, 0,  0x34,   0x4B00, 0x34,       0x4B00},
{   0x4C00, 0x35,   0,  0,  0x35,   0x4C00, 0x35,       0x4C00},
{   0x4D00, 0x36,   0x7400, 0,  0x36,   0x4D00, 0x36,       0x4D00},
{   0x2B,   0x2B,   0,  0,  0x2B,   0x2B,   0x2B,       0x2B},
{   0x4F00, 0x31,   0x7500, 0,  0x31,   0x4F00, 0x31,       0x4F00},
{   0x5000, 0x32,   0,  0,  0x32,   0x5000, 0x32,       0x5000},
{   0x5100, 0x33,   0x7600, 0,  0x33,   0x5100, 0x33,       0x5100},
{   0x5200, 0x30,   0,  0,  0x30,   0x5200, 0x30,       0x5200},
{   0x5300, 0x2E,   0,  0,  0x2E,   0x5300, 0x2E,       0x5300}
};
//extern void keyb_ISR();

asm (
   ".globl keyb_ISR        \n"
   "keyb_ISR:              \n"
   "   pusha               \n" /* Save all registers               */
   "   pushw %ds           \n" /* Set up the data segment          */
   "   pushw %es           \n"
   "   pushw %ss           \n" /* Note that ss is always valid     */
   "   pushw %ss           \n"
   "   popw %ds            \n"
   "   popw %es            \n"
   "                       \n"
   "   call keyb_handler   \n"
   "                       \n"
   "   popw %es            \n"
   "   popw %ds            \n" /* Restore registers                */
   "   popa                \n"
   "   iret                \n" /* Exit interrupt                   */
);

void Keyboard::setleds()
{
    outportb(0x60, 0xED);
    while(inportb(0x64) & 2);
    outportb(0x60, led_status);
    while(inportb(0x64) & 2);
}

void Keyboard::InitKeyboard()
{
    set_vector(M_VEC+1, D_PRESENT + D_INT + D_DPL3); /* IRQ1 Handler */
    enable_irq(1);

    led_status = 0; /* All leds off */
    setleds();
}

void Keyboard::keyb_handler()
{
    unsigned int key = inportb(0x60);
    unsigned int key_ascii = 0;
   
    if((control_keys & (CK_CTRL+CK_ALT)) && key==0x53)
    {
        while(inportb(0x64) & 2);
       
        outportb(0x64, 0xFE);
       
        asm ("cli;hlt");
    }      
   
    // 'LED Keys', ie, Scroll lock, Num lock, and Caps lock
    if(key == 0x3A) // Caps Lock
    {
        led_status ^= LED_CAPS_LOCK;
        setleds();
    }
    if(key == 0x45) // Num Lock
    {
        led_status ^= LED_NUM_LOCK;
        setleds();
    }
    if(key == 0x46) // Scroll Lock
    {
        led_status ^= LED_SCROLL_LOCK;
        setleds();
    }


    if(key == 0x1D && !(control_keys & CK_CTRL))    // Ctrl key
        control_keys |= CK_CTRL;
    if(key == 0x80 + 0x1D)  // Ctrl key depressed
        control_keys &= (0xFF - CK_CTRL);
    if((key == 0x2A || key == 0x36) && !(control_keys & CK_SHIFT))  // Shift key
        control_keys |= CK_SHIFT;
    if((key == 0x80 + 0x2A) || (key == 0x80 + 0x36))    //Shift key depressed
        control_keys &= (0xFF - CK_SHIFT);
    if(key == 0x38 && (!control_keys & CK_ALT))
        control_keys |= CK_ALT;
    if(key == 0x80 + 0x38)
        control_keys &= (0xFF - CK_ALT);
       
    if((control_keys & CK_SHIFT) && (led_status & LED_CAPS_LOCK)) key_ascii = scan2ascii_table[key][6];
    else if(control_keys & CK_SHIFT) key_ascii = scan2ascii_table[key][1];
    else if(control_keys & CK_CTRL) key_ascii = scan2ascii_table[key][2];
    else if(control_keys & CK_ALT) key_ascii = scan2ascii_table[key][3];    
    else if((control_keys & CK_SHIFT) && (led_status & LED_NUM_LOCK)) key_ascii = scan2ascii_table[key][7];
    else if(led_status & LED_CAPS_LOCK) key_ascii = scan2ascii_table[key][5];
    else if(led_status & LED_NUM_LOCK) key_ascii = scan2ascii_table[key][4];
    else if(control_keys == 0) key_ascii = scan2ascii_table[key][0];

    if(key_ascii != 0)
    {
        if(key_ascii <= 0xFF)
        {
            keyboard_buffer[keyboard_buffer_size] = key_ascii;
            keyboard_buffer_size++;
        }
        else
        {
            keyboard_buffer[keyboard_buffer_size] = (key_ascii & 0xFF);
            keyboard_buffer[keyboard_buffer_size+1] = (key_ascii & 0xFF00);
            keyboard_buffer_size += 2;
        }
    }

    outportb(M_PIC, EOI);
}

unsigned char Keyboard::getch()
{
    unsigned char ret_key=0;
    unsigned int loop=0;
   
    while(keyboard_buffer_size == 0);
   
    ret_key = keyboard_buffer[0];
    keyboard_buffer_size--;
   
    for(loop=0; loop<254; loop++)
        keyboard_buffer[loop] = keyboard_buffer[loop+1];
   
    return ret_key;
}

unsigned char Keyboard::kbhit()
{
    if(keyboard_buffer_size == 0) return 0;
   
    return 1;
}


Compilieren kann ich beide ohne Problem! Nur eben der LInker meckert, wobei der  c Code mehr Error's von sich gibt ;) Ein vogel hat mir zugezwitschert das es in C++ ned möglich sein per asm eine Methode aufzurufen ...


PS: Der Code könnte auch bekannt vorkommen, aber keine Angst werde ihn schon noch umändern ;) (und zwar gewahltig ... )
82
Offtopic / Ein Schlag fuer alle Macianer
« am: 13. June 2005, 17:19 »
oha wird ja immer toller ....

Laut VnuNet könnte Apple die internen Sicherheitsfeatures des Pentium-Prozessors und die Funktionen des Chipsatzes dazu nutzen, dass Mac OS X nicht auf normalen handelsüblichen PCs installiert werden kann. Mit diesen Funktionen kann man sicher erkennen, um welchen Rechner es sich handelt da jeder Rechner über einen eigenen Code verfügt.
Dies ist natürlich nur nötig, wenn Apple normale Intel-Chipsätze einsetzen wird. Wenn komplett eigene Chipsätze verwendet werden, sind solche Sicherheitsvorkehrungen nicht nötig.
83
Lowlevel-Coding / Fataler Fehler in C++ Tutorial?
« am: 12. June 2005, 22:28 »
ICh hab mich mal mit dem Tut beschäftigt aber schnell verworfen ^^ Hab dann so ne Mix aus dem Englischen und dem von TJ gemacht, das is nun meine Grundlage ;)
84
Lowlevel-Coding / Problem mit C-Kernel!
« am: 12. June 2005, 12:20 »
Es wird nur mit Dos programmiet alles andere is unprofessionel ^^ oder geschmack sache ;)

//Edit:

Aja, schau mal in den Link file. Vielleicht steht da so ein böses Input oder ein falscher ausgaben wert ;)
85
Offtopic / Ein Schlag fuer alle Macianer
« am: 11. June 2005, 14:56 »
Naja man wird sehen ;)
86
Offtopic / Ein Schlag fuer alle Macianer
« am: 11. June 2005, 12:17 »
Zitat von: Quelle
In der Samstagsausgabe der New York Times wird darüber berichtet, der Umstieg auf den Prozessorhersteller Intel habe in erster Linie wirtschaftliche Gründe gehabt. Aus gut informierten Kreisen um IBM habe man erfahren, dass IBM die Roadmap für den PowerPC nicht weiter verfolgen wolle, da die Gewinnaussichten zu niedrig lagen. Die einzige Möglichkeit dies zu ändern wären deutlich höhere Investitionen von Seiten Apples gewesen. Angeblich habe Apple IBM über den Umstieg gar nicht informiert und der Plan sei erst über die Presse bekannt geworden, erst drei Tage vor der WWDC bestätigte Jobs den Entschluss.
Weiterhin wird berichtet, dass auch über den Einsatz des Cell-Prozessors verhandelt wurde, was jedoch nicht zustande kam, da Apple den Chip für den Einsatz in Desktop-Rechnern als weniger geeignet ansah. Zusammen mit Intel könnte Apple nun aber verstärkte Initiative im Bereich der Consumer-Elektronik zeigen und zum Beispiel einen leistungsstarken Mac mini gegen die Spielkonsolen mit PowerPC positionieren. Das käme Intel genau gelegen, da sich alle namhaften Hersteller bei den Konsolen für IBM-Prozessoren entschieden haben.


oha, wenn ich das änder gelesen hätte ;)
87
Offtopic / Ein Schlag fuer alle Macianer
« am: 11. June 2005, 12:11 »
Intel wird wahrscheinlich den Markt beherschen! Und damit eine senkung der kosten haben ;) Ich habe auch fast das gefühl das win sehr grosse verluste erleiden wird. Weil wenn man sieht das man mit dem GENAU GLEICHEN Computer viel mehr erreichen kann mit einem anderen betriebsystem sollte das doch schon ein bisschen einschlagen :P
88
Offtopic / Ein Schlag fuer alle Macianer
« am: 10. June 2005, 21:38 »
So

Zitat von: Quelle

Macworld UK will aus gut informierten Quellen erfahren haben, dass Intels Pentium-M-Prozessor nächstes Jahr als erstes in neuen Macs verbaut werden soll. Weder Apple noch Intel wollten dieses Gerücht gegenüber Macworld UK kommentieren. Da Steve Jobs schon auf der Keynote die Leistung im Zusammenhang mit dem Verbrauch gestellt hat, deutet jedoch alles auf den sparsamen Pentium-M-Prozessor hin. Analysten gehen davon aus, das Intels für Anfang 2006 angekündigter Dual-Core-Pentium-M-Prozessor namens Yonah in dem Bereich Leistung je Watt führend sein wird.

Ergänzung:
Dem Artikel auf Hardmac zufolge soll der Dual-Core-Pentium-M-Prozessor in 65nm-Technologie gefertigt werden und mit einer Taktfrequenz zwischen 1,66 und 2,1 GHz laufen. Weiterhin soll im 3. Quartal 2006 ein neuer Intel-Prozessor namens Merom erscheinen von dem in kürze für Apple bisher ungewohnt bereits erste Testmuster verfügbar sein werden.


vielleicht intressiert es ja jemanden ^^ mich jedenfalls schon...
89
Lowlevel-Coding / Problem mit C-Kernel!
« am: 10. June 2005, 20:04 »
Djjgpp is das ganze gcc Bündel für Windows compiliert ^^ dort findest du ALLES. Alle compiler und werkzeuge. Aber wenn ich fragen darf, wie sieht dein link befehl aus und was steht in deiner linkfile?
90
Offtopic / Kleines Projekt zum Theme Spieleprogrammierung
« am: 09. June 2005, 21:57 »
BlitzBasic is ehrlich ne mist sache ^^ sorry ich kenns, wenn basic dann RealBasic :P
91
Lowlevel-Coding / Problem mit C-Kernel!
« am: 09. June 2005, 20:09 »
Das sollst du installieren http://www.delorie.com/djgpp/ gcc, g++, gpp, ld etc. alles drin bis auf das nasm. Das kannst aber schluss endlich in den glecihen Ordner werfen.
92
tyndur / Zeichensatz
« am: 09. June 2005, 19:41 »
Und für jede grösse ein eigenes Bild? Skalieren wird ein bisschen schwierig ;)
93
Lowlevel-Coding / Re: Problem mit C-Kernel!
« am: 09. June 2005, 19:39 »
saug dir mal die neuste version .. sollte nämlich gehen! Oder versuch es mal als .o zu compilieren und dann zu linken
94
tyndur / Zeichensatz
« am: 08. June 2005, 12:13 »
Das erweiterte AscII kennt umlaute ... aber da es nicht einheitlich is doch lieber UniCode ;)
95
Offtopic / Ein Schlag fuer alle Macianer
« am: 08. June 2005, 12:11 »
Also in der Keynote steht das Apple nen X86 hat und kein anderer :'( Was für gamer nen vorteil bringt, DENN wird rechtliche schritte machen um zu verhindern das MacOSX auf einem Dell PC läuft oder so aber nicht umgekehrt ;) Sprich 2 HD kaufen für den mac, dort win installieren und ZOCKEN
96
Offtopic / Ein Schlag fuer alle Macianer
« am: 07. June 2005, 12:21 »
Wer sagt eigentlich das sie nen X86 nehmen? Und wenn sie das tatsächlich tun würden, hat ned Apple Pech sonder M$. MacOSX läuft nun unter den gleichen Maschienen wie windows ;)


Naja, ich finde es zwar einen schwachsin zu Intel zu wächseln. Ich hätte zu jemanden ganz anderem gewechselt, aber meine sache ;) Bin gespannt was in den nächsten 2 jahren passieren wird ...
97
Offtopic / Ein Schlag fuer alle Macianer
« am: 06. June 2005, 20:52 »
Moment. Mac wird nie nen X86 haben!!! NIENIENIE Egal ob sie bei Intel sind oder ned. NIENENIENIE :D Wenn sie tatsächlich zu Intel wechseln dann werden die bestimmt keinen X86 einbauen.


Wegen dem wechsel: Mac hat eigentlich nur gewechselt (also wenn es jetzt stimmt was ich nicht hoffe) weil IBM sie voll in der Hand hatte, also politische Gründe. Hm ob IBM ab dem eingeht?
98
Lowlevel-Coding / PIC installieren
« am: 06. June 2005, 20:48 »
Ich glaub ich habs ^^

asm ( ...

"   call keyb_handler     \n"

...

);

das is das einzige das auf diese Methode hinweist nur, wenn ich die Klammer mache () meckert er schon wieder ^^
99
Lowlevel-Coding / PIC installieren
« am: 06. June 2005, 20:43 »
Sprich: Der Fehler kann überall sein? Ich liebe es... aber es is mir immer noch unbegreiflich das er mir beim Linken ne methode anzeigt die es für ihn ganricht geben kann, da ich es ausgeklammert habe ...
100
Offtopic / Ein Schlag fuer alle Macianer
« am: 06. June 2005, 20:41 »
Das war lange zeit nen gerücht und ob das stimmt stellt sich nach der WWDC heraus... also ich glaube es ned ^^ wäre doch einfach zu krank. Denn die ganzen G reihe stammt aus dem IBM Haus. Nun was vollkomendes neues zu nehmen nachdem man gerade ein neues Betriebsystem herausbrachte und damit alle Entwickler und Mac Benutzer dazu verdonnern sich ne neue Version zu kaufen? NNNEEEEEEE Aprilscherz um die falsche jahreszeit :P
Seiten: 1 ... 3 4 [5] 6 7 ... 12

Einloggen