; If you find youself needing to write to an EEPROM through a shell that isn't
; built for this, compile this dependency-less code (change memory offsets as
; needed) and run it in a USR-like fashion.

	ld	bc, 0x1000	; bytecount to write
	ld	de, 0xd000	; source data
	ld	hl, 0x2000	; dest EEPROM memory mapping

loop:
	ld	a, (de)
	ld	(hl), a
	push	de		; --> lvl 1
	push	bc		; --> lvl 2
	ld	bc, 0x2000	; Should be plenty enough to go > 10ms
	ld	e, a		; save expected data for verification
wait:
	; as long as writing operation is running, IO/6 will toggle at each
	; read attempt and IO/7 will be the opposite of what was written. Simply
	; wait until the read operation yields the same value as what we've
	; written
	ld	a, (hl)
	cp	e
	jr	z, waitend
	dec	bc
	ld	a, b
	or	c
	jr	nz, wait
	; mismatch
	pop	bc		; <-- lvl 2
	pop	de		; <-- lvl 1
	ld	a, 1		; nonzero
	or	a		; unset Z
	ret
waitend:
	pop	bc		; <-- lvl 2
	pop	de		; <-- lvl 1
	inc	hl
	inc	de
	dec	bc
	ld	a, b
	or	c
	jr	nz, loop
	ret			; Z already set