git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Working on multiprocessing support
[tpg/acess2.git]
/
Kernel
/
drv
/
kb.c
diff --git
a/Kernel/drv/kb.c
b/Kernel/drv/kb.c
index
a546153
..
3e461fd
100644
(file)
--- a/
Kernel/drv/kb.c
+++ b/
Kernel/drv/kb.c
@@
-11,16
+11,17
@@
// === CONSTANTS ===
#define KB_BUFFER_SIZE 1024
// === CONSTANTS ===
#define KB_BUFFER_SIZE 1024
+#define USE_KERNEL_MAGIC 1
// === IMPORTS ===
// === IMPORTS ===
-void Threads_Dump();
+void Threads_Dump(
void
);
// === PROTOTYPES ===
int KB_Install(char **Arguments);
// === PROTOTYPES ===
int KB_Install(char **Arguments);
-void KB_IRQHandler();
+void KB_IRQHandler(
int IRQNum
);
void KB_AddBuffer(char ch);
Uint64 KB_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Dest);
void KB_AddBuffer(char ch);
Uint64 KB_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Dest);
-void KB_UpdateLEDs();
+void KB_UpdateLEDs(
void
);
int KB_IOCtl(tVFS_Node *Node, int Id, void *Data);
// === GLOBALS ===
int KB_IOCtl(tVFS_Node *Node, int Id, void *Data);
// === GLOBALS ===
@@
-56,32
+57,41
@@
Uint8 gbaKB_States[3][256];
*/
int KB_Install(char **Arguments)
{
*/
int KB_Install(char **Arguments)
{
+ Uint8 temp;
+
+ // Attempt to get around a strange bug in Bochs/Qemu by toggling
+ // the controller on and off
+ temp = inb(0x61);
+ outb(0x61, temp | 0x80);
+ outb(0x61, temp & 0x7F);
+ inb(0x60); // Clear keyboard buffer
+
IRQ_AddHandler(1, KB_IRQHandler);
DevFS_AddDevice( &gKB_DevInfo );
//Log("KB_Install: Installed");
IRQ_AddHandler(1, KB_IRQHandler);
DevFS_AddDevice( &gKB_DevInfo );
//Log("KB_Install: Installed");
- return
1
;
+ return
MODULE_ERR_OK
;
}
/**
* \fn void KB_IRQHandler()
* \brief Called on a keyboard IRQ
*/
}
/**
* \fn void KB_IRQHandler()
* \brief Called on a keyboard IRQ
*/
-void KB_IRQHandler()
+void KB_IRQHandler(
int IRQNum
)
{
Uint8 scancode;
Uint32 ch;
// int keyNum;
{
Uint8 scancode;
Uint32 ch;
// int keyNum;
- //if( inportb(0x64) & 0x20 ) return;
+ // Check port 0x64 to tell if this is from the aux port
+ //if( inb(0x64) & 0x20 ) return;
scancode = inb(0x60); // Read from the keyboard's data buffer
scancode = inb(0x60); // Read from the keyboard's data buffer
-
- Log("KB_IRQHandler: scancode = 0x%02x", scancode);
+ //Log_Debug("Keyboard", "scancode = %02x", scancode);
// Ignore ACKs
if(scancode == 0xFA) {
// Ignore ACKs
if(scancode == 0xFA) {
- // Oh man! This is ana
chic (I'm leaving it here to represent the
- // mess that Acess once was)
+ // Oh man! This is ana
rchic (I'm leaving it here to represent
+ //
the
mess that Acess once was)
//kb_lastChar = KB_ACK;
return;
}
//kb_lastChar = KB_ACK;
return;
}
@@
-116,7
+126,7
@@
void KB_IRQHandler()
//keyNum = giKB_KeyLayer * 256 + scancode;
// Check for unknown key
if(!ch && !gbKB_KeyUp)
//keyNum = giKB_KeyLayer * 256 + scancode;
// Check for unknown key
if(!ch && !gbKB_KeyUp)
-
Warning(
"UNK %i %x", giKB_KeyLayer, scancode);
+
Log_Warning("Keyboard",
"UNK %i %x", giKB_KeyLayer, scancode);
// Key Up?
if (gbKB_KeyUp)
// Key Up?
if (gbKB_KeyUp)
@@
-161,12
+171,19
@@
void KB_IRQHandler()
// --- Check for Kernel Magic Combos
#if USE_KERNEL_MAGIC
// --- Check for Kernel Magic Combos
#if USE_KERNEL_MAGIC
- if(ch == KEY_LCTRL) gbKB_MagicState |= 1;
- if(ch == KEY_LALT) gbKB_MagicState |= 2;
+ if(ch == KEY_LCTRL) {
+ gbKB_MagicState |= 1;
+ //Log_Log("Keyboard", "Kernel Magic LCTRL Down\n");
+ }
+ if(ch == KEY_LALT) {
+ gbKB_MagicState |= 2;
+ //Log_Log("Keyboard", "Kernel Magic LALT Down\n");
+ }
if(gbKB_MagicState == 3)
{
switch(ch)
{
if(gbKB_MagicState == 3)
{
switch(ch)
{
+ case 'q': *((int*)1) = 0; break;
case 'd': __asm__ __volatile__ ("xchg %bx, %bx"); break;
case 'p': Threads_Dump(); break;
}
case 'd': __asm__ __volatile__ ("xchg %bx, %bx"); break;
case 'p': Threads_Dump(); break;
}
@@
-174,8
+191,8
@@
void KB_IRQHandler()
#endif
// Is shift pressed
#endif
// Is shift pressed
- // - Darn ugly hacks !
(!x)
means (bool)x
- if( !
(!gbKB_ShiftState)
^ gbKB_CapsState)
+ // - Darn ugly hacks !
!x
means (bool)x
+ if( !
!gbKB_ShiftState
^ gbKB_CapsState)
{
switch(ch)
{
{
switch(ch)
{
@@
-212,10
+229,10
@@
void KB_IRQHandler()
}
/**
}
/**
- * \fn void KB_UpdateLEDs()
+ * \fn void KB_UpdateLEDs(
void
)
* \brief Updates the status of the keyboard LEDs
*/
* \brief Updates the status of the keyboard LEDs
*/
-void KB_UpdateLEDs()
+void KB_UpdateLEDs(
void
)
{
Uint8 leds;
{
Uint8 leds;
UCC
git Repository :: git.ucc.asn.au