Annotation of nono/vm/romemu.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: // ROM エミュレーションデバイスの基本クラス
        !             9: //
        !            10: 
        !            11: // IODevice
        !            12: //  |
        !            13: //  +- ROMDevice (LoadROM()、ウェイト、マスク等を持つ)
        !            14: //  |   +- PROMDevice    (LUNA* の PROM)
        !            15: //  |   +- IPLROM1Device (X680x0 の IPLROM 後半)
        !            16: //  |   +- IPLROM2Device (X680x0 の IPLROM 前半)
        !            17: //  |   +- CGROMDevice   (X680x0 の CGROM)
        !            18: //  |   |
        !            19: //  |   | +--------------+
        !            20: //  |   +-| ROMEmuDevice | (ROM エミュレーションの共通部分)
        !            21: //  |     +--------------+
        !            22: //  |       |
        !            23: //  |       +- LunaPROMEmuDevice (LUNA PROM エミュレーションの共通部分)
        !            24: //  |       |   +- Luna1PROMEmuDevice   (LUNA-I の PROM エミュレーション)
        !            25: //  |       |   +- Luna88kPROMEmuDevice (LUNA-88K の PROM エミュレーション)
        !            26: //  |       +- NewsROMEmuDevice    (NEWS の ROM エミュレーション)
        !            27: //  |       +- ROM30EmuDevice      (X68030 の ROM30 エミュレーション)
        !            28: //  |       +- Virt68kROMEmuDevice (virt-m68k の IPLROM 相当の何か)
        !            29: //  |
        !            30: //  +- PROM0Device   (LUNA* のブートページ切り替え用プロキシ)
        !            31: //  +- IPLROM0Device (X680x0 のブートページ切り替え用プロキシ)
        !            32: 
        !            33: #include "romemu.h"
        !            34: 
        !            35: // コンストラクタ
        !            36: ROMEmuDevice::ROMEmuDevice(uint objid_)
        !            37:        : inherited(objid_)
        !            38: {
        !            39: }
        !            40: 
        !            41: // デストラクタ
        !            42: ROMEmuDevice::~ROMEmuDevice()
        !            43: {
        !            44: }
        !            45: 
        !            46: busdata
        !            47: ROMEmuDevice::Read(busaddr addr)
        !            48: {
        !            49:        uint64 romdata;
        !            50: 
        !            51:        // ROMIO が反応すればそっちを返す。そうでなければ ROM の内容を返す。
        !            52:        romdata = ReadROMIO(addr);
        !            53:        if ((int64)romdata >= 0) {
        !            54:                busdata data = romdata;
        !            55:                data |= BusData::Size4;
        !            56:                return data;
        !            57:        } else {
        !            58:                return inherited::Read(addr);
        !            59:        }
        !            60: }
        !            61: 
        !            62: busdata
        !            63: ROMEmuDevice::Write(busaddr addr, uint32 data)
        !            64: {
        !            65:        // ROMIO が反応するかどうか。どちらにしても規定の応答を返す。
        !            66:        if (WriteROMIO(addr, data) == true) {
        !            67:                busdata r = write_op;
        !            68:                r |= BusData::Size4;
        !            69:                return r;
        !            70:        } else {
        !            71:                return inherited::Write(addr, data);
        !            72:        }
        !            73: }
        !            74: 
        !            75: // 必要なら継承側でオーバーライドする。
        !            76: uint64
        !            77: ROMEmuDevice::ReadROMIO(busaddr addr)
        !            78: {
        !            79:        return (uint64)-1;
        !            80: }
        !            81: 
        !            82: // 必要なら継承側でオーバーライドする。
        !            83: bool
        !            84: ROMEmuDevice::WriteROMIO(busaddr addr, uint32 data)
        !            85: {
        !            86:        return false;
        !            87: }
        !            88: 
        !            89: // Peek は未対応。

unix.superglobalmegacorp.com

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