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

I guess we need negative numbers too. Maybe all numbers should be signed for now, let's deal with the unsigned/signed complexity later.

test("read negative word", () => {
	mem[0] = 0xff
	mem[1] = 0xff

	expect(read(0)).toBe(-1)
})

test("boundary between negative and positive", () => {
	mem[0] = 0x7f
	mem[1] = 0xff
	mem[2] = 0x80
	mem[3] = 0x00

	expect(read(0)).toBe(32767)
	expect(read(2)).toBe(-32768)
})
1

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
@kissa.bsky.social
Tomfoolery, nincompoopery, programming
37 followers374 following39 posts