LabeledAddress.java
     1: //========================================================================================
     2: //  LabeledAddress.java
     3: //    en:Labeled address -- It assigns labels to addresses.
     4: //    ja:ラベル付きアドレス -- アドレスにラベルを割り当てます。
     5: //  Copyright (C) 2003-2021 Makoto Kamada
     6: //
     7: //  This file is part of the XEiJ (X68000 Emulator in Java).
     8: //  You can use, modify and redistribute the XEiJ if the conditions are met.
     9: //  Read the XEiJ License for more details.
    10: //  https://stdkmd.net/xeij/
    11: //========================================================================================
    12: 
    13: //----------------------------------------------------------------------------------------
    14: //    例外ベクタの名前
    15: //    割り込みベクタの名前
    16: //    IOCSコールベクタの名前
    17: //    DOSコールベクタの名前
    18: //    いくつかのIOCS処理ルーチンの名前
    19: //    Human68kのデバイスドライバの名前と先頭からのオフセット
    20: //    Human68kのプログラムの名前と先頭からのオフセット
    21: //----------------------------------------------------------------------------------------
    22: 
    23: package xeij;
    24: 
    25: import java.lang.*;  //Boolean,Character,Class,Comparable,Double,Exception,Float,IllegalArgumentException,Integer,Long,Math,Number,Object,Runnable,SecurityException,String,StringBuilder,System
    26: 
    27: public class LabeledAddress {
    28: 
    29:   public static final int[] LBL_VECTOR_SPECIAL = {  //いくつかのIOCS処理ルーチンの名前
    30:     0x0934,  //マウス受信データ処理アドレス(ソフトキーボード)
    31:     0x0938,  //マウス受信データ処理アドレス(マウスカーソル)
    32:     0x097e,  //拡張ESCシーケンス処理ルーチンのアドレス
    33:     0x09b6,  //マウスデータ受信処理アドレス
    34:     0x09be,  //カーソル点滅処理アドレス
    35:     0x09c6,  //FDモータ停止処理アドレス
    36:     0x09ce,  //1分処理アドレス
    37:     0x0d00,  //[13]_B_FORMATでドライブの種類が$4~$5,$A~$Fのとき呼ばれるルーチンのアドレス
    38:     0x0d12,  //[13]BEEP処理まるごと差し換えルーチンのアドレス([$0978.w].lが-1のとき有効)
    39:     0x0d16,  //[13]ESC [処理まるごと差し換えルーチンのアドレス(0=差し換えない)
    40:   };
    41:   public static final int LBL_VECTOR_LENGTH = 512 + 256 + LBL_VECTOR_SPECIAL.length;  //ベクタの数
    42: 
    43:   public static final int LBL_MAX_DEVICES = 100;  //デバイスドライバの数の上限
    44:   public static final int LBL_MAX_PROGRAMS = 100;  //プログラムの数の上限
    45: 
    46:   public static final String[] LBL_VECTOR_NAME = (  //ベクタの名前
    47:     //例外ベクタ
    48:     "ResetISP," +  //0x0000 0x0000 リセット初期割り込みスタックポインタ
    49:     "ResetPC," +  //0x0004 0x0001 リセット初期プログラムカウンタ
    50:     "BusErr," +  //0x0008 0x0002 バスエラー
    51:     "AddrErr," +  //0x000c 0x0003 アドレスエラー
    52:     "IllInst," +  //0x0010 0x0004 不当命令
    53:     "ZeroDiv," +  //0x0014 0x0005 ゼロ除算
    54:     "CHKInst," +  //0x0018 0x0006 CHK,CHK2命令
    55:     "TRAPVInst," +  //0x001c 0x0007 cpTRAPcc,TRAPcc,TRAPV命令
    56:     "PrivVio," +  //0x0020 0x0008 特権違反
    57:     "Trace," +  //0x0024 0x0009 トレース
    58:     "ALineEmu," +  //0x0028 0x000a ライン1010エミュレータ
    59:     "FLineEmu," +  //0x002c 0x000b ライン1111エミュレータ
    60:     "EmuInt," +  //0x0030 0x000c エミュレータ割り込み
    61:     "CPProtVio," +  //0x0034 0x000d コプロセッサプロトコル違反
    62:     "FormErr," +  //0x0038 0x000e フォーマットエラー
    63:     "UninInt," +  //0x003c 0x000f 未初期化割り込み
    64:     "," +  //0x0040 0x0010
    65:     "," +  //0x0044 0x0011
    66:     "," +  //0x0048 0x0012
    67:     "," +  //0x004c 0x0013
    68:     "," +  //0x0050 0x0014
    69:     "," +  //0x0054 0x0015
    70:     "," +  //0x0058 0x0016
    71:     "," +  //0x005c 0x0017
    72:     "SpurInt," +  //0x0060 0x0018 スプリアス割り込み
    73:     "Level1Int," +  //0x0064 0x0019 レベル1割り込みオートベクタ(IOI)
    74:     "Level2Int," +  //0x0068 0x001a レベル2割り込みオートベクタ(拡張I/Oスロット)
    75:     "Level3Int," +  //0x006c 0x001b レベル3割り込みオートベクタ(DMA)
    76:     "Level4Int," +  //0x0070 0x001c レベル4割り込みオートベクタ(拡張I/Oスロット)
    77:     "Level5Int," +  //0x0074 0x001d レベル5割り込みオートベクタ(SCC)
    78:     "Level6Int," +  //0x0078 0x001e レベル6割り込みオートベクタ(MFP)
    79:     "Level7Int," +  //0x007c 0x001f レベル7割り込みオートベクタ(NMI)
    80:     "TRAP0Inst," +  //0x0080 0x0020 TRAP#0命令ベクタ
    81:     "TRAP1Inst," +  //0x0084 0x0021 TRAP#1命令ベクタ(MPCM)
    82:     "TRAP2Inst," +  //0x0088 0x0022 TRAP#2命令ベクタ(PCM8)
    83:     "TRAP3Inst," +  //0x008c 0x0023 TRAP#3命令ベクタ(ZMUSIC)
    84:     "TRAP4Inst," +  //0x0090 0x0024 TRAP#4命令ベクタ(MXDRV)
    85:     "TRAP5Inst," +  //0x0094 0x0025 TRAP#5命令ベクタ(CDC)
    86:     "TRAP6Inst," +  //0x0098 0x0026 TRAP#6命令ベクタ
    87:     "TRAP7Inst," +  //0x009c 0x0027 TRAP#7命令ベクタ
    88:     "TRAP8Inst," +  //0x00a0 0x0028 TRAP#8命令ベクタ(ROMデバッガ)
    89:     "TRAP9Inst," +  //0x00a4 0x0029 TRAP#9命令ベクタ(デバッガ)
    90:     "TRAP10Inst," +  //0x00a8 0x002a TRAP#10命令ベクタ(POWER OFFまたはリセット)
    91:     "TRAP11Inst," +  //0x00ac 0x002b TRAP#11命令ベクタ(BREAK)
    92:     "TRAP12Inst," +  //0x00b0 0x002c TRAP#12命令ベクタ(COPY)
    93:     "TRAP13Inst," +  //0x00b4 0x002d TRAP#13命令ベクタ(^C)
    94:     "TRAP14Inst," +  //0x00b8 0x002e TRAP#14命令ベクタ(エラー表示)
    95:     "TRAP15Inst," +  //0x00bc 0x002f TRAP#15命令ベクタ(IOCSコール)
    96:     "FPBSUNCond," +  //0x00c0 0x0030 FP分岐または比較不能状態でのセット
    97:     "FPInexRes," +  //0x00c4 0x0031 FP不正確な結果
    98:     "FPZeroDiv," +  //0x00c8 0x0032 FPゼロによる除算
    99:     "FPUnder," +  //0x00cc 0x0033 FPアンダーフロー
   100:     "FPOperErr," +  //0x00d0 0x0034 FPオペランドエラー
   101:     "FPOver," +  //0x00d4 0x0035 FPオーバーフロー
   102:     "FPSNAN," +  //0x00d8 0x0036 FPシグナリングNAN
   103:     "FPUnimType," +  //0x00dc 0x0037 FP未実装データ型
   104:     "MMUConfErr," +  //0x00e0 0x0038 MMUコンフィギュレーションエラー
   105:     "PMMUIllOp," +  //0x00e4 0x0039 [851]MMU不当操作
   106:     "PMMUALVio," +  //0x00e8 0x003a [851]MMUアクセスレベル違反
   107:     "," +  //0x00ec 0x003b
   108:     "UnimEA," +  //0x00f0 0x003c [060]未実装実効アドレス
   109:     "UnimIntOp," +  //0x00f4 0x003d [060]未実装整数命令
   110:     "," +  //0x00f8 0x003e
   111:     "," +  //0x00fc 0x003f
   112:     "MFPAlarm," +  //0x0100 0x0040 MFP RTCアラーム/1Hz
   113:     "MFPExPOff," +  //0x0104 0x0041 MFP 外部POWER OFF
   114:     "MFPPOff," +  //0x0108 0x0042 MFP フロントスイッチOFF
   115:     "MFPOPM," +  //0x010c 0x0043 MFP FM音源
   116:     "MFPTimerD," +  //0x0110 0x0044 MFP Timer-D
   117:     "MFPTimerC," +  //0x0114 0x0045 MFP Timer-C
   118:     "MFPVDisp," +  //0x0118 0x0046 MFP V-DISP
   119:     "MFPRTC," +  //0x011c 0x0047 MFP RTCクロック
   120:     "MFPTimerB," +  //0x0120 0x0048 MFP Timer-B
   121:     "MFPKOutErr," +  //0x0124 0x0049 MFP キーボードシリアル出力エラー
   122:     "MFPKOutEmp," +  //0x0128 0x004a MFP キーボードシリアル出力空
   123:     "MFPKInErr," +  //0x012c 0x004b MFP キーボードシリアル入力エラー
   124:     "MFPKInFul," +  //0x0130 0x004c MFP キーボードシリアル入力あり
   125:     "MFPTimerA," +  //0x0134 0x004d MFP Timer-A
   126:     "MFPCRTCIRQ," +  //0x0138 0x004e MFP CRTC IRQ
   127:     "MFPHSync," +  //0x013c 0x004f MFP H-SYNC
   128:     "," +  //0x0140 0x0050 SCC B
   129:     "," +  //0x0144 0x0051 SCC B
   130:     "," +  //0x0148 0x0052 SCC B
   131:     "," +  //0x014c 0x0053 SCC B
   132:     "SCCMsIn," +  //0x0150 0x0054 SCC B マウス受信
   133:     "SCCMsIn," +  //0x0154 0x0055 SCC B マウス受信
   134:     "," +  //0x0158 0x0056 SCC B
   135:     "," +  //0x015c 0x0057 SCC B
   136:     "," +  //0x0160 0x0058 SCC A
   137:     "," +  //0x0164 0x0059 SCC A
   138:     "," +  //0x0168 0x005a SCC A
   139:     "," +  //0x016c 0x005b SCC A
   140:     "SCCRSIn," +  //0x0170 0x005c SCC A RS-232C受信
   141:     "SCCRSIn," +  //0x0174 0x005d SCC A RS-232C受信
   142:     "," +  //0x0178 0x005e SCC A
   143:     "," +  //0x017c 0x005f SCC A
   144:     "IOIFDC," +  //0x0180 0x0060 IOI FDC
   145:     "IOIFDD," +  //0x0184 0x0061 IOI FDD
   146:     "IOISASI," +  //0x0188 0x0062 IOI SASI
   147:     "IOIPRN," +  //0x018c 0x0063 IOI PRN
   148:     "DMA0End," +  //0x0190 0x0064 DMA 0 転送終了
   149:     "DMA0Err," +  //0x0194 0x0065 DMA 0 エラー
   150:     "DMA1End," +  //0x0198 0x0066 DMA 1 転送終了
   151:     "DMA1Err," +  //0x019c 0x0067 DMA 1 エラー
   152:     "DMA2End," +  //0x01a0 0x0068 DMA 2 転送終了
   153:     "DMA2Err," +  //0x01a4 0x0069 DMA 2 エラー
   154:     "DMA3End," +  //0x01a8 0x006a DMA 3 転送終了
   155:     "DMA3Err," +  //0x01ac 0x006b DMA 3 エラー
   156:     "SCSI," +  //0x01b0 0x006c SCSI
   157:     "," +  //0x01b4 0x006d
   158:     "," +  //0x01b8 0x006e
   159:     "," +  //0x01bc 0x006f
   160:     "," +  //0x01c0 0x0070
   161:     "," +  //0x01c4 0x0071
   162:     "," +  //0x01c8 0x0072
   163:     "," +  //0x01cc 0x0073
   164:     "," +  //0x01d0 0x0074
   165:     "," +  //0x01d4 0x0075
   166:     "," +  //0x01d8 0x0076
   167:     "," +  //0x01dc 0x0077
   168:     "," +  //0x01e0 0x0078
   169:     "," +  //0x01e4 0x0079
   170:     "," +  //0x01e8 0x007a
   171:     "," +  //0x01ec 0x007b
   172:     "," +  //0x01f0 0x007c
   173:     "," +  //0x01f4 0x007d
   174:     "," +  //0x01f8 0x007e
   175:     "," +  //0x01fc 0x007f
   176:     "," +  //0x0200 0x0080
   177:     "," +  //0x0204 0x0081
   178:     "," +  //0x0208 0x0082
   179:     "," +  //0x020c 0x0083
   180:     "," +  //0x0210 0x0084
   181:     "," +  //0x0214 0x0085
   182:     "," +  //0x0218 0x0086
   183:     "," +  //0x021c 0x0087
   184:     "," +  //0x0220 0x0088
   185:     "," +  //0x0224 0x0089
   186:     "," +  //0x0228 0x008a
   187:     "," +  //0x022c 0x008b
   188:     "," +  //0x0230 0x008c
   189:     "," +  //0x0234 0x008d
   190:     "," +  //0x0238 0x008e
   191:     "," +  //0x023c 0x008f
   192:     "," +  //0x0240 0x0090
   193:     "," +  //0x0244 0x0091
   194:     "," +  //0x0248 0x0092
   195:     "," +  //0x024c 0x0093
   196:     "," +  //0x0250 0x0094
   197:     "," +  //0x0254 0x0095
   198:     "," +  //0x0258 0x0096
   199:     "," +  //0x025c 0x0097
   200:     "," +  //0x0260 0x0098
   201:     "," +  //0x0264 0x0099
   202:     "," +  //0x0268 0x009a
   203:     "," +  //0x026c 0x009b
   204:     "," +  //0x0270 0x009c
   205:     "," +  //0x0274 0x009d
   206:     "," +  //0x0278 0x009e
   207:     "," +  //0x027c 0x009f
   208:     "," +  //0x0280 0x00a0
   209:     "," +  //0x0284 0x00a1
   210:     "," +  //0x0288 0x00a2
   211:     "," +  //0x028c 0x00a3
   212:     "," +  //0x0290 0x00a4
   213:     "," +  //0x0294 0x00a5
   214:     "," +  //0x0298 0x00a6
   215:     "," +  //0x029c 0x00a7
   216:     "," +  //0x02a0 0x00a8
   217:     "," +  //0x02a4 0x00a9
   218:     "," +  //0x02a8 0x00aa
   219:     "," +  //0x02ac 0x00ab
   220:     "," +  //0x02b0 0x00ac
   221:     "," +  //0x02b4 0x00ad
   222:     "," +  //0x02b8 0x00ae
   223:     "," +  //0x02bc 0x00af
   224:     "," +  //0x02c0 0x00b0
   225:     "," +  //0x02c4 0x00b1
   226:     "," +  //0x02c8 0x00b2
   227:     "," +  //0x02cc 0x00b3
   228:     "," +  //0x02d0 0x00b4
   229:     "," +  //0x02d4 0x00b5
   230:     "," +  //0x02d8 0x00b6
   231:     "," +  //0x02dc 0x00b7
   232:     "," +  //0x02e0 0x00b8
   233:     "," +  //0x02e4 0x00b9
   234:     "," +  //0x02e8 0x00ba
   235:     "," +  //0x02ec 0x00bb
   236:     "," +  //0x02f0 0x00bc
   237:     "," +  //0x02f4 0x00bd
   238:     "," +  //0x02f8 0x00be
   239:     "," +  //0x02fc 0x00bf
   240:     "," +  //0x0300 0x00c0
   241:     "," +  //0x0304 0x00c1
   242:     "," +  //0x0308 0x00c2
   243:     "," +  //0x030c 0x00c3
   244:     "," +  //0x0310 0x00c4
   245:     "," +  //0x0314 0x00c5
   246:     "," +  //0x0318 0x00c6
   247:     "," +  //0x031c 0x00c7
   248:     "," +  //0x0320 0x00c8
   249:     "," +  //0x0324 0x00c9
   250:     "," +  //0x0328 0x00ca
   251:     "," +  //0x032c 0x00cb
   252:     "," +  //0x0330 0x00cc
   253:     "," +  //0x0334 0x00cd
   254:     "," +  //0x0338 0x00ce
   255:     "," +  //0x033c 0x00cf
   256:     "," +  //0x0340 0x00d0
   257:     "," +  //0x0344 0x00d1
   258:     "," +  //0x0348 0x00d2
   259:     "," +  //0x034c 0x00d3
   260:     "," +  //0x0350 0x00d4
   261:     "," +  //0x0354 0x00d5
   262:     "," +  //0x0358 0x00d6
   263:     "," +  //0x035c 0x00d7
   264:     "," +  //0x0360 0x00d8
   265:     "," +  //0x0364 0x00d9
   266:     "," +  //0x0368 0x00da
   267:     "," +  //0x036c 0x00db
   268:     "," +  //0x0370 0x00dc
   269:     "," +  //0x0374 0x00dd
   270:     "," +  //0x0378 0x00de
   271:     "," +  //0x037c 0x00df
   272:     "," +  //0x0380 0x00e0
   273:     "," +  //0x0384 0x00e1
   274:     "," +  //0x0388 0x00e2
   275:     "," +  //0x038c 0x00e3
   276:     "," +  //0x0390 0x00e4
   277:     "," +  //0x0394 0x00e5
   278:     "," +  //0x0398 0x00e6
   279:     "," +  //0x039c 0x00e7
   280:     "," +  //0x03a0 0x00e8
   281:     "," +  //0x03a4 0x00e9
   282:     "," +  //0x03a8 0x00ea
   283:     "," +  //0x03ac 0x00eb
   284:     "," +  //0x03b0 0x00ec
   285:     "," +  //0x03b4 0x00ed
   286:     "," +  //0x03b8 0x00ee
   287:     "," +  //0x03bc 0x00ef
   288:     "," +  //0x03c0 0x00f0
   289:     "," +  //0x03c4 0x00f1
   290:     "," +  //0x03c8 0x00f2
   291:     "," +  //0x03cc 0x00f3
   292:     "," +  //0x03d0 0x00f4
   293:     "," +  //0x03d4 0x00f5
   294:     "," +  //0x03d8 0x00f6
   295:     "," +  //0x03dc 0x00f7
   296:     "," +  //0x03e0 0x00f8
   297:     "," +  //0x03e4 0x00f9
   298:     "," +  //0x03e8 0x00fa
   299:     "," +  //0x03ec 0x00fb
   300:     "," +  //0x03f0 0x00fc
   301:     "," +  //0x03f4 0x00fd
   302:     "," +  //0x03f8 0x00fe
   303:     "," +  //0x03fc 0x00ff
   304:     //IOCSコール
   305:     "IOCS_B_KEYINP," +    //0x0400 0x0100 キー入力(入力があるまで待つ,入力したデータはバッファから取り除く)
   306:     "IOCS_B_KEYSNS," +    //0x0404 0x0101 キーセンス(入力がなくても待たない,入力したデータをバッファから取り除かない)
   307:     "IOCS_B_SFTSNS," +    //0x0408 0x0102 シフトキーとLEDの状態の取得
   308:     "IOCS_KEY_INIT," +    //0x040c 0x0103 キーボードインタフェイスの初期化
   309:     "IOCS_BITSNS," +      //0x0410 0x0104 キーの押し下げ状態の取得
   310:     "IOCS_SKEYSET," +     //0x0414 0x0105 キー入力エミュレーション
   311:     "IOCS_LEDCTRL," +     //0x0418 0x0106 キーボードのLEDの状態をまとめて設定
   312:     "IOCS_LEDSET," +      //0x041c 0x0107 キーのLEDを再設定する
   313:     "IOCS_KEYDLY," +      //0x0420 0x0108 キーリピートのディレイタイム設定
   314:     "IOCS_KEYREP," +      //0x0424 0x0109 キーリピートのインターバル設定
   315:     "IOCS_OPT2TVON," +    //0x0428 0x010a OPT.2キーによるテレビコントロールを許可
   316:     "IOCS_OPT2TVOFF," +   //0x042c 0x010b OPT.2キーによるテレビコントロールを禁止
   317:     "IOCS_TVCTRL," +      //0x0430 0x010c テレビコントロール
   318:     "IOCS_LEDMOD," +      //0x0434 0x010d キーのLEDを設定
   319:     "IOCS_TGUSEMD," +     //0x0438 0x010e 画面の使用状態の取得と設定
   320:     "IOCS_DEFCHR," +      //0x043c 0x010f フォントパターン設定
   321:     "IOCS_CRTMOD," +      //0x0440 0x0110 画面モードの取得と設定
   322:     "IOCS_CONTRAST," +    //0x0444 0x0111 コントラストの取得と設定
   323:     "IOCS_HSVTORGB," +    //0x0448 0x0112 HSVからRGBを求める
   324:     "IOCS_TPALET," +      //0x044c 0x0113 テキストパレットの取得と設定
   325:     "IOCS_TPALET2," +     //0x0450 0x0114 テキストパレットの取得と設定(全色独立)
   326:     "IOCS_TCOLOR," +      //0x0454 0x0115 テキスト表示プレーンの設定
   327:     "IOCS_FNTADR," +      //0x0458 0x0116 フォントアドレスの取得
   328:     "IOCS_VRAMGET," +     //0x045c 0x0117 VRAMからバッファへバイト単位で転送
   329:     "IOCS_VRAMPUT," +     //0x0460 0x0118 バッファからVRAMへバイト単位で転送
   330:     "IOCS_FNTGET," +      //0x0464 0x0119 フォントパターンの取得
   331:     "IOCS_TEXTGET," +     //0x0468 0x011a テキストVRAMからバッファへドット単位で転送
   332:     "IOCS_TEXTPUT," +     //0x046c 0x011b バッファからテキストVRAMへドット単位で転送
   333:     "IOCS_CLIPPUT," +     //0x0470 0x011c バッファからテキストVRAMへドット単位で転送(クリッピングあり)
   334:     "IOCS_SCROLL," +      //0x0474 0x011d テキスト/グラフィックスのスクロール位置の取得と設定
   335:     "IOCS_B_CURON," +     //0x0478 0x011e テキストカーソルON
   336:     "IOCS_B_CUROFF," +    //0x047c 0x011f テキストカーソルOFF
   337:     "IOCS_B_PUTC," +      //0x0480 0x0120 テキスト1文字表示
   338:     "IOCS_B_PRINT," +     //0x0484 0x0121 テキスト文字列表示
   339:     "IOCS_B_COLOR," +     //0x0488 0x0122 テキストカラーコード設定
   340:     "IOCS_B_LOCATE," +    //0x048c 0x0123 テキストカーソル位置設定
   341:     "IOCS_B_DOWN_S," +    //0x0490 0x0124 テキストカーソルを下へ1行移動(移動できないときスクロールする)
   342:     "IOCS_B_UP_S," +      //0x0494 0x0125 テキストカーソルを上へ1行移動(移動できないときスクロールする)
   343:     "IOCS_B_UP," +        //0x0498 0x0126 テキストカーソルを上へn行移動(移動できないときはエラー)
   344:     "IOCS_B_DOWN," +      //0x049c 0x0127 テキストカーソルを下へn行移動(移動できないときは最下行で止まる)
   345:     "IOCS_B_RIGHT," +     //0x04a0 0x0128 テキストカーソルをn桁右へ移動(移動できないときは右端で止まる)
   346:     "IOCS_B_LEFT," +      //0x04a4 0x0129 テキストカーソルをn桁左へ移動(移動できないときは左端で止まる)
   347:     "IOCS_B_CLR_ST," +    //0x04a8 0x012a テキスト画面クリア(クリアする範囲を選択)
   348:     "IOCS_B_ERA_ST," +    //0x04ac 0x012b テキスト行クリア(クリアする範囲を選択)
   349:     "IOCS_B_INS," +       //0x04b0 0x012c テキストカーソル行から下にn行空行を挿入
   350:     "IOCS_B_DEL," +       //0x04b4 0x012d テキストカーソル行からn行削除
   351:     "IOCS_B_CONSOL," +    //0x04b8 0x012e テキスト表示範囲を設定
   352:     "IOCS_B_PUTMES," +    //0x04bc 0x012f テキスト画面の指定位置に文字列表示
   353:     "IOCS_SET232C," +     //0x04c0 0x0130 RS-232C通信モードと通信速度の取得と設定
   354:     "IOCS_LOF232C," +     //0x04c4 0x0131 RS-232C受信バッファ内のデータ数の取得
   355:     "IOCS_INP232C," +     //0x04c8 0x0132 RS-232C受信(受信があるまで待つ,受信バッファから取り除く)
   356:     "IOCS_ISNS232C," +    //0x04cc 0x0133 RS-232C受信センス(受信がなくても待たない,受信バッファから取り除かない)
   357:     "IOCS_OSNS232C," +    //0x04d0 0x0134 RS-232C送信ステータスチェック
   358:     "IOCS_OUT232C," +     //0x04d4 0x0135 RS-232C送信(送信可能になるまで待つ)
   359:     "IOCS_MS_VCS," +      //0x04d8 0x0136 マウス受信データ処理の設定
   360:     "IOCS_EXESC," +       //0x04dc 0x0137 拡張ESCシーケンス処理ルーチンの設定
   361:     "IOCS_CharacterCode.CHR_ADR," +     //0x04e0 0x0138 外字フォントアドレスの設定
   362:     "IOCS_SETBEEP," +     //0x04e4 0x0139 BEEP処理の設定
   363:     "IOCS_SETPRN," +      //0x04e8 0x013a プリンタ環境の設定
   364:     "IOCS_JOYGET," +      //0x04ec 0x013b ジョイスティックの状態の取得
   365:     "IOCS_INIT_PRN," +    //0x04f0 0x013c プリンタ初期化
   366:     "IOCS_SNSPRN," +      //0x04f4 0x013d プリンタ出力センス
   367:     "IOCS_OUTLPT," +      //0x04f8 0x013e プリンタ出力(LPT)
   368:     "IOCS_OUTPRN," +      //0x04fc 0x013f プリンタ出力(PRN)
   369:     "IOCS_B_SEEK," +      //0x0500 0x0140 シーク
   370:     "IOCS_B_VERIFY," +    //0x0504 0x0141 ベリファイ
   371:     "IOCS_B_READDI," +    //0x0508 0x0142 診断のための読み出し
   372:     "IOCS_B_DSKINI," +    //0x050c 0x0143 FDインタフェイスの初期化
   373:     "IOCS_B_DRVSNS," +    //0x0510 0x0144 ディスクのステータスを取得
   374:     "IOCS_B_WRITE," +     //0x0514 0x0145 ディスクに書き出し
   375:     "IOCS_B_READ," +      //0x0518 0x0146 ディスクから読み込み
   376:     "IOCS_B_RECALI," +    //0x051c 0x0147 トラック0へのシーク
   377:     "IOCS_B_ASSIGN," +    //0x0520 0x0148 代替トラックの設定
   378:     "IOCS_B_WRITED," +    //0x0524 0x0149 破損データの書き込み
   379:     "IOCS_B_READID," +    //0x0528 0x014a ID情報を読む
   380:     "IOCS_B_BADFMT," +    //0x052c 0x014b バッドトラックを使用不能にする
   381:     "IOCS_B_READDL," +    //0x0530 0x014c 破損データの読み込み
   382:     "IOCS_B_FORMAT," +    //0x0534 0x014d 物理フォーマット
   383:     "IOCS_B_DRVCHK," +    //0x0538 0x014e ドライブの状態の取得と設定
   384:     "IOCS_B_EJECT," +     //0x053c 0x014f イジェクト(未使用シリンダへのシーク)
   385:     "IOCS_DATEBCD," +     //0x0540 0x0150 日付を時計にセットできる形式に変換する
   386:     "IOCS_DATESET," +     //0x0544 0x0151 時計に日付を設定する
   387:     "IOCS_TIMEBCD," +     //0x0548 0x0152 時刻を時計にセットできる形式に変換する
   388:     "IOCS_TIMESET," +     //0x054c 0x0153 時計に時刻を設定する
   389:     "IOCS_DATEGET," +     //0x0550 0x0154 時計から日付を読み出す
   390:     "IOCS_DATEBIN," +     //0x0554 0x0155 日付をBCDからバイナリに変換する
   391:     "IOCS_TIMEGET," +     //0x0558 0x0156 時計から時刻を読み出す
   392:     "IOCS_TIMEBIN," +     //0x055c 0x0157 時刻をBCDからバイナリに変換する
   393:     "IOCS_DATECNV," +     //0x0560 0x0158 日付を表す文字列をバイナリに変換する
   394:     "IOCS_TIMECNV," +     //0x0564 0x0159 時刻を表す文字列をバイナリに変換する
   395:     "IOCS_DATEASC," +     //0x0568 0x015a 日付をバイナリから文字列に変換する
   396:     "IOCS_TIMEASC," +     //0x056c 0x015b 時刻をバイナリから文字列に変換する
   397:     "IOCS_DAYASC," +      //0x0570 0x015c 曜日をバイナリから文字列に変換する
   398:     "IOCS_ALARMMOD," +    //0x0574 0x015d アラームの禁止/許可
   399:     "IOCS_ALARMSET," +    //0x0578 0x015e アラーム起動の時間と処理内容の設定
   400:     "IOCS_ALARMGET," +    //0x057c 0x015f アラーム起動の時間と処理内容の取得
   401:     "IOCS_ADPCMOUT," +    //0x0580 0x0160 ADPCM再生
   402:     "IOCS_ADPCMINP," +    //0x0584 0x0161 ADPCM録音
   403:     "IOCS_ADPCMAOT," +    //0x0588 0x0162 アレイチェーンによるADPCM再生
   404:     "IOCS_ADPCMAIN," +    //0x058c 0x0163 アレイチェーンによるADPCM録音
   405:     "IOCS_ADPCMLOT," +    //0x0590 0x0164 リンクアレイチェーンによるADPCM再生
   406:     "IOCS_ADPCMLIN," +    //0x0594 0x0165 リンクアレイチェーンによるADPCM録音
   407:     "IOCS_ADPCMSNS," +    //0x0598 0x0166 ADPCMの実行モードセンス
   408:     "IOCS_ADPCMMOD," +    //0x059c 0x0167 ADPCMの実行制御
   409:     "IOCS_OPMSET," +      //0x05a0 0x0168 FM音源レジスタの設定
   410:     "IOCS_OPMSNS," +      //0x05a4 0x0169 FM音源のステータス取得
   411:     "IOCS_OPMINTST," +    //0x05a8 0x016a FM音源割り込み処理ルーチンの設定
   412:     "IOCS_TIMERDST," +    //0x05ac 0x016b Timer-D割り込み処理ルーチンの設定
   413:     "IOCS_VDISPST," +     //0x05b0 0x016c Timer-A(垂直同期カウント)割り込み処理ルーチンの設定
   414:     "IOCS_CRTCRAS," +     //0x05b4 0x016d CRTCラスタ割り込み処理ルーチンの設定
   415:     "IOCS_HSYNCST," +     //0x05b8 0x016e 水平同期割り込み処理ルーチンの設定
   416:     "IOCS_PRNINTST," +    //0x05bc 0x016f プリンタのレディー割り込み処理ルーチンの設定
   417:     "IOCS_MS_INIT," +     //0x05c0 0x0170 マウス処理を初期化する
   418:     "IOCS_MS_CURON," +    //0x05c4 0x0171 マウスカーソルを表示する
   419:     "IOCS_MS_CUROF," +    //0x05c8 0x0172 マウスカーソルを消去する
   420:     "IOCS_MS_STAT," +     //0x05cc 0x0173 マウスカーソルの表示状態を取得する
   421:     "IOCS_MS_GETDT," +    //0x05d0 0x0174 マウスの状態を取得する
   422:     "IOCS_MS_CURGT," +    //0x05d4 0x0175 マウスカーソルの座標を取得する
   423:     "IOCS_MS_CURST," +    //0x05d8 0x0176 マウスカーソルの座標を設定する
   424:     "IOCS_MS_LIMIT," +    //0x05dc 0x0177 マウスカーソルの移動範囲を設定する
   425:     "IOCS_MS_OFFTM," +    //0x05e0 0x0178 マウスのボタンが離されるまでの時間を計る
   426:     "IOCS_MS_ONTM," +     //0x05e4 0x0179 マウスのボタンが押されるまでの時間を計る
   427:     "IOCS_MS_PATST," +    //0x05e8 0x017a マウスカーソルパターンを定義する
   428:     "IOCS_MS_SEL," +      //0x05ec 0x017b マウスカーソルを選ぶ
   429:     "IOCS_MS_SEL2," +     //0x05f0 0x017c マウスカーソルアニメーションの設定
   430:     "IOCS_SKEY_MOD," +    //0x05f4 0x017d ソフトキーボードの表示モードの取得と設定
   431:     "IOCS_DENSNS," +      //0x05f8 0x017e 電卓センス
   432:     "IOCS_ONTIME," +      //0x05fc 0x017f 起動後の経過時間(1/100秒単位)を求める
   433:     "IOCS_B_INTVCS," +    //0x0600 0x0180 例外処理またはIOCSコールベクタ設定
   434:     "IOCS_B_SUPER," +     //0x0604 0x0181 スーパーバイザモード切り替え
   435:     "IOCS_B_BPEEK," +     //0x0608 0x0182 メモリ読み出し(1バイト)
   436:     "IOCS_B_WPEEK," +     //0x060c 0x0183 メモリ読み出し(1ワード)
   437:     "IOCS_B_LPEEK," +     //0x0610 0x0184 メモリ読み出し(1ロングワード)
   438:     "IOCS_B_MEMSTR," +    //0x0614 0x0185 メモリ間転送(a1からa2へ)
   439:     "IOCS_B_BPOKE," +     //0x0618 0x0186 メモリ書き込み(1バイト)
   440:     "IOCS_B_WPOKE," +     //0x061c 0x0187 メモリ書き込み(1ワード)
   441:     "IOCS_B_LPOKE," +     //0x0620 0x0188 メモリ書き込み(1ロングワード)
   442:     "IOCS_B_MEMSET," +    //0x0624 0x0189 メモリ間転送(a2からa1へ)
   443:     "IOCS_DMAMOVE," +     //0x0628 0x018a DMA転送
   444:     "IOCS_DMAMOV_A," +    //0x062c 0x018b アレイチェーンによるDMA転送
   445:     "IOCS_DMAMOV_L," +    //0x0630 0x018c リンクアレイチェーンによるDMA転送
   446:     "IOCS_DMAMODE," +     //0x0634 0x018d DMA転送中モードの取得
   447:     "IOCS_BOOTINF," +     //0x0638 0x018e 起動情報の取得
   448:     "IOCS_ROMVER," +      //0x063c 0x018f ROMバージョンの取得
   449:     "IOCS_G_CLR_ON," +    //0x0640 0x0190 グラフィックス画面の消去とパレット初期化と表示ON
   450:     "IOCS_G_MOD," +       //0x0644 0x0191 グラフィックス画面モードの設定
   451:     "IOCS_PRIORITY," +    //0x0648 0x0192 画面間およびグラフィックスページ間のプライオリティの設定
   452:     "IOCS_CRTMOD2," +     //0x064c 0x0193 画面表示のON/OFFと特殊モードの設定
   453:     "IOCS_GPALET," +      //0x0650 0x0194 グラフィックパレットの取得と設定
   454:     "IOCS_PENCOLOR," +    //0x0654 0x0195 ペンカラーの設定
   455:     "IOCS_SET_PAGE," +    //0x0658 0x0196 グラフィック描画ページの設定
   456:     "IOCS_GGET," +        //0x065c 0x0197 グラフィックス画面からパターン読み出し
   457:     "IOCS_MASK_GPUT," +   //0x0660 0x0198 グラフィックス画面にパターン書き込み(スルーカラー指定)
   458:     "IOCS_GPUT," +        //0x0664 0x0199 グラフィックス画面にパターン書き込み
   459:     "IOCS_GPTRN," +       //0x0668 0x019a グラフィックス画面にビットパターン書き込み
   460:     "IOCS_BK_GPTRN," +    //0x066c 0x019b グラフィックス画面にビットパターン書き込み(バックカラー指定)
   461:     "IOCS_X_GPTRN," +     //0x0670 0x019c グラフィックス画面にビットパターン書き込み(拡大指定)
   462:     "," +             //0x0674 0x019d
   463:     "," +             //0x0678 0x019e
   464:     "," +             //0x067c 0x019f
   465:     "IOCS_SFTJIS," +      //0x0680 0x01a0 SJIS→JIS変換
   466:     "IOCS_JISSFT," +      //0x0684 0x01a1 JIS→SJIS変換
   467:     "IOCS_AKCONV," +      //0x0688 0x01a2 半角(ANK)→全角(SJIS)変換
   468:     "IOCS_RMACNV," +      //0x068c 0x01a3 ローマ字かな変換
   469:     "IOCS_DAKJOB," +      //0x0690 0x01a4 濁点処理(直前の文字に゛を付ける)
   470:     "IOCS_HANJOB," +      //0x0694 0x01a5 半濁点処理(直前の文字に゜を付ける)
   471:     "," +             //0x0698 0x01a6
   472:     "," +             //0x069c 0x01a7
   473:     "," +             //0x06a0 0x01a8
   474:     "," +             //0x06a4 0x01a9
   475:     "," +             //0x06a8 0x01aa
   476:     "," +             //0x06ac 0x01ab
   477:     "IOCS_SYS_STAT," +    //0x06b0 0x01ac システム環境の取得と設定
   478:     "IOCS_B_CONMOD," +    //0x06b4 0x01ad テキスト画面のカーソルとスクロールの設定
   479:     "IOCS_OS_CURON," +    //0x06b8 0x01ae カーソル表示
   480:     "IOCS_OS_CUROF," +    //0x06bc 0x01af カーソル非表示(_B_CURONによる表示も禁止)
   481:     "IOCS_DRAWMODE," +    //0x06c0 0x01b0 グラフィックス画面の描画モードの取得と設定
   482:     "IOCS_APAGE," +       //0x06c4 0x01b1 グラフィックス画面の描画ページの取得と設定
   483:     "IOCS_VPAGE," +       //0x06c8 0x01b2 グラフィックス画面の表示ページの設定
   484:     "IOCS_HOME," +        //0x06cc 0x01b3 グラフィックス画面のスクロール位置の設定
   485:     "IOCS_WINDOW," +      //0x06d0 0x01b4 グラフィックス画面のクリッピングエリアを設定する
   486:     "IOCS_WIPE," +        //0x06d4 0x01b5 グラフィックス画面をパレットコード0で塗り潰す
   487:     "IOCS_PSET," +        //0x06d8 0x01b6 グラフィックス画面に点を描く
   488:     "IOCS_POINT," +       //0x06dc 0x01b7 グラフィックス画面の1点のパレットコードを得る
   489:     "IOCS_LINE," +        //0x06e0 0x01b8 グラフィックス画面に線分を描く
   490:     "IOCS_BOX," +         //0x06e4 0x01b9 グラフィックス画面に矩形を描く
   491:     "IOCS_FILL," +        //0x06e8 0x01ba グラフィックス画面の矩形塗り潰し
   492:     "IOCS_CIRCLE," +      //0x06ec 0x01bb グラフィックス画面に円または楕円を描く
   493:     "IOCS_PAINT," +       //0x06f0 0x01bc グラフィックス画面の閉領域の塗り潰し
   494:     "IOCS_SYMBOL," +      //0x06f4 0x01bd グラフィックス画面に文字列表示
   495:     "IOCS_GETGRM," +      //0x06f8 0x01be グラフィックス画面の読み出し
   496:     "IOCS_PUTGRM," +      //0x06fc 0x01bf グラフィックス画面の書き込み
   497:     "IOCS_SP_INIT," +     //0x0700 0x01c0 スプライトとBGの初期化
   498:     "IOCS_SP_ON," +       //0x0704 0x01c1 スプライト表示ON
   499:     "IOCS_SP_OFF," +      //0x0708 0x01c2 スプライト表示OFF
   500:     "IOCS_SP_CGCLR," +    //0x070c 0x01c3 スプライトパターンのクリア(16×16)
   501:     "IOCS_SP_DEFCG," +    //0x0710 0x01c4 スプライトパターンの設定
   502:     "IOCS_SP_GTPCG," +    //0x0714 0x01c5 スプライトパターンの取得
   503:     "IOCS_SP_REGST," +    //0x0718 0x01c6 スプライトレジスタの設定
   504:     "IOCS_SP_REGGT," +    //0x071c 0x01c7 スプライトレジスタの取得
   505:     "IOCS_BGSCRLST," +    //0x0720 0x01c8 BGスクロールレジスタの設定
   506:     "IOCS_BGSCRLGT," +    //0x0724 0x01c9 BGスクロールレジスタの取得
   507:     "IOCS_BGCTRLST," +    //0x0728 0x01ca BGコントロールレジスタの設定
   508:     "IOCS_BGCTRLGT," +    //0x072c 0x01cb BGコントロールレジスタの取得
   509:     "IOCS_BGTEXTCL," +    //0x0730 0x01cc BGテキストのクリア
   510:     "IOCS_BGTEXTST," +    //0x0734 0x01cd BGテキストの設定
   511:     "IOCS_BGTEXTGT," +    //0x0738 0x01ce BGテキストの取得
   512:     "IOCS_SPALET," +      //0x073c 0x01cf スプライトパレットの取得と設定
   513:     "," +             //0x0740 0x01d0
   514:     "," +             //0x0744 0x01d1
   515:     "," +             //0x0748 0x01d2
   516:     "IOCS_TXXLINE," +     //0x074c 0x01d3 テキスト画面に水平線を描画
   517:     "IOCS_TXYLINE," +     //0x0750 0x01d4 テキスト画面に垂直線を描画
   518:     "IOCS_TXLINE," +      //0x0754 0x01d5 テキスト画面に直線を描画
   519:     "IOCS_TXBOX," +       //0x0758 0x01d6 テキスト画面に矩形の枠を描画
   520:     "IOCS_TXFILL," +      //0x075c 0x01d7 テキスト画面に矩形を描画
   521:     "IOCS_TXREV," +       //0x0760 0x01d8 テキスト画面の矩形を反転
   522:     "," +             //0x0764 0x01d9
   523:     "," +             //0x0768 0x01da
   524:     "," +             //0x076c 0x01db
   525:     "," +             //0x0770 0x01dc
   526:     "," +             //0x0774 0x01dd
   527:     "," +             //0x0778 0x01de
   528:     "IOCS_TXRASCPY," +    //0x077c 0x01df テキストラスタブロックコピー
   529:     "," +             //0x0780 0x01e0
   530:     "," +             //0x0784 0x01e1
   531:     "," +             //0x0788 0x01e2
   532:     "," +             //0x078c 0x01e3
   533:     "," +             //0x0790 0x01e4
   534:     "," +             //0x0794 0x01e5
   535:     "," +             //0x0798 0x01e6
   536:     "," +             //0x079c 0x01e7
   537:     "," +             //0x07a0 0x01e8
   538:     "," +             //0x07a4 0x01e9
   539:     "," +             //0x07a8 0x01ea
   540:     "," +             //0x07ac 0x01eb
   541:     "," +             //0x07b0 0x01ec
   542:     "," +             //0x07b4 0x01ed
   543:     "," +             //0x07b8 0x01ee
   544:     "," +             //0x07bc 0x01ef
   545:     "IOCS_OPMDRV," +      //0x07c0 0x01f0
   546:     "IOCS_RSDRV," +       //0x07c4 0x01f1
   547:     "IOCS_A_JOY," +       //0x07c8 0x01f2
   548:     "IOCS_MIDI," +        //0x07cc 0x01f3
   549:     "," +             //0x07d0 0x01f4
   550:     "IOCS_SCSIDRV," +     //0x07d4 0x01f5
   551:     "," +             //0x07d8 0x01f6
   552:     "," +             //0x07dc 0x01f7
   553:     "IOCS_HIMEM," +       //0x07e0 0x01f8
   554:     "," +             //0x07e4 0x01f9
   555:     "," +             //0x07e8 0x01fa
   556:     "," +             //0x07ec 0x01fb
   557:     "," +             //0x07f0 0x01fc
   558:     "IOCS_ABORTRST," +    //0x07f4 0x01fd
   559:     "IOCS_IPLERR," +      //0x07f8 0x01fe
   560:     "IOCS_ABORTJOB," +    //0x07fc 0x01ff
   561:     //DOSコール
   562:     "DOS_EXIT," +        //0x1800 0xff00 プロセスの終了(終了コード指定なし)
   563:     "DOS_GETCHAR," +     //0x1804 0xff01 標準入力から1バイト入力(標準出力にエコーバックする)
   564:     "DOS_PUTCHAR," +     //0x1808 0xff02 標準出力に1バイト出力
   565:     "DOS_COMINP," +      //0x180c 0xff03 標準シリアル入出力から1バイト入力
   566:     "DOS_COMOUT," +      //0x1810 0xff04 標準シリアル入出力に1バイト出力
   567:     "DOS_PRNOUT," +      //0x1814 0xff05 標準プリンタ出力に1バイト出力
   568:     "DOS_INPOUT," +      //0x1818 0xff06 標準ハンドラへの入出力
   569:     "DOS_INKEY," +       //0x181c 0xff07 標準入力から1バイト入力(^C,^P,^Nを処理しない)
   570:     "DOS_GETC," +        //0x1820 0xff08 標準入力から1バイト入力(^C,^P,^Nを処理する)
   571:     "DOS_PRINT," +       //0x1824 0xff09 標準出力に文字列を出力
   572:     "DOS_GETS," +        //0x1828 0xff0a 標準入力から文字列を入力(^C,^P,^Nを処理する)
   573:     "DOS_KEYSNS," +      //0x182c 0xff0b 標準入力から1バイト先読み
   574:     "DOS_KFLUSH," +      //0x1830 0xff0c 標準入力バッファをフラッシュしてから標準入力から入力
   575:     "DOS_FFLUSH," +      //0x1834 0xff0d バッファフラッシュ
   576:     "DOS_CHGDRV," +      //0x1838 0xff0e カレントドライブの変更
   577:     "DOS_DRVCTRL," +     //0x183c 0xff0f ドライブコントロール
   578:     "DOS_CONSNS," +      //0x1840 0xff10 標準出力への出力の可・不可を調べる
   579:     "DOS_PRNSNS," +      //0x1844 0xff11 標準プリンタ出力への出力の可・不可を調べる
   580:     "DOS_CINSNS," +      //0x1848 0xff12 標準シリアル入出力からの入力の可・不可を調べる
   581:     "DOS_COUTSNS," +     //0x184c 0xff13 標準シリアル入出力への出力の可・不可を調べる
   582:     "," +             //0x1850 0xff14
   583:     "," +             //0x1854 0xff15
   584:     "," +             //0x1858 0xff16
   585:     "DOS_FATCHK," +      //0x185c 0xff17 ファイルやディレクトリのFATの繋がりを調べる
   586:     "DOS_HENDSP," +      //0x1860 0xff18 かな漢字変換ウインドウの表示
   587:     "DOS_CURDRV," +      //0x1864 0xff19 カレントドライブ番号を得る
   588:     "DOS_GETSS," +       //0x1868 0xff1a 標準入力から文字列を入力(^C,^P,^Nを処理しない)
   589:     "DOS_FGETC," +       //0x186c 0xff1b ハンドラから1バイト入力
   590:     "DOS_FGETS," +       //0x1870 0xff1c ハンドラから文字列を入力
   591:     "DOS_FPUTC," +       //0x1874 0xff1d ハンドラへ1バイト出力
   592:     "DOS_FPUTS," +       //0x1878 0xff1e ハンドラへ文字列を出力
   593:     "DOS_ALLCLOSE," +    //0x187c 0xff1f 実行中のプロセスとその子プロセスがオープンしたハンドラをすべてクローズする
   594:     "DOS_SUPER," +       //0x1880 0xff20 スーパーバイザモードの切り替え
   595:     "DOS_FNCKEY," +      //0x1884 0xff21 再定義可能キーの読み込みと設定
   596:     "DOS_KNJCTRL," +     //0x1888 0xff22 かな漢字変換の制御
   597:     "DOS_CONCTRL," +     //0x188c 0xff23 コンソール出力の制御
   598:     "DOS_KEYCTRL," +     //0x1890 0xff24 コンソール入力の制御
   599:     "DOS_INTVCS," +      //0x1894 0xff25 例外処理ベクタの設定
   600:     "DOS_PSPSET," +      //0x1898 0xff26 プロセス管理テーブルの作成
   601:     "DOS_GETTIM2," +     //0x189c 0xff27 時刻を得る(ロングワード)
   602:     "DOS_SETTIM2," +     //0x18a0 0xff28 時刻を設定する(ロングワード)
   603:     "DOS_NAMESTS," +     //0x18a4 0xff29 ファイル名の分解
   604:     "DOS_GETDATE," +     //0x18a8 0xff2a 日付を得る
   605:     "DOS_SETDATE," +     //0x18ac 0xff2b 日付を設定する
   606:     "DOS_GETTIME," +     //0x18b0 0xff2c 時刻を得る(ワード)
   607:     "DOS_SETTIME," +     //0x18b4 0xff2d 時刻を設定する(ワード)
   608:     "DOS_VERIFY," +      //0x18b8 0xff2e verifyのモードの設定
   609:     "DOS_DUP0," +        //0x18bc 0xff2f 標準ハンドラの変換
   610:     "DOS_VERNUM," +      //0x18c0 0xff30 Humanのバージョンの取得
   611:     "DOS_KEEPPR," +      //0x18c4 0xff31 プロセスの常駐終了
   612:     "DOS_GETDPB," +      //0x18c8 0xff32 DPBの取得
   613:     "DOS_BREAKCK," +     //0x18cc 0xff33 breakおよびoffの取得と設定
   614:     "DOS_DRVXCHG," +     //0x18d0 0xff34 ドライブの入れ換え
   615:     "DOS_INTVCG," +      //0x18d4 0xff35 例外処理ベクタの取得
   616:     "DOS_DSKFRE," +      //0x18d8 0xff36 ドライブの空容量の取得
   617:     "DOS_NAMECK," +      //0x18dc 0xff37 ファイル名のチェック
   618:     "," +             //0x18e0 0xff38
   619:     "DOS_MKDIR," +       //0x18e4 0xff39 ディレクトリの作成
   620:     "DOS_RMDIR," +       //0x18e8 0xff3a ディレクトリの削除
   621:     "DOS_CHDIR," +       //0x18ec 0xff3b カレントディレクトリの設定
   622:     "DOS_CREATE," +      //0x18f0 0xff3c 新規ファイルの作成
   623:     "DOS_OPEN," +        //0x18f4 0xff3d ファイルのオープン
   624:     "DOS_CLOSE," +       //0x18f8 0xff3e ハンドラのクローズ
   625:     "DOS_READ," +        //0x18fc 0xff3f ハンドラから指定されたサイズのデータを読み込む
   626:     "DOS_WRITE," +       //0x1900 0xff40 ハンドラへ指定されたサイズのデータを書き込む
   627:     "DOS_DELETE," +      //0x1904 0xff41 ファイルの削除
   628:     "DOS_SEEK," +        //0x1908 0xff42 ハンドラのシーク位置の変更
   629:     "DOS_CHMOD," +       //0x190c 0xff43 ファイルまたはディレクトリの属性の読み込みと設定
   630:     "DOS_IOCTRL," +      //0x1910 0xff44 デバイスによるハンドラの直接制御
   631:     "DOS_DUP," +         //0x1914 0xff45 ハンドラの複製
   632:     "DOS_DUP2," +        //0x1918 0xff46 ハンドラの複写
   633:     "DOS_CURDIR," +      //0x191c 0xff47 カレントディレクトリの取得
   634:     "DOS_MALLOC," +      //0x1920 0xff48 メモリブロックの確保(下位から)
   635:     "DOS_MFREE," +       //0x1924 0xff49 メモリブロックの開放
   636:     "DOS_SETBLOCK," +    //0x1928 0xff4a メモリブロックのサイズの変更
   637:     "DOS_EXEC," +        //0x192c 0xff4b 子プロセスの実行
   638:     "DOS_EXIT2," +       //0x1930 0xff4c プロセスの終了(終了コード指定あり)
   639:     "DOS_WAIT," +        //0x1934 0xff4d 子プロセスの終了コードの取得
   640:     "DOS_FILES," +       //0x1938 0xff4e ディレクトリエントリの検索(最初)
   641:     "DOS_NFILES," +      //0x193c 0xff4f ディレクトリエントリの検索(次)
   642:     "DOS_SETPDB," +      //0x1940 0xff50 プロセス管理テーブルの移動
   643:     "DOS_GETPDB," +      //0x1944 0xff51 プロセス管理テーブルの取得
   644:     "DOS_SETENV," +      //0x1948 0xff52 環境変数の設定
   645:     "DOS_GETENV," +      //0x194c 0xff53 環境変数の取得
   646:     "DOS_VERIFYG," +     //0x1950 0xff54 verifyのモードの取得
   647:     "DOS_COMMON," +      //0x1954 0xff55 common領域の制御
   648:     "DOS_RENAME," +      //0x1958 0xff56 ファイル名またはディレクトリ名の変更およびファイルの移動
   649:     "DOS_FILEDATE," +    //0x195c 0xff57 ハンドラの更新日時の取得と設定
   650:     "DOS_MALLOC2," +     //0x1960 0xff58 メモリブロックの確保(モード指定あり)
   651:     "," +             //0x1964 0xff59
   652:     "DOS_MAKETMP," +     //0x1968 0xff5a テンポラリファイルの作成
   653:     "DOS_NEWFILE," +     //0x196c 0xff5b 新規ファイルの作成(非破壊)
   654:     "DOS_LOCK," +        //0x1970 0xff5c ハンドラのロックの制御
   655:     "," +             //0x1974 0xff5d
   656:     "," +             //0x1978 0xff5e
   657:     "DOS_ASSIGN," +      //0x197c 0xff5f 仮想ドライブおよび仮想ディレクトリの取得と設定
   658:     "," +             //0x1980 0xff60
   659:     "," +             //0x1984 0xff61
   660:     "," +             //0x1988 0xff62
   661:     "," +             //0x198c 0xff63
   662:     "," +             //0x1990 0xff64
   663:     "," +             //0x1994 0xff65
   664:     "," +             //0x1998 0xff66
   665:     "," +             //0x199c 0xff67
   666:     "," +             //0x19a0 0xff68
   667:     "," +             //0x19a4 0xff69
   668:     "," +             //0x19a8 0xff6a
   669:     "," +             //0x19ac 0xff6b
   670:     "," +             //0x19b0 0xff6c
   671:     "," +             //0x19b4 0xff6d
   672:     "," +             //0x19b8 0xff6e
   673:     "," +             //0x19bc 0xff6f
   674:     "," +             //0x19c0 0xff70
   675:     "," +             //0x19c4 0xff71
   676:     "," +             //0x19c8 0xff72
   677:     "," +             //0x19cc 0xff73
   678:     "," +             //0x19d0 0xff74
   679:     "," +             //0x19d4 0xff75
   680:     "," +             //0x19d8 0xff76
   681:     "," +             //0x19dc 0xff77
   682:     "," +             //0x19e0 0xff78
   683:     "," +             //0x19e4 0xff79
   684:     "DOS_FFLUSH_SET," +  //0x19e8 0xff7a fflushのモードの取得と設定
   685:     "DOS_OS_PATCH," +    //0x19ec 0xff7b Humanの変更
   686:     "DOS_GET_FCB_ADR," + //0x19f0 0xff7c FCBテーブルの取得
   687:     "DOS_S_MALLOC," +    //0x19f4 0xff7d メインスレッドのメモリ管理からメモリブロックを確保
   688:     "DOS_S_MFREE," +     //0x19f8 0xff7e メインスレッドのメモリ管理からメモリブロックを削除
   689:     "DOS_S_PROCESS," +   //0x19fc 0xff7f サブのメモリ管理の設定
   690:     "DOS_SETPDB," +      //0x1a00 0xff80 プロセス管理テーブルの移動
   691:     "DOS_GETPDB," +      //0x1a04 0xff81 プロセス管理テーブルの取得
   692:     "DOS_SETENV," +      //0x1a08 0xff82 環境変数の設定
   693:     "DOS_GETENV," +      //0x1a0c 0xff83 環境変数の取得
   694:     "DOS_VERIFYG," +     //0x1a10 0xff84 verifyのモードの取得
   695:     "DOS_COMMON," +      //0x1a14 0xff85 common領域の制御
   696:     "DOS_RENAME," +      //0x1a18 0xff86 ファイル名またはディレクトリ名の変更およびファイルの移動
   697:     "DOS_FILEDATE," +    //0x1a1c 0xff87 ハンドラの更新日時の取得と設定
   698:     "DOS_MALLOC2," +     //0x1a20 0xff88 メモリブロックの確保(モード指定あり)
   699:     "," +             //0x1a24 0xff89
   700:     "DOS_MAKETMP," +     //0x1a28 0xff8a テンポラリファイルの作成
   701:     "DOS_NEWFILE," +     //0x1a2c 0xff8b 新規ファイルの作成(非破壊)
   702:     "DOS_LOCK," +        //0x1a30 0xff8c ハンドラのロックの制御
   703:     "," +             //0x1a34 0xff8d
   704:     "," +             //0x1a38 0xff8e
   705:     "DOS_ASSIGN," +      //0x1a3c 0xff8f 仮想ドライブおよび仮想ディレクトリの取得と設定
   706:     "," +             //0x1a40 0xff90
   707:     "," +             //0x1a44 0xff91
   708:     "," +             //0x1a48 0xff92
   709:     "," +             //0x1a4c 0xff93
   710:     "," +             //0x1a50 0xff94
   711:     "," +             //0x1a54 0xff95
   712:     "," +             //0x1a58 0xff96
   713:     "," +             //0x1a5c 0xff97
   714:     "," +             //0x1a60 0xff98
   715:     "," +             //0x1a64 0xff99
   716:     "," +             //0x1a68 0xff9a
   717:     "," +             //0x1a6c 0xff9b
   718:     "," +             //0x1a70 0xff9c
   719:     "," +             //0x1a74 0xff9d
   720:     "," +             //0x1a78 0xff9e
   721:     "," +             //0x1a7c 0xff9f
   722:     "," +             //0x1a80 0xffa0
   723:     "," +             //0x1a84 0xffa1
   724:     "," +             //0x1a88 0xffa2
   725:     "," +             //0x1a8c 0xffa3
   726:     "," +             //0x1a90 0xffa4
   727:     "," +             //0x1a94 0xffa5
   728:     "," +             //0x1a98 0xffa6
   729:     "," +             //0x1a9c 0xffa7
   730:     "," +             //0x1aa0 0xffa8
   731:     "," +             //0x1aa4 0xffa9
   732:     "DOS_FFLUSH_SET," +  //0x1aa8 0xffaa fflushのモードの取得と設定
   733:     "DOS_OS_PATCH," +    //0x1aac 0xffab Humanの変更
   734:     "DOS_GET_FCB_ADR," + //0x1ab0 0xffac FCBテーブルの取得
   735:     "DOS_S_MALLOC," +    //0x1ab4 0xffad メインスレッドのメモリ管理からメモリブロックを確保
   736:     "DOS_S_MFREE," +     //0x1ab8 0xffae メインスレッドのメモリ管理からメモリブロックを削除
   737:     "DOS_S_PROCESS," +   //0x1abc 0xffaf サブのメモリ管理の設定
   738:     "," +             //0x1ac0 0xffb0
   739:     "," +             //0x1ac4 0xffb1
   740:     "," +             //0x1ac8 0xffb2
   741:     "," +             //0x1acc 0xffb3
   742:     "," +             //0x1ad0 0xffb4
   743:     "," +             //0x1ad4 0xffb5
   744:     "," +             //0x1ad8 0xffb6
   745:     "," +             //0x1adc 0xffb7
   746:     "," +             //0x1ae0 0xffb8
   747:     "," +             //0x1ae4 0xffb9
   748:     "," +             //0x1ae8 0xffba
   749:     "," +             //0x1aec 0xffbb
   750:     "," +             //0x1af0 0xffbc
   751:     "," +             //0x1af4 0xffbd
   752:     "," +             //0x1af8 0xffbe
   753:     "," +             //0x1afc 0xffbf
   754:     "," +             //0x1b00 0xffc0
   755:     "," +             //0x1b04 0xffc1
   756:     "," +             //0x1b08 0xffc2
   757:     "," +             //0x1b0c 0xffc3
   758:     "," +             //0x1b10 0xffc4
   759:     "," +             //0x1b14 0xffc5
   760:     "," +             //0x1b18 0xffc6
   761:     "," +             //0x1b1c 0xffc7
   762:     "," +             //0x1b20 0xffc8
   763:     "," +             //0x1b24 0xffc9
   764:     "," +             //0x1b28 0xffca
   765:     "," +             //0x1b2c 0xffcb
   766:     "," +             //0x1b30 0xffcc
   767:     "," +             //0x1b34 0xffcd
   768:     "," +             //0x1b38 0xffce
   769:     "," +             //0x1b3c 0xffcf
   770:     "," +             //0x1b40 0xffd0
   771:     "," +             //0x1b44 0xffd1
   772:     "," +             //0x1b48 0xffd2
   773:     "," +             //0x1b4c 0xffd3
   774:     "," +             //0x1b50 0xffd4
   775:     "," +             //0x1b54 0xffd5
   776:     "," +             //0x1b58 0xffd6
   777:     "," +             //0x1b5c 0xffd7
   778:     "," +             //0x1b60 0xffd8
   779:     "," +             //0x1b64 0xffd9
   780:     "," +             //0x1b68 0xffda
   781:     "," +             //0x1b6c 0xffdb
   782:     "," +             //0x1b70 0xffdc
   783:     "," +             //0x1b74 0xffdd
   784:     "," +             //0x1b78 0xffde
   785:     "," +             //0x1b7c 0xffdf
   786:     "," +             //0x1b80 0xffe0
   787:     "," +             //0x1b84 0xffe1
   788:     "," +             //0x1b88 0xffe2
   789:     "," +             //0x1b8c 0xffe3
   790:     "," +             //0x1b90 0xffe4
   791:     "," +             //0x1b94 0xffe5
   792:     "," +             //0x1b98 0xffe6
   793:     "," +             //0x1b9c 0xffe7
   794:     "," +             //0x1ba0 0xffe8
   795:     "," +             //0x1ba4 0xffe9
   796:     "," +             //0x1ba8 0xffea
   797:     "," +             //0x1bac 0xffeb
   798:     "," +             //0x1bb0 0xffec
   799:     "," +             //0x1bb4 0xffed
   800:     "," +             //0x1bb8 0xffee
   801:     "," +             //0x1bbc 0xffef
   802:     "DOS_EXITVC," +      //0x1bc0 0xfff0 _EXITVC(プロセスが終了したときのジャンプ先のベクタ)
   803:     "DOS_CTRLVC," +      //0x1bc4 0xfff1 _CTRLVC(^Cのときのジャンプ先のベクタ)
   804:     "DOS_ERRJVC," +      //0x1bc8 0xfff2 _ERRJVC(システムエラーが発生したときのジャンプ先のベクタ)
   805:     "DOS_DISKRED," +     //0x1bcc 0xfff3 ハンドラから直接読み込む
   806:     "DOS_DISKWRT," +     //0x1bd0 0xfff4 ハンドラに直接書き込む
   807:     "DOS_INDOSFLG," +    //0x1bd4 0xfff5
   808:     "DOS_SUPER_JSR," +   //0x1bd8 0xfff6
   809:     "DOS_BUS_ERR," +     //0x1bdc 0xfff7
   810:     "DOS_OPEN_PR," +     //0x1be0 0xfff8 _OPEN_PR(スレッドが生成されたとき呼ばれるベクタ)
   811:     "DOS_KILL_PR," +     //0x1be4 0xfff9 _KILL_PR(スレッドが消滅したとき呼ばれるベクタ)
   812:     "DOS_GET_PR," +      //0x1be8 0xfffa
   813:     "DOS_SUSPEND_PR," +  //0x1bec 0xfffb
   814:     "DOS_SLEEP_PR," +    //0x1bf0 0xfffc
   815:     "DOS_SEND_PR," +     //0x1bf4 0xfffd
   816:     "DOS_TIME_PR," +     //0x1bf8 0xfffe
   817:     "DOS_CHANGE_PR," +   //0x1bfc 0xffff _CHANGE_PR(スレッドが切り替わったとき呼ばれるベクタ)
   818:     //その他
   819:     "SoftKey," +     //0x0934 マウス受信データ処理アドレス(ソフトキーボード)
   820:     "MsCursor," +    //0x0938 マウス受信データ処理アドレス(マウスカーソル)
   821:     "EscSeq," +      //0x097e 拡張ESCシーケンス処理ルーチンのアドレス
   822:     "MsProc," +      //0x09b6 マウスデータ受信処理アドレス
   823:     "CursorProc," +  //0x09be カーソル点滅処理アドレス
   824:     "FDMOffProc," +  //0x09c6 FDモータ停止処理アドレス
   825:     "OneMinProc," +  //0x09ce 1分処理アドレス
   826:     "ExtFormat," +   //0x0d00 [13]_B_FORMATでドライブの種類が$4~$5,$A~$Fのとき呼ばれるルーチンのアドレス
   827:     "BeepProc," +    //0x0d12 [13]BEEP処理まるごと差し換えルーチンのアドレス([$0978.w].lが-1のとき有効)
   828:     "EscProc"        //0x0d16 [13]ESC [処理まるごと差し換えルーチンのアドレス(0=差し換えない)
   829:     ).split (",", LBL_VECTOR_LENGTH);
   830: 
   831:   public static final int[] lblVectorTable = new int[LBL_VECTOR_LENGTH];  //ベクタのアドレス
   832: 
   833:   public static final String[] lblProgramName = new String[LBL_MAX_DEVICES + LBL_MAX_PROGRAMS];  //デバイスドライバとプログラムの名前
   834:   public static final int[] lblProgramHead = new int[LBL_MAX_DEVICES + LBL_MAX_PROGRAMS];  //デバイスドライバとプログラムの先頭アドレス
   835:   public static final int[] lblProgramTail = new int[LBL_MAX_DEVICES + LBL_MAX_PROGRAMS];  //デバイスドライバとプログラムの末尾アドレス
   836:   public static int lblProgramCount;
   837: 
   838:   //lblClear ()
   839:   //  ラベルをクリアする
   840:   //  デバイスドライバを初期化した直後とプロセスを起動する直前に呼ばれる
   841:   public static void lblClear () {
   842:     lblProgramCount = 0;
   843:   }  //lblClear
   844: 
   845:   //lblUpdateVector ()
   846:   //  ベクタを更新する
   847:   public static void lblUpdateVector () {
   848:     int i = 0;
   849:     for (int v = 0x0000; v <= 0x00ff; v++) {  //例外ベクタ
   850:       lblVectorTable[i++] = MC68060.mmuPeekLongData (XEiJ.mpuVBR + (v << 2), 1);
   851:     }
   852:     for (int v = 0x0100; v <= 0x01ff; v++) {  //IOCSコール
   853:       lblVectorTable[i++] = MC68060.mmuPeekLongData (v << 2, 1);
   854:     }
   855:     for (int v = 0xff00; v <= 0xffff; v++) {  //DOSコール
   856:       lblVectorTable[i++] = MC68060.mmuPeekLongData (0x1800 + ((v & 0xff) << 2), 1);
   857:     }
   858:     for (int v : LBL_VECTOR_SPECIAL) {
   859:       lblVectorTable[i++] = MC68060.mmuPeekLongData (v, 1);
   860:     }
   861:   }
   862: 
   863:   //lblUpdateProgram ()
   864:   //  プログラムの範囲を更新する
   865:   public static void lblUpdateProgram () {
   866:     int count = 0;
   867:     int top = MainMemory.mmrHumanTop ();  //Human68kのメモリ管理の先頭(HUMAN.SYSのメモリ管理テーブル)
   868:     int btm = MainMemory.mmrHumanBtm ();  //Human68kのメモリ管理の末尾
   869:     int pmm = MainMemory.mmrHumanPmm ();  //Human68kの実行中のプロセスのメモリ管理テーブル
   870:     int nul = MainMemory.mmrHumanNul ();  //Human68kのNULデバイスドライバ
   871:     if (top >= 0 && btm >= 0 && pmm >= 0 && nul >= 0) {  //すべて確認できた
   872:       //デバイスドライバのリストを作る
   873:       int devEnd = MC68060.mmuPeekLongData (top + 8, 1);  //HUMAN.SYSの未使用領域の先頭
   874:       for (int a = nul, i = 0; a < devEnd && i < LBL_MAX_DEVICES; i++) {
   875:         int b = MC68060.mmuPeekLongData (a, 1);  //次のデバイスドライバの先頭
   876:         if (b < 0 || devEnd < b) {  //最後のデバイスドライバまたはHUMAN.SYSの外
   877:           b = devEnd;
   878:         }
   879:         int l = 8;
   880:         for (; l > 0 && MC68060.mmuPeekByteSignData (a + (14 - 1) + l, 1) == ' '; l--) {
   881:         }
   882:         lblProgramName[count] = MC68060.mmuPeekStringL (new StringBuilder (), a + 14, l, 1).toString ();  //デバイス名
   883:         lblProgramHead[count] = a;
   884:         lblProgramTail[count] = b;
   885:         count++;
   886:         a = b;
   887:       }
   888:       //プログラムのリストを作る
   889:       //  メモリ管理テーブル
   890:       //       0.l      直前のメモリ管理テーブルのアドレス(なければ0)
   891:       //       4.l      このブロックを確保したプロセスのメモリ管理テーブルのアドレス
   892:       //                最上位1バイト
   893:       //                  0x00  通常のメモリブロック
   894:       //                  0xfd  _S_PROCESSによるサブのメモリ管理の親のメモリブロック
   895:       //                  0xff  常駐したプロセスのメモリブロック
   896:       //       8.l      このブロックの未使用領域の先頭
   897:       //                  メモリブロックの確保
   898:       //                    既存のメモリブロックの中から十分な未使用領域を持つものを選ぶ
   899:       //                    未使用領域の先頭に新しいメモリ管理テーブルを構築して前後のメモリ管理テーブルのリストに挿入する
   900:       //                  メモリブロックの開放
   901:       //                    メモリ管理テーブルをリストから切り離す
   902:       //                    切り離したメモリ管理テーブルの先頭から直後のメモリブロックの手前までを直前のメモリブロックの未使用領域に取り込む
   903:       //      12.l      直後のメモリ管理テーブルのアドレス(なければ0)
   904:       //                  直後のメモリ管理テーブルがあるときはこのブロックの未使用領域の末尾
   905:       //                  このメモリブロックが末尾のときは[0x00001c00]をこのブロックの未使用領域の末尾とみなす
   906:       //     (16バイト)
   907:       //  プロセス管理テーブル
   908:       //      16.l      環境の領域のアドレス
   909:       //      20.l      _EXITVCのベクタ(親の_EXECの直後)
   910:       //      24.l      _CTRLVCのベクタ
   911:       //      28.l      _ERRJVCのベクタ
   912:       //      32.l      コマンドラインのアドレス
   913:       //      36.b[12]  ハンドラの使用状況
   914:       //      48.l      bssの先頭
   915:       //      52.l      ヒープの先頭
   916:       //      56.l      スタックエリアの先頭
   917:       //      60.l      親のUSP
   918:       //      64.l      親のSSP
   919:       //      68.w      親のSR
   920:       //      70.w      アボート時のSR
   921:       //      72.l      アボート時のSSP
   922:       //      76.l      TRAP#10のベクタ
   923:       //      80.l      TRAP#11のベクタ
   924:       //      84.l      TRAP#12のベクタ
   925:       //      88.l      TRAP#13のベクタ
   926:       //      92.l      TRAP#14のベクタ
   927:       //      96.l      OSフラグ(-1=CONFIG.SYSのSHELLで起動,0=その他)
   928:       //     100.b      モジュール番号
   929:       //     101.b[3]   未定義
   930:       //     104.l      子プロセスのメモリ管理テーブル
   931:       //     108.l[5]   予約
   932:       //     128.b[68]  実行ファイルのパス
   933:       //     196.b[24]  実行ファイルのファイル名
   934:       //     220.l[9]   予約
   935:       //    (256バイト)
   936:       //!!! human100,human101はプロセス管理テーブルの構造が異なる
   937:       //
   938:       //  HUMAN.SYSから末尾のメモリブロックまで、常駐しているプロセスを記録しながら、直後のメモリ管理テーブルを辿る
   939:       //  実行中のプロセスからHUMAN.SYSまで、プロセスを記録しながら、メモリブロックを確保したプロセスのメモリ管理テーブルを遡る
   940:       //
   941:       //  名前はプロセス管理テーブルにある主ファイル名以下0x00の手前までをSJISから変換した文字列
   942:       //  先頭はプロセス管理テーブルの直後
   943:       //  末尾はメモリ管理テーブルにある未使用領域の先頭
   944:       //
   945:       //  Human68kのメモリ管理が壊れているときは辿れるところまで表示する
   946:       //  Human68kのメモリ管理が壊れたためにX68000が暴走したときでもエミュレータが一緒になってハングアップしてはならない
   947:       //
   948:       //HUMAN.SYSから末尾のメモリブロックまで、常駐しているプロセスを記録しながら、直後のメモリ管理テーブルを辿る
   949:       for (int a = top; 0 < a && a < btm; a = MC68060.mmuPeekLongData (a + 12, 1)) {
   950:         if ((MC68060.mmuPeekByteSignData (a + 4, 1) & 0xe0) == 0xe0) {  //常駐したプロセスのメモリ管理テーブル
   951:           lblProgramName[count] = MC68060.mmuPeekStringL (new StringBuilder (), a + 196, MC68060.mmuPeekStrlen (a + 196, 24, 1), 1).toString ();
   952:           lblProgramHead[count] = a == top ? 0x00000000 : a + 256;  //HUMAN.SYSだけ絶対アドレスで表示するため先頭を0x00000000に変更する
   953:           lblProgramTail[count] = MC68060.mmuPeekLongData (a + 8, 1);
   954:           count++;
   955:         }
   956:       }
   957:       //実行中のプロセスからHUMAN.SYSまで、プロセスを記録しながら、メモリブロックを確保したプロセスのメモリ管理テーブルを遡る
   958:       for (int a = pmm; 0 < a && a < btm; a = MC68060.mmuPeekLongData (a + 4, 1)) {
   959:         lblProgramName[count] = MC68060.mmuPeekStringL (new StringBuilder (), a + 196, MC68060.mmuPeekStrlen (a + 196, 24, 1), 1).toString ();
   960:         lblProgramHead[count] = a == top ? 0x00000000 : a + 256;  //HUMAN.SYSだけ絶対アドレスで表示するため先頭を0x00000000に変更する
   961:         lblProgramTail[count] = MC68060.mmuPeekLongData (a + 8, 1);
   962:         count++;
   963:       }
   964:     }
   965:     lblProgramCount = count;
   966:   }  //lblUpdate()
   967: 
   968:   //sb = lblSearch (sb, a)
   969:   //  ラベルを検索する
   970:   public static StringBuilder lblSearch (StringBuilder sb, int a) {
   971:     //ベクタを更新する
   972:     lblUpdateVector ();
   973:     //プログラムの範囲を更新する
   974:     if (lblProgramCount == 0) {
   975:       lblUpdateProgram ();
   976:     }
   977:     //ベクタを検索する
   978:     for (int i = 0; i < LBL_VECTOR_LENGTH; i++) {
   979:       if (a == lblVectorTable[i]) {
   980:         String n = LBL_VECTOR_NAME[i];
   981:         if (n.length () > 0) {
   982:           sb.append ('.').append (n);
   983:         } else if (i < 256) {
   984:           XEiJ.fmtHex4 (sb.append (".$"), i);
   985:         } else if (i < 512) {
   986:           XEiJ.fmtHex2 (sb.append (".IOCS_$"), i - 256);
   987:         } else if (i < 768) {
   988:           XEiJ.fmtHex4 (sb.append (".DOS_$"), 0xff00 - 512 + i);
   989:         } else {
   990:           XEiJ.fmtHex4 (sb.append (".$"), LBL_VECTOR_SPECIAL[i - 768]);
   991:         }
   992:       }
   993:     }
   994:     //プログラムの範囲を検索する
   995:     for (int i = 0; i < lblProgramCount; i++) {
   996:       if (lblProgramHead[i] <= a && a < lblProgramTail[i]) {
   997:         sb.append (" @ ").append (lblProgramName[i]);
   998:         if (lblProgramHead[i] != 0) {  //HUMAN.SYSのときは冗長なので書かない
   999:           XEiJ.fmtHex8 (sb.append (" $"), a - lblProgramHead[i]);
  1000:         }
  1001:         return sb;
  1002:       }
  1003:     }
  1004:     return sb;
  1005:   }  //lblSearch
  1006: 
  1007: }  //class LabeledAddress
  1008: 
  1009: 
  1010: