feo3boy 0.1.0

Emulator core for the gameboy
Documentation
;; Compute all 8 bit perfect squares.
SECTION "Main", ROM0
Squares:
	ld hl, Output
	ld b, 1

MACRO MulBit
	: sla c
	bit \1, b
	jr z, :+
	add a, c
ENDM

.loop:
	ld a, b
	;; 15*15 is the largest perfect square that fits in u8, so stop when b = 16.
	cp a, 16
	jp z, .done

	;; There are no multiplication instructions so we have to do long
	;; multiplication.
	ld c, b
	;; A is already B << 0, so set it back to 0 if the 0th bit doesn't match.
	bit 0, b
	jr nz, :+
	ld a, 0
	MulBit 1
	MulBit 2
	MulBit 3
	MulBit 4
	MulBit 5
	MulBit 6
	MulBit 7

	: ld [hli], a
	inc b
	jp .loop

.done:
	halt

SECTION "Output", WRAM0[$C000]
Output: