home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / compsrcs / apple2 / 71 < prev    next >
Encoding:
Internet Message Format  |  1991-06-01  |  41.8 KB

  1. From: jac@yoko.rutgers.edu (Jonathan A. Chandross)
  2. Newsgroups: comp.sources.apple2
  3. Subject: v001SRC052:  Inmate Parser -- ATN Based, Part02/05
  4. Message-ID: <May.31.22.40.14.1991.10998@yoko.rutgers.edu>
  5. Date: 1 Jun 91 02:40:14 GMT
  6. Approved: jac@paul.rutgers.edu
  7.  
  8.  
  9. Submitted-by: Phil Goetz (goetz@cs.buffalo.EDU)
  10. Posting-number: Volume 1, Source:52
  11. Archive-name: util/parser/inmate/part02
  12. Architecture: ANY_2
  13. Version-number: 1.00
  14.  
  15.  
  16. =display30
  17. -*
  18. -SAVE DISPLAY30,S6,D1
  19. -DISPLAY LDA WTOP
  20. -       STA WBOT
  21. -       LDA #0
  22. -       STA WTOP
  23. -       STA LIGHT
  24. -       JSR FC58
  25. -       LDA #$18
  26. -       STA WBOT
  27. -       JSR PNTLOC
  28. -.4     LDY #6       DEFAULT LIGHT
  29. -       LDA (TEMP),Y
  30. -       AND #7
  31. -       BEQ .20      ALWAYS LIGHT
  32. -       LSR
  33. -       BEQ .8       ALWAYS DARK
  34. -       LSR
  35. -       BEQ .6       INHERITED
  36. -* TIME-DEPENDENT
  37. -       LDA (TEMP),Y
  38. -       AND #3
  39. -       TAY
  40. -       LDA HOUR
  41. -       CMP LIGBEG,Y
  42. -       BCC .8       NOT YET LIGHT
  43. -       CMP LIGEND,Y
  44. -       BCS .8
  45. -       BCC .20
  46. -* INHERITED LIGHT
  47. -.6     LDA LOC
  48. -       LDX #IN
  49. -       JSR GETOBJ
  50. -       LDA LOC
  51. -       JSR PNTOBJ   MUST PNTOBJ BEFORE PNTLOC BECAUSE PNTOBJ USES TEMP,+1
  52. -       PLA
  53. -       JSR PNTALOC
  54. -       LDY #3
  55. -       LDA (MISC),Y
  56. -       AND #4       OPENABLE?
  57. -       BEQ .4       NO
  58. -       INY
  59. -       LDA (MISC),Y
  60. -       AND #$20     OPEN?
  61. -       BNE .4       YES
  62. -.8     LDA LOC
  63. -       LDX #HOLDS
  64. -       JSR GETOBJ   LIT OBJ?
  65. -       STX TEMP+1
  66. -       LDA #ME
  67. -       LDX #HOLDS
  68. -       JSR GETOBJ
  69. -       TXA
  70. -       CLC
  71. -       ADC TEMP+1
  72. -       TAX
  73. -.10    DEX
  74. -       BMI .15
  75. -       PLA
  76. -       JSR PNTOBJ
  77. -       LDY #3
  78. -       LDA (MISC),Y
  79. -       AND #8       LIGHT?
  80. -       BEQ .10      NO
  81. -       INY
  82. -       LDA (MISC),Y
  83. -       AND #$40     PRIMED?
  84. -       BEQ .10      NO
  85. -       INC LIGHT    LIT OBJ
  86. -       BNE .10
  87. -.15    LDA LIGHT
  88. -       BNE .20      LIT OBJ
  89. -       JSR PLOC     A=0:IT'S DARK!
  90. -       JSR PNTLOC
  91. -       JMP D60
  92. -.20    INC LIGHT
  93. -       LDA LOC
  94. -       PHA
  95. -       LDX #2
  96. -       STX SHIFT    CAP 1ST CHAR
  97. -       JSR PROBJ    PRINT LOCATION
  98. -       JSR FD8E
  99. -       JSR FD8E
  100. -       LDY /VIS
  101. -       LDA #VIS
  102. -       JSR PS
  103. -       JSR CHKEY
  104. -       PLA          OBJECT I'M IN
  105. -       JSR PRCONT
  106. -       LDA NONE     ANY ITEMS?
  107. -       BNE .25      YES
  108. -       JSR FC1A     MOVE CURSOR UP 1 LINE TO OVERWRITE "ITEMS"
  109. -       JSR FC1A
  110. -       LDA #0
  111. -       STA $24
  112. -       BEQ .30
  113. -.25    LDY #0
  114. -       JSR BLANK
  115. -.30    JSR PNTLOC
  116. -       LDY #$FF
  117. -       STY NONE
  118. -       INY
  119. -       STY MISC
  120. -D40    LDA (TEMP),Y
  121. -       BEQ .50
  122. -       INC NONE
  123. -       BNE .45
  124. -       JSR FD8E
  125. -       LDY /OE
  126. -       LDA #OE
  127. -       JSR PS
  128. -       LDY MISC
  129. -.45    LDA #$A0
  130. -       JSR FDF0
  131. -       LDA DA,Y
  132. -       PHA
  133. -       LDA DA+6,Y
  134. -       TAY
  135. -       PLA
  136. -       JSR PS
  137. -.50    INC MISC
  138. -       LDY MISC
  139. -       CPY #6
  140. -       BNE D40
  141. -       LDA NONE
  142. -       BMI D60
  143. -       LDY $24
  144. -       JSR BLANK
  145. -       JSR FD8E
  146. -D60    LDY #39
  147. -       LDA #"-
  148. -.65    STA ($28),Y
  149. -       DEY
  150. -       BPL .65
  151. -       LDY $25
  152. -       INY          SKIP A LINE FOR ---s
  153. -       STY WTOP
  154. -       LDA #23
  155. -       STA $25
  156. -       JSR FC22
  157. -       LDY #6
  158. -       LDA (TEMP),Y
  159. -       BPL DPLOC
  160. -       LDX LOC
  161. -       CPX LSTLOC
  162. -       BEQ .67
  163. -       PHA
  164. -       JSR RAND
  165. -       CMP #$40
  166. -       PLA
  167. -       LDY #6
  168. -       BCC DPLOC    PRINT LOC EVERY SO OFTEN
  169. -.67    RTS          ALREADY PRINTED
  170. -VIS    .US /VISIBLE ITEMS: =/
  171. -OE     .US /OBVIOUS EXITS:=/
  172. -DA     .DA #.70,#.75,#.80,#.85,#.90,#.95
  173. -       .DA /.70,/.75,/.80,/.85,/.90,/.95
  174. -.70    .US /NORTH=/
  175. -.75    .US /WEST=/
  176. -.80    .US /SOUTH=/
  177. -.85    .US /EAST=/
  178. -.90    .US /UP=/
  179. -.95    .US /DOWN=/
  180. -ALOC   .BS 1        A LOC
  181. -ACLOC  .BS 1        ACTOR LOC
  182. -LIGHT  .BS 1        >0=ROOM LIT
  183. -LIGBEG .DA #7       BEGINNING HOUR FOR LIGHT IN TIME-DEP LOCS (0-3)
  184. -LIGEND .DA #22
  185. -DPLOC  LDX LIGHT
  186. -       BNE .1
  187. -       LDA LOC
  188. -       CMP .0       ALREADY PRINTED "IT'S DARK" HERE?
  189. -       BEQ .9       YES
  190. -       STA .0
  191. -       TXA
  192. -       JMP PLOC     IT'S DARK!
  193. -.9     RTS          COULD USE NEXT RTS, BUT LABEL TROUBLE
  194. -.0     .HS FF
  195. -.1     ORA #$80
  196. -       STA (TEMP),Y NOW PRINTED
  197. -PRLOC  LDA LOC
  198. -       JSR PLOC
  199. -       >PSHW VDAT+1,VSTK,VPNT
  200. -       LDY #$FF
  201. -.1     INY
  202. -       LDA .10,Y
  203. -       BEQ .5
  204. -       CMP LOC
  205. -       BNE .1
  206. -       TYA
  207. -       ASL
  208. -       TAY
  209. -       LDA .15,Y
  210. -       STA VDAT+1
  211. -       LDA .15+1,Y
  212. -       STA VDAT+2
  213. -       JSR SPCACT
  214. -.5     >PLLW VDAT+1,VSTK,VPNT
  215. -       RTS
  216. -.10    .DA #OFFI,#STAIR1,#LIBR2,LOU2
  217. -.15    .DA .20,.25,.30,.35
  218. -.20    .DA #INROOM,#ED,#POKE,$10,#ED,#AMSG,#151,#$80,#INROOM,#MRS,#POKE,$10,#MRS,#AMSG,151
  219. -.25    .DA #ZERO,BARREM,#AMSG,152
  220. -.30    .DA #ITIN,#BOOK4,#SHELF,#AMSG,195
  221. -.35    .DA #ITIN,#PLANT,#LOU2,#AMSG,211
  222. -*--------------------------------
  223. -* POINT TO OBJECT'S MAP
  224. -PNTLOC LDA LOC
  225. -PNTALOC STA ALOC
  226. -       LDX #0
  227. -       STX TEMP+1
  228. -       LDX #3
  229. -.60    ASL          A=A*8
  230. -       ROL TEMP+1
  231. -       DEX
  232. -       BNE .60
  233. -       SEC
  234. -       SBC ALOC
  235. -       BCS .70
  236. -       DEC TEMP+1
  237. -.70    CLC
  238. -       ADC #MAP
  239. -       STA TEMP
  240. -       LDA TEMP+1
  241. -       ADC /MAP
  242. -       STA TEMP+1
  243. -       RTS
  244. -*--------------------------------
  245. -PRCONT DEC LSTCOL   DON'T PRINT IN LAST COLUMN CAUSE WE'LL PRINT , AFTER
  246. -       INC C1       ->1:DON'T PRINT IN 1ST COLUMN
  247. -       LDX #HOLDS
  248. -       JSR GETOBJ   FIND OBJS INSIDE THIS OBJ
  249. -       STX TEMP+1
  250. -       LDA #0
  251. -       STA NONE
  252. -.1     DEC TEMP+1
  253. -       BMI .3
  254. -       PLA
  255. -       TAX
  256. -       JSR PNTOBJ
  257. -       LDY #5
  258. -       LDA (MISC),Y
  259. -       BMI .1       "INVISIBLE" OBJECT (IE TEETH)
  260. -       TXA
  261. -       JSR PROBJ
  262. -       INC NONE     AT LEAST 1 OBJ
  263. -       LDA #",
  264. -       JSR FDF0
  265. -       JMP .1
  266. -.3     INC LSTCOL   RESTORE TO #$28
  267. -       DEC C1       ->0
  268. -       LDY $24
  269. -       DEY
  270. -       BPL .4
  271. -       JSR FC1A     LAST , WAS IN LAST COLUMN, GO BACK 1 LINE TO ERASE
  272. -       LDY #$27
  273. -.4     JSR FC9E     CLEAR TO END OF LINE
  274. -       JMP FD8E
  275. -NONE   .BS 1        0=NO OBJS
  276. -*--------------------------------
  277. -PROBJ  PHA
  278. -       LDX #ADJEC
  279. -       JSR GETOBJ   1ST PRINT ADJS
  280. -       STX TEMP
  281. -.1     DEC TEMP
  282. -       BMI .2
  283. -       PLA          ADJ
  284. -       JSR PADJ
  285. -       LDA #$A0
  286. -       JSR FDF0
  287. -       JMP .1
  288. -.2     PLA
  289. -       JMP POBJ
  290. -*--------------------------------
  291. -* POINT TO OBJ DATA
  292. -* ON ENTRY A=OBJ#
  293. -PNTOBJ LDY #0
  294. -       STY MISC+1
  295. -       STY .2
  296. -* A=A*6
  297. -       STA TEMP
  298. -       ASL
  299. -       BCC .0
  300. -       INC .2
  301. -.0     STA TEMP
  302. -       ROL MISC+1
  303. -       ASL
  304. -       ROL MISC+1
  305. -       ADC TEMP     C=0
  306. -       BCC .1
  307. -       INC MISC+1
  308. -       CLC
  309. -.1     ADC #OBJECTS
  310. -       STA MISC
  311. -       LDA /OBJECTS
  312. -       ADC MISC+1
  313. -       ADC .2
  314. -       STA MISC+1
  315. -       RTS
  316. -.2     .BS 1
  317. -*--------------------------------
  318. -* FIND WORD #Y,A IN LEX
  319. -* CALLED BY PRWRD AND CONOUT
  320. -FIRL   .BS 1
  321. -FWILEX STY WNUM+1
  322. -       INY          CPY #$FF:UNKNOWN #
  323. -       BNE .0
  324. -       PLA
  325. -       PLA
  326. -       LDA #"X
  327. -       JMP FDF0     OK SINCE ONLY PRWRD AND CONOUT CAL FWILEX
  328. -.0     STA WNUM
  329. -       LDY #$FF
  330. -.1     INY
  331. -       LDA WNUM
  332. -       CMP NUMTAB,Y
  333. -       INY
  334. -       LDA WNUM+1
  335. -       SBC NUMTAB,Y SBC SO C COUNTS
  336. -       BCS .1
  337. -       TYA
  338. -       LSR          A=A/2,C=1
  339. -       ADC #"A"-2
  340. -       STA FIRL     1ST LETTER
  341. -       LDA WNUM
  342. -       SEC
  343. -       SBC NUMTAB-3,Y
  344. -       PHP
  345. -       STA WNUM
  346. -* WON'T WORK IF WORD IS 256TH WORD OR LATER BEGINNING WI THAT LETTER
  347. -       LDA TABFL-3,Y
  348. -       STA MISC
  349. -       LDA TABFL-2,Y
  350. -       STA MISC+1
  351. -       LDY #0
  352. -       LDA (MISC),Y FOR Z=1
  353. -       PLP
  354. -       BEQ .6
  355. -       BNE .35
  356. -.3     JSR INY
  357. -.35    LDA (MISC),Y
  358. -       BMI .3       SCAN PAST LETTERS
  359. -       BEQ .5       0 HAS NO PARM
  360. -.4     CMP #SYN3+1  PARTS <= SYN HAVE 1 PARAM
  361. -       BCS .5
  362. -       JSR INY
  363. -.5     JSR INY
  364. -       LDA (MISC),Y
  365. -       BPL .4
  366. -       DEC WNUM
  367. -       BNE .3
  368. -.6     RTS
  369. -*--------------------------------
  370. -* PRINT WORD# Y,A
  371. -* WON'T RETURN FOR X WORDS
  372. -PRWRD  JSR FWILEX
  373. -       PHA
  374. -       LDA FIRL
  375. -       JSR FDF0
  376. -       PLA
  377. -.6     JSR FDF0
  378. -       JSR INY
  379. -       LDA (MISC),Y
  380. -       BMI .6
  381. -       RTS
  382. -*--------------------------------
  383. -* PRINT VERB,WHICH IS 1ST WORD IN BUFFER
  384. -PRVERB LDX #0
  385. -       STY $24
  386. -.1     LDA INSTRING,X
  387. -       CMP #$A0
  388. -       BEQ .3
  389. -       LDY LWC
  390. -       BEQ .2
  391. -       ORA #$E0     =>LOWERCASE
  392. -.2     JSR FDF0
  393. -       INX
  394. -       BNE .1
  395. -.3     LDY $24
  396. -       RTS
  397. =edges
  398. -*
  399. -SAVEEDGES27,S6,D1
  400. -JG     JSR GETEDG   MAY PLA PLA RTS
  401. -       RTS          OR RTS
  402. -RE0    LDY /CD
  403. -       LDA #CD
  404. -OMSG   SEC          FAILURE
  405. -       STY RESHI+1
  406. -       STA RESLO+1
  407. -       RTS
  408. -CD     .US /YOU CAN'T DO THAT!@=/
  409. -* REPLACE EDGE A X _ _ WI A X x Y
  410. -* ON EXIT, C=0 IF SUCCESS
  411. -REPEDG STA EDGCMP+1
  412. -       JSR FF4A     SAVE REGS
  413. -       CPY $45      A=Y?
  414. -       BEQ RE0
  415. -       LDX #0
  416. -       STX GCALLD
  417. -       STX TEMP3+1  CAP FILLED
  418. -       LDA $46
  419. -       TAX
  420. -       LSR
  421. -       BCC .1       EDGE IN RIGHT DIRECTION
  422. -       LDA $45
  423. -       STY $45
  424. -       STA $47
  425. -       JSR CLCPNT
  426. -       STX $46
  427. -.1     CPX #BY
  428. -       BNE .13
  429. -       JMP ABYY
  430. -.13    JSR CLCPNT
  431. -       STA TEMP+1   x
  432. -       JSR FF3F
  433. -       JSR JG       JSR GETEDG;STRANGE CONDITIONAL RETURN
  434. -       BCC .15      EDGE FOUND
  435. -       PHA
  436. -       PHA
  437. -       PHA
  438. -       PHA
  439. -       JSR MAKEDG   ALLOCATE SPACE
  440. -       JSR EREDG
  441. -       JMP RE3      DON'T CHECK "OLD EDGE"
  442. -.15    LDY #0
  443. -       LDA (EDGE),Y
  444. -       CMP $45      A:OLD EDGE IN SAME DIRECTION AS NEW?
  445. -       BNE .2
  446. -       LDY #3
  447. -       LDA (EDGE),Y
  448. -.2     STA OLDTAIL  USED BY GETTER IN DOOBJ
  449. -       CMP $47      Y:EDGE ALREADY THERE?
  450. -       BNE RE3
  451. -       JMP RE6
  452. -* SAVE EDGE LOST BY NEXT GETOBJ
  453. -RE3    LDY EDGE
  454. -       STY $1A
  455. -       LDY EDGE+1
  456. -       STY $1B
  457. -       LDX $46      X
  458. -       CPX #ON
  459. -       BNE .4
  460. -       LDA $47      Y
  461. -       JSR PNTOBJ
  462. -       LDY #2       SUPPORTING CAPACITY
  463. -       LDA (MISC),Y
  464. -       BNE .33
  465. -       JMP RE75
  466. -.33    LDX #UNDER
  467. -       JSR CHKROOM
  468. -       JSR FINDO    CAN WE REACH DEST?
  469. -       JMP .6
  470. -.4     CPX #IN
  471. -       BNE .8
  472. -* SEE IF A CAN BE PUT IN Y
  473. -* CHECK CAPACITY, OBJS IN Y,&Y OPEN/CLOSED
  474. -       LDA $47      Y
  475. -       JSR PNTOBJ
  476. -       LDY #4
  477. -       LDA (MISC),Y WATERTIGHT?
  478. -       STA TEMP3+2
  479. -       LDY #1       CAPACITY
  480. -       LDA (MISC),Y
  481. -       BNE .5
  482. -       JMP RE7      NO CAPACITY
  483. -.5     LDX #HOLDS
  484. -       JSR CHKROOM
  485. -       JSR FINDD    CAN WE REACH INSIDE DEST?
  486. -.6     BCC .7
  487. -       RTS          NO
  488. -.7     LDA ONOB
  489. -       BNE .8
  490. -       LDA $45      A
  491. -       LDX #PARTOF
  492. -       JSR GETOBJ
  493. -       DEX
  494. -       BMI .8
  495. -       PLA
  496. -       JMP PO
  497. -.8     LDY #0
  498. -       STY TEMP3+1  IN CASE OF ON
  499. -       LDA $45      A
  500. -       STA ($1A),Y
  501. -       INY
  502. -       LDA $46      X
  503. -       PHA
  504. -       STA ($1A),Y
  505. -       INY
  506. -       LDA TEMP+1
  507. -       STA ($1A),Y
  508. -       INY
  509. -       LDA $47
  510. -       STA ($1A),Y
  511. -       JSR CHKEY
  512. -       PLA          X
  513. -       CMP #ON
  514. -       BNE CIN
  515. -* IF A ON Y, PUT A IN OBJ HOLDING Y
  516. -* IF Y NOT HELD, PUT A IN Y & DELETE A ON Y
  517. -ABYY   DEC DDON
  518. -       LDA $47
  519. -       LDX #IN
  520. -       STX ALGOK
  521. -       JSR GETOBJ
  522. -       LDY $47
  523. -       DEX
  524. -       BMI .1
  525. -       PLA
  526. -       TAY
  527. -.1     LDA $45
  528. -       LDX #IN
  529. -       JSR REPEDG
  530. -       INC DDON     ->0
  531. -       RTS
  532. -CIN    CMP #IN
  533. -       BEQ .0
  534. -       JMP RSUC
  535. -.0     LDA $45
  536. -       CMP #ME
  537. -       BNE .1
  538. -       JSR MACT
  539. -* IF MOVING OBJ, MOVE ALL OBJS ON IT
  540. -* NOTE POSSIBLE RECURSION
  541. -* A ON Y:
  542. -*      DELETE A ON Y
  543. -*      IF Y=ME THEN MAKVIS A
  544. -*              ELSE MAKVIS Y
  545. -* UNLESS DDON>0
  546. -* IF MOVING OBJ, MOVE ALL OBJS ON IT
  547. -.1     LDA DDON
  548. -       BNE .3
  549. -       LDA $45
  550. -       LDX #ON
  551. -       JSR GETOBJ
  552. -.2     DEX
  553. -       BMI .3
  554. -       STX CURWORD
  555. -       PLA
  556. -       PHA
  557. -       CMP #ME
  558. -       BNE .23
  559. -       LDA $45      MAKE OBJ THAT WAS ON ME VISIBLE, NOT ME
  560. -.23    STA $10
  561. -       JSR PNTOBJ
  562. -       LDY #5
  563. -       LDA (MISC),Y
  564. -       BPL .25      VISIBLE
  565. -       AND #$7F
  566. -       STA (MISC),Y MAKVIS
  567. -       PLA
  568. -       PHA
  569. -       CMP #ME
  570. -       BEQ .25      NO MSG FOR ITEMS THAT WERE ON ME
  571. -       LDA #99
  572. -       JSR PMNOK
  573. -.25    PLA
  574. -       TAY
  575. -       LDA $45
  576. -       PHA
  577. -       LDA #ON
  578. -       PHA
  579. -       TYA
  580. -       PHA
  581. -       JSR DELEDG
  582. -       LDX CURWORD
  583. -       BNE .2
  584. -.3     LDA $45
  585. -       PHA
  586. -       LDX #UNDER
  587. -       JSR GETOBJ
  588. -       DEC DDON
  589. -       INC ONOB
  590. -.4     DEX
  591. -       BMI .5
  592. -       PLA
  593. -       TAY
  594. -       TXA
  595. -       PHA
  596. -       TYA
  597. -       LDX #IN
  598. -       LDY $47
  599. -       JSR REPEDG
  600. -       PLA
  601. -       TAX
  602. -       BNE .4
  603. -.5     INC DDON     ->0 IF PRIMARY OBJ
  604. -       DEC ONOB     ->0 IF PRIMARY OBJ
  605. -* MOVE OBJS WHICH ARE PART OF THIS OBJ
  606. -       PLA
  607. -       LDX #PART
  608. -       JSR GETOBJ
  609. -       STX NONE
  610. -CI6    DEC NONE
  611. -       BPL CI7
  612. -RSUC   CLC
  613. -       RTS
  614. -CI7    PLA
  615. -       STA CURWORD
  616. -       LDX #IN
  617. -       JSR GETOBJ
  618. -* LEAVE OBJ PART IS IN ON STACK
  619. -       LDA #HOLDS
  620. -       PHA
  621. -       LDA CURWORD
  622. -       PHA
  623. -       JSR DELEDG
  624. -       LDA CURWORD
  625. -       PHA
  626. -       LDA #IN
  627. -       PHA
  628. -       LDA #HOLDS
  629. -       PHA
  630. -       LDA $47      Y
  631. -       PHA
  632. -       JSR MAKEDG
  633. -       LDA CURWORD
  634. -       LDX #PART
  635. -       JSR GETOBJ   DOES PART HAVE PART?
  636. -       TXA
  637. -       CLC
  638. -       ADC NONE
  639. -       STA NONE     PARTS OF PART GO TO SAME PLACE AS PART
  640. -       JMP CI6
  641. -RE6    LDA ALGOK
  642. -       BNE RSUC
  643. -       LDY /.7
  644. -       LDA #.7
  645. -       JMP OMSG
  646. -.7     .US /YOU'VE ALREADY DONE THAT.@=/
  647. -RE7    LDY /YCPI
  648. -       LDA #YCPI
  649. -RE72   LDX $47
  650. -       STX $10      FOR PA
  651. -       JMP OMSG
  652. -YCPI   .DA #"$,YC
  653. -       .US /IN <.@=/
  654. -RE75   LDY /.1
  655. -       LDA #.1
  656. -       JMP RE72
  657. -.1     .DA #"$,YC
  658. -       .US /ON <.@=/
  659. -YC     .US /YOU CAN'T PUT THINGS =/
  660. -* NO ROOM FOR A IN/ON Y
  661. -* IF NR FOR A IN Y, AND A ON Z AND Z IN Y, DEL A ON Z. SHAVES STACK TOP.
  662. -* WHEN ASKED "PUT A ON B" & THERE'S NO ROOM FOR A,? NO ROOM
  663. -* WHEN ASKED "PUT A ON B" & C IS ON A & THERE'S NO ROOM FOR C, ? NOTHING
  664. -NR     LDA $46      X
  665. -       CMP #IN
  666. -       BNE .3
  667. -       LDA $45      A
  668. -       LDX #ON
  669. -       JSR GETOBJ
  670. -       DEX
  671. -       BMI .3
  672. -       STX CURWORD
  673. -.1     PLA          Z
  674. -       STA NONE
  675. -       LDX #IN
  676. -       JSR GETOBJ
  677. -       PLA
  678. -       CMP $47      Y
  679. -       BNE .15
  680. -       LDA $45      A
  681. -       PHA
  682. -       LDA #ON
  683. -       PHA
  684. -       LDA NONE     Z
  685. -       PHA
  686. -       JSR DELEDG
  687. -.15    DEC CURWORD  ON ANY MORE OBJS?
  688. -       BPL .1       YES
  689. -       LDA $45      A
  690. -       CMP CUROBJ
  691. -       BEQ .3       MESSAGE IF A IS CUROBJ
  692. -.2     CLC          FOR TRYCUR
  693. -.25    RTS
  694. -.3     LDA TRYCUR
  695. -       BEQ .4
  696. -       LDA CASEFRAME+2
  697. -       LSR
  698. -       BCS .4       FAILURE IF NOT GOTTEN
  699. -       LDA CUROBJ
  700. -       JSR PNTOBJ
  701. -       LDY #0
  702. -       LDA (MISC),Y SIZE
  703. -       CMP #10      ARBITRARY #
  704. -       BCS .25      MAKE NO NOISE BUT SET CARRY
  705. -.4     LDY /.6
  706. -       LDA #.6
  707. -       LDX $47      Y
  708. -       CPX #ME
  709. -       BNE .5
  710. -       LDY /.7
  711. -       LDA #.7
  712. -.5     JMP OMSG
  713. -.6     .US /THERE'S NO ROOM.@=/
  714. -.7     .US /YOU CAN'T CARRY THAT MUCH MORE.@=/
  715. -TRYCUR .BS 1        >0=OK IF NOT GOTTEN IF BIG
  716. -PO     STA $10
  717. -       LDY /.1
  718. -       LDA #.1
  719. -       JMP OMSG
  720. -.1     .US /IT'S PART OF >.@=/
  721. -ALGOK  .HS 00       ALREADY GOTTEN OK.
  722. -DDON   .HS 00       FF=DON'T DELETE A ON B WHEN PUTTING A IN Y
  723. -ONOB   .HS 00     >0=A MOVED SINCE IT WAS STACKED ON ORIG A,NO PART CHECK
  724. -OLDTAIL .BS 1
  725. -CHKROOM STA TEMP3
  726. -       LDA #0
  727. -       STA .61
  728. -       LDA $47      Y
  729. -       JSR GETOBJ
  730. -.1     DEX
  731. -       BMI .3
  732. -       PLA
  733. -       PHA
  734. -       JSR PNTOBJ
  735. -       LDY #3
  736. -       LDA (MISC),Y
  737. -       LDY #0       FOR LATER
  738. -       AND #$20     LIQUID IN DEST?
  739. -       BEQ .2       NO
  740. -       PLA
  741. -       STA .61      ONLY 1 LIQUID
  742. -       LDA (MISC),Y SIZE OF LIQ
  743. -       STA .64
  744. -       PHA
  745. -.2     PLA
  746. -       LDA (MISC),Y SIZE
  747. -       CLC
  748. -       ADC TEMP3+1
  749. -       STA TEMP3+1  SUM OF SIZES OF CONTENTS
  750. -       JMP .1
  751. -.3     LDA $45
  752. -       JSR PNTOBJ
  753. -       LDY #3
  754. -       LDA (MISC),Y
  755. -       AND #$20     LIQUID?
  756. -       BEQ .7       NO
  757. -       LDA $46      X
  758. -       CMP #IN
  759. -       BNE .5       CAN ONLY PUT LIQUIDS IN THINGS
  760. -       LDA TEMP3+2  BESIDES, TEMP3+2 ONLY STORED FOR "IN"
  761. -       AND #8       WATERTIGHT?
  762. -       BNE .6       Y
  763. -       LDX #106     NOT WATERTIGHT
  764. -       LDA $47      Y
  765. -       STA $10
  766. -.4     PLA
  767. -       PLA
  768. -       TXA
  769. -       JMP PMNOK
  770. -.5     LDA $45
  771. -       STA $10
  772. -       LDX #IN
  773. -       JSR DELAX    ERASE EDGE
  774. -       LDX #105     EVAPORATES
  775. -       BNE .4
  776. -* PUTTING LIQUID IN CONTAINER:
  777. -* 1. CAN'T IF OTHER LIQUID IS PRESENT (.61=$20)
  778. -* 2. IF NOT ENUF ROOM, CREATE SMALLER LIQUID OBJ & PUT IT IN
  779. -* (WE KNOW OBJ HAS >0 CAPAC)
  780. -.6     LDX #116     THERE'S ANOTHER LIQUID IN IT
  781. -       .HS A9       LDA
  782. -.61    .BS 1        # OF LIQ IN DEST, ELSE 0
  783. -       BEQ .67      NO
  784. -       SEC
  785. -       SBC $45
  786. -       CLC
  787. -       ADC #5
  788. -       CMP #10      IF <5 APART, COMBINE 2 LIQUIDS
  789. -       BCS .4
  790. -* COMBINE LIQUID IN DEST & OBJ LIQUID BY DELETING DEST LIQ,
  791. -* ADDING ITS SIZE TO OBJ, & SBCing DEST LIQ'S SIZE FROM CONTENTS SIZE
  792. -       LDA TEMP3+1
  793. -       CMP TEMP3
  794. -       BEQ .73      NO ROOM: CAP IS FULL
  795. -       SEC
  796. -       SBC .64      SIZE OF LIQ IN DEST
  797. -       STA TEMP3+1
  798. -       LDY #0
  799. -       CLC
  800. -       LDA (MISC),Y
  801. -       .HS 69       ADC
  802. -.64    .BS 1        SIZE OF LIQ IN DEST
  803. -       STA (MISC),Y
  804. -       LDA .61
  805. -       LDX #IN
  806. -       STY .61
  807. -       JSR DELAX
  808. -       LDA $45
  809. -       JSR PNTOBJ   WIPED BY DELAX
  810. -.67    INC .61      <=1:MARK LIQUID
  811. -.7     CLC
  812. -       LDY #0
  813. -       LDA TEMP3+1  MUST RELOAD IN CASE NO OBJS IN DEST
  814. -       ADC (MISC),Y A=SIZE [(OBJS IN Y)+A]+1
  815. -       BCC .71      =<$FF
  816. -       SBC TEMP3    CAPACITY
  817. -       JMP .72
  818. -.71    SEC
  819. -       SBC TEMP3    CAPACITY
  820. -       BCC CR9
  821. -       BEQ CR9
  822. -.72    DEC .61      LIQUID?
  823. -       BEQ .75      YES
  824. -.73    PLA
  825. -       PLA
  826. -       JMP NR       NO ROOM
  827. -.75    STA (MISC),Y SIZE ORIG LIQUID=SIZE0-CAP+[TEMP3+1]
  828. -* ORIG LIQ STAYS WHERE IT IS
  829. -       LDA $45
  830. -       STA .90+1    SAVE THIS OBJ#
  831. -.8     DEC $45      A:SEARCH FOR NEW, UNUSED OBJ OF SAME TYPE
  832. -       LDA $45
  833. -       STA .61      TEMP STORAGE
  834. -       JSR PNTOBJ
  835. -       LDY #3
  836. -       LDA (MISC),Y
  837. -       AND #$20     LIQUID?
  838. -       BNE .8       YES,CONT
  839. -* .61: LAST OBJ BEFORE 1ST LIQUID
  840. -* NOTE:ASSUMES NO 2 LIQUID TYPES ARE SEQUENTIAL
  841. -.85    INC $45
  842. -       LDA $45
  843. -       SEC
  844. -       SBC .61
  845. -       CMP #NLIQ+1  #OBJS OF EACH LIQUID TYPE
  846. -       BCS C95      NO LIQUID OBJS LEFT: ERROR, NO NEW EDGE
  847. -       LDA $45
  848. -       LDX #IN
  849. -       JSR GETOBJ
  850. -       PLA
  851. -       DEX          OBJ IN SOMETHING?
  852. -       BEQ .85      YES
  853. -       PHA
  854. -       LDA $45
  855. -.90    CMP #0       SAME AS ORIG. OBJ?
  856. -       BEQ .85      YES
  857. -       JSR PNTOBJ
  858. -       SEC
  859. -       LDA TEMP3
  860. -       SBC TEMP3+1  A<=SIZE OF NEW OBJ
  861. -       LDY #0
  862. -       STA (MISC),Y SIZE
  863. -       LDX #IN
  864. -       LDY $47
  865. -       PLA
  866. -       PLA
  867. -       LDA $45
  868. -       JMP REPEDG
  869. -CR9    LDA #0
  870. -       STA TEMP3+1
  871. -       LDA $47      Y
  872. -C95    RTS
  873. -EREDG  LDY #3
  874. -       LDA #0
  875. -.8     STA (EDGE),Y  DELETE EDGE
  876. -       DEY
  877. -       BPL .8
  878. -       RTS
  879. -* CALC 2ND POINTER IN EDGE FROM 1ST POINTER
  880. -* x=X+1 IF X IS ODD
  881. -*   X-1 IF X IS EVEN
  882. -* NOTE THAT 1-WAY EDGES (I.E. BY) MUST HAVE 1 UNUSED ADJACENT NUMBER
  883. -* SO REPLACING DOESN'T CREATE A FALSE EDGE
  884. -CLCPNT CPX #BY
  885. -       BCS .2
  886. -       TXA
  887. -       INX
  888. -       LSR
  889. -       BCC .0
  890. -       DEX
  891. -       DEX
  892. -.0     TXA
  893. -.2     RTS
  894. -*--------------------------------
  895. -* MAKE AN EDGE BETWEEN OBJECTS
  896. -* BEFORE CALLING, PUSH OBJ,POINTER,POINTER,OBJ ON STACK
  897. -MAKEDG PLA
  898. -       TAY
  899. -       PLA
  900. -       STA MISC+1
  901. -       INY
  902. -       BNE .0
  903. -       INC MISC+1
  904. -.0     STY MISC
  905. -       LDA FRFLG    DO WE KNOW LOC OF AN EMPTY EDGE?
  906. -       BEQ .3       NO
  907. -       LDA FREE
  908. -       STA EDGE
  909. -       LDA FREE+1
  910. -       STA EDGE+1
  911. -       INC FRFLG
  912. -       BEQ .2       ALWAYS
  913. -.3     STA EDGOFFSET+1
  914. -       STA EDGCMP+1
  915. -       JSR FINEDG  FIND EMPTY EDGE SLOT
  916. -       BCC .2
  917. -       LDA EDGEND
  918. -       ADC #3       CARRY SET
  919. -       STA EDGEND
  920. -       BCC .2
  921. -       INC EDGEND+1
  922. -.2     LDY #3
  923. -.1     PLA
  924. -       STA (EDGE),Y
  925. -       DEY
  926. -       BPL .1
  927. -       BMI DELEND   RTS
  928. -* SAVES EDGES IN ORDER PUSHED
  929. -*--------------------------------
  930. -* DELETE AN EDGE
  931. -* BEFORE CALLING, PUSH OBJ1,POINTER1->2,AND OBJ2 ON STACK
  932. -DELEDG PLA
  933. -       TAY
  934. -       PLA
  935. -       STA MISC+1
  936. -       INY
  937. -       BNE .0
  938. -       INC MISC+1
  939. -.0     STY MISC
  940. -       LDA #3
  941. -       STA EDGOFFSET+1
  942. -       PLA          OBJECT POINTED TO
  943. -       STA EDGCMP+1
  944. -       PLA          POINTER
  945. -       STA TEMP
  946. -       JSR FINEDG
  947. -.1     BCS .3       TRY LOOKING FOR 'BACKWARD' EDGE
  948. -       LDY #1       POINTER TO OBJECT FOUND
  949. -       LDA TEMP     POINTER PASSED
  950. -       CMP (EDGE),Y
  951. -       BEQ .2
  952. -.15    JSR TRYAGN
  953. -       JMP .1
  954. -.2     LDY #0       OBJECT POINTING
  955. -       PLA
  956. -       CMP (EDGE),Y
  957. -       BEQ DELEXT
  958. -       PHA
  959. -       JMP .15
  960. -.3     LDA #0
  961. -       STA EDGOFFSET+1
  962. -       JSR FINEDG
  963. -.4     BCS DELFAL   DOESN'T EXIST
  964. -       LDY #2       POINTER TO OBJECT FOUND
  965. -       LDA TEMP     POINTER PASSED
  966. -       CMP (EDGE),Y
  967. -       BEQ .5
  968. -.45    JSR TRYAGN
  969. -       JMP .4
  970. -.5     LDY #3       OBJECT POINTING
  971. -       PLA
  972. -       CMP (EDGE),Y
  973. -       BEQ DELEXT
  974. -       PHA
  975. -       JMP .45
  976. -DELEXT JSR EREDG
  977. -       LDY #1
  978. -.9     LDA EDGE,Y   COPY LOC OF FREE EDGE
  979. -       STA FREE,Y
  980. -       DEY
  981. -       BPL .9
  982. -       STY FRFLG
  983. -       CLC
  984. -       .HS B0       BCS
  985. -DELFAL PLA
  986. -DELEND JMP (MISC)   RTS
  987. -*--------------------------------
  988. -* GET ALL VALUES POINTED TO
  989. -* ON CALLING, A=OBJ X=POINTER
  990. -* AFTER RETURN, X=# OF OBJECTS ON STACK
  991. -GETOBJ STA EDGCMP+1
  992. -       PLA
  993. -       TAY
  994. -       PLA
  995. -       STA MISC+1
  996. -       STA GCALLD   EXIT THRU DELEND
  997. -       INY
  998. -       BNE .0
  999. -       INC MISC+1
  1000. -.0     STY MISC
  1001. -       JSR GETEDG
  1002. -.1     LDA (EDGE),Y
  1003. -       PHA
  1004. -       INX
  1005. -       DEY          TEST WHICH PLACE TO CALL
  1006. -       BMI .2
  1007. -       JSR G2
  1008. -       JMP .1
  1009. -.2     JSR G4
  1010. -       JMP .1
  1011. -*--------------------------------
  1012. -* ON EXIT C=0 IF SUCCESS
  1013. -GETEDG STX TEMP
  1014. -       CPX #BY
  1015. -       TXA
  1016. -       LDX #0       INIT COUNT
  1017. -       BCS .0       SEARCH BOTH WAYS FOR BY
  1018. -       LSR
  1019. -       BCS G25      ODD POINTERS ARE 2ND POINTER
  1020. -.0     STX EDGOFFSET+1   0
  1021. -       JSR FINEDG
  1022. -       BCS G22
  1023. -G1     LDY #1
  1024. -       LDA (EDGE),Y POINTER
  1025. -       CMP TEMP
  1026. -       BEQ G6
  1027. -G2     JSR TRYAGN
  1028. -       BCC G1
  1029. -G22    LDA #BY
  1030. -       CMP TEMP
  1031. -       BCS G5
  1032. -G25    LDA #3
  1033. -       STA EDGOFFSET+1
  1034. -       JSR FINEDG
  1035. -       BCS G5
  1036. -G3     LDY #2
  1037. -       LDA (EDGE),Y POINTER
  1038. -       CMP TEMP
  1039. -       BEQ G7
  1040. -G4     JSR TRYAGN
  1041. -       BCC G3
  1042. -G5     PLA
  1043. -       PLA
  1044. -       LDA GCALLD
  1045. -       BNE DELEND
  1046. -       RTS          TO CALLER OF CALLER, C=1
  1047. -G6     LDY #3       FOR GETOBJ
  1048. -       .HS 2C       BIT
  1049. -G7     LDY #0
  1050. -       CLC
  1051. -       RTS
  1052. -GCALLD .BS 1        0=RTS WHEN NOT FOUND
  1053. -*--------------------------------
  1054. -* LOCATE AN EDGE OR EMPTY EDGE
  1055. -FINEDG LDA #EDGES
  1056. -       STA EDGE
  1057. -       LDA /EDGES
  1058. -       STA EDGE+1
  1059. -EDGOFFSET LDY #0
  1060. -       LDA (EDGE),Y
  1061. -EDGCMP CMP #0
  1062. -       BEQ FINEND
  1063. -TRYAGN LDA EDGE
  1064. -       CLC
  1065. -       ADC #4
  1066. -       STA EDGE
  1067. -       LDA EDGE+1
  1068. -       ADC #0
  1069. -       STA EDGE+1
  1070. -       CMP EDGEND+1
  1071. -       BNE EDGOFFSET
  1072. -       LDA EDGE
  1073. -       CMP EDGEND
  1074. -       BNE EDGOFFSET
  1075. -       SEC          FAILURE
  1076. -       .HS 90       BCC
  1077. -FINEND CLC
  1078. -       RTS
  1079. -*--------------------------------
  1080. -WNUM   .BS 2        WORD#
  1081. -CURWORD .BS 1
  1082. -*[MOVE]SPECACTS
  1083. -MACT   LDY $47
  1084. -       STY LOC
  1085. -       LDA ACTOR
  1086. -       CMP #ME
  1087. -       BNE .1
  1088. -       STY ACLOC
  1089. -.1     LDY #$FF
  1090. -.0     INY
  1091. -       LDA .9,Y
  1092. -       BEQ .6       NO ACT
  1093. -       CMP $47
  1094. -       BNE .0
  1095. -       LDA VDAT+1
  1096. -       PHA
  1097. -       LDA VDAT+2
  1098. -       PHA
  1099. -       LDX #3
  1100. -.2     LDA $45,X
  1101. -       STA .7,X
  1102. -       DEX
  1103. -       BPL .2
  1104. -       TYA
  1105. -       ASL
  1106. -       TAY
  1107. -       LDA MTAB,Y
  1108. -       STA VDAT+1
  1109. -       LDA MTAB+1,Y
  1110. -       STA VDAT+2
  1111. -       JSR SPCACT
  1112. -       PLA
  1113. -       STA VDAT+2
  1114. -       PLA
  1115. -       STA VDAT+1
  1116. -       LDY #3
  1117. -.5     LDA .7,Y
  1118. -       STA $45,Y
  1119. -       DEY
  1120. -       BPL .5
  1121. -.6     RTS
  1122. -.7     .BS 4        TEMP $45-48
  1123. -.9     .DA #STAIR1,#STAIR3,#HALL4,#HALL2,#STAIR4,#CAFE,#KITCH,#FR,#CRAWL2,#CELL,#HALL12,#HALL10,#HALL11,HALL13
  1124. -MTAB   .DA .15,.20,.25,.30,.35,.40,.45,.50,.55,.60,.65,.70,.70,.70
  1125. -.15    .DA #NULL,#ADEL,#RUG,#ON,#DOOR1,#AREP,#DOOR1,#IN,#STAIR1,#MAKVIS,DOOR1
  1126. -.20    .DA #NULL,#AREP,#DOOR1,#IN,#STAIR3,#AREP,#DOOR6,#IN,#STAIR3,#AREP,#DOOR6,#ADJEC,#NERN,#$80,#BITSET,#DBUT,0,#$80,#ADEL,#RUG,#ON,#DOOR1,#ASBIT,#DOOR1,0,#$80,#AJSR,.21,#0
  1127. -.21    LDA #RUG
  1128. -       PHA
  1129. -       LDA #ON
  1130. -       PHA
  1131. -       LDA #UNDER
  1132. -       PHA
  1133. -       LDA #DOOR1
  1134. -       PHA
  1135. -       JSR MAKEDG
  1136. -       RTS
  1137. -.25    .DA #NULL,#AREP,#DOOR2,#IN,HALL4
  1138. -.30    .DA #NULL,#AREP,#DOOR2,#IN,#HALL2,#AREP,#DOOR3,#IN,HALL2
  1139. -.35    .DA #NULL,#AREP,#DOOR3,#IN,STAIR4
  1140. -.40    .DA #NULL,#AREP,#DOOR5,#IN,CAFE
  1141. -.45    .DA #NULL,#AREP,#DOOR5,#IN,KITCH
  1142. -.50    .DA #NULL,#AREP,#DOOR6,#IN,#FR,#AREP,#DOOR6,#ADJEC,SERN
  1143. -.55    .DA #ZERO,CVIS,#AINC,CVIS,#AMSG,#121,#MOVETO,MACH  WOULD HAVE TO DISPLAY IF CRAWL WEREN'T DARK
  1144. -.60    .DA #NULL,#AREP,#DOOR7,#IN,#CELL,#AREP,#DOOR7,#ADJEC,SERN
  1145. -.65    .DA #NULL,#AREP,#DOOR7,#IN,#HALL12,#AREP,#DOOR7,#ADJEC,#NERN,#MAKVIS,#BULB2,#GOTO,.71
  1146. -.70    .DA #NULL,#AREP,#DOOR8,#IN,#VLOC,#AREP,#DOOR9,#IN,#VLOC,#ASBIT,BULB2,$8000
  1147. -.71    .DA #ADEL,#BULB2,PARTOF,#AREP,#BULB2,#IN,#VLOC,#AREP,#BULB2,#PARTOF,VLOC
  1148. =gennum
  1149. -*
  1150. -SAVEGENNUM3
  1151. -* GENERATE NUMTAB
  1152. -CNT    .EQ TEMP
  1153. -INDEX  .EQ TEMP+2
  1154. -GNM    LDA #11      1ST WORD#
  1155. -       STA NUMTAB
  1156. -       STA CNT
  1157. -       LDA #0
  1158. -       STA NUMTAB+1
  1159. -       STA CNT+1
  1160. -       LDA #2
  1161. -       STA INDEX
  1162. -       LDA #A
  1163. -       STA MISC
  1164. -       LDA /A
  1165. -       STA MISC+1
  1166. -       LDY #0
  1167. -       BEQ .22
  1168. -.2     JSR INY
  1169. -.22    LDA (MISC),Y SEARCH FOR END OF STRING
  1170. -       BMI .3       CHAR OR EOL
  1171. -.23    BEQ .25      NULL WORD
  1172. -       CMP #SYN3+1
  1173. -       BCS .25
  1174. -       JSR INY      PARTS <= SYN HAVE 1 PARAM
  1175. -.25    JSR INY      SEARCH FOR NEXT STRING
  1176. -       LDA (MISC),Y
  1177. -       BPL .23      ANOTHER TYPE
  1178. -       INC CNT
  1179. -       BNE .3
  1180. -       INC CNT+1
  1181. -.3     CMP #EOL
  1182. -       BNE .2
  1183. -.4     LDA CNT
  1184. -       LDX INDEX
  1185. -       STA NUMTAB,X
  1186. -       STA $50
  1187. -       INX
  1188. -       LDA CNT+1
  1189. -       STA NUMTAB,X
  1190. -       STA $51
  1191. -       INX
  1192. -       STX INDEX
  1193. -       JSR $FF4A
  1194. -       LDA #$A0
  1195. -       JSR $FDED
  1196. -       JSR PD
  1197. -       JSR $FF3F
  1198. -       CPX #26*2
  1199. -       BCC .2
  1200. -* PRINT NUMS & WORDS
  1201. -PNW    LDA #11
  1202. -       STA CNT2
  1203. -       LDA #0
  1204. -       STA CNT2+1
  1205. -.1     JSR $FD8E
  1206. -       LDX CNT2
  1207. -       LDA CNT2+1
  1208. -       JSR PDEC
  1209. -       LDA #$A0
  1210. -       JSR $FDED
  1211. -       LDA #$A0
  1212. -       JSR $FDED
  1213. -       LDY CNT2+1
  1214. -       LDA CNT2
  1215. -       JSR PRWRD
  1216. -       INC CNT2
  1217. -       BNE .2
  1218. -       INC CNT2+1
  1219. -.2     LDA CNT2
  1220. -       CMP CNT
  1221. -       LDA CNT2+1
  1222. -       SBC CNT+1
  1223. -       BCC .1
  1224. -       RTS
  1225. -CNT2   .BS 2
  1226. -PD     LDA $51
  1227. -       LDX $50
  1228. -PDEC   LDY $C081
  1229. -       JMP $ED24
  1230. =handler
  1231. -*
  1232. -SAVEHANDLER41,S6,D1
  1233. -HANDLER JSR CHKEY
  1234. -       BIT DBGFLG
  1235. -       BPL H10
  1236. -       JSR FD8E
  1237. -       LDY /AC
  1238. -       LDA #AC
  1239. -       JSR PS
  1240. -       LDA ACTOR
  1241. -       JSR PROBJ
  1242. -       JSR FD8E
  1243. -       LDA WTFIN
  1244. -       CMP #VT
  1245. -       BNE .3       NO OBJS
  1246. -       LDY /OL
  1247. -       LDA #OL
  1248. -       JSR PS
  1249. -       LDX OBJLIST
  1250. -       BEQ .2       NO OBJS
  1251. -       DEC LSTCOL   DON'T PRINT IN LAST COLUMN
  1252. -       LDY #0
  1253. -.0     TXA
  1254. -       STY TNPNT
  1255. -       JSR PROBJ
  1256. -       LDY TNPNT
  1257. -       INY
  1258. -       LDX OBJLIST,Y
  1259. -       BEQ .1
  1260. -       LDA #",
  1261. -       JSR FDF0
  1262. -       CPY #20
  1263. -       BNE .0
  1264. -.1     INC LSTCOL
  1265. -.2     JSR FD8E
  1266. -.3     LDY #1
  1267. -.4     LDA SDEST,Y
  1268. -       BEQ .5
  1269. -       PHA
  1270. -       STY TNPNT
  1271. -       LDA SLO,Y
  1272. -       PHA
  1273. -       LDA SHI,Y
  1274. -       TAY
  1275. -       PLA
  1276. -       JSR PS
  1277. -       PLA
  1278. -       JSR PROBJ
  1279. -       JSR FD8E
  1280. -       LDY TNPNT
  1281. -.5     DEY
  1282. -       BPL .4
  1283. -H10    LDA ACTOR
  1284. -       STA $10      IN CASE > REFUSES
  1285. -       CMP #PROF    PROF OR PRISONER WILL ALWAYS DO WHAT YOU SAY
  1286. -       BCC .7       NO
  1287. -       CMP #PRIS3+1
  1288. -       BCC .8       YES
  1289. -.7     EOR #ME      I'LL DO WHATEVER I SAY
  1290. -       BEQ .9
  1291. -       LDA CASEFRAME+2
  1292. -       AND #8       WILL CHAR DO IT?
  1293. -       BNE .8       YES
  1294. -       LDA DQ
  1295. -       BEQ .9       CHAR DOES IT OF HIS OWN VOLITION
  1296. -       LDA #251
  1297. -       JMP PMSG     BUZZ OFF
  1298. -.8     LDA #0
  1299. -.9     STA CNTOBJ
  1300. -       STA AFTMSG
  1301. -       JSR SKPOBJ
  1302. -       LDA WTFIN    VERB
  1303. -       CMP #VT
  1304. -       BEQ .15
  1305. -       JSR DOOBJ    HAVE SAME STACK POINTER AS VT
  1306. -       JMP DOIT
  1307. -.15    LDY #2
  1308. -.11    LDA VDAT,Y
  1309. -       STA VTEMP-1,Y
  1310. -       DEY
  1311. -       BNE .11      NOT VDAT
  1312. -*FOR VT,LOOP ONCE FOR EACH OBJ
  1313. -       LDY #0
  1314. -.12    LDA OBJLIST,Y
  1315. -       BEQ .20
  1316. -       STA CUROBJ
  1317. -       STA $10      FOR ANY PRINTING
  1318. -       STY TEMPIND
  1319. -       LDY TWOOBJ
  1320. -       BEQ .13
  1321. -       JSR OBJCOL
  1322. -.13    JSR DOOBJ
  1323. -       LDY TEMPIND
  1324. -       INY
  1325. -       BNE .12
  1326. -.20    DEY
  1327. -       BNE .25      >1 OBJ,A=0
  1328. -       LDA OBJLIST
  1329. -.25    STA LSTOBJ
  1330. -* _ DO _ _ _ _ _ _
  1331. -* ACTUALLY, NO MULTIPLE-OBJECT COMMAND WILL EVER BE "DO"ed
  1332. -* BUT WHAT THE HECK
  1333. -DOIT   LDA DOPNT    EXEC ANOTHER COMMAND?
  1334. -       BNE .31
  1335. -       RTS
  1336. -.31    LDX #7
  1337. -.35    LDA .38-1,X
  1338. -       STA .37+1
  1339. -       LDA .39-1,X
  1340. -       STA .37+2
  1341. -       >PLA DOSTK,DOPNT  WIPES Y
  1342. -.37    STA $FFF
  1343. -       DEX
  1344. -       BNE .35
  1345. -       STX TWOOBJ        1 OBJ
  1346. -       STX OBJLIST+1     1 OBJ
  1347. -       TXA
  1348. -.40    INX
  1349. -       STA NOUNLIST,X    0
  1350. -       CPX #20
  1351. -       BNE .40
  1352. -       JSR GAL      GET ACLOC
  1353. -       JSR TV
  1354. -       JSR NOK
  1355. -       LDA #VT      3
  1356. -       STA WTFIN
  1357. -       LDA OBJLIST
  1358. -       BEQ .42      VI,VP
  1359. -       STA NOUNLIST
  1360. -       JSR CHECKOBJ
  1361. -       LDA NOUNLIST
  1362. -       BEQ DOIT     NOUN ELIMINATED
  1363. -.41    LDA ACTOR
  1364. -       CMP #ME
  1365. -       BEQ .44
  1366. -       LDA ACLOC
  1367. -       CMP LOC
  1368. -       BNE .44
  1369. -       JSR PRDO     PRINT WHAT CHARS IN ROOM DO (CHARS)
  1370. -.44    JMP HANDLER
  1371. -.42    DEC WTFIN    2=VI
  1372. -       LDA SPLACE
  1373. -       BEQ .41
  1374. -       DEC WTFIN    1=VP
  1375. -       BNE .41
  1376. -.38    .DA #ACTOR,#WVERB,#OBJLIST,#SPM,#SDEST,#SINSTR,#SPLACE
  1377. -.39    .DA /ACTOR,/WVERB,/OBJLIST,/SPM,/SDEST,/SINSTR,/SPLACE
  1378. -CUROBJ .BS 1        CURRENT OBJ
  1379. -SIZE   .BS 1
  1380. -LSTOBJ .BS 1        USED BY PRONOUN "IT"
  1381. -VTEMP  .BS 2        VDAT TEMP
  1382. -OKS    .US /O%K.@=/
  1383. -INSOM  .BS 1        INCed BY FINDO IF OBJ IS IN SOMETHING
  1384. -DOOBJ  JSR CHKEY
  1385. -       LDA DOPNT
  1386. -       BNE .0
  1387. -       LDY /OKS
  1388. -       STY RESHI+1
  1389. -       LDY #OKS
  1390. -       STY RESLO+1
  1391. -.0     LDA WTFIN
  1392. -       CMP #VT
  1393. -       BEQ H1
  1394. -       JMP G85      ONLY VT GETS OBJ
  1395. -H1     LDA #0
  1396. -       STA TEMP3+1  FOR FINDO
  1397. -       STA INSOM    FOR FINDO
  1398. -       STA .77
  1399. -       LDA CASEFRAME
  1400. -       BMI .0       OBJ MAY BE ABSENT
  1401. -       LDA CUROBJ
  1402. -       CMP ACLOC
  1403. -       BEQ .0       CAN ALWAYS REACH LOC
  1404. -       JSR FINDO    SEE IF YOU CAN REACH OBJ
  1405. -       BCS .1       NO
  1406. -* HERE WE EXIT IF OBJ DOESN'T EXIST.
  1407. -* THIS IS USUALLY THE BUSINESS OF CHECKOBJ,
  1408. -* BUT A LIQUID OBJ MAY BE DELETED AFTER CHECKOBJ.
  1409. -       LDA INSOM    OBJ EXISTS?
  1410. -       BEQ .1       NO
  1411. -.0     LDA CASEFRAME+3   GET OBJ?
  1412. -       BMI .3            YES
  1413. -.2     JMP G81
  1414. -.1     JMP .10
  1415. -.3     LDA CUROBJ
  1416. -       JSR PNTOBJ
  1417. -       LDY #0
  1418. -       LDA (MISC),Y
  1419. -       STA SIZE
  1420. -       LDY #3
  1421. -       LDA (MISC),Y
  1422. -       AND #$20     LIQUID?
  1423. -       BEQ .5       NO
  1424. -       LDA CUROBJ
  1425. -       LDX #IN
  1426. -       JSR GETOBJ
  1427. -       PLA
  1428. -       STA OLDLOC   FOR OBJWASIN (MAYBE SHOULD DELETE THESE LINES)
  1429. -       LDA WVERB
  1430. -       CMP #GET
  1431. -       BNE .2       DON'T TRY TO GET LIQUID
  1432. -       LDA #107     TELL ME WHERE TO PUT IT.
  1433. -       JMP PMSG
  1434. -.5     LDY #$FF
  1435. -.6     INY
  1436. -       LDA .20,Y
  1437. -       BEQ .7
  1438. -       CMP CUROBJ
  1439. -       BNE .6
  1440. -       LDX .21,Y
  1441. -       STX .77
  1442. -       TYA
  1443. -       ASL
  1444. -       TAY
  1445. -       LDA .23,Y
  1446. -       STA VDAT+1
  1447. -       LDA .23+1,Y
  1448. -       STA VDAT+2
  1449. -       TXA
  1450. -       BNE .7       SPCACT IF GOTTEN
  1451. -       JSR SPCACT
  1452. -.7     LDA WVERB
  1453. -       CMP #REM     REMOVE DOESN'T TAKE, JUST CHECKS FOR SPCACT
  1454. -       BEQ .80
  1455. -       INC ALGOK
  1456. -       INC TRYCUR
  1457. -       LDA CUROBJ
  1458. -       LDX #IN
  1459. -       LDY ACTOR
  1460. -       JSR REPEDG
  1461. -       DEC TRYCUR
  1462. -       DEC ALGOK
  1463. -       LDA OLDTAIL
  1464. -       STA OLDLOC   USED BY TEST AS TO WHERE OBJ WAS
  1465. -       BCC .79
  1466. -       LDA CASEFRAME+2
  1467. -       LSR
  1468. -       BCC .80      OK IF OBJ NOT GOTTEN
  1469. -       LDA SIZE
  1470. -       BEQ .80      SIZE=0:STEAM,GRAFFITI,ETC.
  1471. -       CMP #MGET-1
  1472. -       BCS .80      OK IF NOT GOTTEN SINCE TOO BIG
  1473. -.10    JMP RES
  1474. -.20    .DA #BAR,BOOK4
  1475. -.21    .DA #1,#1    0=SPCACT ON ATTEMPT,1=ONLY SPCACT IF GOTTEN
  1476. -.23    .DA .35,.40
  1477. -.35    .DA #NULL,#POKE,BARREM,1  UNBAR TRAPDOOR
  1478. -.40    .DA #ZERO,AFND,#AINC,AFND,#AREP,#ARR,#IN,#SHELF,#AREP,#ARR,#PARTOF,#SHELF,#AMSG,66  MSG IF BOOK IS REMOVED
  1479. -.77    .BS 1
  1480. -.79    CMP ACTOR
  1481. -       BEQ .80      ALREADY HAD IT
  1482. -       LDA WVERB
  1483. -       CMP #GET
  1484. -       BEQ .80      GET ALWAYS GETS
  1485. -       LDA #191     (TAKEN)
  1486. -       JSR PMSG
  1487. -.80    LDA .77
  1488. -       BEQ G81      SPCACT DONE BEFORE GETTING
  1489. -       JSR SPCACT
  1490. -G81    LDY #2
  1491. -.83    LDA VTEMP-1,Y  POINT VDAT TO START OF ACTION DATA
  1492. -       STA VDAT,Y
  1493. -       DEY
  1494. -       BNE .83
  1495. -G85    LDA CASEFRAME+3
  1496. -       ASL          SPECIAL ACTIONS?
  1497. -       BPL .90
  1498. -       JSR SPCACT
  1499. -       LDA CASEFRAME+3   DON'T SAVE ON STACK IN CASE SUB PLA PLA RTS's
  1500. -       ASL
  1501. -.90    ASL          JSR?
  1502. -       BPL EDGACT
  1503. -       JSR VDAT
  1504. -       STA .95+1
  1505. -       JSR VDAT
  1506. -       STA .95+2
  1507. -.95    JSR 0
  1508. -       LDA CASEFRAME+3
  1509. -       ASL
  1510. -       ASL
  1511. -EDGACT ASL          ADD EDGE?
  1512. -       BPL .40
  1513. -       PHA
  1514. -       JSR GEDGE
  1515. -       PHA
  1516. -       JSR GEDGE
  1517. -       PHA
  1518. -       TAX
  1519. -       JSR CLCPNT
  1520. -       PHA
  1521. -       JSR GEDGE
  1522. -       PHA
  1523. -       JSR MAKEDG
  1524. -       PLA
  1525. -.40    ASL          DELETE EDGE?
  1526. -       BPL .50
  1527. -       PHA
  1528. -       JSR DEL
  1529. -       PLA
  1530. -.50    ASL          REPLACE EDGE?
  1531. -       BPL .60
  1532. -       PHA
  1533. -       LDA WVERB
  1534. -       PHA
  1535. -       CMP #PUT
  1536. -       BNE .55
  1537. -       INC ALGOK    PUT IN ME ALREADY DONE, PUT IN OTHER CAN'T BE AL GOT
  1538. -.55    JSR DOREP
  1539. -       PLA
  1540. -       CMP #PUT
  1541. -       BNE .57
  1542. -       DEC ALGOK
  1543. -.57    PLA
  1544. -.60    ASL          ZERO BITS?
  1545. -       BPL .70
  1546. -       PHA
  1547. -       LDA CUROBJ
  1548. -       JSR ZBIT
  1549. -       PLA
  1550. -.70    ASL          SET BITS?
  1551. -       BPL RES
  1552. -       LDA CUROBJ
  1553. -       JSR SBIT
  1554. -RES    LDA ACTOR
  1555. -       CMP #ME
  1556. -       BNE RERTS    NO MSG FOR ACTIONS BY OTHERS
  1557. -RESHI  LDY /OKS     MESSAGE MAY BE CHANGED BY ATTEMPT
  1558. -RESLO  LDA #OKS
  1559. -       JSR PS
  1560. -       LDA AFTMSG
  1561. -       BEQ RERTS
  1562. -       JMP PMSG
  1563. -RERTS  RTS
  1564. -AFTMSG .BS 1
  1565. -ZBIT   JSR PNTOBJ
  1566. -       LDY #3
  1567. -.1     JSR VDAT
  1568. -       STA TEMP     FOR BITAAA
  1569. -       AND (MISC),Y ZERO BIT
  1570. -       JSR BITAAA
  1571. -       INY
  1572. -       CPY #6
  1573. -       BNE .1
  1574. -       RTS
  1575. -SBIT   JSR PNTOBJ
  1576. -       LDY #3
  1577. -.1     JSR VDAT
  1578. -       STA TEMP     FOR BITAAA
  1579. -       ORA (MISC),Y SET BIT
  1580. -       JSR BITAAA
  1581. -       INY
  1582. -       CPY #6
  1583. -       BNE .1
  1584. -       RTS
  1585. -* SEE IF BITS ARE ALREADY AS ASKED
  1586. -BITAAA CMP (MISC),Y
  1587. -       BEQ .10
  1588. -       STA (MISC),Y
  1589. -.0     RTS
  1590. -.10    LDA TEMP
  1591. -       STY TEMP
  1592. -       CPY #5
  1593. -       BNE .20
  1594. -       LDX #0
  1595. -       CMP #%10111111    FIX
  1596. -       BEQ .50
  1597. -       INX
  1598. -       CMP #%01000000    BREAK
  1599. -       BEQ .50
  1600. -       INX
  1601. -       CMP #%00100000    BURN
  1602. -       BEQ .50
  1603. -       RTS
  1604. -.20    CPY #4
  1605. -       BNE .0
  1606. -       LDX #3
  1607. -       CMP #%00100000    OPEN
  1608. -       BEQ .50
  1609. -       INX
  1610. -       CMP #%11011111    CLOSE
  1611. -       BEQ .50
  1612. -       INX
  1613. -       CMP #%00010000    UNLOCK
  1614. -       BEQ .50
  1615. -       INX
  1616. -       CMP #%11101111    LOCK
  1617. -       BEQ .50
  1618. -       INX
  1619. -       CMP #%01000000    PRIME
  1620. -       BEQ .40
  1621. -       INX
  1622. -       CMP #%10111111    UNPRIME
  1623. -       BNE .0
  1624. -.40    LDY #3
  1625. -       LDA (MISC),Y
  1626. -       AND #8       LIGHT?
  1627. -       BEQ .60      NO
  1628. -.50    STX .90
  1629. -       LDY /.70
  1630. -       LDA #.70
  1631. -       JSR OMSG
  1632. -.60    LDY TEMP
  1633. -       RTS
  1634. -.70    .US /IT'S ALREADY +/
  1635. -       .DA .80
  1636. -* NOTE THIS SUB NEVER RETURNS TO PRINT
  1637. -.80    PLA
  1638. -       BNE .80
  1639. -       PLA
  1640. -       BNE .80
  1641. -       STY $24
  1642. -       LDA .90
  1643. -       JSR PADJ     REAL ADJ
  1644. -       LDA #".
  1645. -       JSR FDF0
  1646. -       JMP FD8E
  1647. -.90    .BS 1
  1648. -OBJCOL LDY ACTOR
  1649. -       CPY #ME
  1650. -       BNE .5       DON'T PRINT FOR OTHER ACTORS
  1651. -       LDY #2
  1652. -       STY SHIFT
  1653. -       JSR PROBJ
  1654. -       LDA #":
  1655. -       JSR FDF0
  1656. -       INC $24
  1657. -.5     RTS
  1658. -* FINDD:FIND IF DEST IS REACHABLE
  1659. -* FINDO:SEE IF OBJ IS REACHABLE
  1660. -* ENTER BOTH WI 0 IN TEMP3+1 AND OBJ/DEST IN A
  1661. -FINDD  CMP ACLOC
  1662. -       BEQ FID
  1663. -       TAX
  1664. -       JSR PNTOBJ
  1665. -       LDY #3
  1666. -       LDA (MISC),Y
  1667. -       AND #4       OPENABLE?
  1668. -       BEQ .2       NO
  1669. -       INY
  1670. -       LDA (MISC),Y
  1671. -       AND #$20     OPEN?
  1672. -       BNE .2
  1673. -       STX TEMP3+1  CLOSED OBJ
  1674. -.2     TXA
  1675. -FINDO  LDX #IN
  1676. -       JSR GETOBJ
  1677. -       DEX
  1678. -       BMI FID      OBJ NOT IN LOC:ONLY MOVEMENT OR SPECIAL ACTION
  1679. -       INC INSOM    SO DOOBJ DOESN'T PROCESS NONEXISTENT OBJS
  1680. -       PLA
  1681. -       BNE FINDD    ALWAYS
  1682. -FID    LDA TEMP3+1
  1683. -       BNE IC
  1684. -       CLC
  1685. -       RTS
  1686. -IC     STA $10
  1687. -       STA CNTOBJ
  1688. -       LDY /.2
  1689. -       LDA #.2
  1690. -       JMP OMSG
  1691. -.2     .US /> IS CLOSED.@=/
  1692. -* CONDITION#,COND PARMS,[AND/OR,COND,CP]/[ACTION#,ACT PARMS(,#$7F,ACTION#,ACT PARMS)(,#$80,CND,..),0]  
  1693. -* AND=00 OR=80 ELSE=7F
  1694. -* ELSE-IF REPLACED BY ELSE-AND
  1695. -ELSE   .EQ $7F
  1696. -SPCACT LDA #$FF
  1697. -       STA VAR      VAR NOT BOUND
  1698. -       STA VAR+1
  1699. -.31    JSR VDAT     GET CONDITION
  1700. -       TAY
  1701. -       BEQ .49      NO CNDS OR ACTS, USEFUL ONLY FOR 1ST BYTE
  1702. -       JSR TRYCND
  1703. -       BNE .39      FAILURE
  1704. -.32    JSR VDAT     GET ACTION
  1705. -       ASL
  1706. -       BNE .35      ACTION
  1707. -       BCC .31      AND
  1708. -.34    JSR VDAT
  1709. -       JSR TRYCND   SKIP OR COND
  1710. -       JSR VDAT
  1711. -       ASL
  1712. -       BEQ .34      AND/OR,SKIP
  1713. -.35    TAY
  1714. -       LDA ACTTAB-2,Y
  1715. -       STA .37+1
  1716. -       LDA ACTTAB-1,Y
  1717. -       STA .37+2
  1718. -.37    JSR 0        EXECUTE ACTION
  1719. -       JSR VDAT     ANOTHER ACTION?
  1720. -       CMP #$7F     ELSE
  1721. -       BEQ .39
  1722. -       ASL          SET Z
  1723. -       BNE .35      YES
  1724. -       BCS .31      ANOTHER COND/ACT SET
  1725. -       RTS
  1726. -* COND FAILED
  1727. -.39    JSR VDAT
  1728. -       TAY
  1729. -       BMI .31      OR
  1730. -       BNE .43      ACTION,SKIP IT
  1731. -       JSR VDAT
  1732. -       JSR TRYCND   ADVANCE POINTER
  1733. -       JMP .39
  1734. -.42    LSR
  1735. -.43    TAY
  1736. -       LDX ACTLEN-1,Y #PARMS TO SKIP
  1737. -.44    JSR VDAT
  1738. -       DEX
  1739. -       BPL .44      VDAT X+1 TIMES
  1740. -       CMP #$7F     ELSE
  1741. -       BEQ .32
  1742. -       ASL
  1743. -       BNE .42      ANOTHER ACTION
  1744. -       BCS .31      ANOTHER PAIR
  1745. -.49    RTS
  1746. -* TRY CONDITION:ON EXIT Z=1 IF SUCCESS
  1747. -TRYCND LDY #$60     RTS
  1748. -       STY .3
  1749. -       CMP #$40     COND+$40=NOT COND
  1750. -       BCC .1
  1751. -       SBC #$40
  1752. -       LDY #$8      PHP
  1753. -       STY .3
  1754. -.1     ASL          WASTE A BYTE FOR CONVENIENCE
  1755. -       TAY
  1756. -       LDA CNDTAB-2,Y
  1757. -       STA .2+1
  1758. -       LDA CNDTAB-1,Y
  1759. -       STA .2+2
  1760. -       JSR VDAT     GET 1ST PARM
  1761. -.2     JSR 0
  1762. -.3     PHP
  1763. -       PLA
  1764. -       EOR #2       Z=NOT Z
  1765. -       PHA
  1766. -       PLP
  1767. -       RTS
  1768. -* SUBST CERTAIN #S IN EDGE SPECS
  1769. -* WI SLOTS
  1770. -GEDGE  JSR VDAT
  1771. -       CMP #VY
  1772. -       BCC .2
  1773. -       TAY
  1774. -       LDA .3-VY,Y
  1775. -       STA .1+1
  1776. -       LDA .4-VY,Y
  1777. -       STA .1+2
  1778. -.1     LDA $FFF     SLOT
  1779. -.2     RTS
  1780. -.3     .DA #VAR+1,#VAR,#ACTOR,#LOC,#SDEST,#SPM,#SINSTR,#CUROBJ
  1781. -.4     .DA /VAR+1,/VAR,/ACTOR,/LOC,/SDEST,/SPM,/SINSTR,/CUROBJ
  1782. -VAR    .HS FFFF     BOUND BY CND, USED BY CND OR ACTION.
  1783. -* BINDING ERASED WHEN SPCACT CALLED
  1784. -* MAKE SURE YOU KNOW WHEN YOU'RE BINDING IT & WHEN IT'S BOUND.
  1785. -*VARIABLES USED IN EDGE SPECIFICATIONS. FILL WI SLOT VALUES
  1786. -VOBJ   .EQ $FF
  1787. -VINSTR .EQ $FE
  1788. -VPM    .EQ $FD
  1789. -VDEST  .EQ $FC
  1790. -VLOC   .EQ $FB
  1791. -VACT   .EQ $FA
  1792. -VX     .EQ $F9      BOUND BY ISEDG,ITIN
  1793. -VY     .EQ $F8
  1794. -AC     .US /ACTOR:=/
  1795. -OL     .US /OBJECT(S):=/
  1796. -SLO    .DA #PDEST,#PINS
  1797. -SHI    .DA /PDEST,/PINS
  1798. -PDEST  .US /DESTINATION:=/
  1799. -PINS   .US /INSTRUMENT:=/
  1800. -* EXECUTE INLINE SPECACT
  1801. -* JSR INLINE, RETURN ADDR, CODE
  1802. -* CAN'T BE JMPed TO
  1803. -* BUG: CRASH IF RECURSION TOO DEEP
  1804. -INLINE >PSHW VDAT+1,VSTK,VPNT
  1805. -       PLA
  1806. -       TAY
  1807. -       PLA
  1808. -       STA VDAT+2
  1809. -       INY
  1810. -       BNE .1
  1811. -       INC VDAT+2
  1812. -.1     STY VDAT+1
  1813. -       LDY .9       UNHURT BY VDAT
  1814. -       JSR VDAT     GET RETURN ADDR
  1815. -       STA .7,Y
  1816. -       JSR VDAT     & ADVANCE VDAT TO CODE
  1817. -       STA .8,Y
  1818. -       INC .9
  1819. -       JSR JSRSPC   EXTRA LEVEL SO SKIP WORKS
  1820. -       >PLLW VDAT+1,VSTK,VPNT
  1821. -       DEC .9
  1822. -       LDY .9
  1823. -       LDA .7,Y
  1824. -       STA .3+1
  1825. -       LDA .8,Y
  1826. -       STA .3+2
  1827. -.3     JMP 0
  1828. -.7     .BS 12       RTS STACK
  1829. -.8     .BS 12
  1830. -.9     .BS 1        RTS POINTER
  1831. -VSTK   .BS 22       12 LEVELS
  1832. -VPNT   .BS 1
  1833. -* CALL JSRSPC FOR SKIP TO RETURN TO CALLER
  1834. -JSRSPC JSR SPCACT
  1835. -       RTS
  1836. =inmate
  1837. -       .LISTOF
  1838. -*
  1839. -SAVEINMATE,S6,D2
  1840. -*--------------------------------
  1841. -* INMATE
  1842. -* PHILIP GOETZ 1986-1988
  1843. -*--------------------------------
  1844. -PROD   .EQ 1        1=PRODUCTION ASSEMBLY
  1845. -*EQUs FROM PACK
  1846. -TABTAB .EQ $7400
  1847. -SETTAB .EQ TABTAB+34
  1848. -KEYTAB .EQ SETTAB+2
  1849. -FINAL  .EQ KEYTAB+12     START OF RPL TEXT
  1850. -       .OR $800
  1851. -       .TF INOBJ,S6,D2
  1852. -       .IN MACROS,S6,D1
  1853. -       .IN START3    Initialization
  1854. -       .IN DISPLAY30    Print location & happenings each turn
  1855. -       .IN MONITOR2    Call monitor routines in other RAM bank
  1856. -       .IN EDGES27    Routines for altering/searching semantic network
  1857. -       .IN PRINT22    Print messages, strings; incl. compression routine
  1858. -       .IN STRTAB9
  1859. -       .IN LEX35.1    Lexical analysis: Examine raw string & find words
  1860. -       .IN TRANSFORM10.3    Grammatical transformations
  1861. -       .IN ATN16.1    Augmented transition network (parser)
  1862. -       .IN TRANSIT28    Transitions for the ATN
  1863. -       .IN TSUB16    Subroutines called by the transitions
  1864. -       .IN HANDLER41    Verb handler jumped to after parse completed
  1865. -*      .IN CHECK    Protection code
  1866. -       .IN CNDACT26,D2    Defines the interpreted adventure language used
  1867. -            by verb handlers & other things
  1868. -       .IN VOCA6    Vocabulary, A-I
  1869. -       .IN VOCJ5.1    Vocabulary, J-Z
  1870. -       .IN CASEFRAME    Verb case frames
  1871. -       .IN VERBS33.1    Verb execution routines
  1872. -       .IN VT18.1    More verb routines
  1873. -*      .OR $8000
  1874. -*      .TF GENOBJ
  1875. -*      .IN GENNUM3    Table used for reading vocab
  1876. -       .OR $D000
  1877. -       .TF INCARD    (Next part goes in 16K card)
  1878. -       .IN SPEAK13.1    Eliza parser
  1879. -*      .DO PROD
  1880. -*      .IN PROT2    More protection code
  1881. -*      .ELSE
  1882. -*PROT   RTS
  1883. -*PROCNT .HS 50       GOOD
  1884. -*       .FIN
  1885. -       .IN LP5,S5,D1    List processing routines
  1886. -       .IN CHARS14.1    Plans, character reactions, etc.
  1887. -       .IN EDSCRIPT    Eliza-type scripts, by character
  1888. -       .IN LIBSCRIPT
  1889. -       .IN MRKSCRIPT
  1890. -       .IN MRSSCRIPT
  1891. -       .IN INTSCRIPT
  1892. -       .IN PROSCRIPT2
  1893. -       .IN IO9,S6,D2    Save/Restore game
  1894. -       .IN EVENTS5.1    Timed events & special events
  1895. -       .IN DATA37.1    Mostly objects
  1896. -       .IN NET10    Initial semantic network
  1897. + END OF ARCHIVE
  1898.