0100 ; SAVE#D:SPYPT1.M65 0110 ; 0120 ;------------------; 0130 ; Secret Agent ; 0140 ; (c) 1988 ; 0150 ; by Barry Kolbe ; 0160 ;------------------; 0170 .OPT NO LIST 0180 ; 0190 .MACRO PRINT 0200 LDX # <%1 0210 LDY # >%1 0220 JSR PRINTE 0230 .ENDM 0240 ; 0250 *= $B0 0260 SCR 2 ;screen scroll 0270 SCR2 2 ;ditto 0280 ML 2 ;more indirects 0290 SL 2 0300 J 2 0310 X1 1 ;save X & Y 0320 X2 1 0330 Y1 1 0340 Y2 1 0350 IX 1 ;char counter 0360 XF 1 0370 VP 1 ;verb counter 0380 NP 1 ;noun counter 0390 DO 1 ;direct object 0400 PO 1 ;prep. object 0410 ERFLG 1 ;error flag 0420 INTOF 1 ;'INTO' flag 0430 WITHF 1 ;'WITH' flag 0440 TEMP 1 0450 EOLF 1 ;in printing 0460 MAXLEN 1 ;max input 0470 ROWX 1 ;save rowcrs 0480 COLX 1 ;save colcrs 0490 NOEND 1 0495 INROOM 1 ;objects in room 0500 ; 0510 GR0 = $8C00 ;screen memory 0520 HOLD = $8600 ;data backup 0530 CHSET = $8000 ;character set 0540 IBUF = $8400 ;input buffer 0550 PBUF = $8500 ;print buffer 0560 ; 0570 ROWCRS = $54 ;cursor row 0580 COLCRS = $55 ;& column 0590 RTCLOK = $14 ;clock 0600 CH = $02FC ;key 0610 CAPS = $02BE ;caps flag 0620 CONSOL = $D01F ;consol button 0630 RANDOM = $D20A ;random number 0640 EOL = $9B ;end of line 0650 BOTLIN = 17 ;scroll value 0660 ENLIN = $26 ;wrap around val 0670 NUMOBJ = 46 ;total # objects 0680 NUMSHO = 23 ;# obj can show 0690 NUMV = 18 ;number of verbs 0700 ; 0710 .INCLUDE #D:SPYPT3.M65 0720 ; 0730 *= $6000 0740 ; 0750 START JSR KEEP ;back up data 0760 JMP BEGIN 0770 ; 0780 .INCLUDE #D:SPYPT6.M65 0790 ; 0800 ;start things going 0810 ; 0820 BEGIN LDA #$61 ;lowercase 0830 STA CAPS 0840 LDA # >CHSET ;install 0850 STA $02F4 ;character set 0860 JSR CLRGR0 ;clear screen 0870 LDA # GDLST 0900 STA $0231 0910 LDA #$3E ;enbale DMA 0920 STA $022F 0930 LDA #0 ;initialize 0940 STA WHERE ;outside 0950 STA CARRY ;carry nothing 0960 STA NOEND 0970 JSR HOME ;home cursor 0980 PRINT M47 ;print credits 0990 PRINT M48 1000 INC ROWCRS ;next line 1010 JSR SHOLOC ;show room info 1020 ; 1030 ;Main loop 1040 ; 1050 DOIN JSR INPUT ;get input 1060 LDA #1 ;shoot 1070 STA FK ;shoot flag 1080 LDA IBUF+1 ;check for 1090 CMP #EOL ;single letter 1100 BNE TRYCMD ;command 1110 LDA IBUF 1120 ; 1130 ;Move from room to room 1140 ; 1150 LDX #5 ;a direction? 1160 CML1 CMP SINGLE,X 1170 BEQ GSING ;yes 1180 DEX ;try again 1190 BPL CML1 1200 BMI TRYSPC ;try X,I,R,L 1210 GSING STX TEMP ;save direction 1220 JSR APEROB ;ape or robot? 1230 LDY WHERE ;present loc 1240 LDA EXOF,Y ;get offset 1250 CLC ;add direction 1260 ADC TEMP ;0-5 1270 TAY 1280 LDA EXITAB,Y ;get exit 1290 BPL GOOO ;value:+ =ok 1300 PRINT M8 ;'Can't go' 1310 JMP DOIN ;more input 1320 GOOO STA WHERE ;new room 1330 CMP #$21 ;escape? 1340 BNE GOOP ;no 1350 JMP ENDGAM ;see if won 1360 GOOP JSR SHOLOC ;show new room 1370 JSR CKDEAD ;deadly room? 1380 JMP DOIN ;more input 1390 ; 1400 ;Check other single letters 1410 ; 1420 TRYSPC CMP #'I ;inventory? 1430 BNE TLOK 1440 JSR INVENT 1450 JMP DOIN 1460 ; 1470 TLOK CMP #'L ;look at room? 1480 BNE TSAV 1490 JSR LOOK 1500 JMP DOIN 1510 ; 1520 TSAV CMP #'X ;save data 1530 BNE TRYLOA ;to disk? 1540 JSR SVEGAM 1550 JMP DOIN 1560 ; 1570 TRYLOA CMP #'R ;retrieve data 1580 BNE TRYCMD 1590 JSR LOADGAM 1600 JSR SHOLOC ;show room 1610 JMP DOIN 1620 ; 1630 ;Interpret sentence 1640 ; 1650 TRYCMD JSR INTPRET ;parse 1660 LDA ERFLG ;error? 1670 BEQ AOK 1680 PRINT M1 ;'What?' 1690 JMP DOIN ;get input 1700 AOK LDA VP ;get verb number 1710 ASL A ;x2 for 1720 TAX ;look up table 1730 LDA CMDTBL,X 1740 STA DOCM+1 1750 LDA CMDTBL+1,X 1760 STA DOCM+2 1770 DOCM JSR $FFFF ;do verb 1780 JMP DOIN ;more input 1790 ; 1800 ;Set the cursor at 2,1 1810 ; 1820 HOME LDA #1 1830 STA ROWCRS 1840 STA COLCRS 1850 INC COLCRS 1860 RTS 1870 ; 1880 ;Show the name of the room 1890 ;in the status line 1900 ; 1910 SHOLOC LDY #24 ;clear out 1920 LDA #0 line 1930 SC1 STA PLACE,Y 1940 DEY 1950 BPL SC1 1960 LDA WHERE ;get room 1970 ASL A ;x2 for table 1980 TAX 1990 LDA ROOMTAB,X ;use 2000 STA SL ;indirect for 2010 LDA ROOMTAB+1,X ;for move 2020 STA SL+1 2030 LDY #0 2040 SC2 LDA (SL),Y ;get byte 2050 BEQ SXT ;done if 0 2060 JSR ASC2IC ;Internal Code 2070 STA PLACE+2,Y ;on status 2080 INY ;line 2090 BNE SC2 2100 SXT JSR LOOK ;look at room 2110 RTS 2120 ; 2130 ;Look at a Room 2140 ; 2150 LOOK JSR DESCRIB ;describe it 2160 JSR SHOEXT ;show exits 2170 JSR SHOOBJ ;sho objects 2180 RTS 2190 ; 2200 ;Show objects in Room 2210 ; 2220 SHOOBJ LDX #0 ;'You see:' 2230 SHS LDA YOUS,X 2240 STA IBUF,X 2250 INX 2260 CPX #9 2270 BNE SHS ;X = 9 2280 LDY #0 ;scan objects 2290 NN1 LDA OBJTBL,Y 2300 CMP WHERE ;is it here? 2310 BEQ SOB ;yes 2320 SOC INY ;next object 2330 CPY #NUMSHO ;that all? 2340 BNE NN1 ;no 2350 CPX #9 2360 BEQ NOOB ;you see nothing 2370 LDA #$20 ;zap last ',' 2380 STA IBUF-2,X 2390 LDA #0 ;'EOL' marker 2400 STA IBUF-1,X 2410 PRINT IBUF ;on screen 2420 RTS 2430 ; 2440 NOOB LDY #0 ;'Nothing' 2450 NOI LDA NOTH,Y 2460 STA IBUF,X 2470 BEQ NRT 2480 INX 2490 INY 2500 BNE NOI 2510 NRT PRINT IBUF ;print it 2520 RTS 2530 ; 2540 SOB TYA 2550 PHA ;save Y 2560 ASL A ;x2 2570 TAY ;point to 2580 LDA OBJNAM+1,Y ;object's 2590 STA SL+1 ;name 2600 LDA OBJNAM,Y 2610 STA SL 2620 LDY #0 ;move name into 2630 ODM LDA (SL),Y ;buffer 2640 BEQ ODN 2650 STA IBUF,X 2660 INX 2670 INY 2680 BNE ODM 2690 ODN LDA #', ;add in ', ' 2700 STA IBUF,X 2710 LDA #$20 2720 INX 2730 STA IBUF,X 2740 INX 2750 PLA ;get Y back 2760 TAY 2770 JMP SOC ;do more 2780 ; 2790 ;Show exits 2800 ; 2810 SHOEXT LDX #0 ;'The exits 2820 SK1 LDA M9,X ;are:' 2830 STA IBUF,X 2840 INX 2850 CPX #15 2860 BNE SK1 2870 LDY WHERE ;room # 2880 LDA EXOF,Y ;offset into 2890 TAY ;EXITAB 2900 LDA #0 ;ibuf counter 2910 STA X1 ;direction cntr 2920 SXX STY TEMP 2930 LDA EXITAB,Y ;get exits 2940 BMI ELQ ;$FF = no 2950 STY TEMP 2960 LDA X1 ;get dir name 2970 ASL A ;x2 2980 TAY 2990 LDA DIRECT,Y ;point to 3000 STA SL ;name 3010 LDA DIRECT+1,Y 3020 STA SL+1 3030 LDY #0 ;move name 3040 ELP LDA (SL),Y ;to buffer 3050 STA IBUF,X 3060 BEQ ELQ 3070 INX 3080 INY 3090 BNE ELP 3100 ELQ LDY TEMP 3110 NOEX INC X1 ;try next direct 3120 INY 3130 LDA X1 3140 CMP #6 ;is that all? 3150 BNE SXX 3160 LDA #$20 ;zap last ',' 3170 STA IBUF-2,X 3180 LDA #0 ;set 'EOL' 3190 STA IBUF-1,X 3200 PRINT IBUF ;print 3210 RTS 3220 ; 3230 ;Find the VERB & NOUN 3240 ; 3250 ;input format: 3260 ; verb (the) object [with/into] 3270 ; (the) object] 3280 ; (the) and [..] are optional 3290 ; 3300 ;if verb or first object are not 3310 ;recognized an error is returned 3320 ; 3330 ;spaces and 'the' are skipped 3340 ; 3350 INTPRET LDX #0 ;set variables 3360 STX IX ;char counter 3370 STX VP ;verb number 3380 STX NP ;noun number 3390 STX INTOF ;into and with 3400 STX WITHF ;flags 3410 STX ERFLG ;error flag 3420 ; 3430 ;search 3440 ; 3450 LDA # VERBT 3480 STA SL+1 3490 SV2 LDX IX ;get counter 3500 LDY #0 3510 SV5 LDA (SL),Y ;do the first 3520 CMP IBUF,X ;3 letters 3530 BNE SV1 ;match? 3540 INX 3550 INY 3560 CPY #3 3570 BNE SV5 ;not done 3580 BEQ GOTV ;got a verb 3590 SV1 INC VP ;next verb 3600 LDA SL ;add 3 to 3610 CLC ;pointer 3620 ADC #3 3630 STA SL 3640 BCC SS1 3650 INC SL+1 3660 SS1 LDA VP ;end of verbs? 3670 CMP #NUMV 3680 BNE SV2 3690 SV3 INC ERFLG ;error 3700 RTS 3710 ; 3720 ;got verb 3730 ; 3740 GOTV LDA IBUF,X ;look for 3750 CMP #EOL ;EOL or 3760 BEQ SV3 ;first space 3770 CMP #$20 3780 BEQ GOTSP 3790 INX 3800 BNE GOTV 3810 GOTSP JSR NSPACE ;find next char 3820 JSR SKPTHE ;skip 'the' 3830 JSR NSPACE ;find next char 3840 SH1 JSR FINDN ;get noun 3850 BCS SV3 ;error 3860 SH2 LDA NP ;save as 3870 STA DO ;direct object 3880 ; 3890 ;find EOL or space 3900 ; 3910 SH3 LDA IBUF,X ;if EOL done 3920 CMP #EOL 3930 BNE SH9 3940 RTS 3950 SH9 CMP #$20 ;find end of 3960 BEQ SH4 ;noun- i.e. 3970 SV8 INX ;a space char 3980 BNE SH3 3990 SH4 INX 4000 STX IX 4010 JSR NSPACE ;find non space 4020 JSR PREP ;a preposition? 4030 JSR NSPACE ;find non space 4040 JSR SKPTHE ;skipping... 4050 JSR FINDN ;last noun? 4060 LDA NP ;as prep. object 4070 STA PO 4080 RTS 4090 ; 4100 ;Find a 'non' SPACE character 4110 ; 4120 NSPACE LDA IBUF,X 4130 CMP #$20 4140 BNE NS 4150 INX 4160 BNE NSPACE 4170 NS STX IX ;char counter 4180 RTS 4190 ; 4200 ;Skip the word 'the' 4210 ; 4220 SKPTHE LDY #0 4230 ST1 LDA THE,Y 4240 CMP IBUF,X 4250 BNE THER 4260 INX 4270 INY 4280 CPY #4 4290 BNE ST1 4300 STX IX 4310 THER RTS 4320 ; 4330 ;Check for 'INTO' or 'WITH' 4340 ;if found set flags 4350 ; 4360 PREP LDX IX 4370 LDY #0 4380 P2 LDA IBUF,X ;'INTO'? 4390 CMP INTOB,Y 4400 BNE PREP1 4410 INX 4420 INY 4430 CPY #5 4440 BNE P2 4450 INC INTOF ;flag 4460 P4 STX IX 4470 RTS ;ok 4480 PREP1 LDA IBUF,X ;'WITH'? 4490 CMP WITHB,Y 4500 BNE P3 4510 INX 4520 INY 4530 CPY #5 4540 BNE PREP1 4550 INC WITHF ;set flag 4560 JMP P4 4570 P3 RTS 4580 ; 4590 ;Get a description of a room 4600 ; 4610 DESCRIB LDA WHERE ;this room 4620 ASL A ;x2 4630 TAX 4640 LDA DESTAB+1,X ;point to 4650 TAY ;description 4660 LDA DESTAB,X 4670 TAX 4680 JSR PRINTE ;print it 4690 LDA WHERE ;room 1? 4700 CMP #1 4710 BNE DSS ;special msg 4720 PRINT M53 4730 RTS 4740 ; 4750 DSS CMP #9 ;ape room? 4760 BNE DEOU 4770 LDA FI ;in cage 4780 BEQ APER ;yes 4790 PRINT D9 ;'In cage' 4800 RTS 4810 APER LDA F6 ;ape alive? 4820 BEQ APES 4830 PRINT M37 ;'Charging' 4840 RTS 4850 APES PRINT D20 ;'Dead ape' 4860 DEOU RTS 4870 ; 4880 ;Find the NOUN 4890 ; 4900 FINDN LDA # NOUNT 4930 STA SL+1 4940 LDX #0 ;noun counter 4950 STX NP 4960 SN2 LDX IX ;char counter 4970 LDY #0 4980 SN7 LDA (SL),Y ;compare 3 4990 CMP IBUF,X ;letters 5000 BNE SN1 5010 INX 5020 INY 5030 CPY #3 ;match 3? 5040 BNE SN7 5050 BEQ GOTN ;yes 5060 SN1 INC NP ;next noun 5070 LDA SL ;add 3 to the 5080 CLC ;pointer 5090 ADC #3 5100 STA SL 5110 BCC SN5 5120 INC SL+1 5130 SN5 LDA NP ;at end of 5140 CMP #NUMOBJ ;nouns? 5150 BNE SN2 ;no 5160 SEC ;error 5170 RTS 5180 GOTN CLC ;got one 5190 RTS 5200 ; 5210 ;Beginning of Verb Handlers 5220 ; DO = direct object 5230 ; PO = prepositional object 5240 ; 5250 ;Get an object 5260 ; 5270 DGET LDA CARRY ;carrying the 5280 CMP #6 ;maximum 5290 BCS NOGT ;yes 5300 LDX DO ;object number 5310 CPX #$2D ;get all 5320 BEQ GETAL ;yes 5330 CPX #$17 ;over maximum 5340 BCS GT ;possible to 5350 LDA OBJTBL,X ;get 5360 CMP WHERE ;is it here? 5370 BEQ IH ;yes 5380 CMP #$80 ;you have it? 5390 BNE NTH ;no 5400 PRINT M11 ;'Have already' 5410 RTS 5420 NTH PRINT M3 ;'Not here' 5430 RTS 5440 IH LDA #$80 ;take it 5450 STA OBJTBL,X 5460 INC CARRY ;add 1 5470 TOOK PRINT M4 ;'Taken' 5480 JSR DOSCOR ;check score 5490 RTS 5500 NOGT PRINT M7 ;'Can't carry' 5510 RTS 5520 GT PRINT M24 ;'Can't get' 5530 RTS 5540 ; 5550 ;Get all objects 5560 ; 5570 GETAL LDY #0 ;check if 5580 GET LDA OBJTBL,Y ;here 5590 CMP WHERE 5600 BEQ TAK ;yes take 5610 CPY #NUMSHO ;at end? 5620 BEQ TK1 ;yes 5630 INY 5640 BNE GET 5650 TK1 JMP PDON ;'Done' 5660 TAK LDX CARRY ;carry more? 5670 CPX #$06 5680 BCS NOGT ;no 5690 LDA #$80 ;take it 5700 STA OBJTBL,Y 5710 INC CARRY ;add 1 5720 TYA ;save Y 5730 PHA 5740 JSR TOOK ;'Taken' 5750 PLA ;get Y back 5760 TAY 5770 JMP GET ;do more 5780 ; 5790 ;Drop object(s) 5800 ; 5810 INJ INC INROOM ;add 1 5820 BNE INK 5830 ; 5840 DDRO LDA #0 ;zero counter 5850 STA INROOM 5860 LDY #0 ;count objects 5870 INN LDA OBJTBL,Y ;in room 5880 CMP WHERE 5890 BEQ INJ ;here's one 5900 INK INY ;next object 5910 CPY #NUMSHO ;done? 5920 BNE INN 5930 LDA INROOM ;at 6 or more? 5940 CMP #6 5950 BCC INL ;ok 5960 INM PRINT M51 ;'No room' 5970 RTS 5980 INL LDX DO ;is it the 5990 CPX #$0A ;dreaded vial? 6000 BNE PP1 ;no - whew 6010 JMP VDED ;a goner 6020 PP1 CPX #$2D ;drop all? 6030 BEQ DPAL ;yup 6040 LDA OBJTBL,X ;have it? 6050 CMP #$80 6060 BEQ DH ;yes 6070 PRINT M5 ;'Don't have' 6080 RTS 6090 DH LDA WHERE ;put in room 6100 STA OBJTBL,X 6110 CPX #$12 ;was it scuba? 6120 BNE DDY 6130 LDA #1 ;reset flag 6140 STA FE 6150 BNE DDX 6160 DDY CPX #$08 ;is it the mask? 6170 BNE DDX 6180 LDA #1 ;reset flag 6190 STA FH 6200 DDX DEC CARRY ;1 less to carry 6210 DP4 PRINT M6 ;'Dropped' 6220 JSR DOSCOR ;change score? 6230 RTS 6240 ; 6250 ;Drop all 6260 ; 6270 DPAL LDY #0 ;scan objects 6280 DP1 LDA OBJTBL,Y 6290 CMP #$80 ;have this 1? 6300 BEQ DP2 ;yes 6310 DP3 INY ;next object 6320 CPY #NUMSHO ;done? 6330 BNE DP1 6340 JMP TK1 ;'done' 6350 DP2 LDA INROOM ;is there room? 6360 CMP #6 ;6 maximum 6370 BEQ INM ;no room 6380 CPY #$0A ;vial? 6390 BEQ VDED ;dead! 6400 CMP #$08 ;gas mask? 6410 BNE NOGS 6420 LDA #1 ;flip flag 6430 STA FH 6440 NOGS CMP #$12 ;scuba gear 6450 BNE NOSC 6460 LDA #1 ;flip flag 6470 STA FE 6480 ; 6490 NOSC INC INROOM ;1 more in room 6500 DEC CARRY ;carry 1 less 6510 TYA ;save Y 6520 PHA 6530 JSR DP4 ;'Dropped' 6540 PLA 6550 TAY ;get Y 6560 LDA WHERE ;put in room 6570 STA OBJTBL,Y 6580 JMP DP3 ;more 6590 ; 6600 VDED PLA ;virus dropped 6610 PLA 6620 LDA #7 6630 JMP DEAD 6640 ; 6650 ; 6660 ;Unlock is the same as OPEN 6670 ; 6680 DUNL JMP DOPE 6690 ; 6700 ;Open 6710 ; 6720 DOPE LDA DO ;the box? 6730 CMP #7 6740 BNE DDF 6750 LDA OBJTBL+7 ;have it? 6760 CMP #$80 6770 BEQ GSS 6780 JMP HAVNT ;'Haven't got' 6790 GSS LDA F9 ;if opned before 6800 BNE GD1 6810 JMP EE2 ;see 'Nothing' 6820 GD1 EOR #1 ;else set flag 6830 STA F9 ;so no reopen 6840 GGS LDA WHERE ;gas mask here 6850 STA OBJTBL+8 6860 JMP LKSEE ;show it 6870 ; 6880 DDF CMP #$1C ;open desk? 6890 BNE OCC 6900 LDA WHERE ;which room? 6910 CMP #1 ;entrance? 6920 BEQ OD1 6930 CMP #2 ;reception? 6940 BEQ OD2 6950 CMP #$19 ;office? 6960 BEQ OD9 6970 NOCAN PRINT M19 ;'Can't ' 6980 RTS 6990 ; 7000 OD1 LDA F7 ;entrance desk 7010 BEQ ITOPN ;already open? 7020 EOR #1 7030 STA F7 7040 LDA #1 ;badge & 7050 STA OBJTBL ;nailfile 7060 STA OBJTBL+1 7070 OE1 JSR ITOPN ;'Open' 7080 LKSEE JSR LOOK ;show room 7090 RTS 7100 ; 7110 ITOPN PRINT M13 ;'It's open' 7120 RTS 7130 OD2 LDX #$1C ;reception desk 7140 LDY #1 ;use nailfile 7150 JSR CKWITH ;say 'WITH' 7160 LDA F1 ;opened flag 7170 BEQ ITOPN 7180 EOR #1 7190 STA F1 7200 LDA #2 ;show card 7210 STA OBJTBL+2 7220 BNE OE1 7230 ; 7240 OD9 LDX #$1C ;office desk 7250 LDY #$15 ;large key 7260 JSR CKWITH ;'WITH'? 7270 LDA FN ;open flag 7280 BEQ ITOPN 7290 EOR #1 7300 STA FN 7310 LDA #$19 ;show: 7320 STA OBJTBL+$10 ;coin 7330 STA OBJTBL+$16 ;combination 7340 JMP OE1 7350 ; 7360 OCC CMP #$1B ;cabinet 7370 BNE NOCAN 7380 LDA WHERE 7390 CMP #$19 ;office? 7400 BNE OCK 7410 LDX #$1B ;cabinet 7420 LDY #$11 ;small key 7430 JSR CKWITH ;'WITH' 7440 LDA F8 ;open flag 7450 BEQ ITOPN 7460 EOR #1 7470 STA F8 7480 LDA #$19 7490 STA OBJTBL+$15 ;large key 7500 JMP OE1 7510 ; 7520 OCK CMP #4 ;kitchen? 7530 BEQ KOK 7540 JMP NOCAN ;'Can't' 7550 KOK LDX #$1B ;cabinet 7560 LDY #$16 ;combination 7570 JSR CKWITH ;'WITH' 7580 LDA FM ;open flag 7590 BEQ ITOPN 7600 EOR #1 7610 STA FM 7620 LDA #4 7630 STA OBJTBL+$0A ;vial 7640 JMP OE1 7650 ; 7660 NOTYT PRINT M14 ;'Not yet!' 7670 RTS 7680 ; 7690 ;Read 7700 ; 7710 DREA LDA DO ;what shall 7720 TAY ;we read? 7730 LDA OBJTBL,Y 7740 CMP #$80 ;have it? 7750 BEQ DORE 7760 PRINT M5 ;'Can't read' 7770 RTS 7780 DORE LDA DO 7790 CMP #3 ;pad 7800 BEQ RPD 7810 CMP #9 ;folder 7820 BEQ RFO 7830 CMP #$0C ;memo 7840 BNE NORE 7850 PRINT M22 ;'Tighten 7860 RTS ;security' 7870 RPD PRINT M20 ;'Push button' 7880 RTS 7890 RFO PRINT M21 ;'Experiments' 7900 RTS 7910 NORE PRINT M23 ;'Can't read' 7920 RTS 7930 ; 7940 ;Insert (Put) into 7950 ; 7960 DINS LDA WHERE 7970 CMP #5 ;security? 7980 BNE IRB 7990 LDX #2 ;card 8000 LDY #$1E ;slot 8010 JSR CKINTO ;say 'INTO' 8020 LDA #5 8030 STA OBJTBL+5 ;got a gun 8040 LDA #$FF ;lose card 8050 STA OBJTBL+2 8060 DINR DEC CARRY ;1 less 8070 JSR PDON ;'Done' 8080 JMP LKSEE ;show 8090 ; 8100 IRB CMP #$0B ;hallway 8110 BNE IRC 8120 LDX #0 ;badge 8130 LDY #$1E ;slot 8140 JSR CKINTO ;'INTO' 8150 LDA #$0B 8160 STA OBJTBL+6 ;baton 8170 LDA #$FF 8180 STA OBJTBL ;lose badge 8190 JMP DINR 8200 ; 8210 IRC CMP #$0C ;cafeteria 8220 BNE IRR ;try rod 8230 LDX #$10 ;coin 8240 LDY #$22 ;vending 8250 JSR CKINTO ;'INTO' 8260 LDA #$0C 8270 STA OBJTBL+$0B ;formula 8280 LDA #$FF 8290 STA OBJTBL+$10 ;lose coin 8300 JMP DINR 8310 ; 8320 IRR CMP #$12 ;security 8330 BNE IRD ;try disk 8340 LDX #$0F ;rod 8350 LDY #$2C ;hole 8360 JSR CKINTO ;'INTO' 8370 LDA #$FF 8380 STA OBJTBL+$0F ;lose rod 8390 LDA #$15 ;gain exit 8400 STA EXITAB+111 8410 JMP DINR 8420 ; 8430 IRD CMP #$14 ;computer room 8440 BNE IRM ;try memo 8450 LDX #4 ;disk 8460 LDY #$2B ;drive 8470 JSR CKINTO ;'INTO' 8480 LDA #$14 ;program 8490 STA OBJTBL+$0E 8500 LDA #$FF ;no disk 8510 STA OBJTBL+4 8520 JMP DINR 8530 ; 8540 IRM CMP #$15 ;photo lab 8550 BNE IRO 8560 LDX #$0C ;memo 8570 LDY #$2A ;enlarger 8580 JSR CKINTO ;'INTO' 8590 LDA #$15 8600 STA OBJTBL+$0D ;microdot 8610 STA OBJTBL+$0C ;memo 8620 JMP DINR 8630 IRO JMP NOCAN ;'Can't' 8640 ; 8650 ;Check DO, PO , ownershp 8660 ;and for the word 'INTO' 8670 ; Is X= DO, Y = PO? 8680 ; 8690 CKINTO CPX DO ;X = DO? 8700 BNE NTFIT 8710 CPY PO ;Y = PO? 8720 BNE NTFIT 8730 LDA OBJTBL,X ;have X? 8740 CMP #$80 8750 BNE UNV 8760 LDA INTOF ;said 'INTO'? 8770 BEQ WRA 8780 RTS ;sure go ahead 8790 NTFIT PRINT M16 ;'Won't fit' 8800 PLA 8810 PLA ;pull return 8820 RTS 8830 UNV PLA ;pull return 8840 PLA 8850 JMP HAVNT ;'Don't have it' 8860 WRA PLA ;pull return 8870 PLA 8880 JMP NOTYT ;'Not yet' 8890 ; 8900 .INCLUDE #D:SPYPT2.M65 8910 .INCLUDE #D:SPYPT4.M65 8920 .INCLUDE #D:SPYPT5.M65 8930 *= $02E0 8940 .WORD START