====== 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 [[http://amforth.sourceforge.net/|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