--- nono/vm/test_busio.cpp 2026/04/29 17:05:10 1.1.1.4 +++ nono/vm/test_busio.cpp 2026/04/29 17:05:24 1.1.1.6 @@ -4,7 +4,7 @@ // Licensed under nono-license.txt // -#include "header.h" +#include "bus.h" #include #include @@ -17,27 +17,29 @@ class IODevice IODevice() {} virtual ~IODevice(); - virtual uint64 Read8(uint32 addr) { return 0xef; } - virtual uint64 Read16(uint32 addr) { + virtual busdata Read8(uint32 addr) { return 0xef; } + virtual busdata Read16(uint32 addr) { return (Read8(addr) << 8) | (Read8(addr + 1)); } - virtual uint64 Read32(uint32 addr) { + virtual busdata Read32(uint32 addr) { return (Read16(addr) << 16) | (Read16(addr + 2)); } - virtual uint64 Write8(uint32 addr, uint32 data) { return 0; } - virtual uint64 Write16(uint32 addr, uint32 data) { - uint64 r; + virtual busdata Write8(uint32 addr, uint32 data) { return 0; } + virtual busdata Write16(uint32 addr, uint32 data) { + busdata r; r = Write8(addr, data >> 8); r |= Write8(addr + 1, data & 0xff); return r; } - virtual uint64 Write32(uint32 addr, uint32 data) { - uint64 r; + virtual busdata Write32(uint32 addr, uint32 data) { + busdata r; r = Write16(addr, data >> 16); r |= Write16(addr + 2, data & 0xffff); return r; } - virtual uint64 Peek8(uint32 addr) { return 0xff; } + virtual busdata Peek8(uint32 addr) { return 0xff; } + virtual bool Poke8(uint32 addr, uint32 data) { return false; } + virtual bool Poke(uint32 addr, uint32 data) { return false; } }; IODevice::~IODevice() { } @@ -52,18 +54,18 @@ class TestByteDev : public IODevice static const uint32 NPORT = 4; uint32 reg[NPORT] {}; - uint64 Read(uint32 addr) { + busdata Read(uint32 addr) { if ((int32)reg[addr] < 0) - return (uint64)-1; + return busdata::BusErr; return reg[addr]; } - uint64 Write(uint32 addr, uint32 data) { + busdata Write(uint32 addr, uint32 data) { reg[addr] = data; return 0; } - uint64 Peek(uint32 addr) { + busdata Peek(uint32 addr) { if ((int32)reg[addr] < 0) - return (uint64)-1; + return busdata::BusErr; return reg[addr]; } }; @@ -77,18 +79,18 @@ class TestWordDev : public IODevice static const uint32 NPORT = 4; uint32 reg[NPORT] {}; - uint64 Read(uint32 addr) { + busdata Read(uint32 addr) { if ((int32)reg[addr] < 0) - return (uint64)-1; + return busdata::BusErr; return reg[addr]; } - uint64 Write(uint32 addr, uint32 data) { + busdata Write(uint32 addr, uint32 data) { reg[addr] = data; return 0; } - uint64 Peek(uint32 addr) { + busdata Peek(uint32 addr) { if ((int32)reg[addr] < 0) - return (uint64)-1; + return busdata::BusErr; return reg[addr]; } }; @@ -96,7 +98,7 @@ TestWordDev::~TestWordDev() { } // テストデータ // expected[] の1エントリは1バイトを表す(WordDevの時も同様)。 -#define E ((uint64)-1) +#define E (busdata::BusErr) #define F (0xff) static struct testdata { const char *name; @@ -129,10 +131,6 @@ static struct testdata { { "BusIO_W", { 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, } }, - { "BusIO_WW", { - 1, 2, 1, 2, 3, 4, 3, 4, 5, 6, 5, 6, 7, 8, 7, 8, - 1, 2, 1, 2, 3, 4, 3, 4, 5, 6, 5, 6, 7, 8, 7, 8, - } }, { "BusIO_WF", { 1, 2, F, F, 3, 4, F, F, 5, 6, F, F, 7, 8, F, F, 1, 2, F, F, 3, 4, F, F, 5, 6, F, F, 7, 8, F, F, @@ -248,14 +246,13 @@ main() do_test(&testdata_b[6], new BusIO_BFFF()); do_test(&testdata_w[0], new BusIO_W()); - do_test(&testdata_w[1], new BusIO_WW()); - do_test(&testdata_w[2], new BusIO_WF()); + do_test(&testdata_w[1], new BusIO_WF()); return 0; } // リンカを通すためのダミー void -vmpanic(const char *funcname, const char *fmt, ...) +vmpanic_func(const char *funcname, const char *fmt, ...) { va_list ap;