home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9203 / naxos / fthsourc / br.fth next >
Encoding:
Text File  |  1992-02-08  |  3.3 KB  |  120 lines

  1. ( -------------------------------------------------------- )
  2. (                          BR.FTH                 )
  3. (         Copyright (C) 1992 K. Peper & DMV-Verlag         )
  4. (                Compiler: Naxos V 1.0                     )
  5. (                               )
  6. ( Breakpoint Interrupt Handler                    )
  7. ( Behandelt Breakpoint $CC in Anwenderprogrammen           )
  8. ( Breakpoint wird mit ### gesetzt                )
  9. ( Register werden bei Einsprung in diese Routine ..        )
  10. ( in INREG gerettet, Start $110, siehe Rumpf.DOC        )
  11. ( -------------------------------------------------------- )
  12.  
  13. include xkern
  14.  
  15. var csgast   word ; ( codesegment gast )
  16. var s0gast   word ; ( stack0 gast )
  17. var sigast   word ; ( stackzeiger gast )
  18. var gastptr  fptr ; ( pointer auf gastsegment )
  19.  
  20. : .s  ( => )
  21. ( ** Print Stack ** )
  22. s0gast @>dx dx- dx-            ( start )
  23. sigast @                       ( ende )
  24.   DO 
  25.   space i csgast @>dx ~@ u.h 
  26.   2 -LOOP 
  27. ." * "
  28. ;
  29.  
  30. : .regs ( => )
  31. ( ** Print Register ** )
  32. cr
  33. ." --> Count=CX=" adr $112 @ u.h
  34. ."  Limit=BP="    adr $11A @ u.h
  35. ."  SI="          adr $11c @ u.h
  36. ."  DI="          adr $11E @ u.h
  37. ."  SP="          adr $118 @ u.h cr
  38. ." --> CS="       adr $120 @ u.h
  39. ."  DS="          adr $122 @ u.h
  40. ."  SS="          adr $126 @ u.h
  41. ."  ES="          adr $124 @ u.h '*' emit
  42. ;
  43.  
  44.  
  45. var dumpptr fptr ;
  46. var hptr    fptr ;
  47.  
  48. : dmp   ( => )
  49.         ( 2 Zeilen ab dumpptr )
  50.   base @ >r hex 
  51.   leading @ >r
  52.   '0' leading !
  53.   dumpptr d@  hptr d! 
  54.   cr ."  Adresse PAD = " dumpptr hiword @ u.h
  55.    bs emit  ':' emit dumpptr @ u.h cr
  56.   ."   0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F"  
  57.   ."    0123456789ABCDEF" 
  58.   cr space 
  59.   15 , 0 do hptr ^c@ byte.h hptr inc loop  2 spaces
  60.   dumpptr @ hptr ! 
  61.   15 , 0 do hptr ^c@ , 32 max emit hptr inc loop cr space
  62.   dumpptr @ , 16 + hptr !
  63.   15 , 0 do hptr ^c@ byte.h hptr inc loop  2 spaces
  64.   dumpptr @ , 16 + hptr ! 
  65.   15 , 0 do hptr ^c@ , 32 max emit hptr inc loop  
  66.   ."   * "
  67.   r> leading ! 
  68.   r> base !
  69. ;
  70.  
  71.  
  72. : inthandler ( => )
  73. ( ** INT3 Behandlungsroutine ** )
  74. adr $120 @                      ( csgast holen )
  75. gastptr hiword ! csgast !       ( retten )
  76. dumpptr hiword !
  77. adr $11C @                      ( si holen )
  78. sigast !                        ( retten )
  79.              
  80. $106 gastptr !                  ( s0gast holen )
  81. ^@ s0gast !                     ( retten )
  82. $108 gastptr !                  ( dpgast holen )
  83. ^@ dx>tx , $44 + tx>dx dumpptr !
  84.  
  85. cr 
  86. ." DX:AX="                      ( Akku holen, ausgeben )
  87. adr $114 @ u.h adr $110 @ u.h
  88.  
  89. ."  ADR=" adr $116 @ u.h        ( BX ausgeben )
  90.  
  91. adr $128 @ , 1 and .0=.         ( Bedingungsflag )
  92.  if ." .F." else ." .T." endif
  93.  
  94. ."  stack= "                    ( Stack )
  95. sigast @>dx s0gast @ .u<.
  96.  if ." unterschritten, jetzt leer * "
  97.     s0gast @  adr $11C ! 
  98.  else sigast @>dx s0gast @ .=.
  99.     if ." leer * " else .s endif
  100.  endif 
  101.  
  102. Begin key                       ( Tastaturabfrage )
  103.     case
  104.     'r' of .regs .F. ;;
  105.     'p' of dmp .F. ;;
  106.     else   .T.
  107.     endcase
  108. Until
  109.  
  110. iret                            ( Return to Caller )
  111. ;
  112.  
  113.  
  114. : main >default                 ( Ausgabevektoren )
  115.    ax inthandler  adr entry !   ( handler bei main einsetzen )
  116.    $3 push cs@ >dx $100 setint  ( INT3 Vektor auf cs:$100 )
  117.    resident                     ( resident an DOS geben )
  118. ;
  119.  
  120. stacksize( $40 $20 )