minizork2-1988/misc.zap

319 lines
6.2 KiB
Plaintext

.FUNCT RANDOM-ELEMENT,FROB
GET FROB,0
RANDOM STACK
GET FROB,STACK
RSTACK
.FUNCT PICK-ONE,FROB,L,CNT,RND,MSG,RFROB
GET FROB,0 >L
GET FROB,1 >CNT
DEC 'L
ADD FROB,2 >FROB
MUL CNT,2
ADD FROB,STACK >RFROB
SUB L,CNT
RANDOM STACK >RND
GET RFROB,RND >MSG
GET RFROB,1
PUT RFROB,RND,STACK
PUT RFROB,1,MSG
INC 'CNT
EQUAL? CNT,L \?CND1
SET 'CNT,0
?CND1: PUT FROB,0,CNT
RETURN MSG
.FUNCT GO
START::
?FCN: PUTB P-LEXV,0,59
CALL QUEUE,I-WIZARD,4
PUT STACK,0,1
CALL QUEUE,I-LANTERN,200
PUTP BALLOON,P?VTYPE,NONLANDBIT
PUTP BUCKET,P?VTYPE,NONLANDBIT
SET 'LIT,TRUE-VALUE
SET 'WINNER,ADVENTURER
SET 'HERE,INSIDE-THE-BARROW
SET 'P-IT-OBJECT,FALSE-VALUE
FSET? HERE,TOUCHBIT /?CND1
CALL V-VERSION
CRLF
?CND1: CALL V-LOOK
CALL MAIN-LOOP
JUMP ?FCN
.FUNCT MAIN-LOOP,TRASH
?PRG1: CALL MAIN-LOOP-1 >TRASH
JUMP ?PRG1
.FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,O,I
SET 'CNT,0
SET 'OBJ,FALSE-VALUE
SET 'PTBL,TRUE-VALUE
CALL PARSER >P-WON
ZERO? P-WON /?CCL3
GET P-PRSI,P-MATCHLEN >ICNT
GET P-PRSO,P-MATCHLEN >OCNT
ZERO? P-IT-OBJECT /?CND4
CALL ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK /?CND4
SET 'TMP,FALSE-VALUE
?PRG8: IGRTR? 'CNT,ICNT /?REP9
GET P-PRSI,CNT
EQUAL? STACK,IT \?PRG8
PUT P-PRSI,CNT,P-IT-OBJECT
SET 'TMP,TRUE-VALUE
?REP9: ZERO? TMP \?CND15
SET 'CNT,0
?PRG17: IGRTR? 'CNT,OCNT /?CND15
GET P-PRSO,CNT
EQUAL? STACK,IT \?PRG17
PUT P-PRSO,CNT,P-IT-OBJECT
?CND15: SET 'CNT,0
?CND4: ZERO? OCNT \?CCL26
SET 'NUM,OCNT
JUMP ?CND24
?CCL26: GRTR? OCNT,1 \?CCL28
SET 'TBL,P-PRSO
ZERO? ICNT \?CCL31
SET 'OBJ,FALSE-VALUE
JUMP ?CND29
?CCL31: GET P-PRSI,1 >OBJ
?CND29: SET 'NUM,OCNT
JUMP ?CND24
?CCL28: GRTR? ICNT,1 \?CCL33
SET 'PTBL,FALSE-VALUE
SET 'TBL,P-PRSI
GET P-PRSO,1 >OBJ
SET 'NUM,ICNT
JUMP ?CND24
?CCL33: SET 'NUM,1
?CND24: ZERO? OBJ \?CND34
EQUAL? ICNT,1 \?CND34
GET P-PRSI,1 >OBJ
?CND34: EQUAL? PRSA,V?WALK \?CCL40
ZERO? P-WALK-DIR /?CCL40
CALL PERFORM,PRSA,PRSO >V
JUMP ?CND38
?CCL40: ZERO? NUM \?CCL44
GETB P-SYNTAX,P-SPREP1
DIV STACK,64
ZERO? STACK \?CCL47
CALL PERFORM,PRSA >V
SET 'PRSO,FALSE-VALUE
JUMP ?CND38
?CCL47: ZERO? LIT \?PRG52
PRINT TOO-DARK
CRLF
JUMP ?CND38
?PRG52: PRINT REFERRING
SET 'V,FALSE-VALUE
JUMP ?CND38
?CCL44: SET 'P-NOT-HERE,0
SET 'P-MULT,FALSE-VALUE
GRTR? NUM,1 \?CND54
SET 'P-MULT,TRUE-VALUE
?CND54: SET 'TMP,FALSE-VALUE
?PRG56: IGRTR? 'CNT,NUM \?CCL60
GRTR? P-NOT-HERE,0 \?CCL63
PRINTI "The "
EQUAL? P-NOT-HERE,NUM /?PRG70
PRINTI "other "
?PRG70: PRINTI "object"
EQUAL? P-NOT-HERE,1 /?PRG76
PRINTC 115
?PRG76: PRINTI " that you mentioned "
EQUAL? P-NOT-HERE,1 /?PRG83
PRINTI "are"
JUMP ?PRG85
?PRG83: PRINTI "is"
?PRG85: PRINTI "n't here."
CRLF
JUMP ?CND38
?CCL63: ZERO? TMP \?CND38
PRINTI "There's nothing here you can take."
CRLF
JUMP ?CND38
?CCL60: ZERO? PTBL /?CCL92
GET P-PRSO,CNT >OBJ1
JUMP ?CND90
?CCL92: GET P-PRSI,CNT >OBJ1
?CND90: ZERO? PTBL /?CCL95
SET 'O,OBJ1
JUMP ?CND93
?CCL95: SET 'O,OBJ
?CND93: ZERO? PTBL /?CCL98
SET 'I,OBJ
JUMP ?CND96
?CCL98: SET 'I,OBJ1
?CND96: GRTR? NUM,1 /?CCL100
GET P-ITBL,P-NC1
GET STACK,0
EQUAL? STACK,W?ALL \?CND99
?CCL100: LOC WINNER >V
EQUAL? O,NOT-HERE-OBJECT \?CCL105
INC 'P-NOT-HERE
JUMP ?PRG56
?CCL105: EQUAL? PRSA,V?TAKE \?CCL107
ZERO? I /?CCL107
GET P-ITBL,P-NC1
GET STACK,0
EQUAL? STACK,W?ALL \?CCL107
IN? O,I \?PRG56
?CCL107: EQUAL? P-GETFLAGS,P-ALL \?CCL113
EQUAL? PRSA,V?TAKE \?CCL113
LOC O
EQUAL? STACK,WINNER,HERE,V /?PRD118
LOC O
EQUAL? STACK,I /?PRD118
LOC O
FSET? STACK,SURFACEBIT \?PRG56
?PRD118: FSET? O,TAKEBIT /?CCL113
FSET? O,TRYTAKEBIT \?PRG56
?CCL113: EQUAL? OBJ1,IT \?CCL126
PRINTD P-IT-OBJECT
JUMP ?PRG127
?CCL126: PRINTD OBJ1
?PRG127: PRINTI ": "
?CND99: SET 'PRSO,O
SET 'PRSI,I
SET 'TMP,TRUE-VALUE
CALL PERFORM,PRSA,PRSO,PRSI >V
EQUAL? V,M-FATAL \?PRG56
?CND38: EQUAL? V,M-FATAL /?CND131
LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-END >V
?CND131: EQUAL? V,M-FATAL \?CND1
SET 'P-CONT,FALSE-VALUE
JUMP ?CND1
?CCL3: SET 'P-CONT,FALSE-VALUE
?CND1: ZERO? P-WON /FALSE
EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL /TRUE
EQUAL? PRSA,V?VERSION,V?SAVE,V?VERBOSE /TRUE
EQUAL? PRSA,V?SCORE,V?RESTART,V?QUIT /TRUE
EQUAL? PRSA,V?RESTORE,V?UNSCRIPT,V?SCRIPT /TRUE
CALL CLOCKER >V
RETURN V
.FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI
SET 'OA,PRSA
SET 'OO,PRSO
SET 'OI,PRSI
EQUAL? IT,I,O \?CND1
CALL ACCESSIBLE?,P-IT-OBJECT
ZERO? STACK \?CND1
PRINT REFERRING
RETURN 2
?CND1: EQUAL? O,IT \?CND9
SET 'O,P-IT-OBJECT
?CND9: EQUAL? I,IT \?CND11
SET 'I,P-IT-OBJECT
?CND11: SET 'PRSA,A
SET 'PRSO,O
ZERO? PRSO /?CND13
EQUAL? PRSI,IT /?CND13
EQUAL? PRSA,V?WALK /?CND13
SET 'P-IT-OBJECT,PRSO
?CND13: SET 'PRSI,I
EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?CCL20
CALL NOT-HERE-OBJECT-F >V
ZERO? V \?CND18
?CCL20: SET 'O,PRSO
SET 'I,PRSI
GETP WINNER,P?ACTION
CALL STACK >V
ZERO? V \?CND18
LOC WINNER
GETP STACK,P?ACTION
CALL STACK,M-BEG >V
ZERO? V \?CND18
GET PREACTIONS,A
CALL STACK >V
ZERO? V \?CND18
ZERO? I /?CCL31
GETP I,P?ACTION
CALL STACK >V
ZERO? V \?CND18
?CCL31: ZERO? O /?CCL35
EQUAL? A,V?WALK /?CCL35
LOC O
ZERO? STACK /?CCL35
LOC O
GETP STACK,P?CONTFCN
CALL STACK >V
ZERO? V \?CND18
?CCL35: ZERO? O /?CCL41
EQUAL? A,V?WALK /?CCL41
GETP O,P?ACTION
CALL STACK >V
ZERO? V \?CND18
?CCL41: GET ACTIONS,A
CALL STACK >V
ZERO? V /?CND18
?CND18: SET 'PRSA,OA
SET 'PRSO,OO
SET 'PRSI,OI
RETURN V
.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 \?CCL5
SUB C-INTS,C-INTLEN >C-INTS
ZERO? DEMON /?PEN6
SUB C-DEMONS,C-INTLEN >C-DEMONS
?PEN6: ADD C-TABLE,C-INTS >INT
PUT INT,C-RTN,RTN
RETURN INT
?CCL5: 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 /?CCL5
PUSH C-INTS
JUMP ?CND3
?CCL5: PUSH C-DEMONS
?CND3: ADD C-TABLE,STACK >C
ADD C-TABLE,C-TABLELEN >E
?PRG6: EQUAL? C,E \?CCL10
INC 'MOVES
RETURN FLG
?CCL10: GET C,C-ENABLED?
ZERO? STACK /?CND8
GET C,C-TICK >TICK
ZERO? TICK /?CND8
SUB TICK,1
PUT C,C-TICK,STACK
GRTR? TICK,1 /?CND8
GET C,C-RTN
CALL STACK
ZERO? STACK /?CND8
SET 'FLG,TRUE-VALUE
?CND8: ADD C,C-INTLEN >C
JUMP ?PRG6
.ENDI