Annotation of nono/vm/vm_luna.cpp, revision 1.1.1.5

1.1       root        1: //
                      2: // nono
1.1.1.2   root        3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
                      7: #include "vm_luna.h"
                      8: #include "aout.h"
                      9: #include "bitmap.h"
                     10: #include "bt454.h"
                     11: #include "busio.h"
1.1.1.2   root       12: #include "cmmu.h"
                     13: #include "config.h"
1.1       root       14: #include "crtc2.h"
                     15: #include "ethernet.h"
                     16: #include "fuserom.h"
1.1.1.4   root       17: #include "interrupt.h"
1.1       root       18: #include "lance.h"
                     19: #include "lcd.h"
                     20: #include "lunakbd.h"
                     21: #include "mainapp.h"
                     22: #include "mk48t02.h"
1.1.1.2   root       23: #include "mpu680x0.h"
                     24: #include "mpu88xx0.h"
1.1       root       25: #include "pio.h"
1.1.1.2   root       26: #include "prom.h"
1.1       root       27: #include "ram.h"
1.1.1.5 ! root       28: #include "ram_partial.h"
1.1       root       29: #include "renderer.h"
1.1.1.5 ! root       30: #include "romemu_luna1.h"
1.1       root       31: #include "romemu_luna88k.h"
                     32: #include "scheduler.h"
                     33: #include "sio.h"
                     34: #include "spc.h"
                     35: #include "sysclk.h"
1.1.1.2   root       36: #include "sysctlr.h"
                     37: #include "tas.h"
1.1       root       38: #include "zram.h"
                     39: 
1.1.1.5 ! root       40: //
        !            41: // LUNA 共通部
        !            42: //
        !            43: 
        !            44: // デバイスマップ用の識別子
        !            45: enum {
        !            46:        NONE,
        !            47:        BUSERR,
        !            48:        PROM,
        !            49:        MK48,
        !            50:        PIO0,
        !            51:        PIO1,
        !            52:        SIO,
        !            53:        TAS,
        !            54:        SYSCLK,
        !            55:        ZRAM,
        !            56:        MROM,
        !            57:        BITMAP,
        !            58:        BT454,
        !            59:        CRTC2,
        !            60:        SCSI,
        !            61:        LANCE,
        !            62:        FUSE,
        !            63:        SYSCTL,
        !            64:        CMMU,
        !            65: };
        !            66: 
        !            67: // コンストラクタ
        !            68: VM_LUNA::VM_LUNA()
        !            69: {
        !            70:        // この機種に不要なパラメータはここで削除する
        !            71:        // (機種が決まるより前に全機種の設定の和集合を用意してあるため)。
        !            72:        // o LUNA-I は 68881 固定なので不要。
        !            73:        // o これは m68k パラメータなので LUNA88K には不要。
        !            74:        gConfig->Delete("mpu-has-fpu");
        !            75: 
        !            76:        // LUNA 共通だしここで作成しておく
        !            77:        gNull.reset(new NullDevice());
        !            78: }
        !            79: 
        !            80: // デストラクタ
        !            81: VM_LUNA::~VM_LUNA()
        !            82: {
        !            83: }
        !            84: 
        !            85: // デバイスマップから devtable を作成 (ここは共通にできる)
        !            86: void
        !            87: VM_LUNA::MakeDevtable(const uint8 *maptable)
        !            88: {
        !            89:        for (uint i = 0; i < countof(::devtable); i++) {
        !            90:                IODevice *d;
        !            91:                switch (maptable[i]) {
        !            92:                 case NONE:             d = gNull.get();                break;
        !            93:                 case BUSERR:   d = buserr.get();               break;
        !            94:                 case PROM:             d = prom.get();                 break;
        !            95:                 case MK48:             d = gRTC.get();                 break;
        !            96:                 case PIO0:             d = gPIO0.get();                break;
        !            97:                 case PIO1:             d = gPIO1.get();                break;
        !            98:                 case SIO:              d = gSIO.get();                 break;
        !            99:                 case TAS:              d = gTAS.get();                 break;
        !           100:                 case SYSCLK:   d = gSysClk.get();              break;
        !           101:                 case ZRAM:             d = gZRAM.get();                break;
        !           102:                 case MROM:             d = gNull.get();                break;
        !           103:                 case BITMAP:   d = gBitmap.get();              break;
        !           104:                 case BT454:    d = gBT454.get();               break;
        !           105:                 case CRTC2:    d = gCRTC2.get();               break;
        !           106:                 case SCSI:             d = gSPC.get();                 break;
        !           107:                 case LANCE:    d = gEthernet.get();    break;
        !           108:                 case FUSE:             d = gFuseROM.get();             break;
        !           109:                 case SYSCTL:   d = gInterrupt.get();   break;
        !           110:                 case CMMU:             d = gCMMU.get();                break;
        !           111:                 default:
        !           112:                        __unreachable();
        !           113:                }
        !           114:                ::devtable[i] = d;
        !           115:        }
        !           116: }
        !           117: 
        !           118: // 初期化
        !           119: bool
        !           120: VM_LUNA::Init()
        !           121: {
        !           122:        // 親クラス
        !           123:        if (inherited::Init() == false) {
        !           124:                return false;
        !           125:        }
        !           126: 
        !           127:        // RAM 容量が確定したので、ここで devtable に RAM を配置。
        !           128:        int ram_size_MB = gRAM->GetSizeMB();
        !           129:        int i = 0;
        !           130:        while (ram_size_MB >= 16) {
        !           131:                // 16MB あれば RAM が直接担当
        !           132:                ::devtable[i++] = gRAM.get();
        !           133:                ram_size_MB -= 16;
        !           134:        }
        !           135:        // 16MB 未満なら PartialRAM が担当
        !           136:        if (ram_size_MB > 0) {
        !           137:                ::devtable[i] = gPartialRAM.get();
        !           138:        }
        !           139: 
        !           140:        return true;
        !           141: }
        !           142: 
        !           143: void
        !           144: VM_LUNA::PowerButton()
        !           145: {
        !           146:        // LUNA の電源ボタンは電源オンにしか使わない。
        !           147:        //
        !           148:        // 電源       ボタン
        !           149:        // ON   PUSH            (何も起きない)
        !           150:        // OFF  PUSH            電源オン
        !           151: 
        !           152:        // デバイスに指示
        !           153:        DevicePowerOn();
        !           154: }
        !           155: 
        !           156: 
        !           157: //
        !           158: // LUNA-I
        !           159: //
        !           160: 
        !           161: // LUNA-I のデバイス割り当て表 (上位8ビット)
1.1       root      162: //
                    163: // 仕様      実際
                    164: // 00  00              メインメモリ
                    165: // --  01..03  二重バスフォールトするようだ
                    166: // --  04..0f  何かよく分からないものが読める
                    167: // --  10..3f  BUSERR
                    168: // 41  40..43  PROM (B、N=128KBでミラー)
                    169: // 45  44..47  mk48t02 (B、N=2048でミラー)
                    170: // 49  48..4b  pio0 (B、N=4でミラー)
                    171: // 4d  4c..4f  pio1 (B、N=4でミラー)
                    172: // 51  50..53  sio  (BB、N=4でミラー)
                    173: // --  54..5f  0xff が読めるようだ
                    174: // 61  60..61  TAS (B、N=1でミラー)
                    175: // 63  62..63  システムクロック (B、N=1でミラー)
                    176: // --           以降TASとSysClkで2枠ずつ。また無効ビットの読み出しは
                    177: // --          必ずしも Hi とは限らず不安定のようだ。
                    178: // 71  70..7f  3ポートRAM (B、N=128KBでミラー)
                    179: // 81  80..    BUSERR (オンボード拡張スロットA)
                    180: // 83    ..8f  BUSERR (オンボード拡張スロットB)
                    181: // 91  90..9f  0xff が読めるようだ (PC-9000 拡張スロット)
                    182: //
                    183: // a1                  マスクROM
                    184: //              a0,a2,a4,... BUSERR
                    185: //              a1,a3,a5,... マスクROM(なければ0xffが読める)
                    186: // b1                  ビットマップ
                    187: //              b0,b2,b4,... BUSERR
                    188: //              b1,b3,b5,... ビットマップ (内訳は bitmap.cpp 参照)
                    189: // c1                  パレット
                    190: //              c0,c2,c4,... BUSERR
                    191: //              c1,c3,c5,... パレット (B、N=4でミラー)
                    192: // d1                  CRTC-II
                    193: //              d0,d2,d4,... BUSERR
                    194: //              d1,d3,d5,... CRTC-II (B、N=2でミラー)
                    195: //
                    196: // e1  e0..e3  SCSI (BBBB、N=16 でミラー)
                    197: // --  e4..ef  0xff が読めるようだが不安定。
                    198: // f1  f0..f3  LANCE (WW、N=2 でミラー)
                    199: // --  f4..ff  0xff が読めるようだ
                    200: 
                    201: /*static*/ const uint8
1.1.1.5 ! root      202: VM_LUNA1::maptable[256] = {
        !           203:        // (00,)01,02,03 は実際にはたぶんパリティチェックが入っていて(?)
        !           204:        // 非実装領域にアクセスすると二重バスフォールトになるがそれは未対応。
        !           205:        // RAM は Init() で動的に配置する。
        !           206:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 00
1.1       root      207:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 08
                    208:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 10
                    209:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 18
                    210:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 20
                    211:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 28
                    212:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 30
                    213:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 38
                    214: 
                    215:        PROM,   PROM,   PROM,   PROM,   MK48,   MK48,   MK48,   MK48,   // 40
                    216:        PIO0,   PIO0,   PIO0,   PIO0,   PIO1,   PIO1,   PIO1,   PIO1,   // 48
                    217:        SIO,    SIO,    SIO,    SIO,    NONE,   NONE,   NONE,   NONE,   // 50
                    218:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 58
                    219:        TAS,    TAS,    SYSCLK, SYSCLK, TAS,    TAS,    SYSCLK, SYSCLK, // 60
                    220:        TAS,    TAS,    SYSCLK, SYSCLK, TAS,    TAS,    SYSCLK, SYSCLK, // 68
                    221:        ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   // 70
                    222:        ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   // 78
                    223: 
                    224:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 80
                    225:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 88
                    226:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 90
                    227:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 98
                    228:        BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   // a0
                    229:        BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   // a8
                    230:        BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, // b0
                    231:        BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, // b8
                    232: 
                    233:        BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  // c0
                    234:        BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  // c8
                    235:        BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  // d0
                    236:        BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  // d8
                    237:        SCSI,   SCSI,   SCSI,   SCSI,   NONE,   NONE,   NONE,   NONE,   // e0
                    238:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // e8
                    239:        LANCE,  LANCE,  LANCE,  LANCE,  NONE,   NONE,   NONE,   NONE,   // f0
                    240:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // f8
                    241: };
                    242: 
                    243: // コンストラクタ
1.1.1.5 ! root      244: VM_LUNA1::VM_LUNA1()
1.1       root      245: {
1.1.1.2   root      246:        // 機種固有パラメータ
                    247:        // MPU クロックの初期値は機種ごとに異なる。単位は MHz
                    248:        gConfig->SetDefault("mpu-clock", 20);
                    249:        // RAM 初期値は MAX にしておく
                    250:        gConfig->SetDefault("ram-size", 16);
                    251:        // SPC の入力クロック (おそらく 6.144MHz = 163ns が入ってる)
                    252:        gConfig->Add("!spc-tCLF", 163);
                    253:        // LUNA-I のクロック割り込みは 60Hz
                    254:        gConfig->Add("!sysclk-period", 16.666667_msec);
                    255: 
1.1       root      256:        // デバイス (順序に注意)
1.1.1.5 ! root      257:        // BusErrDevice, NullDevice は親コンストラクタで作成済み。
1.1.1.2   root      258: 
1.1.1.4   root      259:        gMPU.reset(new MPU680x0Device(0x41000000));             // required by Scheduler
1.1.1.2   root      260:        gScheduler.reset(new Scheduler());                              // required by *
1.1.1.4   root      261:        gInterrupt.reset(new LunaInterrupt());
1.1.1.5 ! root      262:        gRAM.reset(new RAMDevice());                                    // required by PartialRAM
        !           263:        gPartialRAM.reset(new PartialRAMDevice());
1.1.1.2   root      264:        gEthernet.reset(new BusIO_W<LanceDevice>());    // required by PROM
                    265:        if (gMainApp.host_file || gConfig->Find("prom-image").AsString().empty()) {
1.1.1.5 ! root      266:                prom.reset(new Luna1PROMEmuDevice());
1.1       root      267:        } else {
1.1.1.2   root      268:                prom.reset(new PROMDevice());
1.1       root      269:        }
                    270:        gRTC.reset(new BusIO_B<MK48T02Device>());
                    271:        gPIO0.reset(new BusIO_B<PIO0Device>());
                    272:        gPIO1.reset(new BusIO_B<PIO1Device>());
                    273:        gSIO.reset(new BusIO_BB<SIODevice>());
1.1.1.4   root      274:        gSysClk.reset(new BusIO_B<SysClkDevice>());
1.1.1.2   root      275:        gTAS.reset(new BusIO_B<TASDevice>());
1.1       root      276:        gZRAM.reset(new ZRAMDevice());
1.1.1.2   root      277:        gBitmap.reset(new BitmapDevice());                              // required by BT454
1.1       root      278:        gBT454.reset(new BusIO_B<BT454Device>());
1.1.1.5 ! root      279:        gCRTC2.reset(new BusIO_B<CRTC2Device>());
1.1       root      280:        gSPC.reset(new BusIO_BBBB<SPCDevice>());
                    281: 
                    282:        gLCD.reset(new LCDDevice());
                    283:        gKeyboard.reset(new LunaKeyboard());
                    284:        gRenderer.reset(new LunaRenderer());
                    285: 
                    286:        // デバイスマップから devtable を作成
1.1.1.5 ! root      287:        MakeDevtable(maptable);
1.1       root      288: }
                    289: 
                    290: // デストラクタ
1.1.1.5 ! root      291: VM_LUNA1::~VM_LUNA1()
1.1       root      292: {
                    293: }
                    294: 
                    295: //
                    296: // LUNA88K
                    297: //
                    298: 
                    299: /*static*/ const uint8
                    300: VM_LUNA88K::maptable[256] = {
1.1.1.5 ! root      301:        // RAM は Init() で動的に配置する。
        !           302:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 00
1.1       root      303:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 08
                    304:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 10
                    305:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 18
                    306:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 20
                    307:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 28
                    308:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 30
                    309:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 38
                    310: 
                    311:        // LUNA88K2 は 47 に(も?) NVRAM がいるようだ
                    312:        // 69,6b,6d にも何かのコントローラ?
                    313:        PROM,   PROM,   PROM,   FUSE,   MK48,   MK48,   MK48,   MK48,   // 40
                    314:        PIO0,   PIO0,   PIO0,   PIO0,   PIO1,   PIO1,   PIO1,   PIO1,   // 48
                    315:        SIO,    SIO,    SIO,    SIO,    NONE,   NONE,   NONE,   NONE,   // 50
                    316:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 58
1.1.1.2   root      317:        TAS,    TAS,    SYSCLK, SYSCLK, NONE,   SYSCTL, NONE,   NONE,   // 60
                    318:        NONE,   SYSCTL, NONE,   NONE,   NONE,   SYSCTL, NONE,   NONE,   // 68
1.1       root      319:        ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   // 70
                    320:        ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   ZRAM,   // 78
                    321: 
                    322:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 80
                    323:        BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 88
                    324:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 90
                    325:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // 98
                    326:        BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   // a0
                    327:        BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   BUSERR, MROM,   // a8
                    328:        BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, // b0
                    329:        BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, BUSERR, BITMAP, // b8
                    330: 
                    331:        // d0 にボードチェックレジスタ?
                    332:        BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  // c0
                    333:        BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  BUSERR, BT454,  // c8
                    334:        BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  // d0
                    335:        BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  BUSERR, CRTC2,  // d8
                    336:        SCSI,   SCSI,   SCSI,   SCSI,   NONE,   NONE,   NONE,   NONE,   // e0
                    337:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   // e8
                    338:        LANCE,  LANCE,  LANCE,  LANCE,  NONE,   NONE,   NONE,   NONE,   // f0
1.1.1.2   root      339:        NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   NONE,   CMMU,   // f8
1.1       root      340: };
                    341: 
                    342: // コンストラクタ
                    343: VM_LUNA88K::VM_LUNA88K()
                    344: {
1.1.1.2   root      345:        // 機種固有パラメータ
                    346:        // MPU クロックの初期値は機種ごとに異なる。単位は MHz
                    347:        gConfig->SetDefault("mpu-clock", 25);
                    348:        // RAM 初期値は MAX にしておく
1.1.1.3   root      349:        gConfig->SetDefault("ram-size", 64);
1.1.1.2   root      350:        // SPC の入力クロック (XXX LUNA-I と同じ?)
                    351:        gConfig->Add("!spc-tCLF", 163);
                    352:        // LUNA-II, LUNA88K, LUNA88K2 のクロック割り込みは 100Hz らしい
                    353:        gConfig->Add("!sysclk-period", 10_msec);
                    354: 
1.1.1.5 ! root      355:        // この機種に不要なパラメータはここで削除する
        !           356:        // (機種が決まるより前に全機種の設定の和集合を用意してあるため)
        !           357:        gConfig->Delete("mpu-has-fpu");
        !           358: 
1.1       root      359:        // デバイス (順序に注意)
1.1.1.5 ! root      360:        // BusErrDevice, NullDevice は親コンストラクタで作成済み。
1.1.1.2   root      361: 
1.1.1.4   root      362:        gMPU.reset(new MPU88xx0Device(0x41000000));             // required by Scheduler
1.1.1.2   root      363:        gScheduler.reset(new Scheduler());                              // required by *
1.1.1.4   root      364:        gInterrupt.reset(new SysCtlrDevice());
1.1.1.5 ! root      365:        gRAM.reset(new RAMDevice());                                    // required by PartialRAM
        !           366:        gPartialRAM.reset(new PartialRAMDevice());
1.1.1.2   root      367:        if (gMainApp.host_file || gConfig->Find("prom-image").AsString().empty()) {
                    368:                prom.reset(new Luna88kPROMEmuDevice());
1.1       root      369:        } else {
1.1.1.2   root      370:                prom.reset(new PROMDevice());
1.1       root      371:        }
                    372:        gRTC.reset(new BusIO_BFFF<MK48T02Device>());
1.1.1.2   root      373:        gPIO0.reset(new BusIO_BFFF<PIO0Device>());
                    374:        gPIO1.reset(new BusIO_BFFF<PIO1Device>());
1.1       root      375:        gSIO.reset(new BusIO_BFFF<SIODevice>());
1.1.1.4   root      376:        gSysClk.reset(new BusIO_BFFF<SysClkDevice>());
1.1.1.2   root      377:        gTAS.reset(new BusIO_BFFF<TASDevice>());
1.1       root      378:        gZRAM.reset(new ZRAMDevice());
1.1.1.2   root      379:        gBitmap.reset(new BitmapDevice());                              // required by BT454
1.1       root      380:        gBT454.reset(new BusIO_B<BT454Device>());
1.1.1.5 ! root      381:        gCRTC2.reset(new BusIO_BFFF<CRTC2Device>());
1.1       root      382:        gSPC.reset(new BusIO_BFFF<SPCDevice>());
1.1.1.2   root      383:        gEthernet.reset(new BusIO_WF<LanceDevice>());   // required by FuseROM
1.1.1.5 ! root      384:        gFuseROM.reset(new BusIO_BFFF<FuseROMDevice>());
1.1.1.2   root      385:        gCMMU.reset(new CMMUDevice());
1.1       root      386: 
                    387:        gLCD.reset(new LCDDevice());
                    388:        gKeyboard.reset(new LunaKeyboard());
                    389:        gRenderer.reset(new LunaRenderer());
                    390: 
                    391:        // デバイスマップから devtable を作成
1.1.1.5 ! root      392:        MakeDevtable(maptable);
1.1       root      393: }
                    394: 
                    395: // デストラクタ
                    396: VM_LUNA88K::~VM_LUNA88K()
                    397: {
                    398: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.