diff --git a/Makefile b/Makefile index bbd39968..64ec29f7 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \ BIN = sys sys1 sys2 emacs _teco_ lisp liblsp alan inquir sail comlap \ c decsys graphs draw datdrw fonts fonts1 fonts2 games macsym \ maint _www_ gt40 llogo bawden sysbin -pics- lmman r shrdlu imlac \ - pdp10 + pdp10 madman MINSRC = midas system $(DDT) $(SALV) $(KSFEDR) $(DUMP) # These are not included on the tape. diff --git a/bin/madman/madadv.save b/bin/madman/madadv.save new file mode 100644 index 00000000..161ae4ca Binary files /dev/null and b/bin/madman/madadv.save differ diff --git a/build/misc.tcl b/build/misc.tcl index a9e47cda..08f14e4a 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -143,7 +143,7 @@ respond "System?" "ITS\r" expect ":KILL" respond "*" ":link sys2;ts dc,sys1;ts dcrock\r" -# Zork +# Not Zork respond "*" ":midas sys3;ts zork_sysen3;zork\r" expect ":KILL" diff --git a/build/muddle.tcl b/build/muddle.tcl index 72c3bcd7..c361eb22 100644 --- a/build/muddle.tcl +++ b/build/muddle.tcl @@ -52,3 +52,7 @@ expect ":KILL" respond "*" ":midas sys3; ts pick_sysen2; pick\r" expect ":KILL" + +# Zork startup +respond "*" ":midas sys2; ts zork_taa; zork\r" +expect ":KILL" diff --git a/src/taa/zork.3 b/src/taa/zork.3 new file mode 100644 index 00000000..a59cc08a --- /dev/null +++ b/src/taa/zork.3 @@ -0,0 +1,383 @@ +TITLE TRIVIA startup + +.MLLIT==1 + +TTYCHN==1 +SAVCHN==2 +MUDCHN==3 +DSKCHN==4 + +O=0 +A=1 +B=2 +C=3 +TIME=3 +NOW=4 +XUNAME=5 +P=17 +VBPTR: 440700,,A +VSBPTR: 140600,,B +DSKDEV: SIXBIT /DSK/ +MSGDIR: SIXBIT /_MSGS_/ +BADNAM: SIXBIT /ABADBO/ +BADDIR: SIXBIT /VANISH/ +SXUNAM: BLOCK 2 + +START: MOVE P,[-30,,PDL-1] + .OPEN TTYCHN,[SIXBIT / !TTY/] + .LOSE 1000 + .SUSET [.RXUNAME,,XUNAME] + HLRZ A,XUNAME + CAIN A,777777 + JRST LOGIN + .CALL DEATH + JRST CKUSER + .CALL [SETZ ; GET FILE LENGTH IN A + SIXBIT /FILLEN/ + MOVEI DSKCHN + SETZM A] + JRST FAKMSG + CAIN A, + JRST FAKMSG + MOVE B,BUFPTR + .IOT DSKCHN,B + .CLOSE DSKCHN, + MOVE B,[440700,,BUF] +MSGDTH: PUSHJ P,OUTMSG +MSGEND: PUSHJ P,WINNER + JRST WIN + .BREAK 16,140000 +FAKMSG: MOVE B,[440700,,MSG] + .CLOSE DSKCHN, + JRST MSGDTH + +CKUSER: PUSHJ P,WINNER + JRST WIN + LDB A,[063600,,XUNAME] + CAMN A,[SIXBIT / GUEST/] + JRST CKTIME + .CALL DIROPN ; REAL PERSON? + JRST CKTIME ; NOPE + .CALL MSGOPN ; REALLY A REAL PERSON? + JRST LOSNAM + .CLOSE DSKCHN, +CKNUM: PUSHJ P,ZKCNT + JRST TOOMNY + +WIN: .CALL SAVOPN + .VALUE [ASCIZ /: No SAVE file? + +/] + .IOT SAVCHN,[-1,,A] + MOVSI B,SIXBIT / MUD/ + ILDB C,VBPTR + SUBI C,40 + DPB C,VSBPTR + ILDB C,VBPTR + SUBI C,40 + IDPB C,VSBPTR + .ACCES SAVCHN,[0] + + .CALL MUDOPN + .VALUE [ASCIZ /: No TS MUDDLE ? + +/] + MOVSI 17,STUFF + BLT 17,17 + JRST 1 + +LOSNAM: MOVE B,[440700,,NAMMSG] + PUSHJ P,OUTMSG + MOVE B,[440600,,XUNAME] + MOVE C,[440700,,SXUNAM] +SIXLOP: ILDB A,B + JUMPE A,SIXTOO + ADDI A,40 + IDPB A,C + JRST SIXLOP +SIXTOO: MOVE B,[440700,,SXUNAM] + PUSHJ P,OUTMSG + MOVE B,[440700,,NAMEND] + PUSHJ P,OUTMSG + .BREAK 16,160000 + +LOGIN: MOVE B,[440700,,LOGMSG] + PUSHJ P,OUTMSG + .BREAK 16,160000 + +OFFHOR: MOVE B,[440700,,OFFMSG] + PUSHJ P,OUTMSG + .BREAK 16,160000 +TOOMNY: MOVE B,[440700,,TOOMSG] + PUSHJ P,OUTMSG + .BREAK 16,160000 + +CKTIME: .RYEAR A, + LDB A,[320300,,A] ; IS IT A WEEKEND? + JUMPE A,CURFCK + CAIN A,6 + JRST CURFCK + .RTIME A, + LDB A,[301400,,A] ; IS IT OFFICE HOURS? + CAIGE A,'20 + CAIGE A,'09 + JRST CURFCK + .RDATE A, + .CALL HOLOPN ; IS IT A HOLIDAY? + JRST FLUSH + +CURFCK: .CALL CURFEW + JRST CKNUM + .CLOSE DSKCHN, + MOVE B,[440700,,CURMSG] + PUSHJ P,OUTMSG + .BREAK 16,160000 + +FLUSH: .CALL BADBOY + JRST NEWBAD + .CALL RFDATE + JFCL + .CALL RQDATE + JFCL + .CALL SFDATE + JFCL + .CLOSE DSKCHN, + HLRZ A,TIME ; DID THE TURKEY TRY <1/2 HR AGO? + HLRZ B,NOW + CAME A,B + JRST OFFHOR + SUB NOW,TIME + CAIGE NOW,2400. + JRST LOGOUT + JRST OFFHOR + +NEWBAD: .CALL MAKBAD + .LOSE 1000 + .CLOSE DSKCHN, + JRST OFFHOR + +LOGOUT: .VALUE [ASCIZ /:You don't believe me, eh? That makes me MAD!!! +0U +/] + .BREAK 16,160000 + +ZKCNT: MOVEI B,40 + MOVEI O,3 +ZKLOP: SOJL B,[AOS (P) + POPJ P,] + SKIPN @MSUSER + JRST ZKLOP + MOVE A,@MSRED2 + CAME A,[SIXBIT /ZORK/] + JRST ZKLOP + SOJG O,ZKLOP + POPJ P, + + SQUOZE 0,MSUSER +MSUSER: 0 + SQUOZE 0,MSRED2 +MSRED2: 0 +INIT: MOVE B,[-200,,200] + MOVEI A,0 + .CALL [SETZ + SIXBIT /CORBLK/ + MOVEI %CBRED + MOVEI %JSELF + B + MOVEI %JSABS + SETZ A] + .LOSE 1000 + MOVE A,MSUSER-1 + .EVAL A, + .LOSE 1000 + ADD A,[B,,400000] + MOVEM A,MSUSER + MOVE A,MSRED2-1 + .EVAL A, + .LOSE 1000 + ADD A,[B,,400000] + MOVEM A,MSRED2 + .VALUE [ASCIZ /K +:PDUMP SYS2;TS ZORK +:KILL +/] + +OUTMSG: PUSH P,A ; GIVEN BYTE POINTER, PRINT FROB OUT + PUSH P,C + PUSH P,B + MOVEI C, +OUTLOP: ILDB A,B ; LIKES BYTE POINTER TO FROB IN B + CAIE A,0 + CAIN A,3 + JRST OUTEND + AOJA C,OUTLOP +OUTEND: POP P,B ; GET BYTE POINTER IN B, COUNT IS IN C + .CALL [SETZ + SIXBIT /SIOT/ + MOVEI TTYCHN + B + SETZ C] + .LOSE 1000 + POP P,C + POP P,A + POPJ P, + +WINNER: CAME XUNAME,[SIXBIT /TAA/] + CAMN XUNAME,[SIXBIT /MARC/] + POPJ P, + CAME XUNAME,[SIXBIT /PDL/] + CAMN XUNAME,[SIXBIT /SEC/] + POPJ P, + CAME XUNAME,[SIXBIT /BKD/] + CAMN XUNAME,[SIXBIT /ELBOW/] + POPJ P, + AOS (P) + POPJ P, + +DEATH: SETZ + SIXBIT /OPEN/ + MOVSI .BII + MOVEI DSKCHN + DSKDEV + [SIXBIT /ZORK/] + [SIXBIT /DEATH/] + SETZ MSGDIR + +DIROPN: SETZ + SIXBIT /OPEN/ + MOVSI .BII + MOVEI DSKCHN + DSKDEV + [SIXBIT /.FILE./] + [SIXBIT /(DIR)/] + SETZ XUNAME + +MSGOPN: SETZ + SIXBIT /OPEN/ + MOVSI .BII + MOVEI DSKCHN + DSKDEV + MSGDIR + XUNAME + SETZ XUNAME + +MUDOPN: SETZ + SIXBIT /OPEN/ + MOVSI 4 + MOVEI MUDCHN + DSKDEV + [SIXBIT /TS/] + B + SETZ [SIXBIT /SYS1/] + +SAVOPN: SETZ + SIXBIT /OPEN/ + MOVSI 6 + MOVEI SAVCHN + DSKDEV + [SIXBIT /MADADV/] + [SIXBIT /SAVE/] + SETZ [SIXBIT /MADMAN/] + +HOLOPN: SETZ + SIXBIT /OPEN/ + MOVSI .BII + MOVEI DSKCHN + DSKDEV + [SIXBIT /HLIDAY/] + A + SETZ [SIXBIT /COMBAT/] + +CURFEW: SETZ + SIXBIT /OPEN/ + MOVSI .BII + MOVEI DSKCHN + DSKDEV + [SIXBIT /TRIVIA/] + [SIXBIT /CURFEW/] + SETZ MSGDIR + +BADBOY: SETZ + SIXBIT /OPEN/ + MOVSI .BII + MOVEI DSKCHN + DSKDEV + BADNAM + XUNAME + SETZ BADDIR + +RFDATE: SETZ + SIXBIT /RFDATE/ + MOVEI DSKCHN + SETZM TIME + +RQDATE: SETZ + SIXBIT /RQDATE/ + SETZM NOW + +SFDATE: SETZ + SIXBIT /SFDATE/ + MOVEI DSKCHN + SETZ NOW + +MAKBAD: SETZ + SIXBIT /OPEN/ + MOVSI 1 + MOVEI DSKCHN + DSKDEV + BADNAM + XUNAME + SETZ BADDIR + +STUFF: OFFSET -. + 2 + .CALL LOAD + .VALUE + .IOT MUDCHN,A + .CLOSE MUDCHN, + ADDI A,1 + JRST @A + +LOAD: SETZ + SIXBIT /LOAD/ + 1000,,-1 + SETZI MUDCHN + + OFFSET 0 + +MSG: ASCIZ / +ZORK is down for repairs. Sigh. +/ +OFFMSG: ASCIZ / +ZORK is not available during office hours (9 AM to 8 PM, Eastern time.) +/ +TOOMSG: ASCIZ / +There appears before you a threatening figure clad all over +in heavy black armor. His legs seem like the massive trunk +of the oak tree. His broad shoulders and helmeted head loom +high over your own puny frame and you realize that his powerful +arms could easily crush the very life from your body. There +hangs from his belt a veritable arsenal of deadly weapons: +sword, mace, ball and chain, dagger, lance, and trident. +He speaks with a commanding voice: + + "YOU SHALL NOT PASS " + +As he grabs you by the neck all grows dim about you./ +NAMMSG: ASCIZ / +Losers with the name / +NAMEND: ASCIZ / cannot play ZORK! +/ +LOGMSG: ASCIZ / +Losers who are not logged in cannot play ZORK! +/ +CURMSG: ASCIZ / +The system is VERY loaded. Please try again later. +/ +BUF: BLOCK 200 +BUFPTR: BUF-.,,BUF + +PDL: BLOCK 30 + +END START + \ No newline at end of file