|
|
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 は未対応。
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.