Annotation of nono/vm/mainbus_virt68k.cpp, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2024 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: //
        !             8: // メインバス (virt68k)
        !             9: //
        !            10: 
        !            11: // IODevice
        !            12: //   +-- MainbusBaseDevice (InitMainbus() と FC アクセスを持つ)
        !            13: //   |    +-- MainbusDevice (これがメインバス、システムに1つ)
        !            14: //   |    |    +-- Mainbus24Device (上位8ビットがテーブルで表せるメインバス)
        !            15: //   |    |    |    +-- LunaMainbus
        !            16: //   |    |    |    |    +-- Luna1Mainbus
        !            17: //   |    |    |    |    +-- Luna88kMainbus
        !            18: //   |    |    |    +-- NewsMainbus
        !            19: //   |    |    |    |
        !            20: //   |    |    |    |  +----------------+
        !            21: //   |    |    |    +--| Virt68kMainbus |
        !            22: //   |    |    |       +----------------+
        !            23: //   |    |    |
        !            24: //   |    |    +-- X68kMainbus
        !            25: //   |    +-- X68kIODevice
        !            26: //   +-- XPbusDevice
        !            27: 
        !            28: #include "mainbus_virt68k.h"
        !            29: #include "interrupt.h"
        !            30: #include "mainapp.h"
        !            31: #include "mainram.h"
        !            32: #include "v68kio.h"
        !            33: 
        !            34: // コンストラクタ
        !            35: Virt68kMainbus::Virt68kMainbus()
        !            36: {
        !            37:        NEWDV(BusErr, new BusErrDevice());
        !            38:        NEWDV(Interrupt, new Virt68kInterrupt());
        !            39:        NEWDV(MainRAM, new MainRAMDevice());
        !            40:        NEWDV(V68kIO, new V68kIODevice());
        !            41: 
        !            42:        // $ff'000000 以降がデバイス領域。
        !            43:        // メインメモリは Init() で設定する。
        !            44:        for (int i = 0; i < devtable.size() - 1; i++) {
        !            45:                devtable[i] = pBusErr.get();
        !            46:        }
        !            47:        devtable[0xff] = pV68kIO.get();
        !            48: 
        !            49:        // 2MB ずつ 32bit 全域。
        !            50:        acc.resize(2048);
        !            51:        monitor_accstat.SetSize(80, 2 + 32);
        !            52: }
        !            53: 
        !            54: // デストラクタ
        !            55: Virt68kMainbus::~Virt68kMainbus()
        !            56: {
        !            57: }
        !            58: 
        !            59: // メインバスの初期化
        !            60: bool
        !            61: Virt68kMainbus::InitMainbus()
        !            62: {
        !            63:        // RAM は容量が確定した後のここで配置。
        !            64:        // 16MB 単位になっている。
        !            65:        auto mainram = dynamic_cast<MainRAMDevice *>(pMainRAM.get());
        !            66:        int ramsize_MB = mainram->GetSizeMB();
        !            67:        for (int i = 0; i < ramsize_MB / 16; i++) {
        !            68:                devtable[i] = mainram;
        !            69:        }
        !            70: 
        !            71:        // アクセス状況用のマップを作成。
        !            72:        InitAccStat();
        !            73: 
        !            74:        return true;
        !            75: }
        !            76: 
        !            77: // ブートページを切り替える。
        !            78: void
        !            79: Virt68kMainbus::SwitchBootPage(bool isram)
        !            80: {
        !            81:        // まだサポートしていない。
        !            82: }

unix.superglobalmegacorp.com

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