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: