RegisterList.java
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39: package xeij;
40:
41: import java.awt.*;
42: import java.awt.event.*;
43: import java.lang.*;
44: import javax.swing.*;
45:
46: public class RegisterList {
47:
48: public static final char[] DRP_BASE_000 = (
49:
50:
51: "PC:xxxxxxxx USP:xxxxxxxx SSP:xxxxxxxx SR:xxxx X:b N:b Z:b V:b C:b\n" +
52: "HI:b LS:b CC(HS):b CS(LO):b NE:b EQ:b VC:b VS:b PL:b MI:b GE:b LT:b GT:b LE:b\n" +
53: "D xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +
54: "A xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +
55: " \n" +
56: " \n" +
57: " \n" +
58: " \n" +
59: " \n" +
60: " \n" +
61: " ").toCharArray ();
62: public static final char[] DRP_BASE_030 = (
63:
64:
65: "PC:xxxxxxxx USP:xxxxxxxx ISP:xxxxxxxx MSP:xxxxxxxx SR:xxxx X:b N:b Z:b V:b C:b\n" +
66: "HI:b LS:b CC(HS):b CS(LO):b NE:b EQ:b VC:b VS:b PL:b MI:b GE:b LT:b GT:b LE:b\n" +
67: "D xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +
68: "A xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +
69: "SFC:x VBR:xxxxxxxx CACR:xxxxxxxx \n" +
70: "DFC:x \n" +
71: "FPCR:xxxxxxxx FPSR:xxxxxxxx M:b Z:b I:b N:b B:b S:b E:b O:b U:b D:b X:b P:b\n" +
72: "FP0:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP1:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +
73: "FP2:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP3:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +
74: "FP4:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP5:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +
75: "FP6:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP7:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx").toCharArray ();
76: public static final char[] DRP_BASE_060 = (
77:
78:
79: "PC:xxxxxxxx USP:xxxxxxxx SSP:xxxxxxxx SR:xxxx X:b N:b Z:b V:b C:b\n" +
80: "HI:b LS:b CC(HS):b CS(LO):b NE:b EQ:b VC:b VS:b PL:b MI:b GE:b LT:b GT:b LE:b\n" +
81: "D xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +
82: "A xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +
83: "SFC:x VBR:xxxxxxxx CACR:xxxxxxxx TCR:xxxxxxxx URP:xxxxxxxx SRP:xxxxxxxx\n" +
84: "DFC:x ITT0:xxxxxxxx ITT1:xxxxxxxx DTT0:xxxxxxxx DTT1:xxxxxxxx PCR:xxxxxxxx\n" +
85: "FPCR:xxxxxxxx FPSR:xxxxxxxx M:b Z:b I:b N:b B:b S:b E:b O:b U:b D:b X:b P:b\n" +
86: "FP0:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP1:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +
87: "FP2:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP3:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +
88: "FP4:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP5:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +
89: "FP6:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx FP7:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx").toCharArray ();
90: public static final int DRP_1 = 79;
91: public static final int DRP_2 = DRP_1 + 78;
92: public static final int DRP_3 = DRP_2 + 76;
93: public static final int DRP_4 = DRP_3 + 76;
94: public static final int DRP_5 = DRP_4 + 77;
95: public static final int DRP_6 = DRP_5 + 77;
96: public static final int DRP_7 = DRP_6 + 76;
97: public static final int DRP_8 = DRP_7 + 79;
98: public static final int DRP_9 = DRP_8 + 79;
99: public static final int DRP_10 = DRP_9 + 79;
100: public static final int DRP_END = DRP_10 + 78;
101: public static int[] DRP_FP_POS = { DRP_7 + 4, DRP_7 + 44, DRP_8 + 4, DRP_8 + 44, DRP_9 + 4, DRP_9 + 44, DRP_10 + 4, DRP_10 + 44 };
102: public static char[] drpCurrentBase;
103:
104: public static JFrame drpFrame;
105: public static ScrollTextArea drpBoard;
106: public static JTextArea drpTextArea;
107:
108:
109:
110: public static void drpInit () {
111:
112: drpFrame = null;
113:
114: }
115:
116:
117: public static void drpStart () {
118: if (RestorableFrame.rfmGetOpened (Settings.SGS_DRP_FRAME_KEY)) {
119: drpOpen ();
120: }
121: }
122:
123:
124:
125:
126: public static void drpOpen () {
127: if (drpFrame == null) {
128: drpMake ();
129: }
130: drpUpdate ();
131: drpFrame.setVisible (true);
132: XEiJ.dbgVisibleMask |= XEiJ.DBG_DRP_VISIBLE_MASK;
133: }
134:
135:
136:
137: public static void drpMake () {
138:
139:
140: drpBoard = ComponentFactory.setPreferredSize (
141: ComponentFactory.setFont (new ScrollTextArea (), ComponentFactory.MONOSPACED_FONT),
142: 500, 8 + 17 * 11);
143: drpBoard.setMargin (new Insets (2, 4, 2, 4));
144: drpTextArea = drpBoard.getTextArea ();
145: drpTextArea.setEditable (false);
146: drpSetMPU ();
147:
148:
149: drpTextArea.addMouseListener (new MouseAdapter () {
150: @Override public void mousePressed (MouseEvent me) {
151: if (XEiJ.mpuTask == null && me.isPopupTrigger ()) {
152: XEiJ.dbgShowPopup (me, drpTextArea, false);
153: }
154: }
155: @Override public void mouseReleased (MouseEvent me) {
156: if (XEiJ.mpuTask == null && me.isPopupTrigger ()) {
157: XEiJ.dbgShowPopup (me, drpTextArea, false);
158: }
159: }
160: });
161:
162:
163: drpFrame = Multilingual.mlnTitle (
164: ComponentFactory.createRestorableSubFrame (
165: Settings.SGS_DRP_FRAME_KEY,
166: "Register list",
167: null,
168: ComponentFactory.createBorderPanel (
169: drpBoard,
170: ComponentFactory.createHorizontalBox (
171: Box.createHorizontalGlue (),
172: ComponentFactory.createFlowPanel (
173: FlowLayout.RIGHT,
174: XEiJ.mpuMakeOriIllegalCheckBox (),
175: XEiJ.mpuMakeStopOnErrorCheckBox (),
176: XEiJ.mpuMakeStopAtStartCheckBox (),
177: Box.createHorizontalStrut (12),
178: XEiJ.mpuMakeBreakButton (),
179: XEiJ.mpuMakeTraceButton (),
180: XEiJ.mpuMakeTrace10Button (),
181: XEiJ.mpuMakeTrace100Button (),
182: XEiJ.mpuMakeStepButton (),
183: XEiJ.mpuMakeStep10Button (),
184: XEiJ.mpuMakeStep100Button (),
185: XEiJ.mpuMakeReturnButton (),
186: XEiJ.mpuMakeRunButton ()
187: )
188: )
189: )
190: ),
191: "ja", "レジスタリスト");
192: ComponentFactory.addListener (
193: drpFrame,
194: new WindowAdapter () {
195: @Override public void windowClosing (WindowEvent we) {
196: XEiJ.dbgVisibleMask &= ~XEiJ.DBG_DRP_VISIBLE_MASK;
197: }
198: });
199:
200: }
201:
202:
203:
204: public static void drpSetMPU () {
205: drpCurrentBase = (XEiJ.currentMPU < Model.MPU_MC68020 ? DRP_BASE_000 :
206: XEiJ.currentMPU < Model.MPU_MC68LC040 ? DRP_BASE_030 :
207: DRP_BASE_060);
208: if (drpTextArea != null) {
209: drpTextArea.setText (String.valueOf (drpCurrentBase));
210: }
211: }
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228: public static void drpUpdate () {
229: XEiJ.fmtHex8 (drpCurrentBase, 3, XEiJ.regPC);
230: XEiJ.fmtHex8 (drpCurrentBase, 16, XEiJ.regSRS != 0 ? XEiJ.mpuUSP : XEiJ.regRn[15]);
231: if (XEiJ.currentMPU < Model.MPU_MC68020) {
232: XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS != 0 ? XEiJ.regRn[15] : XEiJ.mpuISP);
233: XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR);
234: } else if (XEiJ.currentMPU < Model.MPU_MC68LC040) {
235: XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS == 0 || XEiJ.regSRM != 0 ? XEiJ.mpuISP : XEiJ.regRn[15]);
236: XEiJ.fmtHex8 (drpCurrentBase, 42, XEiJ.regSRS == 0 || XEiJ.regSRM == 0 ? XEiJ.mpuMSP : XEiJ.regRn[15]);
237: XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRT0 | XEiJ.regSRS | XEiJ.regSRM | XEiJ.regSRI | XEiJ.regCCR);
238: } else {
239: XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS != 0 ? XEiJ.regRn[15] : XEiJ.mpuISP);
240: XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRM | XEiJ.regSRI | XEiJ.regCCR);
241: }
242: if (true) {
243: drpCurrentBase[61] = XEiJ.REG_CCRXMAP[XEiJ.regCCR];
244: drpCurrentBase[65] = XEiJ.REG_CCRNMAP[XEiJ.regCCR];
245: drpCurrentBase[69] = XEiJ.REG_CCRZMAP[XEiJ.regCCR];
246: drpCurrentBase[73] = XEiJ.REG_CCRVMAP[XEiJ.regCCR];
247: drpCurrentBase[77] = XEiJ.REG_CCRCMAP[XEiJ.regCCR];
248: } else {
249: drpCurrentBase[61] = (char) ('0' + (XEiJ.regCCR >> 4 & 1));
250: drpCurrentBase[65] = (char) ('0' + (XEiJ.regCCR >> 3 & 1));
251: drpCurrentBase[69] = (char) ('0' + (XEiJ.regCCR >> 2 & 1));
252: drpCurrentBase[73] = (char) ('0' + (XEiJ.regCCR >> 1 & 1));
253: drpCurrentBase[77] = (char) ('0' + (XEiJ.regCCR & 1));
254: }
255: drpCurrentBase[DRP_1 + 3] = XEiJ.MPU_CCCMAP[ 2 << 5 | XEiJ.regCCR];
256: drpCurrentBase[DRP_1 + 8] = XEiJ.MPU_CCCMAP[ 3 << 5 | XEiJ.regCCR];
257: drpCurrentBase[DRP_1 + 17] = XEiJ.MPU_CCCMAP[ 4 << 5 | XEiJ.regCCR];
258: drpCurrentBase[DRP_1 + 26] = XEiJ.MPU_CCCMAP[ 5 << 5 | XEiJ.regCCR];
259: drpCurrentBase[DRP_1 + 31] = XEiJ.MPU_CCCMAP[ 6 << 5 | XEiJ.regCCR];
260: drpCurrentBase[DRP_1 + 36] = XEiJ.MPU_CCCMAP[ 7 << 5 | XEiJ.regCCR];
261: drpCurrentBase[DRP_1 + 41] = XEiJ.MPU_CCCMAP[ 8 << 5 | XEiJ.regCCR];
262: drpCurrentBase[DRP_1 + 46] = XEiJ.MPU_CCCMAP[ 9 << 5 | XEiJ.regCCR];
263: drpCurrentBase[DRP_1 + 51] = XEiJ.MPU_CCCMAP[10 << 5 | XEiJ.regCCR];
264: drpCurrentBase[DRP_1 + 56] = XEiJ.MPU_CCCMAP[11 << 5 | XEiJ.regCCR];
265: drpCurrentBase[DRP_1 + 61] = XEiJ.MPU_CCCMAP[12 << 5 | XEiJ.regCCR];
266: drpCurrentBase[DRP_1 + 66] = XEiJ.MPU_CCCMAP[13 << 5 | XEiJ.regCCR];
267: drpCurrentBase[DRP_1 + 71] = XEiJ.MPU_CCCMAP[14 << 5 | XEiJ.regCCR];
268: drpCurrentBase[DRP_1 + 76] = XEiJ.MPU_CCCMAP[15 << 5 | XEiJ.regCCR];
269: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 3, XEiJ.regRn[ 0]);
270: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 12, XEiJ.regRn[ 1]);
271: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 21, XEiJ.regRn[ 2]);
272: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 30, XEiJ.regRn[ 3]);
273: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 40, XEiJ.regRn[ 4]);
274: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 49, XEiJ.regRn[ 5]);
275: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 58, XEiJ.regRn[ 6]);
276: XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 67, XEiJ.regRn[ 7]);
277: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 3, XEiJ.regRn[ 8]);
278: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 12, XEiJ.regRn[ 9]);
279: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 21, XEiJ.regRn[10]);
280: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 30, XEiJ.regRn[11]);
281: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 40, XEiJ.regRn[12]);
282: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 49, XEiJ.regRn[13]);
283: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 58, XEiJ.regRn[14]);
284: XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 67, XEiJ.regRn[15]);
285: if (Model.MPU_MC68020 <= XEiJ.currentMPU) {
286: drpCurrentBase[DRP_4 + 4] = (char) ('0' + XEiJ.mpuSFC);
287: drpCurrentBase[DRP_5 + 4] = (char) ('0' + XEiJ.mpuDFC);
288: XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 12, XEiJ.mpuVBR);
289: XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 26, XEiJ.mpuCACR);
290: if (Model.MPU_MC68LC040 <= XEiJ.currentMPU) {
291: XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 40, MC68060.mmuTCR);
292: XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 54, MC68060.mmuURP);
293: XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 68, MC68060.mmuSRP);
294: XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 12, MC68060.mmuITT0);
295: XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 26, MC68060.mmuITT1);
296: XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 40, MC68060.mmuDTT0);
297: XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 54, MC68060.mmuDTT1);
298: XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 68, XEiJ.mpuPCR);
299: }
300: XEiJ.fmtHex8 (drpCurrentBase, DRP_6 + 5, XEiJ.fpuBox.epbFpcr);
301: XEiJ.fmtHex8 (drpCurrentBase, DRP_6 + 19, XEiJ.fpuBox.epbFpsr);
302: drpCurrentBase[DRP_6 + 30] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 27 & 1));
303: drpCurrentBase[DRP_6 + 34] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 26 & 1));
304: drpCurrentBase[DRP_6 + 38] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 25 & 1));
305: drpCurrentBase[DRP_6 + 42] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 24 & 1));
306: drpCurrentBase[DRP_6 + 46] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 15 & 1));
307: drpCurrentBase[DRP_6 + 50] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 14 & 1));
308: drpCurrentBase[DRP_6 + 54] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 13 & 1));
309: drpCurrentBase[DRP_6 + 58] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 12 & 1));
310: drpCurrentBase[DRP_6 + 62] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 11 & 1));
311: drpCurrentBase[DRP_6 + 66] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 10 & 1));
312: drpCurrentBase[DRP_6 + 70] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 9 & 1));
313: drpCurrentBase[DRP_6 + 74] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 8 & 1));
314: for (int n = 0; n <= 7; n++) {
315: int pos = DRP_FP_POS[n];
316: String s = XEiJ.fpuFPn[n].toString ();
317: int i = 0;
318: int l = s.length ();
319: for (; i < 34 && i < l; i++) {
320: drpCurrentBase[pos + i] = s.charAt (i);
321: }
322: for (; i < 34; i++) {
323: drpCurrentBase[pos + i] = ' ';
324: }
325: }
326: }
327:
328: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, 3, DRP_1 - 1 - 3), 3, DRP_1 - 1);
329: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_1 + 3, DRP_2 - 1 - (DRP_1 + 3)), DRP_1 + 3, DRP_2 - 1);
330: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_2 + 3, DRP_3 - 1 - (DRP_2 + 3)), DRP_2 + 3, DRP_3 - 1);
331: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_3 + 3, DRP_4 - 1 - (DRP_3 + 3)), DRP_3 + 3, DRP_4 - 1);
332: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_4 + 4, DRP_5 - 1 - (DRP_4 + 4)), DRP_4 + 4, DRP_5 - 1);
333: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_5 + 4, DRP_6 - 1 - (DRP_5 + 4)), DRP_5 + 4, DRP_6 - 1);
334: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_6 + 5, DRP_7 - 1 - (DRP_6 + 5)), DRP_6 + 5, DRP_7 - 1);
335: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_7 + 4, DRP_8 - 1 - (DRP_7 + 4)), DRP_7 + 4, DRP_8 - 1);
336: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_8 + 4, DRP_9 - 1 - (DRP_8 + 4)), DRP_8 + 4, DRP_9 - 1);
337: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_9 + 4, DRP_10 - 1 - (DRP_9 + 4)), DRP_9 + 4, DRP_10 - 1);
338: drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_10 + 4, DRP_END - (DRP_10 + 4)), DRP_10 + 4, DRP_END);
339: }
340:
341: }
342:
343:
344: