ANN: data map capability

David McNab <[email protected]> Wed, 08 Dec 2004 02:04:58 +1300
Newsgroups gmane.comp.lang.forth.picforth
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------080603060007050102020109
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi all,

Attached is a patch against development vers of picforth.fs, which adds 
a new word called 'dmap'.

(Attached also is full picforth.fs, in case the patch is troublesome).

'dmap' is a bit like 'map', except that it dumps out a map of data 
memory usage.

Samuel - you'll see from the code that Forth is not my first language. 
The code is a bit ugly, but it seems to work ok. I've tried to make the 
code readable, so if you want to optimise/refactor it (and even extend 
it to support EEPROM maps), it shouldn't be /too/ painful.

-- 
Cheers
David

--------------080603060007050102020109
Content-Type: text/x-diff;
 name="picforth-dmap.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="picforth-dmap.patch"

--- picforth.fs.old	2004-12-07 23:26:34.000000000 +1300
+++ picforth.fs	2004-12-08 01:57:40.000000000 +1300
@@ -937,11 +937,92 @@
 \ Data and variables
 \ ----------------------------------------------------------------------
 
+\ create data structures to keep a map of data mem and eeprom usage
+\ added by David McNab <[email protected]>
+
+meta
+
+\ in-memory array of 'addr u data-addr' records, plus size
+0 allocate [if] .( failed to create data map ) cr bye [then] value map-data-addr
+0 value map-data-size
+
+variable map-tmp-addr
+variable map-tmp-len
+
+: map-strcpy ( addr u -- addr' u )
+
+    dup allocate abort" failed to copy name" ( addr u newaddr )
+    swap ( addr newaddr u )
+    2dup map-tmp-len ! map-tmp-addr ! ( addr newaddr u )
+    cmove ( -- )
+    map-tmp-addr @ map-tmp-len @
+;
+
+\ append a 'name data-addr', ie 'addr u data-addr' record to our map
+
+: map-data-append { addr u daddr }
+
+    \ resize data map array
+    map-data-addr
+    map-data-size 1+ 3 cells *
+    resize ( new-map-data status )
+    abort" failed to resize data map"
+
+    \ save new data map array address
+    to map-data-addr
+
+    \ take a copy of name
+    addr u map-strcpy to u to addr
+    
+    \ save addr, u, daddr as record
+    map-data-addr map-data-size cells 3 * + \ point to free record at end
+    map-tmp-addr !
+
+    addr map-tmp-addr @ !
+    u map-tmp-addr @ 1 cells + !
+    daddr map-tmp-addr @ 2 cells + !
+
+    \ update record count
+    map-data-size 1+ to map-data-size
+;
+
+\ return the ith data map record
+
+: map-data-i  ( i -- addr u data-addr )
+    map-data-addr swap
+    cells 3 * +  ( rec.0 )
+    dup @                   ( rec.0 addr )
+    over 1 cells + @        ( rec.0 addr u )
+    rot 2 cells + @         ( addr u data-addr )
+;
+
+\ dump out a text map of data mem usage
+
+: dmap  ( -- )
+    map-data-size 0 do
+        i map-data-i -rot ( data-addr addr u )
+        type \ print name
+        9 emit \ print a tab
+        s" 0x" type \ print the '0x'
+        . cr
+    loop
+;
+
 meta
 
 \ RAM
 
-: create ( "name" -- ) create data-here , immediate does> (t-constant) ;
+: create ( "name" -- )
+
+    \ create the word, saving a copy of the name
+
+    name 2dup nextname create     ( addr u )
+    data-here                ( addr u data-addr )
+    map-data-append          (  )
+    data-here , immediate
+does>
+    (t-constant)
+;
 
 : , data-here t! data-here 1+ data-org ;
 

--------------080603060007050102020109
Content-Type: application/x-gzip;
 name="picforth.fs.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="picforth.fs.gz"

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
--------------080603060007050102020109
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
PicForth mailing list
[email protected]
http://lists.rfc1149.net/mailman/listinfo/picforth

--------------080603060007050102020109--