@soapbox.pub/wasmboy
Version:
Soapbox fork of Wasmboy.
50 lines (40 loc) • 1.73 kB
text/typescript
// Store / Write memory access
import { checkWriteTraps } from './writeTraps';
import { getWasmBoyOffsetFromGameBoyOffset } from './memoryMap';
import { splitHighByte, splitLowByte } from '../helpers/index';
import { Breakpoints } from '../debug/breakpoints';
export function eightBitStoreIntoGBMemory(gameboyOffset: i32, value: i32): void {
store<u8>(getWasmBoyOffsetFromGameBoyOffset(gameboyOffset), value);
}
export function eightBitStoreIntoGBMemoryWithTraps(offset: i32, value: i32): void {
if (offset === Breakpoints.writeGbMemory) {
Breakpoints.reachedBreakpoint = true;
}
if (checkWriteTraps(offset, value)) {
eightBitStoreIntoGBMemory(offset, value);
}
}
export function sixteenBitStoreIntoGBMemoryWithTraps(offset: i32, value: i32): void {
// Dividing into two seperate eight bit calls to help with debugging tilemap overwrites
// Split the value into two seperate bytes
let highByte = splitHighByte(value);
let lowByte = splitLowByte(value);
if (checkWriteTraps(offset, lowByte)) {
eightBitStoreIntoGBMemory(offset, lowByte);
}
let nextOffset = offset + 1;
if (checkWriteTraps(nextOffset, highByte)) {
eightBitStoreIntoGBMemory(nextOffset, highByte);
}
}
export function sixteenBitStoreIntoGBMemory(offset: i32, value: i32): void {
// Dividing into two seperate eight bit calls to help with debugging tilemap overwrites
// Split the value into two seperate bytes
let highByte = splitHighByte(value);
let lowByte = splitLowByte(value);
eightBitStoreIntoGBMemory(offset + 0, lowByte);
eightBitStoreIntoGBMemory(offset + 1, highByte);
}
export function storeBooleanDirectlyToWasmMemory(offset: i32, value: boolean): void {
store<u8>(offset, <i32>value);
}