RegisterList.java
     1: //========================================================================================
     2: //  RegisterList.java
     3: //    en:Register list
     4: //    ja:レジスタリスト
     5: //  Copyright (C) 2003-2023 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:     drpFrame.setVisible (true);
   132:     XEiJ.dbgVisibleMask |= XEiJ.DBG_DRP_VISIBLE_MASK;
   133:   }  //drpOpen()
   134: 
   135:   //drpMake ()
   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));  //グリッドを更新させるためJTextAreaではなくScrollTextAreaに設定する必要がある
   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 (),  //ORI.B #$00,D0を不当命令とみなすチェックボックス
   175:               XEiJ.mpuMakeStopOnErrorCheckBox (),  //エラーで停止するチェックボックス
   176:               XEiJ.mpuMakeStopAtStartCheckBox (),  //実行開始位置で停止するチェックボックス
   177:               Box.createHorizontalStrut (12),
   178:               XEiJ.mpuMakeBreakButton (),  //停止ボタン
   179:               XEiJ.mpuMakeTraceButton (),  //トレース実行ボタン
   180:               XEiJ.mpuMakeTrace10Button (),  //トレース10回ボタン
   181:               XEiJ.mpuMakeTrace100Button (),  //トレース100回ボタン
   182:               XEiJ.mpuMakeStepButton (),  //ステップ実行ボタン
   183:               XEiJ.mpuMakeStep10Button (),  //ステップ10回ボタン
   184:               XEiJ.mpuMakeStep100Button (),  //ステップ100回ボタン
   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:   }  //drpMake()
   201: 
   202:   //drpSetMPU ()
   203:   //  レジスタウインドウのMPUを設定する
   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:   }  //drpSetMPU()
   212: 
   213:   //drpUpdate ()
   214:   //  レジスタウインドウを更新する
   215:   //            1111111111222222222233333333334444444444555555555566666666667777777777
   216:   //  01234567890123456789012345678901234567890123456789012345678901234567890123456789
   217:   //  PC:xxxxxxxx USP:xxxxxxxx ISP:xxxxxxxx MSP:xxxxxxxx SR:xxxx X:b N:b Z:b V:b C:b
   218:   //  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+
   219:   //  D  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx     DRP_2+
   220:   //  A  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx  xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx     DRP_3+
   221:   //  SFC:x   VBR:xxxxxxxx CACR:xxxxxxxx  TCR:xxxxxxxx  URP:xxxxxxxx  SRP:xxxxxxxx    DRP_4+
   222:   //  DFC:x  ITT0:xxxxxxxx ITT1:xxxxxxxx DTT0:xxxxxxxx DTT1:xxxxxxxx  PCR:xxxxxxxx    DRP_5+
   223:   //  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+
   224:   //  FP0:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP1:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_7+
   225:   //  FP2:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP3:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_8+
   226:   //  FP4:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP5:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_9+
   227:   //  FP6:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  FP7:+x.xxxxxxxxxxxxxxxxxxxxxxxxe+xxxxx  DRP_10+
   228:   public static void drpUpdate () {
   229:     XEiJ.fmtHex8 (drpCurrentBase,  3, XEiJ.regPC);  //PC
   230:     XEiJ.fmtHex8 (drpCurrentBase, 16, XEiJ.regSRS != 0 ? XEiJ.mpuUSP : XEiJ.regRn[15]);  //USP
   231:     if (XEiJ.currentMPU < Model.MPU_MC68020) {  //000
   232:       XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS != 0 ? XEiJ.regRn[15] : XEiJ.mpuISP);  //SSP
   233:       XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRI | XEiJ.regCCR);  //SR
   234:     } else if (XEiJ.currentMPU < Model.MPU_MC68LC040) {  //030
   235:       XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS == 0 || XEiJ.regSRM != 0 ? XEiJ.mpuISP : XEiJ.regRn[15]);  //ISP
   236:       XEiJ.fmtHex8 (drpCurrentBase, 42, XEiJ.regSRS == 0 || XEiJ.regSRM == 0 ? XEiJ.mpuMSP : XEiJ.regRn[15]);  //MSP
   237:       XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRT0 | XEiJ.regSRS | XEiJ.regSRM | XEiJ.regSRI | XEiJ.regCCR);  //SR
   238:     } else {  //060
   239:       XEiJ.fmtHex8 (drpCurrentBase, 29, XEiJ.regSRS != 0 ? XEiJ.regRn[15] : XEiJ.mpuISP);  //SSP
   240:       XEiJ.fmtHex4 (drpCurrentBase, 54, XEiJ.regSRT1 | XEiJ.regSRS | XEiJ.regSRM | XEiJ.regSRI | XEiJ.regCCR);  //SR
   241:     }
   242:     if (true) {
   243:       drpCurrentBase[61] = XEiJ.REG_CCRXMAP[XEiJ.regCCR];  //X
   244:       drpCurrentBase[65] = XEiJ.REG_CCRNMAP[XEiJ.regCCR];  //N
   245:       drpCurrentBase[69] = XEiJ.REG_CCRZMAP[XEiJ.regCCR];  //Z
   246:       drpCurrentBase[73] = XEiJ.REG_CCRVMAP[XEiJ.regCCR];  //V
   247:       drpCurrentBase[77] = XEiJ.REG_CCRCMAP[XEiJ.regCCR];  //C
   248:     } else {
   249:       drpCurrentBase[61] = (char) ('0' + (XEiJ.regCCR >> 4 & 1));  //X
   250:       drpCurrentBase[65] = (char) ('0' + (XEiJ.regCCR >> 3 & 1));  //N
   251:       drpCurrentBase[69] = (char) ('0' + (XEiJ.regCCR >> 2 & 1));  //Z
   252:       drpCurrentBase[73] = (char) ('0' + (XEiJ.regCCR >> 1 & 1));  //V
   253:       drpCurrentBase[77] = (char) ('0' + (XEiJ.regCCR      & 1));  //C
   254:     }
   255:     drpCurrentBase[DRP_1 +  3] = XEiJ.MPU_CCCMAP[ 2 << 5 | XEiJ.regCCR];  //HI
   256:     drpCurrentBase[DRP_1 +  8] = XEiJ.MPU_CCCMAP[ 3 << 5 | XEiJ.regCCR];  //LS
   257:     drpCurrentBase[DRP_1 + 17] = XEiJ.MPU_CCCMAP[ 4 << 5 | XEiJ.regCCR];  //CC(HS)
   258:     drpCurrentBase[DRP_1 + 26] = XEiJ.MPU_CCCMAP[ 5 << 5 | XEiJ.regCCR];  //CS(LO)
   259:     drpCurrentBase[DRP_1 + 31] = XEiJ.MPU_CCCMAP[ 6 << 5 | XEiJ.regCCR];  //NE
   260:     drpCurrentBase[DRP_1 + 36] = XEiJ.MPU_CCCMAP[ 7 << 5 | XEiJ.regCCR];  //EQ
   261:     drpCurrentBase[DRP_1 + 41] = XEiJ.MPU_CCCMAP[ 8 << 5 | XEiJ.regCCR];  //VC
   262:     drpCurrentBase[DRP_1 + 46] = XEiJ.MPU_CCCMAP[ 9 << 5 | XEiJ.regCCR];  //VS
   263:     drpCurrentBase[DRP_1 + 51] = XEiJ.MPU_CCCMAP[10 << 5 | XEiJ.regCCR];  //PL
   264:     drpCurrentBase[DRP_1 + 56] = XEiJ.MPU_CCCMAP[11 << 5 | XEiJ.regCCR];  //MI
   265:     drpCurrentBase[DRP_1 + 61] = XEiJ.MPU_CCCMAP[12 << 5 | XEiJ.regCCR];  //GE
   266:     drpCurrentBase[DRP_1 + 66] = XEiJ.MPU_CCCMAP[13 << 5 | XEiJ.regCCR];  //LT
   267:     drpCurrentBase[DRP_1 + 71] = XEiJ.MPU_CCCMAP[14 << 5 | XEiJ.regCCR];  //GT
   268:     drpCurrentBase[DRP_1 + 76] = XEiJ.MPU_CCCMAP[15 << 5 | XEiJ.regCCR];  //LE
   269:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 +  3, XEiJ.regRn[ 0]);  //D0
   270:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 12, XEiJ.regRn[ 1]);  //D1
   271:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 21, XEiJ.regRn[ 2]);  //D2
   272:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 30, XEiJ.regRn[ 3]);  //D3
   273:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 40, XEiJ.regRn[ 4]);  //D4
   274:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 49, XEiJ.regRn[ 5]);  //D5
   275:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 58, XEiJ.regRn[ 6]);  //D6
   276:     XEiJ.fmtHex8 (drpCurrentBase, DRP_2 + 67, XEiJ.regRn[ 7]);  //D7
   277:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 +  3, XEiJ.regRn[ 8]);  //A0
   278:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 12, XEiJ.regRn[ 9]);  //A1
   279:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 21, XEiJ.regRn[10]);  //A2
   280:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 30, XEiJ.regRn[11]);  //A3
   281:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 40, XEiJ.regRn[12]);  //A4
   282:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 49, XEiJ.regRn[13]);  //A5
   283:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 58, XEiJ.regRn[14]);  //A6
   284:     XEiJ.fmtHex8 (drpCurrentBase, DRP_3 + 67, XEiJ.regRn[15]);  //A7
   285:     if (Model.MPU_MC68020 <= XEiJ.currentMPU) {
   286:       drpCurrentBase[DRP_4 + 4] = (char) ('0' + XEiJ.mpuSFC);  //SFC
   287:       drpCurrentBase[DRP_5 + 4] = (char) ('0' + XEiJ.mpuDFC);  //DFC
   288:       XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 12, XEiJ.mpuVBR);  //VBR
   289:       XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 26, XEiJ.mpuCACR);  //CACR
   290:       if (Model.MPU_MC68LC040 <= XEiJ.currentMPU) {
   291:         XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 40, MC68060.mmuTCR);  //TCR
   292:         XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 54, MC68060.mmuURP);  //URP
   293:         XEiJ.fmtHex8 (drpCurrentBase, DRP_4 + 68, MC68060.mmuSRP);  //SRP
   294:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 12, MC68060.mmuITT0);  //ITT0
   295:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 26, MC68060.mmuITT1);  //ITT1
   296:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 40, MC68060.mmuDTT0);  //DTT0
   297:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 54, MC68060.mmuDTT1);  //DTT1
   298:         XEiJ.fmtHex8 (drpCurrentBase, DRP_5 + 68, XEiJ.mpuPCR);  //PCR
   299:       }
   300:       XEiJ.fmtHex8 (drpCurrentBase, DRP_6 +  5, XEiJ.fpuBox.epbFpcr);  //FPCR
   301:       XEiJ.fmtHex8 (drpCurrentBase, DRP_6 + 19, XEiJ.fpuBox.epbFpsr);  //FPSR
   302:       drpCurrentBase[DRP_6 + 30] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 27 & 1));  //FPSR M
   303:       drpCurrentBase[DRP_6 + 34] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 26 & 1));  //FPSR Z
   304:       drpCurrentBase[DRP_6 + 38] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 25 & 1));  //FPSR I
   305:       drpCurrentBase[DRP_6 + 42] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 24 & 1));  //FPSR N
   306:       drpCurrentBase[DRP_6 + 46] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 15 & 1));  //FPSR BSUN
   307:       drpCurrentBase[DRP_6 + 50] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 14 & 1));  //FPSR SNAN
   308:       drpCurrentBase[DRP_6 + 54] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 13 & 1));  //FPSR OPERR
   309:       drpCurrentBase[DRP_6 + 58] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 12 & 1));  //FPSR OVFL
   310:       drpCurrentBase[DRP_6 + 62] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 11 & 1));  //FPSR UNFL
   311:       drpCurrentBase[DRP_6 + 66] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >> 10 & 1));  //FPSR DZ
   312:       drpCurrentBase[DRP_6 + 70] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >>  9 & 1));  //FPSR INEX2
   313:       drpCurrentBase[DRP_6 + 74] = (char) ('0' + (XEiJ.fpuBox.epbFpsr >>  8 & 1));  //FPSR INEX1
   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:     //複数回に分けても改行を含まないreplaceRangeが一番速い
   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:   }  //drpUpdate()
   340: 
   341: }  //class RegisterList
   342: 
   343: 
   344: