Annotation of nono/vm/ram.cpp, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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