zork.3 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. TITLE TRIVIA startup
  2. .MLLIT==1
  3. TTYCHN==1
  4. SAVCHN==2
  5. MUDCHN==3
  6. DSKCHN==4
  7. A=1
  8. B=2
  9. C=3
  10. TIME=3
  11. NOW=4
  12. XUNAME=5
  13. P=17
  14. VBPTR: 440700,,A
  15. VSBPTR: 140600,,B
  16. DSKDEV: SIXBIT /DSK/
  17. MSGDIR: SIXBIT /_MSGS_/
  18. BADNAM: SIXBIT /ABADBO/
  19. BADDIR: SIXBIT /VANISH/
  20. SXUNAM: BLOCK 2
  21. START: MOVE P,[-30,,PDL-1]
  22. .OPEN TTYCHN,[SIXBIT / !TTY/]
  23. .LOSE 1000
  24. .SUSET [.RXUNAME,,XUNAME]
  25. HLRZ A,XUNAME
  26. CAIN A,777777
  27. JRST LOGIN
  28. .CALL DEATH
  29. JRST CKUSER
  30. .CALL [SETZ ; GET FILE LENGTH IN A
  31. SIXBIT /FILLEN/
  32. MOVEI DSKCHN
  33. SETZM A]
  34. JRST FAKMSG
  35. CAIN A,
  36. JRST FAKMSG
  37. MOVE B,BUFPTR
  38. .IOT DSKCHN,B
  39. .CLOSE DSKCHN,
  40. MOVE B,[440700,,BUF]
  41. MSGDTH: PUSHJ P,OUTMSG
  42. MSGEND: CAME XUNAME,[SIXBIT /TAA/]
  43. CAMN XUNAME,[SIXBIT /MARC/]
  44. JRST WIN
  45. .BREAK 16,140000
  46. FAKMSG: MOVE B,[440700,,MSG]
  47. .CLOSE DSKCHN,
  48. JRST MSGDTH
  49. CKUSER: LDB A,[063600,,XUNAME]
  50. CAMN A,[SIXBIT / GUEST/]
  51. JRST CKTIME
  52. .CALL DIROPN ; REAL PERSON?
  53. JRST CKTIME ; NOPE
  54. .CALL MSGOPN ; REALLY A REAL PERSON?
  55. JRST LOSNAM
  56. .CLOSE DSKCHN,
  57. WIN: .CALL SAVOPN
  58. .VALUE [ASCIZ /: No SAVE file?
  59. 
  60. /]
  61. .IOT SAVCHN,[-1,,A]
  62. MOVSI B,SIXBIT / MUD/
  63. ILDB C,VBPTR
  64. SUBI C,40
  65. DPB C,VSBPTR
  66. ILDB C,VBPTR
  67. SUBI C,40
  68. IDPB C,VSBPTR
  69. .ACCES SAVCHN,[0]
  70. .CALL MUDOPN
  71. .VALUE [ASCIZ /: No TS MUDDLE ?
  72. 
  73. /]
  74. MOVSI 17,STUFF
  75. BLT 17,17
  76. JRST 1
  77. LOSNAM: MOVE B,[440700,,NAMMSG]
  78. PUSHJ P,OUTMSG
  79. MOVE B,[440600,,XUNAME]
  80. MOVE C,[440700,,SXUNAM]
  81. SIXLOP: ILDB A,B
  82. JUMPE A,SIXTOO
  83. ADDI A,40
  84. IDPB A,C
  85. JRST SIXLOP
  86. SIXTOO: MOVE B,[440700,,SXUNAM]
  87. PUSHJ P,OUTMSG
  88. MOVE B,[440700,,NAMEND]
  89. PUSHJ P,OUTMSG
  90. .BREAK 16,160000
  91. LOGIN: MOVE B,[440700,,LOGMSG]
  92. PUSHJ P,OUTMSG
  93. .BREAK 16,160000
  94. OFFHOR: MOVE B,[440700,,OFFMSG]
  95. PUSHJ P,OUTMSG
  96. .BREAK 16,160000
  97. CKTIME: .RYEAR A,
  98. LDB A,[320300,,A] ; IS IT A WEEKEND?
  99. JUMPE A,CURFCK
  100. CAIN A,6
  101. JRST CURFCK
  102. .RTIME A,
  103. LDB A,[301400,,A] ; IS IT OFFICE HOURS?
  104. CAIGE A,'20
  105. CAIGE A,'09
  106. JRST CURFCK
  107. .RDATE A,
  108. .CALL HOLOPN ; IS IT A HOLIDAY?
  109. JRST FLUSH
  110. CURFCK: .CALL CURFEW
  111. JRST WIN
  112. .CLOSE DSKCHN,
  113. MOVE B,[440700,,CURMSG]
  114. PUSHJ P,OUTMSG
  115. .BREAK 16,160000
  116. FLUSH: .CALL BADBOY
  117. JRST NEWBAD
  118. .CALL RFDATE
  119. JFCL
  120. .CALL RQDATE
  121. JFCL
  122. .CALL SFDATE
  123. JFCL
  124. .CLOSE DSKCHN,
  125. HLRZ A,TIME ; DID THE TURKEY TRY <1/2 HR AGO?
  126. HLRZ B,NOW
  127. CAME A,B
  128. JRST OFFHOR
  129. SUB NOW,TIME
  130. CAIGE NOW,2400.
  131. JRST LOGOUT
  132. JRST OFFHOR
  133. NEWBAD: .CALL MAKBAD
  134. .LOSE 1000
  135. .CLOSE DSKCHN,
  136. JRST OFFHOR
  137. LOGOUT: .VALUE [ASCIZ /:You don't believe me, eh? That makes me MAD!!!
  138. :LOGOUT
  139. /]
  140. .BREAK 16,160000
  141. OUTMSG: PUSH P,A ; GIVEN BYTE POINTER, PRINT FROB OUT
  142. PUSH P,C
  143. PUSH P,B
  144. MOVEI C,
  145. OUTLOP: ILDB A,B ; LIKES BYTE POINTER TO FROB IN B
  146. CAIE A,0
  147. CAIN A,3
  148. JRST OUTEND
  149. AOJA C,OUTLOP
  150. OUTEND: POP P,B ; GET BYTE POINTER IN B, COUNT IS IN C
  151. .CALL [SETZ
  152. SIXBIT /SIOT/
  153. MOVEI TTYCHN
  154. B
  155. SETZ C]
  156. .LOSE 1000
  157. POP P,C
  158. POP P,A
  159. POPJ P,
  160. DEATH: SETZ
  161. SIXBIT /OPEN/
  162. MOVSI .BII
  163. MOVEI DSKCHN
  164. DSKDEV
  165. [SIXBIT /ZORK/]
  166. [SIXBIT /DEATH/]
  167. SETZ MSGDIR
  168. DIROPN: SETZ
  169. SIXBIT /OPEN/
  170. MOVSI .BII
  171. MOVEI DSKCHN
  172. DSKDEV
  173. [SIXBIT /.FILE./]
  174. [SIXBIT /(DIR)/]
  175. SETZ XUNAME
  176. MSGOPN: SETZ
  177. SIXBIT /OPEN/
  178. MOVSI .BII
  179. MOVEI DSKCHN
  180. DSKDEV
  181. MSGDIR
  182. XUNAME
  183. SETZ XUNAME
  184. MUDOPN: SETZ
  185. SIXBIT /OPEN/
  186. MOVSI 4
  187. MOVEI MUDCHN
  188. DSKDEV
  189. [SIXBIT /TS/]
  190. B
  191. SETZ [SIXBIT /SYS1/]
  192. SAVOPN: SETZ
  193. SIXBIT /OPEN/
  194. MOVSI 6
  195. MOVEI SAVCHN
  196. DSKDEV
  197. [SIXBIT /MADADV/]
  198. [SIXBIT /SAVE/]
  199. SETZ [SIXBIT /MADMAN/]
  200. HOLOPN: SETZ
  201. SIXBIT /OPEN/
  202. MOVSI .BII
  203. MOVEI DSKCHN
  204. DSKDEV
  205. [SIXBIT /HLIDAY/]
  206. A
  207. SETZ [SIXBIT /COMBAT/]
  208. CURFEW: SETZ
  209. SIXBIT /OPEN/
  210. MOVSI .BII
  211. MOVEI DSKCHN
  212. DSKDEV
  213. [SIXBIT /TRIVIA/]
  214. [SIXBIT /CURFEW/]
  215. SETZ MSGDIR
  216. BADBOY: SETZ
  217. SIXBIT /OPEN/
  218. MOVSI .BII
  219. MOVEI DSKCHN
  220. DSKDEV
  221. BADNAM
  222. XUNAME
  223. SETZ BADDIR
  224. RFDATE: SETZ
  225. SIXBIT /RFDATE/
  226. MOVEI DSKCHN
  227. SETZM TIME
  228. RQDATE: SETZ
  229. SIXBIT /RQDATE/
  230. SETZM NOW
  231. SFDATE: SETZ
  232. SIXBIT /SFDATE/
  233. MOVEI DSKCHN
  234. SETZ NOW
  235. MAKBAD: SETZ
  236. SIXBIT /OPEN/
  237. MOVSI 1
  238. MOVEI DSKCHN
  239. DSKDEV
  240. BADNAM
  241. XUNAME
  242. SETZ BADDIR
  243. STUFF: OFFSET -.
  244. 2
  245. .CALL LOAD
  246. .VALUE
  247. .IOT MUDCHN,A
  248. .CLOSE MUDCHN,
  249. ADDI A,1
  250. JRST @A
  251. LOAD: SETZ
  252. SIXBIT /LOAD/
  253. 1000,,-1
  254. SETZI MUDCHN
  255. OFFSET 0
  256. MSG: ASCIZ /
  257. ZORK is down for repairs. Sigh.
  258. /
  259. OFFMSG: ASCIZ /
  260. ZORK is not available during office hours (9 AM to 8 PM, Eastern time.)
  261. /
  262. NAMMSG: ASCIZ /
  263. Losers with the name /
  264. NAMEND: ASCIZ / cannot play ZORK!
  265. /
  266. LOGMSG: ASCIZ /
  267. Losers who are not logged in cannot play ZORK!
  268. /
  269. CURMSG: ASCIZ /
  270. The system is VERY loaded. Please try again later.
  271. /
  272. BUF: BLOCK 200
  273. BUFPTR: BUF-.,,BUF
  274. PDL: BLOCK 30
  275. END START