|
|
@@ -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 |