SPC.java
     1: //========================================================================================
     2: //  SPC.java
     3: //    en:SCSI protocol controller
     4: //    ja:SCSIプロトコルコントローラ
     5: //  Copyright (C) 2003-2017 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: //  http://stdkmd.com/xeij/
    11: //========================================================================================
    12: 
    13: //----------------------------------------------------------------------------------------
    14: //  内蔵SCSIと拡張SCSIの兼用
    15: //  MB89352
    16: //----------------------------------------------------------------------------------------
    17: 
    18: package xeij;
    19: 
    20: 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
    21: import java.io.*;  //BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,File,FileInputStream,FileNotFoundException,FileReader,InputStream,InputStreamReader,IOException,OutputStreamWriter,RandomAccessFile
    22: import java.lang.*;  //Boolean,Character,Class,Comparable,Double,Exception,Float,IllegalArgumentException,Integer,Long,Math,Number,Object,Runnable,SecurityException,String,StringBuilder,System
    23: import java.util.*;  //ArrayList,Arrays,Calendar,GregorianCalendar,HashMap,Map,Map.Entry,Timer,TimerTask,TreeMap
    24: 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
    25: import javax.swing.event.*;  //CaretListener,ChangeEvent,ChangeListener,DocumentEvent,DocumentListener,ListSelectionListener
    26: 
    27: public class SPC {
    28: 
    29:   public static final boolean SPC_DEBUG_TRACE = false;
    30:   public static final boolean SPC_DEBUG_SCSIROM = false;
    31: 
    32:   public static final boolean SPC_REPORT_UNIMPLEMENTED_COMMAND = true;
    33: 
    34:   public static final boolean SPC_REMOVABLE_HDD = true;  //true=リムーバブル
    35: 
    36:   public static final int SPC_MAX_BYTES_PER_BLOCK = 2048;  //セクタ長の上限
    37: 
    38:   //ベースアドレス
    39:   public static final int SPC_BASE_EX = 0x00ea0000;  //拡張SCSIのSPCのベースアドレス
    40:   public static final int SPC_BASE_IN = 0x00e96020;  //内蔵SCSIのSPCのベースアドレス
    41: 
    42:   //ROM起動ハンドル
    43:   public static final int SPC_HANDLE_EX = 0x00ea0020;  //拡張SCSIのROM起動ハンドル
    44:   public static final int SPC_HANDLE_IN = 0x00fc0000;  //内蔵SCSIのROM起動ハンドル
    45: 
    46:   //フェーズ
    47:   public static final int SPC_DATA_OUT_PHASE    = 0b00000000;  //Data Out Phase。データアウトフェーズ
    48:   public static final int SPC_DATA_IN_PHASE     = 0b00000001;  //Data In Phase。データインフェーズ
    49:   public static final int SPC_COMMAND_PHASE     = 0b00000010;  //Command Phase。コマンドフェーズ
    50:   public static final int SPC_STATUS_PHASE      = 0b00000011;  //Status Phase。ステータスフェーズ
    51:   public static final int SPC_MESSAGE_OUT_PHASE = 0b00000110;  //Message Out Phase。メッセージアウトフェーズ
    52:   public static final int SPC_MESSAGE_IN_PHASE  = 0b00000111;  //Message In Phase。メッセージインフェーズ
    53: 
    54:   //レジスタ
    55:   public static final int SPC_BDID       = 0x01;        //Bus Device ID。自分のID
    56:   public static final int SPC_BDID_I7    = 0b10000000;  //ID 7
    57:   public static final int SPC_BDID_I6    = 0b01000000;  //ID 6
    58:   public static final int SPC_BDID_I5    = 0b00100000;  //ID 5
    59:   public static final int SPC_BDID_I4    = 0b00010000;  //ID 4
    60:   public static final int SPC_BDID_I3    = 0b00001000;  //ID 3
    61:   public static final int SPC_BDID_I2    = 0b00000100;  //ID 2
    62:   public static final int SPC_BDID_I1    = 0b00000010;  //ID 1
    63:   public static final int SPC_BDID_I0    = 0b00000001;  //ID 0
    64:   public static final int SPC_SCTL       = 0x03;        //SPC Control
    65:   public static final int SPC_SCTL_RD    = 0b10000000;  //Reset & Disable。1=ハードウェアリセット
    66:   public static final int SPC_SCTL_CR    = 0b01000000;  //Control Reset。1=転送回路リセット
    67:   public static final int SPC_SCTL_DM    = 0b00100000;  //Diag Mode。1=自己診断モード
    68:   public static final int SPC_SCTL_AE    = 0b00010000;  //Arbitration Enable。0=アービトレーションフェーズなし(SASI),1=あり(SCSI)
    69:   public static final int SPC_SCTL_PE    = 0b00001000;  //Parity Enable。1=入力データのパリティをチェックする。出力データは常にパリティが付く
    70:   public static final int SPC_SCTL_SE    = 0b00000100;  //Select Enable。0=常にイニシエータ,1=セレクションフェーズが来たらターゲットになる
    71:   public static final int SPC_SCTL_RE    = 0b00000010;  //Reselect Enable。1=リセレクションフェーズに応答する
    72:   public static final int SPC_SCTL_IE    = 0b00000001;  //Interrupt Enable。0=割り込み禁止,1=許可。禁止されていてもINTSは変化する
    73:   public static final int SPC_SCMD       = 0x05;        //SPC Command
    74:   public static final int SPC_SCMD_CC    = 0b11100000;  //Command Code
    75:   public static final int SPC_SCMD_CC_BR = 0b00000000;  //Bus Release。ターゲットのときバスフリーフェーズへ移行
    76:   public static final int SPC_SCMD_CC_SL = 0b00100000;  //Select。セレクション/リセレクションを開始
    77:   public static final int SPC_SCMD_CC_RA = 0b01000000;  //Reset ATN。ATNをクリア
    78:   public static final int SPC_SCMD_CC_SA = 0b01100000;  //Set ATN。ATNをセット
    79:   public static final int SPC_SCMD_CC_TR = 0b10000000;  //Transfer。転送開始
    80:   public static final int SPC_SCMD_CC_TP = 0b10100000;  //Transfer Pause。転送中断
    81:   public static final int SPC_SCMD_CC_RR = 0b11000000;  //Reset ACK/REQ。CPU転送のときACK/REQをクリア
    82:   public static final int SPC_SCMD_CC_SR = 0b11100000;  //Set ACK/REQ。CPU転送のときACK/REQをセット
    83:   public static final int SPC_SCMD_RO    = 0b00010000;  //RST Out。1=SCSIバスリセット
    84:   public static final int SPC_SCMD_IT    = 0b00001000;  //Intercept Transfer。1=CPU転送時FIFOバッファの内容を保持
    85:   public static final int SPC_SCMD_PT    = 0b00000100;  //Program Transfer。0=DMA転送(DREQあり),1=CPU転送(DREQなし)
    86:   public static final int SPC_SCMD_TM    = 0b00000001;  //Termination Mode。イニシエータのとき0=カウント0で終了する,1=カウント0で終了しない(Padding)、ターゲットのとき0=パリティエラーがあってもカウント0まで転送する,1=パリティエラーがあると直ちに終了する
    87:   public static final int SPC_INTS       = 0x09;        //Interrupt Sense
    88:   public static final int SPC_INTS_SL    = 0b10000000;  //Selected。1=他のデバイスのセレクションフェーズで選択されてターゲットになった
    89:   public static final int SPC_INTS_RS    = 0b01000000;  //Reselected。1=他のデバイスのリセレクションフェーズで選択されてイニシエータになった
    90:   public static final int SPC_INTS_DC    = 0b00100000;  //Disconnected。1=バスフリーフェーズになった。バスを使うとき0に戻すこと
    91:   public static final int SPC_INTS_CC    = 0b00010000;  //Command Complete。1=SelectやTransferなどのコマンドが終了した。ターゲットのときパリティエラーで停止した
    92:   public static final int SPC_INTS_SR    = 0b00001000;  //Service Required。1=PCTLレジスタとバスのフェーズが一致しないんだけどどうにかして
    93:   public static final int SPC_INTS_TO    = 0b00000100;  //Time Out。1=セレクション/リセレクションに応答がない。セレクションタイムアウトのときSELが1のままなのでTEMP=$00で復旧させる必要がある
    94:   public static final int SPC_INTS_HE    = 0b00000010;  //SPC Hard Error。1=なんかエラーが出た。SERRを見てくれ
    95:   public static final int SPC_INTS_RC    = 0b00000001;  //Reset Condition。1=SCSIバスがリセットされた(RST信号が1になった)
    96:   public static final int SPC_PSNS       = 0x0b;        //(Read) Phase Sense
    97:   public static final int SPC_PSNS_REQ   = 0b10000000;  //REQ
    98:   public static final int SPC_PSNS_ACK   = 0b01000000;  //ACK
    99:   public static final int SPC_PSNS_ATN   = 0b00100000;  //ATN
   100:   public static final int SPC_PSNS_SEL   = 0b00010000;  //SEL。1=セレクションフェーズ
   101:   public static final int SPC_PSNS_BSY   = 0b00001000;  //BSY
   102:   public static final int SPC_PSNS_MSG   = 0b00000100;  //MSG
   103:   public static final int SPC_PSNS_CD    = 0b00000010;  //C/D
   104:   public static final int SPC_PSNS_IO    = 0b00000001;  //I/O
   105:   public static final int SPC_SDGC       = 0x0b;        //(Write) SPC Diag Control
   106:   public static final int SPC_SDGC_REQ   = 0b10000000;  //Diag REQ
   107:   public static final int SPC_SDGC_ACK   = 0b01000000;  //Diag ACK
   108:   public static final int SPC_SDGC_XFER  = 0b00100000;  //Xfer Enable。CPU転送のとき1=データ転送割り込み許可
   109:   public static final int SPC_SDGC_BSY   = 0b00001000;  //Diag BSY
   110:   public static final int SPC_SDGC_MSG   = 0b00000100;  //Diag MSG
   111:   public static final int SPC_SDGC_CD    = 0b00000010;  //Diag C/D
   112:   public static final int SPC_SDGC_IO    = 0b00000001;  //Diag I/O
   113:   public static final int SPC_SSTS       = 0x0d;        //SPC Status
   114:   public static final int SPC_SSTS_INIT  = 0b10000000;  //Connected INIT。1=イニシエータ
   115:   public static final int SPC_SSTS_TARG  = 0b01000000;  //Connected TARG。1=ターゲット
   116:   public static final int SPC_SSTS_BUSY  = 0b00100000;  //SPC Busy。1=コマンド実行中
   117:   public static final int SPC_SSTS_TRIP  = 0b00010000;  //Transfer in Progress。1=DMA転送中
   118:   public static final int SPC_SSTS_SRIN  = 0b00001000;  //SCSI Reset In。RST信号の状態
   119:   public static final int SPC_SSTS_TC0   = 0b00000100;  //TC=0。1=転送カウンタが0
   120:   public static final int SPC_SSTS_DF    = 0b00000010;  //DREG status Full。1=8バイトのFIFOが一杯
   121:   public static final int SPC_SSTS_DE    = 0b00000001;  //DREG status Empty。1=8バイトのFIFOが空
   122:   public static final int SPC_SERR       = 0x0f;        //SPC Error Status
   123:   public static final int SPC_SERR_DI    = 0b10000000;  //Data Error SCSI。1=入力データにパリティエラーがある
   124:   public static final int SPC_SERR_DO    = 0b01000000;  //Data Error SPC。1=出力データにパリティエラーがある
   125:   public static final int SPC_SERR_XO    = 0b00100000;  //Xfer Out。1=Xfer EnableのときData Request中
   126:   public static final int SPC_SERR_PE    = 0b00001000;  //TC Parity Error。1=転送カウンタにパリティエラーがある
   127:   public static final int SPC_SERR_ST    = 0b00000010;  //Short Transfer Period。1=REQ/ACKが速すぎてSPCが追従できない
   128:   public static final int SPC_PCTL       = 0x11;        //Phase Control
   129:   public static final int SPC_PCTL_IE    = 0b10000000;  //Busfree INT Enable。1=バスフリーフェーズを検出したらDisconnected割り込みを要求する
   130:   public static final int SPC_PCTL_TP    = 0b00000111;  //Transfer Phase。転送フェーズ
   131:   public static final int SPC_PCTL_MSG   = 0b00000100;  //MSG
   132:   public static final int SPC_PCTL_CD    = 0b00000010;  //C/D
   133:   public static final int SPC_PCTL_IO    = 0b00000001;  //I/O。0=Out,1=In
   134:   public static final int SPC_PCTL_SR    = 0b00000001;  //Selectコマンドのセレクション/リセレクション選択
   135:   public static final int SPC_PCTL_SR_R  = 0b00000001;  //Selectコマンドでリセレクションを開始
   136:   public static final int SPC_PCTL_SR_S  = 0b00000000;  //Selectコマンドでセレクションを開始
   137:   public static final int SPC_MBC        = 0x13;        //Modified Byte Counter
   138:   public static final int SPC_DREG       = 0x15;        //Data Register
   139:   public static final int SPC_TEMP       = 0x17;        //Temporary Register
   140:   public static final int SPC_TCH        = 0x19;        //Transfer Counter High
   141:   public static final int SPC_TCM        = 0x1b;        //Transfer Counter Mid
   142:   public static final int SPC_TCL        = 0x1d;        //Transfer Counter Low
   143: 
   144:   //ステータスバイト
   145:   public static final int SPC_GOOD                       = 0x00;
   146:   public static final int SPC_CHECK_CONDITION            = 0x02;
   147:   public static final int SPC_CONDITION_MET              = 0x04;
   148:   public static final int SPC_BUSY                       = 0x08;
   149:   public static final int SPC_INTERMEDIATE               = 0x10;
   150:   public static final int SPC_INTERMEDIATE_CONDITION_MET = 0x14;
   151:   public static final int SPC_RESERVATION_CONFLICT       = 0x18;
   152:   public static final int SPC_COMMAND_TERMINATED         = 0x22;
   153:   public static final int SPC_QUEUE_FULL                 = 0x28;
   154: 
   155:   //メッセージコード
   156:   public static final int SPC_COMMAND_COMPLETE                  = 0x00;
   157:   public static final int SPC_EXTENDED_MESSAGE                  = 0x01;  //拡張メッセージ長nとnバイトの拡張メッセージが続く
   158:   public static final int SPC_SAVE_DATA_POINTER                 = 0x02;
   159:   public static final int SPC_RESTORE_POINTERS                  = 0x03;
   160:   public static final int SPC_DISCONNECT                        = 0x04;
   161:   public static final int SPC_INITIATOR_DETECTED_ERROR          = 0x05;
   162:   public static final int SPC_ABORT                             = 0x06;
   163:   public static final int SPC_MESSAGE_REJECT                    = 0x07;
   164:   public static final int SPC_NO_OPERATION                      = 0x08;
   165:   public static final int SPC_MESSAGE_PARITY_ERROR              = 0x09;
   166:   public static final int SPC_LINKED_COMMAND_COMPLETE           = 0x0a;
   167:   public static final int SPC_LINKED_COMMAND_COMPLETE_WITH_FLAG = 0x0b;
   168:   public static final int SPC_BUS_DEVICE_RESET                  = 0x0c;
   169:   public static final int SPC_ABORT_TAG                         = 0x0d;
   170:   public static final int SPC_CLEAR_QUEUE                       = 0x0e;
   171:   public static final int SPC_INITIATE_RECOVERY                 = 0x0f;
   172:   public static final int SPC_RELEASE_RECOVERY                  = 0x10;
   173:   public static final int SPC_TERMINATE_IO_PROCESS              = 0x11;
   174:   public static final int SPC_SIMPLE_QUEUE_TAG                  = 0x20;  //0x20-0x7fは2バイト
   175:   public static final int SPC_HEAD_OF_QUEUE_TAG                 = 0x21;
   176:   public static final int SPC_ORDERED_QUEUE_TAG                 = 0x22;
   177:   public static final int SPC_IGNORE_WIDE_RESIDUE               = 0x23;
   178:   public static final int SPC_IDENTIFY                          = 0x80;
   179: 
   180:   //センスエラーコード[0]
   181:   public static final int SPC_INVALID_COMMAND        = 0x20;
   182:   public static final int SPC_INVALID_SECTOR_ADDRESS = 0x21;
   183:   public static final int SPC_EXTENDED_SENSE         = 0x70;  //拡張センスデータ(8バイト以上)。[2]=センスキー,[7]=[8]以降の長さ
   184:   //センスキー[2]
   185:   public static final int SPC_NO_SENSE        = 0x00;
   186:   public static final int SPC_RECOVERED_ERROR = 0x01;
   187:   public static final int SPC_NOT_READY       = 0x02;
   188:   public static final int SPC_MEDIUM_ERROR    = 0x03;
   189:   public static final int SPC_HARDWARE_ERROR  = 0x04;
   190:   public static final int SPC_ILLEGAL_REQUEST = 0x05;
   191:   public static final int SPC_UNIT_ATTENTION  = 0x06;
   192:   public static final int SPC_DATA_PROTECT    = 0x07;
   193:   public static final int SPC_BLANK_CHECK     = 0x08;
   194:   public static final int SPC_COPY_ABORTED    = 0x0a;
   195:   public static final int SPC_ABORTED_COMMAND = 0x0b;
   196:   public static final int SPC_EQUAL           = 0x0c;
   197:   public static final int SPC_VOLUME_OVERFLOW = 0x0d;
   198:   public static final int SPC_MISCOMPARE      = 0x0e;
   199: 
   200:   //デバイスタイプ
   201:   //  スタンダードInquiryデータの1バイト目の下位5bit
   202:   public static final int SPC_DIRECT_ACCESS_DEVICE     = 0x00;  //ダイレクトアクセスデバイス(HDD)
   203:   public static final int SPC_SEQUENCIAL_ACCESS_DEVICE = 0x01;  //シーケンシャルアクセスデバイス(磁気テープ)
   204:   public static final int SPC_PRINTER_DEVICE           = 0x02;  //プリンタデバイス
   205:   public static final int SPC_PROCESSOR_DEVICE         = 0x03;  //プロセッサデバイス
   206:   public static final int SPC_WRITE_ONCE_DEVICE        = 0x04;  //ライトワンスデバイス(追記型光ディスク)
   207:   public static final int SPC_CDROM_DEVICE             = 0x05;  //CD-ROMデバイス
   208:   public static final int SPC_SCANNER_DEVICE           = 0x06;  //スキャナデバイス
   209:   public static final int SPC_OPTICAL_MEMORY_DEVICE    = 0x07;  //光メモリデバイス(消去可能光ディスク)
   210:   public static final int SPC_MEDIUM_CHANGER_DEVICE    = 0x08;  //メディアチェンジャデバイス(磁気テープライブラリ)
   211:   public static final int SPC_COMMUNICATION_DEVICE     = 0x09;  //コミュニケーションデバイス
   212: 
   213:   //コマンド名
   214:   //  デバイスタイプ
   215:   //    A  全デバイス共通
   216:   //    D  ダイレクトアクセスデバイス
   217:   //    T  シーケンシャルアクセスデバイス
   218:   //    P  プリンタデバイス
   219:   //    G  プロセッサデバイス
   220:   //    W  ライトワンスデバイス
   221:   //    C  CD-ROMデバイス
   222:   //    S  スキャナデバイス
   223:   //    O  光メモリデバイス
   224:   //    L  メディアチェンジャデバイス
   225:   //    N  コミュニケーションデバイス
   226:   //  サポート
   227:   //    m  必須
   228:   //    e  拡張仕様
   229:   //    o  オプション
   230:   //    z  タイプ依存
   231:   //    v  ベンダ固有
   232:   //    r  予約
   233:   //  参考  SCSI-2詳細解説;菅谷誠一著;CQ出版社
   234:   public static final String[] SPC_COMMAND_NAME = (
   235:     //グループ0  コマンド長6バイト                           | SCSI-1|   SCSI-2  |
   236:     //                                                       |ADTPGWC|ADTPGWCSOLN|
   237:     "Test Unit Ready," +                                //$00|ooooooo|mmmmmmmmmmm|
   238:     "Rezero Unit/Rewind," +                             //$01| omvvoo| omvrooroor|DWCOL:Rezero Unit/T:Rewind
   239:     "," +                                               //$02| vvvvvv| vvvvvvrrrr|
   240:     "Request Sense," +                                  //$03|mmmmmmm|mmmmmmmmmmm|
   241:     "Format Unit," +                                    //$04| mrovrr| mrorrrrorr|DO:Format Unit/P:Format
   242:     "Read Block Limits," +                              //$05| vevvvv| vmvvvvrrrr|
   243:     "," +                                               //$06| vvvvvv| vvvvvvrrrr|
   244:     "Reassign Blocks/Initialize Element Status," +      //$07| ovvvor| ovvrorroor|DWO:Reassign Blocks/L:Initialize Element Status
   245:     "Read(6)/Receive/Get Message(6)," +                 //$08| mmvooo| mmvooororo|DWCO:Read(6)/T:Read/G:Receive/N:Get Message(6)
   246:     "," +                                               //$09| vvvvvv| vvvvvvrrrr|
   247:     "Write(6)/Print/Send/Send Message(6)," +            //$0A| mmmmor| ommmorrorm|DWO:Write(6)/T:Write/P:Print/G:Send/N:Send Message(6)
   248:     "Seek(6)/Track Select/Slew and Print," +            //$0B| ooovoo| ororoororr|DWCO:Seek(6)/T:(Track Select)/P:Slew and Print
   249:     "," +                                               //$0C| vvvvvv| vvvvvvrrvr|
   250:     "," +                                               //$0D| vvvvvv| vvvvvvrrrr|
   251:     "," +                                               //$0E| vvvvvv| vvvvvvrrrr|
   252:     "Read Reverse," +                                   //$0F| vovvvv| vovvvvrrrr|
   253:     "Write Filemarks/Synchronize Buffer," +             //$10| vmovvv| vmovvvrrrr|T:Write Filemarks/P:Synchronize Buffer
   254:     "Space," +                                          //$11| vovvvv| vmvvvvrrrr|
   255:     "Inquiry," +                                        //$12|eeeeeee|mmmmmmmmmmm|
   256:     "Verify," +                                         //$13| vovvvv| vovvvvrrrr|
   257:     "Recover Buffered Data," +                          //$14| voovvv| voovvvrrrr|
   258:     "Mode Select(6)," +                                 //$15|zooovoo|zomoroooooo|
   259:     "Reserve Unit," +                                   //$16| ooovoo| mmmrmmmmor|DWCOL:Reserve/TPS:Reserve Unit
   260:     "Release Unit," +                                   //$17| ooovoo| mmmrmmmmor|DWCOL:Release/TPS:Release Unit
   261:     "Copy," +                                           //$18|ooooooo|ooooooooorr|
   262:     "Erase," +                                          //$19| vovrvv| vmvvvvrrrr|
   263:     "Mode Sense(6)," +                                  //$1A|zoooroo|zomoroooooo|
   264:     "Start-Stop Unit/Load Unload/Stop Print/Scan," +    //$1B| oooroo| oooroooorr|DWCO:Start-Stop Unit/T:Load Unload/T:Stop Print/S:Scan
   265:     "Receive Diagnostic Results," +                     //$1C|ooooooo|ooooooooooo|
   266:     "Send Diagnostic," +                                //$1D|ooooooo|mmmmmmmmmmm|
   267:     "Prevent-Allow Medium Removal," +                   //$1E| oorroo| oorrooroor|
   268:     "," +                                               //$1F| rrrrrr| rrrrrrrrrr|
   269:     //グループ1  コマンド長10バイト                          | SCSI-1|   SCSI-2  |
   270:     //                                                       |ADTPGWC|ADTPGWCSOLN|
   271:     "," +                                               //$20| vrrrvv| vrrrvvrvrr|
   272:     "," +                                               //$21| vrrrvv| vrrrvvrvrr|
   273:     "," +                                               //$22| vrrrvv| vrrrvvrvrr|
   274:     "," +                                               //$23| vrrrvv| vrrrvvrvrr|
   275:     "Set Window," +                                     //$24| vrrrvv| vrrrvvmrrr|
   276:     "Read Capacity/Get Window," +                       //$25| errree| mrrrmmomrr|DWO:Read Capacity/C:Read CD-ROM Capacity/S:Get Window
   277:     "," +                                               //$26| vrrrvv| vrrrvvrrrr|
   278:     "," +                                               //$27| vrrrvv| vrrrvvrrrr|
   279:     "Read(10)/Get Message(10)," +                       //$28| errrmm| mrrrmmmmro|DWCO:Read(10)/S:Read/N:Get Message(10)
   280:     "Read Generation," +                                //$29| vrrrvv| vrrrvvrorr|
   281:     "Write(10)/Send/Send Message(10)," +                //$2A| errrmr| orrrmromro|DWO:Write(10)/S:Send/N:Send Message(10)
   282:     "Seek(10)/Locate/Position to Element," +            //$2B| oorroo| oorrooroor|DWCO:Seek(10)/T:Locate/L:Position to Element
   283:     "Erase(10)," +                                      //$2C| vrrrrv| vrrrvrrorr|
   284:     "Read Updated Block," +                             //$2D| vrrrrv| vrrrvrrorr|
   285:     "Write and Verify(10)," +                           //$2E| orrror| orrrorrorr|
   286:     "Verify(10)," +                                     //$2F| orrroo| orrroororr|
   287:     "Search Data High(10)," +                           //$30| orrroo| orrroororr|
   288:     "Search Data Equal(10)/Object Position," +          //$31| orrroo| orrroooorr|DWCO:Search Data Equal(10)/S:Object Position
   289:     "Search Data Low(10)," +                            //$32| orrroo| orrroororr|
   290:     "Set Limits(10)," +                                 //$33| orrroo| orrroororr|
   291:     "Pre-Fetch/Read Position/Get Data Buffer Status," + //$34| rrrrrr| oorroooorr|DWCO:Pre-Fetch/T:Read Position/S:Get Data Buffer Status
   292:     "Synchronize Cache," +                              //$35| rrrrrr| orrroororr|
   293:     "Lock-Unlock Cache," +                              //$36| rrrrrr| orrroororr|
   294:     "Read Defect Data(10)," +                           //$37| rrrrrr| orrrrrrorr|
   295:     "Medium Scan," +                                    //$38| rrrrrr| rrrrorrorr|
   296:     "Compare," +                                        //$39|oooo-oo|ooooooooorr|
   297:     "Copy and Verify," +                                //$3A|oooo-oo|ooooooooorr|
   298:     "Write Buffer," +                                   //$3B|rrrrrrr|ooooooooooo|
   299:     "Read Buffer," +                                    //$3C|rrrrrrr|ooooooooooo|
   300:     "Update Block," +                                   //$3D| rrrrrr| rrrrrrrorr|
   301:     "Read Long," +                                      //$3E| rrrrrr| orrroororr|
   302:     "Write Long," +                                     //$3F| rrrrrr| orrrorrorr|
   303:     //グループ2  コマンド長10バイト                          | SCSI-1|   SCSI-2  |
   304:     //                                                       |ADTPGWC|ADTPGWCSOLN|
   305:     "Change Definition," +                              //$40|rrrrrrr|ooooooooooo|
   306:     "Write Same," +                                     //$41| rrrrrr| orrrrrrrrr|
   307:     "Read Sub-Channel," +                               //$42| rrrrrr| rrrrrorrrr|
   308:     "Read TOC," +                                       //$43| rrrrrr| rrrrrorrrr|
   309:     "Read Header," +                                    //$44| rrrrrr| rrrrrorrrr|
   310:     "Play Audio(10)," +                                 //$45| rrrrrr| rrrrrorrrr|
   311:     "," +                                               //$46| rrrrrr| rrrrrrrrrr|
   312:     "Play Audio MSF," +                                 //$47| rrrrrr| rrrrrorrrr|
   313:     "Play Audio Track Index," +                         //$48| rrrrrr| rrrrrorrrr|
   314:     "Play Audio Track Relative(10)," +                  //$49| rrrrrr| rrrrrorrrr|
   315:     "," +                                               //$4A| rrrrrr| rrrrrrrrrr|
   316:     "Pause Resume," +                                   //$4B| rrrrrr| rrrrrorrrr|
   317:     "Log Select," +                                     //$4C|rrrrrrr|ooooooooooo|
   318:     "Log Sense," +                                      //$4D|rrrrrrr|ooooooooooo|
   319:     "," +                                               //$4E| rrrrrr| rrrrrrrrrr|
   320:     "," +                                               //$4F| rrrrrr| rrrrrrrrrr|
   321:     "," +                                               //$50| rrrrrr| rrrrrrrrrr|
   322:     "," +                                               //$51| rrrrrr| rrrrrrrrrr|
   323:     "," +                                               //$52| rrrrrr| rrrrrrrrrr|
   324:     "," +                                               //$53| rrrrrr| rrrrrrrrrr|
   325:     "," +                                               //$54| rrrrrr| rrrrrrrrrr|
   326:     "Mode Select(10)," +                                //$55|rrrrrrr|zoooroooooo|
   327:     "," +                                               //$56| rrrrrr| rrrrrrrrrr|
   328:     "," +                                               //$57| rrrrrr| rrrrrrrrrr|
   329:     "," +                                               //$58| rrrrrr| rrrrrrrrrr|
   330:     "," +                                               //$59| rrrrrr| rrrrrrrrrr|
   331:     "Mode Sense(10)," +                                 //$5A|rrrrrrr|zoooroooooo|
   332:     "," +                                               //$5B| rrrrrr| rrrrrrrrrr|
   333:     "," +                                               //$5C| rrrrrr| rrrrrrrrrr|
   334:     "," +                                               //$5D| rrrrrr| rrrrrrrrrr|
   335:     "," +                                               //$5E| rrrrrr| rrrrrrrrrr|
   336:     "," +                                               //$5F| rrrrrr| rrrrrrrrrr|
   337:     //グループ3,4  予約
   338:     ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,," +
   339:     //グループ5  コマンド長12バイト                          | SCSI-1|   SCSI-2  |
   340:     //                                                       |ADTPGWC|ADTPGWCSOLN|
   341:     "," +                                               //$A0| rrrrrr| rrrrrrrrrr|
   342:     "," +                                               //$A1| rrrrrr| rrrrrrrrrr|
   343:     "," +                                               //$A2| rrrrrr| rrrrrrrrrr|
   344:     "," +                                               //$A3| rrrrrr| rrrrrrrrrr|
   345:     "," +                                               //$A4| rrrrrr| rrrrrrrrrr|
   346:     "Play Audio(12)/Move Medium," +                     //$A5| rrrrrr| rrrrrorrmr|C:Play Audio(12)/L:Move Medium
   347:     "Exchange Medium," +                                //$A6| rrrrrr| rrrrrrrror|
   348:     "," +                                               //$A7| rrrrrr| rrrrrrrrrr|
   349:     "Read(12)/Get Message(12)," +                       //$A8| rrrrrr| rrrroororo|WCO:Read(12)/N:Get Message(12)
   350:     "Play Audio Track Relative(12)," +                  //$A9| rrrrrr| rrrrrorrrr|
   351:     "Write(12)/Send Message(12)," +                     //$AA| rrrrrr| rrrrorroro|WO:Write(12)/N:Send Message(12)
   352:     "," +                                               //$AB| rrrrrr| rrrrrrrrrr|
   353:     "Erase(12)," +                                      //$AC| rrrrrr| rrrrrrrorr|
   354:     "," +                                               //$AD| rrrrrr| rrrrrrrrrr|
   355:     "Write and Verify(12)," +                           //$AE| rrrrrr| rrrrorrorr|
   356:     "Verify(12)," +                                     //$AF| rrrrrr| rrrroororr|
   357:     "Search Data High(12)," +                           //$B0| rrrrrr| rrrroororr|
   358:     "Search Data Equal(12)," +                          //$B1| rrrrrr| rrrroororr|
   359:     "Search Data Low(12)," +                            //$B2| rrrrrr| rrrroororr|
   360:     "Set Limits(12)," +                                 //$B3| rrrrrr| rrrroororr|
   361:     "," +                                               //$B4| rrrrrr| rrrrrrrrrr|
   362:     "Request Volume Element Address," +                 //$B5| rrrrrr| rrrrrrrror|
   363:     "Send Volume Tag," +                                //$B6| rrrrrr| rrrrrrrror|
   364:     "Read Defect Data(12)," +                           //$B7| rrrrrr| rrrrrrrorr|
   365:     "Read Element Status," +                            //$B8| rrrrrr| rrrrrrrror|
   366:     "," +                                               //$B9| rrrrrr| rrrrrrrrrr|
   367:     "," +                                               //$BA| rrrrrr| rrrrrrrrrr|
   368:     "," +                                               //$BB| rrrrrr| rrrrrrrrrr|
   369:     "," +                                               //$BC| rrrrrr| rrrrrrrrrr|
   370:     "," +                                               //$BD| rrrrrr| rrrrrrrrrr|
   371:     "," +                                               //$BE| rrrrrr| rrrrrrrrrr|
   372:     "," +                                               //$BF| rrrrrr| rrrrrrrrrr|
   373:     //グループ6,7  ベンダ固有
   374:     ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,").split (",", 256);
   375: 
   376:   //レジスタ名
   377:   public static final String[] SPC_REGISTER_NAME = (
   378:     //0    00    00    0000    00    00    00    11    11   11    11    11   11   11   11
   379:     //1    23    45    6789    ab    cd    ef    01    23   45    67    89   ab   cd   ef
   380:     ",BDID,,SCTL,,SCMD,,,,INTS,,PSNS,,SSTS,,SERR,,PCTL,,MBC,,DREG,,TEMP,,TCH,,TCM,,TCL,,").split (",", 32);
   381: 
   382:   //インタフェイスの有無
   383:   public static boolean spcSCSIEXRequest;  //次回のリセットでspcSCSIEXOnに設定される値
   384:   public static boolean spcSCSIEXOn;  //true=拡張SCSIポートあり
   385:   public static boolean spcSCSIINOn;  //true=内蔵SCSIポートあり
   386: 
   387:   //インタフェイス
   388:   public static SPCChip spcSCSIEXChip;  //拡張SCSIポート
   389:   public static SPCChip spcSCSIINChip;  //内蔵SCSIポート
   390: 
   391:   //ROM
   392:   public static String spcSCSIEXROM;  //拡張SCSI ROMイメージファイル名
   393: 
   394:   //ユニット
   395:   public static SCUnit[] spcUnitArray;  //SCSIユニットの配列
   396: 
   397:   //メニュー
   398:   public static JMenu spcMenu;
   399:   public static JCheckBoxMenuItem spcSCSIEXMenuItem;
   400: 
   401:   //イメージファイル
   402:   //  コマンドラインのみ
   403:   public static File spcLastFile;  //最後にアクセスしたファイル=次にファイルチューザーを開いたときに表示するディレクトリ
   404: 
   405:   public static int spcOpenUnit;  //開くユニットの番号。0..15
   406:   public static boolean spcOpenWriteProtect;  //true=ライトプロテクトモードで開く
   407: 
   408:   //開くダイアログ
   409:   public static JDialog spcOpenDialog;  //ダイアログ
   410:   public static JFileChooser2 spcOpenFileChooser;  //ファイルチューザー
   411:   public static javax.swing.filechooser.FileFilter spcOpenFileFilter;  //イメージファイルフィルタ
   412: 
   413:   //フォーマットダイアログ
   414:   public static JDialog spcFormatDialog;  //ダイアログ
   415:   public static JFileChooser2 spcFormatFileChooser;  //ファイルチューザー
   416:   public static SpinnerNumberModel spcFormatModel;  //容量のスピナーモデル
   417:   public static int spcFormatPartitionMegaBytes;  //容量(MB)。1MB倍して32KB加えたサイズで作成する
   418:   public static int spcFormatBytesPerRecord;  //1レコードあたりのバイト数(2の累乗)
   419:   public static JCheckBox spcFormatPartitioningCheckBox;  //領域確保チェックボックス
   420:   public static boolean spcFormatPartitioningOn;  //true=領域確保する
   421:   //protected static boolean spcFormatCopySystemFiles;  //true=システム転送
   422:   public static JCheckBox spcFormatCopyHumanSysCheckBox;  //HUMAN.SYSチェックボックス
   423:   public static JCheckBox spcFormatCopyCommandXCheckBox;  //COMMAND.Xチェックボックス
   424:   public static boolean spcFormatCopyHumanSysOn;  //true=HUMAN.SYSを書き込む
   425:   public static boolean spcFormatCopyCommandXOn;  //true=COMMAND.Xを書き込む
   426:   public static javax.swing.filechooser.FileFilter spcFormatFilter;  //SCSI HDDイメージファイルフィルタ
   427: 
   428:   //spcInit ()
   429:   //  初期化
   430:   public static void spcInit () {
   431: 
   432:     //モード
   433:     spcSCSIEXOn = false;
   434:     spcSCSIINOn = false;
   435: 
   436:     //インタフェイス
   437:     spcSCSIEXChip = new SPCChip (true);  //拡張SCSI
   438:     spcSCSIINChip = new SPCChip (false);  //内蔵SCSI
   439: 
   440:     //ユニット
   441:     spcUnitArray = new SCUnit[16];
   442:     for (int u = 0; u < 16; u++) {
   443:       spcUnitArray[u] = new SCUnit (u, null);
   444:     }
   445: 
   446:     //拡張SCSIのROM
   447:     {
   448:       byte[] bb = null;
   449:       //-scsiexromで指定されたSCSIEXROMのイメージファイル(8KB)を読み込む
   450:       if (spcSCSIEXROM.length () > 0) {  //-scsiexromが指定された
   451:         bb = new byte[8192];
   452:         if (XEiJ.ismLoad (bb, 0, 8192, spcSCSIEXROM)) {
   453:           if (ByteArray.byaRls (bb, 0x0044) == ('S' << 24 | 'C' << 16 | 'S' << 8 | 'I') &&
   454:               ByteArray.byaRwz (bb, 0x0048) == ('E' << 8 | 'X') &&  //SCSIEXフラグがある
   455:               (ByteArray.byaRls (bb, 0x0020) & -0x2000) == 0x00ea0000) {  //ROM起動ハンドルがscsiexromを指している
   456:           } else {
   457:             XEiJ.prgMessage (Multilingual.mlnJapanese ?
   458:                              XEiJ.smrSramName + " は拡張 SCSI ROM のデータではないか、壊れています" :
   459:                              XEiJ.smrSramName + " is not Expansion SCSI ROM data or it's broken");
   460:             spcSCSIEXROM = "";
   461:             bb = null;
   462:           }
   463:         } else {
   464:           spcSCSIEXROM = "";
   465:           bb = null;
   466:         }
   467:       }
   468:       if (bb == null) {
   469:         bb = spcMakeSCSIROM (0);  //SCSIEXROMを作る
   470:       }
   471:       if (bb != null) {
   472:         System.arraycopy (bb, 0, MainMemory.mmrM8, 0x00ea0000, 8192);  //メインメモリに転送しておく。必要なときだけマップされる
   473:       }
   474:     }
   475: 
   476:     //メニュー
   477:     spcMenu = ComponentFactory.createMenu ("SCSI");  //横に長いとサブメニューを開きにくいので短くする
   478: 
   479:     //ローカルでないときは使用不可
   480:     if (!XEiJ.prgIsLocal) {  //ローカルでないとき
   481:       ComponentFactory.setEnabled (spcMenu, false);
   482:       return;
   483:     }
   484: 
   485:     //パラメータ
   486:     spcLastFile = new File (".");  //カレントディレクトリ
   487:     for (int u = 0; u < 16; u++) {
   488:       SCUnit unit = spcUnitArray[u];
   489:       String path = Settings.sgsCurrentMap.get ("sc" + u);
   490:       boolean userWriteProtect = false;
   491:       if (path.toUpperCase ().endsWith (":R")) {  //書き込み禁止モードで開く
   492:         path = path.substring (0, path.length () - 2);
   493:         userWriteProtect = true;
   494:       }
   495:       boolean hostWriteProtect = !new File (path).canWrite ();
   496:       if (path.length () != 0) {
   497:         unit.connect (true);  //接続されていなければ接続する
   498:         if (unit.insert (path)) {  //挿入できた
   499:           if (userWriteProtect || hostWriteProtect) {  //書き込みを禁止する
   500:             unit.protect (false);  //開くときに書き込みを禁止した場合はイジェクトするまで書き込みを許可できない
   501:           }
   502:           spcLastFile = new File (path);
   503:         }
   504:       }
   505:     }
   506: 
   507:     //アクションリスナー
   508:     ActionListener listener = new ActionListener () {
   509:       @Override public void actionPerformed (ActionEvent ae) {
   510:         Object source = ae.getSource ();
   511:         String command = ae.getActionCommand ();
   512:         switch (command) {
   513:         case "External SCSI Port":  //拡張 SCSI ポート
   514:           spcSCSIEXRequest = ((JCheckBoxMenuItem) source).isSelected ();
   515:           break;
   516:         case "Create New SCSI Hard Disk Images":  //SCSI ハードディスクイメージの新規作成
   517:           spcOpenFormatDialog ();
   518:           break;
   519:         }
   520:       }
   521:     };
   522: 
   523:     //メニュー
   524:     ComponentFactory.addComponents (
   525:       spcMenu,
   526:       ComponentFactory.createHorizontalBox (
   527:         Multilingual.mlnText (
   528:           ComponentFactory.createLabel ("SCSI Hard Disk / CD-ROM"),
   529:           "ja", "SCSI ハードディスク / CD-ROM")),
   530:       ComponentFactory.createHorizontalSeparator ()
   531:       );
   532:     for (int u = 0; u < 16; u++) {
   533:       spcMenu.add (spcUnitArray[u].getMenuBox ());
   534:     }
   535:     ComponentFactory.addComponents (
   536:       spcMenu,
   537:       ComponentFactory.createHorizontalSeparator (),
   538:       XEiJ.mdlSCSIINMenuItem,
   539:       spcSCSIEXMenuItem = Multilingual.mlnText (ComponentFactory.createCheckBoxMenuItem (spcSCSIEXRequest, "External SCSI Port", listener), "ja", "拡張 SCSI ポート"),
   540:       ComponentFactory.createHorizontalSeparator (),
   541:       Multilingual.mlnText (ComponentFactory.createMenuItem ("Create New SCSI Hard Disk Images", listener), "ja", "SCSI ハードディスクイメージの新規作成")
   542:       );
   543: 
   544:     //最後にアクセスしたファイル
   545:     spcLastFile = new File (".");  //最初にファイルチューザーを開いたときカレントディレクトリを表示する
   546: 
   547:     spcOpenUnit = 0;
   548:     spcOpenWriteProtect = false;
   549: 
   550:     //開くダイアログ
   551:     spcOpenDialog = null;
   552:     spcOpenFileChooser = null;
   553:     spcOpenFileFilter = new javax.swing.filechooser.FileFilter () {  //java.io.FileFilterと紛らわしい
   554:       @Override public boolean accept (File file) {
   555:         if (file.isDirectory ()) {
   556:           return true;
   557:         }
   558:         String path = file.getPath ();
   559:         if (spcIsInserted (path)) {  //既に挿入されている
   560:           return false;
   561:         }
   562:         return spcIsHds (file, true) || spcIsIso (file);  //拡張子がHDSで装置初期化されているか、拡張子がISO
   563:       }
   564:       @Override public String getDescription () {
   565:         return Multilingual.mlnJapanese ? "SCSI ハードディスク / CD-ROM イメージ (*.HDS,*.ISO)" : "SCSI Hard Disk / CD-ROM Image (*.HDS,*.ISO)";
   566:       }
   567:     };
   568: 
   569:     //フォーマットダイアログ
   570:     spcFormatDialog = null;
   571:     spcFormatFileChooser = null;
   572:     spcFormatPartitionMegaBytes = 100;
   573:     spcFormatBytesPerRecord = 512;
   574:     spcFormatPartitioningCheckBox = null;
   575:     spcFormatPartitioningOn = true;
   576:     //spcFormatCopySystemFiles = true;
   577:     spcFormatCopyHumanSysCheckBox = null;
   578:     spcFormatCopyCommandXCheckBox = null;
   579:     spcFormatCopyHumanSysOn = true;
   580:     spcFormatCopyCommandXOn = true;
   581:     spcFormatFilter = new javax.swing.filechooser.FileFilter () {  //java.io.FileFilterと紛らわしい
   582:       @Override public boolean accept (File file) {
   583:         if (file.isDirectory ()) {
   584:           return true;
   585:         }
   586:         String path = file.getPath ();
   587:         if (spcIsInserted (path)) {  //既に挿入されている
   588:           return false;
   589:         }
   590:         return spcIsHds (file, false);  //拡張子がHDSならばファイルが存在しなくてもよい
   591:       }
   592:       @Override public String getDescription () {
   593:         return Multilingual.mlnJapanese ? "SCSI ハードディスクイメージ (*.HDS)" : "SCSI Hard Disk Image (*.HDS)";
   594:       }
   595:     };
   596: 
   597:   }  //spcInit()
   598: 
   599:   //spcReset ()
   600:   public static void spcReset () {
   601:     //拡張SCSI
   602:     spcSCSIEXOn = spcSCSIEXRequest;
   603:     XEiJ.busSuper (spcSCSIEXOn ? MemoryMappedDevice.MMD_EXS : MemoryMappedDevice.MMD_NUL, 0x00ea0000, 0x00ea2000);  //必要なときだけ接続する
   604:     //内蔵SCSI
   605:     //  内蔵SASIと同じページにあるので内蔵SCSIがなくてもページごと切り離すことはできない
   606:     spcSCSIINOn = XEiJ.mdlSCSIINRequest;
   607:     if (XEiJ.romIPLVersion >= 3) {  //IPLROM1.3以上
   608:       spcSCSIINOn = true;  //ROM1.3は内蔵SCSIがないと起動できないので強制的にONにする。チェックボックスはそのまま
   609:       if (XEiJ.romROM30Data != null) {  //-rom30が指定された
   610:         System.arraycopy (XEiJ.romROM30Data, 0, MainMemory.mmrM8, 0x00fc0000, 1024 * 128);  //-rom30で指定されたデータをコピーする
   611:       } else {
   612:         int d = MainMemory.mmrRls (0x00ff0020);
   613:         for (int a = 0x00fc0000; a < 0x00fc0020; a += 4) {
   614:           MainMemory.mmrWl (a, d);
   615:         }
   616:         MainMemory.mmrWl (0x00fc0020, MainMemory.mmrRls (0x00ff0024));
   617:         MainMemory.mmrWstr (0x00fc0024, "SCSIIN");
   618:         Arrays.fill (MainMemory.mmrM8, 0x00fc002a, 0x00fe0000, (byte) 0xff);
   619:       }
   620:     } else if (spcSCSIINOn) {  //IPLROM1.2以下で内蔵SCSIあり
   621:       if (XEiJ.romSCSIINROMData != null) {  //-scsiinromが指定された
   622:         System.arraycopy (XEiJ.romSCSIINROMData, 0, MainMemory.mmrM8, 0x00fc0000, 8192);  //-scsiinromで指定されたデータをコピーする
   623:         Arrays.fill (MainMemory.mmrM8, 0x00fc2000, 0x00fe0000, (byte) 0xff);
   624:       } else {
   625:         byte[] bb = spcMakeSCSIROM (1);  //SCSIINROMを作る
   626:         if (bb != null) {  //成功
   627:           System.arraycopy (bb, 0, MainMemory.mmrM8, 0x00fc0000, 8192);
   628:           Arrays.fill (MainMemory.mmrM8, 0x00fc2000, 0x00fe0000, (byte) 0xff);
   629:         } else {  //失敗
   630:           spcSCSIINOn = false;
   631:           System.arraycopy (MainMemory.mmrM8, 0x00fe0000, MainMemory.mmrM8, 0x00fc0000, 1024 * 128);  //IPLROMをコピーする
   632:         }
   633:       }
   634:     } else {  //IPLROM1.2以下で内蔵SCSIなし
   635:       System.arraycopy (MainMemory.mmrM8, 0x00fe0000, MainMemory.mmrM8, 0x00fc0000, 1024 * 128);  //IPLROMをコピーする
   636:     }
   637:     XEiJ.romCheck2 ();  //ROMデバッガとROM Humanのバージョンを確認する
   638:     XEiJ.romPatch2 ();  //ROMデバッガにパッチをあてる
   639:     XEiJ.romPatch3 ();  //ROM Humanにパッチをあてる
   640:     //    拡張  内蔵  unit0-7  unit8-15
   641:     //    -----------------------------
   642:     //    有効  有効    拡張     内蔵
   643:     //    有効  無効    拡張     無効
   644:     //    無効  有効    内蔵     無効
   645:     //    無効  無効    無効     無効
   646:     spcSCSIEXChip.spiReset (spcSCSIEXOn ? 0 : -8);
   647:     spcSCSIINChip.spiReset (spcSCSIINOn ? spcSCSIEXOn ? 8 : 0 : -8);
   648:     for (int u = 0; u < 16; u++) {
   649:       spcUnitArray[u].scuReset (u < 8 ? spcSCSIEXOn ? spcSCSIEXChip : spcSCSIINOn ? spcSCSIINChip : null :
   650:                                 spcSCSIEXOn && spcSCSIINOn ? spcSCSIINChip : null);
   651:     }
   652:     if (spcSCSIEXOn) {
   653:       MainMemory.mmrWb (0x00ed0070, MainMemory.mmrRbs (0x00ed0070) | 0x08);  //拡張フラグをセットする
   654:     } else {
   655:       MainMemory.mmrWb (0x00ed0070, MainMemory.mmrRbs (0x00ed0070) & ~0x08);  //拡張フラグをクリアする
   656:     }
   657:   }  //spcReset()
   658: 
   659:   //spcTini ()
   660:   //  後始末
   661:   public static void spcTini () {
   662:     spcSCSIEXChip.spiTini ();
   663:     spcSCSIINChip.spiTini ();
   664:   }  //spcTini()
   665: 
   666:   //inserted = spcIsInserted (path)
   667:   //  パスで指定したファイルが既に挿入されているか調べる
   668:   public static boolean spcIsInserted (String path) {
   669:     for (SCUnit unit : spcUnitArray) {
   670:       if (unit != null &&
   671:           unit.abuConnected &&  //接続されている
   672:           unit.abuInserted &&  //挿入されている
   673:           unit.abuPath.equals (path)) {  //パスが一致している
   674:         return true;  //既に挿入されている
   675:       }
   676:     }
   677:     return false;  //まだ挿入されていない
   678:   }  //spcIsInserted(String)
   679: 
   680:   //spcMakeOpenDialog ()
   681:   //  開くダイアログを作る
   682:   //  コマンドラインのみ
   683:   public static void spcMakeOpenDialog () {
   684:     ActionListener listener = new ActionListener () {
   685:       @Override public void actionPerformed (ActionEvent ae) {
   686:         switch (ae.getActionCommand ()) {
   687:         case JFileChooser.APPROVE_SELECTION:
   688:         case "Reboot from it":  //ここから再起動
   689:           {
   690:             File[] list = spcOpenFileChooser.getSelectedFiles2 ();
   691:             if (list.length > 0) {
   692:               spcOpenFiles (list, true);
   693:               spcOpenDialog.setVisible (false);
   694:             }
   695:           }
   696:           break;
   697:         case "Open":  //開く
   698:           {
   699:             File[] list = spcOpenFileChooser.getSelectedFiles2 ();
   700:             if (list.length > 0) {
   701:               spcOpenFiles (list, false);
   702:               spcOpenDialog.setVisible (false);
   703:             }
   704:           }
   705:           break;
   706:         case JFileChooser.CANCEL_SELECTION:
   707:         case "Cancel":  //キャンセル
   708:           spcOpenDialog.setVisible (false);
   709:           break;
   710:         case "Write-Protect":  //書き込み禁止
   711:           spcOpenWriteProtect = ((JCheckBox) ae.getSource ()).isSelected ();
   712:           break;
   713:         }
   714:       }
   715:     };
   716:     spcOpenFileChooser = new JFileChooser2 (spcLastFile);
   717:     spcOpenFileChooser.setFileFilter (spcOpenFileFilter);
   718:     spcOpenFileChooser.setMultiSelectionEnabled (true);  //複数選択可能
   719:     spcOpenFileChooser.setControlButtonsAreShown (false);  //デフォルトのボタンを消す
   720:     spcOpenFileChooser.addActionListener (listener);
   721:     spcOpenDialog = Multilingual.mlnTitle (
   722:       ComponentFactory.createModalDialog (
   723:         XEiJ.frmFrame,
   724:         "Open SCSI Hard Disk / CD-ROM Images",
   725:         ComponentFactory.createBorderPanel (
   726:           0, 0,
   727:           ComponentFactory.createVerticalBox (
   728:             spcOpenFileChooser,
   729:             ComponentFactory.createHorizontalBox (
   730:               Box.createHorizontalStrut (12),
   731:               Box.createHorizontalGlue (),
   732:               Multilingual.mlnText (ComponentFactory.createCheckBox (spcOpenWriteProtect, "Write-Protect", listener), "ja", "書き込み禁止"),
   733:               Box.createHorizontalGlue (),
   734:               Multilingual.mlnText (ComponentFactory.createButton ("Reboot from it", KeyEvent.VK_R, listener), "ja", "ここから再起動"),
   735:               Box.createHorizontalStrut (12),
   736:               Multilingual.mlnText (ComponentFactory.createButton ("Open", KeyEvent.VK_O, listener), "ja", "開く"),
   737:               Box.createHorizontalStrut (12),
   738:               Multilingual.mlnText (ComponentFactory.createButton ("Cancel", KeyEvent.VK_C, listener), "ja", "キャンセル"),
   739:               Box.createHorizontalStrut (12)
   740:               ),
   741:             Box.createVerticalStrut (12)
   742:             )
   743:           )
   744:         ),
   745:       "ja", "SCSI ハードディスク / CD-ROM イメージを開く");
   746:   }  //spcMakeOpenDialog()
   747: 
   748:   //spcOpenFiles (list, reset)
   749:   //  開くダイアログで選択されたファイルを開く
   750:   //  コマンドラインのみ
   751:   public static void spcOpenFiles (File[] list, boolean reset) {
   752:     for (int u = spcOpenUnit, k = 0; k < list.length; ) {
   753:       if (u >= 16) {
   754:         reset = false;  //ユニットが足りないときはリセットをキャンセルする
   755:         break;
   756:       }
   757:       SCUnit unit = spcUnitArray[u];  //ユニット
   758:       if (!unit.abuConnected) {  //接続されていない
   759:         u++;
   760:         continue;
   761:       }
   762:       File file = list[k++];  //イメージファイル
   763:       if (!file.isFile ()) {  //ファイルが存在しない
   764:         reset = false;  //ファイルが存在しないときはリセットをキャンセルする
   765:         continue;
   766:       }
   767:       if (unit.insert (file.getPath ())) {  //挿入できた
   768:         if (spcOpenWriteProtect || !file.canWrite ()) {  //書き込みを禁止する
   769:           unit.protect (false);  //開くときに書き込みを禁止した場合はイジェクトするまで書き込みを許可できない
   770:         }
   771:         spcLastFile = file;  //最後にアクセスしたファイル
   772:         u++;
   773:       } else {
   774:         reset = false;  //挿入できないファイルがあったときはリセットをキャンセルする
   775:       }
   776:     }
   777:     if (reset) {
   778:       if (spcOpenUnit < 8) {
   779:         XEiJ.mpuReset (0xa000, SPC_HANDLE_EX + (spcOpenUnit << 2));  //拡張SCSIがなければ内蔵SCSIに読み替えられる
   780:       }
   781:     }
   782:   }  //spcOpenFiles(File[],boolean)
   783: 
   784:   //spcMakeFormatDialog ()
   785:   //  フォーマットダイアログを作る
   786:   //  コマンドラインのみ
   787:   public static void spcMakeFormatDialog () {
   788: 
   789:     //アクションリスナー
   790:     ActionListener listener = new ActionListener () {
   791:       @Override public void actionPerformed (ActionEvent ae) {
   792:         switch (ae.getActionCommand ()) {
   793:         case JFileChooser.APPROVE_SELECTION:
   794:         case "Start Formatting":  //フォーマットを開始する
   795:           {
   796:             File[] list = spcFormatFileChooser.getSelectedFiles2 ();
   797:             if (list.length > 0) {
   798:               spcFormatDialog.setVisible (false);
   799:               spcFormatFiles (list);
   800:             }
   801:           }
   802:           break;
   803:         case JFileChooser.CANCEL_SELECTION:
   804:         case "Cancel":  //キャンセル
   805:           spcFormatDialog.setVisible (false);
   806:           break;
   807:         case "256 bytes":  //256 バイト
   808:           spcFormatBytesPerRecord = 256;
   809:           break;
   810:         case "512 bytes":  //512 バイト
   811:           spcFormatBytesPerRecord = 512;
   812:           break;
   813:         case "Partitioning":
   814:           spcFormatPartitioningOn = spcFormatPartitioningCheckBox.isSelected ();  //領域確保
   815:           if (spcFormatPartitioningOn) {  //領域確保する
   816:             spcFormatCopyHumanSysCheckBox.setEnabled (true);  //HUMAN.SYSを書き込むかどうか選択できる
   817:             spcFormatCopyHumanSysCheckBox.setSelected (spcFormatCopyHumanSysOn);  //HUMAN.SYSを書き込む/書き込まない
   818:           } else {  //領域確保しない
   819:             spcFormatCopyHumanSysCheckBox.setEnabled (false);  //HUMAN.SYSを書き込むかどうか選択できない
   820:             spcFormatCopyHumanSysCheckBox.setSelected (false);  //HUMAN.SYSを書き込まない
   821:           }
   822:           if (spcFormatPartitioningOn && spcFormatCopyHumanSysOn) {  //領域確保してHUMAN.SYSを書き込む
   823:             spcFormatCopyCommandXCheckBox.setEnabled (true);  //COMMAND.Xを書き込むかどうか選択できる
   824:             spcFormatCopyCommandXCheckBox.setSelected (spcFormatCopyCommandXOn);  //COMMAND.Xを書き込む/書き込まない
   825:           } else {  //領域確保しないかHUMAN.SYSを書き込まない
   826:             spcFormatCopyCommandXCheckBox.setEnabled (false);  //COMMAND.Xを書き込むかどうか選択できない
   827:             spcFormatCopyCommandXCheckBox.setSelected (false);  //COMMAND.Xを書き込まない
   828:           }
   829:           break;
   830:           //case "Copy System Files":  //システムファイルを転送する
   831:           //  spcFormatCopySystemFiles = ((JCheckBox) ae.getSource ()).isSelected ();
   832:           //  break;
   833:         case "HUMAN.SYS":
   834:           spcFormatCopyHumanSysOn = spcFormatCopyHumanSysCheckBox.isSelected ();  //HUMAN.SYSを書き込む/書き込まない
   835:           if (spcFormatCopyHumanSysOn) {  //HUMAN.SYSを書き込む
   836:             spcFormatCopyCommandXCheckBox.setEnabled (true);  //COMMAND.Xを書き込むかどうか選択できる
   837:             spcFormatCopyCommandXCheckBox.setSelected (spcFormatCopyCommandXOn);  //COMMAND.Xを書き込む/書き込まない
   838:           } else {  //HUMAN.SYSを書き込まない
   839:             spcFormatCopyCommandXCheckBox.setEnabled (false);  //COMMAND.Xを書き込むかどうか選択できない
   840:             spcFormatCopyCommandXCheckBox.setSelected (false);  //COMMAND.Xを書き込まない
   841:           }
   842:           break;
   843:         case "COMMAND.X":
   844:           spcFormatCopyCommandXOn = spcFormatCopyCommandXCheckBox.isSelected ();  //COMMAND.Xを書き込む/書き込まない
   845:           break;
   846:         }
   847:       }
   848:     };
   849: 
   850:     //ファイルチューザー
   851:     spcFormatFileChooser = new JFileChooser2 (spcLastFile);
   852:     spcFormatFileChooser.setFileFilter (spcFormatFilter);
   853:     //spcFormatFileChooser.setMultiSelectionEnabled (true);  //複数選択可能
   854:     spcFormatFileChooser.setControlButtonsAreShown (false);  //デフォルトのボタンを消す
   855:     spcFormatFileChooser.addActionListener (listener);
   856: 
   857:     //ダイアログ
   858:     spcFormatModel = new SpinnerNumberModel (spcFormatPartitionMegaBytes, 1, 2047, 1);
   859:     ButtonGroup sectorGroup = new ButtonGroup ();
   860:     spcFormatDialog = Multilingual.mlnTitle (
   861:       ComponentFactory.createModalDialog (
   862:         XEiJ.frmFrame,
   863:         "Create New SCSI Hard Disk Images",
   864:         ComponentFactory.createBorderPanel (
   865:           0, 0,
   866:           ComponentFactory.createVerticalBox (
   867:             spcFormatFileChooser,
   868:             ComponentFactory.createHorizontalBox (
   869:               Box.createHorizontalStrut (12),
   870:               Box.createHorizontalGlue (),
   871:               Multilingual.mlnText (ComponentFactory.createLabel ("Capacity (MB): "), "ja", "容量 (MB): "),
   872:               ComponentFactory.createNumberSpinner (spcFormatModel, 4, new ChangeListener () {
   873:                 @Override public void stateChanged (ChangeEvent ce) {
   874:                   spcFormatPartitionMegaBytes = spcFormatModel.getNumber ().intValue ();
   875:                 }
   876:               }),
   877:               Box.createHorizontalGlue (),
   878:               Multilingual.mlnText (ComponentFactory.createLabel ("Sector Size: "), "ja", "セクタサイズ: "),
   879:               Multilingual.mlnText (ComponentFactory.createRadioButtonMenuItem (sectorGroup, spcFormatBytesPerRecord == 256, "256 bytes", listener), "ja", "256 バイト"),
   880:               Multilingual.mlnText (ComponentFactory.createRadioButtonMenuItem (sectorGroup, spcFormatBytesPerRecord == 512, "512 bytes", listener), "ja", "512 バイト"),
   881:               Box.createHorizontalStrut (12),
   882:               Multilingual.mlnText (spcFormatPartitioningCheckBox = ComponentFactory.createCheckBox (spcFormatPartitioningOn, "Partitioning", listener), "ja", "領域確保"),
   883:               Box.createHorizontalGlue (),
   884:               Box.createHorizontalStrut (12)
   885:               ),
   886:             Box.createVerticalStrut (12),
   887:             ComponentFactory.createHorizontalBox (
   888:               Box.createHorizontalStrut (12),
   889:               Box.createHorizontalGlue (),
   890:               //Multilingual.mlnText (ComponentFactory.createCheckBox (spcFormatCopySystemFiles, "Copy System Files", listener), "ja", "システムファイルを転送する"),
   891:               spcFormatCopyHumanSysCheckBox = ComponentFactory.setEnabled (
   892:                 ComponentFactory.createCheckBox (spcFormatCopyHumanSysOn, "HUMAN.SYS", listener),
   893:                 spcFormatPartitioningOn),
   894:               Box.createHorizontalStrut (12),
   895:               spcFormatCopyCommandXCheckBox = ComponentFactory.setEnabled (
   896:                 ComponentFactory.createCheckBox (spcFormatCopyHumanSysOn && spcFormatCopyCommandXOn, "COMMAND.X", listener),
   897:                 spcFormatPartitioningOn && spcFormatCopyHumanSysOn),
   898:               Box.createHorizontalGlue (),
   899:               Box.createHorizontalStrut (12),
   900:               Multilingual.mlnText (ComponentFactory.createButton ("Start Formatting", KeyEvent.VK_F, listener), "ja", "フォーマットを開始する"),
   901:               Box.createHorizontalStrut (12),
   902:               Multilingual.mlnText (ComponentFactory.createButton ("Cancel", KeyEvent.VK_C, listener), "ja", "キャンセル"),
   903:               Box.createHorizontalStrut (12)
   904:               ),
   905:             Box.createVerticalStrut (12)
   906:             )
   907:           )
   908:         ),
   909:       "ja", "SCSI ハードディスクイメージの新規作成");
   910: 
   911:   }  //spcMakeFormatDialog()
   912: 
   913:   //spcOpenFormatDialog ()
   914:   //  フォーマットダイアログを開く
   915:   public static void spcOpenFormatDialog () {
   916:     if (spcFormatDialog == null) {
   917:       spcMakeFormatDialog ();
   918:     }
   919:     spcFormatFileChooser.setSelectedFile (spcLastFile);  //最後にアクセスしたファイルを設定する
   920:     spcFormatDialog.setVisible (true);
   921:   }  //spcOpenFormatDialog()
   922: 
   923:   //success = spcFormatFiles (list)
   924:   //  SCSIハードディスクのイメージファイルを作成する
   925:   //  コマンドラインのみ
   926:   //  spcFormatPartitionMegaBytes
   927:   //  spcFormatBytesPerRecord
   928:   //  //spcFormatCopySystemFiles
   929:   //  spcFormatPartitioningOn
   930:   //  spcFormatCopyHumanSysOn
   931:   //  spcFormatCopyCommandXOn
   932:   //  を設定しておくこと
   933:   public static boolean spcFormatFiles (File[] list) {
   934:     SCMedia media = new SCMedia (spcFormatBytesPerRecord,  //bytesPerRecord
   935:                                  (int) ((32768L + ((long) spcFormatPartitionMegaBytes << 20)) / spcFormatBytesPerRecord));  //diskEndRecord
   936:     //データ用の配列
   937:     //  セクタ0から先頭のパーティションのシステムファイルまでのデータがすべて収まるサイズであること
   938:     //  パーティションの手前に32KB、IPLが1KB、FATが最大で128KB、ルートディレクトリが16KB、HUMAN.SYSが58KB、COMMAND.Xが28KB
   939:     byte[] bb = new byte[1024 * 512];  //データ用の配列。512KB
   940:     //media.scmMakeFormatData (bb, spcFormatPartitioningOn, spcFormatCopySystemFiles);
   941:     media.scmMakeFormatData (bb, spcFormatPartitioningOn, spcFormatCopyHumanSysOn, spcFormatCopyCommandXOn);
   942: /*
   943:     //クリア用の配列
   944:     //  データを出力したら配列をクリアしてしまえば配列は1個で足りるが、それだと複数のファイルを続けてフォーマットできないので、データ用の配列とクリア用の配列を分ける
   945:     byte[] zz = new byte[step];  //クリア用
   946:     Arrays.fill (zz, (byte) 0);
   947: */
   948:     //イメージファイルを作成する
   949:     int u = 0;
   950:     for (File file : list) {
   951:       String path = file.getPath ();
   952:       if (true) {
   953:         if (!path.toUpperCase ().endsWith (".HDS")) {  //適切な拡張子が指定されていない
   954:           path += path.endsWith (".") ? "hds" : ".hds";  //拡張子を付ける
   955:           file = new File (path);
   956:         }
   957:       }
   958:       if (spcIsInserted (path)) {  //既に挿入されている
   959:         return false;
   960:       }
   961:       if (!XEiJ.ismSave (bb, 0, media.humDiskEndByte, path, true)) {  //バッファからはみ出す部分はゼロクリアされる
   962:         return false;
   963:       }
   964: /*
   965:       String pathTmp = path + ".tmp";
   966:       String pathBak = path + ".bak";
   967:       File fileTmp = new File (pathTmp);
   968:       File fileBak = new File (pathBak);
   969:       //fileTmpが存在していたら削除する
   970:       if (fileTmp.exists ()) {
   971:         fileTmp.delete ();
   972:         if (fileTmp.exists ()) {
   973:           JOptionPane.showMessageDialog (null, Multilingual.mlnJapanese ? pathTmp + " を削除できません" : "Cannot delete " + pathTmp);
   974:           return false;
   975:         }
   976:       }
   977:       //fileTmpに出力する
   978:       try (OutputStream out = new BufferedOutputStream (new FileOutputStream (fileTmp))) {  //try-with-resourcesは1.7から
   979:         long pos;
   980:         for (pos = 0L; pos + step <= media.humDiskEndByte; pos += step) {
   981:           out.write (pos == 0L ? bb : zz);
   982:         }
   983:         if (pos < media.humDiskEndByte) {
   984:           out.write (pos == 0L ? bb : zz, 0, (int) (media.humDiskEndByte - pos));
   985:         }
   986:       } catch (IOException ioe) {
   987:       }
   988:       if (fileTmp.length () != media.humDiskEndByte) {  //File.length()はファイルが存在しなくてもエラーにならず0Lを返す
   989:         JOptionPane.showMessageDialog (null, Multilingual.mlnJapanese ? pathTmp + " を作成できません" : "Cannot create " + pathTmp);
   990:         fileTmp.delete ();
   991:         return false;
   992:       }
   993:       //fileが存在していたらfileをfileBakにリネームする
   994:       if (file.exists ()) {
   995:         if (fileBak.exists ()) {
   996:           fileBak.delete ();  //java.io.FileのrenameToはPerlと違って上書きしてくれないので明示的に削除する必要がある
   997:           if (fileBak.exists ()) {
   998:             JOptionPane.showMessageDialog (null, Multilingual.mlnJapanese ? pathBak + " を削除できません" : "Cannot delete " + pathBak);
   999:             return false;
  1000:           }
  1001:         }
  1002:         file.renameTo (fileBak);
  1003:         if (file.exists () || !fileBak.exists ()) {
  1004:           JOptionPane.showMessageDialog (null, Multilingual.mlnJapanese ? path + " を " + pathBak + " にリネームできません" : "Cannot rename " + path + " to " + pathBak);
  1005:           return false;
  1006:         }
  1007:       }
  1008:       //fileTmpをfileにリネームする
  1009:       fileTmp.renameTo (file);
  1010:       if (fileTmp.exists () || !file.exists ()) {
  1011:         JOptionPane.showMessageDialog (null, Multilingual.mlnJapanese ? pathTmp + " を " + path + " にリネームできません" : "Cannot rename " + pathTmp + " to " + path);
  1012:         return false;
  1013:       }
  1014:       //完成
  1015: */
  1016:       spcLastFile = file;
  1017:       //空いているユニットがあれば挿入する
  1018:       while (u < 16) {
  1019:         SCUnit unit = spcUnitArray[u++];  //ユニット
  1020:         if (unit.abuConnected && !unit.abuInserted) {  //接続されていて挿入されていない
  1021:           unit.insert (path);  //挿入する
  1022:           break;  //挿入に失敗しても終了する
  1023:         }
  1024:       }
  1025:     }
  1026:     return true;
  1027:   }  //spcFormatFiles(File[])
  1028: 
  1029:   //spcSetFat (bb, fatOffset, fat12, cluster, next)
  1030:   //  FATに書く
  1031:   public static void spcSetFat (byte[] bb, int fatOffset, boolean fat12, int cluster, int next) {
  1032:     if (fat12) {
  1033:       int i = fatOffset + 3 * (cluster >> 1);
  1034:       if ((cluster & 1) == 0) {  //偶数クラスタ(HML→ML.H..)
  1035:         bb[i    ] = (byte) next;  //ML。next&0x0ff
  1036:         bb[i + 1] = (byte) (bb[i + 1] & 0xf0 | next >> 8 & 15);  //.H。(next&0xf00)>>8
  1037:       } else {  //奇数クラスタ(hml→..l.hm)
  1038:         bb[i + 1] = (byte) (next << 4 | bb[i + 1] & 15);  //l.。(next&0x00f)<<4
  1039:         bb[i + 2] = (byte) (next >> 4);  //hm。(next&0xff0)>>4
  1040:       }
  1041:     } else {
  1042:       int i = fatOffset + (cluster << 1);
  1043:       bb[i    ] = (byte) (next >> 8);
  1044:       bb[i + 1] = (byte) next;
  1045:     }
  1046:   }  //spcSetFat(byte[],int,boolean,int,int)
  1047: 
  1048:   //spcIsHds (file, formatted)
  1049:   //  ファイルはHDSか
  1050:   //  formatted  false=拡張子がHDSならばファイルが存在しなくてもよい,true=拡張子がHDSで装置初期化されていなければならない
  1051:   public static boolean spcIsHds (File file, boolean formatted) {
  1052:     String upperName = file.getName ().toUpperCase ();
  1053:     boolean yes = (upperName.endsWith (".HDS") ||  //拡張子がHDS
  1054:                    upperName.endsWith (".DIM.001"));  //拡張子がDIM.001
  1055:     if (yes && formatted) {
  1056:       long fileLength = file.length ();  //ファイルサイズ
  1057:       yes = ((byte) fileLength == 0 &&  //ファイルサイズが256で割り切れる
  1058:              1024L * 64 <= fileLength);  //ファイルサイズが64KB以上
  1059:       if (yes) {
  1060:         byte[] bb = new byte[16];
  1061:         try (BufferedInputStream in = new BufferedInputStream (new FileInputStream (file))) {  //try-with-resourcesは1.7から
  1062:           yes = (XEiJ.ismRead (in, bb, 0, 16) == 16 &&  //セクタ0の先頭16バイトを読み込める
  1063:                  ByteArray.byaRls (bb, 0) == 0x58363853 && ByteArray.byaRls (bb, 4) == 0x43534931);  //セクタ0の先頭8バイトにX68SCSI1マジックがある
  1064:         } catch (IOException ioe) {
  1065:           yes = false;
  1066:         }
  1067:         if (yes) {
  1068:           int bytesPerRecord = ByteArray.byaRwz (bb, 8);  //1レコードあたりのバイト数(2の累乗)
  1069:           int diskEndRecord = ByteArray.byaRls (bb, 10);  //ディスクのレコード数
  1070:           long diskEndByte = (long) bytesPerRecord * diskEndRecord;  //ディスクのバイト数
  1071:           yes = ((bytesPerRecord == 256 ||
  1072:                   bytesPerRecord == 512) &&  //1レコードあたりのバイト数(2の累乗)が256または512
  1073:                  diskEndRecord >= 0 &&  //ディスクのレコード数が31bitに収まっている
  1074:                  (diskEndByte == fileLength ||  //装置初期化で記録された容量とファイルサイズが一致している
  1075:                   //FORMAT.XはRead Capacityが返す最終論理ブロックアドレスを論理ブロック数と解釈して1ブロック少ない容量で装置初期化を行う
  1076:                   diskEndByte + bytesPerRecord == fileLength ||
  1077:                   1024L * (diskEndRecord + 1) == fileLength));  //SxSIの場合
  1078:         }
  1079:       }
  1080:     }
  1081:     return yes;
  1082:   }  //spcIsHds(File,boolean)
  1083: 
  1084:   //spcIsIso (file)
  1085:   //  ファイルはISOか
  1086:   //  参考
  1087:   //    http://euc.jp/periphs/iso9660.ja.html
  1088:   public static boolean spcIsIso (File file) {
  1089:     String upperName = file.getName ().toUpperCase ();
  1090:     boolean yes = upperName.endsWith (".ISO");  //拡張子がISO
  1091:     if (yes) {
  1092:       long fileLength = file.length ();  //ファイルサイズ
  1093:       yes = (((int) fileLength & 2047) == 0 &&  //ファイルサイズが2048で割り切れる
  1094:              2048L * 18 <= fileLength);  //ファイルサイズが18セクタ以上
  1095:       if (yes) {
  1096:         byte[] bb = new byte[2048];
  1097:         try (BufferedInputStream in = new BufferedInputStream (new FileInputStream (file))) {  //try-with-resourcesは1.7から
  1098:           XEiJ.ismSkip (in, 2048 * 16);  //セクタ16まで読み飛ばす
  1099:           yes = (XEiJ.ismRead (in, bb, 0, 2048) == 2048 &&  //ボリューム記述子を読み込めた
  1100:                  ByteArray.byaRqs (bb, 0) >>> 8 == 0x0143443030310100L >>> 8);  //ボリューム記述子種別と規格識別子とボリューム記述子版数が一致した
  1101:         } catch (IOException ioe) {
  1102:           yes = false;
  1103:         }
  1104:         if (yes) {
  1105:           int bytesPerRecord = ByteArray.byaRwz (bb, 130);  //ブロックのバイト数
  1106:           int diskEndRecord = ByteArray.byaRls (bb, 84);  //ボリュームのブロック数
  1107:           long diskEndByte = (long) bytesPerRecord * diskEndRecord;  //ボリュームのバイト数
  1108:           yes = (bytesPerRecord == 2048 &&  //ブロックのバイト数が2048
  1109:                  diskEndRecord >= 0 &&  //ボリュームのブロック数が31bitに収まっている
  1110:                  diskEndByte <= fileLength);  //ボリュームのバイト数がファイルサイズ以下。一致しているとは限らない
  1111:         }
  1112:       }
  1113:     }
  1114:     return yes;
  1115:   }  //spcIsIso(File)
  1116: 
  1117:   //bb = spcMakeSCSIROM (type)
  1118:   //  SCSIINROMとSCSIEXROMを作る
  1119:   //  type  0=拡張SCSI(SCSIEXROM),1=内蔵SCSI(SCSIINROM)
  1120:   public static final byte[][] spcSCSIROMImage = new byte[2][];
  1121:   public static byte[] spcMakeSCSIROM (int type) {
  1122: 
  1123:     byte[] bb = spcSCSIROMImage[type];  //0=拡張SCSI,1=内蔵SCSI
  1124:     if (bb != null) {  //作成済み
  1125:       return bb;
  1126:     }
  1127: 
  1128:     //IPLROM30.DATを読み込む
  1129:     byte[] rr = XEiJ.ismGetResource ("IPLROM30.DAT");  //IPLROM30.DATをリソースから読み込む
  1130:     if (rr == null) {  //読み込めない
  1131:       return null;
  1132:     }
  1133:     //パッチをあてる
  1134:     //  埋め込むコード
  1135:     for (int i = 0; i < XEiJ.ROM_PATCH13_DATA.length; ) {
  1136:       int a = ByteArray.byaRls (XEiJ.ROM_PATCH13_DATA, i);  //埋め込むアドレス(0=終了)
  1137:       if (a == 0) {
  1138:         break;
  1139:       }
  1140:       int l = ByteArray.byaRls (XEiJ.ROM_PATCH13_DATA, i + 4);  //埋め込むコードの長さ
  1141:       System.arraycopy (XEiJ.ROM_PATCH13_DATA, i + 8, rr, a - 0x00fe0000, l);
  1142:       i += 8 + l;
  1143:     }
  1144:     //  追加するコード
  1145:     System.arraycopy (XEiJ.ROM_PATCH13_TEXT, 0, rr, XEiJ.ROM_PATCH13_BASE - 0x00fe0000, XEiJ.ROM_PATCH13_TEXT.length);
  1146: 
  1147:     bb = new byte[8192];
  1148: 
  1149:     final int[] cacheFlushCode = new int[] {
  1150:       0x0c38, 0x0002, 0x0cbc,  //          cmpi.b  #$02,$0CBC.w
  1151:       0x6520,                  //          bcs.s   1f
  1152:       0x0c38, 0x0004, 0x0cbc,  //          cmpi.b  #$04,$0CBC.w
  1153:       0x641a,                  //          bcc.s   2f
  1154:       0x2f00,                  //          move.l  d0,-(sp)
  1155:       0x4e7a, 0x0002,          //          movec.l cacr,d0
  1156:       0x807c, 0x0808,          //          or.w    #$0808,d0
  1157:       0x4e7b, 0x0002,          //          movec.l d0,cacr
  1158:       0xc07c, 0xf7f7,          //          and.w   #$F7F7,d0
  1159:       0x4e7b, 0x0002,          //          movec.l d0,cacr
  1160:       0x201f,                  //          move.l  (sp)+,d0
  1161:       0x4e75,                  //  1:      rts
  1162:       0xf4f8,                  //  2:      cpusha  bc
  1163:       0x4e75,                  //          rts
  1164:     };
  1165: 
  1166:     //マップ
  1167:     final int romDst = type == 0 ? 0x00ea0000 : 0x00fc0000;  //0=拡張SCSI,1=内蔵SCSI
  1168:     final int headDst = romDst + (type == 0 ? 0x0020 : 0x0000);  //SCSI ROMのヘッダ。0=拡張SCSI,1=内蔵SCSI
  1169:     final int headLen = 0x002c + 64;
  1170:     final int trap11Dst = headDst + headLen;  //TRAP#11ルーチン
  1171:     final int trap11Src = 0x00ff1b20;
  1172:     final int trap11Len = 0x00ff1b5e - trap11Src;
  1173:     final int cacheFlushDst = trap11Dst + trap11Len;  //DMA転送時のMPUキャッシュ制御ルーチン
  1174:     //final int cacheFlushSrc = 0x00ff8284;
  1175:     //final int cacheFlushLen = 0x00ff82a6 - cacheFlushSrc;
  1176:     final int cacheFlushLen = 2 * cacheFlushCode.length;
  1177:     final int iplDst = cacheFlushDst + cacheFlushLen;  //SCSI ROM起動ルーチン
  1178:     final int iplSrc = 0x00ff9098;
  1179:     final int iplLen = 0x00ff96ae - iplSrc;
  1180:     final int iocsDst = iplDst + iplLen;  //SCSI IOCS
  1181:     final int iocsSrc = 0x00ffccb8;
  1182:     final int iocsLen = 0x00ffdce4 - iocsSrc;
  1183:     final int dar1sasiDst = iocsDst + iocsLen;  //DMA1のDARをSASIに戻す処理
  1184:     final int dar1sasiLen = 12;
  1185:     final int initDst = dar1sasiDst + dar1sasiLen;  //新しいSCSIポート初期化ルーチン
  1186:     final int initLen = 0x0146;
  1187:     final int tailDst = initDst + initLen;  //残り
  1188:     final int tailLen = bb.length - (tailDst - romDst);
  1189: 
  1190:     //SCSI ROMのヘッダ(0x00fc0000~0x00fc002aまたは0x00ea0020~0x00ea004a)
  1191:     //  SCSI ROM起動ルーチンのハンドル
  1192:     for (int i = 0; i < 8; i++) {
  1193:       ByteArray.byaWl (bb, headDst + (i << 2) - romDst, 0x00ff935a - iplSrc + iplDst);
  1194:     }
  1195:     //  SCSIポート初期化ルーチンのハンドル
  1196:     ByteArray.byaWl (bb, headDst + 0x0020 - romDst, 0x00ff9340 - iplSrc + iplDst);
  1197:     //  SCSIEXフラグ/SCSIINフラグ
  1198:     ByteArray.byaWstr (bb, headDst + 0x0024 - romDst, type == 0 ? "SCSIEX" : "SCSIIN");  //0=拡張SCSI,1=内蔵SCSI
  1199:     //  レベル
  1200:     ByteArray.byaWw (bb, headDst + 0x002a - romDst, 10);
  1201:     //  メッセージ
  1202:     ByteArray.byaWstr (bb, headDst + 0x002c - romDst,
  1203:                        //         111111111122222222223333333333444444444455555555556666
  1204:                        //123456789012345678901234567890123456789012345678901234567890123
  1205:                        //   0123456789abcdef0123456789abcdef0123456789abcdef0123456789ab
  1206:                        "XEiJDon't extract this SCSI ROM image derived from IPLROM30.DAT.");  //64文字
  1207: 
  1208:     //TRAP#11ルーチン(0x00ff1b20~0x00ff1b5e)
  1209:     //  IPLROM30.DATのコードを持ってくる
  1210:     System.arraycopy (rr, trap11Src - 0x00fe0000, bb, trap11Dst - romDst, trap11Len);
  1211:     //  _B_EJECTの呼び出しを変更する
  1212:     //    00ff1b4e  6100 xxxx                 bsr.w   $00FF8D48               ;IOCS _B_EJECT
  1213:     //    00ff1b4e  704F 4E4F                 IOCS    _B_EJECT
  1214:     final int callBEjectDst = 0x00ff1b4e - trap11Src + trap11Dst;
  1215:     ByteArray.byaWl (bb, callBEjectDst - romDst, 0x704f4e4f);
  1216:     //! 未対応
  1217:     //  SCSIポートに接続されているSASIハードディスクを内蔵SASIと同じ手順でアクセスできるようにする
  1218:     //    00ff1b4e  6100 xxxx                 bsr.w   b_eject
  1219: 
  1220:     //DMA転送時のMPUキャッシュ制御ルーチン(0x00ff8284~0x00ff82a6)
  1221:     //  IPLROM30.DATのコードを持ってくる代わりにパッチをあてたコードを直接埋め込む
  1222:     //System.arraycopy (rr, cacheFlushSrc - 0x00fe0000, bb, cacheFlushDst - romDst, cacheFlushLen);
  1223:     ByteArray.byaWwArray (bb, cacheFlushDst - romDst, cacheFlushCode);
  1224: 
  1225:     //SCSI ROM起動ルーチン(0x00ff9098~0x00ff96ae)
  1226:     //  IPLROM30.DATのコードを持ってくる
  1227:     System.arraycopy (rr, iplSrc - 0x00fe0000, bb, iplDst - romDst, iplLen);
  1228:     //  SCSIポートベースアドレスを内蔵SCSIと拡張SCSIで振り分ける
  1229:     //    00FF933C  00E9 6020                 .dc.l   $00E96020               ;SCSIポートベースアドレス
  1230:     final int scsiPortBaseDst = 0x00ff933c - iplSrc + iplDst;
  1231:     ByteArray.byaWl (bb, scsiPortBaseDst - romDst, type == 0 ? 0x00ea0000 : 0x00e96020);  //0=拡張SCSI,1=内蔵SCSI
  1232:     //  SCSIポート初期化ルーチンを差し替える
  1233:     //    00FF9340  6100 xxxx                 bsr.w   $00FF9098               ;SCSIポート初期化ルーチン
  1234:     //    00FF9340  6100 xxxx                 bsr.w   initDst                 ;新しいSCSIポート初期化ルーチン
  1235:     final int callInit1Dst = 0x00ff9340 - iplSrc + iplDst;
  1236:     ByteArray.byaWl (bb, callInit1Dst - romDst, 0x61000000 | 65535 & initDst - (0x00ff9340 + 2 - iplSrc + iplDst));
  1237:     //  SCSIデバイスドライバ組み込みルーチンのハンドルをリロケートする
  1238:     //    00FF934A  00FF 94BE                 .dc.l   $00FF94BE               ;SCSIデバイスドライバ組み込みルーチン
  1239:     final int driverHandleDst = 0x00ff934a - iplSrc + iplDst;
  1240:     ByteArray.byaWl (bb, driverHandleDst - romDst, 0x00ff94be - iplSrc + iplDst);
  1241:     //  IOCS _SCSIDRVルーチンのハンドルをリロケートする
  1242:     //    00FF934E  00FF CCB8                 .dc.l   $00FFCCB8               ;IOCS _SCSIDRVルーチン
  1243:     final int scsidrvHandleDst = 0x00ff934e - iplSrc + iplDst;
  1244:     ByteArray.byaWl (bb, scsidrvHandleDst - romDst, 0x00ffccb8 - iocsSrc + iocsDst);
  1245:     //  SCSIポート初期化ルーチンを差し替える
  1246:     //    00FF9366  6100 xxxx                 bsr.w   $00FF9098               ;SCSIポート初期化ルーチン
  1247:     //    00FF9366  6100 xxxx                 bsr.w   initDst                 ;新しいSCSIポート初期化ルーチン
  1248:     final int callInit2Dst = 0x00ff9366 - iplSrc + iplDst;
  1249:     ByteArray.byaWl (bb, callInit2Dst - romDst, 0x61000000 | 65535 & initDst - (0x00ff9366 + 2 - iplSrc + iplDst));
  1250:     //  SCSIデバイスドライバ組み込みルーチンで本体と同じSCSI-IDの機器がないか確認する前にIOCS _SCSIDRVを登録する
  1251:     //    00FF94C4  4A80                      tst.l   d0
  1252:     //    00FF94C6  6B08                      bmi.s   $00FF94D0
  1253:     //    00FF94C8  1E00                      move.b  d0,d7                   ;起動するSCSI-ID
  1254:     //    00FF94CA  0C40 0008                 cmpi.w  #$0008,d0
  1255:     //    00FF94CE  6502                      bcs.s   $00FF94D2
  1256:     //    00FF94D0  7EFF                      moveq.l #$FF,d7
  1257:     //    00FF94D2
  1258:     //    tst.l d0は不要。d0は破壊できるのでcmpi.w #8,d0はsubq.w #8,d0に変更可能。2ワード空けて初期化ルーチンを呼び出す
  1259:     //    00FF94C4  6B06                      bmi.s   $00FF94CC
  1260:     //    00FF94C6  1E00                      move.b  d0,d7                   ;起動するSCSI-ID
  1261:     //    00FF94C8  5140                      subq.w  #$08,d0
  1262:     //    00FF94CA  6502                      bcs.s   $00FF94CE
  1263:     //    00FF94CC  7EFF                      moveq.l #$FF,d7
  1264:     //    00FF94CE  6100 xxxx                 bsr.w   initDst                 ;新しいSCSIポート初期化ルーチン
  1265:     //    00FF94D2
  1266:     final int checkIdDst = 0x00ff94c4 - iplSrc + iplDst;
  1267:     ByteArray.byaWwArray (bb, checkIdDst - romDst, new int[] {
  1268:       0x6b06, 0x1e00, 0x5140, 0x6502, 0x7eff, 0x6100, initDst - (0x00ff94ce + 2 - iplSrc + iplDst),
  1269:     });
  1270: 
  1271:     //SCSI IOCS(0x00ffccb8~0x00ffdce4)
  1272:     //  IPLROM30.DATのコードを持ってくる
  1273:     System.arraycopy (rr, iocsSrc - 0x00fe0000, bb, iocsDst - romDst, iocsLen);
  1274:     //  _S_RESETのバスリセットの後の待ち時間(2秒)はエミュレータでは不要
  1275:     //    00FFCEB0  203C00009C40  move.l #$00009C40,d0  →  203C0000000D  move.l #$0000000D,d0
  1276:     final int twoSecondsDst = 0x00ffceb2 - iocsSrc + iocsDst;
  1277:     if (ByteArray.byaRls (bb, twoSecondsDst - romDst) == 0x00009c40) {
  1278:       ByteArray.byaWl (bb, twoSecondsDst - romDst, 0x0000000d);
  1279:     }
  1280:     //  SCSI割り込みベクタ番号を内蔵SCSIと拡張SCSIで振り分ける
  1281:     //    00FFCE88  706C                      moveq.l #$6C,d1                 ;SCSI割り込みベクタ番号(内蔵SCSI)
  1282:     //    00FFCE88  70F6                      moveq.l #$F6,d1                 ;SCSI割り込みベクタ番号(拡張SCSI)
  1283:     final int vectorDst = 0x00ffce88 - iocsSrc + iocsDst;
  1284:     ByteArray.byaWw (bb, vectorDst - romDst, type == 0 ? 0x70f6 : 0x706c);  //0=拡張SCSI,1=内蔵SCSI
  1285:     //  DMA転送時のMPUキャッシュ制御ルーチンの呼び出しをリロケートする
  1286:     //    00FFDBD8  6100 xxxx                 bsr.w   $00FF8284               ;DMA転送時のMPUキャッシュ制御ルーチン
  1287:     //ByteArray.byaWw (bb, 0x00ffdbd8 + 2 - iocsSrc + iocsDst - romDst, 0x00ff8284 - cacheFlushSrc + cacheFlushDst - (0x00ffdbd8 + 2 - iocsSrc + iocsDst));
  1288:     final int callCacheFlushDst = 0x00ffdbd8 - iocsSrc + iocsDst;
  1289:     ByteArray.byaWl (bb, callCacheFlushDst - romDst, 0x61000000 | 65535 & cacheFlushDst - (0x00ffdbd8 + 2 - iocsSrc + iocsDst));
  1290:     //  SCSIポートベースアドレスの参照をリロケートする
  1291:     //
  1292:     //  パッチをあてていないとき
  1293:     //    00FFCCF0  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコールを呼び出す直前
  1294:     //  パッチをあてたとき
  1295:     //    00FFCCBC  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコールを呼び出す直前
  1296:     //
  1297:     //    00FFCE12  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$00 _S_RESET
  1298:     //    00FFCEC4  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSI割り込みルーチン
  1299:     //    00FFCEDA  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$02 _S_SELECTA
  1300:     //    00FFCF00  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$01 _S_SELECT
  1301:     //    00FFCFCE  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$03 _S_CMDOUT
  1302:     //    00FFD02A  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$0C _S_DATAOUTI
  1303:     //    00FFD06A  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$0B _S_DATAINI
  1304:     //    00FFD0AE  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$06 _S_STSIN
  1305:     //    00FFD0EC  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$07 _S_MSGIN
  1306:     //    00FFD12A  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$08 _S_MSGOUT
  1307:     //    00FFD166  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$0D _S_MSGOUTEXT
  1308:     //    00FFD196  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$09 _S_PHASE
  1309:     //    00FFD57C  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$05 _S_DATAOUT
  1310:     //    00FFD5C4  2C7A xxxx                 movea.l $00FF933C(pc),a6        ;SCSIポートベースアドレス。SCSIコール$04 _S_DATAIN
  1311:     //    a6が設定されていない場所から呼ばれないものはnopで潰してしまってもよいが念のためすべてリロケートする
  1312:     final int[] portBaseAddressArray = new int[] {
  1313: /*
  1314:       //  パッチをあてていないとき
  1315:       0x00ffccf0, 0x00ffce12, 0x00ffcec4, 0x00ffceda, 0x00ffcf00, 0x00ffcfce, 0x00ffd02a, 0x00ffd06a, 
  1316:       0x00ffd0ae, 0x00ffd0ec, 0x00ffd12a, 0x00ffd166, 0x00ffd196, 0x00ffd57c, 0x00ffd5c4,
  1317: */
  1318:       //  パッチをあてたとき
  1319:       0x00ffccbc, 0x00ffce12, 0x00ffcec4, 0x00ffceda, 0x00ffcf00, 0x00ffcfce, 0x00ffd02a, 0x00ffd06a, 
  1320:       0x00ffd0ae, 0x00ffd0ec, 0x00ffd12a, 0x00ffd166, 0x00ffd196, 0x00ffd57c, 0x00ffd5c4,
  1321:     };
  1322:     for (int a : portBaseAddressArray) {
  1323:       final int portBaseDst = a - iocsSrc + iocsDst;
  1324:       final int portBaseHandleDst = 0x00ff933c - iplSrc + iplDst;
  1325:       ByteArray.byaWl (bb, portBaseDst - romDst, 0x2c7a0000 | 65535 & portBaseHandleDst - (portBaseDst + 2));
  1326:     }
  1327:     //  DMA転送終了時にDMA1のDARを復元するコードを追加する
  1328:     //    00FFDC6C                            rts
  1329:     //              60xx                      bra.s   dar1sasiDst
  1330:     final int jumpDar1Sasi1Dst = 0x00ffdc6c - iocsSrc + iocsDst;
  1331:     ByteArray.byaWw (bb, jumpDar1Sasi1Dst - romDst, 0x6000 | 255 & dar1sasiDst - (0x00ffdc6c + 2 - iocsSrc + iocsDst));
  1332:     //    00FFDCD8                            rts
  1333:     //              60xx                      bra.s   dar1sasiDst
  1334:     final int jumpDar1Sasi2Dst = 0x00ffdcd8 - iocsSrc + iocsDst;
  1335:     ByteArray.byaWw (bb, jumpDar1Sasi2Dst - romDst, 0x6000 | 255 & dar1sasiDst - (0x00ffdcd8 + 2 - iocsSrc + iocsDst));
  1336: 
  1337:     //DMA1のDARをSASIに戻す処理
  1338:     //    00000000  23FC 00E9 6001 00E8 4054  move.l  #$00E96001,$00E84054.l  ;DMA1のDARにSASIデータポートを設定する
  1339:     //    0000000A  4E75                      rts
  1340:     ByteArray.byaWwArray (bb, dar1sasiDst - romDst, new int[] {
  1341:       0x23fc, 0x00e9, 0x6001, 0x00e8, 0x4054, 0x4e75,
  1342:     });
  1343: 
  1344:     //新しいSCSIポート初期化ルーチン
  1345:     //  IOCS _SCSIDRVを登録する
  1346:     //    既に同じアドレスが登録されているときは初期化済みとみなして何もせずに復帰する
  1347:     //  _B_SEEK/_B_VERIFY/_B_DSKINI/_B_DRVSNS/_B_WRITE/_B_READ/_B_RECALI/_B_ASSIGN/_B_BADFMT/_B_FORMAT/_B_EJECTを差し替える
  1348:     //    SCSIINROMはSASIと同じ手順でSCSIポートに接続されたSASIハードディスクにアクセスできるようになっている
  1349:     //    変更前のベクタを[$0CC4.w].l[11]に保存する
  1350:     //      SCSIINROMのコードは[$0CC0.w].l[11]だがROM1.3が[$0CC0.w].w,[$0CC2.w].b,[$0CC3.w].bを使っているので_B_SEEKを[$0CEC.w].lに移動する
  1351:     //    引数が$8000+(ID<<9)+(LUN<<8)でないまたはIDに対応するSASIフラグがセットされていないとき
  1352:     //      変更前のベクタにジャンプする
  1353:     //      FDまたはSASIポートに接続されたSASIハードディスクにアクセスすることになる
  1354:     //    引数が$8000+(ID<<9)+(LUN<<8)かつIDに対応するSASIフラグがセットされているとき
  1355:     //      ROM1.3から持ってきた処理ルーチンにジャンプする
  1356:     //      SCSIポートに接続されたSASIハードディスクにアクセスすることになる
  1357:     //    ROM1.3はSASI対応が廃止されているため引数が$8000+(ID<<9)+(LUN<<8)かつSASIフラグがセットされていないときエラー終了してしまう
  1358:     //    SASIフラグのテストが重複するがあらかじめSASIフラグをテストしてから呼び出すことにする
  1359:     //  ROM1.3から持ってきたSCSIポート初期化ルーチンを呼び出す
  1360:     //  TRAP#11を差し替える
  1361:     //    SCSIINROMのコードは変更前のベクタを[$0CEE.w].lに保存しているが使われていないようなので保存しない
  1362:     final int[] program = new int[] {
  1363:       //initDst:
  1364:       0x2f09,                            //00000000  move.l  a1,-(sp)
  1365:       0x43fa, -1, 0x00ffccb8,            //00000002  lea.l   $00FFCCB8(pc),a1        ;IOCS _SCSIDRVルーチン
  1366:       0xb3f8, 0x07d4,                    //00000006  cmpa.l  $0400+4*$F5.w,a1        ;IOCS _SCSIDRVベクタ
  1367:       0x6700, (char) (0x00b8 - 0x000c),  //0000000a  beq.w   done                    ;初期化済み
  1368:       0x21c9, 0x07d4,                    //0000000e  move.l  a1,$0400+4*$F5.w
  1369:       0x43fa, (char) (0x00bc - 0x0014),  //00000012  lea.l   b_seek(pc),a1           ;IOCS _B_SEEK
  1370:       0x21f8, 0x0500, 0x0cec,            //00000016  move.l  $0400+4*$40.w,$0CEC.w   ;元の_B_SEEK
  1371:       0x21c9, 0x0500,                    //0000001c  move.l  a1,$0400+4*$40.w
  1372:       0x43fa, (char) (0x00c6 - 0x0022),  //00000020  lea.l   b_verify(pc),a1         ;IOCS _B_VERIFY
  1373:       0x21f8, 0x0504, 0x0cc4,            //00000024  move.l  $0400+4*$41.w,$0CC4.w   ;元の_B_VERIFY
  1374:       0x21c9, 0x0504,                    //0000002a  move.l  a1,$0400+4*$41.w
  1375:       0x43fa, (char) (0x00d0 - 0x0030),  //0000002e  lea.l   b_dskini(pc),a1         ;IOCS _B_DSKINI
  1376:       0x21f8, 0x050c, 0x0cc8,            //00000032  move.l  $0400+4*$43.w,$0CC8.w
  1377:       0x21c9, 0x050c,                    //00000038  move.l  a1,$0400+4*$43.w
  1378:       0x43fa, (char) (0x00da - 0x003e),  //0000003c  lea.l   b_drvsns(pc),a1         ;IOCS _B_DRVSNS
  1379:       0x21f8, 0x0510, 0x0ccc,            //00000040  move.l  $0400+4*$44.w,$0CCC.w
  1380:       0x21c9, 0x0510,                    //00000046  move.l  a1,$0400+4*$44.w
  1381:       0x43fa, (char) (0x00e4 - 0x004c),  //0000004a  lea.l   b_write(pc),a1          ;IOCS _B_WRITE
  1382:       0x21f8, 0x0514, 0x0cd0,            //0000004e  move.l  $0400+4*$45.w,$0CD0.w
  1383:       0x21c9, 0x0514,                    //00000054  move.l  a1,$0400+4*$45.w
  1384:       0x43fa, (char) (0x00ee - 0x005a),  //00000058  lea.l   b_read(pc),a1           ;IOCS _B_READ
  1385:       0x21f8, 0x0518, 0x0cd4,            //0000005c  move.l  $0400+4*$46.w,$0CD4.w
  1386:       0x21c9, 0x0518,                    //00000062  move.l  a1,$0400+4*$46.w
  1387:       0x43fa, (char) (0x00f8 - 0x0068),  //00000066  lea.l   b_recali(pc),a1         ;IOCS _B_RECALI
  1388:       0x21f8, 0x051c, 0x0cd8,            //0000006a  move.l  $0400+4*$47.w,$0CD8.w
  1389:       0x21c9, 0x051c,                    //00000070  move.l  a1,$0400+4*$47.w
  1390:       0x43fa, (char) (0x0102 - 0x0076),  //00000074  lea.l   b_assign(pc),a1         ;IOCS _B_ASSIGN
  1391:       0x21f8, 0x0520, 0x0cdc,            //00000078  move.l  $0400+4*$48.w,$0CDC.w
  1392:       0x21c9, 0x0520,                    //0000007e  move.l  a1,$0400+4*$48.w
  1393:       0x43fa, (char) (0x010c - 0x0084),  //00000082  lea.l   b_badfmt(pc),a1         ;IOCS _B_BADFMT
  1394:       0x21f8, 0x052c, 0x0ce0,            //00000086  move.l  $0400+4*$4B.w,$0CE0.w
  1395:       0x21c9, 0x052c,                    //0000008c  move.l  a1,$0400+4*$4B.w
  1396:       0x43fa, (char) (0x0116 - 0x0092),  //00000090  lea.l   b_format(pc),a1         ;IOCS _B_FORMAT
  1397:       0x21f8, 0x0534, 0x0ce4,            //00000094  move.l  $0400+4*$4D.w,$0CE4.w
  1398:       0x21c9, 0x0534,                    //0000009a  move.l  a1,$0400+4*$4D.w
  1399:       0x43fa, (char) (0x0120 - 0x00a0),  //0000009e  lea.l   b_eject(pc),a1          ;IOCS _B_EJECT
  1400:       0x21f8, 0x053c, 0x0ce8,            //000000a2  move.l  $0400+4*$4F.w,$0CE8.w
  1401:       0x21c9, 0x053c,                    //000000a8  move.l  a1,$0400+4*$4F.w
  1402:       0x6100, -1, 0x00ff9098,            //000000ac  bsr.w   $00FF9098               ;SCSIポート初期化ルーチン
  1403:       0x43fa, -1, 0x00ff1b20,            //000000b0  lea.l   $00FF1B20(pc),a1        ;TRAP#11ルーチン
  1404:       0x21c9, 0x00ac,                    //000000b4  move.l  a1,4*$2B.w
  1405:       //done:
  1406:       0x225f,                            //000000b8  movea.l (sp)+,a1
  1407:       0x4e75,                            //000000ba  rts
  1408:       //b_seek:
  1409:       0x2f38, 0x0cec,                    //000000bc  move.l  $0CEC.w,-(sp)
  1410:       0x487a, -1, 0x00ff90b8,            //000000c0  pea.l   $00FF90B8(pc)           ;_B_SEEK(SCSI)
  1411:       0x6000 | 255 & 0x0128 - 0x00c6,    //000000c4  bra.s   choice
  1412:       //b_verify:
  1413:       0x2f38, 0x0cc4,                    //000000c6  move.l  $0CC4.w,-(sp)
  1414:       0x487a, -1, 0x00ff91e8,            //000000ca  pea.l   $00FF91E8(pc)           ;_B_VERIFY(SCSI)
  1415:       0x6000 | 255 & 0x0128 - 0x00d0,    //000000ce  bra.s   choice
  1416:       //b_dskini:
  1417:       0x2f38, 0x0cc8,                    //000000d0  move.l  $0CC8.w,-(sp)
  1418:       0x487a, -1, 0x00ff9250,            //000000d4  pea.l   $00FF9250(pc)           ;_B_DSKINI(SCSI)
  1419:       0x6000 | 255 & 0x0128 - 0x00da,    //000000d8  bra.s   choice
  1420:       //b_drvsns:
  1421:       0x2f38, 0x0ccc,                    //000000da  move.l  $0CCC.w,-(sp)
  1422:       0x487a, -1, 0x00ff90d6,            //000000de  pea.l   $00FF90D6(pc)           ;_B_DRVSNS(SCSI)
  1423:       0x6000 | 255 & 0x0128 - 0x00e4,    //000000e2  bra.s   choice
  1424:       //b_write:
  1425:       0x2f38, 0x0cd0,                    //000000e4  move.l  $0CD0.w,-(sp)
  1426:       0x487a, -1, 0x00ff9182,            //000000e8  pea.l   $00FF9182(pc)           ;_B_WRITE(SCSI)
  1427:       0x6000 | 255 & 0x0128 - 0x00ee,    //000000ec  bra.s   choice
  1428:       //b_read:
  1429:       0x2f38, 0x0cd4,                    //000000ee  move.l  $0CD4.w,-(sp)
  1430:       0x487a, -1, 0x00ff917c,            //000000f2  pea.l   $00FF917C(pc)           ;_B_READ(SCSI)
  1431:       0x6000 | 255 & 0x0128 - 0x00f8,    //000000f6  bra.s   choice
  1432:       //b_recali:
  1433:       0x2f38, 0x0cd8,                    //000000f8  move.l  $0CD8.w,-(sp)
  1434:       0x487a, -1, 0x00ff90be,            //000000fc  pea.l   $00FF90BE(pc)           ;_B_RECALI(SCSI)
  1435:       0x6000 | 255 & 0x0128 - 0x0102,    //00000100  bra.s   choice
  1436:       //b_assign:
  1437:       0x2f38, 0x0cdc,                    //00000102  move.l  $0CDC.w,-(sp)
  1438:       0x487a, -1, 0x00ff90c4,            //00000106  pea.l   $00FF90C4(pc)           ;_B_ASSIGN(SCSI)
  1439:       0x6000 | 255 & 0x0128 - 0x010c,    //0000010a  bra.s   choice
  1440:       //b_badfmt:
  1441:       0x2f38, 0x0ce0,                    //0000010c  move.l  $0CE0.w,-(sp)
  1442:       0x487a, -1, 0x00ff90ca,            //00000110  pea.l   $00FF90CA(pc)           ;_B_BADFMT(SCSI)
  1443:       0x6000 | 255 & 0x0128 - 0x0116,    //00000114  bra.s   choice
  1444:       //b_format:
  1445:       0x2f38, 0x0ce4,                    //00000116  move.l  $0CE4.w,-(sp)
  1446:       0x487a, -1, 0x00ff90d0,            //0000011a  pea.l   $00FF90D0(pc)           ;_B_FORMAT(SCSI)
  1447:       0x6000 | 255 & 0x0128 - 0x0120,    //0000011e  bra.s   choice
  1448:       //b_eject:
  1449:       0x2f38, 0x0ce8,                    //00000120  move.l  $0CE8.w,-(sp)
  1450:       0x487a, -1, 0x00ff9114,            //00000124  pea.l   $00FF9114(pc)           ;_B_EJECT(SCSI)
  1451:       //choice:
  1452:       //<4(sp).l:変更前の処理ルーチン(FDまたはSASIポートにアクセスする)
  1453:       //<(sp).l:ROM1.3の処理ルーチン(SCSIポートに接続されているSASIドライブにアクセスする)
  1454:       0x0801, 0x000c,                    //00000128  btst.l  #12,d1
  1455:       0x6600 | 255 & 0x0142 - 0x012e,    //0000012c  bne.s   fd_sasi                 ;$8xxxではない
  1456:       0x2f01,                            //0000012e  move.l  d1,-(sp)
  1457:       0xef59,                            //00000130  rol.w   #7,d1                   ;IDを下位3bitへ
  1458:       0x0339, 0x00ed, 0x0071,            //00000132  btst.b  d1,$00ED0071.l          ;SASIフラグをテスト。bit番号のマスクは不要
  1459:       0x4cdf, 0x0002,                    //00000138  movem.l (sp)+,d1
  1460:       0x6700 | 255 & 0x0142 - 0x013e,    //0000013c  beq.s   fd_sasi                 ;SASIフラグがセットされていない
  1461:       //  $8xxxでSASIフラグがセットされているのでSCSIポートに接続されているSASIドライブにアクセスする
  1462:       0x2e9f,                            //0000013e  move.l  (sp)+,(sp)
  1463:       0x4e75,                            //00000140  rts
  1464:       //  $8xxxでないかSASIフラグがセットされていないのでFDまたはSASIポートに接続されているハードディスクにアクセスする
  1465:       //fd_sasi:
  1466:       0x588f,                            //00000142  addq.l  #4,sp
  1467:       0x4e75,                            //00000144  rts
  1468:       //                                   00000146
  1469:     };
  1470:     int dst = initDst;
  1471:     for (int i = 0; i < program.length; i++) {
  1472:       int regOC = program[i];
  1473:       if (regOC < 0) {
  1474:         if (regOC == -1) {
  1475:           int a1 = program[++i];
  1476:           if (trap11Src <= a1 && a1 < trap11Src + trap11Len) {
  1477:             regOC = a1 - trap11Src + trap11Dst - dst;
  1478:             //} else if (cacheFlushSrc <= a1 && a1 < cacheFlushSrc + cacheFlushLen) {
  1479:             //  regOC = a1 - cacheFlushSrc + cacheFlushDst - dst;
  1480:           } else if (iplSrc <= a1 && a1 < iplSrc + iplLen) {
  1481:             regOC = a1 - iplSrc + iplDst - dst;
  1482:           } else if (iocsSrc <= a1 && a1 < iocsSrc + iocsLen) {
  1483:             regOC = a1 - iocsSrc + iocsDst - dst;
  1484:           } else {
  1485:             System.out.println ("ERROR at " + i);
  1486:           }
  1487:         } else {
  1488:           System.out.println ("ERROR at " + i);
  1489:         }
  1490:       }
  1491:       ByteArray.byaWw (bb, dst - romDst, regOC);
  1492:       dst += 2;
  1493:     }
  1494: 
  1495:     if (SPC_DEBUG_SCSIROM) {
  1496:       System.out.printf ("romDst=0x%08x\n", romDst);
  1497:       System.out.printf ("headDst=0x%08x\n", headDst);
  1498:       System.out.printf ("headLen=0x%08x\n", headLen);
  1499:       System.out.printf ("trap11Dst=0x%08x\n", trap11Dst);
  1500:       System.out.printf ("trap11Src=0x%08x\n", trap11Src);
  1501:       System.out.printf ("trap11Len=0x%08x\n", trap11Len);
  1502:       System.out.printf ("callBEjectDst=0x%08x\n", callBEjectDst);
  1503:       System.out.printf ("cacheFlushDst=0x%08x\n", cacheFlushDst);
  1504:       System.out.printf ("cacheFlushLen=0x%08x\n", cacheFlushLen);
  1505:       System.out.printf ("iplDst=0x%08x\n", iplDst);
  1506:       System.out.printf ("iplSrc=0x%08x\n", iplSrc);
  1507:       System.out.printf ("iplLen=0x%08x\n", iplLen);
  1508:       System.out.printf ("scsiPortBaseDst=0x%08x\n", scsiPortBaseDst);
  1509:       System.out.printf ("callInit1Dst=0x%08x\n", callInit1Dst);
  1510:       System.out.printf ("driverHandleDst=0x%08x\n", driverHandleDst);
  1511:       System.out.printf ("scsidrvHandleDst=0x%08x\n", scsidrvHandleDst);
  1512:       System.out.printf ("callInit2Dst=0x%08x\n", callInit2Dst);
  1513:       System.out.printf ("checkIdDst=0x%08x\n", checkIdDst);
  1514:       System.out.printf ("iocsDst=0x%08x\n", iocsDst);
  1515:       System.out.printf ("iocsSrc=0x%08x\n", iocsSrc);
  1516:       System.out.printf ("iocsLen=0x%08x\n", iocsLen);
  1517:       System.out.printf ("twoSecondsDst=0x%08x\n", twoSecondsDst);
  1518:       System.out.printf ("vectorDst=0x%08x\n", vectorDst);
  1519:       System.out.printf ("callCacheFlushDst=0x%08x\n", callCacheFlushDst);
  1520:       for (int a : portBaseAddressArray) {
  1521:         final int portBaseDst = a - iocsSrc + iocsDst;
  1522:         final int portBaseHandleDst = 0x00ff933c - iplSrc + iplDst;
  1523:         System.out.printf ("portBaseDst=0x%08x\n", portBaseDst);
  1524:         System.out.printf ("portBaseHandleDst=0x%08x\n", portBaseHandleDst);
  1525:       }
  1526:       System.out.printf ("jumpDar1Sasi1Dst=0x%08x\n", jumpDar1Sasi1Dst);
  1527:       System.out.printf ("jumpDar1Sasi2Dst=0x%08x\n", jumpDar1Sasi2Dst);
  1528:       System.out.printf ("dar1sasiDst=0x%08x\n", dar1sasiDst);
  1529:       System.out.printf ("dar1sasiLen=0x%08x\n", dar1sasiLen);
  1530:       System.out.printf ("initDst=0x%08x\n", initDst);
  1531:       System.out.printf ("initLen=0x%08x\n", initLen);
  1532:       System.out.printf ("tailDst=0x%08x\n", tailDst);
  1533:       System.out.printf ("tailLen=0x%08x\n", tailLen);
  1534:     }
  1535: 
  1536:     spcSCSIROMImage[type] = bb;  //0=拡張SCSI,1=内蔵SCSI
  1537:     return bb;
  1538:   }  //spcMakeSCSIROM()
  1539: 
  1540: 
  1541: 
  1542:   //========================================================================================
  1543:   //SCSIフォーマットデータ
  1544:   //  無償公開されたHuman68k version 3.02のシステムディスクに入っているFORMAT.Xから抽出したデータを使う
  1545: 
  1546:   //----------------------------------------------------------------------------------------
  1547:   //SCSIディスクID
  1548:   //  SCSIディスクのセクタ0に書き込まれる
  1549: /*
  1550:   public static final int[] SPC_DISK_ID_1 = {
  1551:     //  perl -e "do'sjdump.pl';$p=0;$m=2;$o=0x3ce4;$l=8;open IN,'HUMAN302.XDF'or die;binmode IN;seek IN,1024*592,0;read IN,$b,64;seek IN,1024*592+vec($b,15,32)+32*$m,0;read IN,$b,32;seek IN,1024*592+vec($b,7,32)+64+$o,0;read IN,$b,$l;close IN;sjdumpcode($b,0,$l,$p)"
  1552:     0x58,0x36,0x38,0x53,0x43,0x53,0x49,0x31,                                          //00000000  X68SCSI1        
  1553:   };
  1554: */
  1555:   //  perl misc/itob.pl xeij/SPC.java SPC_DISK_ID_1
  1556:   public static final byte[] SPC_DISK_ID_1 = "X68SCSI1".getBytes (XEiJ.ISO_8859_1);
  1557: /*
  1558:   public static final int[] SPC_DISK_ID_2 = {
  1559:     //  perl -e "do'sjdump.pl';$p=0x10;$m=2;$o=0x669d;$l=35;open IN,'HUMAN302.XDF'or die;binmode IN;seek IN,1024*592,0;read IN,$b,64;seek IN,1024*592+vec($b,15,32)+32*$m,0;read IN,$b,32;seek IN,1024*592+vec($b,7,32)+64+$o,0;read IN,$b,$l;close IN;sjdumpcode($b,0,$l,$p)"
  1560:     0x48,0x75,0x6d,0x61,0x6e,0x36,0x38,0x4b,0x20,0x53,0x43,0x53,0x49,0x2d,0x44,0x49,  //00000010  Human68K SCSI-DI
  1561:     0x53,0x4b,0x20,0x62,0x79,0x20,0x4b,0x65,0x69,0x73,0x6f,0x6b,0x75,0x20,0x47,0x69,  //00000020  SK by Keisoku Gi
  1562:     0x6b,0x65,0x6e,                                                                   //00000030  ken             
  1563:   };
  1564: */
  1565:   //  perl misc/itob.pl xeij/SPC.java SPC_DISK_ID_2
  1566:   public static final byte[] SPC_DISK_ID_2 = "Human68K SCSI-DISK by Keisoku Giken".getBytes (XEiJ.ISO_8859_1);
  1567: 
  1568:   //----------------------------------------------------------------------------------------
  1569:   //SCSIディスクIPL
  1570:   //  SCSIディスクのセクタ1に書き込まれる
  1571:   //  HELPキーが押されていたらメニューを表示する
  1572:   //  選択されたパーティションのパーティションIPLを読み込んで起動する
  1573: /*
  1574:   public static final int[] SPC_DISK_IPL = {
  1575:     //  perl -e "do'sjdump.pl';$p=0x400;$m=2;$o=0x77da;$l=0x7bc2-$o;open IN,'HUMAN302.XDF'or die;binmode IN;seek IN,1024*592,0;read IN,$b,64;seek IN,1024*592+vec($b,15,32)+32*$m,0;read IN,$b,32;seek IN,1024*592+vec($b,7,32)+64+$o,0;read IN,$b,$l;close IN;sjdumpcode($b,0,$l,$p)"
  1576:     0x60,0x00,0x00,0xca,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00000400  `..ハ............
  1577:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00000410  ................
  1578:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00000420  ................
  1579:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00000430  ................
  1580:     0x1a,0x1b,0x5b,0x36,0x3b,0x33,0x32,0x48,0x58,0x36,0x38,0x30,0x30,0x30,0x20,0x53,  //00000440  ..[6;32HX68000 S
  1581:     0x43,0x53,0x49,0x20,0x44,0x49,0x53,0x4b,0x20,0x49,0x50,0x4c,0x20,0x4d,0x45,0x4e,  //00000450  CSI DISK IPL MEN
  1582:     0x55,0x1b,0x5b,0x32,0x35,0x3b,0x32,0x32,0x48,0x83,0x4a,0x81,0x5b,0x83,0x5c,0x83,  //00000460  U.[25;22Hカーソル
  1583:     0x8b,0x83,0x4c,0x81,0x5b,0x82,0xc5,0x91,0x49,0x91,0xf0,0x82,0xb5,0x82,0xc4,0x83,  //00000470   キーで選択してリ
  1584:     0x8a,0x83,0x5e,0x81,0x5b,0x83,0x93,0x83,0x4c,0x81,0x5b,0x82,0xf0,0x89,0x9f,0x82,  //00000480   ターンキーを押し
  1585:     0xb5,0x82,0xc4,0x82,0xad,0x82,0xbe,0x82,0xb3,0x82,0xa2,0x00,0x1b,0x5b,0x32,0x36,  //00000490   てください..[26
  1586:     0x3b,0x32,0x38,0x48,0x91,0x49,0x91,0xf0,0x82,0xb5,0x82,0xbd,0x82,0xe0,0x82,0xcc,  //000004a0  ;28H選択したもの
  1587:     0x82,0xf0,0x8e,0xa9,0x93,0xae,0x8b,0x4e,0x93,0xae,0x82,0xc6,0x82,0xb5,0x82,0xc4,  //000004b0  を自動起動として
  1588:     0x93,0x6f,0x98,0x5e,0x82,0xb5,0x82,0xdc,0x82,0xb7,0x00,0x00,0x72,0x00,0x70,0x04,  //000004c0  登録します..r.p.
  1589:     0x4e,0x4f,0x08,0x00,0x00,0x01,0x67,0x02,0x4e,0x75,0x4f,0xfa,0xff,0x24,0x42,0x85,  //000004d0  NO....g.NuO..$B.
  1590:     0x70,0xf5,0x72,0x25,0x43,0xfa,0x03,0x02,0x4e,0x4f,0x4a,0x00,0x66,0x00,0x01,0x92,  //000004e0  p.r%C...NOJ.f...
  1591:     0x22,0x29,0x00,0x04,0xe0,0x89,0xe2,0x89,0x43,0xfa,0x02,0xea,0x22,0x81,0x74,0x02,  //000004f0  ")..煢竕C..."》.
  1592:     0x26,0x3c,0x00,0x00,0x04,0x00,0x43,0xfa,0x02,0xe0,0x61,0x00,0x02,0x3a,0x4a,0x00,  //00000500  &<....C..濛..:J.
  1593:     0x66,0x00,0x01,0x6e,0x43,0xfa,0x02,0xd2,0x47,0xfa,0xfe,0xea,0x0c,0x91,0x58,0x36,  //00000510  f..nC..メG....噌6
  1594:     0x38,0x4b,0x66,0x00,0x01,0x70,0x74,0x0e,0x42,0x43,0x42,0x47,0x42,0x86,0x43,0xe9,  //00000520  8Kf..pt.BCBGB.C.
  1595:     0x00,0x10,0x4a,0x11,0x67,0x16,0x52,0x46,0x26,0xc9,0x10,0x29,0x00,0x08,0x08,0x00,  //00000530  ..J.g.RF&ノ.)....
  1596:     0x00,0x00,0x66,0x08,0x52,0x43,0x4a,0x00,0x66,0x02,0x52,0x47,0x51,0xca,0xff,0xe0,  //00000540  ..f.RCJ.f.RGQハ.濳
  1597:     0x4a,0x43,0x67,0x00,0x01,0x46,0x72,0x0a,0x70,0x04,0x4e,0x4f,0x08,0x00,0x00,0x04,  //00000550   Cg..Fr.p.NO....
  1598:     0x66,0x12,0x4a,0x47,0x67,0x0e,0x53,0x47,0x67,0x1c,0x43,0xfa,0xfe,0xd4,0x61,0x00,  //00000560  f.JGg.SGg.C..ヤa.
  1599:     0x01,0xc8,0x60,0x28,0x43,0xfa,0xfe,0xca,0x61,0x00,0x01,0xbe,0x43,0xfa,0xff,0x1e,  //00000570  .ネ`(C..ハa..セC...
  1600:     0x61,0x00,0x01,0xb6,0x60,0x14,0x47,0xfa,0xfe,0x7c,0x20,0x5b,0x24,0x28,0x00,0x08,  //00000580  a..カ`.G..| [$(..
  1601:     0x4a,0x28,0x00,0x08,0x66,0xf4,0x60,0x00,0x00,0xc2,0x7a,0x02,0x42,0x43,0x45,0xfa,  //00000590  J(..f.`..ツz.BCE.
  1602:     0xfe,0x64,0x22,0x52,0x10,0x29,0x00,0x08,0x67,0x0a,0xb0,0x05,0x67,0x06,0x72,0x02,  //000005a0  .d"R.)..g.ー.g.r.
  1603:     0x61,0x00,0x01,0x7a,0x61,0x00,0x01,0x1a,0x58,0x8a,0x52,0x43,0xb6,0x46,0x65,0xe2,  //000005b0  a..za...X崖CカFe秡
  1604:     0x60,0x2a,0x61,0x00,0x01,0x0a,0x61,0x00,0x00,0xf6,0xb0,0x3c,0x00,0x1d,0x67,0x3a,  //000005c0   *a...a...ー<..g:
  1605:     0xb0,0x3c,0x00,0x35,0x67,0x0c,0xb0,0x3c,0x00,0x3c,0x67,0x1a,0xb0,0x3c,0x00,0x3e,  //000005d0  ー<.5g.ー<.<g.ー<.>
  1606:     0x66,0xe4,0x61,0x00,0x00,0xec,0x52,0x43,0xb6,0x46,0x65,0x02,0x42,0x43,0x61,0x00,  //000005e0  f臑...RCカFe.BCa.
  1607:     0x00,0xb6,0x66,0xf2,0x60,0xcc,0x61,0x00,0x00,0xd8,0x53,0x43,0x6a,0x04,0x36,0x06,  //000005f0  .カf.`フa..リSCj.6.
  1608:     0x53,0x43,0x61,0x00,0x00,0xa2,0x66,0xf2,0x60,0xb8,0x47,0xfa,0xfd,0xf8,0xe5,0x43,  //00000600  SCa..「f.`クG...蕕
  1609:     0x20,0x73,0x30,0x00,0x24,0x28,0x00,0x08,0x4a,0x05,0x67,0x3e,0x43,0xfa,0x01,0xd2,  //00000610   s0.$(..J.g>C..メ
  1610:     0x72,0x0e,0x43,0xe9,0x00,0x10,0x4a,0x29,0xff,0xf8,0x67,0x12,0x20,0x11,0x08,0x00,  //00000620  r.C...J)..g. ...
  1611:     0x00,0x18,0x66,0x0a,0x42,0x11,0xb4,0x80,0x67,0x04,0x12,0xbc,0x00,0x02,0x51,0xc9,  //00000630  ..f.B.エ.g..シ..Qノ
  1612:     0xff,0xe2,0x2f,0x02,0x74,0x02,0x26,0x3c,0x00,0x00,0x04,0x00,0x43,0xfa,0x01,0x9a,  //00000640  ../.t.&<....C..啾
  1613:     0x61,0x00,0x00,0xec,0x24,0x1f,0x4a,0x00,0x66,0x26,0xc4,0xbc,0x00,0xff,0xff,0xff,  //00000650   ...$.J.f&トシ....
  1614:     0x26,0x3c,0x00,0x00,0x04,0x00,0x43,0xfa,0xfd,0x98,0xd3,0xfc,0x00,0x00,0x04,0x00,  //00000660  &<....C..侖.....
  1615:     0x61,0x00,0x00,0xd4,0x4a,0x00,0x66,0x08,0x0c,0x11,0x00,0x60,0x66,0x22,0x4e,0xd1,  //00000670  a..ヤJ.f....`f"Nム
  1616:     0x45,0xfa,0x00,0xea,0x43,0xfa,0x00,0xdc,0x61,0x00,0x00,0xae,0x22,0x4a,0x61,0x00,  //00000680  E..鵑..ワa..ョ"Ja.
  1617:     0x00,0xa8,0x60,0xfe,0x45,0xfa,0x00,0xf5,0x60,0xea,0x45,0xfa,0x01,0x0c,0x60,0xe4,  //00000690  .ィ`.E...`鵙...`胼
  1618:     0x45,0xfa,0x01,0x23,0x60,0xde,0x41,0xfa,0xfd,0x5c,0x20,0x03,0xe5,0x40,0x20,0x70,  //000006a0   ..#`゙A..\ .蕁 p
  1619:     0x00,0x00,0x10,0x28,0x00,0x08,0xb0,0x05,0x67,0x02,0x4a,0x00,0x4e,0x75,0x42,0x80,  //000006b0  ...(..ー.g.J.NuB.
  1620:     0x4e,0x4f,0xe0,0x48,0xb0,0x3c,0x00,0x4e,0x66,0x02,0x70,0x1d,0x4e,0x75,0x61,0x5a,  //000006c0  NO潯ー<.Nf.p.NuaZ
  1621:     0x43,0xfa,0xfd,0x32,0x30,0x03,0xe5,0x40,0x43,0xf1,0x00,0x00,0x22,0x51,0x72,0x24,  //000006d0  C..20.蕁C..."Qr$
  1622:     0x74,0x09,0xd4,0x43,0x70,0x23,0x4e,0x4f,0x72,0x28,0x61,0x46,0x24,0x09,0x41,0xfa,  //000006e0  t.ヤCp#NOr(aF$.A.
  1623:     0x00,0xf8,0x94,0x88,0xe8,0x8a,0x84,0xfc,0x00,0x0a,0xd4,0xbc,0x00,0x30,0x00,0x30,  //000006f0  ..蝿闃....ヤシ.0.0
  1624:     0x72,0x20,0xb4,0x7c,0x00,0x30,0x67,0x02,0x32,0x02,0x61,0x26,0x48,0x42,0x32,0x02,  //00000700  r エ|.0g.2.a&HB2.
  1625:     0x61,0x20,0x72,0x29,0x61,0x1c,0x72,0x20,0x61,0x18,0x74,0x07,0x42,0x41,0x12,0x19,  //00000710  a r)a.r a.t.BA..
  1626:     0x61,0x10,0x51,0xca,0xff,0xf8,0x72,0x03,0x60,0x02,0x72,0x0b,0x70,0x22,0x4e,0x4f,  //00000720  a.Qハ..r.`.r.p"NO
  1627:     0x4e,0x75,0x70,0x20,0x4e,0x4f,0x4e,0x75,0x70,0x21,0x4e,0x4f,0x4e,0x75,0x48,0xe7,  //00000730  Nup NONup!NONuH轎
  1628:     0x7c,0x00,0x72,0x22,0x60,0x06,0x48,0xe7,0x7c,0x00,0x72,0x21,0x2a,0x3a,0x00,0x96,  //00000740   .r"`.H轎.r!*:.籾
  1629:     0xe0,0x8b,0xea,0xab,0xe5,0x8a,0xea,0xaa,0x70,0xf5,0x4e,0x4f,0x4c,0xdf,0x00,0x3e,  //00000750   苦ォ蜉.ェp.NOL゚.>
  1630:     0x4e,0x75,0x1a,0x1b,0x5b,0x31,0x36,0x3b,0x33,0x33,0x48,0x00,0x20,0x20,0x82,0x72,  //00000760  Nu..[16;33H.  S
  1631:     0x82,0x62,0x82,0x72,0x82,0x68,0x83,0x66,0x83,0x42,0x83,0x58,0x83,0x4e,0x82,0xaa,  //00000770  CSIディスクが
  1632:     0x93,0xc7,0x82,0xdf,0x82,0xdc,0x82,0xb9,0x82,0xf1,0x00,0x20,0x20,0x8a,0xc7,0x97,  //00000780  読めません.  管理
  1633:     0x9d,0x83,0x75,0x83,0x8d,0x83,0x62,0x83,0x4e,0x82,0xaa,0x89,0xf3,0x82,0xea,0x82,  //00000790   ブロックが壊れて
  1634:     0xc4,0x82,0xa2,0x82,0xdc,0x82,0xb7,0x00,0x20,0x20,0x8b,0x4e,0x93,0xae,0x89,0xc2,  //000007a0   います.  起動可
  1635:     0x94,0x5c,0x82,0xc8,0x97,0xcc,0x88,0xe6,0x82,0xaa,0x82,0xa0,0x82,0xe8,0x82,0xdc,  //000007b0  能な領域がありま
  1636:     0x82,0xb9,0x82,0xf1,0x00,0x82,0x68,0x82,0x6f,0x82,0x6b,0x83,0x75,0x83,0x8d,0x83,  //000007c0  せん.IPLブロッ
  1637:     0x62,0x83,0x4e,0x82,0xcc,0x93,0xe0,0x97,0x65,0x82,0xaa,0x88,0xd9,0x8f,0xed,0x82,  //000007d0   クの内容が異常で
  1638:     0xc5,0x82,0xb7,0x00,0x00,0x00,0x00,0x00,                                          //000007e0   す.....        
  1639:   };
  1640: */
  1641:   //  perl misc/itob.pl xeij/SPC.java SPC_DISK_IPL
  1642:   public static final byte[] SPC_DISK_IPL = "`\0\0\312\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\33[6;32HX68000 SCSI DISK IPL MENU\33[25;22H\203J\201[\203\\\203\213\203L\201[\202\305\221I\221\360\202\265\202\304\203\212\203^\201[\203\223\203L\201[\202\360\211\237\202\265\202\304\202\255\202\276\202\263\202\242\0\33[26;28H\221I\221\360\202\265\202\275\202\340\202\314\202\360\216\251\223\256\213N\223\256\202\306\202\265\202\304\223o\230^\202\265\202\334\202\267\0\0r\0p\4NO\b\0\0\1g\2NuO\372\377$B\205p\365r%C\372\3\2NOJ\0f\0\1\222\")\0\4\340\211\342\211C\372\2\352\"\201t\2&<\0\0\4\0C\372\2\340a\0\2:J\0f\0\1nC\372\2\322G\372\376\352\f\221X68Kf\0\1pt\16BCBGB\206C\351\0\20J\21g\26RF&\311\20)\0\b\b\0\0\0f\bRCJ\0f\2RGQ\312\377\340JCg\0\1Fr\np\4NO\b\0\0\4f\22JGg\16SGg\34C\372\376\324a\0\1\310`(C\372\376\312a\0\1\276C\372\377\36a\0\1\266`\24G\372\376| [$(\0\bJ(\0\bf\364`\0\0\302z\2BCE\372\376d\"R\20)\0\bg\n\260\5g\6r\2a\0\1za\0\1\32X\212RC\266Fe\342`*a\0\1\na\0\0\366\260<\0\35g:\260<\0005g\f\260<\0<g\32\260<\0>f\344a\0\0\354RC\266Fe\2BCa\0\0\266f\362`\314a\0\0\330SCj\0046\6SCa\0\0\242f\362`\270G\372\375\370\345C s0\0$(\0\bJ\5g>C\372\1\322r\16C\351\0\20J)\377\370g\22 \21\b\0\0\30f\nB\21\264\200g\4\22\274\0\2Q\311\377\342/\2t\2&<\0\0\4\0C\372\1\232a\0\0\354$\37J\0f&\304\274\0\377\377\377&<\0\0\4\0C\372\375\230\323\374\0\0\4\0a\0\0\324J\0f\b\f\21\0`f\"N\321E\372\0\352C\372\0\334a\0\0\256\"Ja\0\0\250`\376E\372\0\365`\352E\372\1\f`\344E\372\1#`\336A\372\375\\ \3\345@ p\0\0\20(\0\b\260\5g\2J\0NuB\200NO\340H\260<\0Nf\2p\35NuaZC\372\37520\3\345@C\361\0\0\"Qr$t\t\324Cp#NOr(aF$\tA\372\0\370\224\210\350\212\204\374\0\n\324\274\0000\0000r \264|\0000g\0022\2a&HB2\2a r)a\34r a\30t\7BA\22\31a\20Q\312\377\370r\3`\2r\13p\"NONup NONup!NONuH\347|\0r\"`\6H\347|\0r!*:\0\226\340\213\352\253\345\212\352\252p\365NOL\337\0>Nu\32\33[16;33H\0  \202r\202b\202r\202h\203f\203B\203X\203N\202\252\223\307\202\337\202\334\202\271\202\361\0  \212\307\227\235\203u\203\215\203b\203N\202\252\211\363\202\352\202\304\202\242\202\334\202\267\0  \213N\223\256\211\302\224\\\202\310\227\314\210\346\202\252\202\240\202\350\202\334\202\271\202\361\0\202h\202o\202k\203u\203\215\203b\203N\202\314\223\340\227e\202\252\210\331\217\355\202\305\202\267\0\0\0\0\0".getBytes (XEiJ.ISO_8859_1);
  1643: 
  1644:   //----------------------------------------------------------------------------------------
  1645:   //SCSIデバイスドライバ
  1646:   //  ROMのデバイスドライバが古いとき置き換えて使用する
  1647: /*
  1648:   public static final int[] SPC_DEVICE_DRIVER = {
  1649:     //  perl -e "do'sjdump.pl';$p=0xc00;$m=2;$o=0x7e88;$l=0xb1e0-$o;open IN,'HUMAN302.XDF'or die;binmode IN;seek IN,1024*592,0;read IN,$b,64;seek IN,1024*592+vec($b,15,32)+32*$m,0;read IN,$b,32;seek IN,1024*592+vec($b,7,32)+64+$o,0;read IN,$b,$l;close IN;sjdumpcode($b,0,$l,$p)"
  1650:     0xff,0xff,0xff,0xff,0x40,0x00,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x80,0x01,0x53,  //00000c00  ....@....n.....S
  1651:     0x43,0x48,0x44,0x49,0x53,0x4b,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x46,0x00,0x00,  //00000c10  CHDISK.......F..
  1652:     0x03,0x46,0x00,0x00,0x0d,0x0c,0x00,0x00,0x00,0xf8,0x00,0x00,0x07,0x9e,0x00,0x00,  //00000c20  .F..............
  1653:     0x03,0xb0,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb8,0x00,0x00,0x08,0x14,0x00,0x00,  //00000c30  .ー...ク...ク......
  1654:     0x08,0x06,0x00,0x00,0x00,0xb8,0x00,0x00,0x00,0xb8,0x00,0x00,0x01,0x2c,0x00,0x00,  //00000c40  .....ク...ク...,..
  1655:     0x00,0x01,0x70,0x02,0x70,0x07,0x70,0x0c,0x70,0x08,0x00,0x01,0x70,0x0d,0x70,0x0c,  //00000c50  ..p.p.p.p...p.p.
  1656:     0x70,0x0c,0x70,0x0c,0x70,0x0c,0x70,0x0c,0x70,0x0c,0x70,0x0c,0x70,0x0c,0x48,0xe7,  //00000c60  p.p.p.p.p.p.p.H.
  1657:     0x00,0x02,0x4d,0xfa,0x0d,0xc8,0x2d,0x4d,0x00,0x00,0x4c,0xdf,0x40,0x00,0x4e,0x75,  //00000c70  ..M..ネ-M..L゚@.Nu
  1658:     0x48,0xe7,0x7f,0xfe,0x4d,0xfa,0x0d,0xb6,0x2a,0x6e,0x00,0x00,0x70,0x00,0x10,0x2d,  //00000c80  H...M..カ*n..p..-
  1659:     0x00,0x02,0x0c,0x00,0x00,0x0c,0x62,0x1a,0x22,0x6d,0x00,0x0e,0x41,0xfa,0xff,0x7c,  //00000c90  ......b."m..A..|
  1660:     0xd0,0x40,0xd0,0x40,0xd1,0xc0,0x20,0x50,0x20,0x08,0x41,0xfa,0xff,0x54,0xd1,0xc0,  //00000ca0  ミ@ミ@ムタ P .A..Tムタ
  1661:     0x4e,0xd0,0x30,0x3c,0x70,0x0c,0x60,0x02,0x42,0x40,0x32,0x00,0x1b,0x41,0x00,0x03,  //00000cb0  Nミ0<p.`.B@2..A..
  1662:     0xe0,0x49,0x1b,0x41,0x00,0x04,0x4a,0x40,0x67,0x12,0x4a,0x6e,0x05,0xac,0x66,0x06,  //00000cc0  潛.A..J@g.Jn.ャf.
  1663:     0x4a,0x6e,0x05,0xae,0x67,0x06,0x3d,0x7c,0xff,0xff,0x05,0xb2,0x4c,0xdf,0x7f,0xfe,  //00000cd0  Jn.ョg.=|...イL゚..
  1664:     0x4e,0x75,0x4a,0xae,0x05,0xca,0x67,0xca,0x22,0x6e,0x05,0xca,0x70,0x80,0x22,0x3c,  //00000ce0  NuJョ.ハgハ"n.ハp."<
  1665:     0x00,0x00,0x01,0xf5,0x4e,0x4f,0x60,0xba,0x20,0x6d,0x00,0x0e,0x20,0x2d,0x00,0x12,  //00000cf0  ....NO`コ m.. -..
  1666:     0x0c,0x80,0x00,0x00,0x00,0x08,0x67,0x14,0x0c,0x80,0x00,0x00,0x00,0x04,0x66,0xa8,  //00000d00  ......g.......fィ
  1667:     0x30,0xee,0x05,0xc4,0x20,0x2e,0x05,0xa8,0x30,0x80,0x60,0x9c,0x30,0xee,0x05,0xc4,  //00000d10  0..ト ..ィ0.`.0..ト
  1668:     0x20,0x2e,0x05,0xa8,0x30,0xc0,0x20,0xae,0x05,0xc6,0x60,0x8c,0x20,0x6d,0x00,0x0e,  //00000d20   ..ィ0タ ョ.ニ`. m..
  1669:     0x20,0x2d,0x00,0x12,0x0c,0x80,0x00,0x00,0x00,0x02,0x66,0x00,0xff,0x7c,0x3d,0x50,  //00000d30   -........f..|=P
  1670:     0x05,0xc4,0x60,0x00,0xff,0x74,0x0c,0x2d,0x00,0x17,0x00,0x16,0x64,0x00,0xff,0x64,  //00000d40  .ト`..t.-....d..d
  1671:     0x53,0x82,0x02,0x82,0x00,0x00,0x00,0x0f,0x2d,0x42,0x05,0xa8,0x05,0x39,0x00,0x00,  //00000d50  S.......-B.ィ.9..
  1672:     0x0c,0xec,0x66,0x00,0xff,0x4e,0x61,0x00,0x1a,0xb8,0x2d,0x40,0x05,0xca,0x20,0x3c,  //00000d60  ..f..Na..ク-@.ハ <
  1673:     0x00,0x00,0x00,0xf5,0x72,0x24,0x28,0x2e,0x05,0xa8,0x4e,0x4f,0xb0,0xbc,0x00,0x00,  //00000d70  ....r$(..ィNOーシ..
  1674:     0x00,0x00,0x67,0x64,0xb0,0xbc,0xff,0xff,0xff,0xff,0x67,0x00,0xff,0x56,0xb0,0xbc,  //00000d80  ..gdーシ....g..Vーシ
  1675:     0x00,0x00,0x00,0x08,0x67,0x50,0xb0,0xbc,0x00,0x00,0x00,0x02,0x66,0x00,0xff,0x44,  //00000d90  ....gPーシ....f..D
  1676:     0x20,0x3c,0x00,0x00,0x00,0xf5,0x72,0x2c,0x76,0x0e,0x28,0x2e,0x05,0xa8,0x43,0xee,  //00000da0   <....r,v.(..ィC.
  1677:     0x05,0xd2,0x4e,0x4f,0xb0,0xbc,0x00,0x00,0x00,0x00,0x66,0x00,0xff,0x26,0x43,0xee,  //00000db0  .メNOーシ....f..&C.
  1678:     0x05,0xd2,0x10,0x11,0x02,0x00,0x00,0x70,0x0c,0x00,0x00,0x70,0x66,0x00,0xff,0x14,  //00000dc0  .メ.....p...pf...
  1679:     0x10,0x29,0x00,0x02,0x67,0x10,0xb0,0x3c,0x00,0x01,0x67,0x0a,0xb0,0x3c,0x00,0x06,  //00000dd0  .)..g.ー<..g.ー<..
  1680:     0x67,0x04,0x60,0x00,0xfe,0xfe,0x60,0x86,0x70,0xf5,0x72,0x2b,0x28,0x2e,0x05,0xa8,  //00000de0  g.`...`.p.r+(..ィ
  1681:     0x4e,0x4f,0x4a,0x80,0x66,0x00,0xfe,0xec,0x70,0xf5,0x72,0x25,0x28,0x2e,0x05,0xa8,  //00000df0  NOJ.f...p.r%(..ィ
  1682:     0x43,0xee,0x05,0xd2,0x4e,0x4f,0x4a,0x80,0x66,0x00,0xfe,0xd8,0x43,0xee,0x05,0xd2,  //00000e00  C..メNOJ.f..リC..メ
  1683:     0x22,0x29,0x00,0x04,0xb2,0xbc,0x00,0x00,0x04,0x00,0x67,0x18,0xb2,0xbc,0x00,0x00,  //00000e10  ")..イシ....g.イシ..
  1684:     0x02,0x00,0x67,0x08,0x3d,0x7c,0x00,0x02,0x05,0xa0,0x60,0x0e,0x3d,0x7c,0x00,0x01,  //00000e20  ..g.=|....`.=|..
  1685:     0x05,0xa0,0x60,0x06,0x3d,0x7c,0x00,0x00,0x05,0xa0,0xe0,0x89,0xe2,0x89,0x2d,0x41,  //00000e30  ..`.=|....煢竕-A
  1686:     0x05,0xa4,0x43,0xee,0x05,0xd2,0x2a,0x2e,0x05,0xa4,0x74,0x00,0xe5,0x8a,0xea,0xaa,  //00000e40  .、C..メ*..、t.蜉.ェ
  1687:     0x76,0x01,0xe5,0x8b,0xea,0xab,0x28,0x2e,0x05,0xa8,0x70,0xf5,0x72,0x21,0x4e,0x4f,  //00000e50  v.蜍.ォ(..ィp.r!NO
  1688:     0x4a,0x80,0x66,0x00,0xfe,0x7e,0x0c,0x91,0x58,0x36,0x38,0x53,0x66,0x00,0xfe,0x74,  //00000e60  J.f..~.噌68Sf..t
  1689:     0x0c,0xa9,0x43,0x53,0x49,0x31,0x00,0x04,0x66,0x00,0xfe,0x68,0x1d,0x69,0x00,0x0e,  //00000e70  .ゥCSI1..f..h.i..
  1690:     0x05,0xb0,0x3d,0x7c,0x00,0x00,0x05,0xac,0x3d,0x7c,0x00,0x00,0x05,0xae,0x0c,0x29,  //00000e80  .ー=|...ャ=|...ョ.)
  1691:     0x00,0x01,0x00,0x0f,0x67,0x10,0x0c,0x29,0x00,0x02,0x00,0x0f,0x66,0x0e,0x3d,0x7c,  //00000e90  ....g..)....f.=|
  1692:     0xff,0xff,0x05,0xae,0x60,0x06,0x3d,0x7c,0xff,0xff,0x05,0xac,0x61,0x00,0x03,0xb6,  //00000ea0  ...ョ`.=|...ャa..カ
  1693:     0x4a,0x80,0x66,0x00,0xfe,0x2e,0x4a,0x46,0x67,0x00,0xfe,0x28,0x3d,0x7c,0x00,0x00,  //00000eb0  J.f...JFg..(=|..
  1694:     0x05,0xb2,0x3d,0x46,0x05,0xb4,0x4a,0xae,0x05,0xca,0x67,0x06,0x41,0xfa,0x30,0x8a,  //00000ec0  .イ=F.エJョ.ハg.A.0柿
  1695:     0x60,0x04,0x41,0xfa,0x19,0x4c,0x2d,0x48,0x05,0xce,0xd1,0xfc,0x00,0x00,0x10,0x00,  //00000ed0   .A..L-H.ホム.....
  1696:     0x2b,0x48,0x00,0x0e,0x10,0x2d,0x00,0x16,0xd0,0x06,0x04,0x00,0x00,0x17,0x65,0x02,  //00000ee0  +H...-..ミ.....e.
  1697:     0x9c,0x00,0x1b,0x46,0x00,0x0d,0x41,0xee,0x05,0x44,0x2b,0x48,0x00,0x12,0x43,0xee,  //00000ef0  ...F..A..D+H..C.
  1698:     0x04,0x04,0x70,0x0e,0x20,0xc9,0x43,0xe9,0x00,0x14,0x51,0xc8,0xff,0xf8,0x1b,0x7a,  //00000f00  ..p. ノC...Qネ...z
  1699:     0xfd,0x06,0x00,0x16,0x70,0x0f,0x41,0xee,0x05,0x84,0x10,0xfc,0xff,0xff,0x51,0xc8,  //00000f10  ....p.A.......Qネ
  1700:     0xff,0xfa,0x24,0x2e,0x05,0xa8,0x05,0xf9,0x00,0x00,0x0c,0xec,0x70,0x00,0x3d,0x40,  //00000f20  ..$..ィ......p.=@
  1701:     0x05,0xc4,0x2d,0x40,0x05,0xc6,0x2d,0x40,0x0d,0xd2,0x2d,0x40,0x0d,0xd6,0x61,0x00,  //00000f30  .ト-@.ニ-@.メ-@.ヨa.
  1702:     0x02,0xa6,0x60,0x00,0xfd,0x74,0x4a,0x6e,0x05,0xac,0x66,0x22,0x4a,0x6e,0x05,0xae,  //00000f40  .ヲ`..tJn.ャf"Jn.ョ
  1703:     0x66,0x1c,0x72,0x09,0x70,0xf5,0x4e,0x4f,0x02,0x00,0x00,0xc0,0x67,0x06,0x72,0x00,  //00000f50  f.r.p.NO...タg.r.
  1704:     0x70,0xf5,0x4e,0x4f,0x1b,0x7c,0x00,0x01,0x00,0x0e,0x60,0x00,0xfd,0x4c,0x61,0x00,  //00000f60  p.NO.|....`..La.
  1705:     0x01,0xea,0x4a,0x80,0x67,0x02,0x60,0x1c,0x70,0x00,0x10,0x2d,0x00,0x01,0x41,0xee,  //00000f70  .鵯.g.`.p..-..A.
  1706:     0x05,0x84,0x41,0xf0,0x00,0x00,0x4a,0x10,0x66,0x0a,0x1b,0x7c,0x00,0x01,0x00,0x0e,  //00000f80  .Б...J.f..|....
  1707:     0x60,0x00,0xfd,0x26,0x70,0x00,0x10,0x2d,0x00,0x01,0x41,0xee,0x05,0x84,0x41,0xf0,  //00000f90  `..&p..-..A..Б.
  1708:     0x00,0x00,0x10,0xbc,0x00,0x00,0x1b,0x7c,0xff,0xff,0x00,0x0e,0x60,0x00,0xfd,0x0a,  //00000fa0  ...シ...|....`...
  1709:     0x4a,0x6e,0x05,0xac,0x66,0x40,0x4a,0x6e,0x05,0xae,0x66,0x3a,0x72,0x09,0x70,0xf5,  //00000fb0  Jn.ャf@Jn.ョf:r.p.
  1710:     0x4e,0x4f,0x02,0x00,0x00,0xc0,0x67,0x06,0x72,0x00,0x70,0xf5,0x4e,0x4f,0x0c,0x2d,  //00000fc0  NO...タg.r.p.NO.-
  1711:     0x00,0x08,0x00,0x0d,0x64,0x16,0x1b,0x7c,0x00,0x42,0x00,0x0d,0x4a,0x6e,0x05,0xc4,  //00000fd0  ....d..|.B..Jn.ト
  1712:     0x67,0x06,0x08,0xed,0x00,0x03,0x00,0x0d,0x60,0x00,0xfc,0xce,0x1b,0x7c,0xff,0xff,  //00000fe0  g.......`..ホ.|..
  1713:     0x00,0x0d,0x60,0x00,0xfc,0xc4,0x10,0x2d,0x00,0x0d,0x67,0x2c,0xb0,0x3c,0x00,0x01,  //00000ff0  ..`..ト.-..g,ー<..
  1714:     0x67,0x62,0xb0,0x3c,0x00,0x02,0x67,0x6e,0xb0,0x3c,0x00,0x03,0x67,0x00,0x00,0x88,  //00001000  gbー<..gnー<..g..芦
  1715:     0xb0,0x3c,0x00,0x06,0x67,0x70,0xb0,0x3c,0x00,0x07,0x67,0x00,0x00,0x90,0x1b,0x7c,  //00001010   <..gpー<..g....|
  1716:     0xff,0xff,0x00,0x0d,0x60,0x00,0xfc,0x92,0x61,0x00,0x01,0x30,0x4a,0x80,0x67,0x10,  //00001020  ....`..誕..0J.g.
  1717:     0x0c,0x40,0x00,0x01,0x67,0x0a,0x0c,0x40,0x70,0x02,0x67,0x1e,0x60,0x00,0xfc,0x7c,  //00001030  .@..g..@p.g.`..|
  1718:     0x4a,0x6e,0x0d,0xda,0x66,0x0a,0x1b,0x7c,0x00,0x02,0x00,0x0d,0x60,0x00,0x00,0xa2,  //00001040  Jn.レf..|....`..「
  1719:     0x1b,0x7c,0x00,0x0a,0x00,0x0d,0x60,0x00,0x00,0x98,0x1b,0x7c,0x00,0x04,0x00,0x0d,  //00001050  .|....`....|....
  1720:     0x60,0x00,0x00,0x8e,0x4a,0xae,0x05,0xba,0x66,0xbe,0x4a,0xae,0x05,0xb6,0x66,0xb8,  //00001060  `..捌ョ.コfセJョ.カfク
  1721:     0x61,0x00,0x00,0xa6,0x60,0xe4,0x2d,0x7c,0xff,0xff,0xff,0xff,0x05,0xb6,0x4a,0xae,  //00001070  a..ヲ`.-|.....カJョ
  1722:     0x05,0xba,0x67,0x56,0x60,0xba,0x2d,0x7c,0xff,0xff,0xff,0xff,0x05,0xba,0x4a,0xae,  //00001080  .コgV`コ-|.....コJョ
  1723:     0x05,0xb6,0x67,0x46,0x60,0xaa,0x4a,0xae,0x05,0xb6,0x67,0xa4,0x2d,0x7c,0x00,0x00,  //00001090  .カgF`ェJョ.カg、-|..
  1724:     0x00,0x00,0x05,0xb6,0x4a,0xae,0x05,0xba,0x67,0x1a,0x60,0x94,0x4a,0xae,0x05,0xba,  //000010a0  ...カJョ.コg.`寧ョ.コ
  1725:     0x67,0x8e,0x2d,0x7c,0x00,0x00,0x00,0x00,0x05,0xba,0x4a,0xae,0x05,0xb6,0x67,0x04,  //000010b0  g.-|.....コJョ.カg.
  1726:     0x60,0x00,0xff,0x7e,0x70,0xf5,0x72,0x32,0x28,0x2e,0x05,0xa8,0x76,0x00,0x4e,0x4f,  //000010c0  `..~p.r2(..ィv.NO
  1727:     0x4a,0x80,0x66,0x00,0xff,0x54,0x60,0x00,0xff,0x68,0x70,0xf5,0x72,0x32,0x28,0x2e,  //000010d0  J.f..T`..hp.r2(.
  1728:     0x05,0xa8,0x76,0x01,0x4e,0x4f,0x4a,0x80,0x66,0x00,0xff,0x3e,0x60,0x00,0xff,0x52,  //000010e0  .ィv.NOJ.f..>`..R
  1729:     0x4a,0x6e,0x05,0xc4,0x67,0x06,0x08,0xed,0x00,0x03,0x00,0x0d,0x4a,0xae,0x05,0xb6,  //000010f0  Jn.トg.......Jョ.カ
  1730:     0x67,0x06,0x08,0xed,0x00,0x04,0x00,0x0d,0x4a,0xae,0x05,0xba,0x67,0x06,0x08,0xed,  //00001100  g.......Jョ.コg...
  1731:     0x00,0x06,0x00,0x0d,0x60,0x00,0xfb,0xa2,0x4a,0x6e,0x05,0xac,0x66,0x08,0x4a,0x6e,  //00001110  ....`..「Jn.ャf.Jn
  1732:     0x05,0xae,0x66,0x28,0x4e,0x75,0x70,0x02,0x4e,0x4f,0x08,0x00,0x00,0x03,0x66,0x0e,  //00001120  .ョf(Nup.NO....f.
  1733:     0x70,0xf5,0x72,0x30,0x28,0x2e,0x05,0xa8,0x76,0x00,0x4e,0x4f,0x4e,0x75,0x70,0xf5,  //00001130  p.r0(..ィv.NONup.
  1734:     0x72,0x30,0x28,0x2e,0x05,0xa8,0x76,0x01,0x4e,0x4f,0x4e,0x75,0x70,0xf5,0x72,0x2f,  //00001140  r0(..ィv.NONup.r/
  1735:     0x28,0x2e,0x05,0xa8,0x76,0x02,0x4e,0x4f,0x4e,0x75,0x48,0xe7,0x70,0xc0,0x70,0x7f,  //00001150  (..ィv.NONuH輛タp.
  1736:     0x4e,0x4f,0xb2,0xae,0x0d,0xd6,0x66,0x12,0x24,0x2e,0x0d,0xd2,0x26,0x00,0x96,0x82,  //00001160  NOイョ.ヨf.$..メ&.魔
  1737:     0x0c,0x83,0x00,0x00,0x00,0x64,0x65,0x00,0x00,0xe2,0x2d,0x40,0x0d,0xd2,0x2d,0x41,  //00001170  .....de...-@.メ-A
  1738:     0x0d,0xd6,0x72,0x09,0x70,0xf5,0x4e,0x4f,0x02,0x00,0x00,0xc0,0x67,0x06,0x72,0x00,  //00001180  .ヨr.p.NO...タg.r.
  1739:     0x70,0xf5,0x4e,0x4f,0x20,0x3c,0x00,0x00,0x00,0xf5,0x72,0x24,0x28,0x2e,0x05,0xa8,  //00001190  p.NO <....r$(..ィ
  1740:     0x4e,0x4f,0x4a,0x80,0x67,0x00,0x00,0x92,0xb0,0xbc,0x00,0x00,0x00,0x08,0x67,0xd2,  //000011a0  NOJ.g..腸シ....gメ
  1741:     0xb0,0xbc,0x00,0x00,0x00,0x02,0x66,0x00,0x00,0x8a,0x61,0x00,0x07,0x16,0x4a,0x40,  //000011b0  ーシ....f..蛎...J@
  1742:     0x67,0xc0,0xb0,0x7c,0x00,0x01,0x66,0x70,0x70,0x0f,0x41,0xee,0x05,0x84,0x10,0xfc,  //000011c0  gター|..fpp.A.....
  1743:     0xff,0xff,0x51,0xc8,0xff,0xfa,0x61,0x00,0x01,0x26,0x4a,0x80,0x67,0x0c,0x3d,0x7c,  //000011d0  ..Qネ..a..&J.g.=|
  1744:     0xff,0xff,0x05,0xb2,0x60,0x5c,0x48,0xe7,0x70,0xc0,0x28,0x2e,0x05,0xa8,0x76,0x04,  //000011e0  ...イ`\H輛タ(..ィv.
  1745:     0x43,0xee,0x05,0xd2,0x74,0x3f,0x72,0x29,0x70,0xf5,0x4e,0x4f,0x4a,0x80,0x67,0x20,  //000011f0  C..メt?r)p.NOJ.g 
  1746:     0x0c,0x80,0x00,0x00,0x00,0x08,0x67,0xe2,0x0c,0x80,0x00,0x00,0x00,0x02,0x66,0x32,  //00001200  ......g.......f2
  1747:     0x61,0x00,0x06,0xc0,0x4a,0x40,0x67,0xd2,0xb0,0x7c,0x00,0x01,0x66,0x1a,0x60,0xa8,  //00001210  a..タJ@gメー|..f.`ィ
  1748:     0x08,0x29,0x00,0x07,0x00,0x02,0x67,0x08,0x3d,0x7c,0xff,0xff,0x0d,0xda,0x60,0x06,  //00001220  .)....g.=|...レ`.
  1749:     0x3d,0x7c,0x00,0x00,0x0d,0xda,0x70,0x01,0x2d,0x40,0x0d,0xdc,0x4c,0xdf,0x03,0x0e,  //00001230  =|...レp.-@.ワL゚..
  1750:     0x4e,0x75,0x2d,0x7c,0x00,0x00,0x00,0x00,0x0d,0xd2,0x2d,0x7c,0x00,0x00,0x00,0x00,  //00001240  Nu-|.....メ-|....
  1751:     0x0d,0xd6,0x70,0xff,0x4c,0xdf,0x03,0x0e,0x4e,0x75,0x20,0x2e,0x0d,0xdc,0x4c,0xdf,  //00001250  .ヨp.L゚..Nu ..ワL゚
  1752:     0x03,0x0e,0x4e,0x75,0x43,0xee,0x05,0xd2,0x2a,0x2e,0x05,0xa4,0x74,0x02,0xe5,0x8a,  //00001260  ..NuC..メ*..、t.蜉
  1753:     0xea,0xaa,0x76,0x01,0xe5,0x8b,0xea,0xab,0x28,0x2e,0x05,0xa8,0x70,0xf5,0x72,0x21,  //00001270  .ェv.蜍.ォ(..ィp.r!
  1754:     0x4e,0x4f,0x4a,0x80,0x66,0x76,0x0c,0x91,0x58,0x36,0x38,0x4b,0x66,0x6c,0x26,0x49,  //00001280  NOJ.fv.噌68Kfl&I
  1755:     0x45,0xee,0x04,0x04,0x7c,0x00,0x7e,0x0e,0x47,0xeb,0x00,0x10,0x4a,0x13,0x67,0x52,  //00001290  E...|.~.G...J.gR
  1756:     0x0c,0x93,0x48,0x75,0x6d,0x61,0x66,0x4a,0x0c,0xab,0x6e,0x36,0x38,0x6b,0x00,0x04,  //000012a0  .滴umafJ.ォn68k..
  1757:     0x66,0x40,0x10,0x2b,0x00,0x08,0x08,0x00,0x00,0x00,0x66,0x36,0x24,0x2b,0x00,0x08,  //000012b0  f@.+......f6$+..
  1758:     0x43,0xee,0x00,0x04,0x2a,0x2e,0x05,0xa4,0xe5,0x8a,0xea,0xaa,0x76,0x01,0xe5,0x8b,  //000012c0  C...*..、蜉.ェv.蜍
  1759:     0xea,0xab,0x28,0x2e,0x05,0xa8,0x70,0xf5,0x72,0x21,0x4e,0x4f,0x4a,0x80,0x66,0x1c,  //000012d0  .ォ(..ィp.r!NOJ.f.
  1760:     0x43,0xe9,0x00,0x12,0x4a,0x51,0x67,0x0a,0x72,0x04,0x24,0xd9,0x51,0xc9,0xff,0xfc,  //000012e0  C...JQg.r.$ルQノ..
  1761:     0x52,0x46,0x51,0xcf,0xff,0xa4,0x70,0x00,0x4e,0x75,0x70,0xff,0x4e,0x75,0x43,0xee,  //000012f0  RFQマ.、p.Nup.NuC.
  1762:     0x05,0xd2,0x2a,0x2e,0x05,0xa4,0x74,0x02,0xe5,0x8a,0xea,0xaa,0x76,0x01,0xe5,0x8b,  //00001300  .メ*..、t.蜉.ェv.蜍
  1763:     0xea,0xab,0x28,0x2e,0x05,0xa8,0x70,0xf5,0x72,0x21,0x4e,0x4f,0x4a,0x80,0x66,0xdc,  //00001310  .ォ(..ィp.r!NOJ.fワ
  1764:     0x0c,0x91,0x58,0x36,0x38,0x4b,0x66,0xd2,0x26,0x49,0x45,0xee,0x04,0x04,0x7c,0x00,  //00001320  .噌68Kfメ&IE...|.
  1765:     0x7e,0x0e,0x47,0xeb,0x00,0x10,0x4a,0x13,0x67,0x54,0x0c,0x93,0x48,0x75,0x6d,0x61,  //00001330  ~.G...J.gT.滴uma
  1766:     0x66,0x4c,0x0c,0xab,0x6e,0x36,0x38,0x6b,0x00,0x04,0x66,0x42,0x10,0x2b,0x00,0x08,  //00001340  fL.ォn68k..fB.+..
  1767:     0x08,0x00,0x00,0x00,0x66,0x38,0x24,0x2b,0x00,0x08,0x43,0xee,0x00,0x04,0x2a,0x2e,  //00001350  ....f8$+..C...*.
  1768:     0x05,0xa4,0xea,0xaa,0xe5,0x8a,0x76,0x01,0xe5,0x8b,0xea,0xab,0x28,0x2e,0x05,0xa8,  //00001360  .、.ェ蜉v.蜍.ォ(..ィ
  1769:     0x70,0xf5,0x72,0x21,0x4e,0x4f,0x4a,0x80,0x66,0x82,0x43,0xe9,0x00,0x12,0x72,0x04,  //00001370  p.r!NOJ.f.C...r.
  1770:     0x20,0x19,0xb0,0x9a,0x66,0x00,0xff,0x74,0x51,0xc9,0xff,0xf6,0x52,0x46,0x51,0xcf,  //00001380   .ー喃..tQノ..RFQマ
  1771:     0xff,0xa2,0xbc,0x6e,0x05,0xb4,0x66,0x00,0xff,0x62,0x70,0x00,0x4e,0x75,0x3d,0x7c,  //00001390  .「シn.エf..bp.Nu=|
  1772:     0x00,0x08,0x05,0xc2,0x3d,0x7c,0x00,0x00,0x05,0xc0,0x4a,0x6e,0x05,0xb2,0x67,0x44,  //000013a0  ...ツ=|...タJn.イgD
  1773:     0x61,0x00,0xff,0x4c,0x4a,0x80,0x67,0x2c,0x0c,0x80,0xff,0xff,0xff,0xff,0x67,0x2c,  //000013b0  a..LJ.g,......g,
  1774:     0x0c,0x80,0x00,0x00,0x00,0x08,0x67,0xe8,0x0c,0x80,0x00,0x00,0x00,0x02,0x66,0x00,  //000013c0  ......g.......f.
  1775:     0xf8,0xe2,0x61,0x00,0x04,0xfe,0x4a,0x40,0x67,0x0a,0x0c,0x40,0x00,0x01,0x67,0xd0,  //000013d0  .秣...J@g..@..gミ
  1776:     0x60,0x00,0xf8,0xd8,0x3d,0x7c,0x00,0x00,0x05,0xb2,0x67,0x08,0x30,0x3c,0x70,0x07,  //000013e0  `..リ=|...イg.0<p.
  1777:     0x60,0x00,0xf8,0xc8,0x4a,0x2e,0x05,0xb0,0x66,0x06,0x72,0x21,0x60,0x00,0x00,0x8a,  //000013f0  `..ネJ..ーf.r!`..較
  1778:     0x72,0x26,0x60,0x00,0x01,0xec,0x3d,0x7c,0x00,0x08,0x05,0xc2,0x3d,0x7c,0xff,0xff,  //00001400   &`...=|...ツ=|..
  1779:     0x05,0xc0,0x60,0x0c,0x3d,0x7c,0x00,0x08,0x05,0xc2,0x3d,0x7c,0x00,0x00,0x05,0xc0,  //00001410  .タ`.=|...ツ=|...タ
  1780:     0x4a,0x6e,0x05,0xc4,0x67,0x08,0x30,0x3c,0x70,0x0d,0x60,0x00,0xf8,0x8e,0x4a,0x6e,  //00001420  Jn.トg.0<p.`..捌n
  1781:     0x05,0xb2,0x67,0x44,0x61,0x00,0xfe,0xc8,0x4a,0x80,0x67,0x2c,0x0c,0x80,0xff,0xff,  //00001430  .イgDa..ネJ.g,....
  1782:     0xff,0xff,0x67,0x2c,0x0c,0x80,0x00,0x00,0x00,0x08,0x67,0xe8,0x0c,0x80,0x00,0x00,  //00001440  ..g,......g.....
  1783:     0x00,0x02,0x66,0x00,0xf8,0x5e,0x61,0x00,0x04,0x7a,0x4a,0x40,0x67,0x0a,0xb0,0x7c,  //00001450  ..f..^a..zJ@g.ー|
  1784:     0x00,0x01,0x67,0xd0,0x60,0x00,0xf8,0x54,0x3d,0x7c,0x00,0x00,0x05,0xb2,0x67,0x08,  //00001460  ..gミ`..T=|...イg.
  1785:     0x30,0x3c,0x70,0x07,0x60,0x00,0xf8,0x44,0x4a,0x2e,0x05,0xb0,0x66,0x04,0x72,0x22,  //00001470  0<p.`..DJ..ーf.r"
  1786:     0x60,0x06,0x72,0x27,0x60,0x00,0x01,0x6a,0x2d,0x6d,0x00,0x0e,0x05,0x94,0x2d,0x6d,  //00001480  `.r'`..j-m....-m
  1787:     0x00,0x12,0x05,0x9c,0x70,0x00,0x10,0x2d,0x00,0x01,0xe5,0x88,0x41,0xee,0x05,0x44,  //00001490  ...徘..-..蛻A..D
  1788:     0xd1,0xc0,0x20,0x50,0x20,0x2d,0x00,0x16,0xd0,0xa8,0x00,0x10,0x2d,0x40,0x05,0x98,  //000014a0  ムタ P -..ミィ..-@..
  1789:     0x3c,0x2e,0x05,0xa0,0x24,0x2e,0x05,0x98,0xed,0xaa,0x2e,0x2e,0x05,0x9c,0xed,0xaf,  //000014b0  <...$..倆ェ...懦ッ
  1790:     0x22,0x6e,0x05,0x94,0x26,0x07,0xb6,0xbc,0x00,0x00,0x01,0x00,0x63,0x06,0x26,0x3c,  //000014c0  "n..&.カシ....c.&<
  1791:     0x00,0x00,0x01,0x00,0x70,0xf5,0x28,0x2e,0x05,0xa8,0x2a,0x2e,0x05,0xa4,0x4e,0x4f,  //000014d0  ....p.(..ィ*..、NO
  1792:     0x4a,0x80,0x67,0x00,0x00,0xd2,0xb0,0xbc,0xff,0xff,0xff,0xff,0x67,0x00,0x00,0xea,  //000014e0  J.g..メーシ....g...
  1793:     0xb0,0xbc,0xff,0xff,0xff,0xfe,0x67,0x00,0x00,0xaa,0xb0,0xbc,0x00,0x00,0x00,0x08,  //000014f0  ーシ....g..ェーシ....
  1794:     0x67,0x86,0xb0,0xbc,0x00,0x00,0x00,0x02,0x66,0x00,0xf7,0xa8,0x61,0x00,0x03,0xc4,  //00001500  g.ーシ....f..ィa..ト
  1795:     0x4a,0x40,0x67,0x00,0xff,0x74,0xb0,0x7c,0x00,0x01,0x67,0x00,0xff,0x6c,0x0c,0x40,  //00001510  J@g..tー|..g..l.@
  1796:     0x70,0x07,0x66,0x00,0xf7,0x96,0x0c,0x81,0x00,0x00,0x00,0x22,0x66,0x00,0xf7,0x8c,  //00001520  p.f........"f..靴
  1797:     0x43,0xee,0x05,0xd2,0x08,0x11,0x00,0x07,0x67,0x00,0xf7,0x80,0x43,0xe9,0x00,0x03,  //00001530   ..メ....g...C...
  1798:     0x10,0x19,0xe1,0x88,0x10,0x19,0xe1,0x88,0x10,0x19,0xe1,0x88,0x10,0x19,0x2d,0x40,  //00001540  ..瘉..瘉..瘉..-@
  1799:     0x0d,0xe0,0x61,0x00,0x03,0x5a,0x4a,0x80,0x67,0x00,0xff,0x2e,0xb0,0xbc,0xff,0xff,  //00001550  .濛..ZJ.g...ーシ..
  1800:     0xff,0xff,0x67,0x74,0xb0,0xbc,0xff,0xff,0xff,0xfe,0x67,0x36,0xb0,0xbc,0x00,0x00,  //00001560  ..gtーシ....g6ーシ..
  1801:     0x00,0x08,0x67,0xde,0xb0,0xbc,0x00,0x00,0x00,0x02,0x66,0x00,0xf7,0x36,0x61,0x00,  //00001570  ..g゙ーシ....f..6a.
  1802:     0x03,0x52,0x4a,0x40,0x67,0x00,0xff,0x02,0xb0,0x7c,0x00,0x01,0x67,0xc4,0x67,0x00,  //00001580  .RJ@g...ー|..gトg.
  1803:     0xf7,0x2a,0x52,0xae,0x05,0xc6,0x53,0x6e,0x05,0xc2,0x66,0x00,0xfe,0xec,0x60,0x00,  //00001590  .*Rョ.ニSn.ツf...`.
  1804:     0xf7,0x1a,0x52,0xae,0x05,0xc6,0x53,0x6e,0x05,0xc2,0x66,0x00,0xfe,0xdc,0x30,0x3c,  //000015a0  ..Rョ.ニSn.ツf..ワ0<
  1805:     0x70,0x0c,0x60,0x00,0xf7,0x06,0x20,0x03,0xe1,0x88,0xeb,0xa8,0xd3,0xc0,0xd4,0x83,  //000015b0  p.`... .瘉.ィモタヤ.
  1806:     0x9e,0x83,0x62,0x00,0xff,0x00,0x4a,0x6e,0x05,0xc0,0x66,0x00,0x01,0x68,0x3d,0x7c,  //000015c0  档b...Jn.タf..h=|
  1807:     0x00,0x00,0x05,0xbe,0x60,0x00,0xf6,0xe2,0x4a,0x6e,0x05,0xbe,0x66,0x00,0xf6,0xd4,  //000015d0  ...セ`..祀n.セf..ヤ
  1808:     0x72,0x00,0x70,0xf5,0x4e,0x4f,0x3d,0x7c,0xff,0xff,0x05,0xbe,0x60,0x00,0xfe,0x9a,  //000015e0  r.p.NO=|...セ`...
  1809:     0x2d,0x6d,0x00,0x0e,0x05,0x94,0x2d,0x6d,0x00,0x12,0x05,0x9c,0x70,0x00,0x10,0x2d,  //000015f0  -m....-m...徘..-
  1810:     0x00,0x01,0xe5,0x88,0x41,0xee,0x05,0x44,0xd1,0xc0,0x20,0x50,0x20,0x2d,0x00,0x16,  //00001600  ..蛻A..Dムタ P -..
  1811:     0xd0,0xa8,0x00,0x10,0x2d,0x40,0x05,0x98,0x3c,0x2e,0x05,0xa0,0x24,0x2e,0x05,0x98,  //00001610  ミィ..-@..<...$..倆
  1812:     0xed,0xaa,0x26,0x2e,0x05,0x9c,0xed,0xab,0x22,0x6e,0x05,0x94,0x70,0xf5,0x28,0x2e,  //00001620   ェ&..懦ォ"n.廃.(.
  1813:     0x05,0xa8,0x2a,0x2e,0x05,0xa4,0x4e,0x4f,0x4a,0x80,0x67,0x00,0x00,0xd0,0xb0,0xbc,  //00001630  .ィ*..、NOJ.g..ミーシ
  1814:     0xff,0xff,0xff,0xff,0x67,0x00,0x00,0xd6,0xb0,0xbc,0xff,0xff,0xff,0xfe,0x67,0x00,  //00001640  ....g..ヨーシ....g.
  1815:     0x00,0xa8,0xb0,0xbc,0x00,0x00,0x00,0x08,0x67,0x96,0xb0,0xbc,0x00,0x00,0x00,0x02,  //00001650  .ィーシ....g眠シ....
  1816:     0x66,0x00,0xf6,0x50,0x61,0x00,0x02,0x6c,0x4a,0x40,0x67,0x84,0xb0,0x7c,0x00,0x01,  //00001660  f..Pa..lJ@g┣|..
  1817:     0x67,0x00,0xff,0x7e,0x0c,0x40,0x70,0x07,0x66,0x00,0xf6,0x40,0x0c,0x81,0x00,0x00,  //00001670  g..~.@p.f..@....
  1818:     0x00,0x27,0x66,0x00,0xf6,0x36,0x43,0xee,0x05,0xd2,0x08,0x11,0x00,0x07,0x67,0x00,  //00001680  .'f..6C..メ....g.
  1819:     0xf6,0x2a,0x43,0xe9,0x00,0x03,0x10,0x19,0xe1,0x88,0x10,0x19,0xe1,0x88,0x10,0x19,  //00001690  .*C.....瘉..瘉..
  1820:     0xe1,0x88,0x10,0x19,0x2d,0x40,0x0d,0xe0,0x61,0x00,0x02,0x04,0x4a,0x80,0x67,0x00,  //000016a0  瘉..-@.濛...J.g.
  1821:     0xff,0x40,0xb0,0xbc,0xff,0xff,0xff,0xff,0x67,0x62,0xb0,0xbc,0xff,0xff,0xff,0xfe,  //000016b0  .@ーシ....gbーシ....
  1822:     0x67,0x36,0xb0,0xbc,0x00,0x00,0x00,0x08,0x67,0xde,0xb0,0xbc,0x00,0x00,0x00,0x02,  //000016c0  g6ーシ....g゙ーシ....
  1823:     0x66,0x00,0xf5,0xe0,0x61,0x00,0x01,0xfc,0x4a,0x40,0x67,0x00,0xff,0x14,0xb0,0x7c,  //000016d0  f..濛...J@g...ー|
  1824:     0x00,0x01,0x67,0xc4,0x60,0x00,0xf5,0xd4,0x52,0xae,0x05,0xc6,0x53,0x6e,0x05,0xc2,  //000016e0  ..gト`..ヤRョ.ニSn.ツ
  1825:     0x66,0x00,0xfe,0xfe,0x60,0x00,0xf5,0xc4,0x52,0xae,0x05,0xc6,0x53,0x6e,0x05,0xc2,  //000016f0  f...`..トRョ.ニSn.ツ
  1826:     0x66,0x00,0xfd,0x86,0x30,0x3c,0x70,0x0c,0x60,0x00,0xf5,0xb0,0x3d,0x7c,0x00,0x00,  //00001700  f...0<p.`..ー=|..
  1827:     0x05,0xbe,0x4a,0x6e,0x05,0xc0,0x66,0x1c,0x60,0x00,0xf5,0x9e,0x4a,0x6e,0x05,0xbe,  //00001710  .セJn.タf.`..曷n.セ
  1828:     0x66,0x00,0xf5,0x90,0x72,0x00,0x70,0xf5,0x4e,0x4f,0x3d,0x7c,0xff,0xff,0x05,0xbe,  //00001720  f..甚.p.NO=|...セ
  1829:     0x60,0x00,0xfe,0xbe,0x3d,0x7c,0x00,0x08,0x05,0xc2,0x2d,0x6d,0x00,0x0e,0x05,0x94,  //00001730  `..セ=|...ツ-m....
  1830:     0x2d,0x6d,0x00,0x12,0x05,0x9c,0x70,0x00,0x10,0x2d,0x00,0x01,0xe5,0x88,0x41,0xee,  //00001740  -m...徘..-..蛻A.
  1831:     0x05,0x44,0xd1,0xc0,0x20,0x50,0x20,0x2d,0x00,0x16,0xd0,0xa8,0x00,0x10,0x2d,0x40,  //00001750  .Dムタ P -..ミィ..-@
  1832:     0x05,0x98,0x3a,0x2e,0x05,0xa0,0x24,0x2e,0x05,0x98,0xeb,0xaa,0x2e,0x2e,0x05,0x9c,  //00001760  ..:...$..俯ェ...罹
  1833:     0xeb,0xaf,0x7c,0x04,0xeb,0xae,0x28,0x2e,0x05,0xa8,0x2a,0x2e,0x05,0xa4,0x24,0x6e,  //00001770   ッ|..ョ(..ィ*..、$n
  1834:     0x05,0x94,0xbe,0x86,0x64,0x04,0x26,0x07,0x60,0x02,0x26,0x06,0x22,0x6e,0x05,0xce,  //00001780  .叛.d.&.`.&."n.ホ
  1835:     0x72,0x21,0x70,0xf5,0x4e,0x4f,0x4a,0x80,0x67,0x00,0x00,0xc8,0xb0,0xbc,0xff,0xff,  //00001790  r!p.NOJ.g..ネーシ..
  1836:     0xff,0xff,0x67,0x00,0x00,0xe4,0xb0,0xbc,0xff,0xff,0xff,0xfe,0x67,0x00,0x00,0xa0,  //000017a0  ..g..莢シ....g...
  1837:     0xb0,0xbc,0x00,0x00,0x00,0x08,0x67,0x00,0xff,0x7c,0xb0,0xbc,0x00,0x00,0x00,0x02,  //000017b0  ーシ....g..|ーシ....
  1838:     0x66,0x00,0xf4,0xf0,0x61,0x00,0x01,0x0c,0x4a,0x40,0x67,0x00,0xff,0x68,0xb0,0x7c,  //000017c0  f...a...J@g..hー|
  1839:     0x00,0x01,0x67,0x00,0xff,0x60,0x0c,0x40,0x70,0x07,0x66,0x00,0xf4,0xde,0x43,0xee,  //000017d0  ..g..`.@p.f..゙C.
  1840:     0x05,0xd2,0x08,0x11,0x00,0x07,0x67,0x00,0xf4,0xd2,0x43,0xe9,0x00,0x03,0x10,0x19,  //000017e0  .メ....g..メC.....
  1841:     0xe1,0x88,0x10,0x19,0xe1,0x88,0x10,0x19,0xe1,0x88,0x10,0x19,0x2d,0x40,0x0d,0xe0,  //000017f0  瘉..瘉..瘉..-@.濛
  1842:     0x61,0x00,0x00,0xac,0x4a,0x80,0x67,0x00,0xfc,0x70,0xb0,0xbc,0xff,0xff,0xff,0xff,  //00001800   ..ャJ.g..pーシ....
  1843:     0x67,0x76,0xb0,0xbc,0xff,0xff,0xff,0xfe,0x67,0x34,0xb0,0xbc,0x00,0x00,0x00,0x08,  //00001810  gvーシ....g4ーシ....
  1844:     0x67,0xde,0xb0,0xbc,0x00,0x00,0x00,0x02,0x66,0x00,0xf4,0x88,0x61,0x00,0x00,0xa4,  //00001820  g゙ーシ....f...a..、
  1845:     0x4a,0x40,0x67,0xcc,0xb0,0x7c,0x00,0x01,0x67,0xc6,0x60,0x00,0xf4,0x7e,0x52,0xae,  //00001830  J@gフー|..gニ`..~Rョ
  1846:     0x05,0xc6,0x53,0x6e,0x05,0xc2,0x66,0x00,0xfe,0xec,0x60,0x00,0xf4,0x6e,0x52,0xae,  //00001840  .ニSn.ツf...`..nRョ
  1847:     0x05,0xc6,0x53,0x6e,0x05,0xc2,0x66,0x00,0xfc,0x30,0x30,0x3c,0x70,0x0c,0x60,0x00,  //00001850  .ニSn.ツf..00<p.`.
  1848:     0xf4,0x5a,0x20,0x03,0xe1,0x88,0xeb,0xa8,0x32,0x00,0x53,0x41,0xb5,0x09,0x66,0x30,  //00001860  .Z .瘉.ィ2.SAオ.f0
  1849:     0x51,0xc9,0xff,0xfa,0xd3,0xc0,0xd4,0x83,0x9e,0x83,0x62,0x00,0xff,0x06,0x3d,0x7c,  //00001870  Qノ..モタヤ.档b...=|
  1850:     0x00,0x00,0x05,0xbe,0x60,0x00,0xf4,0x32,0x4a,0x6e,0x05,0xbe,0x66,0x00,0xf4,0x24,  //00001880  ...セ`..2Jn.セf..$
  1851:     0x72,0x00,0x70,0xf5,0x4e,0x4f,0x3d,0x7c,0xff,0xff,0x05,0xbe,0x60,0x00,0xfe,0x96,  //00001890  r.p.NO=|...セ`...
  1852:     0x3d,0x7c,0x00,0x00,0x05,0xbe,0x30,0x3c,0x70,0x0b,0x60,0x00,0xf4,0x0e,0x48,0xe7,  //000018a0  =|...セ0<p.`...H.
  1853:     0x10,0x40,0x20,0x2e,0x0d,0xe0,0x43,0xee,0x05,0xd2,0x32,0xfc,0x00,0x00,0x32,0xfc,  //000018b0  .@ ..澆..メ2...2.
  1854:     0x00,0x04,0x22,0xc0,0x43,0xee,0x05,0xd2,0x76,0x08,0x61,0x64,0x4c,0xdf,0x02,0x08,  //000018c0  .."タC..メv.adL゚..
  1855:     0x4e,0x75,0x48,0xe7,0x40,0x40,0x70,0xf5,0x72,0x2c,0x28,0x2e,0x05,0xa8,0x76,0x0e,  //000018d0  NuH蹇@p.r,(..ィv.
  1856:     0x43,0xee,0x05,0xd2,0x4e,0x4f,0x4a,0x80,0x66,0x18,0x42,0x41,0x12,0x29,0x00,0x02,  //000018e0  C..メNOJ.f.BA.)..
  1857:     0xe3,0x49,0x43,0xfa,0xf3,0x5a,0x70,0x00,0x30,0x31,0x10,0x00,0x4c,0xdf,0x02,0x02,  //000018f0  紵C..Zp.01..L゚..
  1858:     0x4e,0x75,0x30,0x3c,0x70,0x0c,0x4c,0xdf,0x02,0x02,0x4e,0x75,0x70,0x00,0x10,0x2d,  //00001900  Nu0<p.L゚..Nup..-
  1859:     0x00,0x01,0xe5,0x88,0x41,0xee,0x05,0x44,0xd1,0xc0,0x2b,0x48,0x00,0x12,0x20,0x50,  //00001910  ..蛻A..Dムタ+H.. P
  1860:     0x1b,0x68,0x00,0x0a,0x00,0x0d,0x60,0x00,0xf3,0x90,0x07,0x00,0x00,0x00,0x00,0x00,  //00001920  .h....`.........
  1861:     0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,0x43,0xed,  //00001930  NU..H躋p&IE..獷.
  1862:     0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,0x61,0x28,  //00001940  ..r..レQノ..C...a(
  1863:     0x4a,0x80,0x66,0x1a,0x22,0x4b,0x72,0x05,0x70,0xf5,0x4e,0x4f,0x0c,0x80,0xff,0xff,  //00001950  J.f."Kr.p.NO....
  1864:     0xff,0xff,0x67,0x0a,0x61,0x4c,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x70,0xff,  //00001960  ..g.aLL゚.JN]Nup.
  1865:     0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x48,0xe7,0x68,0x00,0x32,0x3c,0x00,0x01,  //00001970  L゚.JN]NuH輊.2<..
  1866:     0x72,0x01,0x70,0xf5,0x4e,0x4f,0x4a,0x80,0x67,0x06,0x51,0xca,0xff,0xf4,0x60,0x1a,  //00001980  r.p.NOJ.g.Qハ..`.
  1867:     0x48,0x44,0xeb,0x0c,0x89,0x29,0x00,0x01,0x72,0x03,0x70,0xf5,0x4e,0x4f,0x4a,0x80,  //00001990  HD...)..r.p.NOJ.
  1868:     0x66,0x08,0x70,0x00,0x4c,0xdf,0x00,0x16,0x4e,0x75,0x70,0xff,0x4c,0xdf,0x00,0x16,  //000019a0  f.p.L゚..Nup.L゚..
  1869:     0x4e,0x75,0x43,0xed,0xff,0xff,0x72,0x06,0x70,0xf5,0x4e,0x4f,0x4a,0x80,0x66,0x1a,  //000019b0  NuC...r.p.NOJ.f.
  1870:     0x43,0xed,0xff,0xfe,0x72,0x07,0x70,0xf5,0x4e,0x4f,0x4a,0x80,0x66,0x0c,0x10,0x2d,  //000019c0  C...r.p.NOJ.f..-
  1871:     0xff,0xfe,0x48,0x40,0x10,0x2d,0xff,0xff,0x4e,0x75,0x70,0xff,0x4e,0x75,0x0d,0x0a,  //000019d0  ..H@.-..Nup.Nu..
  1872:     0x53,0x43,0x53,0x49,0x20,0x44,0x49,0x53,0x4b,0x20,0x44,0x52,0x49,0x56,0x45,0x52,  //000019e0  SCSI DISK DRIVER
  1873:     0x20,0x66,0x6f,0x72,0x20,0x58,0x36,0x38,0x30,0x30,0x30,0x20,0x76,0x65,0x72,0x73,  //000019f0   for X68000 vers
  1874:     0x69,0x6f,0x6e,0x20,0x31,0x2e,0x30,0x34,0x0d,0x0a,0x43,0x6f,0x70,0x79,0x72,0x69,  //00001a00  ion 1.04..Copyri
  1875:     0x67,0x68,0x74,0x20,0x31,0x39,0x39,0x30,0x2d,0x39,0x32,0x20,0x53,0x48,0x41,0x52,  //00001a10  ght 1990-92 SHAR
  1876:     0x50,0x2f,0x46,0x69,0x72,0x73,0x74,0x20,0x43,0x6c,0x61,0x73,0x73,0x20,0x54,0x65,  //00001a20  P/First Class Te
  1877:     0x63,0x68,0x6e,0x6f,0x6c,0x6f,0x67,0x79,0x0d,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,  //00001a30  chnology........
  1878:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001a40  ................
  1879:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001a50  ................
  1880:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001a60  ................
  1881:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001a70  ................
  1882:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001a80  ................
  1883:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001a90  ................
  1884:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001aa0  ................
  1885:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ab0  ................
  1886:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ac0  ................
  1887:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ad0  ................
  1888:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ae0  ................
  1889:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001af0  ................
  1890:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b00  ................
  1891:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b10  ................
  1892:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b20  ................
  1893:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b30  ................
  1894:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b40  ................
  1895:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b50  ................
  1896:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b60  ................
  1897:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b70  ................
  1898:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b80  ................
  1899:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001b90  ................
  1900:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ba0  ................
  1901:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001bb0  ................
  1902:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001bc0  ................
  1903:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001bd0  ................
  1904:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001be0  ................
  1905:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001bf0  ................
  1906:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c00  ................
  1907:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c10  ................
  1908:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c20  ................
  1909:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c30  ................
  1910:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c40  ................
  1911:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c50  ................
  1912:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c60  ................
  1913:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c70  ................
  1914:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c80  ................
  1915:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001c90  ................
  1916:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ca0  ................
  1917:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001cb0  ................
  1918:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001cc0  ................
  1919:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001cd0  ................
  1920:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ce0  ................
  1921:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001cf0  ................
  1922:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d00  ................
  1923:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d10  ................
  1924:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d20  ................
  1925:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d30  ................
  1926:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d40  ................
  1927:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d50  ................
  1928:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d60  ................
  1929:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d70  ................
  1930:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d80  ................
  1931:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001d90  ................
  1932:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001da0  ................
  1933:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001db0  ................
  1934:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001dc0  ................
  1935:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001dd0  ................
  1936:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001de0  ................
  1937:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001df0  ................
  1938:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e00  ................
  1939:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e10  ................
  1940:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e20  ................
  1941:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e30  ................
  1942:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e40  ................
  1943:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e50  ................
  1944:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e60  ................
  1945:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e70  ................
  1946:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e80  ................
  1947:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001e90  ................
  1948:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ea0  ................
  1949:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001eb0  ................
  1950:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ec0  ................
  1951:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ed0  ................
  1952:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ee0  ................
  1953:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ef0  ................
  1954:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f00  ................
  1955:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f10  ................
  1956:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f20  ................
  1957:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f30  ................
  1958:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f40  ................
  1959:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f50  ................
  1960:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f60  ................
  1961:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f70  ................
  1962:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f80  ................
  1963:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001f90  ................
  1964:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001fa0  ................
  1965:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001fb0  ................
  1966:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001fc0  ................
  1967:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001fd0  ................
  1968:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001fe0  ................
  1969:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00001ff0  ................
  1970:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002000  ................
  1971:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002010  ................
  1972:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002020  ................
  1973:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002030  ................
  1974:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002040  ................
  1975:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002050  ................
  1976:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002060  ................
  1977:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002070  ................
  1978:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002080  ................
  1979:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002090  ................
  1980:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000020a0  ................
  1981:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000020b0  ................
  1982:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000020c0  ................
  1983:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000020d0  ................
  1984:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000020e0  ................
  1985:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000020f0  ................
  1986:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002100  ................
  1987:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002110  ................
  1988:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002120  ................
  1989:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002130  ................
  1990:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002140  ................
  1991:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002150  ................
  1992:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002160  ................
  1993:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002170  ................
  1994:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002180  ................
  1995:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002190  ................
  1996:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000021a0  ................
  1997:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000021b0  ................
  1998:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000021c0  ................
  1999:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000021d0  ................
  2000:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000021e0  ................
  2001:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000021f0  ................
  2002:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002200  ................
  2003:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002210  ................
  2004:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002220  ................
  2005:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002230  ................
  2006:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002240  ................
  2007:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002250  ................
  2008:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002260  ................
  2009:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002270  ................
  2010:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002280  ................
  2011:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002290  ................
  2012:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000022a0  ................
  2013:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000022b0  ................
  2014:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000022c0  ................
  2015:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000022d0  ................
  2016:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000022e0  ................
  2017:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000022f0  ................
  2018:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002300  ................
  2019:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002310  ................
  2020:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002320  ................
  2021:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002330  ................
  2022:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002340  ................
  2023:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002350  ................
  2024:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002360  ................
  2025:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002370  ................
  2026:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002380  ................
  2027:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002390  ................
  2028:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000023a0  ................
  2029:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000023b0  ................
  2030:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000023c0  ................
  2031:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000023d0  ................
  2032:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000023e0  ................
  2033:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000023f0  ................
  2034:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002400  ................
  2035:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002410  ................
  2036:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002420  ................
  2037:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002430  ................
  2038:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002440  ................
  2039:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002450  ................
  2040:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002460  ................
  2041:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002470  ................
  2042:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002480  ................
  2043:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002490  ................
  2044:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000024a0  ................
  2045:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000024b0  ................
  2046:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000024c0  ................
  2047:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000024d0  ................
  2048:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000024e0  ................
  2049:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000024f0  ................
  2050:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002500  ................
  2051:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002510  ................
  2052:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002520  ................
  2053:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002530  ................
  2054:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002540  ................
  2055:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002550  ................
  2056:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002560  ................
  2057:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002570  ................
  2058:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002580  ................
  2059:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002590  ................
  2060:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000025a0  ................
  2061:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000025b0  ................
  2062:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000025c0  ................
  2063:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000025d0  ................
  2064:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000025e0  ................
  2065:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000025f0  ................
  2066:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002600  ................
  2067:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002610  ................
  2068:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002620  ................
  2069:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002630  ................
  2070:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002640  ................
  2071:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002650  ................
  2072:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002660  ................
  2073:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002670  ................
  2074:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002680  ................
  2075:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002690  ................
  2076:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000026a0  ................
  2077:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000026b0  ................
  2078:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000026c0  ................
  2079:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000026d0  ................
  2080:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000026e0  ................
  2081:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000026f0  ................
  2082:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002700  ................
  2083:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002710  ................
  2084:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002720  ................
  2085:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002730  ................
  2086:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002740  ................
  2087:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002750  ................
  2088:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002760  ................
  2089:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002770  ................
  2090:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002780  ................
  2091:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002790  ................
  2092:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000027a0  ................
  2093:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000027b0  ................
  2094:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000027c0  ................
  2095:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000027d0  ................
  2096:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000027e0  ................
  2097:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000027f0  ................
  2098:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002800  ................
  2099:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002810  ................
  2100:     0x48,0xe7,0x08,0x00,0x70,0xf5,0x72,0x0a,0x4e,0x4f,0x0c,0x80,0x00,0x00,0x00,0x04,  //00002820  H...p.r.NO......
  2101:     0x64,0x36,0x61,0x00,0x00,0xce,0x41,0xfa,0x01,0x1c,0x08,0x04,0x00,0x00,0x67,0x08,  //00002830  d6a..ホA.......g.
  2102:     0x20,0xbc,0x00,0xe9,0x60,0x20,0x60,0x0c,0x08,0x04,0x00,0x01,0x67,0x1a,0x20,0xbc,  //00002840   シ.饒 `.....g. シ
  2103:     0x00,0xea,0x00,0x00,0x70,0x80,0x22,0x3c,0x00,0x00,0x01,0xf5,0x43,0xfa,0x00,0xfa,  //00002850  ....p."<....C...
  2104:     0x4e,0x4f,0x4c,0xdf,0x00,0x10,0x4e,0x75,0x70,0x00,0x4c,0xdf,0x00,0x10,0x4e,0x75,  //00002860  NOL゚..Nup.L゚..Nu
  2105:     0x48,0xe7,0x00,0xa2,0x78,0x00,0x41,0xf9,0x00,0xfc,0x00,0x00,0x61,0x00,0x00,0x9e,  //00002870  H..「x.A.....a..曷
  2106:     0x4a,0x80,0x66,0x16,0x0c,0xa8,0x53,0x43,0x53,0x49,0x00,0x24,0x66,0x0c,0x0c,0x68,  //00002880   .f..ィSCSI.$f..h
  2107:     0x49,0x4e,0x00,0x28,0x66,0x04,0x08,0xc4,0x00,0x00,0x41,0xf9,0x00,0xea,0x00,0x20,  //00002890  IN.(f..ト..A.... 
  2108:     0x61,0x7a,0x4a,0x80,0x66,0x16,0x0c,0xa8,0x53,0x43,0x53,0x49,0x00,0x24,0x66,0x0c,  //000028a0  azJ.f..ィSCSI.$f.
  2109:     0x0c,0x68,0x45,0x58,0x00,0x28,0x66,0x04,0x08,0xc4,0x00,0x01,0x13,0xfc,0x00,0x31,  //000028b0  .hEX.(f..ト.....1
  2110:     0x00,0xe8,0xe0,0x0d,0x0c,0x39,0x00,0x56,0x00,0xed,0x00,0x6f,0x67,0x18,0x13,0xfc,  //000028c0  .鞨..9.V...og...
  2111:     0x00,0x56,0x00,0xed,0x00,0x6f,0x13,0xfc,0x00,0x07,0x00,0xed,0x00,0x70,0x13,0xfc,  //000028d0  .V...o.......p..
  2112:     0x00,0x00,0x00,0xed,0x00,0x71,0x08,0x04,0x00,0x00,0x66,0x08,0x08,0xf9,0x00,0x03,  //000028e0  .....q....f.....
  2113:     0x00,0xed,0x00,0x70,0x13,0xfc,0x00,0x00,0x00,0xe8,0xe0,0x0d,0x4c,0xdf,0x45,0x00,  //000028f0  ...p.....鞨.L゚E.
  2114:     0x4e,0x75,0x61,0x00,0xff,0x6c,0x08,0x39,0x00,0x03,0x00,0xed,0x00,0x70,0x66,0x06,  //00002900  Nua..l.9.....pf.
  2115:     0x08,0x84,0x00,0x01,0x4e,0x75,0x08,0x84,0x00,0x00,0x4e,0x75,0x2c,0x4f,0x43,0xfa,  //00002910  ....Nu....Nu,OC.
  2116:     0x00,0x28,0x24,0x79,0x00,0x00,0x00,0x08,0x23,0xc9,0x00,0x00,0x00,0x08,0x20,0x10,  //00002920  .($y....#ノ.... .
  2117:     0x08,0x00,0x00,0x00,0x66,0x12,0xb0,0xbc,0x00,0x20,0x00,0x00,0x65,0x0a,0x23,0xca,  //00002930  ....f.ーシ. ..e.#ハ
  2118:     0x00,0x00,0x00,0x08,0x70,0x00,0x4e,0x75,0x2e,0x4e,0x23,0xca,0x00,0x00,0x00,0x08,  //00002940  ....p.Nu.N#ハ....
  2119:     0x70,0xff,0x4e,0x75,0x00,0xe9,0x60,0x20,0x48,0xe7,0x50,0x62,0xb2,0xbc,0x00,0x00,  //00002950  p.Nu.饒 H躅bイシ..
  2120:     0x00,0x10,0x65,0x18,0xb2,0xbc,0x00,0x00,0x00,0x20,0x65,0x40,0xb2,0xbc,0x00,0x00,  //00002960  ..e.イシ... e@イシ..
  2121:     0x00,0x40,0x65,0x0e,0xb2,0xbc,0x00,0x00,0x00,0x20,0x65,0x30,0x45,0xfa,0x00,0x3a,  //00002970  .@e.イシ... e0E..:
  2122:     0x60,0x16,0x92,0xbc,0x00,0x00,0x00,0x20,0x45,0xfa,0x00,0x6e,0x60,0x0a,0x92,0xbc,  //00002980  `.直... E..n`.直
  2123:     0x00,0x00,0x00,0x40,0x45,0xfa,0x00,0xe2,0xe5,0x89,0x2c,0x7a,0xff,0xb8,0x22,0x32,  //00002990  ...@E..粢.,z.ク"2
  2124:     0x10,0x00,0xd5,0xc1,0x4e,0x92,0x4c,0xdf,0x46,0x0a,0x4e,0x75,0x70,0xff,0x4c,0xdf,  //000029a0  ..ユチN鱈゚F.Nup.L゚
  2125:     0x46,0x0a,0x4e,0x75,0x70,0xff,0x4e,0x75,0x00,0x00,0x0a,0x08,0x00,0x00,0x0b,0x08,  //000029b0  F.Nup.Nu........
  2126:     0x00,0x00,0x0a,0xe8,0x00,0x00,0x0c,0x16,0x00,0x00,0x01,0x56,0x00,0x00,0x01,0x00,  //000029c0  ...........V....
  2127:     0x00,0x00,0x0d,0x18,0x00,0x00,0x0d,0x64,0x00,0x00,0x0d,0xb0,0x00,0x00,0x0d,0xfa,  //000029d0  .......d...ー....
  2128:     0x00,0x00,0x0e,0x0e,0x00,0x00,0x0c,0xce,0x00,0x00,0x0c,0x84,0xff,0xff,0xff,0xfc,  //000029e0  .......ホ........
  2129:     0xff,0xff,0xff,0xfc,0xff,0xff,0xff,0xfc,0x00,0x00,0x01,0x76,0x00,0x00,0x03,0x00,  //000029f0  ...........v....
  2130:     0x00,0x00,0x03,0x6e,0x00,0x00,0x04,0xde,0x00,0x00,0x0f,0x4e,0x00,0x00,0x10,0x0a,  //00002a00  ...n...゙...N....
  2131:     0x00,0x00,0x03,0xe0,0x00,0x00,0x04,0x4c,0x00,0x00,0x04,0xca,0x00,0x00,0x02,0x12,  //00002a10  .......L...ハ....
  2132:     0x00,0x00,0x02,0x64,0x00,0x00,0x0f,0x6c,0x00,0x00,0x01,0xc4,0x00,0x00,0x05,0xe2,  //00002a20  ...d...l...ト....
  2133:     0x00,0x00,0x0f,0x8a,0x00,0x00,0x05,0x60,0x00,0x00,0x05,0xa0,0x00,0x00,0x02,0xb6,  //00002a30  .......`.......カ
  2134:     0x00,0x00,0x05,0x20,0xff,0xff,0xff,0xbc,0xff,0xff,0xff,0xbc,0xff,0xff,0xff,0xbc,  //00002a40  ... ...シ...シ...シ
  2135:     0x00,0x00,0x06,0x2c,0x00,0x00,0x06,0x80,0x00,0x00,0x06,0xce,0x00,0x00,0x07,0x1a,  //00002a50  ...,.......ホ....
  2136:     0xff,0xff,0xff,0xbc,0xff,0xff,0xff,0xbc,0xff,0xff,0xff,0xbc,0xff,0xff,0xff,0xbc,  //00002a60  ...シ...シ...シ...シ
  2137:     0xff,0xff,0xff,0xbc,0xff,0xff,0xff,0xbc,0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,  //00002a70  ...シ...シ...<...<
  2138:     0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,  //00002a80  ...<...<...<...<
  2139:     0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,  //00002a90  ...<...<...<...<
  2140:     0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,  //00002aa0  ...<...<...<...<
  2141:     0xff,0xff,0xff,0x3c,0xff,0xff,0xff,0x3c,0x48,0xe7,0x00,0x02,0x2c,0x7a,0xfe,0x96,  //00002ab0  ...<...<H...,z..
  2142:     0x10,0x2e,0x00,0x09,0x08,0x00,0x00,0x05,0x66,0x38,0x10,0x2e,0x00,0x0b,0x08,0x00,  //00002ac0  ........f8......
  2143:     0x00,0x07,0x67,0xec,0x02,0x00,0x00,0x07,0xb0,0x3c,0x00,0x00,0x66,0x1a,0x61,0x00,  //00002ad0  ..g.....ー<..f.a.
  2144:     0x06,0x94,0x48,0x40,0x66,0x06,0x4c,0xdf,0x40,0x00,0x4e,0x75,0x4a,0x40,0x67,0x08,  //00002ae0  .禰@f.L゚@.NuJ@g.
  2145:     0x48,0x40,0x4c,0xdf,0x40,0x00,0x4e,0x75,0x10,0x2e,0x00,0x0b,0x4c,0xdf,0x40,0x00,  //00002af0  H@L゚@.Nu....L゚@.
  2146:     0x4e,0x75,0x61,0x00,0x08,0xbc,0x70,0xff,0x4c,0xdf,0x40,0x00,0x4e,0x75,0x48,0xe7,  //00002b00  Nua..シp.L゚@.NuH.
  2147:     0x00,0x02,0x2c,0x7a,0xfe,0x40,0x10,0x2e,0x00,0x09,0x08,0x00,0x00,0x05,0x66,0x3c,  //00002b10  ..,z.@........f<
  2148:     0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xec,0x02,0x00,0x00,0x07,0x02,0x00,  //00002b20  ........g.......
  2149:     0x00,0x07,0xb0,0x3c,0x00,0x01,0x66,0x1a,0x61,0x00,0x06,0x46,0x48,0x40,0x66,0x06,  //00002b30  ..ー<..f.a..FH@f.
  2150:     0x4c,0xdf,0x40,0x00,0x4e,0x75,0x4a,0x40,0x67,0x08,0x48,0x40,0x4c,0xdf,0x40,0x00,  //00002b40  L゚@.NuJ@g.H@L゚@.
  2151:     0x4e,0x75,0x10,0x2e,0x00,0x0b,0x4c,0xdf,0x40,0x00,0x4e,0x75,0x61,0x00,0x08,0x62,  //00002b50  Nu....L゚@.Nua..b
  2152:     0x70,0xff,0x4c,0xdf,0x40,0x00,0x4e,0x75,0x12,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,  //00002b60  p.L゚@.Nu......NU
  2153:     0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,0x43,0xed,0xff,0xf0,  //00002b70  ..H躋p&IE..獷...
  2154:     0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,0x13,0x43,0x00,0x04,  //00002b80  r..レQノ..C....C..
  2155:     0x61,0x00,0x0e,0xb8,0x4a,0x80,0x66,0x00,0x05,0xd2,0x22,0x4b,0x61,0x00,0x0a,0xe8,  //00002b90  a..クJ.f..メ"Ka...
  2156:     0x0c,0x80,0xff,0xff,0xff,0xff,0x67,0x00,0x05,0xc2,0x61,0x00,0x0e,0xea,0x4c,0xdf,  //00002ba0  ......g..ツa..鶚゚
  2157:     0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x03,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,  //00002bb0  .JN]Nu......NU..
  2158:     0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,0x43,0xed,0xff,0xf0,0x72,0x05,  //00002bc0  H躋p&IE..獷...r.
  2159:     0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,0x13,0x43,0x00,0x04,0x61,0x00,  //00002bd0  .レQノ..C....C..a.
  2160:     0x0e,0x6a,0x4a,0x80,0x66,0x00,0x05,0x84,0x22,0x4b,0x61,0x00,0x0a,0x9a,0x0c,0x80,  //00002be0  .jJ.f..."Ka.....
  2161:     0xff,0xff,0xff,0xff,0x67,0x00,0x05,0x74,0x61,0x00,0x0e,0x9c,0x4c,0xdf,0x0e,0x4a,  //00002bf0  ....g..ta..廰゚.J
  2162:     0x4e,0x5d,0x4e,0x75,0x1a,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,  //00002c00  N]Nu......NU..H躋
  2163:     0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,  //00002c10   p&IE..獷...r..レ
  2164:     0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,0x13,0x43,0x00,0x04,0x13,0x42,0x00,0x02,  //00002c20  Qノ..C....C...B..
  2165:     0x61,0x00,0x0e,0x18,0x4a,0x80,0x66,0x00,0x05,0x32,0x22,0x4b,0x61,0x00,0x0a,0x48,  //00002c30  a...J.f..2"Ka..H
  2166:     0x0c,0x80,0xff,0xff,0xff,0xff,0x67,0x00,0x05,0x22,0x61,0x00,0x0e,0x4a,0x4c,0xdf,  //00002c40  ......g.."a..JL゚
  2167:     0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x15,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,  //00002c50  .JN]Nu......NU..
  2168:     0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,0x43,0xed,0xff,0xf0,0x72,0x05,  //00002c60  H躋p&IE..獷...r.
  2169:     0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,0x13,0x43,0x00,0x04,0x13,0x42,  //00002c70  .レQノ..C....C...B
  2170:     0x00,0x01,0x61,0x00,0x0d,0xc6,0x4a,0x80,0x66,0x00,0x04,0xe0,0x22,0x4b,0x61,0x00,  //00002c80  ..a..ニJ.f..."Ka.
  2171:     0x09,0xac,0x0c,0x80,0xff,0xff,0xff,0xff,0x67,0x00,0x04,0xd0,0x61,0x00,0x0d,0xf8,  //00002c90  .ャ......g..ミa...
  2172:     0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x07,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,  //00002ca0  L゚.JN]Nu......NU
  2173:     0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,0x43,0xed,0xff,0xf0,  //00002cb0  ..H躋p&IE..獷...
  2174:     0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,0x61,0x00,0x0d,0x7c,  //00002cc0  r..レQノ..C...a..|
  2175:     0x4a,0x80,0x66,0x00,0x04,0x96,0x22,0x4b,0x61,0x00,0x09,0x62,0x0c,0x80,0xff,0xff,  //00002cd0  J.f..."Ka..b....
  2176:     0xff,0xff,0x67,0x00,0x04,0x86,0x61,0x00,0x0d,0xae,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,  //00002ce0  ..g...a..ョL゚.JN]
  2177:     0x4e,0x75,0x08,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,  //00002cf0  Nu......NU..H躋p
  2178:     0x26,0x49,0x45,0xfa,0xff,0xee,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,  //00002d00  &IE..獷...r..レQノ
  2179:     0xff,0xfc,0x2c,0x02,0x43,0xed,0xff,0xf0,0x13,0x46,0x00,0x03,0xe0,0x8e,0x13,0x46,  //00002d10  ..,.C....F..燻.F
  2180:     0x00,0x02,0xe0,0x8e,0x13,0x46,0x00,0x01,0x13,0x43,0x00,0x04,0x61,0x00,0x0d,0x1c,  //00002d20  ..燻.F...C..a...
  2181:     0x4a,0x80,0x66,0x00,0x04,0x36,0xe1,0x8b,0xeb,0xab,0x22,0x4b,0x61,0x00,0xfd,0xd0,  //00002d30  J.f..6瘠.ォ"Ka..ミ
  2182:     0x0c,0x80,0xff,0xff,0xff,0xff,0x67,0x00,0x04,0x22,0x0c,0x80,0xff,0xff,0xff,0xfe,  //00002d40  ......g.."......
  2183:     0x67,0x00,0x01,0x54,0x61,0x00,0x0d,0x40,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,  //00002d50  g..Ta..@L゚.JN]Nu
  2184:     0x0a,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,  //00002d60  ......NU..H躋p&I
  2185:     0x45,0xfa,0xff,0xee,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,  //00002d70  E..獷...r..レQノ..
  2186:     0x2c,0x02,0x43,0xed,0xff,0xf0,0x13,0x46,0x00,0x03,0xe0,0x8e,0x13,0x46,0x00,0x02,  //00002d80  ,.C....F..燻.F..
  2187:     0xe0,0x8e,0x13,0x46,0x00,0x01,0x13,0x43,0x00,0x04,0x61,0x00,0x0c,0xae,0x4a,0x80,  //00002d90  燻.F...C..a..ョJ.
  2188:     0x66,0x00,0x03,0xc8,0xe1,0x8b,0xeb,0xab,0x22,0x4b,0x61,0x00,0xfd,0x0c,0x0c,0x80,  //00002da0  f..ネ瘠.ォ"Ka.....
  2189:     0xff,0xff,0xff,0xff,0x67,0x00,0x03,0xb4,0x0c,0x80,0xff,0xff,0xff,0xfe,0x67,0x00,  //00002db0  ....g..エ......g.
  2190:     0x00,0xe6,0x61,0x00,0x0c,0xd2,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x28,0x00,  //00002dc0  .訛..メL゚.JN]Nu(.
  2191:     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,  //00002dd0  ........NU..H躋p
  2192:     0x26,0x49,0x43,0xed,0xff,0xf0,0x45,0xfa,0xff,0xe6,0x72,0x09,0x12,0xda,0x51,0xc9,  //00002de0  &IC...E..誡..レQノ
  2193:     0xff,0xfc,0x2c,0x03,0x43,0xed,0xff,0xf0,0x23,0x42,0x00,0x02,0x13,0x43,0x00,0x08,  //00002df0  ..,.C...#B...C..
  2194:     0xe0,0x8b,0x13,0x43,0x00,0x07,0x61,0x00,0x0c,0x42,0x4a,0x80,0x66,0x00,0x03,0x5c,  //00002e00  煖.C..a..BJ.f..\.
  2195:     0x26,0x06,0xe1,0x8b,0xeb,0xab,0x22,0x4b,0x61,0x00,0xfc,0xf4,0x0c,0x80,0xff,0xff,  //00002e10  &.瘠.ォ"Ka.......
  2196:     0xff,0xff,0x67,0x00,0x03,0x46,0x0c,0x80,0xff,0xff,0xff,0xfe,0x67,0x78,0x61,0x00,  //00002e20  ..g..F......gxa.
  2197:     0x0c,0x66,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x2a,0x00,0x00,0x00,0x00,0x00,  //00002e30  .fL゚.JN]Nu*.....
  2198:     0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x45,0xfa,0xff,0xec,  //00002e40  ....NU..H躋pE...
  2199:     0x26,0x49,0x43,0xed,0xff,0xf0,0x72,0x09,0x12,0xda,0x51,0xc9,0xff,0xfc,0x2c,0x03,  //00002e50  &IC...r..レQノ..,.
  2200:     0x43,0xed,0xff,0xf0,0x23,0x42,0x00,0x02,0x13,0x43,0x00,0x08,0xe0,0x8b,0x13,0x43,  //00002e60  C...#B...C..煖.C
  2201:     0x00,0x07,0x61,0x00,0x0b,0xd6,0x4a,0x80,0x66,0x00,0x02,0xf0,0x26,0x06,0xe1,0x8b,  //00002e70  ..a..ヨJ.f...&.瘠
  2202:     0xeb,0xab,0x22,0x4b,0x61,0x00,0xfc,0x32,0x0c,0x80,0xff,0xff,0xff,0xff,0x67,0x00,  //00002e80  .ォ"Ka..2......g.
  2203:     0x02,0xda,0x0c,0x80,0xff,0xff,0xff,0xfe,0x67,0x0c,0x61,0x00,0x0b,0xfa,0x4c,0xdf,  //00002e90  .レ......g.a...L゚
  2204:     0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x61,0x00,0x0b,0xee,0x4a,0x80,0x66,0x02,0x70,0xfe,  //00002ea0  .JN]Nua..珵.f.p.
  2205:     0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x2f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00002eb0  L゚.JN]Nu/.......
  2206:     0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x45,0xfa,0xff,0xec,0x60,0x80,  //00002ec0  ..NU..H躋pE...`.
  2207:     0x04,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x45,0xfa,  //00002ed0  ......NU..H躋pE.
  2208:     0xff,0xf0,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,  //00002ee0  ..C...r..レQノ..C.
  2209:     0xff,0xf0,0x13,0x43,0x00,0x04,0xe0,0x8b,0x13,0x43,0x00,0x03,0x61,0x00,0x0b,0x4c,  //00002ef0  ...C..煖.C..a..L
  2210:     0x4a,0x80,0x66,0x00,0x02,0x66,0x61,0x00,0x0b,0x8e,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,  //00002f00  J.f..fa..鮫゚.JN]
  2211:     0x4e,0x75,0x1e,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,  //00002f10  Nu......NU..H躋p
  2212:     0x45,0xfa,0xff,0xf0,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,  //00002f20  E...C...r..レQノ..
  2213:     0x43,0xed,0xff,0xf0,0x02,0x03,0x00,0x01,0x13,0x43,0x00,0x04,0x61,0x00,0x0b,0x0c,  //00002f30  C........C..a...
  2214:     0x4a,0x80,0x66,0x00,0x02,0x26,0x61,0x00,0x0b,0x4e,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,  //00002f40  J.f..&a..NL゚.JN]
  2215:     0x4e,0x75,0x1b,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,  //00002f50  Nu......NU..H躋p
  2216:     0x45,0xfa,0xff,0xf0,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,  //00002f60  E...C...r..レQノ..
  2217:     0x43,0xed,0xff,0xf0,0x02,0x03,0x00,0x03,0x13,0x43,0x00,0x04,0x61,0x00,0x0a,0xcc,  //00002f70  C........C..a..フ
  2218:     0x4a,0x80,0x66,0x00,0x01,0xe6,0x61,0x00,0x0b,0x0e,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,  //00002f80  J.f..訛...L゚.JN]
  2219:     0x4e,0x75,0xc1,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,  //00002f90  Nuチ.....NU..H躋p
  2220:     0x45,0xfa,0xff,0xf0,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,  //00002fa0  E...C...r..レQノ..
  2221:     0x43,0xed,0xff,0xf0,0x02,0x03,0x00,0x01,0x13,0x43,0x00,0x04,0x76,0x06,0x61,0x00,  //00002fb0  C........C..v.a.
  2222:     0x0a,0x8a,0x4a,0x80,0x66,0x00,0x01,0xa4,0x61,0x00,0x0a,0xcc,0x4c,0xdf,0x0e,0x4a,  //00002fc0  .開.f..、a..フL゚.J
  2223:     0x4e,0x5d,0x4e,0x75,0x0b,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,  //00002fd0  N]Nu......NU..H躋
  2224:     0x52,0x70,0x45,0xfa,0xff,0xf0,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,  //00002fe0   pE...C...r..レQノ
  2225:     0xff,0xfc,0x2c,0x02,0x43,0xed,0xff,0xf0,0x13,0x46,0x00,0x03,0xe0,0x8e,0x13,0x46,  //00002ff0  ..,.C....F..燻.F
  2226:     0x00,0x02,0xe0,0x8e,0x13,0x46,0x00,0x01,0x61,0x00,0x0a,0x40,0x4a,0x80,0x66,0x00,  //00003000  ..燻.F..a..@J.f.
  2227:     0x01,0x5a,0x61,0x00,0x0a,0x82,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0xc2,0x00,  //00003010  .Za...L゚.JN]Nuツ.
  2228:     0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,  //00003020  ....NU..H躋p&IE.
  2229:     0xff,0xee,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x22,0x03,  //00003030  .獷...r..レQノ..".
  2230:     0x43,0xed,0xff,0xf0,0x13,0x41,0x00,0x05,0x76,0x06,0x61,0x00,0x09,0xfe,0x4a,0x80,  //00003040  C....A..v.a...J.
  2231:     0x66,0x00,0x01,0x18,0x26,0x01,0x22,0x4b,0x61,0x00,0x05,0xe2,0x0c,0x80,0xff,0xff,  //00003050  f...&."Ka.......
  2232:     0xff,0xff,0x67,0x00,0x01,0x06,0x61,0x00,0x0a,0x2e,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,  //00003060  ..g...a...L゚.JN]
  2233:     0x4e,0x75,0x06,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,  //00003070  Nu......NU..H躋p
  2234:     0x45,0xfa,0xff,0xf0,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,  //00003080  E...C...r..レQノ..
  2235:     0x43,0xed,0xff,0xf0,0x2c,0x02,0x13,0x46,0x00,0x03,0xe0,0x8e,0x13,0x46,0x00,0x02,  //00003090  C...,..F..燻.F..
  2236:     0xe0,0x8e,0x13,0x46,0x00,0x01,0x13,0x43,0x00,0x04,0x61,0x00,0x09,0x9e,0x4a,0x80,  //000030a0  燻.F...C..a..曷.
  2237:     0x66,0x00,0x00,0xb8,0x61,0x00,0x09,0xe0,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,  //000030b0  f..クa..澂゚.JN]Nu
  2238:     0x07,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x45,0xfa,  //000030c0  ......NU..H躋pE.
  2239:     0xff,0xf0,0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,  //000030d0  ..C...r..レQノ..C.
  2240:     0xff,0xf0,0x2c,0x02,0x13,0x46,0x00,0x03,0xe0,0x8e,0x13,0x46,0x00,0x02,0xe0,0x8e,  //000030e0  ..,..F..燻.F..燻
  2241:     0x13,0x46,0x00,0x01,0x13,0x43,0x00,0x04,0x61,0x00,0x09,0x50,0x4a,0x80,0x66,0x6a,  //000030f0  .F...C..a..PJ.fj
  2242:     0x61,0x00,0x09,0x94,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x0e,0x00,0x00,0x00,  //00003100  a..猫゚.JN]Nu....
  2243:     0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,  //00003110  ..NU..H躋p&IE..獷
  2244:     0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,  //00003120   ...r..レQノ..C...
  2245:     0x2c,0x02,0x13,0x46,0x00,0x03,0xe0,0x8e,0x13,0x46,0x00,0x02,0xe0,0x8e,0x13,0x46,  //00003130  ,..F..燻.F..燻.F
  2246:     0x00,0x01,0x13,0x43,0x00,0x04,0x61,0x00,0x09,0x02,0x4a,0x80,0x66,0x1c,0x76,0x04,  //00003140  ...C..a...J.f.v.
  2247:     0x22,0x4b,0x61,0x00,0x04,0xe8,0x0c,0x80,0xff,0xff,0xff,0xff,0x67,0x0c,0x61,0x00,  //00003150  "Ka.........g.a.
  2248:     0x09,0x36,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x70,0xff,0x4c,0xdf,0x0e,0x4a,  //00003160  .6L゚.JN]Nup.L゚.J
  2249:     0x4e,0x5d,0x4e,0x75,0x2f,0x0b,0x47,0xfa,0x00,0xd8,0x61,0x38,0x26,0x5f,0x4e,0x75,  //00003170  N]Nu/.G..リa8&_Nu
  2250:     0x2f,0x0b,0x47,0xfa,0x01,0xa8,0x61,0x2c,0x48,0xe7,0xc0,0x00,0x10,0x39,0x00,0xe8,  //00003180  /.G..ィa,H鄲..9.鞨
  2251:     0xe0,0x0b,0xe8,0x08,0x0c,0x00,0x00,0x0e,0x64,0x12,0x4e,0x7a,0x00,0x02,0x22,0x00,  //00003190   .......d.Nz..".
  2252:     0x08,0xc0,0x00,0x0b,0x4e,0x7b,0x00,0x02,0x4e,0x7b,0x10,0x02,0x4c,0xdf,0x00,0x03,  //000031a0  .タ..N{..N{..L゚..
  2253:     0x26,0x5f,0x4e,0x75,0x48,0xe7,0x00,0x60,0x10,0x2e,0x00,0x0b,0x02,0x00,0x00,0x07,  //000031b0  &_NuH..`........
  2254:     0x1d,0x40,0x00,0x11,0x20,0x03,0x1d,0x40,0x00,0x1d,0xe0,0x88,0x1d,0x40,0x00,0x1b,  //000031c0  .@.. ..@..煦.@..
  2255:     0xe0,0x88,0x1d,0x40,0x00,0x19,0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xf6,  //000031d0  煦.@..........g.
  2256:     0x45,0xf9,0x00,0xe8,0x40,0x40,0x15,0x7c,0x00,0xff,0x00,0x00,0x35,0x7c,0x00,0x00,  //000031e0  E..錙@.|....5|..
  2257:     0x00,0x1a,0x15,0x7c,0x00,0x80,0x00,0x04,0x15,0x7c,0x00,0x04,0x00,0x06,0x41,0xee,  //000031f0  ...|.....|....A.
  2258:     0x00,0x15,0x25,0x48,0x00,0x14,0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xf6,  //00003200  ..%H..........g.
  2259:     0x1d,0x7c,0x00,0x80,0x00,0x05,0x4e,0x93,0x4a,0x80,0x66,0x26,0x08,0x2e,0x00,0x03,  //00003210  .|....N笛.f&....
  2260:     0x00,0x09,0x66,0x12,0x08,0x2e,0x00,0x04,0x00,0x09,0x67,0xf0,0x08,0xee,0x00,0x04,  //00003220  ..f.......g.....
  2261:     0x00,0x09,0x70,0x00,0x60,0x0c,0x08,0xee,0x00,0x03,0x00,0x09,0x70,0xfd,0x60,0x02,  //00003230  ..p.`.......p.`.
  2262:     0x70,0xff,0x25,0x7c,0x00,0xe9,0x60,0x01,0x00,0x14,0x4c,0xdf,0x06,0x00,0x4e,0x75,  //00003240  p.%|.饒...L゚..Nu
  2263:     0x48,0xe7,0x7c,0x40,0x15,0x7c,0x00,0x31,0x00,0x05,0x28,0x03,0xb6,0xbc,0x00,0x00,  //00003250  H轎@.|.1..(.カシ..
  2264:     0x01,0x00,0x63,0x08,0x2a,0x3c,0x00,0x00,0x01,0x00,0x60,0x02,0x2a,0x03,0x25,0x49,  //00003260  ..c.*<....`.*.%I
  2265:     0x00,0x0c,0x35,0x45,0x00,0x0a,0x08,0x2e,0x00,0x03,0x00,0x09,0x66,0x00,0x00,0x98,  //00003270  ..5E........f...
  2266:     0x08,0x2e,0x00,0x00,0x00,0x0d,0x67,0xee,0x08,0x2e,0x00,0x03,0x00,0x09,0x66,0x00,  //00003280  ......g.......f.
  2267:     0x00,0x86,0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xec,0x70,0x00,0x10,0x2e,  //00003290  ..........g.p...
  2268:     0x00,0x19,0xe1,0x88,0x10,0x2e,0x00,0x1b,0xe1,0x88,0x10,0x2e,0x00,0x1d,0x22,0x04,  //000032a0  ..瘉....瘉....".
  2269:     0x92,0x80,0x70,0x00,0x30,0x2a,0x00,0x0a,0x24,0x05,0x94,0x80,0x92,0x82,0x67,0x08,  //000032b0  逐p.0*..$.楳窒g.
  2270:     0xd3,0xaa,0x00,0x0c,0x93,0x6a,0x00,0x0a,0x14,0xbc,0xff,0xff,0x15,0x7c,0x00,0x80,  //000032c0  モェ..屠...シ...|..
  2271:     0x00,0x07,0x4e,0x71,0x4e,0x71,0x4e,0x71,0x4e,0x71,0x4e,0x71,0x08,0x2e,0x00,0x03,  //000032d0  ..NqNqNqNqNq....
  2272:     0x00,0x09,0x66,0x32,0x08,0x2e,0x00,0x04,0x00,0x09,0x66,0x06,0x08,0x12,0x00,0x07,  //000032e0  ..f2......f.....
  2273:     0x67,0xea,0x08,0x2a,0x00,0x01,0x00,0x01,0x66,0x00,0xff,0x7c,0x4a,0x2a,0x00,0x01,  //000032f0  g..*....f..|J*..
  2274:     0x66,0x18,0x4a,0x6a,0x00,0x0a,0x66,0x12,0xd3,0xc5,0x98,0x85,0x96,0x85,0x66,0x00,  //00003300  f.Jj..f.モナ..妹f.
  2275:     0xff,0x4c,0x70,0x00,0x60,0x10,0x70,0xfd,0x60,0x06,0x70,0xfe,0x60,0x02,0x70,0xff,  //00003310  .Lp.`.p.`.p.`.p.
  2276:     0x15,0x7c,0x00,0x10,0x00,0x07,0x4c,0xdf,0x02,0x3e,0x4e,0x75,0x48,0xe7,0x7c,0x40,  //00003320  .|....L゚.>NuH轎@
  2277:     0x15,0x7c,0x00,0xb1,0x00,0x05,0xb6,0xbc,0x00,0x00,0x01,0x00,0x63,0x08,0x2a,0x3c,  //00003330  .|.ア..カシ....c.*<
  2278:     0x00,0x00,0x01,0x00,0x60,0x02,0x2a,0x03,0x25,0x49,0x00,0x0c,0x35,0x45,0x00,0x0a,  //00003340  ....`.*.%I..5E..
  2279:     0x08,0x2e,0x00,0x03,0x00,0x09,0x66,0x52,0x08,0x2e,0x00,0x00,0x00,0x0d,0x66,0xf0,  //00003350  ......fR......f.
  2280:     0x14,0xbc,0xff,0xff,0x15,0x7c,0x00,0x80,0x00,0x07,0x4e,0x71,0x4e,0x71,0x4e,0x71,  //00003360  .シ...|....NqNqNq
  2281:     0x4e,0x71,0x4e,0x71,0x08,0x2e,0x00,0x03,0x00,0x09,0x66,0x2e,0x08,0x2e,0x00,0x04,  //00003370  NqNq......f.....
  2282:     0x00,0x09,0x66,0x06,0x08,0x12,0x00,0x07,0x67,0xea,0x08,0x2a,0x00,0x01,0x00,0x01,  //00003380  ..f.....g..*....
  2283:     0x66,0xbe,0x4a,0x2a,0x00,0x01,0x66,0x16,0x4a,0x6a,0x00,0x0a,0x66,0x10,0xd3,0xc5,  //00003390  fセJ*..f.Jj..f.モナ
  2284:     0x98,0x85,0x96,0x85,0x66,0x90,0x70,0x00,0x60,0x10,0x70,0xfd,0x60,0x06,0x70,0xfe,  //000033a0  ..妹f壬.`.p.`.p.
  2285:     0x60,0x02,0x70,0xff,0x15,0x7c,0x00,0x10,0x00,0x07,0x4c,0xdf,0x02,0x3e,0x4e,0x75,  //000033b0  `.p..|....L゚.>Nu
  2286:     0x48,0xe7,0x40,0x42,0x2c,0x7a,0xf5,0x8e,0x1d,0x7c,0x00,0x90,0x00,0x03,0x10,0x39,  //000033c0  H蹇B,z...|.....9
  2287:     0x00,0xed,0x00,0x6f,0x0c,0x00,0x00,0x56,0x67,0x3a,0x13,0xfc,0x00,0x31,0x00,0xe8,  //000033d0  ...o...Vg:...1.鞨
  2288:     0xe0,0x0d,0xbd,0xfc,0x00,0xe9,0x60,0x20,0x66,0x0a,0x13,0xfc,0x00,0x07,0x00,0xed,  //000033e0   .ス..饒 f.......
  2289:     0x00,0x70,0x60,0x08,0x13,0xfc,0x00,0x0f,0x00,0xed,0x00,0x70,0x13,0xfc,0x00,0x00,  //000033f0  .p`........p....
  2290:     0x00,0xed,0x00,0x71,0x13,0xfc,0x00,0x56,0x00,0xed,0x00,0x6f,0x13,0xfc,0x00,0x00,  //00003400  ...q...V...o....
  2291:     0x00,0xe8,0xe0,0x0d,0x10,0x39,0x00,0xed,0x00,0x70,0x02,0x00,0x00,0x07,0x1d,0x40,  //00003410  .鞨..9...p.....@
  2292:     0x00,0x01,0x70,0x00,0x1d,0x40,0x00,0x05,0x1d,0x40,0x00,0x11,0x1d,0x40,0x00,0x19,  //00003420  ..p..@...@...@..
  2293:     0x1d,0x40,0x00,0x1b,0x1d,0x40,0x00,0x1d,0x1d,0x40,0x00,0x17,0x70,0x80,0xbd,0xfc,  //00003430  .@...@...@..p.ス.
  2294:     0x00,0xe9,0x60,0x20,0x66,0x04,0x72,0x6c,0x60,0x06,0x22,0x3c,0x00,0x00,0x00,0xf6,  //00003440  .饒 f.rl`."<....
  2295:     0x43,0xfa,0x00,0x38,0x4e,0x4f,0x1d,0x7c,0x00,0x10,0x00,0x03,0x1d,0x7c,0x00,0x00,  //00003450  C..8NO.|.....|..
  2296:     0x00,0x0b,0x70,0x02,0x61,0x00,0x06,0x58,0x1d,0x7c,0x00,0x10,0x00,0x05,0x70,0x05,  //00003460  ..p.a..X.|....p.
  2297:     0x61,0x00,0x06,0x4c,0x1d,0x7c,0x00,0x00,0x00,0x05,0x20,0x3c,0x00,0x00,0x9c,0x40,  //00003470  a..L.|.... <..廖
  2298:     0x61,0x00,0x06,0x3c,0x4c,0xdf,0x42,0x02,0x4e,0x75,0x48,0xe7,0xc0,0x02,0x2c,0x7a,  //00003480  a..<L゚B.NuH鄲.,z
  2299:     0xf4,0xc4,0x10,0x2e,0x00,0x09,0x1d,0x40,0x00,0x09,0x4c,0xdf,0x40,0x03,0x4e,0x73,  //00003490  .ト.....@..L゚@.Ns
  2300:     0x48,0xe7,0x09,0x02,0x2c,0x7a,0xf4,0xae,0x1d,0x7c,0x00,0x00,0x00,0x11,0x10,0x2e,  //000034a0  H...,z.ョ.|......
  2301:     0x00,0x0d,0x02,0x00,0x00,0xf8,0x66,0xf6,0x1d,0x7c,0x00,0x60,0x00,0x05,0x60,0x18,  //000034b0  ......f..|.`..`.
  2302:     0x48,0xe7,0x09,0x02,0x2c,0x7a,0xf4,0x8e,0x1d,0x7c,0x00,0x00,0x00,0x11,0x10,0x2e,  //000034c0  H...,z...|......
  2303:     0x00,0x0d,0x02,0x00,0x00,0xf8,0x66,0xf6,0x02,0x44,0x00,0x07,0x10,0x3c,0x00,0x01,  //000034d0  ......f..D...<..
  2304:     0xe9,0x28,0x09,0x39,0x00,0xed,0x00,0x71,0x66,0x0c,0x80,0x2e,0x00,0x01,0x1d,0x7c,  //000034e0  .(.9...qf......|
  2305:     0x00,0x10,0x00,0x03,0x60,0x06,0x1d,0x7c,0x00,0x00,0x00,0x03,0x1d,0x40,0x00,0x17,  //000034f0  ....`..|.....@..
  2306:     0x30,0x3c,0x09,0xc4,0x1d,0x40,0x00,0x1b,0xe0,0x48,0x1d,0x40,0x00,0x19,0x1d,0x7c,  //00003500  0<.ト.@..潯.@...|
  2307:     0x00,0x03,0x00,0x1d,0x1d,0x6e,0x00,0x09,0x00,0x09,0x1d,0x7c,0x00,0x20,0x00,0x05,  //00003510  .....n.....|. ..
  2308:     0x70,0x01,0x61,0x00,0x05,0x9a,0x10,0x2e,0x00,0x09,0x66,0x08,0x1d,0x7c,0x00,0x05,  //00003520  p.a.......f..|..
  2309:     0x00,0x0d,0x66,0xf2,0x10,0x2e,0x00,0x0d,0x08,0x00,0x00,0x07,0x67,0x9a,0x10,0x2e,  //00003530  ..f.........g...
  2310:     0x00,0x09,0x67,0xf0,0xb0,0x3c,0x00,0x04,0x67,0x26,0x1d,0x40,0x00,0x09,0xb0,0x3c,  //00003540  ..g.ー<..g&.@..ー<
  2311:     0x00,0x10,0x67,0x0c,0x48,0x40,0x10,0x2e,0x00,0x0b,0x4c,0xdf,0x40,0x90,0x4e,0x75,  //00003550  ..g.H@....L゚@侵u
  2312:     0x70,0x00,0x4c,0xdf,0x40,0x90,0x4e,0x75,0x70,0xff,0x4c,0xdf,0x40,0x90,0x4e,0x75,  //00003560  p.L゚@侵up.L゚@侵u
  2313:     0x70,0x01,0x61,0x00,0x05,0x4a,0x1d,0x7c,0x00,0x00,0x00,0x17,0x20,0x3c,0x00,0x00,  //00003570  p.a..J.|.... <..
  2314:     0x02,0x58,0x1d,0x40,0x00,0x1d,0xe0,0x88,0x1d,0x40,0x00,0x1b,0xe0,0x88,0x1d,0x40,  //00003580  .X.@..煦.@..煦.@
  2315:     0x00,0x19,0x1d,0x7c,0x00,0x04,0x00,0x09,0x70,0x02,0x61,0x00,0x05,0x22,0x10,0x2e,  //00003590  ...|....p.a.."..
  2316:     0x00,0x09,0x67,0xfa,0x1d,0x40,0x00,0x09,0xb0,0x3c,0x00,0x04,0x67,0x08,0xb0,0x3c,  //000035a0  ..g..@..ー<..g.ー<
  2317:     0x00,0x10,0x67,0xac,0x60,0x9e,0x08,0x2e,0x00,0x05,0x00,0x0d,0x66,0xf8,0x1d,0x6e,  //000035b0  ..gャ`.......f..n
  2318:     0x00,0x09,0x00,0x09,0x08,0x2e,0x00,0x07,0x00,0x0d,0x66,0x94,0x60,0x86,0x48,0xe7,  //000035c0  ..........f覗.H.
  2319:     0x10,0x02,0x2c,0x7a,0xf3,0x80,0x10,0x11,0x02,0x00,0x00,0xe0,0x0c,0x00,0x00,0x00,  //000035d0  ..,z............
  2320:     0x67,0x0e,0xb0,0x3c,0x00,0x20,0x67,0x0c,0xb0,0x3c,0x00,0xa0,0x67,0x0a,0x60,0x0a,  //000035e0  g.ー<. g.ー<..g.`.
  2321:     0x76,0x06,0x60,0x06,0x76,0x0a,0x60,0x02,0x76,0x0c,0x10,0x2e,0x00,0x09,0x08,0x00,  //000035f0  v.`.v.`.v.......
  2322:     0x00,0x05,0x66,0x2c,0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xec,0x02,0x00,  //00003600  ..f,........g...
  2323:     0x00,0x07,0x0c,0x00,0x00,0x02,0x66,0x0e,0x61,0x00,0x02,0xa6,0x48,0x40,0x66,0x06,  //00003610  ......f.a..ヲH@f.
  2324:     0x4c,0xdf,0x40,0x08,0x4e,0x75,0x10,0x2e,0x00,0x0b,0x4c,0xdf,0x40,0x08,0x4e,0x75,  //00003620  L゚@.Nu....L゚@.Nu
  2325:     0x61,0x00,0xfd,0x8e,0x70,0xff,0x4c,0xdf,0x40,0x08,0x4e,0x75,0x48,0xe7,0x00,0x02,  //00003630  a..姿.L゚@.NuH...
  2326:     0x2c,0x7a,0xf3,0x12,0x10,0x2e,0x00,0x09,0x08,0x00,0x00,0x05,0x66,0x2c,0x10,0x2e,  //00003640  ,z..........f,..
  2327:     0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xec,0x02,0x00,0x00,0x07,0xb0,0x3c,0x00,0x00,  //00003650  ......g.....ー<..
  2328:     0x66,0x0e,0x61,0x00,0x01,0x66,0x48,0x40,0x66,0x06,0x4c,0xdf,0x40,0x00,0x4e,0x75,  //00003660  f.a..fH@f.L゚@.Nu
  2329:     0x10,0x2e,0x00,0x0b,0x4c,0xdf,0x40,0x00,0x4e,0x75,0x61,0x00,0xfd,0x44,0x70,0xff,  //00003670  ....L゚@.Nua..Dp.
  2330:     0x4c,0xdf,0x40,0x00,0x4e,0x75,0x48,0xe7,0x00,0x02,0x2c,0x7a,0xf2,0xc8,0x10,0x2e,  //00003680  L゚@.NuH...,z.ネ..
  2331:     0x00,0x09,0x08,0x00,0x00,0x05,0x66,0x2c,0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,  //00003690  ......f,........
  2332:     0x67,0xec,0x02,0x00,0x00,0x07,0xb0,0x3c,0x00,0x01,0x66,0x0e,0x61,0x00,0x01,0x9c,  //000036a0  g.....ー<..f.a..廩
  2333:     0x48,0x40,0x66,0x06,0x4c,0xdf,0x40,0x00,0x4e,0x75,0x10,0x2e,0x00,0x0b,0x4c,0xdf,  //000036b0   @f.L゚@.Nu....L゚
  2334:     0x40,0x00,0x4e,0x75,0x61,0x00,0xfc,0xfa,0x70,0xff,0x4c,0xdf,0x40,0x00,0x4e,0x75,  //000036c0  @.Nua...p.L゚@.Nu
  2335:     0x48,0xe7,0x10,0x02,0x2c,0x7a,0xf2,0x7e,0x10,0x2e,0x00,0x09,0x08,0x00,0x00,0x05,  //000036d0  H...,z.~........
  2336:     0x66,0x2e,0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xec,0x02,0x00,0x00,0x07,  //000036e0  f.........g.....
  2337:     0xb0,0x3c,0x00,0x03,0x66,0x10,0x76,0x01,0x61,0x00,0x02,0x06,0x48,0x40,0x66,0x06,  //000036f0  ー<..f.v.a...H@f.
  2338:     0x4c,0xdf,0x40,0x08,0x4e,0x75,0x10,0x2e,0x00,0x0b,0x4c,0xdf,0x40,0x08,0x4e,0x75,  //00003700  L゚@.Nu....L゚@.Nu
  2339:     0x61,0x00,0xfc,0xae,0x70,0xff,0x4c,0xdf,0x40,0x08,0x4e,0x75,0x48,0xe7,0x10,0x02,  //00003710  a..ョp.L゚@.NuH...
  2340:     0x2c,0x7a,0xf2,0x32,0x10,0x2e,0x00,0x09,0x08,0x00,0x00,0x05,0x66,0x2e,0x10,0x2e,  //00003720  ,z.2........f...
  2341:     0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xec,0x02,0x00,0x00,0x07,0xb0,0x3c,0x00,0x07,  //00003730  ......g.....ー<..
  2342:     0x66,0x10,0x76,0x01,0x61,0x00,0x01,0xba,0x48,0x40,0x66,0x06,0x4c,0xdf,0x40,0x08,  //00003740  f.v.a..コH@f.L゚@.
  2343:     0x4e,0x75,0x10,0x2e,0x00,0x0b,0x4c,0xdf,0x40,0x08,0x4e,0x75,0x61,0x00,0xfc,0x62,  //00003750  Nu....L゚@.Nua..b
  2344:     0x70,0xff,0x4c,0xdf,0x40,0x08,0x4e,0x75,0x48,0xe7,0x10,0x02,0x2c,0x7a,0xf1,0xe6,  //00003760  p.L゚@.NuH...,z..
  2345:     0x10,0x2e,0x00,0x09,0x08,0x00,0x00,0x05,0x66,0x2c,0x10,0x2e,0x00,0x0b,0x08,0x00,  //00003770  ........f,......
  2346:     0x00,0x07,0x67,0xec,0x02,0x00,0x00,0x07,0xb0,0x3c,0x00,0x06,0x66,0x0e,0x76,0x01,  //00003780  ..g.....ー<..f.v.
  2347:     0x61,0x38,0x48,0x40,0x66,0x06,0x4c,0xdf,0x40,0x08,0x4e,0x75,0x10,0x2e,0x00,0x0b,  //00003790  a8H@f.L゚@.Nu....
  2348:     0x4c,0xdf,0x40,0x08,0x4e,0x75,0x61,0x00,0xfc,0x18,0x70,0xff,0x4c,0xdf,0x40,0x08,  //000037a0  L゚@.Nua...p.L゚@.
  2349:     0x4e,0x75,0x48,0xe7,0x00,0x02,0x2c,0x7a,0xf1,0x9c,0x70,0x00,0x10,0x2e,0x00,0x0b,  //000037b0  NuH...,z.徘.....
  2350:     0x4c,0xdf,0x40,0x00,0x4e,0x75,0x70,0x04,0x4e,0x75,0x48,0xe7,0x10,0x40,0x20,0x03,  //000037c0  L゚@.Nup.NuH..@ .
  2351:     0x1d,0x40,0x00,0x1d,0xe0,0x88,0x1d,0x40,0x00,0x1b,0xe0,0x88,0x1d,0x40,0x00,0x19,  //000037d0  .@..煦.@..煦.@..
  2352:     0x10,0x2e,0x00,0x0b,0x02,0x00,0x00,0x07,0x1d,0x40,0x00,0x11,0x10,0x2e,0x00,0x0b,  //000037e0  .........@......
  2353:     0x08,0x00,0x00,0x07,0x67,0xf6,0x1d,0x6e,0x00,0x09,0x00,0x09,0x1d,0x7c,0x00,0x80,  //000037f0  ....g..n.....|..
  2354:     0x00,0x05,0x10,0x2e,0x00,0x0d,0x02,0x00,0x00,0xf0,0xb0,0x3c,0x00,0x70,0x67,0x06,  //00003800  ..........ー<.pg.
  2355:     0xb0,0x3c,0x00,0xb0,0x66,0xec,0x4a,0x2e,0x00,0x09,0x66,0x10,0x08,0x2e,0x00,0x01,  //00003810  ー<.ーf.J...f.....
  2356:     0x00,0x0d,0x66,0xf2,0x1d,0x59,0x00,0x15,0x53,0x83,0x66,0xea,0x10,0x2e,0x00,0x09,  //00003820  ..f..Y..Sデ.....
  2357:     0x67,0xfa,0x1d,0x40,0x00,0x09,0xb0,0x3c,0x00,0x10,0x67,0x06,0x4c,0xdf,0x02,0x08,  //00003830  g..@..ー<..g.L゚..
  2358:     0x4e,0x75,0x70,0x00,0x4c,0xdf,0x02,0x08,0x4e,0x75,0x48,0xe7,0x10,0x40,0x10,0x2e,  //00003840  Nup.L゚..NuH..@..
  2359:     0x00,0x0b,0x02,0x00,0x00,0x07,0x1d,0x40,0x00,0x11,0x20,0x03,0x1d,0x40,0x00,0x1d,  //00003850  .......@.. ..@..
  2360:     0xe0,0x88,0x1d,0x40,0x00,0x1b,0xe0,0x88,0x1d,0x40,0x00,0x19,0x1d,0x6e,0x00,0x09,  //00003860  煦.@..煦.@...n..
  2361:     0x00,0x09,0x1d,0x7c,0x00,0x80,0x00,0x05,0x10,0x2e,0x00,0x0d,0x02,0x00,0x00,0xf0,  //00003870  ...|............
  2362:     0xb0,0x3c,0x00,0x70,0x67,0x06,0xb0,0x3c,0x00,0xb0,0x66,0xec,0x4a,0x2e,0x00,0x09,  //00003880  ー<.pg.ー<.ーf.J...
  2363:     0x66,0x10,0x08,0x2e,0x00,0x00,0x00,0x0d,0x66,0xf2,0x12,0xee,0x00,0x15,0x53,0x83,  //00003890  f.......f.....Sデ
  2364:     0x66,0xea,0x10,0x2e,0x00,0x09,0x67,0xfa,0x1d,0x40,0x00,0x09,0xb0,0x3c,0x00,0x10,  //000038a0   .....g..@..ー<..
  2365:     0x67,0x06,0x4c,0xdf,0x02,0x08,0x4e,0x75,0x70,0x00,0x4c,0xdf,0x02,0x08,0x4e,0x75,  //000038b0  g.L゚..Nup.L゚..Nu
  2366:     0x48,0xe7,0x10,0x40,0x10,0x2e,0x00,0x0b,0x02,0x00,0x00,0x07,0x1d,0x40,0x00,0x11,  //000038c0  H..@.........@..
  2367:     0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xf6,0x1d,0x59,0x00,0x17,0x1d,0x7c,  //000038d0  ........g..Y...|
  2368:     0x00,0xec,0x00,0x05,0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x66,0xf6,0x1d,0x7c,  //000038e0  ............f..|
  2369:     0x00,0xcc,0x00,0x05,0x53,0x83,0x66,0xcc,0x70,0x00,0x4c,0xdf,0x02,0x08,0x4e,0x75,  //000038f0  .フ..Sデフp.L゚..Nu
  2370:     0x48,0xe7,0x10,0x40,0x10,0x2e,0x00,0x0b,0x02,0x00,0x00,0x07,0x1d,0x40,0x00,0x11,  //00003900  H..@.........@..
  2371:     0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x67,0xf6,0x1d,0x7c,0x00,0xec,0x00,0x05,  //00003910  ........g..|....
  2372:     0x10,0x2e,0x00,0x0b,0x08,0x00,0x00,0x07,0x66,0xf6,0x12,0xee,0x00,0x17,0x1d,0x7c,  //00003920  ........f......|
  2373:     0x00,0xcc,0x00,0x05,0x53,0x83,0x66,0xcc,0x70,0x00,0x4c,0xdf,0x02,0x08,0x4e,0x75,  //00003930  .フ..Sデフp.L゚..Nu
  2374:     0x00,0x00,0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x45,0xfa,  //00003940  ......NU..H躋pE.
  2375:     0xff,0xf0,0x61,0x00,0x01,0x2c,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x01,0x00,  //00003950  ..a..,L゚.JN]Nu..
  2376:     0x00,0x00,0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x45,0xfa,0xff,0xf0,  //00003960  ....NU..H躋pE...
  2377:     0x61,0x00,0x01,0x0e,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x08,0x00,0x00,0x00,  //00003970  a...L゚.JN]Nu....
  2378:     0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,0x45,0xfa,0xff,0xee,  //00003980  ..NU..H躋p&IE..獷
  2379:     0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x2c,0x02,0x43,0xed,  //00003990   ...r..レQノ..,.C.
  2380:     0xff,0xf0,0x13,0x46,0x00,0x03,0xe0,0x8e,0x13,0x46,0x00,0x02,0xe0,0x8e,0x13,0x46,  //000039a0  ...F..燻.F..燻.F
  2381:     0x00,0x01,0x13,0x43,0x00,0x04,0x61,0x00,0x00,0x92,0x4a,0x80,0x66,0x00,0x00,0x82,  //000039b0  ...C..a..谷.f..ゃ
  2382:     0xe1,0x8b,0xeb,0xab,0x22,0x4b,0x61,0x00,0xf1,0x46,0x0c,0x80,0xff,0xff,0xff,0xff,  //000039c0   躯ォ"Ka..F......
  2383:     0x67,0x6e,0x0c,0x80,0xff,0xff,0xff,0xfe,0x67,0x0c,0x61,0x00,0x00,0xba,0x4c,0xdf,  //000039d0  gn......g.a..コL゚
  2384:     0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x61,0x00,0x00,0xae,0x4a,0x80,0x66,0x02,0x70,0xfe,  //000039e0  .JN]Nua..ョJ.f.p.
  2385:     0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x25,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //000039f0  L゚.JN]Nu%.......
  2386:     0x00,0x00,0x4e,0x55,0xff,0xf0,0x48,0xe7,0x52,0x70,0x26,0x49,0x43,0xed,0xff,0xf0,  //00003a00  ..NU..H躋p&IC...
  2387:     0x45,0xfa,0xff,0xe6,0x72,0x09,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,  //00003a10  E..誡..レQノ..C...
  2388:     0x61,0x28,0x4a,0x80,0x66,0x1a,0x22,0x4b,0x76,0x08,0x61,0x00,0xfc,0x5a,0x0c,0x80,  //00003a20  a(J.f."Kv.a..Z..
  2389:     0xff,0xff,0xff,0xff,0x67,0x0a,0x61,0x5e,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,  //00003a30  ....g.a^L゚.JN]Nu
  2390:     0x70,0xff,0x4c,0xdf,0x0e,0x4a,0x4e,0x5d,0x4e,0x75,0x48,0xe7,0x48,0x00,0x32,0x3c,  //00003a40  p.L゚.JN]NuH踪.2<
  2391:     0x00,0x01,0x61,0x00,0xfa,0x6c,0x4a,0x80,0x67,0x06,0x51,0xc9,0xff,0xf6,0x60,0x18,  //00003a50  ..a..lJ.g.Qノ..`.
  2392:     0x48,0x44,0xeb,0x0c,0x89,0x29,0x00,0x01,0x61,0x00,0xfb,0x64,0x4a,0x80,0x66,0x08,  //00003a60  HD...)..a..dJ.f.
  2393:     0x70,0x00,0x4c,0xdf,0x00,0x12,0x4e,0x75,0x70,0xff,0x4c,0xdf,0x00,0x12,0x4e,0x75,  //00003a70  p.L゚..Nup.L゚..Nu
  2394:     0x43,0xed,0xff,0xf0,0x72,0x05,0x12,0xda,0x51,0xc9,0xff,0xfc,0x43,0xed,0xff,0xf0,  //00003a80  C...r..レQノ..C...
  2395:     0x61,0xb8,0x4a,0x80,0x66,0x24,0x43,0xed,0xff,0xff,0x61,0x00,0xfc,0x34,0x4a,0x80,  //00003a90  aクJ.f$C...a..4J.
  2396:     0x66,0x18,0x43,0xed,0xff,0xfe,0x61,0x00,0xfc,0x74,0x4a,0x80,0x66,0x0c,0x10,0x2d,  //00003aa0  f.C...a..tJ.f..-
  2397:     0xff,0xfe,0x48,0x40,0x10,0x2d,0xff,0xff,0x4e,0x75,0x70,0xff,0x4e,0x75,0x48,0xe7,  //00003ab0  ..H@.-..Nup.NuH鈞
  2398:     0xe0,0x80,0x41,0xf9,0x00,0xe8,0x80,0x23,0x72,0x00,0x12,0x10,0x12,0x10,0x74,0x00,  //00003ac0   .A..閠#r.....t.
  2399:     0x14,0x10,0xb4,0x10,0x65,0xf8,0x92,0x42,0x64,0x04,0xd2,0x7c,0x00,0xc8,0xc3,0x42,  //00003ad0  ..エ.e.達d.メ|.ネテB
  2400:     0x90,0x82,0x62,0xea,0x4c,0xdf,0x01,0x07,0x4e,0x75,0x48,0xe7,0xf8,0x42,0x70,0x80,  //00003ae0  垂b鶚゚..NuH鋩Bp.
  2401:     0x32,0x3c,0x01,0x40,0x43,0xfa,0x00,0xc6,0x4e,0x4f,0x21,0xc0,0x0c,0xc0,0x70,0x80,  //00003af0  2<.@C..ニNO!タ.タp.
  2402:     0x32,0x3c,0x01,0x41,0x43,0xfa,0x02,0x92,0x4e,0x4f,0x21,0xc0,0x0c,0xc4,0x70,0x80,  //00003b00  2<.AC..誰O!タ.トp.
  2403:     0x32,0x3c,0x01,0x43,0x43,0xfa,0x03,0x04,0x4e,0x4f,0x21,0xc0,0x0c,0xc8,0x70,0x80,  //00003b10  2<.CC...NO!タ.ネp.
  2404:     0x32,0x3c,0x01,0x44,0x43,0xfa,0x00,0xdc,0x4e,0x4f,0x21,0xc0,0x0c,0xcc,0x70,0x80,  //00003b20  2<.DC..ワNO!タ.フp.
  2405:     0x32,0x3c,0x01,0x45,0x43,0xfa,0x01,0xdc,0x4e,0x4f,0x21,0xc0,0x0c,0xd0,0x70,0x80,  //00003b30  2<.EC..ワNO!タ.ミp.
  2406:     0x32,0x3c,0x01,0x46,0x43,0xfa,0x01,0xbe,0x4e,0x4f,0x21,0xc0,0x0c,0xd4,0x70,0x80,  //00003b40  2<.FC..セNO!タ.ヤp.
  2407:     0x32,0x3c,0x01,0x47,0x43,0xfa,0x00,0x74,0x4e,0x4f,0x21,0xc0,0x0c,0xd8,0x70,0x80,  //00003b50  2<.GC..tNO!タ.リp.
  2408:     0x32,0x3c,0x01,0x48,0x43,0xfa,0x00,0x72,0x4e,0x4f,0x21,0xc0,0x0c,0xdc,0x70,0x80,  //00003b60  2<.HC..rNO!タ.ワp.
  2409:     0x32,0x3c,0x01,0x4b,0x43,0xfa,0x00,0x70,0x4e,0x4f,0x21,0xc0,0x0c,0xe0,0x70,0x80,  //00003b70  2<.KC..pNO!タ.瀾.
  2410:     0x32,0x3c,0x01,0x4d,0x43,0xfa,0x00,0x6e,0x4e,0x4f,0x21,0xc0,0x0c,0xe4,0x70,0x80,  //00003b80  2<.MC..nNO!タ.舊.
  2411:     0x32,0x3c,0x01,0x4f,0x43,0xfa,0x00,0xca,0x4e,0x4f,0x21,0xc0,0x0c,0xe8,0x32,0x3c,  //00003b90  2<.OC..ハNO!タ..2<
  2412:     0x80,0x00,0x74,0x0f,0x22,0x7c,0x00,0x00,0x00,0x00,0x61,0x00,0x02,0x6e,0xd2,0x7c,  //00003ba0  ..t."|....a..nメ|
  2413:     0x01,0x00,0x51,0xca,0xff,0xf0,0x4c,0xdf,0x42,0x1f,0x4e,0x75,0x2f,0x38,0x0c,0xc0,  //00003bb0  ..Qハ..L゚B.Nu/8.タ
  2414:     0x48,0xe7,0x48,0x04,0x4b,0xfa,0xf4,0x14,0x60,0x48,0x2f,0x38,0x0c,0xd8,0x48,0xe7,  //00003bc0  H踪.K...`H/8.リH踪
  2415:     0x48,0x04,0x4b,0xfa,0xfd,0x90,0x60,0x3a,0x2f,0x38,0x0c,0xdc,0x48,0xe7,0x48,0x04,  //00003bd0   .K..秦:/8.ワH踪.
  2416:     0x4b,0xfa,0xf5,0x30,0x60,0x2c,0x2f,0x38,0x0c,0xe0,0x48,0xe7,0x48,0x04,0x4b,0xfa,  //00003be0  K..0`,/8.潯踪.K.
  2417:     0xf4,0xd6,0x60,0x1e,0x2f,0x38,0x0c,0xe4,0x48,0xe7,0x48,0x04,0x4b,0xfa,0xf4,0x7a,  //00003bf0  .ヨ`./8.腥踪.K..z
  2418:     0x60,0x10,0x2f,0x38,0x0c,0xcc,0x48,0xe7,0x48,0x04,0x4b,0xfa,0xfd,0x3a,0x60,0x00,  //00003c00  `./8.フH踪.K..:`.
  2419:     0x00,0x02,0x78,0x00,0x38,0x01,0x02,0x41,0xf0,0x00,0xb2,0x7c,0x80,0x00,0x66,0x3a,  //00003c10  ..x.8..A..イ|..f:
  2420:     0xe0,0x4c,0xe2,0x4c,0x64,0x04,0x08,0xc4,0x00,0x10,0x02,0x44,0x00,0x07,0x09,0x39,  //00003c20  澂祗d..ト...D...9
  2421:     0x00,0xed,0x00,0x71,0x67,0x24,0x4e,0x95,0x02,0x80,0xff,0xff,0xff,0x1e,0x4a,0x80,  //00003c30  ...qg$N.......J.
  2422:     0x66,0x0a,0x70,0x00,0x4c,0xdf,0x20,0x12,0x58,0x8f,0x4e,0x75,0x00,0x80,0xff,0xff,  //00003c40  f.p.L゚ .X蒐u....
  2423:     0xff,0x00,0x4c,0xdf,0x20,0x12,0x58,0x8f,0x4e,0x75,0x4c,0xdf,0x20,0x12,0x4e,0x75,  //00003c50  ..L゚ .X蒐uL゚ .Nu
  2424:     0x2f,0x38,0x0c,0xe8,0x48,0xe7,0x7f,0x48,0x78,0x00,0x38,0x01,0x02,0x41,0xf0,0x00,  //00003c60  /8.鍠..Hx.8..A..
  2425:     0xb2,0x7c,0x80,0x00,0x66,0x6e,0x22,0x04,0xe0,0x4c,0xe2,0x4c,0x64,0x04,0x08,0xc4,  //00003c70  イ|..fn".澂祗d..ト
  2426:     0x00,0x10,0x02,0x44,0x00,0x07,0x09,0x39,0x00,0xed,0x00,0x71,0x67,0x4e,0x49,0xf9,  //00003c80  ...D...9...qgNI.
  2427:     0x00,0x00,0x09,0xfe,0x20,0x01,0xe0,0x58,0xc0,0xbc,0x00,0x00,0x00,0x0f,0xd9,0xc0,  //00003c90  .... .濆タシ....ルタ
  2428:     0x10,0x14,0x08,0x00,0x00,0x07,0x66,0x34,0xc0,0x3c,0x00,0x7f,0x67,0x2e,0x24,0x3c,  //00003ca0  ......f4タ<..g.$<
  2429:     0x00,0x01,0x56,0x60,0x43,0xfa,0x02,0x84,0xb0,0x3c,0x00,0x14,0x67,0x1a,0x24,0x3c,  //00003cb0  ..V`C..┣<..g.$<
  2430:     0x00,0x02,0xac,0xc0,0x43,0xfa,0x02,0x88,0xb0,0x3c,0x00,0x28,0x67,0x0a,0x24,0x3c,  //00003cc0  ..ャタC..芦<.(g.$<
  2431:     0x00,0x00,0xaf,0x50,0x43,0xfa,0x02,0x50,0x61,0x00,0xf3,0x00,0x4c,0xdf,0x12,0xfe,  //00003cd0  ..ッPC..Pa...L゚..
  2432:     0x58,0x8f,0x4e,0x75,0x4c,0xdf,0x12,0xfe,0x4e,0x75,0x02,0x41,0xf0,0x00,0xb2,0x7c,  //00003ce0  X蒐uL゚..Nu.A..イ|
  2433:     0x80,0x00,0x66,0x0a,0x4c,0xdf,0x00,0x02,0x58,0x8f,0x70,0x00,0x4e,0x75,0x4c,0xdf,  //00003cf0  ..f.L゚..X術.NuL゚
  2434:     0x00,0x02,0x4e,0x75,0x2f,0x38,0x0c,0xd4,0x48,0xe7,0x7e,0x64,0x4b,0xfa,0xef,0xea,  //00003d00  ..Nu/8.ヤH轜dK..鸛
  2435:     0x60,0x10,0x2f,0x38,0x0c,0xd0,0x48,0xe7,0x7e,0x64,0x4b,0xfa,0xf0,0x4a,0x60,0x00,  //00003d10   ./8.ミH轜dK..J`.
  2436:     0x00,0x02,0x78,0x00,0x38,0x01,0x02,0x41,0xf0,0x00,0xb2,0x7c,0x80,0x00,0x66,0x62,  //00003d20  ..x.8..A..イ|..fb
  2437:     0xe0,0x4c,0xe2,0x4c,0x64,0x04,0x08,0xc4,0x00,0x10,0x02,0x44,0x00,0x07,0x09,0x39,  //00003d30  澂祗d..ト...D...9
  2438:     0x00,0xed,0x00,0x71,0x67,0x4c,0x2c,0x03,0x26,0x06,0xd6,0xbc,0x00,0x00,0x00,0xff,  //00003d40  ...qgL,.&.ヨシ....
  2439:     0xe0,0x8b,0xb6,0xbc,0x00,0x00,0x01,0x00,0x63,0x06,0x26,0x3c,0x00,0x00,0x01,0x00,  //00003d50  煖カシ....c.&<....
  2440:     0x7a,0x00,0x4e,0x95,0x02,0x80,0xff,0xff,0xff,0x1e,0x4a,0x80,0x66,0x16,0xd4,0x83,  //00003d60  z.N.......J.f.ヤ.
  2441:     0x22,0x03,0xe1,0x89,0xd3,0xc1,0x9c,0x81,0x62,0xce,0x4c,0xdf,0x26,0x7e,0x58,0x8f,  //00003d70  ".瘟モチ怐bホL゚&~X術
  2442:     0x70,0x00,0x4e,0x75,0x4c,0xdf,0x26,0x7e,0x58,0x8f,0x00,0x80,0xff,0xff,0xff,0x00,  //00003d80   .NuL゚&~X.......
  2443:     0x4e,0x75,0x4c,0xdf,0x26,0x7e,0x4e,0x75,0x4e,0x54,0xff,0x00,0x48,0xe7,0x7e,0x60,  //00003d90  NuL゚&~NuNT..H轜`
  2444:     0x78,0x00,0x38,0x01,0x02,0x41,0xf0,0x00,0xb2,0x7c,0x80,0x00,0x66,0x60,0x22,0x04,  //00003da0  x.8..A..イ|..f`".
  2445:     0xe0,0x4c,0xe2,0x4c,0x64,0x04,0x08,0xc4,0x00,0x10,0x02,0x44,0x00,0x07,0x09,0x39,  //00003db0  澂祗d..ト...D...9
  2446:     0x00,0xed,0x00,0x71,0x67,0x48,0x24,0x49,0x2c,0x03,0x26,0x06,0xb6,0xbc,0x00,0x00,  //00003dc0  ...qgH$I,.&.カシ..
  2447:     0x01,0x00,0x65,0x06,0x26,0x3c,0x00,0x00,0x01,0x00,0x43,0xec,0xff,0x00,0x61,0x00,  //00003dd0  ..e.&<....C...a.
  2448:     0xff,0x24,0x2a,0x03,0x53,0x85,0xb5,0x09,0x66,0x14,0x51,0xcd,0xff,0xfa,0x52,0x82,  //00003de0  .$*.S.オ.f.Qヘ..R.
  2449:     0x9c,0x83,0x62,0xd6,0x4c,0xdf,0x06,0x7e,0x4e,0x5c,0x70,0x00,0x4e,0x75,0x70,0xfe,  //00003df0  怎bヨL゚.~N\p.Nup.
  2450:     0x4c,0xdf,0x06,0x7e,0x4e,0x5c,0x00,0x80,0xff,0xff,0xff,0x00,0x4e,0x75,0x4c,0xdf,  //00003e00  L゚.~N\......NuL゚
  2451:     0x06,0x7e,0x4e,0x5c,0x2f,0x38,0x0c,0xc4,0x4e,0x75,0x4e,0x54,0xff,0x00,0x48,0xe7,  //00003e10  .~N\/8.トNuNT..H輾
  2452:     0x78,0x44,0x78,0x00,0x38,0x01,0x02,0x41,0xf0,0x00,0xb2,0x7c,0x80,0x00,0x66,0x46,  //00003e20   Dx.8..A..イ|..fF
  2453:     0xe0,0x4c,0xe2,0x4c,0x64,0x04,0x08,0xc4,0x00,0x10,0x02,0x44,0x00,0x07,0x09,0x39,  //00003e30  澂祗d..ト...D...9
  2454:     0x00,0xed,0x00,0x71,0x67,0x30,0x20,0x09,0x67,0x38,0x76,0x0a,0x61,0x00,0xf1,0xd6,  //00003e40  ...qg0 .g8v.a..ヨ
  2455:     0x02,0x80,0xff,0xff,0xff,0x1e,0x4a,0x80,0x66,0x0e,0x61,0x00,0x00,0x8c,0x70,0x00,  //00003e50  ......J.f.a..継.
  2456:     0x4c,0xdf,0x22,0x1e,0x4e,0x5c,0x4e,0x75,0x00,0x80,0xff,0xff,0xff,0x00,0x4c,0xdf,  //00003e60  L゚".N\Nu......L゚
  2457:     0x22,0x1e,0x4e,0x5c,0x4e,0x75,0x4c,0xdf,0x22,0x1e,0x4e,0x5c,0x2f,0x38,0x0c,0xc8,  //00003e70  ".N\NuL゚".N\/8.ネ
  2458:     0x4e,0x75,0x76,0x0a,0x43,0xfa,0x00,0xb4,0x61,0x00,0xf1,0x9a,0x02,0x80,0xff,0xff,  //00003e80  Nuv.C..エa.......
  2459:     0xff,0x1e,0x4a,0x80,0x66,0xd2,0x43,0xec,0xff,0x00,0x74,0x04,0x76,0x01,0x7a,0x00,  //00003e90  ..J.fメC...t.v.z.
  2460:     0x61,0x00,0xee,0x56,0x02,0x80,0xff,0xff,0xff,0x1e,0x4a,0x80,0x66,0xba,0x45,0xec,  //00003ea0  a.皞......J.fコE.
  2461:     0xff,0x00,0x43,0xfa,0x00,0x68,0x0c,0xaa,0x58,0x36,0x38,0x4b,0x00,0x00,0x66,0xa8,  //00003eb0  ..C..h.ェX68K..fィ
  2462:     0x43,0xfa,0x00,0x5a,0x20,0x2a,0x00,0x04,0xb0,0xbc,0x00,0x00,0x9f,0xd9,0x65,0x00,  //00003ec0  C..Z *..ーシ..渟e.
  2463:     0xff,0x7a,0x43,0xe9,0x00,0x14,0xb0,0xbc,0x00,0x01,0x3d,0x1d,0x65,0x00,0xff,0x6c,  //00003ed0  .zC...ーシ..=.e..l
  2464:     0x43,0xe9,0x00,0x14,0x60,0x00,0xff,0x64,0x4b,0xf9,0x00,0x00,0x09,0xfe,0x20,0x01,  //00003ee0  C...`..dK..... .
  2465:     0xe0,0x58,0xc0,0xbc,0x00,0x00,0x00,0x0f,0xdb,0xc0,0x10,0x3c,0x00,0x28,0x0c,0x29,  //00003ef0  濆タシ....ロタ.<.(.)
  2466:     0x00,0x07,0x00,0x03,0x67,0x10,0x10,0x3c,0x00,0x14,0x0c,0x29,0x00,0x02,0x00,0x04,  //00003f00  ....g..<...)....
  2467:     0x67,0x04,0x10,0x3c,0x00,0x0a,0x1a,0x80,0x42,0x80,0x4e,0x75,0x01,0x01,0x00,0x03,  //00003f10  g..<....B.Nu....
  2468:     0x01,0x35,0x80,0x00,0x00,0x00,0x01,0x01,0x00,0x03,0x01,0x54,0x80,0x00,0x00,0x00,  //00003f20  .5.........T....
  2469:     0x01,0x01,0x00,0x03,0x02,0x66,0x80,0x00,0x00,0x00,0x01,0x01,0x00,0x03,0x02,0x98,  //00003f30  .....f..........
  2470:     0x80,0x00,0x00,0x00,0x01,0x01,0x00,0x07,0x02,0x66,0x80,0x00,0x00,0x00,0x01,0x01,  //00003f40  .........f......
  2471:     0x00,0x07,0x02,0x98,0x80,0x00,0x00,0x00,                                          //00003f50  ........        
  2472:   };
  2473: */
  2474:   //  perl misc/itob.pl xeij/SPC.java SPC_DEVICE_DRIVER
  2475:   public static final byte[] SPC_DEVICE_DRIVER = "\377\377\377\377@\0\0\0\0n\0\0\0\200\1SCHDISK\0\0\0\0\0\0\1F\0\0\3F\0\0\r\f\0\0\0\370\0\0\7\236\0\0\3\260\0\0\0\270\0\0\0\270\0\0\b\24\0\0\b\6\0\0\0\270\0\0\0\270\0\0\1,\0\0\0\1p\2p\7p\fp\b\0\1p\rp\fp\fp\fp\fp\fp\fp\fp\fH\347\0\2M\372\r\310-M\0\0L\337@\0NuH\347\177\376M\372\r\266*n\0\0p\0\20-\0\2\f\0\0\fb\32\"m\0\16A\372\377|\320@\320@\321\300 P \bA\372\377T\321\300N\3200<p\f`\2B@2\0\33A\0\3\340I\33A\0\4J@g\22Jn\5\254f\6Jn\5\256g\6=|\377\377\5\262L\337\177\376NuJ\256\5\312g\312\"n\5\312p\200\"<\0\0\1\365NO`\272 m\0\16 -\0\22\f\200\0\0\0\bg\24\f\200\0\0\0\4f\2500\356\5\304 .\5\2500\200`\2340\356\5\304 .\5\2500\300 \256\5\306`\214 m\0\16 -\0\22\f\200\0\0\0\2f\0\377|=P\5\304`\0\377t\f-\0\27\0\26d\0\377dS\202\2\202\0\0\0\17-B\5\250\59\0\0\f\354f\0\377Na\0\32\270-@\5\312 <\0\0\0\365r$(.\5\250NO\260\274\0\0\0\0gd\260\274\377\377\377\377g\0\377V\260\274\0\0\0\bgP\260\274\0\0\0\2f\0\377D <\0\0\0\365r,v\16(.\5\250C\356\5\322NO\260\274\0\0\0\0f\0\377&C\356\5\322\20\21\2\0\0p\f\0\0pf\0\377\24\20)\0\2g\20\260<\0\1g\n\260<\0\6g\4`\0\376\376`\206p\365r+(.\5\250NOJ\200f\0\376\354p\365r%(.\5\250C\356\5\322NOJ\200f\0\376\330C\356\5\322\")\0\4\262\274\0\0\4\0g\30\262\274\0\0\2\0g\b=|\0\2\5\240`\16=|\0\1\5\240`\6=|\0\0\5\240\340\211\342\211-A\5\244C\356\5\322*.\5\244t\0\345\212\352\252v\1\345\213\352\253(.\5\250p\365r!NOJ\200f\0\376~\f\221X68Sf\0\376t\f\251CSI1\0\4f\0\376h\35i\0\16\5\260=|\0\0\5\254=|\0\0\5\256\f)\0\1\0\17g\20\f)\0\2\0\17f\16=|\377\377\5\256`\6=|\377\377\5\254a\0\3\266J\200f\0\376.JFg\0\376(=|\0\0\5\262=F\5\264J\256\5\312g\6A\3720\212`\4A\372\31L-H\5\316\321\374\0\0\20\0+H\0\16\20-\0\26\320\6\4\0\0\27e\2\234\0\33F\0\rA\356\5D+H\0\22C\356\4\4p\16 \311C\351\0\24Q\310\377\370\33z\375\6\0\26p\17A\356\5\204\20\374\377\377Q\310\377\372$.\5\250\5\371\0\0\f\354p\0=@\5\304-@\5\306-@\r\322-@\r\326a\0\2\246`\0\375tJn\5\254f\"Jn\5\256f\34r\tp\365NO\2\0\0\300g\6r\0p\365NO\33|\0\1\0\16`\0\375La\0\1\352J\200g\2`\34p\0\20-\0\1A\356\5\204A\360\0\0J\20f\n\33|\0\1\0\16`\0\375&p\0\20-\0\1A\356\5\204A\360\0\0\20\274\0\0\33|\377\377\0\16`\0\375\nJn\5\254f@Jn\5\256f:r\tp\365NO\2\0\0\300g\6r\0p\365NO\f-\0\b\0\rd\26\33|\0B\0\rJn\5\304g\6\b\355\0\3\0\r`\0\374\316\33|\377\377\0\r`\0\374\304\20-\0\rg,\260<\0\1gb\260<\0\2gn\260<\0\3g\0\0\210\260<\0\6gp\260<\0\7g\0\0\220\33|\377\377\0\r`\0\374\222a\0\0010J\200g\20\f@\0\1g\n\f@p\2g\36`\0\374|Jn\r\332f\n\33|\0\2\0\r`\0\0\242\33|\0\n\0\r`\0\0\230\33|\0\4\0\r`\0\0\216J\256\5\272f\276J\256\5\266f\270a\0\0\246`\344-|\377\377\377\377\5\266J\256\5\272gV`\272-|\377\377\377\377\5\272J\256\5\266gF`\252J\256\5\266g\244-|\0\0\0\0\5\266J\256\5\272g\32`\224J\256\5\272g\216-|\0\0\0\0\5\272J\256\5\266g\4`\0\377~p\365r2(.\5\250v\0NOJ\200f\0\377T`\0\377hp\365r2(.\5\250v\1NOJ\200f\0\377>`\0\377RJn\5\304g\6\b\355\0\3\0\rJ\256\5\266g\6\b\355\0\4\0\rJ\256\5\272g\6\b\355\0\6\0\r`\0\373\242Jn\5\254f\bJn\5\256f(Nup\2NO\b\0\0\3f\16p\365r0(.\5\250v\0NONup\365r0(.\5\250v\1NONup\365r/(.\5\250v\2NONuH\347p\300p\177NO\262\256\r\326f\22$.\r\322&\0\226\202\f\203\0\0\0de\0\0\342-@\r\322-A\r\326r\tp\365NO\2\0\0\300g\6r\0p\365NO <\0\0\0\365r$(.\5\250NOJ\200g\0\0\222\260\274\0\0\0\bg\322\260\274\0\0\0\2f\0\0\212a\0\7\26J@g\300\260|\0\1fpp\17A\356\5\204\20\374\377\377Q\310\377\372a\0\1&J\200g\f=|\377\377\5\262`\\H\347p\300(.\5\250v\4C\356\5\322t?r)p\365NOJ\200g \f\200\0\0\0\bg\342\f\200\0\0\0\2f2a\0\6\300J@g\322\260|\0\1f\32`\250\b)\0\7\0\2g\b=|\377\377\r\332`\6=|\0\0\r\332p\1-@\r\334L\337\3\16Nu-|\0\0\0\0\r\322-|\0\0\0\0\r\326p\377L\337\3\16Nu .\r\334L\337\3\16NuC\356\5\322*.\5\244t\2\345\212\352\252v\1\345\213\352\253(.\5\250p\365r!NOJ\200fv\f\221X68Kfl&IE\356\4\4|\0~\16G\353\0\20J\23gR\f\223HumafJ\f\253n68k\0\4f@\20+\0\b\b\0\0\0f6$+\0\bC\356\0\4*.\5\244\345\212\352\252v\1\345\213\352\253(.\5\250p\365r!NOJ\200f\34C\351\0\22JQg\nr\4$\331Q\311\377\374RFQ\317\377\244p\0Nup\377NuC\356\5\322*.\5\244t\2\345\212\352\252v\1\345\213\352\253(.\5\250p\365r!NOJ\200f\334\f\221X68Kf\322&IE\356\4\4|\0~\16G\353\0\20J\23gT\f\223HumafL\f\253n68k\0\4fB\20+\0\b\b\0\0\0f8$+\0\bC\356\0\4*.\5\244\352\252\345\212v\1\345\213\352\253(.\5\250p\365r!NOJ\200f\202C\351\0\22r\4 \31\260\232f\0\377tQ\311\377\366RFQ\317\377\242\274n\5\264f\0\377bp\0Nu=|\0\b\5\302=|\0\0\5\300Jn\5\262gDa\0\377LJ\200g,\f\200\377\377\377\377g,\f\200\0\0\0\bg\350\f\200\0\0\0\2f\0\370\342a\0\4\376J@g\n\f@\0\1g\320`\0\370\330=|\0\0\5\262g\b0<p\7`\0\370\310J.\5\260f\6r!`\0\0\212r&`\0\1\354=|\0\b\5\302=|\377\377\5\300`\f=|\0\b\5\302=|\0\0\5\300Jn\5\304g\b0<p\r`\0\370\216Jn\5\262gDa\0\376\310J\200g,\f\200\377\377\377\377g,\f\200\0\0\0\bg\350\f\200\0\0\0\2f\0\370^a\0\4zJ@g\n\260|\0\1g\320`\0\370T=|\0\0\5\262g\b0<p\7`\0\370DJ.\5\260f\4r\"`\6r\'`\0\1j-m\0\16\5\224-m\0\22\5\234p\0\20-\0\1\345\210A\356\5D\321\300 P -\0\26\320\250\0\20-@\5\230<.\5\240$.\5\230\355\252..\5\234\355\257\"n\5\224&\7\266\274\0\0\1\0c\6&<\0\0\1\0p\365(.\5\250*.\5\244NOJ\200g\0\0\322\260\274\377\377\377\377g\0\0\352\260\274\377\377\377\376g\0\0\252\260\274\0\0\0\bg\206\260\274\0\0\0\2f\0\367\250a\0\3\304J@g\0\377t\260|\0\1g\0\377l\f@p\7f\0\367\226\f\201\0\0\0\"f\0\367\214C\356\5\322\b\21\0\7g\0\367\200C\351\0\3\20\31\341\210\20\31\341\210\20\31\341\210\20\31-@\r\340a\0\3ZJ\200g\0\377.\260\274\377\377\377\377gt\260\274\377\377\377\376g6\260\274\0\0\0\bg\336\260\274\0\0\0\2f\0\3676a\0\3RJ@g\0\377\2\260|\0\1g\304g\0\367*R\256\5\306Sn\5\302f\0\376\354`\0\367\32R\256\5\306Sn\5\302f\0\376\3340<p\f`\0\367\6 \3\341\210\353\250\323\300\324\203\236\203b\0\377\0Jn\5\300f\0\1h=|\0\0\5\276`\0\366\342Jn\5\276f\0\366\324r\0p\365NO=|\377\377\5\276`\0\376\232-m\0\16\5\224-m\0\22\5\234p\0\20-\0\1\345\210A\356\5D\321\300 P -\0\26\320\250\0\20-@\5\230<.\5\240$.\5\230\355\252&.\5\234\355\253\"n\5\224p\365(.\5\250*.\5\244NOJ\200g\0\0\320\260\274\377\377\377\377g\0\0\326\260\274\377\377\377\376g\0\0\250\260\274\0\0\0\bg\226\260\274\0\0\0\2f\0\366Pa\0\2lJ@g\204\260|\0\1g\0\377~\f@p\7f\0\366@\f\201\0\0\0\'f\0\3666C\356\5\322\b\21\0\7g\0\366*C\351\0\3\20\31\341\210\20\31\341\210\20\31\341\210\20\31-@\r\340a\0\2\4J\200g\0\377@\260\274\377\377\377\377gb\260\274\377\377\377\376g6\260\274\0\0\0\bg\336\260\274\0\0\0\2f\0\365\340a\0\1\374J@g\0\377\24\260|\0\1g\304`\0\365\324R\256\5\306Sn\5\302f\0\376\376`\0\365\304R\256\5\306Sn\5\302f\0\375\2060<p\f`\0\365\260=|\0\0\5\276Jn\5\300f\34`\0\365\236Jn\5\276f\0\365\220r\0p\365NO=|\377\377\5\276`\0\376\276=|\0\b\5\302-m\0\16\5\224-m\0\22\5\234p\0\20-\0\1\345\210A\356\5D\321\300 P -\0\26\320\250\0\20-@\5\230:.\5\240$.\5\230\353\252..\5\234\353\257|\4\353\256(.\5\250*.\5\244$n\5\224\276\206d\4&\7`\2&\6\"n\5\316r!p\365NOJ\200g\0\0\310\260\274\377\377\377\377g\0\0\344\260\274\377\377\377\376g\0\0\240\260\274\0\0\0\bg\0\377|\260\274\0\0\0\2f\0\364\360a\0\1\fJ@g\0\377h\260|\0\1g\0\377`\f@p\7f\0\364\336C\356\5\322\b\21\0\7g\0\364\322C\351\0\3\20\31\341\210\20\31\341\210\20\31\341\210\20\31-@\r\340a\0\0\254J\200g\0\374p\260\274\377\377\377\377gv\260\274\377\377\377\376g4\260\274\0\0\0\bg\336\260\274\0\0\0\2f\0\364\210a\0\0\244J@g\314\260|\0\1g\306`\0\364~R\256\5\306Sn\5\302f\0\376\354`\0\364nR\256\5\306Sn\5\302f\0\37400<p\f`\0\364Z \3\341\210\353\2502\0SA\265\tf0Q\311\377\372\323\300\324\203\236\203b\0\377\6=|\0\0\5\276`\0\3642Jn\5\276f\0\364$r\0p\365NO=|\377\377\5\276`\0\376\226=|\0\0\5\2760<p\13`\0\364\16H\347\20@ .\r\340C\356\5\3222\374\0\0002\374\0\4\"\300C\356\5\322v\badL\337\2\bNuH\347@@p\365r,(.\5\250v\16C\356\5\322NOJ\200f\30BA\22)\0\2\343IC\372\363Zp\00001\20\0L\337\2\2Nu0<p\fL\337\2\2Nup\0\20-\0\1\345\210A\356\5D\321\300+H\0\22 P\33h\0\n\0\r`\0\363\220\7\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374C\355\377\360a(J\200f\32\"Kr\5p\365NO\f\200\377\377\377\377g\naLL\337\16JN]Nup\377L\337\16JN]NuH\347h\0002<\0\1r\1p\365NOJ\200g\6Q\312\377\364`\32HD\353\f\211)\0\1r\3p\365NOJ\200f\bp\0L\337\0\26Nup\377L\337\0\26NuC\355\377\377r\6p\365NOJ\200f\32C\355\377\376r\7p\365NOJ\200f\f\20-\377\376H@\20-\377\377Nup\377Nu\r\nSCSI DISK DRIVER for X68000 version 1.04\r\nCopyright 1990-92 SHARP/First Class Technology\r\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\347\b\0p\365r\nNO\f\200\0\0\0\4d6a\0\0\316A\372\1\34\b\4\0\0g\b \274\0\351` `\f\b\4\0\1g\32 \274\0\352\0\0p\200\"<\0\0\1\365C\372\0\372NOL\337\0\20Nup\0L\337\0\20NuH\347\0\242x\0A\371\0\374\0\0a\0\0\236J\200f\26\f\250SCSI\0$f\f\fhIN\0(f\4\b\304\0\0A\371\0\352\0 azJ\200f\26\f\250SCSI\0$f\f\fhEX\0(f\4\b\304\0\1\23\374\0001\0\350\340\r\f9\0V\0\355\0og\30\23\374\0V\0\355\0o\23\374\0\7\0\355\0p\23\374\0\0\0\355\0q\b\4\0\0f\b\b\371\0\3\0\355\0p\23\374\0\0\0\350\340\rL\337E\0Nua\0\377l\b9\0\3\0\355\0pf\6\b\204\0\1Nu\b\204\0\0Nu,OC\372\0($y\0\0\0\b#\311\0\0\0\b \20\b\0\0\0f\22\260\274\0 \0\0e\n#\312\0\0\0\bp\0Nu.N#\312\0\0\0\bp\377Nu\0\351` H\347Pb\262\274\0\0\0\20e\30\262\274\0\0\0 e@\262\274\0\0\0@e\16\262\274\0\0\0 e0E\372\0:`\26\222\274\0\0\0 E\372\0n`\n\222\274\0\0\0@E\372\0\342\345\211,z\377\270\"2\20\0\325\301N\222L\337F\nNup\377L\337F\nNup\377Nu\0\0\n\b\0\0\13\b\0\0\n\350\0\0\f\26\0\0\1V\0\0\1\0\0\0\r\30\0\0\rd\0\0\r\260\0\0\r\372\0\0\16\16\0\0\f\316\0\0\f\204\377\377\377\374\377\377\377\374\377\377\377\374\0\0\1v\0\0\3\0\0\0\3n\0\0\4\336\0\0\17N\0\0\20\n\0\0\3\340\0\0\4L\0\0\4\312\0\0\2\22\0\0\2d\0\0\17l\0\0\1\304\0\0\5\342\0\0\17\212\0\0\5`\0\0\5\240\0\0\2\266\0\0\5 \377\377\377\274\377\377\377\274\377\377\377\274\0\0\6,\0\0\6\200\0\0\6\316\0\0\7\32\377\377\377\274\377\377\377\274\377\377\377\274\377\377\377\274\377\377\377\274\377\377\377\274\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<\377\377\377<H\347\0\2,z\376\226\20.\0\t\b\0\0\5f8\20.\0\13\b\0\0\7g\354\2\0\0\7\260<\0\0f\32a\0\6\224H@f\6L\337@\0NuJ@g\bH@L\337@\0Nu\20.\0\13L\337@\0Nua\0\b\274p\377L\337@\0NuH\347\0\2,z\376@\20.\0\t\b\0\0\5f<\20.\0\13\b\0\0\7g\354\2\0\0\7\2\0\0\7\260<\0\1f\32a\0\6FH@f\6L\337@\0NuJ@g\bH@L\337@\0Nu\20.\0\13L\337@\0Nua\0\bbp\377L\337@\0Nu\22\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\23C\0\4a\0\16\270J\200f\0\5\322\"Ka\0\n\350\f\200\377\377\377\377g\0\5\302a\0\16\352L\337\16JN]Nu\3\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\23C\0\4a\0\16jJ\200f\0\5\204\"Ka\0\n\232\f\200\377\377\377\377g\0\5ta\0\16\234L\337\16JN]Nu\32\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\23C\0\4\23B\0\2a\0\16\30J\200f\0\0052\"Ka\0\nH\f\200\377\377\377\377g\0\5\"a\0\16JL\337\16JN]Nu\25\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\23C\0\4\23B\0\1a\0\r\306J\200f\0\4\340\"Ka\0\t\254\f\200\377\377\377\377g\0\4\320a\0\r\370L\337\16JN]Nu\7\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374C\355\377\360a\0\r|J\200f\0\4\226\"Ka\0\tb\f\200\377\377\377\377g\0\4\206a\0\r\256L\337\16JN]Nu\b\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374,\2C\355\377\360\23F\0\3\340\216\23F\0\2\340\216\23F\0\1\23C\0\4a\0\r\34J\200f\0\0046\341\213\353\253\"Ka\0\375\320\f\200\377\377\377\377g\0\4\"\f\200\377\377\377\376g\0\1Ta\0\r@L\337\16JN]Nu\n\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374,\2C\355\377\360\23F\0\3\340\216\23F\0\2\340\216\23F\0\1\23C\0\4a\0\f\256J\200f\0\3\310\341\213\353\253\"Ka\0\375\f\f\200\377\377\377\377g\0\3\264\f\200\377\377\377\376g\0\0\346a\0\f\322L\337\16JN]Nu(\0\0\0\0\0\0\0\0\0NU\377\360H\347Rp&IC\355\377\360E\372\377\346r\t\22\332Q\311\377\374,\3C\355\377\360#B\0\2\23C\0\b\340\213\23C\0\7a\0\fBJ\200f\0\3\\&\6\341\213\353\253\"Ka\0\374\364\f\200\377\377\377\377g\0\3F\f\200\377\377\377\376gxa\0\ffL\337\16JN]Nu*\0\0\0\0\0\0\0\0\0NU\377\360H\347RpE\372\377\354&IC\355\377\360r\t\22\332Q\311\377\374,\3C\355\377\360#B\0\2\23C\0\b\340\213\23C\0\7a\0\13\326J\200f\0\2\360&\6\341\213\353\253\"Ka\0\3742\f\200\377\377\377\377g\0\2\332\f\200\377\377\377\376g\fa\0\13\372L\337\16JN]Nua\0\13\356J\200f\2p\376L\337\16JN]Nu/\0\0\0\0\0\0\0\0\0NU\377\360H\347RpE\372\377\354`\200\4\0\0\0\0\0NU\377\360H\347RpE\372\377\360C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\23C\0\4\340\213\23C\0\3a\0\13LJ\200f\0\2fa\0\13\216L\337\16JN]Nu\36\0\0\0\0\0NU\377\360H\347RpE\372\377\360C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\2\3\0\1\23C\0\4a\0\13\fJ\200f\0\2&a\0\13NL\337\16JN]Nu\33\0\0\0\0\0NU\377\360H\347RpE\372\377\360C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\2\3\0\3\23C\0\4a\0\n\314J\200f\0\1\346a\0\13\16L\337\16JN]Nu\301\0\0\0\0\0NU\377\360H\347RpE\372\377\360C\355\377\360r\5\22\332Q\311\377\374C\355\377\360\2\3\0\1\23C\0\4v\6a\0\n\212J\200f\0\1\244a\0\n\314L\337\16JN]Nu\13\0\0\0\0\0NU\377\360H\347RpE\372\377\360C\355\377\360r\5\22\332Q\311\377\374,\2C\355\377\360\23F\0\3\340\216\23F\0\2\340\216\23F\0\1a\0\n@J\200f\0\1Za\0\n\202L\337\16JN]Nu\302\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374\"\3C\355\377\360\23A\0\5v\6a\0\t\376J\200f\0\1\30&\1\"Ka\0\5\342\f\200\377\377\377\377g\0\1\6a\0\n.L\337\16JN]Nu\6\0\0\0\0\0NU\377\360H\347RpE\372\377\360C\355\377\360r\5\22\332Q\311\377\374C\355\377\360,\2\23F\0\3\340\216\23F\0\2\340\216\23F\0\1\23C\0\4a\0\t\236J\200f\0\0\270a\0\t\340L\337\16JN]Nu\7\0\0\0\0\0NU\377\360H\347RpE\372\377\360C\355\377\360r\5\22\332Q\311\377\374C\355\377\360,\2\23F\0\3\340\216\23F\0\2\340\216\23F\0\1\23C\0\4a\0\tPJ\200fja\0\t\224L\337\16JN]Nu\16\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374C\355\377\360,\2\23F\0\3\340\216\23F\0\2\340\216\23F\0\1\23C\0\4a\0\t\2J\200f\34v\4\"Ka\0\4\350\f\200\377\377\377\377g\fa\0\t6L\337\16JN]Nup\377L\337\16JN]Nu/\13G\372\0\330a8&_Nu/\13G\372\1\250a,H\347\300\0\209\0\350\340\13\350\b\f\0\0\16d\22Nz\0\2\"\0\b\300\0\13N{\0\2N{\20\2L\337\0\3&_NuH\347\0`\20.\0\13\2\0\0\7\35@\0\21 \3\35@\0\35\340\210\35@\0\33\340\210\35@\0\31\20.\0\13\b\0\0\7g\366E\371\0\350@@\25|\0\377\0\0005|\0\0\0\32\25|\0\200\0\4\25|\0\4\0\6A\356\0\25%H\0\24\20.\0\13\b\0\0\7g\366\35|\0\200\0\5N\223J\200f&\b.\0\3\0\tf\22\b.\0\4\0\tg\360\b\356\0\4\0\tp\0`\f\b\356\0\3\0\tp\375`\2p\377%|\0\351`\1\0\24L\337\6\0NuH\347|@\25|\0001\0\5(\3\266\274\0\0\1\0c\b*<\0\0\1\0`\2*\3%I\0\f5E\0\n\b.\0\3\0\tf\0\0\230\b.\0\0\0\rg\356\b.\0\3\0\tf\0\0\206\20.\0\13\b\0\0\7g\354p\0\20.\0\31\341\210\20.\0\33\341\210\20.\0\35\"\4\222\200p\0000*\0\n$\5\224\200\222\202g\b\323\252\0\f\223j\0\n\24\274\377\377\25|\0\200\0\7NqNqNqNqNq\b.\0\3\0\tf2\b.\0\4\0\tf\6\b\22\0\7g\352\b*\0\1\0\1f\0\377|J*\0\1f\30Jj\0\nf\22\323\305\230\205\226\205f\0\377Lp\0`\20p\375`\6p\376`\2p\377\25|\0\20\0\7L\337\2>NuH\347|@\25|\0\261\0\5\266\274\0\0\1\0c\b*<\0\0\1\0`\2*\3%I\0\f5E\0\n\b.\0\3\0\tfR\b.\0\0\0\rf\360\24\274\377\377\25|\0\200\0\7NqNqNqNqNq\b.\0\3\0\tf.\b.\0\4\0\tf\6\b\22\0\7g\352\b*\0\1\0\1f\276J*\0\1f\26Jj\0\nf\20\323\305\230\205\226\205f\220p\0`\20p\375`\6p\376`\2p\377\25|\0\20\0\7L\337\2>NuH\347@B,z\365\216\35|\0\220\0\3\209\0\355\0o\f\0\0Vg:\23\374\0001\0\350\340\r\275\374\0\351` f\n\23\374\0\7\0\355\0p`\b\23\374\0\17\0\355\0p\23\374\0\0\0\355\0q\23\374\0V\0\355\0o\23\374\0\0\0\350\340\r\209\0\355\0p\2\0\0\7\35@\0\1p\0\35@\0\5\35@\0\21\35@\0\31\35@\0\33\35@\0\35\35@\0\27p\200\275\374\0\351` f\4rl`\6\"<\0\0\0\366C\372\08NO\35|\0\20\0\3\35|\0\0\0\13p\2a\0\6X\35|\0\20\0\5p\5a\0\6L\35|\0\0\0\5 <\0\0\234@a\0\6<L\337B\2NuH\347\300\2,z\364\304\20.\0\t\35@\0\tL\337@\3NsH\347\t\2,z\364\256\35|\0\0\0\21\20.\0\r\2\0\0\370f\366\35|\0`\0\5`\30H\347\t\2,z\364\216\35|\0\0\0\21\20.\0\r\2\0\0\370f\366\2D\0\7\20<\0\1\351(\t9\0\355\0qf\f\200.\0\1\35|\0\20\0\3`\6\35|\0\0\0\3\35@\0\0270<\t\304\35@\0\33\340H\35@\0\31\35|\0\3\0\35\35n\0\t\0\t\35|\0 \0\5p\1a\0\5\232\20.\0\tf\b\35|\0\5\0\rf\362\20.\0\r\b\0\0\7g\232\20.\0\tg\360\260<\0\4g&\35@\0\t\260<\0\20g\fH@\20.\0\13L\337@\220Nup\0L\337@\220Nup\377L\337@\220Nup\1a\0\5J\35|\0\0\0\27 <\0\0\2X\35@\0\35\340\210\35@\0\33\340\210\35@\0\31\35|\0\4\0\tp\2a\0\5\"\20.\0\tg\372\35@\0\t\260<\0\4g\b\260<\0\20g\254`\236\b.\0\5\0\rf\370\35n\0\t\0\t\b.\0\7\0\rf\224`\206H\347\20\2,z\363\200\20\21\2\0\0\340\f\0\0\0g\16\260<\0 g\f\260<\0\240g\n`\nv\6`\6v\n`\2v\f\20.\0\t\b\0\0\5f,\20.\0\13\b\0\0\7g\354\2\0\0\7\f\0\0\2f\16a\0\2\246H@f\6L\337@\bNu\20.\0\13L\337@\bNua\0\375\216p\377L\337@\bNuH\347\0\2,z\363\22\20.\0\t\b\0\0\5f,\20.\0\13\b\0\0\7g\354\2\0\0\7\260<\0\0f\16a\0\1fH@f\6L\337@\0Nu\20.\0\13L\337@\0Nua\0\375Dp\377L\337@\0NuH\347\0\2,z\362\310\20.\0\t\b\0\0\5f,\20.\0\13\b\0\0\7g\354\2\0\0\7\260<\0\1f\16a\0\1\234H@f\6L\337@\0Nu\20.\0\13L\337@\0Nua\0\374\372p\377L\337@\0NuH\347\20\2,z\362~\20.\0\t\b\0\0\5f.\20.\0\13\b\0\0\7g\354\2\0\0\7\260<\0\3f\20v\1a\0\2\6H@f\6L\337@\bNu\20.\0\13L\337@\bNua\0\374\256p\377L\337@\bNuH\347\20\2,z\3622\20.\0\t\b\0\0\5f.\20.\0\13\b\0\0\7g\354\2\0\0\7\260<\0\7f\20v\1a\0\1\272H@f\6L\337@\bNu\20.\0\13L\337@\bNua\0\374bp\377L\337@\bNuH\347\20\2,z\361\346\20.\0\t\b\0\0\5f,\20.\0\13\b\0\0\7g\354\2\0\0\7\260<\0\6f\16v\1a8H@f\6L\337@\bNu\20.\0\13L\337@\bNua\0\374\30p\377L\337@\bNuH\347\0\2,z\361\234p\0\20.\0\13L\337@\0Nup\4NuH\347\20@ \3\35@\0\35\340\210\35@\0\33\340\210\35@\0\31\20.\0\13\2\0\0\7\35@\0\21\20.\0\13\b\0\0\7g\366\35n\0\t\0\t\35|\0\200\0\5\20.\0\r\2\0\0\360\260<\0pg\6\260<\0\260f\354J.\0\tf\20\b.\0\1\0\rf\362\35Y\0\25S\203f\352\20.\0\tg\372\35@\0\t\260<\0\20g\6L\337\2\bNup\0L\337\2\bNuH\347\20@\20.\0\13\2\0\0\7\35@\0\21 \3\35@\0\35\340\210\35@\0\33\340\210\35@\0\31\35n\0\t\0\t\35|\0\200\0\5\20.\0\r\2\0\0\360\260<\0pg\6\260<\0\260f\354J.\0\tf\20\b.\0\0\0\rf\362\22\356\0\25S\203f\352\20.\0\tg\372\35@\0\t\260<\0\20g\6L\337\2\bNup\0L\337\2\bNuH\347\20@\20.\0\13\2\0\0\7\35@\0\21\20.\0\13\b\0\0\7g\366\35Y\0\27\35|\0\354\0\5\20.\0\13\b\0\0\7f\366\35|\0\314\0\5S\203f\314p\0L\337\2\bNuH\347\20@\20.\0\13\2\0\0\7\35@\0\21\20.\0\13\b\0\0\7g\366\35|\0\354\0\5\20.\0\13\b\0\0\7f\366\22\356\0\27\35|\0\314\0\5S\203f\314p\0L\337\2\bNu\0\0\0\0\0\0NU\377\360H\347RpE\372\377\360a\0\1,L\337\16JN]Nu\1\0\0\0\0\0NU\377\360H\347RpE\372\377\360a\0\1\16L\337\16JN]Nu\b\0\0\0\0\0NU\377\360H\347Rp&IE\372\377\356C\355\377\360r\5\22\332Q\311\377\374,\2C\355\377\360\23F\0\3\340\216\23F\0\2\340\216\23F\0\1\23C\0\4a\0\0\222J\200f\0\0\202\341\213\353\253\"Ka\0\361F\f\200\377\377\377\377gn\f\200\377\377\377\376g\fa\0\0\272L\337\16JN]Nua\0\0\256J\200f\2p\376L\337\16JN]Nu%\0\0\0\0\0\0\0\0\0NU\377\360H\347Rp&IC\355\377\360E\372\377\346r\t\22\332Q\311\377\374C\355\377\360a(J\200f\32\"Kv\ba\0\374Z\f\200\377\377\377\377g\na^L\337\16JN]Nup\377L\337\16JN]NuH\347H\0002<\0\1a\0\372lJ\200g\6Q\311\377\366`\30HD\353\f\211)\0\1a\0\373dJ\200f\bp\0L\337\0\22Nup\377L\337\0\22NuC\355\377\360r\5\22\332Q\311\377\374C\355\377\360a\270J\200f$C\355\377\377a\0\3744J\200f\30C\355\377\376a\0\374tJ\200f\f\20-\377\376H@\20-\377\377Nup\377NuH\347\340\200A\371\0\350\200#r\0\22\20\22\20t\0\24\20\264\20e\370\222Bd\4\322|\0\310\303B\220\202b\352L\337\1\7NuH\347\370Bp\2002<\1@C\372\0\306NO!\300\f\300p\2002<\1AC\372\2\222NO!\300\f\304p\2002<\1CC\372\3\4NO!\300\f\310p\2002<\1DC\372\0\334NO!\300\f\314p\2002<\1EC\372\1\334NO!\300\f\320p\2002<\1FC\372\1\276NO!\300\f\324p\2002<\1GC\372\0tNO!\300\f\330p\2002<\1HC\372\0rNO!\300\f\334p\2002<\1KC\372\0pNO!\300\f\340p\2002<\1MC\372\0nNO!\300\f\344p\2002<\1OC\372\0\312NO!\300\f\3502<\200\0t\17\"|\0\0\0\0a\0\2n\322|\1\0Q\312\377\360L\337B\37Nu/8\f\300H\347H\4K\372\364\24`H/8\f\330H\347H\4K\372\375\220`:/8\f\334H\347H\4K\372\3650`,/8\f\340H\347H\4K\372\364\326`\36/8\f\344H\347H\4K\372\364z`\20/8\f\314H\347H\4K\372\375:`\0\0\2x\08\1\2A\360\0\262|\200\0f:\340L\342Ld\4\b\304\0\20\2D\0\7\t9\0\355\0qg$N\225\2\200\377\377\377\36J\200f\np\0L\337 \22X\217Nu\0\200\377\377\377\0L\337 \22X\217NuL\337 \22Nu/8\f\350H\347\177Hx\08\1\2A\360\0\262|\200\0fn\"\4\340L\342Ld\4\b\304\0\20\2D\0\7\t9\0\355\0qgNI\371\0\0\t\376 \1\340X\300\274\0\0\0\17\331\300\20\24\b\0\0\7f4\300<\0\177g.$<\0\1V`C\372\2\204\260<\0\24g\32$<\0\2\254\300C\372\2\210\260<\0(g\n$<\0\0\257PC\372\2Pa\0\363\0L\337\22\376X\217NuL\337\22\376Nu\2A\360\0\262|\200\0f\nL\337\0\2X\217p\0NuL\337\0\2Nu/8\f\324H\347~dK\372\357\352`\20/8\f\320H\347~dK\372\360J`\0\0\2x\08\1\2A\360\0\262|\200\0fb\340L\342Ld\4\b\304\0\20\2D\0\7\t9\0\355\0qgL,\3&\6\326\274\0\0\0\377\340\213\266\274\0\0\1\0c\6&<\0\0\1\0z\0N\225\2\200\377\377\377\36J\200f\26\324\203\"\3\341\211\323\301\234\201b\316L\337&~X\217p\0NuL\337&~X\217\0\200\377\377\377\0NuL\337&~NuNT\377\0H\347~`x\08\1\2A\360\0\262|\200\0f`\"\4\340L\342Ld\4\b\304\0\20\2D\0\7\t9\0\355\0qgH$I,\3&\6\266\274\0\0\1\0e\6&<\0\0\1\0C\354\377\0a\0\377$*\3S\205\265\tf\24Q\315\377\372R\202\234\203b\326L\337\6~N\\p\0Nup\376L\337\6~N\\\0\200\377\377\377\0NuL\337\6~N\\/8\f\304NuNT\377\0H\347xDx\08\1\2A\360\0\262|\200\0fF\340L\342Ld\4\b\304\0\20\2D\0\7\t9\0\355\0qg0 \tg8v\na\0\361\326\2\200\377\377\377\36J\200f\16a\0\0\214p\0L\337\"\36N\\Nu\0\200\377\377\377\0L\337\"\36N\\NuL\337\"\36N\\/8\f\310Nuv\nC\372\0\264a\0\361\232\2\200\377\377\377\36J\200f\322C\354\377\0t\4v\1z\0a\0\356V\2\200\377\377\377\36J\200f\272E\354\377\0C\372\0h\f\252X68K\0\0f\250C\372\0Z *\0\4\260\274\0\0\237\331e\0\377zC\351\0\24\260\274\0\1=\35e\0\377lC\351\0\24`\0\377dK\371\0\0\t\376 \1\340X\300\274\0\0\0\17\333\300\20<\0(\f)\0\7\0\3g\20\20<\0\24\f)\0\2\0\4g\4\20<\0\n\32\200B\200Nu\1\1\0\3\0015\200\0\0\0\1\1\0\3\1T\200\0\0\0\1\1\0\3\2f\200\0\0\0\1\1\0\3\2\230\200\0\0\0\1\1\0\7\2f\200\0\0\0\1\1\0\7\2\230\200\0\0\0".getBytes (XEiJ.ISO_8859_1);
  2476: 
  2477:   //----------------------------------------------------------------------------------------
  2478:   //SCSIパーティションIPL
  2479:   //  各パーティションの先頭に書き込まれる
  2480:   //  HUMAN.SYSを読み込んで起動する
  2481: /*
  2482:   public static final int[] SPC_PARTITION_IPL = {
  2483:     //  perl -e "do'sjdump.pl';$p=0x8000;$m=2;$o=0x7bc2;$l=0x7e88-$o;open IN,'HUMAN302.XDF'or die;binmode IN;seek IN,1024*592,0;read IN,$b,64;seek IN,1024*592+vec($b,15,32)+32*$m,0;read IN,$b,32;seek IN,1024*592+vec($b,7,32)+64+$o,0;read IN,$b,$l;close IN;sjdumpcode($b,0,$l,$p)"
  2484:     0x60,0x24,0x53,0x48,0x41,0x52,0x50,0x2f,0x4b,0x47,0x20,0x20,0x20,0x20,0x31,0x2e,  //00008000  `$SHARP/KG    1.
  2485:     0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  //00008010  00..............
  2486:     0x00,0x00,0x00,0x00,0x00,0x00,0x4f,0xfa,0xff,0xd8,0x4e,0x56,0xff,0xfc,0x70,0xf5,  //00008020  ......O..リNV..p.
  2487:     0x72,0x25,0x43,0xfa,0x02,0x92,0x4e,0x4f,0x22,0x29,0x00,0x04,0xe0,0x89,0xe2,0x89,  //00008030  r%C..誰O")..煢竕
  2488:     0x2d,0x41,0xff,0xfc,0x74,0x01,0xd4,0xba,0xff,0xda,0x26,0x3c,0x00,0x00,0x04,0x00,  //00008040  -A..t.ヤコ.レ&<....
  2489:     0x43,0xfa,0x02,0x74,0x61,0x00,0x00,0xf2,0xb0,0xbc,0x00,0x00,0x00,0x00,0x66,0x00,  //00008050  C..ta...ーシ....f.
  2490:     0x01,0x0a,0x42,0x81,0x12,0x3a,0xff,0xaf,0x42,0x82,0x34,0x3a,0xff,0xaa,0x42,0x83,  //00008060  ..B..:.ッB.4:.ェB.
  2491:     0x16,0x3a,0xff,0xab,0x42,0x85,0x3a,0x3a,0xff,0xa0,0xc2,0xc3,0xd4,0x81,0xd4,0xba,  //00008070  .:.ォB.::..ツテヤ.ヤコ
  2492:     0xff,0xa2,0x43,0xfa,0x02,0x42,0x26,0x3c,0x00,0x00,0x04,0x00,0x61,0x00,0x00,0xba,  //00008080  .「C..B&<....a..コ
  2493:     0x4a,0x80,0x66,0x00,0x00,0xd6,0x3c,0x3c,0x00,0x1f,0x24,0x49,0x47,0xfa,0x02,0x06,  //00008090  J.f..ヨ<<..$IG...
  2494:     0x7e,0x0a,0x10,0x1a,0x80,0x3c,0x00,0x20,0xb0,0x1b,0x66,0x06,0x51,0xcf,0xff,0xf4,  //000080a0  ~....<. ー.f.Qマ..
  2495:     0x60,0x22,0xd3,0xfc,0x00,0x00,0x00,0x20,0x51,0xce,0xff,0xe0,0x43,0xfa,0x01,0x59,  //000080b0  `"モ.... Qホ.澆..Y
  2496:     0x2f,0x09,0x43,0xfa,0x00,0xe3,0x61,0x00,0x00,0xba,0x22,0x5f,0x61,0x00,0x00,0xb4,  //000080c0  /.C..綢..コ"_a..エ
  2497:     0x70,0xfe,0x4e,0x4f,0xea,0x8d,0xd4,0x85,0x7a,0x00,0x3a,0x29,0x00,0x1a,0xe0,0x5d,  //000080d0  p.NO鼾ヤ.z.:)..濔
  2498:     0x55,0x85,0x10,0x3a,0xff,0x30,0xca,0xc0,0xd4,0x85,0x48,0xe7,0x70,0x00,0x43,0xfa,  //000080e0  U..:.0ハタヤ.H輛.C.
  2499:     0x01,0xd6,0x26,0x3c,0x00,0x00,0x04,0x00,0x61,0x4e,0x4c,0xdf,0x00,0x0e,0x43,0xfa,  //000080f0  .ヨ&<....aNL゚..C.
  2500:     0x01,0xc6,0x0c,0x59,0x48,0x55,0x66,0x6a,0x54,0x89,0x0c,0x99,0x00,0x00,0x68,0x00,  //00008100  .ニ.YHUfjT.....h.
  2501:     0x66,0x68,0x2f,0x19,0x26,0x19,0xd6,0x99,0x2f,0x03,0x2f,0x19,0x22,0x7c,0x00,0x00,  //00008110  fh/.&.ヨ././."|..
  2502:     0x67,0xc0,0xd6,0xbc,0x00,0x00,0x00,0x40,0x61,0x1e,0x22,0x1f,0x24,0x1f,0x22,0x5f,  //00008120  gタヨシ...@a.".$."_
  2503:     0x4a,0x80,0x66,0x36,0x41,0xf9,0x00,0x00,0x68,0x00,0xd1,0xc2,0x53,0x81,0x65,0x04,  //00008130  J.f6A...h.ムツS‘.
  2504:     0x42,0x18,0x60,0xf8,0x4e,0x5e,0x4e,0xd1,0x48,0xe7,0x3c,0x00,0x2a,0x2e,0xff,0xfc,  //00008140  B.`.N^NムH.<.*...
  2505:     0xd6,0xbc,0x00,0x00,0x03,0xff,0xe0,0x8b,0xea,0xab,0xe5,0x8a,0xea,0xaa,0x70,0xf5,  //00008150  ヨシ....煖.ォ蜉.ェp.
  2506:     0x72,0x21,0x4e,0x4f,0x4c,0xdf,0x00,0x3c,0x4e,0x75,0x43,0xfa,0x00,0xcf,0x60,0x00,  //00008160  r!NOL゚.<NuC..マ`.
  2507:     0xff,0x50,0x43,0xfa,0x00,0xe6,0x60,0x00,0xff,0x48,0x43,0xfa,0x01,0x00,0x60,0x00,  //00008170  .PC..訌..HC...`.
  2508:     0xff,0x40,0x70,0x21,0x4e,0x4f,0x4e,0x75,0x1a,0x53,0x43,0x53,0x49,0x20,0x49,0x50,  //00008180  .@p!NONu.SCSI IP
  2509:     0x4c,0x20,0x43,0x6f,0x70,0x79,0x72,0x69,0x67,0x68,0x74,0x20,0x31,0x39,0x39,0x30,  //00008190  L Copyright 1990
  2510:     0x20,0x53,0x48,0x41,0x52,0x50,0x00,0x1b,0x5b,0x34,0x37,0x6d,0x1b,0x5b,0x31,0x33,  //000081a0   SHARP..[47m.[13
  2511:     0x3b,0x32,0x36,0x48,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,  //000081b0  ;26H            
  2512:     0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,  //000081c0                  
  2513:     0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,  //000081d0                  
  2514:     0x20,0x1b,0x5b,0x31,0x34,0x3b,0x32,0x36,0x48,0x20,0x20,0x20,0x20,0x20,0x20,0x20,  //000081e0   .[14;26H       
  2515:     0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,  //000081f0                  
  2516:     0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,  //00008200                  
  2517:     0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x1b,0x5b,0x31,0x34,0x3b,0x33,0x35,0x48,0x48,  //00008210        ..[14;35HH
  2518:     0x75,0x6d,0x61,0x6e,0x2e,0x73,0x79,0x73,0x20,0x82,0xaa,0x20,0x8c,0xa9,0x82,0xc2,  //00008220  uman.sys が 見つ
  2519:     0x82,0xa9,0x82,0xe8,0x82,0xdc,0x82,0xb9,0x82,0xf1,0x00,0x1b,0x5b,0x31,0x34,0x3b,  //00008230  かりません..[14;
  2520:     0x33,0x38,0x48,0x83,0x66,0x83,0x42,0x83,0x58,0x83,0x4e,0x82,0xaa,0x81,0x40,0x93,  //00008240  38Hディスクが 読
  2521:     0xc7,0x82,0xdf,0x82,0xdc,0x82,0xb9,0x82,0xf1,0x00,0x1b,0x5b,0x31,0x34,0x3b,0x33,  //00008250   めません..[14;3
  2522:     0x36,0x48,0x48,0x75,0x6d,0x61,0x6e,0x2e,0x73,0x79,0x73,0x20,0x82,0xaa,0x20,0x89,  //00008260  6HHuman.sys が 壊
  2523:     0xf3,0x82,0xea,0x82,0xc4,0x82,0xa2,0x82,0xdc,0x82,0xb7,0x00,0x1b,0x5b,0x31,0x34,  //00008270   れています..[14
  2524:     0x3b,0x33,0x33,0x48,0x48,0x75,0x6d,0x61,0x6e,0x2e,0x73,0x79,0x73,0x20,0x82,0xcc,  //00008280  ;33HHuman.sys の
  2525:     0x20,0x83,0x41,0x83,0x68,0x83,0x8c,0x83,0x58,0x82,0xaa,0x88,0xd9,0x8f,0xed,0x82,  //00008290   アドレスが異常で
  2526:     0xc5,0x82,0xb7,0x00,0x68,0x75,0x6d,0x61,0x6e,0x20,0x20,0x20,0x73,0x79,0x73,0x00,  //000082a0   す.human   sys.
  2527:     0x53,0x43,0x53,0x49,0x20,0x49,0x50,0x4c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,  //000082b0  SCSI IPL version
  2528:     0x20,0x31,0x2e,0x30,0x31,0x00,                                                    //000082c0   1.01.          
  2529:   };
  2530: */
  2531:   //  perl misc/itob.pl xeij/SPC.java SPC_PARTITION_IPL
  2532:   public static final byte[] SPC_PARTITION_IPL = "`$SHARP/KG    1.00\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\372\377\330NV\377\374p\365r%C\372\2\222NO\")\0\4\340\211\342\211-A\377\374t\1\324\272\377\332&<\0\0\4\0C\372\2ta\0\0\362\260\274\0\0\0\0f\0\1\nB\201\22:\377\257B\2024:\377\252B\203\26:\377\253B\205::\377\240\302\303\324\201\324\272\377\242C\372\2B&<\0\0\4\0a\0\0\272J\200f\0\0\326<<\0\37$IG\372\2\6~\n\20\32\200<\0 \260\33f\6Q\317\377\364`\"\323\374\0\0\0 Q\316\377\340C\372\1Y/\tC\372\0\343a\0\0\272\"_a\0\0\264p\376NO\352\215\324\205z\0:)\0\32\340]U\205\20:\3770\312\300\324\205H\347p\0C\372\1\326&<\0\0\4\0aNL\337\0\16C\372\1\306\fYHUfjT\211\f\231\0\0h\0fh/\31&\31\326\231/\3/\31\"|\0\0g\300\326\274\0\0\0@a\36\"\37$\37\"_J\200f6A\371\0\0h\0\321\302S\201e\4B\30`\370N^N\321H\347<\0*.\377\374\326\274\0\0\3\377\340\213\352\253\345\212\352\252p\365r!NOL\337\0<NuC\372\0\317`\0\377PC\372\0\346`\0\377HC\372\1\0`\0\377@p!NONu\32SCSI IPL Copyright 1990 SHARP\0\33[47m\33[13;26H                                             \33[14;26H                                             \0\33[14;35HHuman.sys \202\252 \214\251\202\302\202\251\202\350\202\334\202\271\202\361\0\33[14;38H\203f\203B\203X\203N\202\252\201@\223\307\202\337\202\334\202\271\202\361\0\33[14;36HHuman.sys \202\252 \211\363\202\352\202\304\202\242\202\334\202\267\0\33[14;33HHuman.sys \202\314 \203A\203h\203\214\203X\202\252\210\331\217\355\202\305\202\267\0human   sys\0SCSI IPL version 1.01\0".getBytes (XEiJ.ISO_8859_1);
  2533: 
  2534: 
  2535: 
  2536:   //========================================================================================
  2537:   //$$SPI SCSIポート
  2538:   public static class SPCChip {
  2539: 
  2540:     public boolean spiExternal;  //false=内蔵SCSI,true=拡張SCSI
  2541:     public int spiDMAChannel;  //使用するDMAのチャンネル。1=内蔵SCSI,2=拡張SCSI
  2542: 
  2543:     //レジスタ
  2544:     //  ゼロ拡張
  2545:     public int spiBdid;  //0x01
  2546:     public int spiSctl;  //0x03
  2547:     public int spiScmd;  //0x05
  2548:     public int spiInts;  //0x09
  2549:     public int spiPsns;  //0x0b
  2550:     public int spiSsts;  //0x0d
  2551:     public int spiSerr;  //0x0f
  2552:     public int spiPctl;  //0x11
  2553:     public int spiMbc;   //0x13
  2554:     public int spiDreg;  //0x15
  2555:     public int spiTemp;  //0x17
  2556:     public int spiTchTcmTcl;   //0x19,0x1b,0x1d
  2557: 
  2558:     public int spiTargetBase;  //現在のspcUnitArrayの開始番号。リセット時に設定される。-8=ユニットなし
  2559:     public SCUnit spiTargetUnit;  //現在のターゲット。null=バスフリー
  2560: 
  2561:     public byte[] spiReadHandle;  //転送(ターゲット→イニシエータ)の対象の配列
  2562:     public byte[] spiWriteHandle;  //転送(イニシエータ→ターゲット)の対象の配列
  2563:     public int spiBufferIndex;  //次に転送する位置
  2564:     public int spiBufferLimit;  //転送を終了する位置
  2565:     public int spiBufferCount;  //バッファの充填または排出を行う残り回数
  2566:     public final byte[] spiCommandBuffer = new byte[12];  //コマンドバッファ
  2567:     public final byte[] spiStatusBuffer = new byte[1];  //ステータスバッファ
  2568:     public final byte[] spiMessageOutBuffer = new byte[1];  //メッセージアウトバッファ
  2569:     public final byte[] spiMessageInBuffer = new byte[1];  //メッセージインバッファ
  2570:     public final byte[] spiSenseBuffer = new byte[8];  //センスバッファ
  2571:     public final byte[] spiDataInBuffer = new byte[804];  //データインバッファ(Inquiry/Mode Sense(6)/Read Capacity/Read TOC)
  2572:     public final byte[] spiDataOutBuffer = new byte[255];  //データアウトバッファ(Mode Select(6))
  2573: 
  2574:     public SPCChip (boolean external) {
  2575: 
  2576:       spiExternal = external;
  2577:       spiDMAChannel = external ? 2 : 1;
  2578: 
  2579:       spiReset (-8);
  2580: 
  2581:     }  //SPCChip(int)
  2582: 
  2583:     //spcChip.spiReset (targetBase)
  2584:     //  SPCリセット
  2585:     public void spiReset (int targetBase) {
  2586: 
  2587:       spiTargetBase = targetBase;
  2588: 
  2589:       spiBdid = SPC.SPC_BDID_I7;  //自分のSCSI-IDは7
  2590:       spiSctl = SPC.SPC_SCTL_RD;  //ハードウェアリセット
  2591:       spiScmd = 0;
  2592:       spiInts = 0;
  2593:       spiPsns = 0;
  2594:       spiSsts = 0;
  2595:       spiSerr = 0;
  2596:       spiPctl = 0;
  2597:       spiMbc = 0;
  2598:       spiDreg = 0;
  2599:       spiTemp = 0;
  2600:       spiTchTcmTcl = 0;
  2601:       spiUpdateSSTS ();
  2602: 
  2603:       spiTargetUnit = null;
  2604: 
  2605:       spiReadHandle = null;
  2606:       spiWriteHandle = null;
  2607:       spiBufferIndex = 0;
  2608:       spiBufferLimit = 0;
  2609: 
  2610:     }  //spiReset(int)
  2611: 
  2612:     //spiTini ()
  2613:     //  後始末
  2614:     public void spiTini () {
  2615:       for (SCUnit unit : SPC.spcUnitArray) {
  2616:         unit.scuTini ();
  2617:       }
  2618:     }  //spiTini()
  2619: 
  2620:     //d = spcChip.spiPeek (a)
  2621:     //  SPCポートピーク
  2622:     //  ゼロ拡張
  2623:     public int spiPeek (int a) {
  2624:       int d = 0;
  2625:       switch (a & 31) {
  2626:       case SPC.SPC_BDID:  //0x01
  2627:         d = spiBdid;  //8bitで読み出す
  2628:         break;
  2629:       case SPC.SPC_SCTL:  //0x03
  2630:         d = spiSctl;
  2631:         break;
  2632:       case SPC.SPC_SCMD:  //0x05
  2633:         d = spiScmd;
  2634:         break;
  2635:       case SPC.SPC_INTS:  //0x09
  2636:         d = spiInts;
  2637:         break;
  2638:       case SPC.SPC_PSNS:  //0x0b
  2639:         d = spiPsns;
  2640:         break;
  2641:       case SPC.SPC_SSTS:  //0x0d
  2642:         d = spiSsts;
  2643:         break;
  2644:       case SPC.SPC_SERR:  //0x0f
  2645:         d = spiSerr;
  2646:         break;
  2647:       case SPC.SPC_PCTL:  //0x11
  2648:         d = spiPctl;
  2649:         break;
  2650:       case SPC.SPC_MBC:   //0x13
  2651:         d = spiMbc;
  2652:         break;
  2653:       case SPC.SPC_DREG:  //0x15
  2654:         d = spiDreg;
  2655:         break;
  2656:       case SPC.SPC_TEMP:  //0x17
  2657:         d = spiTemp;
  2658:         break;
  2659:       case SPC.SPC_TCH:   //0x19
  2660:         d = spiTchTcmTcl >>> 16;
  2661:         break;
  2662:       case SPC.SPC_TCM:   //0x1b
  2663:         d = (char) spiTchTcmTcl >>> 8;
  2664:         break;
  2665:       case SPC.SPC_TCL:   //0x1d
  2666:         d = spiTchTcmTcl & 255;
  2667:         break;
  2668:       }
  2669:       if (SPC.SPC_DEBUG_TRACE) {
  2670:         System.out.printf ("%08x spiPeek(0x%08x(%s))=0x%02x\n", XEiJ.regPC0, a, SPC.SPC_REGISTER_NAME[a & 31], d);
  2671:       }
  2672:       return d;
  2673:     }  //spiPeek(int)
  2674: 
  2675:     //d = spcChip.spiRead (a)
  2676:     //  SPCポートリード
  2677:     //  ゼロ拡張
  2678:     public int spiRead (int a) {
  2679:       int d = 0;
  2680:       switch (a & 31) {
  2681:       case SPC.SPC_BDID:  //0x01
  2682:         d = spiBdid;  //8bitで読み出す
  2683:         break;
  2684:       case SPC.SPC_SCTL:  //0x03
  2685:         d = spiSctl;
  2686:         break;
  2687:       case SPC.SPC_SCMD:  //0x05
  2688:         d = spiScmd;
  2689:         break;
  2690:       case SPC.SPC_INTS:  //0x09
  2691:         d = spiInts;
  2692:         break;
  2693:       case SPC.SPC_PSNS:  //0x0b
  2694:         d = spiPsns;
  2695:         break;
  2696:       case SPC.SPC_SSTS:  //0x0d
  2697:         d = spiSsts;
  2698:         break;
  2699:       case SPC.SPC_SERR:  //0x0f
  2700:         d = spiSerr;
  2701:         break;
  2702:       case SPC.SPC_PCTL:  //0x11
  2703:         d = spiPctl;
  2704:         break;
  2705:       case SPC.SPC_MBC:   //0x13
  2706:         d = spiMbc;
  2707:         break;
  2708:       case SPC.SPC_DREG:  //0x15
  2709:         if ((spiSsts & SPC.SPC_SSTS_TRIP) != 0 && spiTchTcmTcl != 0) {  //転送中
  2710:           if (spiReadHandle != null && spiBufferIndex < spiBufferLimit) {
  2711:             spiDreg = spiReadHandle[spiBufferIndex++] & 255;  //データを入力する
  2712:             if (spiBufferIndex == spiBufferLimit && spiBufferCount != 0) {  //バッファを再充填する必要がある
  2713:               spiTargetUnit.scuReadImage ();
  2714:               spiBufferCount--;
  2715:               spiBufferIndex = 0;
  2716:             }
  2717:           }
  2718:           spiTchTcmTcl--;  //0でなかったのだから負になることはない
  2719:           spiUpdateSSTS ();
  2720:           if (spiTchTcmTcl == 0 || spiBufferIndex == spiBufferLimit) {  //転送終了。最後のブロックでなければspiBufferIndexは巻き戻されている
  2721:             spiTransferComplete ();
  2722:           }
  2723:         }
  2724:         d = spiDreg;
  2725:         break;
  2726:       case SPC.SPC_TEMP:  //0x17
  2727:         d = spiTemp;
  2728:         break;
  2729:       case SPC.SPC_TCH:   //0x19
  2730:         d = spiTchTcmTcl >>> 16;
  2731:         break;
  2732:       case SPC.SPC_TCM:   //0x1b
  2733:         d = (char) spiTchTcmTcl >>> 8;
  2734:         break;
  2735:       case SPC.SPC_TCL:   //0x1d
  2736:         d = spiTchTcmTcl & 255;
  2737:         break;
  2738:       }
  2739:       if (SPC.SPC_DEBUG_TRACE) {
  2740:         System.out.printf ("%08x spiRead(0x%08x(%s))=0x%02x\n", XEiJ.regPC0, a, SPC.SPC_REGISTER_NAME[a & 31], d);
  2741:       }
  2742:       return d;
  2743:     }  //spiRead(int)
  2744: 
  2745:     //d = spcChip.spiWrite (a, d)
  2746:     //  SPCポートライト
  2747:     public void spiWrite (int a, int d) {
  2748:       d &= 255;
  2749:       if (SPC.SPC_DEBUG_TRACE) {
  2750:         System.out.printf ("%08x spiWrite(0x%08x(%s),0x%02x)\n", XEiJ.regPC0, a, SPC.SPC_REGISTER_NAME[a & 31], d & 255);
  2751:       }
  2752:       switch (a & 31) {
  2753:       case SPC.SPC_BDID:  //0x01
  2754:         spiBdid = 1 << (d & 7);  //3bitで書き込む
  2755:         break;
  2756:       case SPC.SPC_SCTL:  //0x03
  2757:         spiSctl = d;
  2758:         break;
  2759:       case SPC.SPC_SCMD:  //0x05
  2760:         spiScmd = d;
  2761:         switch (spiScmd & SPC.SPC_SCMD_CC) {
  2762:         case SPC.SPC_SCMD_CC_BR:  //Bus Release。ターゲットのときバスフリーフェーズへ移行
  2763:           if (spiTargetUnit != null) {
  2764:             spiBusFreePhase ();  //バスフリーフェーズに移行する
  2765:           }
  2766:           break;
  2767:         case SPC.SPC_SCMD_CC_SL:  //Select。セレクション/リセレクションを開始
  2768:           {
  2769:             if ((spiPctl & SPC.SPC_PCTL_SR) == SPC.SPC_PCTL_SR_R) {  //リセレクション
  2770:               //!!!
  2771:               if (SPC.SPC_REPORT_UNIMPLEMENTED_COMMAND) {
  2772:                 XEiJ.prgMessage (String.format ("%08x Unimplemented Command: Reselection\n", XEiJ.regPC0));
  2773:               }
  2774:               spiSetInterruptStatus (SPC.SPC_INTS_RC);  //Reset Conditionで強制終了
  2775:               break;
  2776:             }
  2777:             if (spiTargetBase < 0) {  //接続するユニットが存在しない
  2778:               spiSetInterruptStatus (SPC.SPC_INTS_TO);  //Time Out
  2779:               break;
  2780:             }
  2781:             int u = Integer.numberOfTrailingZeros (spiTemp & ~spiBdid);  //ターゲットのID
  2782:             if (u > 7) {  //ターゲットのIDが指定されていないか、自分のSCSI-IDと衝突している
  2783:               spiSetInterruptStatus (SPC.SPC_INTS_RC);  //Reset Conditionで強制終了
  2784:               break;
  2785:             }
  2786:             SCUnit unit = SPC.spcUnitArray[spiTargetBase + u];  //ターゲットのユニット
  2787:             if (!unit.isConnected ()) {  //ユニットは存在するが接続されていない
  2788:               spiSetInterruptStatus (SPC.SPC_INTS_TO);  //Time Out
  2789:               break;
  2790:             }
  2791:             spiTargetUnit = unit;  //接続する
  2792:             spiSsts |= SPC.SPC_SSTS_INIT;  //自分がイニシエータになる
  2793:             spiSetInterruptStatus (SPC.SPC_INTS_CC);  //コマンド終了
  2794:             if ((spiPsns & SPC.SPC_PSNS_ATN) != 0) {  //ATN=1
  2795:               spiMessageOutPhase ();  //メッセージアウトフェーズに移行する
  2796:             } else {
  2797:               spiCommandPhase ();  //コマンドフェーズに移行する
  2798:             }
  2799:           }
  2800:           break;
  2801:         case SPC.SPC_SCMD_CC_RA:  //Reset ATN。ATNをクリア
  2802:           spiPsns &= ~SPC.SPC_PSNS_ATN;
  2803:           break;
  2804:         case SPC.SPC_SCMD_CC_SA:  //Set ATN。ATNをセット
  2805:           spiPsns |= SPC.SPC_PSNS_ATN;
  2806:           break;
  2807:         case SPC.SPC_SCMD_CC_TR:  //Transfer。転送開始
  2808:           spiUpdateSSTS ();
  2809:           spiSsts |= SPC.SPC_SSTS_BUSY | SPC.SPC_SSTS_TRIP;  //転送開始
  2810:           break;
  2811:         case SPC.SPC_SCMD_CC_TP:  //Transfer Pause。転送中断
  2812:           //!!!
  2813:           if (SPC.SPC_REPORT_UNIMPLEMENTED_COMMAND) {
  2814:             XEiJ.prgMessage (String.format ("%08x Unimplemented Command: Transfer Pause\n", XEiJ.regPC0));
  2815:           }
  2816:           break;
  2817:         case SPC.SPC_SCMD_CC_RR:  //Reset ACK/REQ。CPU転送のときACK/REQをクリア
  2818:           if ((spiPsns & SPC.SPC_PSNS_IO) == 0) {  //Out
  2819:             if (spiWriteHandle == null) {  //転送中ではない
  2820:               break;
  2821:             }
  2822:             spiPsns &= ~SPC.SPC_PSNS_ACK;  //イニシエータがACKを0にする
  2823:             if (spiBufferIndex < spiBufferLimit) {  //継続
  2824:               spiPsns |= SPC.SPC_PSNS_REQ;  //ターゲットがREQを1にする
  2825:               HD63450.dmaFallPCL (spiDMAChannel);
  2826:               break;
  2827:             }
  2828:             spiTransferComplete ();  //転送終了
  2829:           } else {  //In
  2830:             if (spiReadHandle == null) {  //転送中ではない
  2831:               break;
  2832:             }
  2833:             spiPsns &= ~SPC.SPC_PSNS_REQ;  //イニシエータがREQを0にする
  2834:             if (spiBufferIndex < spiBufferLimit) {  //継続
  2835:               spiPsns |= SPC.SPC_PSNS_REQ;  //ターゲットがREQを1にする
  2836:               HD63450.dmaFallPCL (spiDMAChannel);
  2837:               break;
  2838:             }
  2839:             spiTransferComplete ();  //転送終了
  2840:           }
  2841:           break;
  2842:         case SPC.SPC_SCMD_CC_SR:  //Set ACK/REQ。CPU転送のときACK/REQをセット
  2843:           if ((spiPsns & SPC.SPC_PSNS_IO) == 0) {  //Out
  2844:             if (spiWriteHandle == null) {  //転送中ではない
  2845:               break;
  2846:             }
  2847:             spiPsns |= SPC.SPC_PSNS_ACK;  //イニシエータがACKを1にする。spiTempに出力データの準備ができている
  2848:             if (spiBufferIndex < spiBufferLimit) {
  2849:               spiWriteHandle[spiBufferIndex++] = (byte) spiTemp;  //データを出力する
  2850:               if (spiBufferIndex == spiBufferLimit && spiBufferCount != 0) {  //バッファから排出する必要がある
  2851:                 //!!! ディスクイメージ以外のバッファは溢れてはならない
  2852:                 spiTargetUnit.scuWriteImage ();
  2853:                 if (--spiBufferCount != 0) {
  2854:                   spiBufferIndex = 0;
  2855:                 }
  2856:               }
  2857:               spiUpdateSSTS ();
  2858:             }
  2859:             spiPsns &= ~SPC.SPC_PSNS_REQ;  //ターゲットがREQを0にする
  2860:           } else {  //In
  2861:             if (spiReadHandle == null) {  //転送中ではない
  2862:               break;
  2863:             }
  2864:             spiPsns |= SPC.SPC_PSNS_ACK;  //イニシエータがACKを1にする。spiReadHandle[spiBufferIndex]に入力データの準備ができている
  2865:             if (spiBufferIndex < spiBufferLimit) {
  2866:               spiTemp = spiReadHandle[spiBufferIndex++] & 255;  //データを入力する
  2867:               if (spiBufferIndex == spiBufferLimit && spiBufferCount != 0) {  //バッファを再充填する必要がある
  2868:                 spiTargetUnit.scuReadImage ();
  2869:                 spiBufferCount--;
  2870:                 spiBufferIndex = 0;
  2871:               }
  2872:               spiUpdateSSTS ();
  2873:             }
  2874:             spiPsns &= ~SPC.SPC_PSNS_REQ;  //ターゲットがREQを0にする
  2875:           }
  2876:           break;
  2877:         }
  2878:         break;
  2879:       case SPC.SPC_INTS:  //0x09
  2880:         //1を書き込んだビットだけ0クリアする
  2881:         //  move.b INTS,INTSでクリアできる
  2882:         //spiInts &= ~d;
  2883:         spiInts = spiInts & ~d | ((spiInts & d & SPC.SPC_INTS_TO) != 0 ? SPC.SPC_INTS_DC : 0);  //Time OutをクリアするときDisconnectedをセットする
  2884:         break;
  2885:       case SPC.SPC_PSNS:  //0x0b
  2886:         spiPsns = d;
  2887:         break;
  2888:       case SPC.SPC_SSTS:  //0x0d
  2889:         //Readのみ
  2890:         break;
  2891:       case SPC.SPC_SERR:  //0x0f
  2892:         //Readのみ
  2893:         break;
  2894:       case SPC.SPC_PCTL:  //0x11
  2895:         spiPctl = d;
  2896:         break;
  2897:       case SPC.SPC_MBC:   //0x13
  2898:         //Readのみ
  2899:         break;
  2900:       case SPC.SPC_DREG:  //0x15
  2901:         spiDreg = d;
  2902:         if ((spiSsts & SPC.SPC_SSTS_TRIP) != 0 && spiTchTcmTcl != 0) {  //転送中
  2903:           if (spiWriteHandle != null && spiBufferIndex < spiBufferLimit) {
  2904:             spiWriteHandle[spiBufferIndex++] = (byte) spiDreg;  //データを出力する
  2905:             if ((spiPctl & SPC.SPC_PCTL_TP) == SPC.SPC_COMMAND_PHASE &&  //コマンドフェーズの
  2906:                 spiBufferIndex == 1) {  //1バイト目
  2907:               //         グループ76543210
  2908:               spiBufferLimit = 0x11c11aa6 >>> ((spiCommandBuffer[0] & 255) >> 5 << 2) & 15;  //CDB(Command Descriptor Block)の長さ
  2909:             }
  2910:             //!!! ディスクイメージ以外のバッファは溢れてはならない
  2911:             if (spiBufferIndex == spiBufferLimit && spiBufferCount != 0) {  //バッファから排出する必要がある
  2912:               spiTargetUnit.scuWriteImage ();
  2913:               if (--spiBufferCount != 0) {
  2914:                 spiBufferIndex = 0;
  2915:               }
  2916:             }
  2917:           }
  2918:           spiTchTcmTcl--;  //0でなかったのだから負になることはない
  2919:           spiUpdateSSTS ();
  2920:           if (spiTchTcmTcl == 0 || spiBufferIndex == spiBufferLimit) {  //転送終了。最後のブロックでなければspiBufferIndexは巻き戻されている
  2921:             spiTransferComplete ();
  2922:           }
  2923:         }
  2924:         break;
  2925:       case SPC.SPC_TEMP:  //0x17
  2926:         spiTemp = d;
  2927:         if (spiTemp == 0) {
  2928:           //spiInts = 0;
  2929:           spiInts = (spiInts & SPC.SPC_INTS_TO) != 0 ? SPC.SPC_INTS_DC : 0;  //Time OutをクリアするときDisconnectedをセットする
  2930:         }
  2931:         break;
  2932:       case SPC.SPC_TCH:   //0x19
  2933:         spiTchTcmTcl = d << 16 | (char) spiTchTcmTcl;
  2934:         spiUpdateSSTS ();
  2935:         break;
  2936:       case SPC.SPC_TCM:   //0x1b
  2937:         spiTchTcmTcl = spiTchTcmTcl & 0xff00ff | d << 8;
  2938:         spiUpdateSSTS ();
  2939:         break;
  2940:       case SPC.SPC_TCL:   //0x1d
  2941:         spiTchTcmTcl = spiTchTcmTcl & 0xffff00 | d;
  2942:         spiUpdateSSTS ();
  2943:         break;
  2944:       }
  2945:     }  //spiWrite(int,int)
  2946: 
  2947:     //spiTransferComplete ()
  2948:     //  転送終了
  2949:     public void spiTransferComplete () {
  2950:       if ((spiSsts & SPC.SPC_SSTS_TRIP) != 0) {
  2951:         spiSetInterruptStatus (SPC.SPC_INTS_CC);  //転送終了
  2952:         spiSsts &= ~(SPC.SPC_SSTS_BUSY | SPC.SPC_SSTS_TRIP);
  2953:       }
  2954:       switch (spiPctl & SPC.SPC_PCTL_TP) {  //転送フェーズ
  2955:       case SPC.SPC_DATA_OUT_PHASE:  //データアウトフェーズの転送が終了した
  2956:         {
  2957:           int oc = spiCommandBuffer[0] & 255;  //オペレーションコード
  2958:           if (oc == 0x15) {  //Mode Select(6)
  2959:             if (SPC.SPC_REPORT_UNIMPLEMENTED_COMMAND) {  //未実装コマンドを表示する
  2960:               StringBuilder sb = new StringBuilder ();
  2961:               sb.append (String.format ("%08x DataOutPhaseComplete(0x%02x(%s)) [", XEiJ.regPC0, oc, SPC.SPC_COMMAND_NAME[oc]));
  2962:               for (int i = 0; i < spiBufferLimit; i++) {
  2963:                 if (i > 0) {
  2964:                   sb.append (',');
  2965:                 }
  2966:                 sb.append (String.format ("0x%02x", spiDataOutBuffer[i] & 255));
  2967:               }
  2968:               sb.append (']');
  2969:               XEiJ.prgMessage (sb.toString ());
  2970:             }
  2971:           }
  2972:         }
  2973:         spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  2974:         break;
  2975:       case SPC.SPC_DATA_IN_PHASE:  //データインフェーズの転送が終了した
  2976:         spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  2977:         break;
  2978:       case SPC.SPC_COMMAND_PHASE:  //コマンドフェーズの転送が終了した
  2979:         {
  2980:           int oc = spiCommandBuffer[0] & 255;  //オペレーションコード
  2981:           if (spiBufferIndex == 1) {
  2982:             //         グループ76543210
  2983:             spiBufferLimit = 0x11c11aa6 >>> (oc >> 5 << 2) & 15;  //CDB(Command Descriptor Block)の長さ
  2984:             if (spiBufferIndex < spiBufferLimit) {
  2985:               //次のデータを要求する
  2986:               spiPsns |= SPC.SPC_PSNS_REQ;  //ターゲットがREQを1にする
  2987:               HD63450.dmaFallPCL (spiDMAChannel);
  2988:               break;
  2989:             }
  2990:           }
  2991:           spiTargetUnit.scuCommand (oc);  //コマンドを実行する
  2992:         }
  2993:         break;
  2994:       case SPC.SPC_STATUS_PHASE:  //ステータスフェーズの転送が終了した
  2995:         spiMessageInPhase ();  //メッセージインフェーズに移行する
  2996:         break;
  2997:       case SPC.SPC_MESSAGE_OUT_PHASE:  //メッセージアウトフェーズの転送が終了した
  2998:         spiCommandPhase ();  //コマンドフェーズに移行する
  2999:         break;
  3000:       case SPC.SPC_MESSAGE_IN_PHASE:  //メッセージインフェーズの転送が終了した
  3001:         spiBusFreePhase ();  //バスフリーフェーズに移行する
  3002:         break;
  3003:       }
  3004:     }  //spiTransferComplete()
  3005: 
  3006:     //spiBusFreePhase ()
  3007:     //  バスフリーフェーズに移行する
  3008:     public void spiBusFreePhase () {
  3009:       if (SPC.SPC_DEBUG_TRACE) {
  3010:         System.out.printf ("%08x spiBusFreePhase()\n", XEiJ.regPC0);
  3011:       }
  3012:       spiWriteHandle = null;
  3013:       spiReadHandle = null;
  3014:       spiSsts &= ~SPC.SPC_SSTS_INIT;  //自分がイニシエータではなくなる
  3015:       spiPsns = 0;
  3016:       spiTargetUnit = null;
  3017:       if ((spiPctl & SPC.SPC_PCTL_IE) != 0) {
  3018:         spiSetInterruptStatus (SPC.SPC_INTS_DC);
  3019:       }
  3020:     }  //spiBusFreePhase()
  3021: 
  3022:     //spiCommandPhase ()
  3023:     //  コマンドフェーズに移行する
  3024:     public void spiCommandPhase () {
  3025:       if (SPC.SPC_DEBUG_TRACE) {
  3026:         System.out.printf ("%08x spiCommandPhase()\n", XEiJ.regPC0);
  3027:       }
  3028:       spiWriteHandle = spiCommandBuffer;
  3029:       spiReadHandle = null;
  3030:       spiBufferIndex = 0;
  3031:       spiBufferLimit = 1;
  3032:       spiUpdateSSTS ();
  3033:       spiPsns = SPC.SPC_PSNS_REQ | SPC.SPC_COMMAND_PHASE;
  3034:       HD63450.dmaFallPCL (spiDMAChannel);
  3035:     }  //spiCommandPhase()
  3036: 
  3037:     //spiDataInPhase (handle, index, limit, count)
  3038:     //  データインフェーズに移行する
  3039:     public void spiDataInPhase (byte[] handle, int index, int limit, int count) {
  3040:       if (SPC.SPC_DEBUG_TRACE) {
  3041:         System.out.printf ("%08x spiDataInPhase(handle,0x%08x,0x%08x,0x%08x)\n", XEiJ.regPC0, index, limit, count);
  3042:       }
  3043:       spiWriteHandle = null;
  3044:       spiReadHandle = handle;
  3045:       spiBufferIndex = index;
  3046:       spiBufferLimit = limit;
  3047:       spiBufferCount = count;
  3048:       spiUpdateSSTS ();
  3049:       spiPsns = SPC.SPC_PSNS_REQ | SPC.SPC_DATA_IN_PHASE;
  3050:       HD63450.dmaFallPCL (spiDMAChannel);
  3051:     }  //spiDataInPhase(byte[],int,int,int)
  3052: 
  3053:     //spiDataOutPhase (handle, index, limit, count)
  3054:     //  データアウトフェーズに移行する
  3055:     public void spiDataOutPhase (byte[] handle, int index, int limit, int count) {
  3056:       if (SPC.SPC_DEBUG_TRACE) {
  3057:         System.out.printf ("%08x spiDataOutPhase(handle,0x%08x,0x%08x,0x%08x)\n", XEiJ.regPC0, index, limit, count);
  3058:       }
  3059:       spiWriteHandle = handle;
  3060:       spiReadHandle = null;
  3061:       spiBufferIndex = index;
  3062:       spiBufferLimit = limit;
  3063:       spiBufferCount = count;
  3064:       spiUpdateSSTS ();
  3065:       spiPsns = SPC.SPC_PSNS_REQ | SPC.SPC_DATA_OUT_PHASE;
  3066:       HD63450.dmaFallPCL (spiDMAChannel);
  3067:     }  //spiDataOutPhase(byte[],int,int,int)
  3068: 
  3069:     //spiStatusPhase (status, message)
  3070:     //  ステータスフェーズに移行する
  3071:     //  status   2=センスデータあり。spiSenseBufferを設定しておくこと
  3072:     //  message  常に0
  3073:     public void spiStatusPhase (int status, int message) {
  3074:       if (SPC.SPC_DEBUG_TRACE) {
  3075:         System.out.printf ("%08x spiStatusPhase(0x%02x)\n", XEiJ.regPC0, status);
  3076:       }
  3077:       spiStatusBuffer[0] = (byte) status;
  3078:       spiMessageInBuffer[0] = (byte) message;
  3079:       spiWriteHandle = null;
  3080:       spiReadHandle = spiStatusBuffer;
  3081:       spiBufferIndex = 0;
  3082:       spiBufferLimit = 1;
  3083:       spiTemp = spiStatusBuffer[0] & 255;
  3084:       spiUpdateSSTS ();
  3085:       spiPsns = SPC.SPC_PSNS_REQ | SPC.SPC_STATUS_PHASE;
  3086:       HD63450.dmaFallPCL (spiDMAChannel);
  3087:     }  //spiStatusPhase(int,int)
  3088: 
  3089:     //spiMessageInPhase ()
  3090:     //  メッセージインフェーズに移行する
  3091:     public void spiMessageInPhase () {
  3092:       if (SPC.SPC_DEBUG_TRACE) {
  3093:         System.out.printf ("%08x spiMessageInPhase(0x%02x)\n", XEiJ.regPC0, spiMessageInBuffer[0] & 255);
  3094:       }
  3095:       spiWriteHandle = null;
  3096:       spiReadHandle = spiMessageInBuffer;
  3097:       spiBufferIndex = 0;
  3098:       spiBufferLimit = 1;
  3099:       spiTemp = spiMessageInBuffer[0] & 255;
  3100:       spiUpdateSSTS ();
  3101:       spiPsns = SPC.SPC_PSNS_REQ | SPC.SPC_MESSAGE_IN_PHASE;
  3102:       HD63450.dmaFallPCL (spiDMAChannel);
  3103:     }  //spiMessageInPhase()
  3104: 
  3105:     //spiMessageOutPhase ()
  3106:     //  メッセージアウトフェーズに移行する
  3107:     public void spiMessageOutPhase () {
  3108:       if (SPC.SPC_DEBUG_TRACE) {
  3109:         System.out.printf ("%08x spiMessageOutPhase(0x%02x)\n", XEiJ.regPC0, spiMessageOutBuffer[0] & 255);
  3110:       }
  3111:       spiWriteHandle = spiMessageOutBuffer;
  3112:       spiReadHandle = null;
  3113:       spiBufferIndex = 0;
  3114:       spiBufferLimit = 1;
  3115:       spiUpdateSSTS ();
  3116:       spiPsns = SPC.SPC_PSNS_REQ | SPC.SPC_MESSAGE_OUT_PHASE;
  3117:       HD63450.dmaFallPCL (spiDMAChannel);
  3118:     }  //spiMessageOutPhase()
  3119: 
  3120:     //spiSetInterruptStatus (ints)
  3121:     public void spiSetInterruptStatus (int ints) {
  3122:       //int oldInts = spiInts;
  3123:       if ((ints & ~SPC.SPC_INTS_TO) != 0) {  //TO以外をセットするとき
  3124:         spiInts &= ~SPC.SPC_INTS_TO;  //TOをクリア
  3125:       }
  3126:       spiInts |= ints;
  3127:       if (//oldInts != spiInts &&  //0→1
  3128:           (spiSctl & SPC.SPC_SCTL_IE) != 0) {  //Interrupt Enable
  3129:         if (spiExternal) {
  3130:           XEiJ.eb2Interrupt (XEiJ.EB2_SPC_REQUEST);
  3131:         } else {
  3132:           IOInterrupt.ioiSpcFall ();
  3133:           IOInterrupt.ioiSpcRise ();
  3134:         }
  3135:       }
  3136:     }  //spiSetInterruptStatus(int)
  3137: 
  3138:     //spiUpdateSSTS ()
  3139:     //  SSTSのTC0,DF,DEを更新する
  3140:     public void spiUpdateSSTS () {
  3141:       spiSsts = (spiSsts & ~(SPC.SPC_SSTS_TC0 | SPC.SPC_SSTS_DF | SPC.SPC_SSTS_DE) |
  3142:                  ((spiPctl & SPC.SPC_PCTL_IO) == 0 ?  //Out
  3143:                   (spiTchTcmTcl == 0 ? SPC.SPC_SSTS_TC0 : 0) |
  3144:                   SPC.SPC_SSTS_DE  //出力のときFIFOは常にEmptyでFullになることはない
  3145:                   :  //In
  3146:                   (spiTchTcmTcl == 0 ? SPC.SPC_SSTS_TC0 | SPC.SPC_SSTS_DE : 0) |  //入力のとき残りデータが1バイト以上あればFIFOはEmptyではない
  3147:                   (spiTchTcmTcl >= 8 ? SPC.SPC_SSTS_DF : 0)));  //入力のとき残りデータが8バイト以上あればFIFOはFull
  3148:     }  //spiUpdateSSTS ()
  3149: 
  3150:   }  //class SPCChip
  3151: 
  3152: 
  3153: 
  3154:   //========================================================================================
  3155:   //$$SCU SCSI HDユニット
  3156:   //  SCSIハードディスクのユニット
  3157:   public static class SCUnit extends AbstractUnit {
  3158: 
  3159:     public SPCChip scuChip;  //接続されているSCSIポート
  3160:     public int scuMode;  //動作モード。1=SCSI-1,3=SCSI-2
  3161:     public RandomAccessFile scuRaf;
  3162:     public int scuBytesPerRecord;  //1レコードあたりのバイト数(2の累乗)
  3163:     public int scuDiskEndRecord;  //ディスクのレコード数。0=挿入されていない
  3164:     public long scuDiskEndByte;  //ディスクのバイト数
  3165:     public byte[] scuRecordImage;
  3166: 
  3167:     //new SCUnit (number, chip)
  3168:     //  コンストラクタ
  3169:     public SCUnit (int number, SPCChip chip) {
  3170:       super (number);
  3171:       scuChip = chip;
  3172:       scuMode = 1;  //リセレクションがないのでSCSI-1
  3173:       scuRaf = null;
  3174:       scuBytesPerRecord = 512;
  3175:       scuDiskEndRecord = 0;
  3176:       scuDiskEndByte = 0;
  3177:       scuRecordImage = new byte[SPC.SPC_MAX_BYTES_PER_BLOCK];
  3178:     }
  3179: 
  3180:     public void scuReset (SPCChip chip) {
  3181:       scuChip = chip;
  3182:     };  //scuReset
  3183: 
  3184:     //numberOfModes = unit.abuGetNumberOfModes ()
  3185:     //  モードの数を返す
  3186:     //  モードボタンを表示するときオーバーライドする
  3187:     @Override public int abuGetNumberOfModes () {
  3188:       return 2;
  3189:     }  //unit.abuGetNumberOfModes()
  3190: 
  3191:     //image = unit.abuGetModeIcon (mode, enabled)
  3192:     //  モードボタンのアイコンを返す
  3193:     //  モードボタンを表示するときオーバーライドする
  3194:     @Override public ImageIcon abuGetModeIcon (int mode, boolean enabled) {
  3195:       return (enabled ?
  3196:               mode == 0 ? LnF.LNF_HD_ICON : LnF.LNF_CD_ICON :
  3197:               mode == 0 ? LnF.LNF_HD_DISABLED_ICON : LnF.LNF_CD_DISABLED_ICON);
  3198:     }  //unit.abuGetModeIcon(int,boolean)
  3199: 
  3200:     //text = unit.abuGetModeTextEn (mode, enabled)
  3201:     //  モードボタンの英語のツールチップテキストを返す
  3202:     //  モードボタンを表示するときオーバーライドする
  3203:     @Override public String abuGetModeTextEn (int mode, boolean enabled) {
  3204:       return (enabled ?
  3205:               mode == 0 ? "Hard disk mode → CD-ROM mode" : "CD-ROM mode → Hard disk mode" :
  3206:               mode == 0 ? "Head disk mode" : "CD-ROM mode");
  3207:     }  //unit.abuGetModeTextEn(int,boolean)
  3208: 
  3209:     //text = unit.abuGetModeTextJa (mode, enabled)
  3210:     //  モードボタンの日本語のツールチップテキストを返す
  3211:     //  モードボタンを表示するときオーバーライドする
  3212:     @Override public String abuGetModeTextJa (int mode, boolean enabled) {
  3213:       return (enabled ?
  3214:               mode == 0 ? "ハードディスクモード → CD-ROM モード" : "CD-ROM モード → ハードディスクモード" :
  3215:               mode == 0 ? "ハードディスクモード" : "CD-ROM モード");
  3216:     }  //unit.abuGetModeTextJa(int,boolean)
  3217: 
  3218:     //unit.connect (disconnectable)
  3219:     //  接続する
  3220:     @Override protected void connect (boolean disconnectable) {
  3221:       super.connect (disconnectable);
  3222:     }
  3223: 
  3224:     //unit.disconnect ()
  3225:     //  切り離す
  3226:     @Override protected void disconnect () {
  3227:       super.disconnect ();
  3228:     }
  3229: 
  3230:     //success = unit.eject ()
  3231:     //  イジェクトする
  3232:     @Override protected boolean eject () {
  3233:       if (scuRaf != null) {  //クローズする
  3234:         try {
  3235:           scuRaf.close ();
  3236:         } catch (IOException ioe) {
  3237:         }
  3238:         scuRaf = null;
  3239:       }
  3240:       if (!super.eject ()) {  //イジェクトする
  3241:         return false;
  3242:       }
  3243:       scuDiskEndRecord = 0;
  3244:       scuDiskEndByte = 0;
  3245:       return true;
  3246:     }
  3247: 
  3248:     //success = unit.open ()
  3249:     //  openダイアログを開く
  3250:     @Override protected boolean open () {
  3251:       if (!super.open ()) {
  3252:         return false;
  3253:       }
  3254:       if (XEiJ.prgIsLocal) {  //ローカルのとき
  3255:         SPC.spcOpenUnit = abuNumber;
  3256:         if (SPC.spcOpenDialog == null) {
  3257:           SPC.spcMakeOpenDialog ();
  3258:         }
  3259:         SPC.spcOpenFileChooser.setSelectedFile (SPC.spcLastFile);  //最後にアクセスしたファイルを設定する
  3260:         SPC.spcOpenFileChooser.rescanCurrentDirectory ();  //挿入されているファイルが変わると選択できるファイルも変わるのでリストを作り直す
  3261:         SPC.spcOpenDialog.setVisible (true);
  3262:       }
  3263:       return true;
  3264:     }  //unit.open()
  3265: 
  3266:     //success = unit.insert (path)
  3267:     //  挿入する
  3268:     @Override protected boolean insert (String path) {
  3269:       if (SPC.spcIsInserted (path)) {  //既に挿入されている
  3270:         return false;
  3271:       }
  3272:       if (!super.insert (path)) {  //挿入できなかった
  3273:         return false;
  3274:       }
  3275:       return true;
  3276:     }  //unit.insert(String)
  3277: 
  3278:     //loaded = unit.load (path)
  3279:     //  読み込む
  3280:     @Override protected boolean load (String path) {
  3281:       File file = new File (path);
  3282:       if (SPC.spcIsHds (file, true)) {  //拡張子がHDSで装置初期化されている
  3283:         abuSetMode (0);
  3284:       } else if (SPC.spcIsIso (file)) {  //拡張子がISO
  3285:         abuSetMode (1);
  3286:         protect (false);  //開くときに書き込みを禁止した場合はイジェクトするまで書き込みを許可できない
  3287:       } else {
  3288:         return false;
  3289:       }
  3290:       try {
  3291:         scuRaf = new RandomAccessFile (file, SPC.spcOpenWriteProtect ? "r" : "rw");  //RandomAccessFileに"w"というモードはない
  3292:       } catch (IOException ioe) {
  3293:         return false;  //開けなかった。SPC.spcIsHdsまたはSPC.spcIsISOのチェックを通っても書き込みモードでは開けない可能性がある
  3294:       }
  3295:       if (abuCurrentMode == 0) {  //ハードディスク
  3296:         byte[] bb = new byte[16];
  3297:         try {
  3298:           scuRaf.seek (0L);
  3299:           scuRaf.read (bb, 0, 16);  //セクタ0の先頭16バイトを読み込む
  3300:         } catch (IOException ioe) {
  3301:           try {
  3302:             scuRaf.close ();
  3303:           } catch (IOException ioe2) {
  3304:           }
  3305:           scuRaf = null;
  3306:           return false;  //セクタ0の先頭16バイトを読み込めなかった
  3307:         }
  3308:         scuBytesPerRecord = ByteArray.byaRwz (bb, 8);  //1レコードあたりのバイト数(2の累乗)
  3309:         scuDiskEndRecord = ByteArray.byaRls (bb, 10);  //ディスクのレコード数
  3310:         scuDiskEndByte = (long) scuBytesPerRecord * scuDiskEndRecord;  //ディスクのバイト数。整合性はSPC.spcIsHdsで確認済みなのでチェックは省略する
  3311:       } else {  //CD-ROM
  3312:         byte[] bb = new byte[2048];
  3313:         try {
  3314:           scuRaf.seek (2048L * 16);
  3315:           scuRaf.read (bb, 0, 2048);  //セクタ16を読み込む
  3316:         } catch (IOException ioe) {
  3317:           try {
  3318:             scuRaf.close ();
  3319:           } catch (IOException ioe2) {
  3320:           }
  3321:           scuRaf = null;
  3322:           return false;  //セクタ16を読み込めなかった
  3323:         }
  3324:         scuBytesPerRecord = ByteArray.byaRwz (bb, 130);  //ブロックのバイト数
  3325:         scuDiskEndRecord = ByteArray.byaRls (bb, 84);  //ボリュームのブロック数
  3326:         scuDiskEndByte = (long) scuBytesPerRecord * scuDiskEndRecord;  //ボリュームのバイト数。整合性はSPC.spcIsIsoで確認済みなのでチェックは省略する
  3327:       }
  3328:       return true;
  3329:     }
  3330: 
  3331:     //scuTini ()
  3332:     //  後始末
  3333:     public void scuTini () {
  3334:       if (XEiJ.prgIsLocal) {  //ローカルのとき
  3335:         if (scuRaf != null) {
  3336:           try {
  3337:             scuRaf.close ();
  3338:           } catch (IOException ioe) {
  3339:           }
  3340:           scuRaf = null;
  3341:         }
  3342:       }
  3343:     }  //scuTini()
  3344: 
  3345:     //scuCommand (oc)
  3346:     //  コマンドを実行する
  3347:     //  セレクションフェーズに成功したのだから装置は接続されているはず
  3348:     //  ロジカルユニットは存在しない可能性がある
  3349:     public void scuCommand (int oc) {
  3350:       if (SPC.SPC_DEBUG_TRACE) {
  3351:         System.out.printf ("%08x scuCommand(0x%02x(%s)) [", XEiJ.regPC0, oc, SPC.SPC_COMMAND_NAME[oc]);
  3352:         for (int i = 0; i < scuChip.spiBufferLimit; i++) {
  3353:           if (i > 0) {
  3354:             System.out.print (',');
  3355:           }
  3356:           System.out.printf ("0x%02x", scuChip.spiCommandBuffer[i] & 255);
  3357:         }
  3358:         System.out.println (']');
  3359:       }
  3360:       int lun = scuChip.spiCommandBuffer[1] >> 5 & 7;  //LUN
  3361:       if (lun != 0) {
  3362:         scuDoInvalid ();
  3363:         return;
  3364:       }
  3365:       switch (oc) {
  3366:       case 0x00:  //Test Unit Ready
  3367:         scuDoTestUnitReady ();
  3368:         break;
  3369:       case 0x01:  //Rezero Unit
  3370:         scuDoRezeroUnit ();
  3371:         break;
  3372:       case 0x03:  //Request Sense
  3373:         scuDoRequestSense ();
  3374:         break;
  3375:       case 0x04:  //Format Unit
  3376:         scuDoFormatUnit ();
  3377:         break;
  3378:         //case 0x06:  //Format Block(SASI)
  3379:         //case 0x07:  //Bad Track Format(SASI)
  3380:       case 0x08:  //Read(6)
  3381:         scuDoRead6 ();
  3382:         break;
  3383:       case 0x0a:  //Write(6)
  3384:         scuDoWrite6 ();
  3385:         break;
  3386:       case 0x0b:  //Seek(6)
  3387:         scuDoSeek6 ();
  3388:         break;
  3389:         //case 0x0e:  //Assign Track(SASI)
  3390:       case 0x12:  //Inquiry
  3391:         scuDoInquiry ();
  3392:         break;
  3393:       case 0x15:  //Mode Select(6)
  3394:         scuDoModeSelect6 ();
  3395:         break;
  3396:         //case 0x18:  //Copy
  3397:       case 0x1a:  //Mode Sense(6)
  3398:         scuDoModeSense6 ();
  3399:         break;
  3400:       case 0x1b:  //Start-Stop Unit
  3401:         scuStartStopUnit ();
  3402:         break;
  3403:         //case 0x1c:  //Receive Diagnostic Results
  3404:         //case 0x1d:  //Send Diagnostic
  3405:       case 0x1e:  //Prevent-Allow Medium Removal
  3406:         scuDoPreventAllowMediumRemoval ();
  3407:         break;
  3408:       case 0x25:  //Read Capacity
  3409:         scuDoReadCapacity ();
  3410:         break;
  3411:       case 0x28:  //Read(10)
  3412:         scuDoRead10 ();
  3413:         break;
  3414:       case 0x2a:  //Write(10)
  3415:         scuDoWrite10 ();
  3416:         break;
  3417:       case 0x2b:  //Seek(10)
  3418:         scuDoSeek10 ();
  3419:         break;
  3420:       case 0x43:  //Read TOC
  3421:         scuDoReadTOC ();
  3422:         break;
  3423:         //case 0x2e:  //Write and Verify(10)
  3424:         //case 0x2f:  //Verify(10)
  3425:         //case 0x30:  //Search Data High(10)
  3426:         //case 0x31:  //Search Data Equal(10)
  3427:         //case 0x32:  //Search Data Low(10)
  3428:         //case 0x33:  //Set Limits(10)
  3429:         //case 0x34:  //Pre-Fetch
  3430:         //case 0x35:  //Synchronize Cache
  3431:         //case 0x36:  //Lock-Unlock Cache
  3432:         //case 0x37:  //Read Defect Data(10)
  3433:         //case 0x39:  //Compare
  3434:         //case 0x3a:  //Copy and Verify
  3435:         //case 0x3b:  //Write Buffer
  3436:         //case 0x3c:  //Read Buffer
  3437:         //case 0x3e:  //Read Long
  3438:         //case 0x3f:  //Write Long
  3439:         //case 0x40:  //Change Definition
  3440:         //case 0x41:  //Write Same
  3441:         //case 0x4c:  //Log Select
  3442:         //case 0x4d:  //Log Sense
  3443:         //case 0x55:  //Mode Select(10)
  3444:         //case 0x5a:  //Mode Sense(10)
  3445:         //case 0xc1:  //Load/Unload SHARP MO
  3446:         //case 0xc2:  //Assign Drive(SASI)
  3447:       default:  //Invalid
  3448:         if (SPC.SPC_REPORT_UNIMPLEMENTED_COMMAND) {  //未実装コマンドを表示する
  3449:           StringBuilder sb = new StringBuilder ();
  3450:           sb.append (String.format ("%08x scuCommand(0x%02x(%s)) [", XEiJ.regPC0, oc, SPC.SPC_COMMAND_NAME[oc]));
  3451:           for (int i = 0; i < scuChip.spiBufferLimit; i++) {
  3452:             if (i > 0) {
  3453:               sb.append (',');
  3454:             }
  3455:             sb.append (String.format ("0x%02x", scuChip.spiCommandBuffer[i] & 255));
  3456:           }
  3457:           sb.append (']');
  3458:           XEiJ.prgMessage (sb.toString ());
  3459:         }
  3460:         scuDoInvalid ();
  3461:       }
  3462:     }  //scuCommand(int)
  3463: 
  3464:     //scuDoTestUnitReady ()
  3465:     //  [0]  0x00
  3466:     //  [1]  |LUN###|-----|
  3467:     //  [5]  |..|----|Flag|Link|
  3468:     public void scuDoTestUnitReady () {
  3469:       scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3470:     }  //scuDoTestUnitReady()
  3471: 
  3472:     //scuDoRezeroUnit ()
  3473:     //  [0]  0x01
  3474:     //  [1]  |LUN###|-----|
  3475:     //  [5]  |..|----|Flag|Link|
  3476:     public void scuDoRezeroUnit () {
  3477:       scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3478:     }  //scuDoRezeroUnit()
  3479: 
  3480:     //scuDoPreventAllowMediumRemoval ()
  3481:     //  [0]  0x1e
  3482:     //  [1]  |LUN###|-----|
  3483:     //  [4]  |-------|Prevent|
  3484:     //  [5]  |..|----|Flag|Link|
  3485:     public void scuDoPreventAllowMediumRemoval () {
  3486:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3487:         scuUnitAttention ();
  3488:         return;
  3489:       }
  3490:       int prevent = scuChip.spiCommandBuffer[4] & 1;  //0=イジェクト許可,1=イジェクト禁止
  3491:       if (prevent == 0) {  //イジェクト許可
  3492:         allow ();
  3493:       } else {  //イジェクト禁止
  3494:         prevent ();
  3495:       }
  3496:       scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3497:     }  //scuDoPreventAllowMediumRemoval()
  3498: 
  3499:     //scuDoRequestSense ()
  3500:     //  [0]  0x03
  3501:     //  [1]  |LUN###|-----|
  3502:     //  [4]  アロケーション長
  3503:     //  [5]  |..|----|Flag|Link|
  3504:     //  センスデータを最大nバイトまで転送してからクリアする
  3505:     //  nが0x00のときSCSI-1は4バイトだけ転送するがSCSI-2は転送しない
  3506:     public void scuDoRequestSense () {
  3507:       int n = scuChip.spiCommandBuffer[4] & 255;
  3508:       if (scuMode > 1 && n == 0) {
  3509:         scuChip.spiSenseBuffer[0] = 0;
  3510:         scuChip.spiSenseBuffer[2] = 0;
  3511:         scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3512:         return ;
  3513:       }
  3514:       scuChip.spiDataInPhase (scuChip.spiSenseBuffer, 0, Math.min (n, scuMode == 1 ? 4 : 8), 0);  //データインフェーズに移行する
  3515:     }  //scuDoRequestSense()
  3516: 
  3517:     //scuDoFormatUnit ()
  3518:     //  [0]  0x04
  3519:     //  [1]  |LUN###|FmtData|CmpLst|ディフェクトリスト形式###|
  3520:     //  [2]  ベンダ固有
  3521:     //  [3][4]  インタリーブ
  3522:     //  [5]  |..|----|Flag|Link|
  3523:     public void scuDoFormatUnit () {
  3524:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3525:         scuUnitAttention ();
  3526:         return;
  3527:       }
  3528:       if (abuWriteProtected) {  //書き込みが禁止されている
  3529:         scuDataProtect ();
  3530:         return;
  3531:       }
  3532:       if (true) {
  3533:         //イメージファイルをゼロクリアする
  3534:         final int step = 1024 * 256;  //256KB
  3535:         byte[] zero = new byte[step];
  3536:         Arrays.fill (zero, (byte) 0);
  3537:         try {
  3538:           scuRaf.seek (0L);
  3539:           long pos;
  3540:           for (pos = 0L; pos + step <= scuDiskEndByte; pos += step) {
  3541:             scuRaf.write (zero);
  3542:           }
  3543:           if (pos < scuDiskEndByte) {
  3544:             scuRaf.write (zero, 0, (int) (scuDiskEndByte - pos));
  3545:           }
  3546:         } catch (IOException ioe) {
  3547:         }
  3548:       }
  3549:       scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3550:     }  //scuDoFormatUnit()
  3551: 
  3552:     //scuDoRead6 ()
  3553:     //  [0]  0x08
  3554:     //  [1][2][3]  LUN<<21|論理ブロックアドレス
  3555:     //  [4]  論理ブロック数
  3556:     //  [5]  |..|----|Flag|Link|
  3557:     public void scuDoRead6 () {
  3558:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3559:         scuUnitAttention ();
  3560:         return;
  3561:       }
  3562:       int a = ByteArray.byaRls (scuChip.spiCommandBuffer, 0) & 0x001fffff;  //論理ブロックアドレス
  3563:       int n = scuChip.spiCommandBuffer[4] & 255;  //論理ブロック数
  3564:       if (n == 0) {
  3565:         n = 256;
  3566:       }
  3567:       if (scuDiskEndRecord < a + n) {  //範囲外
  3568:         scuDoInvalid ();
  3569:         return;
  3570:       }
  3571:       try {
  3572:         scuRaf.seek ((long) scuBytesPerRecord * a);
  3573:         scuRaf.read (scuRecordImage, 0, scuBytesPerRecord);
  3574:       } catch (IOException ioe) {
  3575:       }
  3576:       scuChip.spiDataInPhase (scuRecordImage, 0, scuBytesPerRecord, n - 1);  //データインフェーズに移行する
  3577:     }  //scuDoRead6()
  3578: 
  3579:     //scuReadImage ()
  3580:     public void scuReadImage () {
  3581:       try {
  3582:         scuRaf.read (scuRecordImage, 0, scuBytesPerRecord);
  3583:       } catch (IOException ioe) {
  3584:       }
  3585:     }  //scuReadImage()
  3586: 
  3587:     //scuDoWrite6 ()
  3588:     //  [0]  0x0a
  3589:     //  [1][2][3]  LUN<<21|論理ブロックアドレス
  3590:     //  [4]  論理ブロック数
  3591:     //  [5]  |..|----|Flag|Link|
  3592:     public void scuDoWrite6 () {
  3593:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3594:         scuUnitAttention ();
  3595:         return;
  3596:       }
  3597:       if (abuWriteProtected) {  //書き込みが禁止されている
  3598:         scuDataProtect ();
  3599:         return;
  3600:       }
  3601:       int a = ByteArray.byaRls (scuChip.spiCommandBuffer, 0) & 0x001fffff;  //論理ブロックアドレス
  3602:       int n = scuChip.spiCommandBuffer[4] & 255;  //論理ブロック数
  3603:       if (n == 0) {
  3604:         n = 256;
  3605:       }
  3606:       if (scuDiskEndRecord < a + n) {  //範囲外
  3607:         scuDoInvalid ();
  3608:         return;
  3609:       }
  3610:       try {
  3611:         scuRaf.seek ((long) scuBytesPerRecord * a);
  3612:       } catch (IOException ioe) {
  3613:       }
  3614:       scuChip.spiDataOutPhase (scuRecordImage, 0, scuBytesPerRecord, n);  //データアウトフェーズに移行する
  3615:     }  //scuDoWrite6()
  3616: 
  3617:     //scuWriteImage ()
  3618:     public void scuWriteImage () {
  3619:       int oc = scuChip.spiCommandBuffer[0] & 255;
  3620:       if (oc == 0x0a || oc == 0x2a) {  //Write(6)またはWrite(10)
  3621:         try {
  3622:           scuRaf.write (scuRecordImage, 0, scuBytesPerRecord);
  3623:         } catch (IOException ioe) {
  3624:         }
  3625:       }
  3626:     }  //scuWriteImage()
  3627: 
  3628:     //scuDoSeek6 ()
  3629:     //  [0]  0x0b
  3630:     //  [1][2][3]  LUN<<21|論理ブロックアドレス
  3631:     //  [5]  |..|----|Flag|Link|
  3632:     public void scuDoSeek6 () {
  3633:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3634:         scuUnitAttention ();
  3635:         return;
  3636:       }
  3637:       int a = ByteArray.byaRls (scuChip.spiCommandBuffer, 0) & 0x001fffff;  //論理ブロックアドレス
  3638:       if (scuDiskEndRecord < a) {  //範囲外
  3639:         scuDoInvalid ();
  3640:         return;
  3641:       }
  3642:       scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3643:     }  //scuDoSeek6()
  3644: 
  3645:     //scuDoInquiry ()
  3646:     //  [0]  0x12
  3647:     //  [1]  |LUN###|----|EVPD|
  3648:     //  [2]  ページコード
  3649:     //  [4]  アロケーション長
  3650:     //  [5]  |..|----|Flag|Link|
  3651:     //!!! EVPD==0のみ対応
  3652:     //  例
  3653:     //    0000  05  クォリファイア=0,デバイスタイプコード=5
  3654:     //    0001  80  RMB=1(リムーバブル),デバイスタイプ修飾子=0
  3655:     //    0002  02  ISOバージョン=0,ECMAバージョン=0,ANSIバージョン=2
  3656:     //    0003  02  AENC=0,TermlOP=0,レスポンスデータ形式=2
  3657:     //    0004  1f  追加データ長=31
  3658:     //    0005  00
  3659:     //    0006  00
  3660:     //    0007  18  RelAdr=0,WBus32=0,WBus16=0,Sync=1,Linked=1,CmdQue=0,SftRe=0
  3661:     //    0008  53 4f 4e 59 20 20 20 20  ベンダID="SONY    "
  3662:     //    0010  43 44 2d 52 4f 4d 20 43 44 55 2d 35 35 53 20 20  プロダクトID="CD-ROM CDU-55S  "
  3663:     //    0020  31 2e 30 74  プロダクト版数="1.0t"
  3664:     public void scuDoInquiry () {
  3665:       int evpd = scuChip.spiCommandBuffer[1] & 1;
  3666:       int pagecode = scuChip.spiCommandBuffer[2] & 255;  //ページコード
  3667:       int n = scuChip.spiCommandBuffer[4] & 255;  //アロケーション長
  3668:       if (evpd == 0) {  //スタンダードInquiry情報
  3669:         scuChip.spiDataInBuffer[0] = (byte) (abuCurrentMode == 0 ? SPC.SPC_DIRECT_ACCESS_DEVICE :  //ダイレクトアクセスデバイス。クォリファイアは0
  3670:                                              SPC.SPC_CDROM_DEVICE);  //CD-ROMデバイス
  3671:         scuChip.spiDataInBuffer[1] = (byte) (SPC.SPC_REMOVABLE_HDD ? 1 << 7 : 0);  //0=固定,1=リムーバブル
  3672:         scuChip.spiDataInBuffer[2] = (byte) (scuMode == 1 ? 1 : 2);  //ISO/ECMA/ANSIバージョン。SCSI-1/SCSI-2
  3673:         scuChip.spiDataInBuffer[3] = (byte) (scuMode == 1 ? 1 : 2);  //レスポンスデータ形式。SCSI-1/SCSI-2
  3674:         scuChip.spiDataInBuffer[4] = 31;  //追加データ長
  3675:         scuChip.spiDataInBuffer[5] = 0;  //予約
  3676:         scuChip.spiDataInBuffer[6] = 0;  //予約
  3677:         scuChip.spiDataInBuffer[7] = 0;  //サポート機能なし
  3678:         ByteArray.byaWstr (scuChip.spiDataInBuffer, 8, (
  3679:           abuCurrentMode == 0 ?  //ハードディスク
  3680:           //         111111
  3681:           //123456789012345
  3682:           "XEiJ    " +  //ベンダID(ASCII 8文字)
  3683:           "Hard Disk       " +  //プロダクトID(ASCII 16文字)。ASCIIに限られるがイメージファイル名を入れてもよい
  3684:           "1.0 "  //プロダクト版数(ASCII 4文字)
  3685:           :  //CD-ROM
  3686:           "XEiJ    " +  //ベンダID(ASCII 8文字)
  3687:           "CD-ROM          " +  //プロダクトID(ASCII 16文字)。ASCIIに限られるがイメージファイル名を入れてもよい
  3688:           "1.0 "));  //プロダクト版数(ASCII 4文字)
  3689:         scuChip.spiDataInPhase (scuChip.spiDataInBuffer, 0, Math.min (36, n), 0);  //データインフェーズに移行する
  3690:       } else {  //VPD情報
  3691:         //!!!
  3692:         if (SPC.SPC_REPORT_UNIMPLEMENTED_COMMAND) {
  3693:           XEiJ.prgMessage (String.format ("%08x Inquiry with EVPD==1\n", XEiJ.regPC0));
  3694:         }
  3695:         scuDoInvalid ();
  3696:       }
  3697:     }  //scuDoInquiry()
  3698: 
  3699:     //scuDoModeSelect6 ()
  3700:     //  [0]  0x15
  3701:     //  [1]  |LUN###|PF|---|SP|
  3702:     //  [4]  パラメータリスト長
  3703:     //  [5]  コントロールバイト
  3704:     public void scuDoModeSelect6 () {
  3705:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3706:         scuUnitAttention ();
  3707:         return;
  3708:       }
  3709:       int n = scuChip.spiCommandBuffer[4] & 255;  //パラメータリスト長
  3710:       scuChip.spiDataOutPhase (scuChip.spiDataOutBuffer, 0, n, 0);  //データアウトフェーズに移行する
  3711:     }  //scuDoModeSelect6()
  3712: 
  3713:     //scuDoModeSense6 ()
  3714:     //  [0]  0x1a
  3715:     //  [1]  |LUN###|R|DBD|---|
  3716:     //  [2]  |PC##|ページコード######|
  3717:     //  [4]  アロケーション長
  3718:     //  [5]  |..|----|Flag|Link|
  3719:     public void scuDoModeSense6 () {
  3720:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3721:         scuUnitAttention ();
  3722:         return;
  3723:       }
  3724:       int page = scuChip.spiCommandBuffer[2] & 63;  //ページコード
  3725:       if (!(page == 0x00 || page == 0x3f)) {
  3726:         scuDoInvalid ();
  3727:         return;
  3728:       }
  3729:       int n = scuChip.spiCommandBuffer[4] & 255;  //アロケーション長
  3730:       scuChip.spiDataInBuffer[0] = 12 - 1;  //センスデータ長
  3731:       scuChip.spiDataInBuffer[1] = 0;  //メディアタイプ
  3732:       scuChip.spiDataInBuffer[2] = (byte) (abuWriteProtected ? 1 << 7 : 0 << 7);  //ライトプロテクト
  3733:       scuChip.spiDataInBuffer[3] = 8;  //ブロックディスクリプタ長
  3734:       //ブロックディスクリプタ1
  3735:       ByteArray.byaWl (scuChip.spiDataInBuffer, 4, 0 << 24 | scuDiskEndRecord);  //デンシティコード,ブロック数
  3736:       ByteArray.byaWl (scuChip.spiDataInBuffer, 8, scuBytesPerRecord);  //ブロック長
  3737:       scuChip.spiDataInPhase (scuChip.spiDataInBuffer, 0, Math.min (12, n), 0);  //データインフェーズに移行する
  3738:     }  //scuDoModeSense6()
  3739: 
  3740:     //scuStartStopUnit ()
  3741:     //  [0]  0x1b
  3742:     //  [1]  |LUN###|-----|
  3743:     //  [4]  |------|LoEj|Start|
  3744:     //  [5]  |..|----|Flag|Link|
  3745:     public void scuStartStopUnit () {
  3746:       int loejStart = scuChip.spiCommandBuffer[4] & 3;  //LoEj|Start
  3747:       if (loejStart == 2) {  //イジェクト
  3748:         eject ();
  3749:       }
  3750:       scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3751:     }  //scuStartStopUnit()
  3752: 
  3753:     //scuDoReadCapacity ()
  3754:     //  [0]  0x25
  3755:     //  [1]  |LUN###|----|RelAdr|
  3756:     //  [2][3][4][5]  論理ブロックアドレス
  3757:     //  [8]  |-------|PMI|
  3758:     //  [9]  |..|----|Flag|Link|
  3759:     //
  3760:     //  本来の仕様
  3761:     //    Read Capacityが返す値は論理ブロック数ではなくて最終論理ブロックアドレスである
  3762:     //    論理ブロックアドレスは0から始まるので、論理ブロック数は最終論理ブロックアドレス+1に等しい
  3763:     //  FORMAT.XのSCSIハードディスクに関する動作
  3764:     //    装置初期化
  3765:     //      先頭セクタの+10にRead Capacityが返した値を書き込む
  3766:     //    領域確保
  3767:     //      先頭セクタの+10に書かれている値またはRead Capacityが返した値を論理ブロック数と見なして容量を計算する
  3768:     //    すなわち、FORMAT.XはRead Capacityが返す値を論理ブロック数と見なしている
  3769:     //  結論
  3770:     //    他の機種では先頭セクタに最終論理ブロックアドレスが書かれていることが多いが、
  3771:     //    X68000のSCSIハードディスクの先頭セクタの+10に書かれている値は最終論理ブロックアドレスではなくて論理ブロック数である
  3772:     //  辻褄合わせ
  3773:     //    Read Capacityが返す値は、実行中のプロセスがFORMAT.Xならば論理ブロック数、それ以外は最終論理ブロックアドレスとする
  3774:     public void scuDoReadCapacity () {
  3775:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3776:         scuUnitAttention ();
  3777:         return;
  3778:       }
  3779:       int pmi = scuChip.spiCommandBuffer[8] & 1;  //0=全体の末尾,1=指定されたアドレスから連続してアクセスできる領域の末尾
  3780:       int pmm = MainMemory.mmrHumanPmm ();  //Human68kの実行中のプロセスのメモリ管理テーブルのアドレス
  3781:       boolean formatx = (pmi == 0 &&  //_S_READCAPは0
  3782:                          0 <= pmm &&  //Human68kのバージョンと実行中のプロセスのメモリ管理テーブルのアドレスの確認
  3783:                          MC68060.mmuPeekByteSign (pmm + 0x64, 5) == 2 &&  //FORMAT2.Xのモジュール番号
  3784:                          MC68060.mmuPeekLong (pmm + 0x30, 5) - (pmm + 256) == 68088 &&  //FORMAT2.X version 2.31のtext+dataのサイズ
  3785:                          "FORMAT.X".equalsIgnoreCase (MC68060.mmuPeekStringZ (pmm + 0xc4, 5)));  //実行ファイル名
  3786:       ByteArray.byaWl (scuChip.spiDataInBuffer, 0, formatx ? scuDiskEndRecord : scuDiskEndRecord - 1);  //実行中のプロセスがFORMAT.Xならば論理ブロック数、それ以外は最終論理ブロックアドレスを返す
  3787:       ByteArray.byaWl (scuChip.spiDataInBuffer, 4, scuBytesPerRecord);  //ブロック長
  3788:       scuChip.spiDataInPhase (scuChip.spiDataInBuffer, 0, 8, 0);  //データインフェーズに移行する
  3789:     }  //scuDoReadCapacity
  3790: 
  3791:     //scuDoRead10 ()
  3792:     //  [0]  0x28
  3793:     //  [1]  |LUN###|DPO|FUA|--|RelAdr|
  3794:     //  [2][3][4][5]  論理ブロックアドレス
  3795:     //  [7][8]  論理ブロック数
  3796:     //  [9]  |..|----|Flag|Link|
  3797:     public void scuDoRead10 () {
  3798:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3799:         scuUnitAttention ();
  3800:         return;
  3801:       }
  3802:       int a = ByteArray.byaRls (scuChip.spiCommandBuffer, 2);  //論理ブロックアドレス
  3803:       int n = ByteArray.byaRwz (scuChip.spiCommandBuffer, 7);  //論理ブロック数
  3804:       if (scuDiskEndRecord < a + n) {  //範囲外
  3805:         scuDoInvalid ();
  3806:         return;
  3807:       }
  3808:       if (n == 0) {
  3809:         scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3810:         return;
  3811:       }
  3812:       try {
  3813:         scuRaf.seek ((long) scuBytesPerRecord * a);
  3814:         scuRaf.read (scuRecordImage, 0, scuBytesPerRecord);
  3815:       } catch (IOException ioe) {
  3816:       }
  3817:       scuChip.spiDataInPhase (scuRecordImage, 0, scuBytesPerRecord, n - 1);  //データインフェーズに移行する
  3818:     }  //scuDoRead10()
  3819: 
  3820:     //scuDoWrite10 ()
  3821:     //  [0]  0x2a
  3822:     //  [1]  |LUN###|DPO|FUA|--|RelAdr|
  3823:     //  [2][3][4][5]  論理ブロックアドレス
  3824:     //  [7][8]  論理ブロック数
  3825:     //  [9]  |..|----|Flag|Link|
  3826:     public void scuDoWrite10 () {
  3827:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3828:         scuUnitAttention ();
  3829:         return;
  3830:       }
  3831:       if (abuWriteProtected) {  //書き込みが禁止されている
  3832:         scuDataProtect ();
  3833:         return;
  3834:       }
  3835:       int a = ByteArray.byaRls (scuChip.spiCommandBuffer, 2);  //論理ブロックアドレス
  3836:       int n = ByteArray.byaRwz (scuChip.spiCommandBuffer, 7);  //論理ブロック数
  3837:       if (scuDiskEndRecord < a + n) {  //範囲外
  3838:         scuDoInvalid ();
  3839:         return;
  3840:       }
  3841:       if (n == 0) {
  3842:         scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3843:         return;
  3844:       }
  3845:       try {
  3846:         scuRaf.seek ((long) scuBytesPerRecord * a);
  3847:       } catch (IOException ioe) {
  3848:       }
  3849:       scuChip.spiDataOutPhase (scuRecordImage, 0, scuBytesPerRecord, n);  //データアウトフェーズに移行する
  3850:     }  //scuDoWrite10()
  3851: 
  3852:     //scuDoSeek10 ()
  3853:     //  [0]  0x2b
  3854:     //  [1]  |LUN###|DPO|FUA|--|RelAdr|
  3855:     //  [2][3][4][5]  論理ブロックアドレス
  3856:     //  [9]  |..|----|Flag|Link|
  3857:     public void scuDoSeek10 () {
  3858:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3859:         scuUnitAttention ();
  3860:         return;
  3861:       }
  3862:       int a = ByteArray.byaRls (scuChip.spiCommandBuffer, 2);  //論理ブロックアドレス
  3863:       if (scuDiskEndRecord < a) {  //範囲外
  3864:         scuDoInvalid ();
  3865:         return;
  3866:       }
  3867:       scuChip.spiStatusPhase (SPC.SPC_GOOD, SPC.SPC_COMMAND_COMPLETE);  //エラーなしでステータスフェーズに移行する
  3868:     }  //scuDoSeek10()
  3869: 
  3870:     //scuDoReadTOC ()
  3871:     //  [0]  0x43
  3872:     //  [1]  |LUN###|---|MSF|-|
  3873:     //  [6]  開始トラック
  3874:     //  [7][8]  アロケーション長
  3875:     //  [9]  コントロールバイト
  3876:     //  例:
  3877:     //    MSF=0
  3878:     //      01: 00 3a 01 06 00 14 01 00 00 00 00 00
  3879:     //      02: 00 32 01 06 00 10 02 00 00 02 76 b0
  3880:     //      03: 00 2a 01 06 00 10 03 00 00 02 bf 7e
  3881:     //      04: 00 22 01 06 00 10 04 00 00 03 0e 3b
  3882:     //      05: 00 1a 01 06 00 10 05 00 00 03 96 3c
  3883:     //      06: 00 12 01 06 00 10 06 00 00 03 d2 e0
  3884:     //      aa: 00 0a 01 06 00 10 aa 00 00 04 1b d2
  3885:     //    MSF=1
  3886:     //      01: 00 3a 01 06 00 14 01 00 00 00 02 00  (0x00*60+(0x02-2))*75+0x00=0x000000
  3887:     //      02: 00 32 01 06 00 10 02 00 00 23 36 38  (0x23*60+(0x36-2))*75+0x38=0x0276b0
  3888:     //      03: 00 2a 01 06 00 10 03 00 00 28 03 13  (0x28*60+(0x03-2))*75+0x13=0x02bf7e
  3889:     //      04: 00 22 01 06 00 10 04 00 00 2c 20 01  (0x2c*60+(0x20-2))*75+0x01=0x030e3b
  3890:     //      05: 00 1a 01 06 00 10 05 00 00 34 10 12  (0x34*60+(0x10-2))*75+0x12=0x03963c
  3891:     //      06: 00 12 01 06 00 10 06 00 00 37 2b 11  (0x37*60+(0x2b-2))*75+0x11=0x03d2e0
  3892:     //      aa: 00 0a 01 06 00 10 aa 00 00 3b 34 10  (0x3b*60+(0x34-2))*75+0x10=0x041bd2
  3893:     public void scuDoReadTOC () {
  3894:       if (abuCurrentMode == 0) {  //ハードディスク
  3895:         scuDoInvalid ();
  3896:         return;
  3897:       }
  3898:       if (!abuInserted || scuDiskEndRecord == 0) {  //挿入されていない
  3899:         scuUnitAttention ();
  3900:         return;
  3901:       }
  3902:       boolean msf = (scuChip.spiCommandBuffer[1] & 2) != 0;  //true=MSFアドレス形式,false=論理ブロックアドレス形式
  3903:       int startTrack = scuChip.spiCommandBuffer[6] & 255;  //開始トラック
  3904:       int allocLength = ByteArray.byaRwz (scuChip.spiCommandBuffer, 7);  //アロケーション長
  3905:       if (startTrack == 0) {
  3906:         startTrack = 1;
  3907:       }
  3908:       int dataLength;
  3909:       if (startTrack <= 1) {  //データトラックとリードアウトトラック
  3910:         dataLength = 4 + 8 * 2;  //データの長さ。自分を含む
  3911:         ByteArray.byaWw (scuChip.spiDataInBuffer, 0, 2 + 8 * 2);  //TOCデータ長。要求されたサイズに関わらず最後までの長さを返す。自分を含まない
  3912:         scuChip.spiDataInBuffer[2] = 1;  //先頭トラック番号
  3913:         scuChip.spiDataInBuffer[3] = 1;  //最終トラック番号
  3914:         scuChip.spiDataInBuffer[4] = 0;  //Reserved
  3915:         scuChip.spiDataInBuffer[5] = 0x14;  //カレントポジションデータ,データトラック
  3916:         scuChip.spiDataInBuffer[6] = 1;  //トラック番号
  3917:         scuChip.spiDataInBuffer[7] = 0;  //Reserved
  3918:         ByteArray.byaWl (scuChip.spiDataInBuffer, 8, 0);  //アブソリュートCD-ROMアドレス
  3919:         scuChip.spiDataInBuffer[12] = 0;  //Reserved
  3920:         scuChip.spiDataInBuffer[13] = 0x10;  //カレントポジションデータ
  3921:         scuChip.spiDataInBuffer[14] = (byte) 0xaa;  //トラック番号
  3922:         scuChip.spiDataInBuffer[15] = 0;  //Reserved
  3923:         ByteArray.byaWl (scuChip.spiDataInBuffer, 16, msf ? scuDiskEndRecord / 4500 << 16 | scuDiskEndRecord / 75 % 60 + 2 << 8 | scuDiskEndRecord % 75 : scuDiskEndRecord);  //アブソリュートCD-ROMアドレス
  3924:       } else if (startTrack <= 0xaa) {  //リードアウトトラック
  3925:         dataLength = 4 + 8 * 1;  //データの長さ。自分を含む
  3926:         ByteArray.byaWw (scuChip.spiDataInBuffer, 0, 2 + 8 * 1);  //TOCデータ長。要求されたサイズに関わらず最後までの長さを返す。自分を含まない
  3927:         scuChip.spiDataInBuffer[2] = 1;  //先頭トラック番号
  3928:         scuChip.spiDataInBuffer[3] = 1;  //最終トラック番号
  3929:         scuChip.spiDataInBuffer[4] = 0;  //Reserved
  3930:         scuChip.spiDataInBuffer[5] = 0x10;  //カレントポジションデータ
  3931:         scuChip.spiDataInBuffer[6] = (byte) 0xaa;  //トラック番号
  3932:         scuChip.spiDataInBuffer[7] = 0;  //Reserved
  3933:         ByteArray.byaWl (scuChip.spiDataInBuffer, 8, msf ? scuDiskEndRecord / 4500 << 16 | scuDiskEndRecord / 75 % 60 + 2 << 8 | scuDiskEndRecord % 75 : scuDiskEndRecord);  //アブソリュートCD-ROMアドレス
  3934:       } else {  //開始トラック番号が範囲外
  3935:         scuDoInvalid ();
  3936:         return;
  3937:       }
  3938:       scuChip.spiDataInPhase (scuChip.spiDataInBuffer, 0, Math.min (dataLength, allocLength), 0);  //データインフェーズに移行する
  3939:     }  //scuDoReadTOC()
  3940: 
  3941:     //scuDoInvalid ()
  3942:     public void scuDoInvalid () {
  3943:       if (scuMode == 1) {  //SCSI-1
  3944:         scuChip.spiSenseBuffer[0] = (byte) SPC.SPC_INVALID_COMMAND;
  3945:       } else {  //SCSI-2
  3946:         scuChip.spiSenseBuffer[0] = (byte) SPC.SPC_EXTENDED_SENSE;
  3947:         scuChip.spiSenseBuffer[2] = (byte) SPC.SPC_ILLEGAL_REQUEST;
  3948:       }
  3949:       scuChip.spiStatusPhase (SPC.SPC_CHECK_CONDITION, SPC.SPC_COMMAND_COMPLETE);
  3950:     }  //scuDoInvalid()
  3951: 
  3952:     //scuUnitAttention ()
  3953:     public void scuUnitAttention () {
  3954:       if (scuMode == 1) {  //SCSI-1
  3955:         scuChip.spiSenseBuffer[0] = (byte) SPC.SPC_INVALID_COMMAND;
  3956:       } else {  //SCSI-2
  3957:         scuChip.spiSenseBuffer[0] = (byte) SPC.SPC_EXTENDED_SENSE;
  3958:         scuChip.spiSenseBuffer[2] = (byte) SPC.SPC_UNIT_ATTENTION;
  3959:       }
  3960:       scuChip.spiStatusPhase (SPC.SPC_CHECK_CONDITION, SPC.SPC_COMMAND_COMPLETE);
  3961:     }  //scuUnitAttention()
  3962: 
  3963:     //scuDataProtect ()
  3964:     public void scuDataProtect () {
  3965:       if (scuMode == 1) {  //SCSI-1
  3966:         scuChip.spiSenseBuffer[0] = (byte) SPC.SPC_INVALID_COMMAND;
  3967:       } else {  //SCSI-2
  3968:         scuChip.spiSenseBuffer[0] = (byte) SPC.SPC_EXTENDED_SENSE;
  3969:         scuChip.spiSenseBuffer[2] = (byte) SPC.SPC_DATA_PROTECT;
  3970:       }
  3971:       scuChip.spiStatusPhase (SPC.SPC_CHECK_CONDITION, SPC.SPC_COMMAND_COMPLETE);
  3972:     }  //scuDataProtect()
  3973: 
  3974:   }  //class SCUnit
  3975: 
  3976: 
  3977: 
  3978: }  //class SPC
  3979: 
  3980: 
  3981: