Revision b41a2cd1 hw/pckbd.c
b/hw/pckbd.c | ||
---|---|---|
189 | 189 |
|
190 | 190 |
static void kbd_queue(KBDState *s, int b, int aux) |
191 | 191 |
{ |
192 |
KBDQueue *q = &kbd_state.queues[aux];
|
|
192 |
KBDQueue *q = &s->queues[aux];
|
|
193 | 193 |
|
194 | 194 |
#if defined(DEBUG_MOUSE) || defined(DEBUG_KBD) |
195 | 195 |
if (aux) |
... | ... | |
214 | 214 |
kbd_queue(s, keycode, 0); |
215 | 215 |
} |
216 | 216 |
|
217 |
static uint32_t kbd_read_status(CPUState *env, uint32_t addr)
|
|
217 |
static uint32_t kbd_read_status(void *opaque, uint32_t addr)
|
|
218 | 218 |
{ |
219 |
KBDState *s = &kbd_state;
|
|
219 |
KBDState *s = opaque;
|
|
220 | 220 |
int val; |
221 | 221 |
val = s->status; |
222 | 222 |
#if defined(DEBUG_KBD) |
... | ... | |
225 | 225 |
return val; |
226 | 226 |
} |
227 | 227 |
|
228 |
static void kbd_write_command(CPUState *env, uint32_t addr, uint32_t val)
|
|
228 |
static void kbd_write_command(void *opaque, uint32_t addr, uint32_t val)
|
|
229 | 229 |
{ |
230 |
KBDState *s = &kbd_state;
|
|
230 |
KBDState *s = opaque;
|
|
231 | 231 |
|
232 | 232 |
#ifdef DEBUG_KBD |
233 | 233 |
printf("kbd: write cmd=0x%02x\n", val); |
... | ... | |
285 | 285 |
break; |
286 | 286 |
#ifdef TARGET_I386 |
287 | 287 |
case KBD_CCMD_ENABLE_A20: |
288 |
cpu_x86_set_a20(env, 1); |
|
288 |
cpu_x86_set_a20(cpu_single_env, 1);
|
|
289 | 289 |
break; |
290 | 290 |
case KBD_CCMD_DISABLE_A20: |
291 |
cpu_x86_set_a20(env, 0); |
|
291 |
cpu_x86_set_a20(cpu_single_env, 0);
|
|
292 | 292 |
break; |
293 | 293 |
#endif |
294 | 294 |
case KBD_CCMD_RESET: |
... | ... | |
304 | 304 |
} |
305 | 305 |
} |
306 | 306 |
|
307 |
static uint32_t kbd_read_data(CPUState *env, uint32_t addr)
|
|
307 |
static uint32_t kbd_read_data(void *opaque, uint32_t addr)
|
|
308 | 308 |
{ |
309 |
KBDState *s = &kbd_state;
|
|
309 |
KBDState *s = opaque;
|
|
310 | 310 |
KBDQueue *q; |
311 | 311 |
int val, index; |
312 | 312 |
|
... | ... | |
605 | 605 |
} |
606 | 606 |
} |
607 | 607 |
|
608 |
void kbd_write_data(CPUState *env, uint32_t addr, uint32_t val)
|
|
608 |
void kbd_write_data(void *opaque, uint32_t addr, uint32_t val)
|
|
609 | 609 |
{ |
610 |
KBDState *s = &kbd_state;
|
|
610 |
KBDState *s = opaque;
|
|
611 | 611 |
|
612 | 612 |
#ifdef DEBUG_KBD |
613 | 613 |
printf("kbd: write data=0x%02x\n", val); |
... | ... | |
629 | 629 |
break; |
630 | 630 |
case KBD_CCMD_WRITE_OUTPORT: |
631 | 631 |
#ifdef TARGET_I386 |
632 |
cpu_x86_set_a20(env, (val >> 1) & 1); |
|
632 |
cpu_x86_set_a20(cpu_single_env, (val >> 1) & 1);
|
|
633 | 633 |
#endif |
634 | 634 |
if (!(val & 1)) { |
635 | 635 |
reset_requested = 1; |
... | ... | |
664 | 664 |
|
665 | 665 |
void kbd_init(void) |
666 | 666 |
{ |
667 |
kbd_reset(&kbd_state); |
|
668 |
register_ioport_read(0x60, 1, kbd_read_data, 1); |
|
669 |
register_ioport_write(0x60, 1, kbd_write_data, 1); |
|
670 |
register_ioport_read(0x64, 1, kbd_read_status, 1); |
|
671 |
register_ioport_write(0x64, 1, kbd_write_command, 1); |
|
667 |
KBDState *s = &kbd_state; |
|
668 |
|
|
669 |
kbd_reset(s); |
|
670 |
register_ioport_read(0x60, 1, 1, kbd_read_data, s); |
|
671 |
register_ioport_write(0x60, 1, 1, kbd_write_data, s); |
|
672 |
register_ioport_read(0x64, 1, 1, kbd_read_status, s); |
|
673 |
register_ioport_write(0x64, 1, 1, kbd_write_command, s); |
|
672 | 674 |
} |
Also available in: Unified diff