src/main.c

changeset 35
391318413bb2
parent 34
e8ebd433270a
child 36
746fb8d0653e
     1.1 diff -r e8ebd433270a -r 391318413bb2 src/main.c
     1.2 --- a/src/main.c	Thu Dec 02 19:30:46 2010 +0000
     1.3 +++ b/src/main.c	Thu Dec 02 20:19:20 2010 +0000
     1.4 @@ -243,37 +243,55 @@
     1.5  				data = RD32(state.vram, address, 0x7FFF);
     1.6  				break;
     1.7  			case 0x030000:				// Bus Status Register 0
     1.8 +				break;
     1.9  			case 0x040000:				// Bus Status Register 1
    1.10 +				break;
    1.11  			case 0x050000:				// Phone status
    1.12 +				break;
    1.13  			case 0x060000:				// DMA Count
    1.14 +				break;
    1.15  			case 0x070000:				// Line Printer Status Register
    1.16 +				break;
    1.17  			case 0x080000:				// Real Time Clock
    1.18 +				break;
    1.19  			case 0x090000:				// Phone registers
    1.20  				switch (address & 0x0FF000) {
    1.21  					case 0x090000:		// Handset relay
    1.22  					case 0x098000:
    1.23 +						break;
    1.24  					case 0x091000:		// Line select 2
    1.25  					case 0x099000:
    1.26 +						break;
    1.27  					case 0x092000:		// Hook relay 1
    1.28  					case 0x09A000:
    1.29 +						break;
    1.30  					case 0x093000:		// Hook relay 2
    1.31  					case 0x09B000:
    1.32 +						break;
    1.33  					case 0x094000:		// Line 1 hold
    1.34  					case 0x09C000:
    1.35 +						break;
    1.36  					case 0x095000:		// Line 2 hold
    1.37  					case 0x09D000:
    1.38 +						break;
    1.39  					case 0x096000:		// Line 1 A-lead
    1.40  					case 0x09E000:
    1.41 +						break;
    1.42  					case 0x097000:		// Line 2 A-lead
    1.43  					case 0x09F000:
    1.44  						break;
    1.45  				}
    1.46  				break;
    1.47  			case 0x0A0000:				// Miscellaneous Control Register
    1.48 +				break;
    1.49  			case 0x0B0000:				// TM/DIALWR
    1.50 +				break;
    1.51  			case 0x0C0000:				// CSR
    1.52 +				break;
    1.53  			case 0x0D0000:				// DMA Address Register
    1.54 +				break;
    1.55  			case 0x0E0000:				// Disk Control Register
    1.56 +				break;
    1.57  			case 0x0F0000:				// Line Printer Data Register
    1.58  				break;
    1.59  		}
    1.60 @@ -307,6 +325,33 @@
    1.61  						break;
    1.62  					case 0x030000:		// [ef][3b]xxxx ==> Real Time Clock data bits
    1.63  						break;
    1.64 +					case 0x040000:		// [ef][4c]xxxx ==> General Control Register
    1.65 +						switch (address & 0x077000) {
    1.66 +							case 0x040000:		// [ef][4c][08]xxx ==> EE
    1.67 +								break;
    1.68 +							case 0x041000:		// [ef][4c][19]xxx ==> P1E
    1.69 +								break;
    1.70 +							case 0x042000:		// [ef][4c][2A]xxx ==> BP
    1.71 +								break;
    1.72 +							case 0x043000:		// [ef][4c][3B]xxx ==> ROMLMAP
    1.73 +								break;
    1.74 +							case 0x044000:		// [ef][4c][4C]xxx ==> L1 MODEM
    1.75 +								break;
    1.76 +							case 0x045000:		// [ef][4c][5D]xxx ==> L2 MODEM
    1.77 +								break;
    1.78 +							case 0x046000:		// [ef][4c][6E]xxx ==> D/N CONNECT
    1.79 +								break;
    1.80 +							case 0x047000:		// [ef][4c][7F]xxx ==> Whole screen reverse video
    1.81 +								break;
    1.82 +						}
    1.83 +					case 0x050000:		// [ef][5d]xxxx ==> 8274
    1.84 +					case 0x060000:		// [ef][6e]xxxx ==> Control regs
    1.85 +						switch (address & 0x07F000) {
    1.86 +							default:
    1.87 +								break;
    1.88 +						}
    1.89 +						break;
    1.90 +					case 0x070000:		// [ef][7f]xxxx ==> 6850 Keyboard Controller
    1.91  					default:
    1.92  						fprintf(stderr, "NOTE: RD32 from undefined E/F-block address 0x%08X", address);
    1.93  				}
    1.94 @@ -351,37 +396,55 @@
    1.95  				data = RD16(state.vram, address, 0x7FFF);
    1.96  				break;
    1.97  			case 0x030000:				// Bus Status Register 0
    1.98 +				break;
    1.99  			case 0x040000:				// Bus Status Register 1
   1.100 +				break;
   1.101  			case 0x050000:				// Phone status
   1.102 +				break;
   1.103  			case 0x060000:				// DMA Count
   1.104 +				break;
   1.105  			case 0x070000:				// Line Printer Status Register
   1.106 +				break;
   1.107  			case 0x080000:				// Real Time Clock
   1.108 +				break;
   1.109  			case 0x090000:				// Phone registers
   1.110  				switch (address & 0x0FF000) {
   1.111  					case 0x090000:		// Handset relay
   1.112  					case 0x098000:
   1.113 +						break;
   1.114  					case 0x091000:		// Line select 2
   1.115  					case 0x099000:
   1.116 +						break;
   1.117  					case 0x092000:		// Hook relay 1
   1.118  					case 0x09A000:
   1.119 +						break;
   1.120  					case 0x093000:		// Hook relay 2
   1.121  					case 0x09B000:
   1.122 +						break;
   1.123  					case 0x094000:		// Line 1 hold
   1.124  					case 0x09C000:
   1.125 +						break;
   1.126  					case 0x095000:		// Line 2 hold
   1.127  					case 0x09D000:
   1.128 +						break;
   1.129  					case 0x096000:		// Line 1 A-lead
   1.130  					case 0x09E000:
   1.131 +						break;
   1.132  					case 0x097000:		// Line 2 A-lead
   1.133  					case 0x09F000:
   1.134  						break;
   1.135  				}
   1.136  				break;
   1.137  			case 0x0A0000:				// Miscellaneous Control Register
   1.138 +				break;
   1.139  			case 0x0B0000:				// TM/DIALWR
   1.140 +				break;
   1.141  			case 0x0C0000:				// CSR
   1.142 +				break;
   1.143  			case 0x0D0000:				// DMA Address Register
   1.144 +				break;
   1.145  			case 0x0E0000:				// Disk Control Register
   1.146 +				break;
   1.147  			case 0x0F0000:				// Line Printer Data Register
   1.148  				break;
   1.149  		}
   1.150 @@ -415,8 +478,35 @@
   1.151  						break;
   1.152  					case 0x030000:		// [ef][3b]xxxx ==> Real Time Clock data bits
   1.153  						break;
   1.154 +					case 0x040000:		// [ef][4c]xxxx ==> General Control Register
   1.155 +						switch (address & 0x077000) {
   1.156 +							case 0x040000:		// [ef][4c][08]xxx ==> EE
   1.157 +								break;
   1.158 +							case 0x041000:		// [ef][4c][19]xxx ==> P1E
   1.159 +								break;
   1.160 +							case 0x042000:		// [ef][4c][2A]xxx ==> BP
   1.161 +								break;
   1.162 +							case 0x043000:		// [ef][4c][3B]xxx ==> ROMLMAP
   1.163 +								break;
   1.164 +							case 0x044000:		// [ef][4c][4C]xxx ==> L1 MODEM
   1.165 +								break;
   1.166 +							case 0x045000:		// [ef][4c][5D]xxx ==> L2 MODEM
   1.167 +								break;
   1.168 +							case 0x046000:		// [ef][4c][6E]xxx ==> D/N CONNECT
   1.169 +								break;
   1.170 +							case 0x047000:		// [ef][4c][7F]xxx ==> Whole screen reverse video
   1.171 +								break;
   1.172 +						}
   1.173 +					case 0x050000:		// [ef][5d]xxxx ==> 8274
   1.174 +					case 0x060000:		// [ef][6e]xxxx ==> Control regs
   1.175 +						switch (address & 0x07F000) {
   1.176 +							default:
   1.177 +								break;
   1.178 +						}
   1.179 +						break;
   1.180 +					case 0x070000:		// [ef][7f]xxxx ==> 6850 Keyboard Controller
   1.181  					default:
   1.182 -						fprintf(stderr, "NOTE: RD16 to undefined E/F-block address 0x%08X", address);
   1.183 +						fprintf(stderr, "NOTE: RD16 from undefined E/F-block address 0x%08X", address);
   1.184  				}
   1.185  		}
   1.186  	}
   1.187 @@ -462,43 +552,61 @@
   1.188  				data = RD8(state.vram, address, 0x7FFF);
   1.189  				break;
   1.190  			case 0x030000:				// Bus Status Register 0
   1.191 +				break;
   1.192  			case 0x040000:				// Bus Status Register 1
   1.193 +				break;
   1.194  			case 0x050000:				// Phone status
   1.195 +				break;
   1.196  			case 0x060000:				// DMA Count
   1.197 +				break;
   1.198  			case 0x070000:				// Line Printer Status Register
   1.199 +				break;
   1.200  			case 0x080000:				// Real Time Clock
   1.201 +				break;
   1.202  			case 0x090000:				// Phone registers
   1.203  				switch (address & 0x0FF000) {
   1.204  					case 0x090000:		// Handset relay
   1.205  					case 0x098000:
   1.206 +						break;
   1.207  					case 0x091000:		// Line select 2
   1.208  					case 0x099000:
   1.209 +						break;
   1.210  					case 0x092000:		// Hook relay 1
   1.211  					case 0x09A000:
   1.212 +						break;
   1.213  					case 0x093000:		// Hook relay 2
   1.214  					case 0x09B000:
   1.215 +						break;
   1.216  					case 0x094000:		// Line 1 hold
   1.217  					case 0x09C000:
   1.218 +						break;
   1.219  					case 0x095000:		// Line 2 hold
   1.220  					case 0x09D000:
   1.221 +						break;
   1.222  					case 0x096000:		// Line 1 A-lead
   1.223  					case 0x09E000:
   1.224 +						break;
   1.225  					case 0x097000:		// Line 2 A-lead
   1.226  					case 0x09F000:
   1.227  						break;
   1.228  				}
   1.229  				break;
   1.230  			case 0x0A0000:				// Miscellaneous Control Register
   1.231 +				break;
   1.232  			case 0x0B0000:				// TM/DIALWR
   1.233 +				break;
   1.234  			case 0x0C0000:				// CSR
   1.235 +				break;
   1.236  			case 0x0D0000:				// DMA Address Register
   1.237 +				break;
   1.238  			case 0x0E0000:				// Disk Control Register
   1.239 +				break;
   1.240  			case 0x0F0000:				// Line Printer Data Register
   1.241  				break;
   1.242  		}
   1.243  	} else if ((address >= 0xC00000) && (address <= 0xFFFFFF)) {
   1.244  		// I/O register space, zone B
   1.245 -		printf("RD32 0x%08X ==> ??? %s\n", address, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.246 +		printf("RD8 0x%08X ==> ??? %s\n", address, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.247  		switch (address & 0xF00000) {
   1.248  			case 0xC00000:				// Expansion slots
   1.249  			case 0xD00000:
   1.250 @@ -511,7 +619,7 @@
   1.251  					case 0xD40000:		// Expansion slot 5
   1.252  					case 0xD80000:		// Expansion slot 6
   1.253  					case 0xDC0000:		// Expansion slot 7
   1.254 -						fprintf(stderr, "NOTE: RD8 from expansion card address 0x%08X\n", address);
   1.255 +						fprintf(stderr, "NOTE: RD8 from expansion card space, addr=0x%08X\n", address);
   1.256  						break;
   1.257  				}
   1.258  				break;
   1.259 @@ -526,6 +634,33 @@
   1.260  						break;
   1.261  					case 0x030000:		// [ef][3b]xxxx ==> Real Time Clock data bits
   1.262  						break;
   1.263 +					case 0x040000:		// [ef][4c]xxxx ==> General Control Register
   1.264 +						switch (address & 0x077000) {
   1.265 +							case 0x040000:		// [ef][4c][08]xxx ==> EE
   1.266 +								break;
   1.267 +							case 0x041000:		// [ef][4c][19]xxx ==> P1E
   1.268 +								break;
   1.269 +							case 0x042000:		// [ef][4c][2A]xxx ==> BP
   1.270 +								break;
   1.271 +							case 0x043000:		// [ef][4c][3B]xxx ==> ROMLMAP
   1.272 +								break;
   1.273 +							case 0x044000:		// [ef][4c][4C]xxx ==> L1 MODEM
   1.274 +								break;
   1.275 +							case 0x045000:		// [ef][4c][5D]xxx ==> L2 MODEM
   1.276 +								break;
   1.277 +							case 0x046000:		// [ef][4c][6E]xxx ==> D/N CONNECT
   1.278 +								break;
   1.279 +							case 0x047000:		// [ef][4c][7F]xxx ==> Whole screen reverse video
   1.280 +								break;
   1.281 +						}
   1.282 +					case 0x050000:		// [ef][5d]xxxx ==> 8274
   1.283 +					case 0x060000:		// [ef][6e]xxxx ==> Control regs
   1.284 +						switch (address & 0x07F000) {
   1.285 +							default:
   1.286 +								break;
   1.287 +						}
   1.288 +						break;
   1.289 +					case 0x070000:		// [ef][7f]xxxx ==> 6850 Keyboard Controller
   1.290  					default:
   1.291  						fprintf(stderr, "NOTE: RD8 from undefined E/F-block address 0x%08X", address);
   1.292  				}
   1.293 @@ -554,7 +689,7 @@
   1.294  		WR32(state.ram, mapAddr(address, false), state.ram_size - 1, value);
   1.295  	} else if ((address >= 0x400000) && (address <= 0x7FFFFF)) {
   1.296  		// I/O register space, zone A
   1.297 -		printf("WR32 0x%08X ==> ??? %s\n", address, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.298 +		printf("WR32 0x%08X ==> 0x%08X %s\n", address, value, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.299  		switch (address & 0x0F0000) {
   1.300  			case 0x000000:				// Map RAM access
   1.301  				if (address > 0x4007FF) fprintf(stderr, "NOTE: WR32 to MapRAM mirror, addr=0x%08X, data=0x%08X\n", address, value);
   1.302 @@ -568,37 +703,55 @@
   1.303  				WR32(state.vram, address, 0x7FFF, value);
   1.304  				break;
   1.305  			case 0x030000:				// Bus Status Register 0
   1.306 +				break;
   1.307  			case 0x040000:				// Bus Status Register 1
   1.308 +				break;
   1.309  			case 0x050000:				// Phone status
   1.310 +				break;
   1.311  			case 0x060000:				// DMA Count
   1.312 +				break;
   1.313  			case 0x070000:				// Line Printer Status Register
   1.314 +				break;
   1.315  			case 0x080000:				// Real Time Clock
   1.316 +				break;
   1.317  			case 0x090000:				// Phone registers
   1.318  				switch (address & 0x0FF000) {
   1.319  					case 0x090000:		// Handset relay
   1.320  					case 0x098000:
   1.321 +						break;
   1.322  					case 0x091000:		// Line select 2
   1.323  					case 0x099000:
   1.324 +						break;
   1.325  					case 0x092000:		// Hook relay 1
   1.326  					case 0x09A000:
   1.327 +						break;
   1.328  					case 0x093000:		// Hook relay 2
   1.329  					case 0x09B000:
   1.330 +						break;
   1.331  					case 0x094000:		// Line 1 hold
   1.332  					case 0x09C000:
   1.333 +						break;
   1.334  					case 0x095000:		// Line 2 hold
   1.335  					case 0x09D000:
   1.336 +						break;
   1.337  					case 0x096000:		// Line 1 A-lead
   1.338  					case 0x09E000:
   1.339 +						break;
   1.340  					case 0x097000:		// Line 2 A-lead
   1.341  					case 0x09F000:
   1.342  						break;
   1.343  				}
   1.344  				break;
   1.345  			case 0x0A0000:				// Miscellaneous Control Register
   1.346 +				break;
   1.347  			case 0x0B0000:				// TM/DIALWR
   1.348 +				break;
   1.349  			case 0x0C0000:				// CSR
   1.350 +				break;
   1.351  			case 0x0D0000:				// DMA Address Register
   1.352 +				break;
   1.353  			case 0x0E0000:				// Disk Control Register
   1.354 +				break;
   1.355  			case 0x0F0000:				// Line Printer Data Register
   1.356  				break;
   1.357  		}
   1.358 @@ -632,6 +785,36 @@
   1.359  						break;
   1.360  					case 0x030000:		// [ef][3b]xxxx ==> Real Time Clock data bits
   1.361  						break;
   1.362 +					case 0x040000:		// [ef][4c]xxxx ==> General Control Register
   1.363 +						switch (address & 0x077000) {
   1.364 +							case 0x040000:		// [ef][4c][08]xxx ==> EE
   1.365 +								break;
   1.366 +							case 0x041000:		// [ef][4c][19]xxx ==> P1E
   1.367 +								break;
   1.368 +							case 0x042000:		// [ef][4c][2A]xxx ==> BP
   1.369 +								break;
   1.370 +							case 0x043000:		// [ef][4c][3B]xxx ==> ROMLMAP
   1.371 +								state.romlmap = ((value & 0x8000) == 0x8000);
   1.372 +								break;
   1.373 +							case 0x044000:		// [ef][4c][4C]xxx ==> L1 MODEM
   1.374 +								break;
   1.375 +							case 0x045000:		// [ef][4c][5D]xxx ==> L2 MODEM
   1.376 +								break;
   1.377 +							case 0x046000:		// [ef][4c][6E]xxx ==> D/N CONNECT
   1.378 +								break;
   1.379 +							case 0x047000:		// [ef][4c][7F]xxx ==> Whole screen reverse video
   1.380 +								break;
   1.381 +						}
   1.382 +					case 0x050000:		// [ef][5d]xxxx ==> 8274
   1.383 +						break;
   1.384 +					case 0x060000:		// [ef][6e]xxxx ==> Control regs
   1.385 +						switch (address & 0x07F000) {
   1.386 +							default:
   1.387 +								break;
   1.388 +						}
   1.389 +						break;
   1.390 +					case 0x070000:		// [ef][7f]xxxx ==> 6850 Keyboard Controller
   1.391 +						break;
   1.392  					default:
   1.393  						fprintf(stderr, "NOTE: WR32 to undefined E/F-block space, addr=0x%08X, data=0x%08X\n", address, value);
   1.394  				}
   1.395 @@ -659,7 +842,7 @@
   1.396  		WR16(state.ram, mapAddr(address, false), state.ram_size - 1, value);
   1.397  	} else if ((address >= 0x400000) && (address <= 0x7FFFFF)) {
   1.398  		// I/O register space, zone A
   1.399 -		printf("WR16 0x%08X ==> ??? %s\n", address, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.400 +		printf("WR16 0x%08X ==> 0x%04X %s\n", address, value, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.401  		switch (address & 0x0F0000) {
   1.402  			case 0x000000:				// Map RAM access
   1.403  				if (address > 0x4007FF) fprintf(stderr, "NOTE: WR16 to MapRAM mirror, addr=0x%08X, data=0x%04X\n", address, value);
   1.404 @@ -673,37 +856,55 @@
   1.405  				WR16(state.vram, address, 0x7FFF, value);
   1.406  				break;
   1.407  			case 0x030000:				// Bus Status Register 0
   1.408 +				break;
   1.409  			case 0x040000:				// Bus Status Register 1
   1.410 +				break;
   1.411  			case 0x050000:				// Phone status
   1.412 +				break;
   1.413  			case 0x060000:				// DMA Count
   1.414 +				break;
   1.415  			case 0x070000:				// Line Printer Status Register
   1.416 +				break;
   1.417  			case 0x080000:				// Real Time Clock
   1.418 +				break;
   1.419  			case 0x090000:				// Phone registers
   1.420  				switch (address & 0x0FF000) {
   1.421  					case 0x090000:		// Handset relay
   1.422  					case 0x098000:
   1.423 +						break;
   1.424  					case 0x091000:		// Line select 2
   1.425  					case 0x099000:
   1.426 +						break;
   1.427  					case 0x092000:		// Hook relay 1
   1.428  					case 0x09A000:
   1.429 +						break;
   1.430  					case 0x093000:		// Hook relay 2
   1.431  					case 0x09B000:
   1.432 +						break;
   1.433  					case 0x094000:		// Line 1 hold
   1.434  					case 0x09C000:
   1.435 +						break;
   1.436  					case 0x095000:		// Line 2 hold
   1.437  					case 0x09D000:
   1.438 +						break;
   1.439  					case 0x096000:		// Line 1 A-lead
   1.440  					case 0x09E000:
   1.441 +						break;
   1.442  					case 0x097000:		// Line 2 A-lead
   1.443  					case 0x09F000:
   1.444  						break;
   1.445  				}
   1.446  				break;
   1.447  			case 0x0A0000:				// Miscellaneous Control Register
   1.448 +				break;
   1.449  			case 0x0B0000:				// TM/DIALWR
   1.450 +				break;
   1.451  			case 0x0C0000:				// CSR
   1.452 +				break;
   1.453  			case 0x0D0000:				// DMA Address Register
   1.454 +				break;
   1.455  			case 0x0E0000:				// Disk Control Register
   1.456 +				break;
   1.457  			case 0x0F0000:				// Line Printer Data Register
   1.458  				break;
   1.459  		}
   1.460 @@ -737,8 +938,38 @@
   1.461  						break;
   1.462  					case 0x030000:		// [ef][3b]xxxx ==> Real Time Clock data bits
   1.463  						break;
   1.464 +					case 0x040000:		// [ef][4c]xxxx ==> General Control Register
   1.465 +						switch (address & 0x077000) {
   1.466 +							case 0x040000:		// [ef][4c][08]xxx ==> EE
   1.467 +								break;
   1.468 +							case 0x041000:		// [ef][4c][19]xxx ==> P1E
   1.469 +								break;
   1.470 +							case 0x042000:		// [ef][4c][2A]xxx ==> BP
   1.471 +								break;
   1.472 +							case 0x043000:		// [ef][4c][3B]xxx ==> ROMLMAP
   1.473 +								state.romlmap = ((value & 0x8000) == 0x8000);
   1.474 +								break;
   1.475 +							case 0x044000:		// [ef][4c][4C]xxx ==> L1 MODEM
   1.476 +								break;
   1.477 +							case 0x045000:		// [ef][4c][5D]xxx ==> L2 MODEM
   1.478 +								break;
   1.479 +							case 0x046000:		// [ef][4c][6E]xxx ==> D/N CONNECT
   1.480 +								break;
   1.481 +							case 0x047000:		// [ef][4c][7F]xxx ==> Whole screen reverse video
   1.482 +								break;
   1.483 +						}
   1.484 +					case 0x050000:		// [ef][5d]xxxx ==> 8274
   1.485 +						break;
   1.486 +					case 0x060000:		// [ef][6e]xxxx ==> Control regs
   1.487 +						switch (address & 0x07F000) {
   1.488 +							default:
   1.489 +								break;
   1.490 +						}
   1.491 +						break;
   1.492 +					case 0x070000:		// [ef][7f]xxxx ==> 6850 Keyboard Controller
   1.493 +						break;
   1.494  					default:
   1.495 -						fprintf(stderr, "NOTE: WR16 to undefined E/F-block space, addr=0x%08X, data=0x%04X\n", address, value);
   1.496 +						fprintf(stderr, "NOTE: WR32 to undefined E/F-block space, addr=0x%08X, data=0x%08X\n", address, value);
   1.497  				}
   1.498  		}
   1.499  	}
   1.500 @@ -764,7 +995,7 @@
   1.501  		WR8(state.ram, mapAddr(address, false), state.ram_size - 1, value);
   1.502  	} else if ((address >= 0x400000) && (address <= 0x7FFFFF)) {
   1.503  		// I/O register space, zone A
   1.504 -		printf("WR8 0x%08X ==> ??? %s\n", address, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.505 +		printf("WR8 0x%08X ==> %02X %s\n", address, value, m68k_get_reg(NULL, M68K_REG_SR) & 0x2000 ? "[SV]" : "");
   1.506  		switch (address & 0x0F0000) {
   1.507  			case 0x000000:				// Map RAM access
   1.508  				if (address > 0x4007FF) fprintf(stderr, "NOTE: WR8 to MapRAM mirror, addr=%08X, data=%02X\n", address, value);
   1.509 @@ -778,37 +1009,55 @@
   1.510  				WR8(state.vram, address, 0x7FFF, value);
   1.511  				break;
   1.512  			case 0x030000:				// Bus Status Register 0
   1.513 +				break;
   1.514  			case 0x040000:				// Bus Status Register 1
   1.515 +				break;
   1.516  			case 0x050000:				// Phone status
   1.517 +				break;
   1.518  			case 0x060000:				// DMA Count
   1.519 +				break;
   1.520  			case 0x070000:				// Line Printer Status Register
   1.521 +				break;
   1.522  			case 0x080000:				// Real Time Clock
   1.523 +				break;
   1.524  			case 0x090000:				// Phone registers
   1.525  				switch (address & 0x0FF000) {
   1.526  					case 0x090000:		// Handset relay
   1.527  					case 0x098000:
   1.528 +						break;
   1.529  					case 0x091000:		// Line select 2
   1.530  					case 0x099000:
   1.531 +						break;
   1.532  					case 0x092000:		// Hook relay 1
   1.533  					case 0x09A000:
   1.534 +						break;
   1.535  					case 0x093000:		// Hook relay 2
   1.536  					case 0x09B000:
   1.537 +						break;
   1.538  					case 0x094000:		// Line 1 hold
   1.539  					case 0x09C000:
   1.540 +						break;
   1.541  					case 0x095000:		// Line 2 hold
   1.542  					case 0x09D000:
   1.543 +						break;
   1.544  					case 0x096000:		// Line 1 A-lead
   1.545  					case 0x09E000:
   1.546 +						break;
   1.547  					case 0x097000:		// Line 2 A-lead
   1.548  					case 0x09F000:
   1.549  						break;
   1.550  				}
   1.551  				break;
   1.552  			case 0x0A0000:				// Miscellaneous Control Register
   1.553 +				break;
   1.554  			case 0x0B0000:				// TM/DIALWR
   1.555 +				break;
   1.556  			case 0x0C0000:				// CSR
   1.557 +				break;
   1.558  			case 0x0D0000:				// DMA Address Register
   1.559 +				break;
   1.560  			case 0x0E0000:				// Disk Control Register
   1.561 +				break;
   1.562  			case 0x0F0000:				// Line Printer Data Register
   1.563  				break;
   1.564  		}
   1.565 @@ -842,8 +1091,40 @@
   1.566  						break;
   1.567  					case 0x030000:		// [ef][3b]xxxx ==> Real Time Clock data bits
   1.568  						break;
   1.569 +					case 0x040000:		// [ef][4c]xxxx ==> General Control Register
   1.570 +						switch (address & 0x077000) {
   1.571 +							case 0x040000:		// [ef][4c][08]xxx ==> EE
   1.572 +								break;
   1.573 +							case 0x041000:		// [ef][4c][19]xxx ==> P1E
   1.574 +								break;
   1.575 +							case 0x042000:		// [ef][4c][2A]xxx ==> BP
   1.576 +								break;
   1.577 +							case 0x043000:		// [ef][4c][3B]xxx ==> ROMLMAP
   1.578 +								if ((address & 1) == 0)
   1.579 +								state.romlmap = ((value & 0x8000) == 0x8000);
   1.580 +								break;
   1.581 +							case 0x044000:		// [ef][4c][4C]xxx ==> L1 MODEM
   1.582 +								break;
   1.583 +							case 0x045000:		// [ef][4c][5D]xxx ==> L2 MODEM
   1.584 +								break;
   1.585 +							case 0x046000:		// [ef][4c][6E]xxx ==> D/N CONNECT
   1.586 +								break;
   1.587 +							case 0x047000:		// [ef][4c][7F]xxx ==> Whole screen reverse video
   1.588 +								break;
   1.589 +						}
   1.590 +					case 0x050000:		// [ef][5d]xxxx ==> 8274
   1.591 +						break;
   1.592 +					case 0x060000:		// [ef][6e]xxxx ==> Control regs
   1.593 +						switch (address & 0x07F000) {
   1.594 +							default:
   1.595 +								break;
   1.596 +						}
   1.597 +						break;
   1.598 +					case 0x070000:		// [ef][7f]xxxx ==> 6850 Keyboard Controller
   1.599 +						break;
   1.600  					default:
   1.601  						fprintf(stderr, "NOTE: WR8 to undefined E/F-block space, addr=0x%08X, data=0x%08X\n", address, value);
   1.602 +						break;
   1.603  				}
   1.604  		}
   1.605  	}