Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
forth:fgforth:debug [2025/07/09 11:22] – [Beschreibung] volkerpforth:fgforth:debug [2025/07/21 08:55] (aktuell) – [internes] volkerp
Zeile 19: Zeile 19:
 <Q> bricht die Bearbeitung des Wortes ab und stellt dessen Standartabarbeitung wieder ein  <Q> bricht die Bearbeitung des Wortes ab und stellt dessen Standartabarbeitung wieder ein 
  
-Hinweis: der Code ist adress-unabhängig!+Hinweis: das Paket ist unabhängig von der Lage des Forth83 im Speicher; wird das Forth83 auf einen anderen Adressbereich gelinkt, braucht das Paket nicht angepasst zu werden!
 ===== GLOSSAR ===== ===== GLOSSAR =====
  
Zeile 136: Zeile 136:
  
 (Michael Scholz) (Michael Scholz)
 +
 +===== internes =====
 +
 +BC ist der instruction pointer (IP) und IY der return stack pointer (RP).
 +
 +BUG: Das Vokabular, das die Trace-Wörter auf höherer Ebene enthält.\\
 +FNEXT: Eine Maschinensprachen-Subroutine, die NEXT wieder in den ursprünglichen Zustand zurückversetzt.\\
 +DNEXT: Eine Kopie von next, die anstelle der normalen ausgeführt wird.\\
 +DEBNEXT: Die Debugger-Version von next.\\
 +Wenn die IP zwischen <IP und IP> liegt, wird der Inhalt der Ausführungsvariable 'DEBUG ausgeführt.
 +Zuerst wird die IP auf den Parameterstapel gelegt. Das Wort, auf das 'DEBUG zeigt, kann ein beliebiges Wort auf höherer oder niedriger Ebene sein, solange die zuvor abgelegte IP verworfen wird. Es muss durch den Aufruf von PNEXT beendet werden, um next erneut zu patchen und so die Trace-Funktion weiter auszuführen.\\
 +PNEXT patcht Forth's Next, um zu DEBNEXT zu springen. Dies versetzt uns in den DEBUG-Modus und ermöglicht die Trace-Funktion.                                                                                                              
 +
 +<code>
 + VARIABLE 'DEBUG 5517
 + VARIABLE <IP 5521
 + VARIABLE IP> 552b
 + VARIABLE CNT 5535
 +
 +FNEXT: (restauriert orig. NEXT)
 +5541  21 22 04         LD      HL,>NEXT
 +5544  36 0A            LD      (HL),0AH
 +5546  23               INC     HL
 +5547  36 03            LD      (HL),03H
 +5549  23               INC     HL
 +554A  36 6F            LD      (HL),6FH
 +554C  C9               RET
 +---- orig. >NEXT beginnt mit folgenden drei Bytes
 +0422  0A               LD      A,(BC)
 +0423  03               INC     BC
 +0424  6F               LD      L,A
 +
 +DNEXT:
 +5557  0A               LD      A,(BC)
 +5558  03               INC     BC
 +5559  6F               LD      L,A
 +555A  0A               LD      A,(BC)
 +555B  03               INC     BC
 +555C  67               LD      H,A    ; HL := (IP)
 +555D  5E               LD      E,(HL)
 +555E  23               INC     HL
 +555F  56               LD      D,(HL)
 +5560  EB               EX      DE,HL  : DE = ((IP))
 +5561  E9               JP      (HL)
 +
 +DEBNEXT:
 +556E  2A 21 55         LD      HL,(<IP)
 +5571  B7               OR      A
 +5572  ED 42            SBC     HL,BC
 +5574  30 23            JR      NC,5599H
 +5576  2A 2B 55         LD      HL,(IP>)
 +5579  B7               OR      A
 +557A  ED 42            SBC     HL,BC
 +557C  38 1B            JR      C,5599H
 +557E  3A 35 55         LD      A,(CNT)
 +5581  3C               INC     A
 +5582  32 35 55         LD      (CNT),A
 +5585  FE 02            CP      02H
 +5587  20 10            JR      NZ,5599H
 +5589  97               SUB     A
 +558A  32 35 55         LD      (CNT),A
 +558D  CD 41 55         CALL    FNEXT
 +5590  C5               PUSH    BC
 +5591  2A 17 55         LD      HL,('DEBUG)
 +5594  5E               LD      E,(HL)
 +5595  23               INC     HL
 +5596  56               LD      D,(HL)
 +5597  EB               EX      DE,HL
 +5598  E9               JP      (HL)
 +5599  C3 57 55         JP      DNEXT
 +
 +PNEXT is
 +55A6:    LD    HL,>NEXT
 +55A9:    LD    DE,DEBNEXT
 +55AC:    LD    (HL),C3
 +55AE:    INC   HL
 +55AF:    LD    (HL),E
 +55B0:    INC   HL
 +55B1:    LD    (HL),D
 +55B2:    JP     >NEXT
 +55B5: END               
 +
 +UNBUG is
 +55BF:    CALL  FNEXT
 +55C2:    JP     >NEXT
 +55C5: END      
 +</code>
 +
  • forth/fgforth/debug.1752060153.txt.gz
  • Zuletzt geändert: 2025/07/09 11:22
  • von volkerp