Self Modifying Code
Posted: Sun Oct 28, 2018 9:53 pm
I'd like to talk about creative uses of self modifying code. To start things off, I present some self modifying code from my Forth's kernel:
This line in SCAN
modifies the branch for the UNTIL, loop.
These lines in SKIP
modifies the branch in the same loop.
As chitselb said, Waddya think, sirs?
Code: Select all
// SCAN
HEX
CODE SCAN ( A1 L1 C -- A2 L2 )
0= # LDA, HERE 24 + STA,
3 # LDA, SETUP JSR,
AHEAD,
BEGIN,
N 4 + INC,
0= IF, N 5 + INC, THEN,
N 2+ LDA,
0= IF, N 3 + DEC, THEN,
N 2+ DEC,
CS-SWAP THEN, // AHEAD JUMPS TO HERE
N 2+ LDA, N 3 + ORA,
0= NOT WHILE,
N 4 + )Y LDA, N EOR, .A ASL,
0= UNTIL, // STORE DESIRED BRANCH HERE
THEN,
DEX, DEX,
N 4 + LDA, 0 ,X STA,
N 5 + LDA, 1 ,X STA,
N 2+ LDA, PHA,
N 3 + LDA,
PUSH JMP, END-CODE
CODE SKIP ( A1 L1 C -- A2 L2 )
0= NOT # LDA,
' SCAN @ 26 + STA,
' SCAN @ 5 + JMP, END-CODE
Code: Select all
0= # LDA, HERE 24 + STA,
These lines in SKIP
Code: Select all
0= NOT # LDA,
' SCAN @ 26 + STA,
As chitselb said, Waddya think, sirs?