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.


Themen - matthieuriolo

Seiten: [1]
1
Offtopic / QT-Emped + Grub + Kernel
« am: 13. January 2006, 16:50 »
Hey Zusammen

Mein Bruder will in sein Auto nen Computer einbauen. Ich übernehm nen Teil vom Programmieren. Aber zuerst will ich da ein paar Infos ;)

Es is nen Computer mit nem Pentium 2. Jetzt war meine erste Idee Grub drauf, Linux Kernel drauf und dann mit QT ne eigene Oberfläche gestalten. Die grosse Frage ist nun welchen Kernel ich nun nehmen muss :) ist es vielleicht sogar besser einen eigenen Kernel zu schreiben (muss ja nicht wirklich viel können... gerade mal FAT32 und der Rest nimt mir QT ab)?

Grüsse aus der Eistruhe (es ist hier so verflucht kalt!)
2
Offtopic / Frechheit!!!!
« am: 17. August 2005, 22:21 »
AppleInsider berichtet, dass Apple Computer, Sony Connect, Real Networks, Napster und MusicMatch wegen Verletzung des Patents #6.665.797 verklagt wurden. Kläger und Besitzer des bereits 7 Jahre alten Patents ist Ho Keung Tse aus Hong Kong der sich den Schutz von Software gegen unautorisierte Benutzung patentieren lies. Apple wurde vor 11 Monaten laut Patentanwalt Joseph Zito erstmals von der Patentverletzung unterrichtet. Ho Keung Tse will nun für sein DRM-Patent eine Lizenz-Gebühr, deren Höhe einem Wall-Street-Analyst zufolge bei 5 bis 10 Prozent je Song liegen könnte. Die erste Anhörung wird voraussichtlich nicht vor Sommer 2006 beginnen.



Sonst gehts noch?!?
3
Offtopic / Assembler Tutorial
« am: 27. July 2005, 01:03 »
Hey Zusammen
Ich wurde mein OS vollkommend überarbeiten und gerade dabei einen eigenen Bootloader schreiben. Ich habe mir zwar ein asm Buch (Assembler Referenz, nach dem Vorwort seis der Vorgänger von Assembler Buch) zu Brust genommen. Trotzdem bräuchte es da ein bisschen mehr ;) Vorallem da ich nicht verstehe wie genau diese Register funktionieren (steht nirgends!!!). Hat jemand ne Doku, tutorial wo das genauer beschrieben wird? Deutsch wäre natürlich erste Wahl, Englisch würde ich aber auch akzeptieren (ungern).

MfG Matthieu ->Noob
4
Bei Ars Technica hat Jon Stokes anlässlich des Umstiegs auf Intel-Prozessoren aus dem Nähkästchen geplaudert, was er nach eigenem Bekunden normalerweise nicht mache. Demnach habe IBM den G5-Prozessor in Wirklichkeit nicht weiterentwickeln können, weil Apple nicht bereit gewesen sei, in die Entwicklung zu investieren. Stattdessen wollte Apple nur die aktuell benötigten Prozessoren von IBM kaufen, eine Absatzgarantie gab es nicht. Dieses Verhalten seitens Apple soll schon der Grund für den schleppenden Fortschritt bei den G4-Prozessoren gewesen sein, wo Motorola lange Zeit nicht über 500 MHz hinaus kam. Außerdem liebäugele Apple mit dem leistungsfähigen XScale-Prozessor von Intel, um den iPod als Multimedia-Gerät auszubauen. Als logischen Schritt wechselt Apple daher nun komplett zu Intel, um wie Dell großzügige Rabatte von Intel zu erhalten. Der Mac soll dabei den für die iPod-Geräte schon länger propagierten digitalen Hub darstellen.


Mac steckt anscheinend ziemlich in einer Geldkrise...
5
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 ... )
6
Lowlevel-Coding / PIC installieren
« am: 04. June 2005, 14:24 »
hey zusammen
Irgenwie hab ich ein problem das ich überhaupt nich begreife wieso...
//Port.h
#ifndef PORT_INCLUDE
#define PORT_INCLUDE

inline unsigned char inportb(unsigned int port) ;
inline void outportb(unsigned int port,unsigned char value) ;
inline void outportw(unsigned int port,unsigned int value) ;

#endif


//Port.cpp
#include "port.h"

inline unsigned char inportb(unsigned int port)     /* Input a byte from a port */
{
   unsigned char ret;

   asm volatile ("inb %%dx,%%al":"=a" (ret):"d" (port));
   return ret;
}

inline void outportb(unsigned int port,unsigned char value) /* Output a byte to a port  */
{
   asm volatile ("outb %%al,%%dx"::"d" (port), "a" (value));
}

inline void outportw(unsigned int port,unsigned int value)  /* Output a word to a port  */
{
   asm volatile ("outw %%ax,%%dx"::"d" (port), "a" (value));
}


//Pic.cpp
#include "port.h"
#include "pic.h"

void IntitPic(void)
{
   outportb(M_PIC, ICW1);       /* Start 8259 initialization    */
   outportb(S_PIC, ICW1);

   outportb(M_PIC+1, M_VEC);    /* Base interrupt vector        */
   outportb(S_PIC+1, S_VEC);

   outportb(M_PIC+1, 1<<2);     /* Bitmask for cascade on IRQ 2 */
   outportb(S_PIC+1, 2);        /* Cascade on IRQ 2             */

   outportb(M_PIC+1, ICW4);     /* Finish 8259 initialization   */
   outportb(S_PIC+1, ICW4);

   outportb(M_IMR, 0xff);       /* Mask all interrupts          */
   outportb(S_IMR, 0xff);
}


//Pic.h
#ifndef PIC_H
#define PIC_H

void IntitPic(void);

#define M_PIC  0x20     /* I/O for master PIC              */
#define M_IMR  0x21     /* I/O for master IMR              */
#define S_PIC  0xA0     /* I/O for slave PIC               */
#define S_IMR  0xA1     /* I/O for slace IMR               */

#define ICW1   0x11     /* Cascade, Edge triggered         */
                        /* ICW2 is vector                  */
                        /* ICW3 is slave bitmap or number  */
#define ICW4   0x01     /* 8088 mode                       */

#define M_VEC  0x68     /* Vector for master               */
#define S_VEC  0x70     /* Vector for slave                */

#endif


Das kompeliere ich alles schön mit gpp und krieg beim Pic.cpp den warning: port.h:5: warning: inline function 'void outportb(unsigned int, unsigned char)' used but never defined.

danach beim zusammen linken geht garnichts mehr :'(

Pic.o(.text+0x8):Pic.cpp: undefined reference to '__Z8outportbjh'
...

Höchst wahrscheinlich liegts an meinen C++ kenntnisse ;)
7
Offtopic / Lateinische übersetzer
« am: 03. June 2005, 17:34 »
Hey zusammen
Ich bin mir gerade an ein paar namen für ein protokoll am überlegen und da dachte ich an lateinische Namen ;) also bräuchte ich mal so ne art übersetzung

-Protokoll
-Schnell
-Einfach
-Laden
-auswahl
-grosse
-Hase
-Nilpferd
-Fisch
-Planet
-Pyramide
-Auge
-Welt
-Atome (is das nicht schon lateinisch?)
-Tiger

PS: Es geht nur um die namen nicht um den sinn und zweck ;)
8
Offtopic / Wo ist der Unterschied
« am: 31. May 2005, 21:35 »
Hallo zusammen
Bevor ihr mit dem finger auf mich zeigt und auslacht oder den Kopf gegen die Wand hämmert... ich weiss es ehrlich ned!  :lol: Was ist der unterschied von einem Floppy treiber und einem FAT12 Treiber (der auf einer diskette is)? Is das nicht irgendwie das gleiche?
9
Offtopic / Os für andere geräte
« am: 28. April 2005, 15:41 »
Hey
Wie und was muss man sich anschauen wenn man ein Os für andere Geräte bastelt? Also wenn man zum beispiel auf der XBox sein Os laufen haben möchte... oder auf der Ps2. Vorallem ... is nicht jedesspiel ein bisschen ein OS? Weil Playstation hat ja eigentlich keinen kernel und führt einfach das aus was auf der Cd ist.
10
OS-Design / C++ Kernel?
« am: 18. April 2005, 16:49 »
Hallo zusammen
Nörgle immer noch bei den kernel rum ... :'(
Also ich habe den bootlader von Teejay und die 3 verschieden C und C++ kernel ausprobiert... passiert komischerweise immer das selbe :( nämlich garnichts :P Hat vielleicht jemand eine Idee wieso?


PS: Wie klug wäre es eigentlich wenn ich noch im kernel eine ganze oberfläche einbaue? wäre ja nicht wirklich das kernel prinzip ;)
11
Lowlevel-Coding / Assembler als methode?
« am: 12. April 2005, 15:49 »
Hey Zusammen
Ist es möglich in C++ nen assembler code auszuführen? Sprich man kann sie benutzen wie eine funktion, einfach ohne rückgabe wert ;) Wäre vielleicht für einiges noch so intressant... ->Treiber

Wenns es gäbe wäre ein beispiel sicher nicht schlecht  :twisted: (nur was kleines ... bsp das der assembler code rebootet.)
12
Lowlevel-Coding / Irgendwie geht der bootloader nicht...
« am: 10. April 2005, 19:01 »
Hallo zusammen
Der Anfänger sit zurück :D also ich habe mir von http://www.jay-code.de das bootloader tutorial geholt und... geht nicht ;) Wen ich neustarte kommt er zwar zu dem loader aber er wartet ungefähr 2 sekunden und startet neu. Egal ob ich nen kernel mit einpacke oder ohne...

Hier möchte ich auch noch gerade fragen wie und wo ein unterschied ist um einen bootloader auf einem anderen FAt system zu bauen. Und ich habe noch ein bisschen ein problem mit dem "zum kernel hüpfen".

Danke schön

PS: Habe zwar schon ne mail an den erfinder von den loader geschickt (TeeJay) aber das kam glaubs nie an  :roll:
13
Lowlevel-Coding / gcc probleme
« am: 21. March 2005, 17:39 »
Hallo zusammen
Bin gerade neu auf diesem tiefen nivau der Programmierung :D daher KA wie was genau geht. Also ein bisschen lieb sein zu mir ;)

Ich wollte das C++ Kernel Tutorial machen und habe alles schön brav kopiert aber wenn ich kompilieren will krieg ich nen Fehler. gcc.exe installation problem, bla bla 'cciplus' file not found (ungefähr... so aus dem gedächnis). Nun ich habe schon im net gesucht aber nix gefunden... an was liegt das?


Habe win2000, alles nach der installation installiert...

Danke schonmal

PS: Nen anderen Compiler täte es übrigens auch :P
Seiten: [1]

Einloggen