#ifdef __cplusplus extern "C" { #endif #if defined __K64F__ #include #include #define uint32_t __uint32_t #define uint16_t __uint16_t #define uint8_t __uint8_t #define int32_t __int32_t #define int16_t __int16_t #define int8_t __int8_t #include "k64f_soc.h" #elif defined __ZPU__ #include #include "zpu_soc.h" #elif defined __M68K__ #include #include "m68k_soc.h" #endif #include "ps2.h" #include "interrupts.h" #include "keyboard.h" void ps2_ringbuffer_init(struct ps2_ringbuffer *r) { r->in_hw=0; r->in_cpu=0; r->out_hw=0; r->out_cpu=0; } void ps2_ringbuffer_write(struct ps2_ringbuffer *r,int in) { while(r->out_hw==((r->out_cpu+1)&(PS2_RINGBUFFER_SIZE-1))) ; // printf("w: %d, %d\n, %d\n",r->out_hw,r->out_cpu,in); DisableInterrupts(); r->outbuf[r->out_cpu]=in; r->out_cpu=(r->out_cpu+1) & (PS2_RINGBUFFER_SIZE-1); PS2Handler(); EnableInterrupts(); } int ps2_ringbuffer_read(struct ps2_ringbuffer *r) { unsigned char result; if(r->in_hw==r->in_cpu) return(-1); // No characters ready result=r->inbuf[r->in_cpu]; r->in_cpu=(r->in_cpu+1) & (PS2_RINGBUFFER_SIZE-1); return(result); } int ps2_ringbuffer_count(struct ps2_ringbuffer *r) { if(r->in_hw>=r->in_cpu) return(r->in_hw-r->in_cpu); return(r->in_hw+PS2_RINGBUFFER_SIZE-r->in_cpu); } struct ps2_ringbuffer kbbuffer; struct ps2_ringbuffer mousebuffer; #if defined __ZPU__ void PS2Handler() { int kbd; int mouse; DisableInterrupts(); kbd=PS2_KEYBOARD(PS2_0); mouse=PS2_MOUSE(PS2_0); if(kbd & (1<