|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2020 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // メインバス (LUNA) ! 9: // ! 10: ! 11: // IODevice ! 12: // +-- MainbusBaseDevice (InitMainbus() と FC アクセスを持つ) ! 13: // | +-- MainbusDevice (これがメインバス、システムに1つ) ! 14: // | | +-- Mainbus24Device (上位8ビットがテーブルで表せるメインバス) ! 15: // | | | | +-------------+ ! 16: // | | | +--| LunaMainbus | (LUNA 共通部) ! 17: // | | | | +-------------+ ! 18: // | | | | | +--------------+ ! 19: // | | | | +--| Luna1Mainbus | (LUNA-I) ! 20: // | | | | | +--------------+ ! 21: // | | | | | +----------------+ ! 22: // | | | | +--| Luna88kMainbus | (LUNA-88K) ! 23: // | | | | +----------------+ ! 24: // | | | | ! 25: // | | | +-- NewsMainbus ! 26: // | | | +-- Virt68kMainbus ! 27: // | | +-- X68kMainbus ! 28: // | +-- X68kIODevice ! 29: // +-- XPbusDevice ! 30: ! 31: #include "mainbus_luna.h" ! 32: #include "bt45x.h" ! 33: #include "busio.h" ! 34: #include "cmmu.h" ! 35: #include "config.h" ! 36: #include "crtc2.h" ! 37: #include "fuserom.h" ! 38: #include "interrupt.h" ! 39: #include "lance.h" ! 40: #include "lunafb.h" ! 41: #include "mainapp.h" ! 42: #include "mainram.h" ! 43: #include "mk48t02.h" ! 44: #include "msxdos.h" ! 45: #include "partialram.h" ! 46: #include "pio.h" ! 47: #include "prom.h" ! 48: #include "romemu_luna1.h" ! 49: #include "romemu_luna88k.h" ! 50: #include "sio.h" ! 51: #include "spc.h" ! 52: #include "subram.h" ! 53: #include "sysclk.h" ! 54: #include "sysctlr.h" ! 55: #include "tas.h" ! 56: ! 57: // ! 58: // LUNA 共通部 ! 59: // ! 60: ! 61: // デバイスマップ用の識別子 ! 62: enum { ! 63: NONE, ! 64: BUSERR, ! 65: PROM, ! 66: MK48, ! 67: PIO0, ! 68: PIO1, ! 69: SIO, ! 70: TAS, ! 71: SYSCLK, ! 72: SUBRAM, ! 73: MROM, ! 74: LUNAFB, ! 75: BT45x, ! 76: CRTC2, ! 77: SCSI, ! 78: LANCE, ! 79: FUSE, ! 80: SYSCTL, ! 81: CMMU, ! 82: }; ! 83: ! 84: // コンストラクタ ! 85: LunaMainbus::LunaMainbus() ! 86: { ! 87: NEWDV(BusErr, new BusErrDevice()); ! 88: NEWDV(NopIO, new NopIODevice()); ! 89: ! 90: // 2MB ずつ 32bit 全域。 ! 91: acc.resize(2048); ! 92: monitor_accstat.SetSize(80, 2 + 32); ! 93: } ! 94: ! 95: // デストラクタ ! 96: LunaMainbus::~LunaMainbus() ! 97: { ! 98: } ! 99: ! 100: // デバイスマップから devtable を作成 (ここは共通にできる) ! 101: void ! 102: LunaMainbus::MakeDevtable(const uint8 *maptable) ! 103: { ! 104: for (int i = 0; i < devtable.size(); i++) { ! 105: IODevice *d; ! 106: switch (maptable[i]) { ! 107: case NONE: d = pNopIO.get(); break; ! 108: case BUSERR: d = pBusErr.get(); break; ! 109: case PROM: d = pPROM.get(); break; ! 110: case MK48: d = pRTC.get(); break; ! 111: case PIO0: d = pPIO0.get(); break; ! 112: case PIO1: d = pPIO1.get(); break; ! 113: case SIO: d = pSIO.get(); break; ! 114: case TAS: d = pTAS.get(); break; ! 115: case SYSCLK: d = pSysClk.get(); break; ! 116: case SUBRAM: d = pSubRAM.get(); break; ! 117: case MROM: d = pNopIO.get(); break; ! 118: case LUNAFB: d = pPlaneVRAM.get(); break; ! 119: case BT45x: d = pBT45x.get(); break; ! 120: case CRTC2: d = pCRTC2.get(); break; ! 121: case SCSI: d = pSPC.get(); break; ! 122: case LANCE: d = pEthernet.get(); break; ! 123: case SYSCTL: d = pInterrupt.get(); break; ! 124: // これらはサブクラスが所有しているので Get で取得する必要がある。 ! 125: case FUSE: d = GetFuseROMDevice(); break; ! 126: case CMMU: d = GetCMMUDevice(); break; ! 127: default: ! 128: PANIC("corrupted maptable[%d]=%d", i, maptable[i]); ! 129: } ! 130: devtable[i] = d; ! 131: } ! 132: } ! 133: ! 134: // メインバスの初期化 ! 135: bool ! 136: LunaMainbus::InitMainbus() ! 137: { ! 138: auto mainram = dynamic_cast<MainRAMDevice *>(pMainRAM.get()); ! 139: auto partial = dynamic_cast<PartialRAMDevice *>(pPartialRAM.get()); ! 140: ! 141: // RAM は容量が確定した後のここで配置。 ! 142: int ram_size_MB = mainram->GetSizeMB(); ! 143: int i = 0; ! 144: while (ram_size_MB >= 16) { ! 145: // 16MB あれば RAM が直接担当 ! 146: devtable[i++] = mainram; ! 147: ram_size_MB -= 16; ! 148: } ! 149: // 16MB 未満なら PartialRAM が担当 ! 150: if (ram_size_MB > 0) { ! 151: devtable[i] = partial; ! 152: } ! 153: ! 154: // 先頭 (mainram or partial) をブートページ切り替え用に覚えておく。 ! 155: ram0 = devtable[0]; ! 156: ! 157: // アクセス状況用のマップを作成。 ! 158: InitAccStat(); ! 159: ! 160: return true; ! 161: } ! 162: ! 163: // ブートページを切り替える。 ! 164: void ! 165: LunaMainbus::SwitchBootPage(bool isrom) ! 166: { ! 167: // 共通処理 ! 168: inherited::SwitchBootPage(isrom); ! 169: ! 170: // ROM は 128KB しかないので 16MB まるごと切り替わったりはしないとは ! 171: // 思うけど、具体的にどの範囲が切り替わるのかを知る方法がないのと ! 172: // 大して副作用もないので、先頭の 1ブロックをまるごと切り替えておく。 ! 173: if (isrom) { ! 174: auto prom0 = GetPROM0Device(); ! 175: devtable[0x00] = prom0; ! 176: devtable[0x41] = prom0; ! 177: } else { ! 178: auto prom = GetPROMDevice(); ! 179: devtable[0x00] = ram0; ! 180: devtable[0x41] = prom; ! 181: } ! 182: } ! 183: ! 184: ! 185: // ! 186: // LUNA-I ! 187: // ! 188: ! 189: // LUNA-I のデバイス割り当て表 (上位8ビット) ! 190: // ! 191: // 仕様 実際 ! 192: // 00 00 メインメモリ ! 193: // -- 01..03 二重バスフォールトするようだ ! 194: // -- 04..0f 何かよく分からないものが読める ! 195: // -- 10..3f BUSERR ! 196: // 41 40..43 PROM (B、N=128KBでミラー) ! 197: // 45 44..47 mk48t02 (B、N=2048でミラー) ! 198: // 49 48..4b pio0 (B、N=4でミラー) ! 199: // 4d 4c..4f pio1 (B、N=4でミラー) ! 200: // 51 50..53 sio (BB、N=4でミラー) ! 201: // -- 54..5f 0xff が読めるようだ ! 202: // 61 60..61 TAS (B、N=1でミラー) ! 203: // 63 62..63 システムクロック (B、N=1でミラー) ! 204: // -- 以降TASとSysClkで2枠ずつ。また無効ビットの読み出しは ! 205: // -- 必ずしも Hi とは限らず不安定のようだ。 ! 206: // 71 70..7f 3ポートRAM (B、N=128KBでミラー) ! 207: // 81 80.. BUSERR (オンボード拡張スロットA) ! 208: // 83 ..8f BUSERR (オンボード拡張スロットB) ! 209: // 91 90..9f 0xff が読めるようだ (PC-9000 拡張スロット) ! 210: // ! 211: // a1 マスクROM ! 212: // a0,a2,a4,... BUSERR ! 213: // a1,a3,a5,... マスクROM(なければ0xffが読める) ! 214: // b1 ビットマップ ! 215: // b0,b2,b4,... BUSERR ! 216: // b1,b3,b5,... ビットマップ (内訳は lunafb.cpp 参照) ! 217: // c1 パレット ! 218: // c0,c2,c4,... BUSERR ! 219: // c1,c3,c5,... パレット (B、N=4でミラー) ! 220: // d1 CRTC-II ! 221: // d0,d2,d4,... BUSERR ! 222: // d1,d3,d5,... CRTC-II (B、N=2でミラー) ! 223: // ! 224: // e1 e0..e3 SCSI (BBBB、N=16 でミラー) ! 225: // -- e4..ef 0xff が読めるようだが不安定。 ! 226: // f1 f0..f3 LANCE (WW、N=2 でミラー) ! 227: // -- f4..ff 0xff が読めるようだ ! 228: ! 229: /*static*/ const uint8 ! 230: Luna1Mainbus::maptable[256] = { ! 231: // (00,)01,02,03 は実際にはたぶんパリティチェックが入っていて(?) ! 232: // 非実装領域にアクセスすると二重バスフォールトになるがそれは未対応。 ! 233: // RAM は Init() で動的に配置する。 ! 234: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 00 ! 235: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 08 ! 236: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 10 ! 237: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 18 ! 238: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 20 ! 239: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 28 ! 240: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 30 ! 241: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 38 ! 242: ! 243: PROM, PROM, PROM, PROM, MK48, MK48, MK48, MK48, // 40 ! 244: PIO0, PIO0, PIO0, PIO0, PIO1, PIO1, PIO1, PIO1, // 48 ! 245: SIO, SIO, SIO, SIO, NONE, NONE, NONE, NONE, // 50 ! 246: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 58 ! 247: TAS, TAS, SYSCLK, SYSCLK, TAS, TAS, SYSCLK, SYSCLK, // 60 ! 248: TAS, TAS, SYSCLK, SYSCLK, TAS, TAS, SYSCLK, SYSCLK, // 68 ! 249: SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, // 70 ! 250: SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, // 78 ! 251: ! 252: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 80 ! 253: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 88 ! 254: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 90 ! 255: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 98 ! 256: BUSERR, MROM, BUSERR, MROM, BUSERR, MROM, BUSERR, MROM, // a0 ! 257: BUSERR, MROM, BUSERR, MROM, BUSERR, MROM, BUSERR, MROM, // a8 ! 258: BUSERR, LUNAFB, BUSERR, LUNAFB, BUSERR, LUNAFB, BUSERR, LUNAFB, // b0 ! 259: BUSERR, LUNAFB, BUSERR, LUNAFB, BUSERR, LUNAFB, BUSERR, LUNAFB, // b8 ! 260: ! 261: BUSERR, BT45x, BUSERR, BT45x, BUSERR, BT45x, BUSERR, BT45x, // c0 ! 262: BUSERR, BT45x, BUSERR, BT45x, BUSERR, BT45x, BUSERR, BT45x, // c8 ! 263: BUSERR, CRTC2, BUSERR, CRTC2, BUSERR, CRTC2, BUSERR, CRTC2, // d0 ! 264: BUSERR, CRTC2, BUSERR, CRTC2, BUSERR, CRTC2, BUSERR, CRTC2, // d8 ! 265: SCSI, SCSI, SCSI, SCSI, NONE, NONE, NONE, NONE, // e0 ! 266: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // e8 ! 267: LANCE, LANCE, LANCE, LANCE, NONE, NONE, NONE, NONE, // f0 ! 268: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // f8 ! 269: }; ! 270: ! 271: // コンストラクタ ! 272: Luna1Mainbus::Luna1Mainbus() ! 273: { ! 274: // デバイス (順序に注意) ! 275: // BusErrDevice, NopIODevice は親コンストラクタで作成済み。 ! 276: ! 277: NEWDV(Interrupt, new LunaInterrupt()); ! 278: NEWDV(RTC, new BusIO_B<MK48T02Device>()); // required by SysClk ! 279: NEWDV(SysClk, new BusIO_B<SysClkDevice>()); // required by PROMEmu ! 280: if (gMainApp.msxdos_mode) { ! 281: NEWDV(PROM, new MSXDOSDevice()); ! 282: } else if (gMainApp.exec_file || ! 283: gConfig->Find("prom-image").AsString().empty()) { ! 284: NEWDV(PROM, new Luna1PROMEmuDevice()); ! 285: } else { ! 286: NEWDV(PROM, new PROMDevice()); // required by RAM,BT45x ! 287: } ! 288: NEWDV(PROM0, new PROM0Device()); ! 289: NEWDV(MainRAM, new MainRAMDevice()); // required by PartialRAM ! 290: NEWDV(PartialRAM, new PartialRAMDevice()); ! 291: NEWDV(PIO0, new BusIO_B<PIO0Device>()); ! 292: NEWDV(PIO1, new BusIO_B<PIO1Device>()); ! 293: NEWDV(SIO, new BusIO_BB<SIODevice>()); ! 294: NEWDV(TAS, new BusIO_B<TASDevice>()); ! 295: NEWDV(SubRAM, new SubRAMDevice(128)); ! 296: NEWDV(BT45x, new BT45xDevice()); // required by Lunafb ! 297: NEWDV(PlaneVRAM, new LunafbDevice()); ! 298: NEWDV(CRTC2, new BusIO_B<CRTC2Device>()); ! 299: NEWDV(SPC, new BusIO_BBBB<SPCDevice>()); ! 300: NEWDV(Ethernet, new BusIO_W<LanceDevice>()); ! 301: ! 302: // デバイスマップから devtable を作成 ! 303: MakeDevtable(maptable); ! 304: } ! 305: ! 306: // デストラクタ ! 307: Luna1Mainbus::~Luna1Mainbus() ! 308: { ! 309: } ! 310: ! 311: ! 312: // ! 313: // LUNA-88K ! 314: // ! 315: ! 316: // 00..03 RAM (64MB 実機の場合) ! 317: // 04..3f アドレスの残像? (64MB 実機の場合) ! 318: // 40,41 PROM (B、N=256KB でミラー) ! 319: // 42,43 FUSEROM (BFFF、N=256 でミラー) ! 320: // 44,45 NVRAM (BFFF、N=2048 でミラー) ! 321: // 46,47 アドレスの残像? ! 322: // 48,49 PIO0 (BFFF、N=4 でミラー) ! 323: // 4a,4b アドレスの残像? ! 324: // 4c,4d PIO1 (BFFF、N=4 でミラー) ! 325: // 4e,4f アドレスの残像? ! 326: // 50,51 SIO (BFFF、N=4 でミラー) ! 327: // 52..5f アドレスの残像? ! 328: // 60,61 TAS? (BFFF、N=1 ?) ! 329: // 62,63 SysClk (BFFF、N=1 ?) ! 330: // 64,65,66,67 SysCtlr? (BFFF、N=4 ?) ! 331: // 68,69,6a,6b SysCtlr? (L、N=4 ?) ! 332: // 6c,6d CPU リセット ! 333: // 6e,6f 68-6b と同じパターンの気がする ! 334: // 70-7f SubRAM ! 335: // 80-9f アドレスの残像? ! 336: // a0-af 偶数(a0,a2,..)は残像、奇数(a1,a3,..)は ff ! 337: // b0-bf 偶数(b0,b2,..)は残像、奇数(b1,b3,..)は LUNAFB ! 338: // c0-cf 偶数(c0,c2,..)は残像、奇数(c1,c3,..)は BT454(BFFF、N=4) ! 339: // d0-df 偶数(d0,d2,..)は残像、奇数(d1,d3,..)はたぶん CRTC2 ! 340: // (CRTC2 は今の所 $ff しか観測できていないので詳細不明) ! 341: // e0,e1 SPC (BFFF、N=16 でミラー) ! 342: // e2-e7 繋がってない? 概ね $f4'00'c0'01 が読める。 ! 343: // FUSEROM などの繋がってないところと同じパターンが読める。 ! 344: // f0,f1 たぶん Lance (BFFF、N=2) ! 345: // f2-fd $ff ! 346: // fe $fe00'0000-$fef7'ffff まではアドレスの残像 ! 347: // $fef8'0000-$feff'ffff までは $ff ! 348: // ff たぶん CMMU 以外はアドレスの残像 ! 349: // ! 350: // アドレスの残像(?) は ! 351: // - バイトアクセスならアドレスの下位 8bit、 ! 352: // - ワードアクセスならアドレスの下位 16bit、 ! 353: // - ロングワードアクセスならアドレス 32bit ! 354: // が見え、時々 $ffffffff が混ざるようだ ($00..$ff までのうち2個程度)。 ! 355: // 一方、デバイスに接続されていない下位24ビットあるいは28ビットに ! 356: // $f400c001 が見えるエリアも多いが、$f400c001 は jmp r1 命令なので、おそらく ! 357: // PROM モニターがこのダンプを表示する際のプログラムコードがデータバスバッファ ! 358: // を通過したのが見えている可能性がある。 ! 359: // いずれも再現は難しいので見なかったことにする。 ! 360: ! 361: /*static*/ const uint8 ! 362: Luna88kMainbus::maptable[256] = { ! 363: // RAM は Init() で動的に配置する (64MB なら 00..03 の4枠)。 ! 364: // RAM 未実装領域については要調査。少なくとも末尾に BUSERR がないと ! 365: // OpenBSD カーネルが起動しない。 ! 366: // 先頭 64MB の空間 (00..03) だけは、PROM 1.20 ではメモリが無いときでも ! 367: // バスエラーにならないことを期待しているので NONE にしておく。 ! 368: NONE, NONE, NONE, NONE, BUSERR, BUSERR, BUSERR, BUSERR, // 00 ! 369: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 08 ! 370: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 10 ! 371: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 18 ! 372: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 20 ! 373: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 28 ! 374: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 30 ! 375: BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 38 ! 376: ! 377: // LUNA-88K2 は 47 に(も?) NVRAM がいるようだ ! 378: // 69,6b,6d にも何かのコントローラ? ! 379: PROM, PROM, FUSE, FUSE, MK48, MK48, NONE, NONE, // 40 ! 380: PIO0, PIO0, NONE, NONE, PIO1, PIO1, NONE, NONE, // 48 ! 381: SIO, SIO, NONE, NONE, NONE, NONE, NONE, NONE, // 50 ! 382: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 58 ! 383: TAS, TAS, SYSCLK, SYSCLK, SYSCTL, SYSCTL, SYSCTL, SYSCTL, // 60 ! 384: SYSCTL, SYSCTL, SYSCTL, SYSCTL, SYSCTL, SYSCTL, SYSCTL, SYSCTL, // 68 ! 385: SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, // 70 ! 386: SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, SUBRAM, // 78 ! 387: ! 388: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 80 ! 389: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 88 ! 390: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 90 ! 391: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 98 ! 392: NONE, MROM, NONE, MROM, NONE, MROM, NONE, MROM, // a0 ! 393: NONE, MROM, NONE, MROM, NONE, MROM, NONE, MROM, // a8 ! 394: NONE, LUNAFB, NONE, LUNAFB, NONE, LUNAFB, NONE, LUNAFB, // b0 ! 395: NONE, LUNAFB, NONE, LUNAFB, NONE, LUNAFB, NONE, LUNAFB, // b8 ! 396: ! 397: // d0 にボードチェックレジスタ? ! 398: NONE, BT45x, NONE, BT45x, NONE, BT45x, NONE, BT45x, // c0 ! 399: NONE, BT45x, NONE, BT45x, NONE, BT45x, NONE, BT45x, // c8 ! 400: NONE, CRTC2, NONE, CRTC2, NONE, CRTC2, NONE, CRTC2, // d0 ! 401: NONE, CRTC2, NONE, CRTC2, NONE, CRTC2, NONE, CRTC2, // d8 ! 402: SCSI, SCSI, NONE, NONE, NONE, NONE, NONE, NONE, // e0 ! 403: NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // e8 ! 404: LANCE, LANCE, NONE, NONE, NONE, NONE, NONE, NONE, // f0 ! 405: NONE, NONE, NONE, NONE, NONE, NONE, NONE, CMMU, // f8 ! 406: }; ! 407: ! 408: // コンストラクタ ! 409: Luna88kMainbus::Luna88kMainbus() ! 410: { ! 411: // デバイス (順序に注意) ! 412: // BusErrDevice, NopIODevice は親コンストラクタで作成済み。 ! 413: ! 414: NEWDV(Interrupt, new SysCtlrDevice()); ! 415: NEWDV(RTC, new BusIO_BFFF<MK48T02Device>()); // required by SysClk ! 416: NEWDV(SysClk, new BusIO_BFFF<SysClkDevice>()); // required by PROMEmu ! 417: if (gMainApp.exec_file || gConfig->Find("prom-image").AsString().empty()) { ! 418: NEWDV(PROM, new Luna88kPROMEmuDevice()); ! 419: } else { ! 420: NEWDV(PROM, new PROMDevice()); // required by RAM ! 421: } ! 422: NEWDV(PROM0, new PROM0Device()); ! 423: NEWDV(MainRAM, new MainRAMDevice()); // required by PartialRAM ! 424: NEWDV(PartialRAM, new PartialRAMDevice()); ! 425: NEWDV(FuseROM, new BusIO_BFFF<FuseROMDevice>()); ! 426: NEWDV(PIO0, new BusIO_BFFF<PIO0Device>()); ! 427: NEWDV(PIO1, new BusIO_BFFF<PIO1Device>()); ! 428: NEWDV(SIO, new BusIO_BFFF<SIODevice>()); ! 429: NEWDV(TAS, new BusIO_BFFF<TASDevice>()); ! 430: NEWDV(SubRAM, new SubRAMDevice(128)); ! 431: NEWDV(BT45x, new BT45xDevice()); // required by Lunafb ! 432: NEWDV(PlaneVRAM, new LunafbDevice()); ! 433: NEWDV(CRTC2, new BusIO_BFFF<CRTC2Device>()); ! 434: NEWDV(SPC, new BusIO_BFFF<SPCDevice>()); ! 435: NEWDV(Ethernet, new BusIO_WF<LanceDevice>()); ! 436: NEWDV(CMMU, new CMMUDevice()); ! 437: ! 438: // デバイスマップから devtable を作成 ! 439: MakeDevtable(maptable); ! 440: } ! 441: ! 442: // デストラクタ ! 443: Luna88kMainbus::~Luna88kMainbus() ! 444: { ! 445: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.