aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/lib/hardware/flash-block.frt
blob: 661e3b4ed31afee361d5bd71a31d6d037a1848a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
\
\ flash-block
\ contiguous flash region used a block storage
\
\ requires blocks.frt (for init and blocksize)
\

\ start address for blocks.
\ the block data starts at
\   flash.base-addr + (blocknum*blocksize)
\ it could be beyond the 128K limit, if the
\ !i and @i are replaced by words which take a
\ doube cell address or handle the block at once
\ (preferred)
\
variable flash.base-addr

\ remember a flash cell contains 2 bytes

: flash.load-buffer ( a-addr u -- )
   1- blocksize 2/ * flash.base-addr @ +
   blocksize 2/  bounds ?do i @i over ! cell+ loop drop
;

: flash.save-buffer ( a-addr u -- )
   1- blocksize 2/ * flash.base-addr @ +
   ." still debugging. no actual flash write!" 
   blocksize 2/ bounds ?do dup @ i 2drop ( !i) cell+ loop drop
;

\ for turnkey
: flash.init ( -- )
   ['] flash.load-buffer is load-buffer
   ['] flash.save-buffer is save-buffer
   0 flash.base-addr !
   block:init
;