FORTH DEFINITIONS

EXVEC: STR
ASSIGN STR TO-DO STRING

VOCABULARY STRIN IMMEDIATE
STRIN DEFINITIONS

CODE STOREBRANCHLINK HEX
   R1 R2 POP,
   R2 R2 8 # ADD,
   R1 R1 R2 SUB,
   R1 R1 2 # LSR MOV,
   R1 R1 FF000000 # BIC,
   R1 R1 EB000000 # ORR,
   R1 [ R2 -8 # ] STR,
   PC R14 MOV,
END-CODE

CODE RUNTIMESTRWORD DECIMAL
   R14 R14 HEX FC000000 # BIC,
   R2 R14 4 # ADD,
   R1 [ R14 ] LDR,
   R3 R1 DECIMAL 11 # ADD,
   R3 R3 3 # BIC,
   R3 R3 R14 ADD,
   RPP ! { R3 } STMFD,
   SP ! { R0 } LDMFD,
   R3 PC 8 # ADD,
   SP ! { R1 R2 } STMFD,
   SP ! { R0 R3 } STMFD,
   CALL STOREBRANCHLINK
   CALL NOOP ( OVERWRITTEN )
   LEAVE,
END-CODE

CODE EXORCOMPILESTRWORD
   ENTER,
   CALL STATE
   CALL @
   R0 POP,
   R0 0 # CMP,
   NE IF,
      CALL HERE
      R1 POP,
      R1 [ SP 4 # ] STR,
      CALL STOREBRANCHLINK
      CALL LIT
      4 ,
      CALL ALLOT
      R0 34 # MOV,
      R0 PUSH,
      CALL WORD
      CALL HERE
      CALL @
      CALL LIT
      11 ,
      CALL +
      R0 POP,
      R0 R0 3 # BIC,
      R0 PUSH,
      CALL ALLOT
      CALL HERE
      R1 POP,
      R0 0 # MOV,
      R0 [ R1 -4 # ] STR,
   ELSE,
      R0 34 # MOV,
      R0 PUSH,
      CALL WORD
      R0 R1 POP,
      RPP ! { R1 } STMFD,
      CALL HERE
      CALL COUNT
      RPP ! { R0 } LDMFD,
      R0 PUSH,
      CALL EXECUTE
   ENDIF,
   LEAVE,
END-CODE

CODE COPYSTR
   SP ! { R0 R1 R2 } LDMFD,
   R0 [ R2 ] 4 # STR,
   R0 0 # CMP,
   PC R14 EQ MOV,
   R4 0 # MOV,
   BEGIN,
      R5 [ R1 ] 1 # LDRB,
      R5 [ R2 ] 1 # STRB,
      R4 R4 1 # ADD,
      R4 R0 CMP,
      EQ
   UNTIL,
   R0 0 # MOV,
   R0 [ R2 ] STRB,
   PC R14 MOV,
END-CODE

CODE STRCPY2
   ENTER,
   CALL COUNT
   CALL COPYSTR
   LEAVE,
END-CODE

CODE (STRCPY")2
   R0 R0 MOV,
   R0 CFA-OF COPYSTR ADR,
   SP ! { R0 } STMFD,
   CFA-OF RUNTIMESTRWORD B,
END-CODE

CODE STRCPY"2
   ENTER,
   R0 STRIN ' (STRCPY")2 ASSEMBLER ADR,
   R1 STRIN ' COPYSTR ASSEMBLER ADR,
   SP ! { R0 R1 } STMFD,
   CALL EXORCOMPILESTRWORD
   LEAVE,
END-CODE IMMEDIATE

FORTH DEFINITIONS

