Annotation of nono/vm/romemu.cpp, revision 1.1.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.