SUBROUTINE FETCH C C PURPOSE: MOVES COMMAND POINTED TO BY PROGRAM COUNTER FROM PROGRAM C MEMORY TO /COMAND/ COMMON FOR SUBSEQUENT EXECUTION, AND UPDATES PC. C NOTE: ALL COMMANDS THAT ARE ALREADY CODED INTO INTERNAL FORMAT ARE C DESIGNATED BY A NEGATIVE BYTE COUNT IN "LENGTH". C C VARIABLES: C P -COMMON BYTE ARRAY CONTAINING PROGRAM STEPS C PC -COMMON INTEGER VARIABLE POINTS TO CURRENT PROGRAM STEP C CMND -COMMON BYTE ARRAY USED TO HOLD CURRENTLY EXECUTING COMMAND C LENGTH -COMMON INTEGER VARIABLE SET TO # BYTES IN "CMND"... SET C +VE WHEN COMMAND IN EXTERNAL, TEXT FORMAT; SET -VE WHEN C COMMAND IN INTERNAL, CODED FORMAT. C C SUBROUTINES REQUIRED: C STEPPC - MOVES PROGRAM COUNTER TO NEXT SEQUENTIAL INSTRUCTION IN C PROGRAM MEMORY BASED ON AN INTERNAL TABLE OF # BYTES EACH C INSTRUCTION REQUIRES IN MEMORY. C C SORENSON, 1/81 C COMMON/COMAND/LENGTH,CMND(40) BYTE CMND COMMON/MEMORY/PC,P(1000) BYTE P INTEGER PC C C SAVE CURRENT PC, MOVE TO NEXT INSTRUCTION. C LASTPC=PC CALL STEPPC LENGTH=PC-LASTPC C C CURRENTLY FORCE "R/S" AS LAST PROGRAM STEP; SO WHEN STEPPC ROLLS C PC OVER FROM LAST STEP TO STEP =1, KNOW ONLY NEED 1 BYTE TO STORE R/S. C IF(LENGTH.LT.0)LENGTH=1 IF(LENGTH.EQ.0)GO TO 21 C C TRANSFER PRECEEDING COMMAND TO "CMND" ARRAY C 5 DO 10 I=1,LENGTH CMND(I)=P(LASTPC) LASTPC=LASTPC+1 10 CONTINUE C C NEGATE "LENGTH" TO SIGNAL "CMND" IS IN INTERNAL FORMAT, AND EXIT C 20 LENGTH=-LENGTH 21 RETURN END