|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2017 [email protected]
4: //
5:
6: #include "device.h"
7: #include "vm.h"
8:
9: // 全デバイスリスト
10: std::vector<Device *> gDevices;
11:
12: //
13: // Device
14: //
15:
16: // コンストラクタ
17: Device::Device()
18: {
19: gDevices.push_back(this);
20: }
21:
22: // デストラクタ
23: Device::~Device()
24: {
25: }
26:
27: bool
28: Device::Create()
29: {
30: return true;
31: }
32:
33: bool
34: Device::Init()
35: {
36: return true;
37: }
38:
39: bool
40: Device::Apply()
41: {
42: return true;
43: }
44:
45: bool
46: Device::PowerOn()
47: {
48: return true;
49: }
50:
51: bool
52: Device::PowerOff()
53: {
54: return true;
55: }
56:
57: // 本体リセットスイッチによるリセット
58: void
59: Device::ResetHard()
60: {
61: }
62:
63: // MPU の RESET 命令によるリセット
64: void
65: Device::ResetSoft()
66: {
67: }
68:
69:
70: //
71: // IODevice
72: //
73:
74: // コンストラクタ
75: IODevice::IODevice()
76: {
77: devaddr = 0;
78: devlen = 0;
79: }
80:
81: // デストラクタ
82: IODevice::~IODevice()
83: {
84: }
85:
86: uint64
87: IODevice::Read8(uint32 addr)
88: {
89: return 0xff;
90: }
91:
92: uint64
93: IODevice::Read16(uint32 addr)
94: {
95: return (Read8(addr) << 8) | Read8(addr + 1);
96: }
97:
98: uint64
99: IODevice::Read32(uint32 addr)
100: {
101: return (Read16(addr) << 16) | Read16(addr + 2);
102: }
103:
104: uint64
105: IODevice::Write8(uint32 addr, uint32 data)
106: {
107: return 0;
108: }
109:
110: uint64
111: IODevice::Write16(uint32 addr, uint32 data)
112: {
113: int64 berr;
114:
115: berr = Write8(addr, data >> 8) ;
116: if (berr < 0)
117: return berr;
118: berr = Write8(addr + 1, data & 0xff);
119: if (berr < 0)
120: return berr;
121: return 0;
122: }
123:
124: uint64
125: IODevice::Write32(uint32 addr, uint32 data)
126: {
127: int64 berr;
128:
129: berr = Write16(addr, data >> 16);
130: if (berr < 0)
131: return berr;
132: berr = Write16(addr + 2, data & 0xffff);
133: if (berr < 0)
134: return berr;
135: return 0;
136: }
137:
138: uint64
139: IODevice::Peek8(uint32 addr)
140: {
141: return 0;
142: }
143:
144:
145: //
146: // バスエラー
147: //
148:
149: // コンストラクタ
150: BusErrDevice::BusErrDevice()
151: {
152: devname = "(BusErr)";
153: devaddr = -1; // XXX どうしたもんか
154: }
155:
156: BusErrDevice::~BusErrDevice()
157: {
158: }
159:
160: uint64
161: BusErrDevice::Read8(uint32 addr)
162: {
163: return (uint64)-1;
164: }
165:
166: uint64
167: BusErrDevice::Read16(uint32 addr)
168: {
169: return (uint64)-1;
170: }
171:
172: uint64
173: BusErrDevice::Read32(uint32 addr)
174: {
175: return (uint64)-1;
176: }
177:
178: uint64
179: BusErrDevice::Write8(uint32 addr, uint32 data)
180: {
181: return (uint64)-1;
182: }
183:
184: uint64
185: BusErrDevice::Write16(uint32 addr, uint32 data)
186: {
187: return (uint64)-1;
188: }
189:
190: uint64
191: BusErrDevice::Write32(uint32 addr, uint32 data)
192: {
193: return (uint64)-1;
194: }
195:
196: uint64
197: BusErrDevice::Peek8(uint32 addr)
198: {
199: return (uint64)-1;
200: }
201:
202:
203: //
204: // 何もしないデバイス
205: //
206:
207: // コンストラクタ
208: NullDevice::NullDevice()
209: {
210: devname = "(Null)";
211: }
212:
213: NullDevice::~NullDevice()
214: {
215: }
216:
217: uint64
218: NullDevice::Read8(uint32 addr)
219: {
220: return 0xff;
221: }
222:
223: uint64
224: NullDevice::Write8(uint32 addr, uint32 data)
225: {
226: return 0;
227: }
228:
229: uint64
230: NullDevice::Peek8(uint32 addr)
231: {
232: return 0xff;
233: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.