witness/clock.zap

64 lines
1.2 KiB
Plaintext
Raw Permalink Normal View History

2019-04-14 04:21:21 +03:00
.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,VAL
ZERO? CLOCK-WAIT /?CND1
SET 'CLOCK-WAIT,FALSE-VALUE
RFALSE
?CND1: INC 'PRESENT-TIME
GRTR? PRESENT-TIME,1199 \?CND5
CALL TIMES-UP
?CND5: IGRTR? 'MOVES,59 \?CND8
SET 'MOVES,0
IGRTR? 'SCORE,23 \?CND8
SET 'SCORE,0
?CND8: ZERO? P-WON /?ELS18
PUSH C-INTS
JUMP ?CND14
?ELS18: PUSH C-DEMONS
?CND14: ADD C-TABLE,STACK >C
ADD C-TABLE,C-TABLELEN >E
?PRG22: EQUAL? C,E \?ELS26
RETURN FLG
?ELS26: GET C,C-ENABLED?
ZERO? STACK /?CND24
GET C,C-TICK >TICK
ZERO? TICK \?ELS31
JUMP ?CND24
?ELS31: SUB TICK,1
PUT C,C-TICK,STACK
GRTR? TICK,1 /?CND29
GET C,C-RTN
CALL STACK >VAL
ZERO? VAL /?CND29
ZERO? FLG /?THN42
EQUAL? VAL,M-FATAL \?CND24
?THN42: SET 'FLG,VAL
?CND29:
?CND24: ADD C,C-INTLEN >C
JUMP ?PRG22
.ENDI