From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- amforth-6.5/common/lib/forth2012/tools/dumper.frt | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 amforth-6.5/common/lib/forth2012/tools/dumper.frt (limited to 'amforth-6.5/common/lib/forth2012/tools/dumper.frt') diff --git a/amforth-6.5/common/lib/forth2012/tools/dumper.frt b/amforth-6.5/common/lib/forth2012/tools/dumper.frt new file mode 100644 index 0000000..fdb1c09 --- /dev/null +++ b/amforth-6.5/common/lib/forth2012/tools/dumper.frt @@ -0,0 +1,57 @@ +\ dump cells from addr upward for len. mk03.10.2008 + +\ We want xdump ( addr len -- ) doing output like this: +\ xxx0 cccc cccc cccc cccc cccc cccc cccc cccc +\ xxx8 cccc cccc cccc cccc cccc cccc cccc cccc +\ ... + +\ That is, we alway print 8 cells. And want to see them in segments of 8 cells, +\ all starting at xxx0 or xxx8 addresses. +\ So we have to trimm addr and len first: +\ Clear lower 3 bits of addr, then set lower 3 bits of len +\ The rest shoud be obvious. + +hex + +\ helper word +\ print a number in a field with 0 filled +: u.r ( u w -- ) + >r 0 \ see u. + <# + r> 0 ?do # loop + #> + type +; + +( item -- ) +: .item 4 u.r space ; + +( 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 ) +: trimm swap fff8 and swap 7 or ; + +( adr len -- ) +: postpone +loop postpone drop ; immediate + +( addr len -- ) +: idump ; +: edump ; +: dump ; + +\ finis tested ok on amforth-2.9 05.10.2008 mk -- cgit v1.2.3