aboutsummaryrefslogtreecommitdiff
path: root/forth/forth/avr/see.fs
blob: a1c2deba4de42521f4cd5db61e7b278e8fa462f7 (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
\ *********************************************************************
\    Filename:      see.txt                                           *
\    Date:          20.03.2017                                        *
\    FF Version:    5.0                                               *
\    MCU:           Atmega                                            *
\    Copyright:     Mikael Nordman                                    *
\    Author:        Mikael Nordman                                    *
\ *********************************************************************
\    FlashForth is licensed acording to the GNU General Public License*
\ *********************************************************************
-see 
marker -see
hex ram
: *@ dup @ ;
: u.4 4 u.r ;
: *@+ dup cell+ @ u.4 ;
: 5sp 5 spaces ;
: @braddr ( addr -- addr xt-addr )
    *@ fff and dup 800 and 
    if f800 or then 2* over +  cell+ ;
: @xtaddr ( addr -- addr xt-addr )
  dup cell+ @ xa> ;
: .rjmp ( addr -- addr+2 ) @braddr u.4 cell+ ;
: .br  ( addr -- addr+2 )
     *@ 3 rshift 7f and dup 40 and 
     if ff80 or then 2* over + cell+ u.4 cell+ ;
: .reg ( addr -- addr ) 
   dup @ 4 rshift 1f and ." r" decimal 2 u.r hex cell+ ;
: .ldi ( addr -- addr )
  *@ dup 4 rshift dup 000f and 0010 + 
  ." r" decimal 2 u.r hex
  00f0 and swap 000f and + 2 u.r cell+ ;
: ?call ( addr -- addr f ) *@ fe0e and 940e - ;
: ?ret ( addr -- addr f ) *@ 9508 - ;
: ?rcall ( addr -- addr f ) *@ f000 and d000 - ;
: ?jmp  ( addr -- addr f ) *@ fe0e and 940c - ;
: ?rjmp ( addr -- addr f ) *@ f000 and c000 - ;
: ?breq ( addr --  addr f ) *@ fc07 and f001 - ;
: ?brne ( addr --  addr f ) *@ fc07 and f401 - ;
: ?brcc ( addr -- addr f ) *@ fc07 and f400 - ;
: ?pop ( addr -- addr f ) *@ fe0f and 900f - ;
: ?push ( addr -- addr f ) *@ fe0f and 920f - ;
: ?st-y ( addr -- addr f ) *@ fe0f and 920a - ;
: ?ldy+ ( addr -- addr f ) *@ fe0f and 9009 - ;
: ?ijmp ( addr -- addr f ) *@ 9409 - ;
: ?ldi ( addr -- addr f ) *@ f000 and e000 - ;
: (see) ( addr -- addr' | false )
  dup u.4
  *@ u.4
  ?call 0= if *@+ ." call  " @xtaddr c>n .id cell+ cell+ else 
  ?rcall 0= if 5sp ." rcall " @braddr c>n .id cell+ else
  ?breq 0= if 5sp ." breq  " .br else
  ?brne 0= if 5sp ." brne  " .br else
  ?brcc 0= if 5sp ." brcc  " .br else
  ?rjmp 0= if 5sp ." rjmp  " .rjmp else
  ?ijmp 0= if 5sp ." ijmp" drop false else
  ?ret  0= if 5sp ." ret"  drop false else
  ?jmp  0= if *@+ ." jmp   " @xtaddr c>n .id drop false else
  ?pop  0= if 5sp ." pop   " .reg else
  ?push 0= if 5sp ." push  " .reg else
  ?ldy+ 0= if 5sp ." ld    " .reg ." y+" else
  ?st-y 0= if 5sp ." st    -y " .reg else
  ?ldi  0= if 5sp ." ldi   " .ldi else
  cell+
  then then then then then
  then then then then then
  then then then then
  cr ;

: dis ( addr -- )
  hex cr
  begin (see) dup 0=
  until drop ;

: see ( "word" -- )  ' dis ;
hex ram