recipes/rc2014/eeprom: add usr.asm
A little life saver if your target shell doesn't have a proper at28w.
This commit is contained in:
parent
beaea6f978
commit
fb93fcd6e6
43
recipes/rc2014/eeprom/usr.asm
Normal file
43
recipes/rc2014/eeprom/usr.asm
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
; 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
|
Loading…
Reference in New Issue
Block a user