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

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

unix.superglobalmegacorp.com

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