X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=main.c;h=a058cfe93d7efd138d2fa467af90e84bdb0372c0;hb=6dfa0a3162536682b5e5aced149b34240d88497b;hp=4303241a7430baad434e3d21f297ed5b464043ab;hpb=38dbff99968d2f1c8d7ae818b275e80335805aad;p=ppcskel.git diff --git a/main.c b/main.c index 4303241..a058cfe 100644 --- a/main.c +++ b/main.c @@ -24,6 +24,11 @@ Copyright (C) 2009 John Kelley #include "video_low.h" #include "input.h" #include "console.h" +#include "irq.h" +#include "usb/core/core.h" +#include "usb/drivers/class/hid.h" +#include "sha1.h" +#include "hollywood.h" #define MINIMUM_MINI_VERSION 0x00010001 @@ -82,8 +87,13 @@ int main(void) exception_init(); dsp_reset(); - // clear interrupt mask - write32(0x0c003004, 0); + irq_initialize(); + irq_bw_enable(BW_PI_IRQ_RESET); + irq_bw_enable(BW_PI_IRQ_HW); //hollywood pic + /* external ohci */ + irq_hw_enable(IRQ_OHCI0); + /* internal ohci */ + //irq_hw_enable(IRQ_OHCI1); ipc_initialize(); ipc_slowping(); @@ -109,26 +119,67 @@ int main(void) ; // better ideas welcome! } - print_str_noscroll(112, 112, "ohai, world!\n"); + /* external ohci */ + usb_init(OHCI0_REG_BASE); - testOTP(); + /* internal ohci */ + usb_init(OHCI1_REG_BASE); - printf("bye, world!\n"); + /* load HID keyboard driver */ + usb_hidkb_init(); - // enable RESET interrupt - write32(0x0c003004, 1<<1); -#define _CPU_ISR_Enable() \ - { register u32 _val = 0; \ - __asm__ __volatile__ ( \ - "mfmsr %0\n" \ - "ori %0,%0,0x8000\n" \ - "mtmsr %0" \ - : "=&r" ((_val)) : "0" ((_val)) \ - ); \ + /* wait for usb keyboard plugged in */ + if(!usb_hidkb_inuse()) { + print_str("plug in an usb keyboard", 23); + } + while(!usb_hidkb_inuse()); + + /* you are welcome to make this nice :) */ + char str[7]; + u16 i, j, y=20, x=20; + struct kbrep *k; + + while(1) { + memset(str, '\0', 8); + j=0; + k = usb_hidkb_getChars(); + for(i=0; k->keys[i]>0; i++) { + if(x>650) { + x = 20; + y += 15; + } + if(y>440) { + y=20; + } + if((k->keys[i] >= 4) && k->keys[i] <= 4+'z'-'a') { + str[j] = k->keys[i] - 4 + (k->mod & MOD_lshift || k->mod & MOD_rshift ? 'A' : 'a'); + } else if ((k->keys[i] >= 0x1e) && (k->keys[i] <= 0x26)) { + str[j] = k->keys[i] - 0x1e + '1'; + } else if (k->keys[i] == 0x27) { + str[j] = '0'; + } + else if (k->keys[i] == 0x28) { + y += 15; + x = 20; + } + j++; + } + if(j > 0) { + print_str_noscroll(x, y, str); + printf("y: %d\n", y); + } + while(j--) { + x += 13; + } } - _CPU_ISR_Enable() - while(1) {} +#if 0 + printf("===============================\n"); + + SHA1TestCases(); + + printf("bye, world!\n"); +#endif return 0; }