--- nono/vm/gvram.cpp 2026/04/29 17:04:32 1.1.1.2 +++ nono/vm/gvram.cpp 2026/04/29 17:05:10 1.1.1.6 @@ -1,37 +1,43 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // -#include "gvram.h" -#include "vicon.h" - // // GVRAM // + // GVRAM はワード単位でホストバイトオーダ配置なので、 // バイトアクセス時は HB() マクロを使用のこと。 -// -std::unique_ptr gGVRAM; +#include "gvram.h" +#include "mpu.h" +#include "videoctlr.h" + +// グローバル参照用 +GVRAMDevice *gGVRAM; +// コンストラクタ GVRAMDevice::GVRAMDevice() + : inherited("GVRAM") { - logname = "gvram"; - devname = "GVRAM"; devaddr = 0xc00000; devlen = 0x200000; // XXX とりあえず mem.reset(new uint8[devlen]); } +// デストラクタ GVRAMDevice::~GVRAMDevice() { + gGVRAM = NULL; } uint64 GVRAMDevice::Read8(uint32 addr) { + gMPU->AddCycle(9); // Inside/Out p.135 uint32 offset = addr - devaddr; return mem[HB(offset)]; } @@ -39,6 +45,7 @@ GVRAMDevice::Read8(uint32 addr) uint64 GVRAMDevice::Read16(uint32 addr) { + gMPU->AddCycle(9); // Inside/Out p.135 uint32 offset = addr - devaddr; return *(uint16 *)&mem[offset]; } @@ -46,6 +53,7 @@ GVRAMDevice::Read16(uint32 addr) uint64 GVRAMDevice::Write8(uint32 addr, uint32 data) { + gMPU->AddCycle(9); // Inside/Out p.135 uint32 offset = addr - devaddr; mem[HB(offset)] = data; return 0; @@ -54,6 +62,7 @@ GVRAMDevice::Write8(uint32 addr, uint32 uint64 GVRAMDevice::Write16(uint32 addr, uint32 data) { + gMPU->AddCycle(9); // Inside/Out p.135 uint32 offset = addr - devaddr; *(uint16 *)&mem[offset] = data; return 0;