1.1 diff -r caa916e038e5 -r 7d14fab5e4aa src/memory.c 1.2 --- a/src/memory.c Fri Dec 03 00:20:36 2010 +0000 1.3 +++ b/src/memory.c Fri Dec 03 01:43:57 2010 +0000 1.4 @@ -271,11 +271,12 @@ 1.5 break; 1.6 } 1.7 break; 1.8 - case 0x0A0000: // Miscellaneous Control Register 1.9 + case 0x0A0000: // Miscellaneous Control Register -- write only! 1.10 + handled = true; 1.11 break; 1.12 case 0x0B0000: // TM/DIALWR 1.13 break; 1.14 - case 0x0C0000: // Clear Status Register 1.15 + case 0x0C0000: // Clear Status Register -- write only! 1.16 handled = true; 1.17 break; 1.18 case 0x0D0000: // DMA Address Register 1.19 @@ -432,11 +433,12 @@ 1.20 break; 1.21 } 1.22 break; 1.23 - case 0x0A0000: // Miscellaneous Control Register 1.24 + case 0x0A0000: // Miscellaneous Control Register -- write only! 1.25 + handled = true; 1.26 break; 1.27 case 0x0B0000: // TM/DIALWR 1.28 break; 1.29 - case 0x0C0000: // Clear Status Register 1.30 + case 0x0C0000: // Clear Status Register -- write only! 1.31 handled = true; 1.32 break; 1.33 case 0x0D0000: // DMA Address Register 1.34 @@ -505,7 +507,7 @@ 1.35 } 1.36 } 1.37 1.38 - LOG_NOT_HANDLED_R(32); 1.39 + LOG_NOT_HANDLED_R(16); 1.40 return data; 1.41 } 1.42 1.43 @@ -602,11 +604,12 @@ 1.44 break; 1.45 } 1.46 break; 1.47 - case 0x0A0000: // Miscellaneous Control Register 1.48 + case 0x0A0000: // Miscellaneous Control Register -- write only! 1.49 + handled = true; 1.50 break; 1.51 case 0x0B0000: // TM/DIALWR 1.52 break; 1.53 - case 0x0C0000: // Clear Status Register 1.54 + case 0x0C0000: // Clear Status Register -- write only! 1.55 handled = true; 1.56 break; 1.57 case 0x0D0000: // DMA Address Register 1.58 @@ -758,6 +761,14 @@ 1.59 } 1.60 break; 1.61 case 0x0A0000: // Miscellaneous Control Register 1.62 + // TODO: handle the ctrl bits properly 1.63 + state.leds = (~value & 0xF00) >> 8; 1.64 + printf("LEDs: %s %s %s %s\n", 1.65 + (state.leds & 8) ? "R" : "-", 1.66 + (state.leds & 4) ? "G" : "-", 1.67 + (state.leds & 2) ? "Y" : "-", 1.68 + (state.leds & 1) ? "R" : "-"); 1.69 + handled = true; 1.70 break; 1.71 case 0x0B0000: // TM/DIALWR 1.72 break; 1.73 @@ -924,6 +935,14 @@ 1.74 } 1.75 break; 1.76 case 0x0A0000: // Miscellaneous Control Register 1.77 + // TODO: handle the ctrl bits properly 1.78 + state.leds = (~value & 0xF00) >> 8; 1.79 + printf("LEDs: %s %s %s %s\n", 1.80 + (state.leds & 8) ? "R" : "-", 1.81 + (state.leds & 4) ? "G" : "-", 1.82 + (state.leds & 2) ? "Y" : "-", 1.83 + (state.leds & 1) ? "R" : "-"); 1.84 + handled = true; 1.85 break; 1.86 case 0x0B0000: // TM/DIALWR 1.87 break; 1.88 @@ -1042,7 +1061,7 @@ 1.89 handled = true; 1.90 break; 1.91 case 0x020000: // Video RAM 1.92 - if (address > 0x427FFF) fprintf(stderr, "NOTE: WR8 to VideoRAM mirror, addr=%08X\n, data=0x%02X", address, value); 1.93 + if (address > 0x427FFF) fprintf(stderr, "NOTE: WR8 to VideoRAM mirror, addr=%08X, data=0x%02X\n", address, value); 1.94 WR8(state.vram, address, 0x7FFF, value); 1.95 handled = true; 1.96 break; 1.97 @@ -1089,6 +1108,17 @@ 1.98 } 1.99 break; 1.100 case 0x0A0000: // Miscellaneous Control Register 1.101 + // TODO: handle the ctrl bits properly 1.102 + if ((address & 1) == 0) 1.103 + ;// CTL bits 1.104 + else 1.105 + state.leds = (~value & 0xF); 1.106 + printf("LEDs: %s %s %s %s\n", 1.107 + (state.leds & 8) ? "R" : "-", 1.108 + (state.leds & 4) ? "G" : "-", 1.109 + (state.leds & 2) ? "Y" : "-", 1.110 + (state.leds & 1) ? "R" : "-"); 1.111 + handled = true; 1.112 break; 1.113 case 0x0B0000: // TM/DIALWR 1.114 break;