idump edump dump

In Microcontrolern wie dem AVR Atmega gibt es drei verschiedene Speicherbereiche - Ram, Flash und Eeprom - die unterschiedlich organisiert sind. Auf das Ram kann byteweise zugegriffen werden. Das Flash wird zellenweise angesprochen, ebenso wie das Eeprom. So gibt es neben dem dump für das Ram ein idump für das instruction memory und das edump für das Eeprom. Als Minitools wurden dem ? ein i? und e? beigesellt. Mit ?? i?? und e?? lassen sich die Adressen inspizieren wobei neben dem Wert auch die Asciiwerte wieder gegeben werden. Dagestellt wird immer der Wert einer cell, also 2 Bytes. Dies weil im Flash jede Adresse einer Zelle entspricht, und der Einfachheit halber im Forth mit @ auch aus dem Ram und Eprom gleich eine Zelle geholt wird. Das folgende Beispiel illustriert die Verwendung. Diese dumper liegen auch als Assemblerquelle für das amforth vor.

> : test  ." hallo" ;  test 
hallo ok 
> ' test 10 - 20 idump 
 C58   4B2 1E98 1DC3 1E63 1E63  797 1C8D   72 
 C60    98 1E98 1EAD 1DC3 1E5C 1E5C  797 1C41 
 C68  7404 7365   74 1FEB 1C0A  235 6805 6C61 
 C70  6F6C  261 1C41 FFFF FFFF FFFF FFFF FFFF 
 C78  FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF  ok 

> c68 i?? 
7404 t.  ok 
> c70 i?? 
6F6C ol  ok 

Quellcode

 
hex 

( item -- ) 
: .item     4 u.r space ;  \ asm ok 

( addr -- ) 
: i?     i@ .item ; 
: e?     e@ .item ; 
: ?       @ .item ; 

( addr n -- addr+n ) 
: .icells   0 do  dup i?    1+ loop ; \ flash 
: .ecells   0 do  dup e? cell+ loop ; \ eeprom 
: .rcells   0 do  dup  ? cell+ loop ; \ ram 

( addr -- ) 
: .addr     cr .item space ; 

( addr1 len1 -- addr2 len2 ) 
: trim     swap fff8 and swap 7 or ; 

( addr len -- ) \ numbers are in hex. 
: idump   trim 0 ?do   dup .addr   8 .icells   8 +loop ; 
: edump   trim 0 ?do   dup .addr   8 .ecells  10 +loop ; 
:  dump   trim 0 ?do   dup .addr   8 . cells  10 +loop ; 

\ tested ok on amforth-2.9 06.10.2008 mk 

\ type a character 
: .ascii ( c -- )  7F and dup 20 < if drop 2E then emit ; \ ignore bit8 

\ type content of cell and its ascii values. 
: .aa  ( adr -- )  dup ff00 and ff / .ascii  00ff and .ascii  space ; 

\ inspect an address 
( adr -- ) 
: i??     i@ dup .item .aa ; 
: e??     e@ dup .item .aa ; 
:  ??      @ dup .item .aa ; 

\ tested ok on amforth-2.9 08.10.2008 mk 
\ ca. 222 cells of flash 
\ finis