home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / forth / tools.scr < prev    next >
Encoding:
Text File  |  1994-09-22  |  16.0 KB  |  1 lines

  1. \\                       *** Tools ***                 25may86we                                                                In diesem File sind die wichtigsten Debugging-Tools enthalten.                                                                  Dazu gehören ein einfacher Decompiler, ein Speicherdump und     der Tracer (s. Kapitel im Handbuch)                             Vor allem der Tracer hat sich als sehr sinnvolles Werkzeug bei  der Fehlerbekämpfung entwickelt. Normalerweise sind Fehlerquel- len beim Tracen sofort auffindbar, manchmal allerdings auch     nicht ganz so schnell ...                                                                                                                                                                                                                                                                                                                                                                                                                                       \ Loadscreen for simple decompiler                     26oct86we                                                                Onlyforth    Vocabulary Tools  Tools also definitions                                                                           1 5 +thru                                                         6 +load     \ Tracer                                                                                                          Onlyforth                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       \ Tools for decompiling                                26oct86we                                                                | : ?:     dup 4 u.r ." :" ;                                    | : @?     dup @ 6 u.r ;                                        | : c?     dup c@ 3 .r ;                                                                                                        : s   ( adr - adr+ )                                               ?: space  c? 3 spaces  dup 1+ over c@ type                      dup c@ + 1+ even ;                                                                                                           : n   ( adr - adr+2 )    ?: @? 2 spaces  dup @ >name .name 2+ ; : k   ( adr - adr+2 )    ?: 5 spaces @? 2+ ;                    : b   ( adr - adr+1)     ?: @? dup @ over + 5 u.r 2+ ;                                                                                                                                                                                                          \ Tools for decompiling                                26oct86we                                                                : d   ( adr n - adr+n)                                             2dup swap ?:  swap  0 DO c? 1+ LOOP  2 spaces  -rot type ;                                                                   : c   ( adr - adr+1)     1 d ;                                                                                                                                                                  \\                                                              : dump ( adr n -) bounds ?DO cr I 10 d drop stop? IF LEAVE      THEN 10 +LOOP ;                                                                                                                                                                                                                                                 \ dekompiliere  String Name Konstant Char Branch Dump           \               =      =    =        =    =      =              \ General Dump Utility - Output                        26oct86we                                                                | : .2      ( n -- )       0  <#   # #   #>   type  space ;     | : .6      ( d -- )       <#  # # # # # #  #>  type ;          | : d.2     ( addr len -- )      bounds ?DO  I c@  .2  LOOP ;   | : emit.   ( char -- )     $7F and                                      dup bl $7E uwithin not IF drop Ascii . THEN  emit ;                                                                    | : dln   ( addr --- )                                               cr  dup 6 u.r  2 spaces  8 2dup d.2  space                      over + 8 d.2  space   $10 bounds ?DO  I c@ EMIT.  LOOP  ;  | : ?.n    ( n1 n2 -- n1 )                                           2dup = IF  ." \/"  drop  ELSE  2 .r  THEN   space ;        | : ?.a    ( n1 n2 -- n1 )                                           2dup = IF  ." v"  drop   ELSE  1 .r  THEN ;                                                                                \ Longdump  basics                                     24aug86we                                                                | : ld.2   ( hiaddr loaddr len -- hiaddr )                           bounds ?DO  I over lc@ .2  LOOP  ;                                                                                         | : ldln   ( hiaddr loaddr  -- )                                     cr  dup >r  over   .6  2 spaces                                 r@ 8 ld.2 space   r@ 8 + 8 ld.2 space                           r> $10 bounds ?DO  I over lc@ emit.  LOOP drop ;                                                                           | : .head   ( addr len -- addr' len' )                                swap  dup -$10 and  swap  $0F and  cr 8 spaces                  8 0 DO  I ?.n  LOOP  space  $10 8 DO  I ?.n  LOOP               space  $10 0 DO  I ?.a  LOOP  rot + ;                                                                                                                                                     \ Dump and Fill Memory Utility                         10sep86we                                                                Forth definitions                                                                                                               : ldump   ( laddr len -- )                                         base push hex   >r swap r>  .head                               bounds ?DO  dup I ldln  stop? IF  LEAVE  THEN                               I $FFF0 = IF  1+  THEN  $10 +LOOP drop ;                                                                         : dump   ( addr len -- )                                           base push  hex    .head                                         bounds ?DO  I dln  stop? IF  LEAVE  THEN  $10 +LOOP ;                                                                                                                                                                                                                                                                        \ Trace Loadscreen                                     26oct86we                                                                Onlyforth       \needs Tools    Vocabulary Tools                Tools also definitions                                                                                                          \needs cpush   1 +load                                          \needs >absaddr                 : >absaddr   0  forthstart d+ ;                                                                 2 8 +thru                                                                                                                       Onlyforth                                                                                                                                                                                                                                                                                                                                                                                       \ throw status on Return-Stack                         26oct86we                                                                | Create: cpull                                                       rp@ count  2dup + even rp!  r> swap cmove ;                                                                               : cpush  ( addr len --)   r> -rot  over >r                            rp@ over 2+ -  even dup rp!  place  cpull >r  >r ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \ Variables do-trace                                   10sep86we                                                                | Variable (W           \ Variable for saving W                 | Variable <ip          \ start of trace trap range             | Variable ip>          \ end of trace trap range               | Variable nest?        \ True if NEST shall performed          | Variable newnext      \ Address of new Next for tracing       | Variable last'        \ holds adr of position in traced word  | Variable #spaces      \ for indenting nested trace            | Variable trap?        \ True if trace is allowed                                                                                                                                                                                                                                                                                                                                                                                                              \ install Tracer                                       11sep86we                                                                Label trnext   0 # D6 move   .l 0 D6 FP DI) jmp  end-code                                                                       Label (do-trace      newnext R#) D0 move  D0 trnext 2+ R#) move    .w trnext # D6 move   .l D6 reg) A0 lea    A0 D5 move           .w UP R#) D6 move                                               .l ' next-link >body c@ D6 FP DI) D6 .w move                    BEGIN   .l D6 reg) A1 lea   .w D6 tst  0<>                      WHILE   .w &10 # A1 suba   .l D5 A0 move                                   A0 )+ A1 )+ move   A0 )+ A1 )+ move                             .w 2 A1 addq   A1 ) D6 move                          REPEAT  rts   end-code                                                                                                         Code do-trace  \ opposite of end-trace                             (do-trace bsr   Next end-code                              \ reenter tracer                                       04sep86we                                                                | : oneline   .status space query interpret  -&82 allot                       rdrop  ( delete quit from tracenext ) ;                                                                           | Code (step                                                          RP )+ D7 move   .l D7 IP lmove   FP IP adda                     .w (W R#) D7 move    -1 # trap? R#) move                  Label fnext                                                           D7 reg) D6 move  D6 reg) jmp  end-code                                                                                    | Create: nextstep   (step ;                                                                                                    : (debug  ( addr -- )   \ start tracing at addr                  dup  <ip !  BEGIN  1+ dup @   ['] unnest =  UNTIL  2+ ip> ! ;                                                                  \ check trace conditions                               10sep86we                                                                Label tracenext   tracenext newnext !                              IP )+ D7 move                                                   trap? R#) tst    fnext beq                                      .b nest? R#) D0 move  \ byte order!!                            0= IF    .l IP D0 move   FP D0 sub                                       .w <ip R#) D0 cmp  fnext bcs                                       ip> R#) D0 cmp  fnext bhi                              ELSE  .b 0 # nest? R#) move  THEN  \ low byte still set                                                                                               \ one trace condition satisfied       .w D7 (W R#) move     trap? R#) clr                                                                                                                                                                                                                           \ tracer display                                       26oct86we                                                                ;c:  nest? @                                                         IF  nest? off   r>  ip> push  <ip push  dup 2- (debug               #spaces push  1 #spaces +!  >r   THEN                   r@  nextstep >r  input push  output push  standardi/o           2-   dup last' !                                                cr #spaces @ spaces    dup 5 u.r   @ dup 6 u.r   2 spaces       >name .name    $1C col -  0 max spaces       .s                 state push    blk push    >in push    ['] 'quit >body push      [ ' >interpret >body ] Literal push                             #tib push    tib #tib @ cpush    r0 push    rp@ r0 !            &82 allot    ['] oneline Is 'quit    quit ;                                                                                                                                                                                                                    \ DEBUG with errorchecking                             11sep86we                                                                | : traceable  ( cfa -- adr)                                     recursive  dup @                                                ['] : @    case? ?exit                                          ['] key @  case? IF  >body c@  Input @ + @  traceable exit THEN ['] type @ case? IF  >body c@ Output @ + @  traceable exit THEN ['] r/w  @ case? IF  >body  @               traceable exit THEN drop dup @ @ $4EAB =  IF  @ 4+  exit  THEN \ 68000 voodoo code  >name .name ." can't be DEBUGged" quit ;                                                                                       : nest                  \ trace next high-level word executed       last' @ @ traceable drop  nest? on ;                                                                                        : unnest                \ ends tracing of actual word               <ip on  ip> off ;   \ clears trap range                     \ misc. words for tracing                              bp 9Mar86                                                                : endloop               \ sets trap range next current word         last' @ 4+ <ip ! ;  \ used to skip LOOPs, REPEATs, ...                                                                      ' end-trace  Alias unbug                                                                                                        Forth definitions                                                                                                               : debug  ( --)          \ reads a word                                '  traceable  Tools   (debug                                    nest? off  trap? on  #spaces off  do-trace ;                                                                              : trace' (  --)         \ traces fol. word                          debug  <ip perform  end-trace ;