BLUE
kissa.bsky.social
@kissa.bsky.social
Tomfoolery, nincompoopery, programming
37 followers374 following39 posts
kissa.bsky.social

Implementation starting to a look a bit hairy already

export function read(addr: number) {
	let data

	if (addr < 0 || addr >= MEM_SIZE - 1) {
		if (addr === MEM_SIZE - 1) {
			data = (mem[addr] << 8) + mem[0]
		} else {
			error(`read: invalid address ${addr}`)
		}
	} else {
		data = (mem[addr] << 8) + mem[addr + 1]
	}

	if ((data & 0x8000) > 0) {
		return data - 0x10000
	} else {
		return data
	}
}
1

kissa.bsky.social

The boring part related to reading and writing should be mostly done now.

export function write(addr: number, num: number) {
	if (num < -32768 || num > 32767) {
		// Alternatively, we might just do `& 0xffff` and be done with it
		error(`write: number doesn't fit ${num}`)
	}

	let hi = (num & 0xff00) >> 8
	let lo = num & 0x00ff

	if (addr < 0 || addr >= MEM_SIZE - 1) {
		if (addr === MEM_SIZE - 1) {
			mem[addr] = hi
			mem[0] = lo
		} else {
			error(`write: invalid address ${addr}`)
		}
	}

	mem[addr] = hi
	mem[addr + 1] = lo
}
10 passing tests
1
kissa.bsky.social
@kissa.bsky.social
Tomfoolery, nincompoopery, programming
37 followers374 following39 posts