|
|
1.1 root 1: //
2: // nono
1.1.1.3 ! root 3: // Copyright (C) 2020 nono project
! 4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #include "rom.h"
1.1.1.3 ! root 8: #include "mainapp.h"
! 9: #include "mystring.h"
1.1 root 10:
11: //
12: // ROM 共通部
13: //
14: // ROM はビッグエンディアンのままメモリに置かれるので、
15: // 必要ならアクセス時に都度変換すること。
16: //
17:
18: ROMDevice::ROMDevice()
19: {
20: logname = "rom";
21:
22: mask = 0xffffffff;
23: }
24:
25: ROMDevice::~ROMDevice()
26: {
27: }
28:
29: // name の ROM を探してロードする。
30: // name はパスを含まないファイル名のみ。パスはこちらで探す。
31: // mem は file をさす。
32: // 失敗した場合はエラーメッセージを表示して false を返す。
33: bool
34: ROMDevice::LoadROM(const char *name, int size)
35: {
1.1.1.3 ! root 36: filename = gMainApp.SearchFile(name);
1.1 root 37: if (filename.empty()) {
1.1.1.2 root 38: warnx("%s not found", name);
1.1 root 39: return false;
40: }
41:
42: // オープン
1.1.1.3 ! root 43: file.SetFilename(filename);
! 44: file.SetDispname(string_format("ROM \"%s\"", filename.c_str()));
! 45: mem = file.OpenRdOnly((off_t)size);
! 46: if (mem == NULL) {
1.1 root 47: return false;
48: }
49:
50: return true;
51: }
52:
53: uint64
54: ROMDevice::Read8(uint32 addr)
55: {
56: return mem[addr & mask];
57: }
58:
59: uint64
60: ROMDevice::Read16(uint32 addr)
61: {
62: uint16 data;
63: data = *(uint16 *)&mem[addr & mask];
64: return be16toh(data);
65: }
66:
67: uint64
68: ROMDevice::Read32(uint32 addr)
69: {
70: uint32 data;
71: data = *(uint32 *)&mem[addr & mask];
72: return be32toh(data);
73: }
74:
75: uint64
76: ROMDevice::Write8(uint32 addr, uint32 data)
77: {
78: return (uint64)-1;
79: }
80:
81: uint64
82: ROMDevice::Write16(uint32 addr, uint32 data)
83: {
84: return (uint64)-1;
85: }
86:
87: uint64
88: ROMDevice::Write32(uint32 addr, uint32 data)
89: {
90: return (uint64)-1;
91: }
92:
93: uint64
94: ROMDevice::Peek8(uint32 addr)
95: {
96: return mem[addr & mask];
97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.