import { MemoryPages, byte, word } from 'js/types'; import { assertByte } from './asserts'; export type Log = [address: word, value: byte, types: 'read'|'write']; export class TestMemory implements MemoryPages { private data: Buffer; private logging: boolean = false; private log: Log[] = []; constructor(private size: number) { this.data = Buffer.alloc(size << 8); } start() { return 0; } end() { return this.size - 1; } read(page: byte, off: byte) { assertByte(page); assertByte(off); const val = this.data[(page << 8) | off]; if (this.logging) { this.log.push([page << 8 | off, val, 'read']); } return val; } write(page: byte, off: byte, val: byte) { assertByte(page); assertByte(off); assertByte(val); if (this.logging) { this.log.push([page << 8 | off, val, 'write']); } this.data[(page << 8) | off] = val; } reset() { this.log = []; } logStart() { this.log = []; this.logging = true; } logStop() { this.logging = false; } getLog() { return this.log; } }