Change BF interpreter calling convention, add VM-INSTRUCTION format.

This commit is contained in:
Quinn Evans 2017-04-07 21:32:27 -06:00
parent 28a92f27a8
commit 7d74d7e877
2 changed files with 19 additions and 15 deletions

View File

@ -50,13 +50,13 @@
D 03 DEBUG-CYCLES PIC 9(5).
LINKAGE SECTION.
01 BF-I-O.
03 BF-INPUT PIC X(999).
03 BF-CODE PIC X(999).
03 BF-OUTPUT PIC X(999).
03 CYCLE-LIMIT PIC 9(8).
01 BF-INPUT PIC X(999).
01 BF-CODE PIC X(999).
01 BF-OUTPUT PIC X(999).
01 CYCLE-LIMIT PIC 9(8).
PROCEDURE DIVISION USING BF-I-O.
PROCEDURE DIVISION USING BF-INPUT, BF-CODE,
BF-OUTPUT, CYCLE-LIMIT.
MOVE 1 TO IN-PTR.
MOVE 1 TO IP.
MOVE 0 TO CYCLES.

View File

@ -57,6 +57,9 @@
05 OUT-REG PIC 9.
05 INTERPRETER PIC X(5).
05 INSTRUCTION-CODE PIC X(992).
05 VM-INSTRUCTION REDEFINES INSTRUCTION-CODE.
07 CYCLE-LIMIT PIC 9(8).
07 VM-CODE PIC X(984).
03 RAW-INSTRUCTION REDEFINES INSTRUCTION PIC X(999).
03 PREV-IP PIC 999.
03 NEXT-IP PIC 999.
@ -1084,8 +1087,9 @@
PERFORM INDEX-PARAMS
IF NUM-PARAMS OF WOPO IS LESS THAN 2 THEN
PERFORM BF-LIMIT-CYCLES
D DISPLAY "CYCLE LIMIT. ", CYCLE-LIMIT
CALL "BF-RUN" USING BF-I-O
D DISPLAY "CYCLE LIMIT. ", CYCLE-LIMIT OF BF-I-O
CALL "BF-RUN" USING BF-INPUT, BF-CODE,
BF-OUTPUT, CYCLE-LIMIT OF BF-I-O
D DISPLAY "BF RAN"
PERFORM HANDLE-BF-OUTPUT
ELSE
@ -1097,24 +1101,24 @@
BF-LIMIT-CYCLES.
IF NUM-PARAMS OF WOPO IS EQUAL TO 0 THEN
MOVE 999 TO CYCLE-LIMIT
MOVE 999 TO CYCLE-LIMIT OF BF-I-O
ELSE
MOVE 1 TO PTR(SRC)
PERFORM GET-PARAM
MOVE R(1) TO CYCLE-LIMIT.
IF CYCLE-LIMIT > 250000 THEN
MOVE R(1) TO CYCLE-LIMIT OF BF-I-O.
IF CYCLE-LIMIT OF BF-I-O > 250000 THEN
IF USER-LEVEL < 90 THEN
IF USER-LEVEL < 70 THEN
MOVE 250000 TO CYCLE-LIMIT
MOVE 250000 TO CYCLE-LIMIT OF BF-I-O
PERFORM BF-CYCLES-LIMITED
ELSE IF CYCLE-LIMIT > 1900000 THEN
MOVE 1900000 TO CYCLE-LIMIT
ELSE IF CYCLE-LIMIT OF BF-I-O > 1900000 THEN
MOVE 1900000 TO CYCLE-LIMIT OF BF-I-O
PERFORM BF-CYCLES-LIMITED.
BF-CYCLES-LIMITED.
STRING "INSUFFICIENT LEVEL FOR REQUESTED CYCLE LIMIT. ",
"ACTUAL LIMIT WILL BE ",
CYCLE-LIMIT,
CYCLE-LIMIT OF BF-I-O,
"."
INTO R(1).
MOVE 1 TO SRC.