RegisterList.java
     1: //========================================================================================
     2: //  RegisterList.java
     3: //    en:Register list
     4: //    ja:レジスタリスト
     5: //  Copyright (C) 2003-2024 Makoto Kamada
     6: //
     7: //  This file is part of the XEiJ (X68000 Emulator in Java).
     8: //  You can use, modify and redistribute the XEiJ if the conditions are met.
     9: //  Read the XEiJ License for more details.
    10: //  https://stdkmd.net/xeij/
    11: //========================================================================================
    12: 
    13: //----------------------------------------------------------------------------------------
    14: //  実機用のデバッガは030モードのレジスタの表示方法が統一されていない
    15: //              11111111112222222222333333333344444444445555555555666666666677777777778
    16: //    012345678901234567890123456789012345678901234567890123456789012345678901234567890
    17: //  DB.X v3.00 (000モード)
    18: //    PC:xxxxxxxx USP:xxxxxxxx SSP:xxxxxxxx SR:xxxx X:b N:b Z:b V:b C:b
    19: //    HI:b LS:b CC:b CS:b NE:b EQ:b VC:b VS:b PL:b MI:b GE:b LT:b GT:b LE:b HS:b LO:b
    20: //    D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    21: //    A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    22: //  DB.X v3.00 (030モード)
    23: //    PC:xxxxxxxx USP:xxxxxxxx MSP:xxxxxxxx ISP:xxxxxxxx SR:xxxx
    24: //    X:b N:b Z:b V:b C:b SFC:xx DFC:xx CACR:xxxxxxxx CAAR:xxxxxxxx VBR:xxxxxxxx
    25: //    HI:b LS:b CC:b CS:b NE:b EQ:b VC:b VS:b PL:b MI:b GE:b LT:b GT:b LE:b HS:b LO:b
    26: //    D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    27: //    A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    28: //  SCD.X v3.00 (000モード)
    29: //    PC=xxxxxxxx USP=xxxxxxxx SSP=xxxxxxxx SR=xxxx X:b  N:b  Z:b  V:b  C:b
    30: //    D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    31: //    A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    32: //  SCD.X v3.00 (030モード)
    33: //    PC=xxxxxxxx USP=xxxxxxxx ISP=xxxxxxxx MSP=xxxxxxxx SR=xxxx X:b  N:b  Z:b  V:b  C:b
    34: //    SFC=x DFC=x VBR=xxxxxxxx CACR=xxxxxxxx CAAR=xxxxxxxx
    35: //    D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    36: //    A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx
    37: //----------------------------------------------------------------------------------------
    38: 
    39: package xeij;
    40: 
    41: import java.awt.*;  //BasicStroke,BorderLayout,BoxLayout,Color,Component,Container,Cursor,Desktop,Dimension,Font,FlowLayout,Frame,Graphics,Graphics2D,GraphicsDevice,GraphicsEnvironment,GridLayout,Image,Insets,Paint,Point,Rectangle,RenderingHints,Robot,Shape,Stroke,TexturePaint,Toolkit
    42: import java.awt.event.*;  //ActionEvent,ActionListener,ComponentAdapter,ComponentEvent,ComponentListener,FocusAdapter,FocusEvent,FocusListener,InputEvent,KeyAdapter,KeyEvent,KeyListener,MouseAdapter,MouseEvent,MouseListener,MouseMotionAdapter,MouseWheelEvent,WindowAdapter,WindowEvent,WindowListener,WindowStateListener
    43: import java.lang.*;  //Boolean,Character,Class,Comparable,Double,Exception,Float,IllegalArgumentException,Integer,Long,Math,Number,Object,Runnable,SecurityException,String,StringBuilder,System
    44: import javax.swing.*;  //AbstractSpinnerModel,Box,ButtonGroup,DefaultListModel,ImageIcon,JApplet,JButton,JCheckBox,JCheckBoxMenuItem,JDialog,JFileChooser,JFrame,JLabel,JList,JMenu,JMenuBar,JMenuItem,JPanel,JRadioButton,JScrollPane,JSpinner,JTextArea,JTextField,JTextPane,JViewport,ScrollPaneConstants,SpinnerListModel,SpinnerNumberModel,SwingConstants,SwingUtilities,UIManager,UIDefaults,UnsupportedLookAndFeelException
    45: 
    46: public class RegisterList {
    47: 
    48:   public static final char[] DRP_BASE_000 = (
    49:     //         11111111112222222222333333333344444444445555555555666666666677777777778
    50:     //12345678901234567890123456789012345678901234567890123456789012345678901234567890
    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" +  //DRP_1+
    53:     "D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +  //DRP_2+
    54:     "A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +  //DRP_3+
    55:     "                                                                            \n" +  //DRP_4+
    56:     "                                                                            \n" +  //DRP_5+
    57:     "                                                                           \n" +  //DRP_6 +
    58:     "                                                                              \n" +  //DRP_7 +
    59:     "                                                                              \n" +  //DRP_8 +
    60:     "                                                                              \n" +  //DRP_9 +
    61:     "                                                                              ").toCharArray ();  //DRP_10+
    62:   public static final char[] DRP_BASE_030 = (
    63:     //         11111111112222222222333333333344444444445555555555666666666677777777778
    64:     //12345678901234567890123456789012345678901234567890123456789012345678901234567890
    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" +  //DRP_1+
    67:     "D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +  //DRP_2+
    68:     "A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +  //DRP_3+
    69:     "SFC:x   VBR:xxxxxxxx CACR:xxxxxxxx                                          \n" +  //DRP_4+
    70:     "DFC:x                                                                       \n" +  //DRP_5+
    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" +  //DRP_6 +
    72:     "FP0:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP1:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +  //DRP_7 +
    73:     "FP2:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP3:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +  //DRP_8 +
    74:     "FP4:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP5:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +  //DRP_9 +
    75:     "FP6:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP7:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx").toCharArray ();  //DRP_10+
    76:   public static final char[] DRP_BASE_060 = (
    77:     //         11111111112222222222333333333344444444445555555555666666666677777777778
    78:     //12345678901234567890123456789012345678901234567890123456789012345678901234567890
    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" +  //DRP_1+
    81:     "D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +  //DRP_2+
    82:     "A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx\n" +  //DRP_3+
    83:     "SFC:x   VBR:xxxxxxxx CACR:xxxxxxxx  TCR:xxxxxxxx  URP:xxxxxxxx  SRP:xxxxxxxx\n" +  //DRP_4+
    84:     "DFC:x  ITT0:xxxxxxxx ITT1:xxxxxxxx DTT0:xxxxxxxx DTT1:xxxxxxxx  PCR:xxxxxxxx\n" +  //DRP_5+
    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" +  //DRP_6 +
    86:     "FP0:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP1:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +  //DRP_7 +
    87:     "FP2:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP3:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +  //DRP_8 +
    88:     "FP4:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP5:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx\n" +  //DRP_9 +
    89:     "FP6:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP7:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx").toCharArray ();  //DRP_10+
    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:   //drpInit ()
   109:   //  初期化
   110:   public static void drpInit () {
   111: 
   112:     drpFrame = null;
   113: 
   114:   }  //drpInit()
   115: 
   116:   //drpStart ()
   117:   public static void drpStart () {
   118:     if (RestorableFrame.rfmGetOpened (Settings.SGS_DRP_FRAME_KEY)) {
   119:       drpOpen ();
   120:     }
   121:   }  //drpStart()
   122: 
   123:   //drpOpen ()
   124:   //  レジスタウインドウを開く
   125:   //  既に開いているときは手前に持ってくる
   126:   public static void drpOpen () {
   127:     if (drpFrame == null) {
   128:       drpMake ();
   129:     }
   130:     drpUpdate ();
   131:     XEiJ.pnlExitFullScreen (false);
   132:     drpFrame.setVisible (true);
   133:     XEiJ.dbgVisibleMask |= XEiJ.DBG_DRP_VISIBLE_MASK;
   134:   }  //drpOpen()
   135: 
   136:   //drpMake ()
   137:   //  レジスタウインドウを作る
   138:   public static void drpMake () {
   139: 
   140:     //スクロールテキストエリア
   141:     drpBoard = ComponentFactory.setPreferredSize (
   142:       ComponentFactory.setFont (new ScrollTextArea (), LnF.lnfMonospacedFont),
   143:       500, 8 + 17 * 11);
   144:     drpBoard.setMargin (new Insets (2, 4, 2, 4));  //グリッドを更新させるためJTextAreaではなくScrollTextAreaに設定する必要がある
   145:     drpTextArea = drpBoard.getTextArea ();
   146:     drpTextArea.setEditable (false);
   147:     drpSetMPU ();
   148: 
   149:     //テキストエリアのマウスリスナー
   150:     drpTextArea.addMouseListener (new MouseAdapter () {
   151:       @Override public void mousePressed (MouseEvent me) {
   152:         if (XEiJ.mpuTask == null && me.isPopupTrigger ()) {
   153:           XEiJ.dbgShowPopup (me, drpTextArea, false);
   154:         }
   155:       }
   156:       @Override public void mouseReleased (MouseEvent me) {
   157:         if (XEiJ.mpuTask == null && me.isPopupTrigger ()) {
   158:           XEiJ.dbgShowPopup (me, drpTextArea, false);
   159:         }
   160:       }
   161:     });
   162: 
   163:     //ウインドウ
   164:     drpFrame = Multilingual.mlnTitle (
   165:       ComponentFactory.createRestorableSubFrame (
   166:         Settings.SGS_DRP_FRAME_KEY,
   167:         "Register list",
   168:         null,
   169:         ComponentFactory.createBorderPanel (
   170:           drpBoard,
   171:           ComponentFactory.createHorizontalBox (
   172:             Box.createHorizontalGlue (),
   173:             ComponentFactory.createFlowPanel (
   174:               FlowLayout.RIGHT,
   175:               XEiJ.mpuMakeOriIllegalCheckBox (),  //ORI.B #$00,D0を不当命令とみなすチェックボックス
   176:               XEiJ.mpuMakeStopOnErrorCheckBox (),  //エラーで停止するチェックボックス
   177:               XEiJ.mpuMakeStopAtStartCheckBox (),  //実行開始位置で停止するチェックボックス
   178:               Box.createHorizontalStrut (12),
   179:               XEiJ.mpuMakeBreakButton (),  //停止ボタン
   180:               XEiJ.mpuMakeTraceButton (),  //トレース実行ボタン
   181:               XEiJ.mpuMakeTrace10Button (),  //トレース10回ボタン
   182:               XEiJ.mpuMakeTrace100Button (),  //トレース100回ボタン
   183:               XEiJ.mpuMakeStepButton (),  //ステップ実行ボタン
   184:               XEiJ.mpuMakeStep10Button (),  //ステップ10回ボタン
   185:               XEiJ.mpuMakeStep100Button (),  //ステップ100回ボタン
   186:               XEiJ.mpuMakeReturnButton (),  //ステップアンティルリターンボタン
   187:               XEiJ.mpuMakeRunButton ()  //実行ボタン
   188:               )
   189:             )
   190:           )
   191:         ),
   192:       "ja", "レジスタリスト");
   193:     ComponentFactory.addListener (
   194:       drpFrame,
   195:       new WindowAdapter () {
   196:         @Override public void windowClosing (WindowEvent we) {
   197:           XEiJ.dbgVisibleMask &= ~XEiJ.DBG_DRP_VISIBLE_MASK;
   198:         }
   199:       });
   200: 
   201:   }  //drpMake()
   202: 
   203:   //drpSetMPU ()
   204:   //  レジスタウインドウのMPUを設定する
   205:   public static void drpSetMPU () {
   206:     drpCurrentBase = (XEiJ.currentMPU < Model.MPU_MC68020 ? DRP_BASE_000 :
   207:                       XEiJ.currentMPU < Model.MPU_MC68LC040 ? DRP_BASE_030 :
   208:                       DRP_BASE_060);
   209:     if (drpTextArea != null) {
   210:       drpTextArea.setText (String.valueOf (drpCurrentBase));
   211:     }
   212:   }  //drpSetMPU()
   213: 
   214:   //drpUpdate ()
   215:   //  レジスタウインドウを更新する
   216:   //            1111111111222222222233333333334444444444555555555566666666667777777777
   217:   //  01234567890123456789012345678901234567890123456789012345678901234567890123456789
   218:   //  PC:xxxxxxxx USP:xxxxxxxx ISP:xxxxxxxx MSP:xxxxxxxx SR:xxxx X:b N:b Z:b V:b C:b
   219:   //  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   DRP_1+
   220:   //  D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx     DRP_2+
   221:   //  A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx     DRP_3+
   222:   //  SFC:x   VBR:xxxxxxxx CACR:xxxxxxxx  TCR:xxxxxxxx  URP:xxxxxxxx  SRP:xxxxxxxx    DRP_4+
   223:   //  DFC:x  ITT0:xxxxxxxx ITT1:xxxxxxxx DTT0:xxxxxxxx DTT1:xxxxxxxx  PCR:xxxxxxxx    DRP_5+
   224:   //  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     DRP_6+
   225:   //  FP0:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP1:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_7+
   226:   //  FP2:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP3:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_8+
   227:   //  FP4:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP5:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_9+
   228:   //  FP6:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP7:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_10+
   229:   public static void drpUpdate () {
   230:     XEiJ.fmtHex8 (drpCurrentBase,  3, XEiJ.regPC);  //PC
   231:     XEiJ.fmtHex8 (drpCurrentBase, 16, XEiJ.regSRS != 0 ? XEiJ.mpuUSP : XEiJ.regRn[15]);  //USP
   232:     if (XEiJ.currentMPU < Model.MPU_MC68020) {  //000
   233:       XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS != 0 ? XEiJ.regRn[15] : XEiJ.mpuISP);  //SSP
   234:       XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR);  //SR
   235:     } else if (XEiJ.currentMPU < Model.MPU_MC68LC040) {  //030
   236:       XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS == 0 || XEiJ.regSRM != 0 ? XEiJ.mpuISP : XEiJ.regRn[15]);  //ISP
   237:       XEiJ.fmtHex8 (drpCurrentBase, 42, XEiJ.regSRS == 0 || XEiJ.regSRM == 0 ? XEiJ.mpuMSP : XEiJ.regRn[15]);  //MSP
   238:       XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRT0 | XEiJ.regSRS | XEiJ.regSRM | XEiJ.regSRI | XEiJ.regCCR);  //SR
   239:     } else {  //060
   240:       XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS != 0 ? XEiJ.regRn[15] : XEiJ.mpuISP);  //SSP
   241:       XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRM | XEiJ.regSRI | XEiJ.regCCR);  //SR
   242:     }
   243:     if (true) {
   244:       drpCurrentBase[61] = XEiJ.REG_CCRXMAP[XEiJ.regCCR];  //X
   245:       drpCurrentBase[65] = XEiJ.REG_CCRNMAP[XEiJ.regCCR];  //N
   246:       drpCurrentBase[69] = XEiJ.REG_CCRZMAP[XEiJ.regCCR];  //Z
   247:       drpCurrentBase[73] = XEiJ.REG_CCRVMAP[XEiJ.regCCR];  //V
   248:       drpCurrentBase[77] = XEiJ.REG_CCRCMAP[XEiJ.regCCR];  //C
   249:     } else {
   250:       drpCurrentBase[61] = (char) ('0' + (XEiJ.regCCR >> 4 & 1));  //X
   251:       drpCurrentBase[65] = (char) ('0' + (XEiJ.regCCR >> 3 & 1));  //N
   252:       drpCurrentBase[69] = (char) ('0' + (XEiJ.regCCR >> 2 & 1));  //Z
   253:       drpCurrentBase[73] = (char) ('0' + (XEiJ.regCCR >> 1 & 1));  //V
   254:       drpCurrentBase[77] = (char) ('0' + (XEiJ.regCCR      & 1));  //C
   255:     }
   256:     drpCurrentBase[DRP_1 +  3] = XEiJ.MPU_CCCMAP[ 2 << 5 | XEiJ.regCCR];  //HI
   257:     drpCurrentBase[DRP_1 +  8] = XEiJ.MPU_CCCMAP[ 3 << 5 | XEiJ.regCCR];  //LS
   258:     drpCurrentBase[DRP_1 + 17] = XEiJ.MPU_CCCMAP[ 4 << 5 | XEiJ.regCCR];  //CC(HS)
   259:     drpCurrentBase[DRP_1 + 26] = XEiJ.MPU_CCCMAP[ 5 << 5 | XEiJ.regCCR];  //CS(LO)
   260:     drpCurrentBase[DRP_1 + 31] = XEiJ.MPU_CCCMAP[ 6 << 5 | XEiJ.regCCR];  //NE
   261:     drpCurrentBase[DRP_1 + 36] = XEiJ.MPU_CCCMAP[ 7 << 5 | XEiJ.regCCR];  //EQ
   262:     drpCurrentBase[DRP_1 + 41] = XEiJ.MPU_CCCMAP[ 8 << 5 | XEiJ.regCCR];  //VC
   263:     drpCurrentBase[DRP_1 + 46] = XEiJ.MPU_CCCMAP[ 9 << 5 | XEiJ.regCCR];  //VS
   264:     drpCurrentBase[DRP_1 + 51] = XEiJ.MPU_CCCMAP[10 << 5 | XEiJ.regCCR];  //PL
   265:     drpCurrentBase[DRP_1 + 56] = XEiJ.MPU_CCCMAP[11 << 5 | XEiJ.regCCR];  //MI
   266:     drpCurrentBase[DRP_1 + 61] = XEiJ.MPU_CCCMAP[12 << 5 | XEiJ.regCCR];  //GE
   267:     drpCurrentBase[DRP_1 + 66] = XEiJ.MPU_CCCMAP[13 << 5 | XEiJ.regCCR];  //LT
   268:     drpCurrentBase[DRP_1 + 71] = XEiJ.MPU_CCCMAP[14 << 5 | XEiJ.regCCR];  //GT
   269:     drpCurrentBase[DRP_1 + 76] = XEiJ.MPU_CCCMAP[15 << 5 | XEiJ.regCCR];  //LE
   270:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 +  3, XEiJ.regRn[ 0]);  //D0
   271:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 12, XEiJ.regRn[ 1]);  //D1
   272:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 21, XEiJ.regRn[ 2]);  //D2
   273:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 30, XEiJ.regRn[ 3]);  //D3
   274:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 40, XEiJ.regRn[ 4]);  //D4
   275:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 49, XEiJ.regRn[ 5]);  //D5
   276:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 58, XEiJ.regRn[ 6]);  //D6
   277:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 67, XEiJ.regRn[ 7]);  //D7
   278:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 +  3, XEiJ.regRn[ 8]);  //A0
   279:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 12, XEiJ.regRn[ 9]);  //A1
   280:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 21, XEiJ.regRn[10]);  //A2
   281:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 30, XEiJ.regRn[11]);  //A3
   282:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 40, XEiJ.regRn[12]);  //A4
   283:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 49, XEiJ.regRn[13]);  //A5
   284:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 58, XEiJ.regRn[14]);  //A6
   285:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 67, XEiJ.regRn[15]);  //A7
   286:     if (Model.MPU_MC68020 <= XEiJ.currentMPU) {
   287:       drpCurrentBase[DRP_4 + 4] = (char) ('0' + XEiJ.mpuSFC);  //SFC
   288:       drpCurrentBase[DRP_5 + 4] = (char) ('0' + XEiJ.mpuDFC);  //DFC
   289:       XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 12, XEiJ.mpuVBR);  //VBR
   290:       XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 26, XEiJ.mpuCACR);  //CACR
   291:       if (Model.MPU_MC68LC040 <= XEiJ.currentMPU) {
   292:         XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 40, MC68060.mmuTCR);  //TCR
   293:         XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 54, MC68060.mmuURP);  //URP
   294:         XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 68, MC68060.mmuSRP);  //SRP
   295:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 12, MC68060.mmuITT0);  //ITT0
   296:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 26, MC68060.mmuITT1);  //ITT1
   297:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 40, MC68060.mmuDTT0);  //DTT0
   298:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 54, MC68060.mmuDTT1);  //DTT1
   299:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 68, XEiJ.mpuPCR);  //PCR
   300:       }
   301:       XEiJ.fmtHex8 (drpCurrentBase, DRP_6 +  5, XEiJ.fpuBox.epbFpcr);  //FPCR
   302:       XEiJ.fmtHex8 (drpCurrentBase, DRP_6 + 19, XEiJ.fpuBox.epbFpsr);  //FPSR
   303:       drpCurrentBase[DRP_6 + 30] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 27 & 1));  //FPSR M
   304:       drpCurrentBase[DRP_6 + 34] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 26 & 1));  //FPSR Z
   305:       drpCurrentBase[DRP_6 + 38] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 25 & 1));  //FPSR I
   306:       drpCurrentBase[DRP_6 + 42] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 24 & 1));  //FPSR N
   307:       drpCurrentBase[DRP_6 + 46] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 15 & 1));  //FPSR BSUN
   308:       drpCurrentBase[DRP_6 + 50] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 14 & 1));  //FPSR SNAN
   309:       drpCurrentBase[DRP_6 + 54] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 13 & 1));  //FPSR OPERR
   310:       drpCurrentBase[DRP_6 + 58] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 12 & 1));  //FPSR OVFL
   311:       drpCurrentBase[DRP_6 + 62] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 11 & 1));  //FPSR UNFL
   312:       drpCurrentBase[DRP_6 + 66] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 10 & 1));  //FPSR DZ
   313:       drpCurrentBase[DRP_6 + 70] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >>  9 & 1));  //FPSR INEX2
   314:       drpCurrentBase[DRP_6 + 74] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >>  8 & 1));  //FPSR INEX1
   315:       for (int n = 0; n <= 7; n++) {
   316:         int pos = DRP_FP_POS[n];
   317:         String s = XEiJ.fpuFPn[n].toString ();
   318:         int i = 0;
   319:         int l = s.length ();
   320:         for (; i < 34 && i < l; i++) {
   321:           drpCurrentBase[pos + i] = s.charAt (i);
   322:         }
   323:         for (; i < 34; i++) {
   324:           drpCurrentBase[pos + i] = ' ';
   325:         }
   326:       }
   327:     }
   328:     SwingUtilities.invokeLater (new Runnable () {
   329:       public void run () {
   330:         //複数回に分けても改行を含まないreplaceRangeが一番速い
   331:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, 3, DRP_1 - 1 - 3), 3, DRP_1 - 1);
   332:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_1 + 3, DRP_2 - 1 - (DRP_1 + 3)), DRP_1 + 3, DRP_2 - 1);
   333:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_2 + 3, DRP_3 - 1 - (DRP_2 + 3)), DRP_2 + 3, DRP_3 - 1);
   334:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_3 + 3, DRP_4 - 1 - (DRP_3 + 3)), DRP_3 + 3, DRP_4 - 1);
   335:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_4 + 4, DRP_5 - 1 - (DRP_4 + 4)), DRP_4 + 4, DRP_5 - 1);
   336:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_5 + 4, DRP_6 - 1 - (DRP_5 + 4)), DRP_5 + 4, DRP_6 - 1);
   337:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_6 + 5, DRP_7 - 1 - (DRP_6 + 5)), DRP_6 + 5, DRP_7 - 1);
   338:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_7 + 4, DRP_8 - 1 - (DRP_7 + 4)), DRP_7 + 4, DRP_8 - 1);
   339:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_8 + 4, DRP_9 - 1 - (DRP_8 + 4)), DRP_8 + 4, DRP_9 - 1);
   340:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_9 + 4, DRP_10 - 1 - (DRP_9 + 4)), DRP_9 + 4, DRP_10 - 1);
   341:         drpTextArea.replaceRange (String.valueOf (drpCurrentBase, DRP_10 + 4, DRP_END - (DRP_10 + 4)), DRP_10 + 4, DRP_END);
   342:       }
   343:     });
   344:   }  //drpUpdate()
   345: 
   346: }  //class RegisterList
   347: 
   348: 
   349: