FIGnition FUZE Hardware Reference Manual page 72

Table of Contents

Advertisement

vram 600 + const
spiPckt
vram const spiSrc
$9F const amicId
$05 const amicSr
$06 const amicWren
$C7 const amicCE
$02 const amicPP
$0B const amicRB
create spiBuff
$2A20 ,
spiSrc , 1 ,
spiSrc , 4 ,
vram 610 + const
srPckt
$2013 const amic4b
$3013 const amic4s
$3014 const amic8s
0 var spiAddr
: spiSrc ( addr)
dup spiAddr !
spiBuff 2+
dup >r i!
0 r 2+ i!
0 r> 6 + i!
;
: spiC! ( b)
spiAddr ic!
1 spiAddr 1+
;
: spiDst ( len a)
dup spiAddr !
spiBuff 4 + dup
>r i!
r> 2+ ic!
;
( dLen ds sr)
: spiMsg
srPckt dup
spiSrc
spiC! 1+ spiDst
;
 : amicId
4 amicId spiMsg
spiPckt >spi!
srPckt 1+ i@ >r
r amic4b = if
2048 256
then ( end strt)
r amic4s = if
2048 128
then ( end strt)
r> amic 8s = if
4096 128
then ( end strt)
;
: amicWait
1 amicSr spiMsg
begin
spiPckt dup
>spi 10 + ic@
1 and 0= until
;
: amicErase 0
amicWren spiMsg
spiPckt >spi
0 amicCE spiMsg
spiPckt >spi
amicWait
;
: blkEmpty
-1 vram 512 +
vram do
i i@ 1+ if
drop 0 leave
then
2 +loop
;
0 var virts
1024 arr virtBlks
: swapb
dup 8 <<
swap 8 >> or
;
: wrPg ( pg)
0 amicWren spiMsg
spiPckt >spi
vram spiSrc $401
spiPckt 4 + i!
amicPP vram ic!
swapb vram 1+ i!
0 vram 3 + ic!
spiPckt >spi
amicWait
;
: chkFail ( addr)
0 23 at ." Fail:"
.hex drop 1
key drop
;
: chkPg ( blk a)
>r vram spiSrc
$400 spiPckt 4 +
i!
$001 spiPckt 8 +
i!
amicRB vram ic!
swapb vram 1+ i!
0 vram 3 + ic!
vram swapb
spiPckt 6 + i!
spiPckt >spi
vram 4 +
r 256 + r> do
dup ic@ i c@
- if
chkFail leave
then
1+
2 +loop
;
: chkBlk ( absBlk)
dup -512 chkPg
drop
1+ -256 chkPg
drop
;
: cpBlk ( st vBlk)
dup blk> drop
blkEmpty if
;s
then
dup virts
virtBlks !
1 virts +!
vram dup 4 + 512
cmove + dup wrPg
vram 260 + dup 4
+ 256 cmove
1+ wrPg 1- chkBlk
;
: cpVTable
0 virtBlks ( a)
vram 260 + 256
-1 fill
virts @ 0 do
c@ i 255 and
1 xor vram 260
+ ic! i 255 and
0= if
i 8 >> wrPg
vram 260 +
256 -1 fill
then
loop
virts @ 8 >> wrPg!
( flush last page)
;
: chkVTable virts
@ 7 >> 0 do i
i 7 << virtBlks
chkPg drop
loop
;
: clone
spiBuff spiPckt
10 cmove
$20 $DF $2A
>port> drop
0 virts !
amicErase
amicId
2dup - 0 do
i cpBlk
loop
cpVTable
chkVTable
;

Advertisement

Table of Contents
loading

Table of Contents