home *** CD-ROM | disk | FTP | other *** search
- ( -------------------------------------------------------- )
- ( BR.FTH )
- ( Copyright (C) 1992 K. Peper & DMV-Verlag )
- ( Compiler: Naxos V 1.0 )
- ( )
- ( Breakpoint Interrupt Handler )
- ( Behandelt Breakpoint $CC in Anwenderprogrammen )
- ( Breakpoint wird mit ### gesetzt )
- ( Register werden bei Einsprung in diese Routine .. )
- ( in INREG gerettet, Start $110, siehe Rumpf.DOC )
- ( -------------------------------------------------------- )
-
- include xkern
-
- var csgast word ; ( codesegment gast )
- var s0gast word ; ( stack0 gast )
- var sigast word ; ( stackzeiger gast )
- var gastptr fptr ; ( pointer auf gastsegment )
-
- : .s ( => )
- ( ** Print Stack ** )
- s0gast @>dx dx- dx- ( start )
- sigast @ ( ende )
- DO
- space i csgast @>dx ~@ u.h
- 2 -LOOP
- ." * "
- ;
-
- : .regs ( => )
- ( ** Print Register ** )
- cr
- ." --> Count=CX=" adr $112 @ u.h
- ." Limit=BP=" adr $11A @ u.h
- ." SI=" adr $11c @ u.h
- ." DI=" adr $11E @ u.h
- ." SP=" adr $118 @ u.h cr
- ." --> CS=" adr $120 @ u.h
- ." DS=" adr $122 @ u.h
- ." SS=" adr $126 @ u.h
- ." ES=" adr $124 @ u.h '*' emit
- ;
-
-
- var dumpptr fptr ;
- var hptr fptr ;
-
- : dmp ( => )
- ( 2 Zeilen ab dumpptr )
- base @ >r hex
- leading @ >r
- '0' leading !
- dumpptr d@ hptr d!
- cr ." Adresse PAD = " dumpptr hiword @ u.h
- bs emit ':' emit dumpptr @ u.h cr
- ." 0 1 2 3 4 5 6 7 8 9 A B C D E F"
- ." 0123456789ABCDEF"
- cr space
- 15 , 0 do hptr ^c@ byte.h hptr inc loop 2 spaces
- dumpptr @ hptr !
- 15 , 0 do hptr ^c@ , 32 max emit hptr inc loop cr space
- dumpptr @ , 16 + hptr !
- 15 , 0 do hptr ^c@ byte.h hptr inc loop 2 spaces
- dumpptr @ , 16 + hptr !
- 15 , 0 do hptr ^c@ , 32 max emit hptr inc loop
- ." * "
- r> leading !
- r> base !
- ;
-
-
- : inthandler ( => )
- ( ** INT3 Behandlungsroutine ** )
- adr $120 @ ( csgast holen )
- gastptr hiword ! csgast ! ( retten )
- dumpptr hiword !
- adr $11C @ ( si holen )
- sigast ! ( retten )
-
- $106 gastptr ! ( s0gast holen )
- ^@ s0gast ! ( retten )
- $108 gastptr ! ( dpgast holen )
- ^@ dx>tx , $44 + tx>dx dumpptr !
-
- cr
- ." DX:AX=" ( Akku holen, ausgeben )
- adr $114 @ u.h adr $110 @ u.h
-
- ." ADR=" adr $116 @ u.h ( BX ausgeben )
-
- adr $128 @ , 1 and .0=. ( Bedingungsflag )
- if ." .F." else ." .T." endif
-
- ." stack= " ( Stack )
- sigast @>dx s0gast @ .u<.
- if ." unterschritten, jetzt leer * "
- s0gast @ adr $11C !
- else sigast @>dx s0gast @ .=.
- if ." leer * " else .s endif
- endif
-
- Begin key ( Tastaturabfrage )
- case
- 'r' of .regs .F. ;;
- 'p' of dmp .F. ;;
- else .T.
- endcase
- Until
-
- iret ( Return to Caller )
- ;
-
-
- : main >default ( Ausgabevektoren )
- ax inthandler adr entry ! ( handler bei main einsetzen )
- $3 push cs@ >dx $100 setint ( INT3 Vektor auf cs:$100 )
- resident ( resident an DOS geben )
- ;
-
- stacksize( $40 $20 )