zork.3 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. TITLE TRIVIA startup
  2. .MLLIT==1
  3. TTYCHN==1
  4. SAVCHN==2
  5. MUDCHN==3
  6. DSKCHN==4
  7. O=0
  8. A=1
  9. B=2
  10. C=3
  11. TIME=3
  12. NOW=4
  13. XUNAME=5
  14. P=17
  15. VBPTR: 440700,,A
  16. VSBPTR: 140600,,B
  17. DSKDEV: SIXBIT /DSK/
  18. MSGDIR: SIXBIT /_MSGS_/
  19. BADNAM: SIXBIT /ABADBO/
  20. BADDIR: SIXBIT /VANISH/
  21. SXUNAM: BLOCK 2
  22. START: MOVE P,[-30,,PDL-1]
  23. .OPEN TTYCHN,[SIXBIT / !TTY/]
  24. .LOSE 1000
  25. .SUSET [.RXUNAME,,XUNAME]
  26. HLRZ A,XUNAME
  27. CAIN A,777777
  28. JRST LOGIN
  29. .CALL DEATH
  30. JRST CKUSER
  31. .CALL [SETZ ; GET FILE LENGTH IN A
  32. SIXBIT /FILLEN/
  33. MOVEI DSKCHN
  34. SETZM A]
  35. JRST FAKMSG
  36. CAIN A,
  37. JRST FAKMSG
  38. MOVE B,BUFPTR
  39. .IOT DSKCHN,B
  40. .CLOSE DSKCHN,
  41. MOVE B,[440700,,BUF]
  42. MSGDTH: PUSHJ P,OUTMSG
  43. MSGEND: PUSHJ P,WINNER
  44. JRST WIN
  45. .BREAK 16,140000
  46. FAKMSG: MOVE B,[440700,,MSG]
  47. .CLOSE DSKCHN,
  48. JRST MSGDTH
  49. CKUSER: PUSHJ P,WINNER
  50. JRST WIN
  51. LDB A,[063600,,XUNAME]
  52. CAMN A,[SIXBIT / GUEST/]
  53. JRST CKTIME
  54. .CALL DIROPN ; REAL PERSON?
  55. JRST CKTIME ; NOPE
  56. .CALL MSGOPN ; REALLY A REAL PERSON?
  57. JRST LOSNAM
  58. .CLOSE DSKCHN,
  59. CKNUM: PUSHJ P,ZKCNT
  60. JRST TOOMNY
  61. WIN: .CALL SAVOPN
  62. .VALUE [ASCIZ /: No SAVE file?
  63. 
  64. /]
  65. .IOT SAVCHN,[-1,,A]
  66. MOVSI B,SIXBIT / MUD/
  67. ILDB C,VBPTR
  68. SUBI C,40
  69. DPB C,VSBPTR
  70. ILDB C,VBPTR
  71. SUBI C,40
  72. IDPB C,VSBPTR
  73. .ACCES SAVCHN,[0]
  74. .CALL MUDOPN
  75. .VALUE [ASCIZ /: No TS MUDDLE ?
  76. 
  77. /]
  78. MOVSI 17,STUFF
  79. BLT 17,17
  80. JRST 1
  81. LOSNAM: MOVE B,[440700,,NAMMSG]
  82. PUSHJ P,OUTMSG
  83. MOVE B,[440600,,XUNAME]
  84. MOVE C,[440700,,SXUNAM]
  85. SIXLOP: ILDB A,B
  86. JUMPE A,SIXTOO
  87. ADDI A,40
  88. IDPB A,C
  89. JRST SIXLOP
  90. SIXTOO: MOVE B,[440700,,SXUNAM]
  91. PUSHJ P,OUTMSG
  92. MOVE B,[440700,,NAMEND]
  93. PUSHJ P,OUTMSG
  94. .BREAK 16,160000
  95. LOGIN: MOVE B,[440700,,LOGMSG]
  96. PUSHJ P,OUTMSG
  97. .BREAK 16,160000
  98. OFFHOR: MOVE B,[440700,,OFFMSG]
  99. PUSHJ P,OUTMSG
  100. .BREAK 16,160000
  101. TOOMNY: MOVE B,[440700,,TOOMSG]
  102. PUSHJ P,OUTMSG
  103. .BREAK 16,160000
  104. CKTIME: .RYEAR A,
  105. LDB A,[320300,,A] ; IS IT A WEEKEND?
  106. JUMPE A,CURFCK
  107. CAIN A,6
  108. JRST CURFCK
  109. .RTIME A,
  110. LDB A,[301400,,A] ; IS IT OFFICE HOURS?
  111. CAIGE A,'20
  112. CAIGE A,'09
  113. JRST CURFCK
  114. .RDATE A,
  115. .CALL HOLOPN ; IS IT A HOLIDAY?
  116. JRST FLUSH
  117. CURFCK: .CALL CURFEW
  118. JRST CKNUM
  119. .CLOSE DSKCHN,
  120. MOVE B,[440700,,CURMSG]
  121. PUSHJ P,OUTMSG
  122. .BREAK 16,160000
  123. FLUSH: .CALL BADBOY
  124. JRST NEWBAD
  125. .CALL RFDATE
  126. JFCL
  127. .CALL RQDATE
  128. JFCL
  129. .CALL SFDATE
  130. JFCL
  131. .CLOSE DSKCHN,
  132. HLRZ A,TIME ; DID THE TURKEY TRY <1/2 HR AGO?
  133. HLRZ B,NOW
  134. CAME A,B
  135. JRST OFFHOR
  136. SUB NOW,TIME
  137. CAIGE NOW,2400.
  138. JRST LOGOUT
  139. JRST OFFHOR
  140. NEWBAD: .CALL MAKBAD
  141. .LOSE 1000
  142. .CLOSE DSKCHN,
  143. JRST OFFHOR
  144. LOGOUT: .VALUE [ASCIZ /:You don't believe me, eh? That makes me MAD!!!
  145. 0U
  146. /]
  147. .BREAK 16,160000
  148. ZKCNT: MOVEI B,40
  149. MOVEI O,3
  150. ZKLOP: SOJL B,[AOS (P)
  151. POPJ P,]
  152. SKIPN @MSUSER
  153. JRST ZKLOP
  154. MOVE A,@MSRED2
  155. CAME A,[SIXBIT /ZORK/]
  156. JRST ZKLOP
  157. SOJG O,ZKLOP
  158. POPJ P,
  159. SQUOZE 0,MSUSER
  160. MSUSER: 0
  161. SQUOZE 0,MSRED2
  162. MSRED2: 0
  163. INIT: MOVE B,[-200,,200]
  164. MOVEI A,0
  165. .CALL [SETZ
  166. SIXBIT /CORBLK/
  167. MOVEI %CBRED
  168. MOVEI %JSELF
  169. B
  170. MOVEI %JSABS
  171. SETZ A]
  172. .LOSE 1000
  173. MOVE A,MSUSER-1
  174. .EVAL A,
  175. .LOSE 1000
  176. ADD A,[B,,400000]
  177. MOVEM A,MSUSER
  178. MOVE A,MSRED2-1
  179. .EVAL A,
  180. .LOSE 1000
  181. ADD A,[B,,400000]
  182. MOVEM A,MSRED2
  183. .VALUE [ASCIZ /K
  184. :PDUMP SYS2;TS ZORK
  185. :KILL
  186. /]
  187. OUTMSG: PUSH P,A ; GIVEN BYTE POINTER, PRINT FROB OUT
  188. PUSH P,C
  189. PUSH P,B
  190. MOVEI C,
  191. OUTLOP: ILDB A,B ; LIKES BYTE POINTER TO FROB IN B
  192. CAIE A,0
  193. CAIN A,3
  194. JRST OUTEND
  195. AOJA C,OUTLOP
  196. OUTEND: POP P,B ; GET BYTE POINTER IN B, COUNT IS IN C
  197. .CALL [SETZ
  198. SIXBIT /SIOT/
  199. MOVEI TTYCHN
  200. B
  201. SETZ C]
  202. .LOSE 1000
  203. POP P,C
  204. POP P,A
  205. POPJ P,
  206. WINNER: CAME XUNAME,[SIXBIT /TAA/]
  207. CAMN XUNAME,[SIXBIT /MARC/]
  208. POPJ P,
  209. CAME XUNAME,[SIXBIT /PDL/]
  210. CAMN XUNAME,[SIXBIT /SEC/]
  211. POPJ P,
  212. CAME XUNAME,[SIXBIT /BKD/]
  213. CAMN XUNAME,[SIXBIT /ELBOW/]
  214. POPJ P,
  215. AOS (P)
  216. POPJ P,
  217. DEATH: SETZ
  218. SIXBIT /OPEN/
  219. MOVSI .BII
  220. MOVEI DSKCHN
  221. DSKDEV
  222. [SIXBIT /ZORK/]
  223. [SIXBIT /DEATH/]
  224. SETZ MSGDIR
  225. DIROPN: SETZ
  226. SIXBIT /OPEN/
  227. MOVSI .BII
  228. MOVEI DSKCHN
  229. DSKDEV
  230. [SIXBIT /.FILE./]
  231. [SIXBIT /(DIR)/]
  232. SETZ XUNAME
  233. MSGOPN: SETZ
  234. SIXBIT /OPEN/
  235. MOVSI .BII
  236. MOVEI DSKCHN
  237. DSKDEV
  238. MSGDIR
  239. XUNAME
  240. SETZ XUNAME
  241. MUDOPN: SETZ
  242. SIXBIT /OPEN/
  243. MOVSI 4
  244. MOVEI MUDCHN
  245. DSKDEV
  246. [SIXBIT /TS/]
  247. B
  248. SETZ [SIXBIT /SYS1/]
  249. SAVOPN: SETZ
  250. SIXBIT /OPEN/
  251. MOVSI 6
  252. MOVEI SAVCHN
  253. DSKDEV
  254. [SIXBIT /MADADV/]
  255. [SIXBIT /SAVE/]
  256. SETZ [SIXBIT /MADMAN/]
  257. HOLOPN: SETZ
  258. SIXBIT /OPEN/
  259. MOVSI .BII
  260. MOVEI DSKCHN
  261. DSKDEV
  262. [SIXBIT /HLIDAY/]
  263. A
  264. SETZ [SIXBIT /COMBAT/]
  265. CURFEW: SETZ
  266. SIXBIT /OPEN/
  267. MOVSI .BII
  268. MOVEI DSKCHN
  269. DSKDEV
  270. [SIXBIT /TRIVIA/]
  271. [SIXBIT /CURFEW/]
  272. SETZ MSGDIR
  273. BADBOY: SETZ
  274. SIXBIT /OPEN/
  275. MOVSI .BII
  276. MOVEI DSKCHN
  277. DSKDEV
  278. BADNAM
  279. XUNAME
  280. SETZ BADDIR
  281. RFDATE: SETZ
  282. SIXBIT /RFDATE/
  283. MOVEI DSKCHN
  284. SETZM TIME
  285. RQDATE: SETZ
  286. SIXBIT /RQDATE/
  287. SETZM NOW
  288. SFDATE: SETZ
  289. SIXBIT /SFDATE/
  290. MOVEI DSKCHN
  291. SETZ NOW
  292. MAKBAD: SETZ
  293. SIXBIT /OPEN/
  294. MOVSI 1
  295. MOVEI DSKCHN
  296. DSKDEV
  297. BADNAM
  298. XUNAME
  299. SETZ BADDIR
  300. STUFF: OFFSET -.
  301. 2
  302. .CALL LOAD
  303. .VALUE
  304. .IOT MUDCHN,A
  305. .CLOSE MUDCHN,
  306. ADDI A,1
  307. JRST @A
  308. LOAD: SETZ
  309. SIXBIT /LOAD/
  310. 1000,,-1
  311. SETZI MUDCHN
  312. OFFSET 0
  313. MSG: ASCIZ /
  314. ZORK is down for repairs. Sigh.
  315. /
  316. OFFMSG: ASCIZ /
  317. ZORK is not available during office hours (9 AM to 8 PM, Eastern time.)
  318. /
  319. TOOMSG: ASCIZ /
  320. There appears before you a threatening figure clad all over
  321. in heavy black armor. His legs seem like the massive trunk
  322. of the oak tree. His broad shoulders and helmeted head loom
  323. high over your own puny frame and you realize that his powerful
  324. arms could easily crush the very life from your body. There
  325. hangs from his belt a veritable arsenal of deadly weapons:
  326. sword, mace, ball and chain, dagger, lance, and trident.
  327. He speaks with a commanding voice:
  328. "YOU SHALL NOT PASS "
  329. As he grabs you by the neck all grows dim about you./
  330. NAMMSG: ASCIZ /
  331. Losers with the name /
  332. NAMEND: ASCIZ / cannot play ZORK!
  333. /
  334. LOGMSG: ASCIZ /
  335. Losers who are not logged in cannot play ZORK!
  336. /
  337. CURMSG: ASCIZ /
  338. The system is VERY loaded. Please try again later.
  339. /
  340. BUF: BLOCK 200
  341. BUFPTR: BUF-.,,BUF
  342. PDL: BLOCK 30
  343. END START
  344.