Annotation of nono/vm/rom.cpp, revision 1.1.1.6

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"
1.1.1.5   root        9: #include "mpu.h"
1.1       root       10: 
                     11: //
                     12: // ROM 共通部
                     13: //
                     14: // ROM はビッグエンディアンのままメモリに置かれるので、
                     15: // 必要ならアクセス時に都度変換すること。
                     16: //
                     17: 
1.1.1.6 ! root       18: ROMDevice::ROMDevice(const std::string& objname_)
        !            19:        : inherited(objname_)
1.1       root       20: {
                     21:        mask = 0xffffffff;
                     22: }
                     23: 
                     24: ROMDevice::~ROMDevice()
                     25: {
                     26: }
                     27: 
1.1.1.4   root       28: void
                     29: ROMDevice::ResetHard()
                     30: {
                     31:        wait = 0;
                     32: }
                     33: 
1.1       root       34: // name の ROM を探してロードする。
                     35: // name はパスを含まないファイル名のみ。パスはこちらで探す。
                     36: // mem は file をさす。
                     37: // 失敗した場合はエラーメッセージを表示して false を返す。
                     38: bool
                     39: ROMDevice::LoadROM(const char *name, int size)
                     40: {
1.1.1.3   root       41:        filename = gMainApp.SearchFile(name);
1.1       root       42:        if (filename.empty()) {
1.1.1.2   root       43:                warnx("%s not found", name);
1.1       root       44:                return false;
                     45:        }
                     46: 
                     47:        // オープン
1.1.1.3   root       48:        file.SetFilename(filename);
                     49:        file.SetDispname(string_format("ROM \"%s\"", filename.c_str()));
                     50:        mem = file.OpenRdOnly((off_t)size);
                     51:        if (mem == NULL) {
1.1       root       52:                return false;
                     53:        }
                     54: 
                     55:        return true;
                     56: }
                     57: 
                     58: uint64
                     59: ROMDevice::Read8(uint32 addr)
                     60: {
1.1.1.4   root       61:        gMPU->AddCycle(wait);
1.1       root       62:        return mem[addr & mask];
                     63: }
                     64: 
                     65: uint64
                     66: ROMDevice::Read16(uint32 addr)
                     67: {
1.1.1.4   root       68:        gMPU->AddCycle(wait);
1.1       root       69:        uint16 data;
                     70:        data = *(uint16 *)&mem[addr & mask];
                     71:        return be16toh(data);
                     72: }
                     73: 
                     74: uint64
                     75: ROMDevice::Read32(uint32 addr)
                     76: {
1.1.1.4   root       77:        gMPU->AddCycle(wait);
1.1       root       78:        uint32 data;
                     79:        data = *(uint32 *)&mem[addr & mask];
                     80:        return be32toh(data);
                     81: }
                     82: 
                     83: uint64
                     84: ROMDevice::Write8(uint32 addr, uint32 data)
                     85: {
1.1.1.4   root       86:        gMPU->AddCycle(wait);   // ?
1.1       root       87:        return (uint64)-1;
                     88: }
                     89: 
                     90: uint64
                     91: ROMDevice::Write16(uint32 addr, uint32 data)
                     92: {
1.1.1.4   root       93:        gMPU->AddCycle(wait);   // ?
1.1       root       94:        return (uint64)-1;
                     95: }
                     96: 
                     97: uint64
                     98: ROMDevice::Write32(uint32 addr, uint32 data)
                     99: {
1.1.1.4   root      100:        gMPU->AddCycle(wait);   // ?
1.1       root      101:        return (uint64)-1;
                    102: }
                    103: 
                    104: uint64
                    105: ROMDevice::Peek8(uint32 addr)
                    106: {
                    107:        return mem[addr & mask];
                    108: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.