|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2018 [email protected]
4: //
5:
6: #include "ram.h"
7: #include "vm.h"
8:
9: //
10: // メインメモリ
11: //
12: // RAM はロングワード単位でホストバイトオーダ配置なので、
13: // バイトアクセス、ワードアクセス時は HLB(), HLW() マクロを使用のこと。
14: //
15:
16: uint8 *ram;
17: int ram_size;
18: RAMDevice *gRAM;
19:
20: RAMDevice::RAMDevice()
21: {
22: logname = "ram";
23: devname = "MainRAM";
24: devaddr = 0;
25:
26: ram_size = 0;
27: ram = NULL;
28: }
29:
30: RAMDevice::~RAMDevice()
31: {
32: if (ram) {
33: delete ram;
34: ram = NULL;
35: }
36: ram_size = 0;
37: }
38:
39: bool
40: RAMDevice::Init()
41: {
42: // とりあえず。実際は設定ファイルから
43: if (gVM->GetType() == VM::TYPE_LUNA) {
44: ram_size = 16 * 1024 * 1024;
45: } else {
46: ram_size = 12 * 1024 * 1024;
47: }
48: ram = new uint8[ram_size];
49:
50: return true;
51: }
52:
53: uint64
54: RAMDevice::Read8(uint32 addr)
55: {
56: uint32 data;
57: data = ram[HLB(addr)];
58: return data;
59: }
60:
61: uint64
62: RAMDevice::Read16(uint32 addr)
63: {
64: uint32 data;
65: data = *(uint16 *)&ram[HLW(addr)];
66: return data;
67: }
68:
69: uint64
70: RAMDevice::Read32(uint32 addr)
71: {
72: uint32 data;
73: data = *(uint32 *)&ram[addr];
74: return data;
75: }
76:
77: uint64
78: RAMDevice::Write8(uint32 addr, uint32 data)
79: {
80: ram[HLB(addr)] = data;
81: return 0;
82: }
83:
84: uint64
85: RAMDevice::Write16(uint32 addr, uint32 data)
86: {
87: *(uint16 *)&ram[HLW(addr)] = data;
88: return 0;
89: }
90:
91: uint64
92: RAMDevice::Write32(uint32 addr, uint32 data)
93: {
94: *(uint32 *)&ram[addr] = data;
95: return 0;
96: }
97:
98: uint64
99: RAMDevice::Peek8(uint32 addr)
100: {
101: return ram[HLB(addr)];
102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.