Thu, 10 Feb 2011 01:08:32 +0000
properly handle 8 and 16 bit KBC writes
src/memory.c | file | annotate | diff | revisions |
1.1 diff -r 3d5680edc1f0 -r 09e3ddeb869a src/memory.c 1.2 --- a/src/memory.c Thu Feb 10 00:07:59 2011 +0000 1.3 +++ b/src/memory.c Thu Feb 10 01:08:32 2011 +0000 1.4 @@ -401,9 +401,15 @@ 1.5 case 0x070000: // [ef][7f]xxxx ==> 6850 Keyboard Controller 1.6 // TODO: figure out which sizes are valid (probably just 8 and 16) 1.7 // ENFORCE_SIZE_W(bits, address, 16, "KEYBOARD CONTROLLER"); 1.8 - printf("KBD WR %02X => %04X\n", (address >> 1) & 3, data >> 8); 1.9 - keyboard_write(&state.kbd, (address >> 1) & 3, data >> 8); 1.10 - handled = true; 1.11 + if (bits == 8) { 1.12 + printf("KBD WR %02X => %02X\n", (address >> 1) & 3, data); 1.13 + keyboard_write(&state.kbd, (address >> 1) & 3, data); 1.14 + handled = true; 1.15 + } else if (bits == 16) { 1.16 + printf("KBD WR %02X => %04X\n", (address >> 1) & 3, data); 1.17 + keyboard_write(&state.kbd, (address >> 1) & 3, data >> 8); 1.18 + handled = true; 1.19 + } 1.20 break; 1.21 } 1.22 } 1.23 @@ -552,9 +558,11 @@ 1.24 // TODO: figure out which sizes are valid (probably just 8 and 16) 1.25 //ENFORCE_SIZE_R(bits, address, 16, "KEYBOARD CONTROLLER"); 1.26 { 1.27 - uint16_t data = keyboard_read(&state.kbd, (address >> 1) & 3); 1.28 - data = (data << 8) + data; 1.29 - //printf("KBD RD %02X => %04X\n", (address >> 1) & 3, data); 1.30 + if (bits == 8) { 1.31 + return keyboard_read(&state.kbd, (address >> 1) & 3); 1.32 + } else { 1.33 + return keyboard_read(&state.kbd, (address >> 1) & 3) << 8; 1.34 + } 1.35 return data; 1.36 } 1.37 break;