56 lines
986 B
Plaintext
56 lines
986 B
Plaintext
|
|
|
|
.FUNCT QUEUE,RTN,TICK,CINT
|
|
CALL INT,RTN >CINT
|
|
PUT CINT,C-TICK,TICK
|
|
RETURN CINT
|
|
|
|
|
|
.FUNCT INT,RTN,DEMON=0,E,C,INT
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
ADD C-TABLE,C-INTS >C
|
|
?PRG1: EQUAL? C,E \?ELS5
|
|
SUB C-INTS,C-INTLEN >C-INTS
|
|
ZERO? DEMON /?ELS7
|
|
SUB C-DEMONS,C-INTLEN >C-DEMONS
|
|
?ELS7: ADD C-TABLE,C-INTS >INT
|
|
PUT INT,C-RTN,RTN
|
|
RETURN INT
|
|
?ELS5: GET C,C-RTN
|
|
EQUAL? STACK,RTN \?CND3
|
|
RETURN C
|
|
?CND3: ADD C,C-INTLEN >C
|
|
JUMP ?PRG1
|
|
|
|
|
|
.FUNCT CLOCKER,C,E,TICK,FLG=0
|
|
ZERO? CLOCK-WAIT /?CND1
|
|
SET 'CLOCK-WAIT,FALSE-VALUE
|
|
RFALSE
|
|
?CND1: ZERO? P-WON /?ELS9
|
|
PUSH C-INTS
|
|
JUMP ?CND5
|
|
?ELS9: PUSH C-DEMONS
|
|
?CND5: ADD C-TABLE,STACK >C
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
?PRG13: EQUAL? C,E \?ELS17
|
|
INC 'MOVES
|
|
RETURN FLG
|
|
?ELS17: GET C,C-ENABLED?
|
|
ZERO? STACK /?CND15
|
|
GET C,C-TICK >TICK
|
|
ZERO? TICK \?ELS22
|
|
JUMP ?CND15
|
|
?ELS22: SUB TICK,1
|
|
PUT C,C-TICK,STACK
|
|
GRTR? TICK,1 /?CND20
|
|
GET C,C-RTN
|
|
CALL STACK
|
|
ZERO? STACK /?CND20
|
|
SET 'FLG,TRUE-VALUE
|
|
?CND20:
|
|
?CND15: ADD C,C-INTLEN >C
|
|
JUMP ?PRG13
|
|
|
|
.ENDI
|