1.1 diff -r 4d59e4ceef52 -r f928be115194 src/memory.c 1.2 --- a/src/memory.c Fri Dec 03 00:04:01 2010 +0000 1.3 +++ b/src/memory.c Fri Dec 03 00:12:53 2010 +0000 1.4 @@ -98,12 +98,12 @@ 1.5 break; \ 1.6 case MEM_PAGEFAULT: \ 1.7 /* Page fault */ \ 1.8 - state.genstat = 0x8BFF | (status.pie ? 0x0400 : 0); \ 1.9 + state.genstat = 0x8BFF | (state.pie ? 0x0400 : 0); \ 1.10 fault = true; \ 1.11 break; \ 1.12 case MEM_UIE: \ 1.13 /* User access to memory above 4MB */ \ 1.14 - state.genstat = 0x9AFF | (status.pie ? 0x0400 : 0); \ 1.15 + state.genstat = 0x9AFF | (state.pie ? 0x0400 : 0); \ 1.16 fault = true; \ 1.17 break; \ 1.18 case MEM_KERNEL: \ 1.19 @@ -145,12 +145,12 @@ 1.20 break; \ 1.21 case MEM_PAGEFAULT: \ 1.22 /* Page fault */ \ 1.23 - state.genstat = 0xCBFF | (status.pie ? 0x0400 : 0); \ 1.24 + state.genstat = 0xCBFF | (state.pie ? 0x0400 : 0); \ 1.25 fault = true; \ 1.26 break; \ 1.27 case MEM_UIE: \ 1.28 /* User access to memory above 4MB */ \ 1.29 - state.genstat = 0xDAFF | (status.pie ? 0x0400 : 0); \ 1.30 + state.genstat = 0xDAFF | (state.pie ? 0x0400 : 0); \ 1.31 fault = true; \ 1.32 break; \ 1.33 case MEM_KERNEL: \ 1.34 @@ -317,20 +317,16 @@ 1.35 case 0x040000: // [ef][4c]xxxx ==> General Control Register 1.36 switch (address & 0x077000) { 1.37 case 0x040000: // [ef][4c][08]xxx ==> EE 1.38 - break; 1.39 - case 0x041000: // [ef][4c][19]xxx ==> P1E 1.40 - break; 1.41 + case 0x041000: // [ef][4c][19]xxx ==> PIE 1.42 case 0x042000: // [ef][4c][2A]xxx ==> BP 1.43 - break; 1.44 case 0x043000: // [ef][4c][3B]xxx ==> ROMLMAP 1.45 + case 0x044000: // [ef][4c][4C]xxx ==> L1 MODEM 1.46 + case 0x045000: // [ef][4c][5D]xxx ==> L2 MODEM 1.47 + case 0x046000: // [ef][4c][6E]xxx ==> D/N CONNECT 1.48 + // All write-only registers... TODO: bus error? 1.49 + handled = true; 1.50 break; 1.51 - case 0x044000: // [ef][4c][4C]xxx ==> L1 MODEM 1.52 - break; 1.53 - case 0x045000: // [ef][4c][5D]xxx ==> L2 MODEM 1.54 - break; 1.55 - case 0x046000: // [ef][4c][6E]xxx ==> D/N CONNECT 1.56 - break; 1.57 - case 0x047000: // [ef][4c][7F]xxx ==> Whole screen reverse video 1.58 + case 0x047000: // [ef][4c][7F]xxx ==> Whole screen reverse video [FIXME: not in TRM] 1.59 break; 1.60 } 1.61 break; 1.62 @@ -482,18 +478,14 @@ 1.63 case 0x040000: // [ef][4c]xxxx ==> General Control Register 1.64 switch (address & 0x077000) { 1.65 case 0x040000: // [ef][4c][08]xxx ==> EE 1.66 - break; 1.67 - case 0x041000: // [ef][4c][19]xxx ==> P1E 1.68 - break; 1.69 + case 0x041000: // [ef][4c][19]xxx ==> PIE 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 + // All write-only registers... TODO: bus error? 1.80 + handled = true; 1.81 break; 1.82 case 0x047000: // [ef][4c][7F]xxx ==> Whole screen reverse video 1.83 break; 1.84 @@ -656,18 +648,14 @@ 1.85 case 0x040000: // [ef][4c]xxxx ==> General Control Register 1.86 switch (address & 0x077000) { 1.87 case 0x040000: // [ef][4c][08]xxx ==> EE 1.88 - break; 1.89 - case 0x041000: // [ef][4c][19]xxx ==> P1E 1.90 - break; 1.91 + case 0x041000: // [ef][4c][19]xxx ==> PIE 1.92 case 0x042000: // [ef][4c][2A]xxx ==> BP 1.93 - break; 1.94 case 0x043000: // [ef][4c][3B]xxx ==> ROMLMAP 1.95 - break; 1.96 case 0x044000: // [ef][4c][4C]xxx ==> L1 MODEM 1.97 - break; 1.98 case 0x045000: // [ef][4c][5D]xxx ==> L2 MODEM 1.99 - break; 1.100 case 0x046000: // [ef][4c][6E]xxx ==> D/N CONNECT 1.101 + // All write-only registers... TODO: bus error? 1.102 + handled = true; 1.103 break; 1.104 case 0x047000: // [ef][4c][7F]xxx ==> Whole screen reverse video 1.105 break; 1.106 @@ -820,12 +808,15 @@ 1.107 switch (address & 0x077000) { 1.108 case 0x040000: // [ef][4c][08]xxx ==> EE 1.109 break; 1.110 - case 0x041000: // [ef][4c][19]xxx ==> P1E 1.111 + case 0x041000: // [ef][4c][19]xxx ==> PIE 1.112 + state.pie = ((value & 0x8000) == 0x8000); 1.113 + handled = true; 1.114 break; 1.115 case 0x042000: // [ef][4c][2A]xxx ==> BP 1.116 break; 1.117 case 0x043000: // [ef][4c][3B]xxx ==> ROMLMAP 1.118 state.romlmap = ((value & 0x8000) == 0x8000); 1.119 + handled = true; 1.120 break; 1.121 case 0x044000: // [ef][4c][4C]xxx ==> L1 MODEM 1.122 break; 1.123 @@ -982,7 +973,9 @@ 1.124 switch (address & 0x077000) { 1.125 case 0x040000: // [ef][4c][08]xxx ==> EE 1.126 break; 1.127 - case 0x041000: // [ef][4c][19]xxx ==> P1E 1.128 + case 0x041000: // [ef][4c][19]xxx ==> PIE 1.129 + state.pie = ((value & 0x8000) == 0x8000); 1.130 + handled = true; 1.131 break; 1.132 case 0x042000: // [ef][4c][2A]xxx ==> BP 1.133 break; 1.134 @@ -1145,7 +1138,10 @@ 1.135 switch (address & 0x077000) { 1.136 case 0x040000: // [ef][4c][08]xxx ==> EE 1.137 break; 1.138 - case 0x041000: // [ef][4c][19]xxx ==> P1E 1.139 + case 0x041000: // [ef][4c][19]xxx ==> PIE 1.140 + if ((address & 1) == 0) 1.141 + state.pie = ((value & 0x80) == 0x80); 1.142 + handled = true; 1.143 break; 1.144 case 0x042000: // [ef][4c][2A]xxx ==> BP 1.145 break;