**************************************************** * SUPER-WUMPUS * BY JACK EMMERICHS 1978 * MC6800 ASSEMBLY **************************************************** * ADAPTED TO RUN ON THE MC3 COMPUTER * EXTERNAL REFERENCES AT END OF PROGRAM * BY DANIEL TUFVESSON 2013 **************************************************** ORG $0100 JMP START ARRAY RMB 5 ROOM SEQUENCE ARRAYNO RMB 2 ARRAY POINTER AWAKE RMB 1 AWAKE SW BLANK EQU $20 BLANK SPACE COUNT RMB 1 GENERAL COUNTER CR EQU $0D CARRIAGE RETURN CURRENT RMB 1 CURRENT HUNTER LOCATION DAYS RMB 1 DAYS LEFT DELIM RMB 1 END OF INPUT DELIMITER END RMB 1 GAME OVER SW EOT EQU 4 END OF STRING LF EQU $0A LINE FEED OLDROOM RMB 1 SAVE ROOM NO ROCKS RMB 1 ROCK COUNTER ROOMNO RMB 1 GENERAL ROOM NO ROOMTLY RMB 1 GENERAL ROOM COUNTER SAVX RMB 2 SAVE IX SHOTS RMB 1 NO OF SHOTS LEFT STOP RMB 1 STOP ARROW SW STUF RMB 4 RANDOM STUPH FOR RAMDOM NUMBER GENERATOR SYMBOL RMB 1 GENERAL SYMBOL HOLDER TEST RMB 1 TEST ROOM FOR SHOOTING SEQUENCE WILD RMB 1 WILD ARROW IND WUMPROOM RMB 1 CURRENT WUMPUS LOCATION ORG * **SKIP * * ROOMS FCB 2,5,6,0 FCB 1,3,7,0 FCB 2,4,8,0 FCB 3,5,9,0 FCB 1,4,10,0 FCB 1,11,12,0 FCB 2,12,13,0 FCB 3,13,14,0 FCB 4,14,15,0 FCB 5,11,15,0 FCB 6,10,17,0 FCB 6,7,18,0 FCB 7,8,19,0 FCB 8,9,20,0 FCB 9,10,16,0 FCB 15,17,20,0 FCB 11,16,18,0 FCB 12,17,19,0 FCB 13,18,20,0 FCB 14,16,19,0 * TRANS FCB 1,1 FCB 2,2 FCB 3,3 FCB 4,4 FCB 5,5 FCB 6,6 FCB 7,7 FCB 8,8 FCB 9,9 FCB 10,10 FCB 11,11 FCB 12,12 FCB 13,13 FCB 14,14 FCB 15,15 FCB 16,16 FCB 17,17 FCB 18,18 FCB 19,19 FCB 20,20 * * PROB1 FCB 33 ARROW AMONG BATS WILL HIT ONE PROB2 FCB 33 ARROW OVER PIT WILL FALL IN PROB3 FCB 20 ARROW HITTING HUNTER WONT KILL PROB4 FCB 05 BAT MIGRATION FCB 10 FIND THROWING ROCK FCB 05 RATS EAT SUPPLIES FCB 05 ROCK SLIDE FCB 08 FIND MORE SUPPLIES PROB8 FCB 33 THROW ROCK WILL KILL WUMPUS * * * * ORG $0200 START JMP MAIN **SKIP * * CRLF FCB CR,LF,0,EOT TX01 FCB CR,LF,LF,0 FCC /CURRENT ROOM IS:/ FCB EOT TX02 FCB CR,LF,0,0 FCC /TUNNELS LEAD TO:/ FCB EOT TX03 FCB CR,LF,LF,0 FCC /MOVE OR SHOOT? / FCB EOT TX04 FCC / WHERE? / FCB EOT TX05 FCB CR,LF,0,0 FCC /I HEAR WINGS/ FCB EOT TX06 FCB CR,LF,0,0 FCC /I FEEL A DRAFT/ FCB EOT TX07 FCB CR,LF,0,0 FCC /I SMELL A WUMPUS!/ FCB EOT **SKIP TX08 FCB CR,LF,0,0 FCC /YOU HAVE RUN OUT OF SUPPLIES AND WILL STARVE/ FCB EOT TX09 FCB CR,LF,0,0 FCC /YYYIIIIEEEEEE.... YOU FELL INTO A PIT/ FCB EOT TX10 FCB CR,LF,0,0 FCC /AARRRRGGGGHHH.... YOU HAVE SHOT YOURSELF/ FCB EOT **SKIP TX11 FCB CR,LF,0,0 FCC /C H O M P CRUNCH MUNCH GULP!/ FCB CR,LF,0,0 FCC /THE WUMPUS GOT YOU!/ FCB EOT TX12 FCB CR,LF,0,0 FCC /YOU LOOSE (HEE HEE)/ FCB EOT TX13 FCB CR,LF,0,0 FCC /B O N K ! / FCB EOT TX14 FCB CR,LF,0,0 FCC /GOOD FOR YOU! - YOU GOT HIM/ FCB EOT TX15 FCC / WITH A ROCK!/ FCB EOT **SKIP TX16 FCB CR,LF,0,0 FCC /SUPPLIES WILL LAST / FCB EOT TX17 FCC / DAYS/ FCB EOT TX18 FCB CR,LF,0,0 FCC /BAT MIGRATION - HIDE AND WAIT/ FCB CR,LF,0,0 FCC / ONE COLONY OF BATS HAS MOVED/ FCB EOT TX19 FCB CR,LF,0,0 FCC /NICE GOING, YOU SHOT YOURSELF/ FCB CR,LF,0,0 FCC / AND HAVE USED MEDICAL SUPPLIES/ FCB EOT TX20 FCB CR,LF,0,0 FCC /WHOOOPS! BATS RELOCATE YOU/ FCB CR,LF,0,0 FCC / YOU LOST SOME SUPPLIES/ FCB EOT **SKIP TX21 FCB CR,LF,0,0 FCC /THUD! YOU ONLY DAZED HIM/ FCB EOT TX22 FCB CR,LF,0,0 FCC /MISSED/ FCB EOT TX23 FCB CR,LF,0,0 FCC /LOOK, YOU FOUND / FCB EOT TX24 FCC /A THROWING ROCK/ FCB EOT TX25 FCC /SUPPLIES/ FCB CR,LF,0,0 FCC / FROM ANOTHER (EATEN) HUNTER/ FCB EOT **SKIP TX26 FCB CR,LF,0,0 FCC /RATS EAT HALF YOUR SUPPLIES/ FCB EOT TX27 FCB CR,LF,0,0 FCC /ROCK SLIDE! A TUNNEL IS CLOSED/ FCB EOT TX28 FCC /WATCH IT!/ FCB EOT TX29 FCC / - THE WUMPUS IS AWAKE/ FCB EOT TX30 FCB CR,LF,0,0 FCC /WILD SHOT - / FCB EOT TX31 FCB CR,LF,0,0 FCC /BIG DEAL, YOU SHOT A BAT/ FCB EOT **SKIP TX32 FCB CR,LF,0,0 FCC /A DOWNDRAFT HAS SUCKED THE ARROW INTO A PIT/ FCB EOT TX33 FCB CR,LF,0,0 FCC /YOU JUST STEPPED ON HIS FLIPPER!/ FCB EOT TX34 FCB CR,LF,LF,0 FCC /DO YOU WANT TO PLAY AGAIN? / FCB EOT TX35 FCB CR,LF,0,0 FCC /DO YOU WANT TO SEE A CAVE MAP? / FCB EOT **SKIP TX36 FCB CR,LF,0,0 FCC /WELCOME TO THE WUMPUS CAVES,/ FCB CR,LF,0,0 FCC /DO YOU WISH INSTRUCTIONS? / FCB EOT WHAT FCB LF FCC / WHAT? / FCB EOT TX37 FCB CR,LF,0,0 FCC /THANK YOU, CAME AGAIN SOMETIME./ FCB EOT **SKIP TX38 FCB CR,LF,0,0 FCC /SHOOT WHAT?/ FCB CR,LF,0,0 FCC /YOU HAVE NO ARROWS OR ROCKS/ FCB EOT TX39 FCC / - YOU CAN'T GET THERE FROM HERE/ FCB EOT TX40 FCB CR,LF,LF,0 FCC /ROOM TUNNELS ITEM/ FCB LF,EOT **SKIP TX99 FCB CR,LF,0,0 FCC /THIS CAVE HAS 20 INTERCONNECTED ROOMS/ FCB CR,LF,0,0 FCC /THE WUMPUS IS ASLEEP IN ONE AND MUST BE KILLED/ FCB CR,LF,0,0 FCC /IF HE (?) FINDS YOU HE WILL EAT YOU/ FCB CR,LF,0,0 **SKIP FCC /IF YOU WAKE HIM UP HE MAY MOVE/ FCB CR,LF,0,0 FCC /LOOK OUT FOR BATS AND PITS/ FCB CR,LF,0,0 FCC /WARNINGS ARE FOR HAZARDS 1 ROOM AWAY/ FCB CR,LF,0,0 FCC /YOU HAVE 5 ARROWS AND A LIMITED STORE OF SUPPLIES/ FCB CR,LF,0,0 **SKIP FCC /EACH SHOT MAY GO THROUGH 1 TO 3 CONNECTED ROOMS/ FCB CR,LF,0,0 FCC /YOU MAY MAKE 1 MOVE OR SHOT EACH DAY/ FCB CR,LF,0,0 FCC /WHEN YOU ARE OUT OF ARROWS LOOK FOR ROCKS/ FCB CR,LF,0,0 **SKIP FCC / WHICH CAN BE THROWN INTO ONLY 1 ROOM/ FCB CR,LF,0,0 FCC / AND MAY KILL THE WUMPUS/ FCB CR,LF,0,0 FCC / GOOD LUCK/ FCB CR,LF,LF,EOT **SKIP * * PSHX STX SAVX SAVE IX TSX POINT IX DEX DEX LDS 2,X MOVE RTS ADDR STS ,X LDS SAVX INSERT IX STS 2,X RESTORE STACK TXS LDX 2,X RETORE IX RTS * * * PULX TSX POINT IX DEX DEX LDS 4,X REMOVE IX VALUE STS ,X LDS 2,X MOVE UP RTS ADDR STS 4,X RESTORE STACK TXS INS INS INS INS LDX ,X LOAD IX RTS **SKIP * * ROOMIN JSR PSHX SAVE IX LDAB #3 STAB COUNT CLR ROOMNO IN1 JSR CHARIN GET CHARACTER CMPA #BLANK IF BLANK THEN BNE IN2 LDAB COUNT CMPB #3 IF COUNT = 3 (LEADING BLANKS) BEQ IN1 KEEP GOING BRA IN3 ELSE DONE IN2 CMPA #CR IF CR THEN BEQ IN3 DONE CMPA #$2C IF COMA THEN BEQ IN3 DONE CMPA #'0 IF < 0 THEN BLT IN5 ERROR CMPA #'9 IF > 9 THEN BHI IN5 ERROR DEC COUNT IF THIRD DIGIT THEN BEQ IN5 ERROR ANDA #$0F STRIP OFF HIGH BITS PSHA LDAA ROOMNO MULTIPLY ROOMNO TAB BY 10 ASLA ASLA ASLA ABA ABA PULB ABA ADD NEW DIGIT STAA ROOMNO BRA IN1 GET NEXT CHAR **SKIP * * ROOMIN CONTINUED * IN3 STAA DELIM SAVE DELIMITER LDAA ROOMNO BEQ IN45 LDX #TRANS LOOK UP IN31 CMPA 1,X TRANSLATION BEQ IN4 INX INX CPX #TRANS+40 IF FOUND BNE IN31 DONE BRA IN5 ELSE ERROR IN4 LDAA ,X IN45 JSR PULX RESTORE IX RTS IN5 LDX #CRLF JSR STROUT LDX #TX04 WRITE ERROR JSR STROUT BRA ROOMIN+3 TRY AGAIN **SKIP * * ROOMOUT TSTA BPL OUT0 JSR BLKOUT IF BLOCKED TUNNEL THEN JSR BLKOUT WTRITE SPACES JSR BLKOUT RTS OUT0 JSR PSHX SAVE IX JSR BLKOUT WRITE BLANK LDX #TRANS IF A = 1 DECA BEQ OUT5 GOTO END OUT1 INX LOOP THROUGH INX TABLE DECA BNE OUT1 OUT5 LDAA 1,X TRANSLATE ROOMNO CMPA #9 BHI OUT7 JSR BLKOUT OUT7 JSR DECOUT WRITE ROOM JSR PULX RESTORE IX RTS * * * DAYSLEFT JSR PSHX SAVE IX LDX #TX16 MSG1 JSR STROUT LDAA DAYS JSR DECOUT DAYS OUT LDX #TX17 MSG2 JSR STROUT JSR PULX RTS * * * DECOUT CLR COUNT DEC1 INC COUNT LOAD COUNT SUBA #10 WITH TENS DIGIT BPL DEC1 ADDA #10 DEC COUNT PSHA SAVE UNITS DIGIT LDAA COUNT IF COUNT BEQ DEC2 NOT = 0 ORAA #$30 MAKE ASCII JSR CHAROUT AND PRINT DEC2 PULA LOAD UNITS ORAA #$30 MAKE ASCII JSR CHAROUT RTS **SKIP * * RAND PSHB RANDOM NUMBER GENERATOR - SAVE B LDAA STUF+1 COMPUTE (STUF * 2 * * 9) MOD 2 ** 16 CLC ROLA CLC ROLA ADDA STUF ADD STUFF TO RESULT LDAB STUF+1 CLC MULTIPLY BY 2 ** 2 ROLB ROLA CLC ROLB ROLA CLC ADDB STUF+1 ADD STUFF TO RESULT ADCA STUF CLC ADDB #$19 ADD HEXADECIMAL 3619 TO THE RESULT ADDA #$36 STAA STUF STORE RESULT IN STUF STAB STUF+1 PULB RESTORE B RTS * RMB 5 * EQU * **SKIP * * RANDMOVE STAA OLDROOM SAVE CURRENT ROOM LDAA #50 SET LOOP COUNTER STAA COUNT TO 50 STX SAVX SAVE CURRENT IX RMV1 LDX SAVX LOOP DEC COUNT PICK FIRST, SECOND, JSR RAND OR THIRD ROOM CMPA #85 BLS RMV5 INX CMPA #170 BLS RMV5 INX RMV5 TST COUNT IF 50 TRIES, BEQ RMV7 DONT MOVE LDAA ,X IF BLOCKED BMI RMV1 GO BACK TO LOOP JSR PNTROOM POINT IX TO ROOM TST 3,X IF ROOM EMPTY, BEQ RMV9 GO TO END TSTB ELSE IF WUMPUS MOVING BNE RMV1 GO BACK TO LOOP BRA RMV9 RMV7 LDAA OLDROOM RMV9 LDX SAVX RTS RETURN * * * RANDROOM JSR RAND GET ROOM ANDA #$1F MAKE <= 32 CMPA #20 IF > 20 THEN BHI RANDROOM DO IT AGAIN TSTA IF = 0 THEN BEQ RANDROOM JSR PNTROOM POINT INDEX RTS RETURN **SKIP * * PNTROOM PSHA SAVE A DECA A = 4(A-1) + 1 ASLA ASLA INCA LDX #ROOMS POINT INDEX PNT1 DECA LOOP A = 1 TIMES BEQ PNT2 INX BRA PNT1 PNT2 PULA RESTORE A RTS RETURN * * * PNTRANS PSHA SAVE A DECA A = 2(A-1) + 1 ASLA INCA LDX #TRANS POINT INDEX PNT3 DECA LOOP A = 1 TIMES BEQ PNT4 INX BRA PNT3 PNT4 PULA RESTORE A RTS RETURN * * * PROMPTIN JSR CHARIN GET ANSW PSHA PUSH IT CMPA #CR IF A = CR THEN BEQ PROMPT9 GO TO END PROMPT5 JSR CHARIN LOOP UNTIL CR CMPA #CR BNE PROMPT5 PROMPT9 PULA RESTORE ANSWER RTS RETURN *SKIP * * PROBLITY JSR RAND GET RAND NUMBER ANDA #$7F MAKE <= 128 CMPA #100 IT > 100 THEN BHI PROBLITY DO IT AGAIN CMPA ,X IF RAND <= PROB BLS PRB1 SET A CLRA ELSE CLEAR A BRA PRB5 PRB1 LDAA #1 PRB5 INX INCREMENT IX RTS RETURN * * * CONECTED JSR PNTROOM ANSWER IS IN B CMPB ,X TEXT 3 CONNECTIONS BEQ CON5 CMPB 1,X BEQ CON5 CMPB 2,X BEQ CON5 CLRB B = 0 IF NOT CONNECTED RTS CON5 LDAB #1 ELSE B = 1 RTS * * * WON LDX #TX14 JSR STROUT INC END RTS * * * LOST LDX #TX12 JSR STROUT INC END RTS **SKIP * * MAIN SPC 1 LDS #$0FFF SET STACK !!!!!!!! MAN1 LDX #TX36 ASK FOR INSTRUCTIONS JSR STROUT JSR PROMPTIN ANDA #$DF CONVERT TO UPPER CASE CMPA #'Y BEQ TEACH SHOW THEM CMPA #'N BEQ STARTGAM OR NOT LDX #WHAT JSR STROUT BRA MAN1 TEACH LDX #TX99 JSR STROUT STARTGAM JSR GENCAVES INIT CAVES JSR PLAY MAN2 LDX #TX35 ASK FOR MAP OF CAVE JSR STROUT JSR PROMPTIN ANDA #$DF CONVERT TO UPPER CASE CMPA #'Y BEQ DSPLAY SHOW IT CMPA #'N BEQ NXTGAME OR NOT LDX #WHAT JSR STROUT BRA MAN2 DSPLAY JSR DISPLAY NXTGAME LDX #TX34 ASK FOR ANOTHER GAME JSR STROUT JSR PROMPTIN ANDA #$DF CONVERT TO UPPER CASE CMPA #'Y BEQ STARTGAM PLAY IT CMPA #'N BEQ FINAL OR NOT LDX #WHAT JSR STROUT BRA NXTGAME FINAL LDX #TX37 JSR STROUT LDX #CRLF JSR STROUT JMP EXIT !!!!!!!! **SKIP * * GENCAVES JSR CLEAR CLEAR OLD ITEMS LDAA #1 SET UP 1 WUMPUS STAA COUNT LDAB #'W STAB SYMBOL JSR GENITEM LDAB #'P SET UP 1 TO 2 PITS STAB SYMBOL JSR RAND ANDA #1 INCA STAA COUNT JSR GENITEM LDAB #'B SET UP 1 TO 4 BAT COLONIES STAB SYMBOL JSR RAND ANDA #3 INCA STAA COUNT JSR GENITEM GEN1 JSR RANDROOM SET CURRENT ROOM TST 3,X BNE GEN1 STAA CURRENT LDX #TRANS IF TRANSLATION TABLE TST 1,X IS NOT FILLED IN, BNE GEN6 LDAB #20 GEN2 PSHB JSR RANDROOM LOAD 20 ITEMS INTO GEN3 JSR PNTRANS TRANSLATION TABLE TST 1,X BEQ GEN5 ADDA #7 CMPA #20 BLS GEN3 SUBA #20 BRA GEN3 GEN5 PULB STAB 1,X DECB BNE GEN2 GEN6 CLR AWAKE PUT WUMPUS TO SLEEP JSR RANDROOM ASRA GEN10 TO 20 DAYS ADDA #10 STAA DAYS LDAA #5 SET UP 5 SHOTS STAA SHOTS CLR ROCKS AND NO ROCKS CLR END START NEW GAME RTS RETURN **SKIP * * CLEAR LDX #ROOMS CLEAR ROOM LOOP CLR1 LDAA #3 CLR2 TST ,X BPL CLR3 COM ,X CLEAR BLOCKED TUNNELS CLR3 INX DECA BNE CLR2 CLR ,X INX CPX #ROOMS+80 BNE CLR1 * * * NOP REPLACE THIS WITH RTS (39) TO PREVENT * RESHUFFELING OF ROOM NUMBERS BETWEEN GAMES * * LDX #TRANS CLEAR TRANSLATION TABLE CLR4 CLR 1,X INX INX CPX #TRANS+40 BNE CLR4 RTS * * * GENITEM LDAB COUNT LOOP FOR # OF ITEMS GEN7 PSHB JSR RANDROOM TST 3,X FIND EMPTY ROOM BNE GEN7+1 LDAB SYMBOL LOAD WITH ITEM STAB 3,X CMPB #'W IF ITEM IS WUMPUS THEN BNE GEN8 STAA WUMPROOM GEN8 PULB ELSE DONT DECB CYCLE THROUGH LOOP BNE GEN7 RTS **SKIP * * PLAY DEC DAYS DECREASE DAYS TST AWAKE BLS GAME1 JSR MOVE_W MOVE WUMPUS GAME1 JSR REPORT REPORT TST END IF END BLS GAME3 RTS RETURN GAME3 LDX #TX03 PROMPT FOR SHOOT OR MOVE JSR STROUT JSR PROMPTIN ANDA #$DF CONVERT TO UPPER CASE CMPA #'S BEQ GAME4 CMPA #'M BEQ GAME5 LDX #WHAT JSR STROUT BRA GAME3 GAME4 JSR SHOOT SHOOT BRA GAME6 GAME5 JSR MOVE MOVE GAME6 TST END BLS GAME8 RTS GAME8 LDX #CRLF SKIP A LINE JSR STROUT JSR HAPNINGS RANDOM ITEMS BRA PLAY * * * MOVE_W LDX #PROB3 ONE TIME IN FIVE, JSR PROBLITY DO NOT MOVE WUMPUS TSTA BNE MOVE1 LDAA WUMPROOM MOVE TO RANDOM ROOM JSR PNTROOM LDAB #1 JSR RANDMOVE STAA WUMPROOM CLR 3,X CLEAR CURRENT WUMMPUS INDICATOR JSR PNTROOM LDAB #'W STAA 3,X SET NEW WUMPUS INDICATOR MOVE1 RTS **SKIP * * REPORT TST DAYS IF DAYS = 0 THEN BPL RPT0 LDX #TX08 STARVED TO DEATH JSR STROUT JSR LOST RTS RPT0 LDAA CURRENT JSR PNTROOM LDAB 3,X CMPB #'B STEPPED INTO A BNE RPT1 BAT CAVE JSR BATS BRA REPORT START AGAIN RPT1 CMPB #'W BUMBED INTO WUMPUS BNE RPT2 JSR BUMP_W TST END IF ASLEEP !!!!!!!! BLS RPT2 CONTINUE RTS ELSE END RPT2 CMPB #'P STEPPED INTO A PIT BNE RPT3 JSR PITS RTS **SKIP * * REPORT CONTINUED * RPT3 LDAA ,X JSR RPTROOM REPORT SURROUNDING ROOMS LDAA 1,X JSR RPTROOM LDAA 2,X JSR RPTROOM LDX #TX01 REPORT CURRENT ROOM JSR STROUT LDAA CURRENT JSR ROOMOUT LDX #TX02 REPORT CONNECTING TUNNELS JSR STROUT LDAA CURRENT JSR PNTROOM JSR RAND JUMBLE REPORTING ANDA #$07 OF TUNNELS STAA COUNT RPT4 LDAA 2,X LDAB 1,X STAB 2,X LDAB ,X STAB 1,X STAA ,X DEC COUNT BNE RPT4 LDAA ,X REPORT CONECTING JSR ROOMOUT ROOMS LDAA 1,X JSR ROOMOUT LDAA 2,X JSR ROOMOUT JSR DAYSLEFT REPORT DAYS LEFT RTS RETURN **SKIP * * RPTROOM JSR PSHX SAVE IX TSTA BMI RRM9 JSR PNTROOM LDAA 3,X CMPA #'P REPORT BNE RRM1 LDX #TX06 I FEEL A DRAFT JSR STROUT RRM1 CMPA #'B BNE RRM2 LDX #TX05 I HEAR WINGS JSR STROUT RRM2 CMPA #'W BNE RRM9 LDX #TX07 I SMELL WUMPUS JSR STROUT RRM9 JSR PULX RESTORE IX RTS RETURN **SKIP * * BATS JSR PSHX SAVE IX LDX #TX20 WHOOPS JSR STROUT JSR RANDROOM PICK A ROOM STAA CURRENT MOVE TO IT LDAB DAYS TBA ASRB ASRB SBA STAA DAYS JSR PULX RESTORE IX RTS **SKIP * * PITS LDX #TX09 REPORT PIT JSR STROUT JSR LOST RTS * * * BUMP_W JSR PSHX TST AWAKE IF NOT AWAKE BHI BMP5 LDX #CRLF JSR STROUT LDX #TX28 WATCH IT JSR STROUT LDX #TX33 PRINT WARNING JSR STROUT LDX #CRLF JSR STROUT LDX #TX29 IS AWAKE JSR STROUT INC AWAKE WAKE HIM UP JSR PULX RTS BMP5 LDX #TX11 ELSE PRINP CHOMP JSR STROUT JSR LOST JSR PULX RTS **SKIP * * SHOOT TST SHOTS IF NO SHOTS BNE S10 JSR THROW CALL THROW RTS S10 CLR WILD CLEAR INDICATORS CLR STOP DEC SHOTS LDX #CRLF JSR STROUT LDX #TX04 WHERE TO? JSR STROUT * LDX #CRLF * JSR STROUT LDX #ARRAY STX ARRAYNO LDAA CURRENT STAA TEST LDAB #1 S11 STAB ROOMTLY JSR ROOMIN LOAD UP TO 3 ROOMS TSTA BEQ S13 END ROOMS WHEN NO ROOM INPUT STAA ,X INX INC ROOMTLY !!!!!!!! LDAA DELIM IF DELIMITER IS A CARRIAGE RETURN, CMPA #CR GO TO END OF ROOM LIST BEQ S13 LDAB ROOMTLY CMPB #4 BNE S11 S12 JSR ROOMIN IGNORE MORE ROOMS TSTA BEQ S13 LDAA DELIM IF DELIMITER IS CARRIAGE RETURN, CMPA #CR GO TO END OF ROOM LIST BNE S12 S13 TST AWAKE IF WUMPUS IS ASLEEP THEN BHI S20 LDX #CRLF REPORT HIM AWAKE JSR STROUT LDX #TX28 JSR STROUT LDX #TX29 JSR STROUT INC AWAKE AND WAKE HIM UP **SKIP * * SHOOT CONTINUED * S20 DEC ROOMTLY LOOP FOR NUMBER OF ROOMS BNE S21 RTS S21 TST WILD IF SHOT IS ALREADY WILD THEN BHI S22 GO TO RANDOM SHOT LDX ARRAYNO GET NEXT ROOM INC ARRAYNO+1 **NOTE:ARRAY MUST NOT CROSS PAGE BOUNDRY !!! LDAB ,X PSHB LDAA TEST IF NEXT ROOM IS CONNECTED TO CURRENT ROOM THEN JSR CONECTED TSTB BHI S25 CONTINUE LDX #TX30 ELSE PRIND WILD SHOT JSR STROUT FOR FIRST ROOM WILD LDX #TX28 (WATCH IT) JSR STROUT INC WILD INS IGNORE PUSHED ROOM S22 LDAA TEST MAKE RANDOM MOVE JSR RANDMOVE PSHA S25 PULA STAA TEST LOOK AT ROOM SHOT INTO JSR PNTROOM LDAA 3,X CMPA #'W BNE S31 JSR WON IF SHOT WUMPUS THEN INC END GAME WON RTS S31 CMPA #'B BNE S32 JSR STBAT IF SHOT BATS TST STOP THEN CALL STBAT BLS S32 RTS S32 CMPA #'P BNE S33 JSR STPIT IF SHOT PIT TST STOP THEN CALL STPIT BLS S33 RTS S33 LDAA TEST CMPA CURRENT IF SHOT SELF BNE S20 THEN CALL STSELF JSR STSELF RTS **SKIP * * THROW TST ROCKS BNE THR1 LDX #TX38 NOTHING TO SHOW JSR STROUT RTS THR1 DEC ROCKS USE ROCK THR0 LDX #TX04 WHERE? JSR STROUT JSR ROOMIN LDX #CRLF JSR STROUT TSTA BEQ THR0 ENTER ONE ROOM ONLY LDAB CURRENT SEE IF CONNECTED ROOM JSR CONECTED TSTB BHI THR2 IF SO CONTINUE LDX #TX22 ELSE PRINT MISSED JSR STROUT LDX #TX39 NOT CONNECTED JSR STROUT RTS THR2 JSR PNTROOM LDAB 3,X CMPB #'W IF HIT WUMPUS BEQ THR5 GO TO HIT WUMPUS (5) CMPB #'B IF HIT BATS BNE THR3 JSR MIGRATN CAUSE MIGRATION THR3 LDX #TX22 MISSED JSR STROUT RTS THR5 LDX #PROB8 HIT WUMPUS WITH A ROCK JSR PROBLITY TSTA BLS THR6 LDX #TX13 BONK! YOU WIN JSR STROUT JSR WON LDX #TX15 WITH A ROCK JSR STROUT RTS THR6 LDX #TX21 THUD TRY AGAIN JSR STROUT RTS **SKIP* * * STBAT LDX #PROB1 JSR PROBLITY IF PROBABLE TO TSTA SHOT BAT, DO IT BLS STB9 INC STOP LDX #TX31 SHOT BAT JSR STROUT STB9 RTS * * * STPIT LDX #PROB2 JSR PROBLITY IF PROBABLE TO TSTA DO IT BLS STP9 INC STOP LDX #TX32 LOST ARROW IN PIT JSR STROUT STP9 RTS * * * STSELF LDX #PROB3 JSR PROBLITY IF PROBABLE TO INJURE ONLY TSTA DO IT BLS STS7 LDX #TX19 SHOT LEG JSR STROUT LDAA DAYS CMPA #5 IF LESS THAN 5 DAYS LEFT BHI STS3 INC DAYS REDUCE BY HALF LSR DAYS BRA STS5 STS3 LDAA #5 ELSE REDUCE TO 5 STAA DAYS STS5 JSR DAYSLEFT REPORT DAYS LEFT RTS STS7 LDX #TX10 OTHERWISE SHOT SELF JSR STROUT JSR LOST RTS **SKIP * * MOVE LDX #CRLF JSR STROUT LDX #TX04 WHERE TO JSR STROUT JSR ROOMIN LDX #CRLF JSR STROUT TSTA BEQ MOVE LDAB CURRENT IF NOT CONNECTED JSR CONECTED TSTB BLS MOVE TRY AGAIN STAA CURRENT SET NEW CURRENT ROOM RTS * * * DISPLAY LDX #TX40 PRINT HEADING JSR STROUT LDAA #1 LOAD COUNTER LDX #ROOMS DSP1 JSR PSHX LDX #CRLF AND GO TO NEW LINE JSR STROUT JSR PULX PSHA JSR ROOMOUT PRINT ROOM JSR BLKOUT AND BLANK JSR BLKOUT CHARACTERS JSR BLKOUT JSR BLKOUT LDAA #3 STAA ROOMTLY DSP2 LDAA ,X PRINT 3 CONNECTIONS JSR ROOMOUT JSR BLKOUT WITH BLANKS AS SEPARATOR INX DEC ROOMTLY BNE DSP2 JSR BLKOUT AND BLANK JSR BLKOUT LDAA ,X JSR CHAROUT PRINT ROOM CONTENTS INX PULA INCA LOOP THROUGH CMPA #21 20 ROOMS BNE DSP1 RTS **SKIP * * HAPNINGS LDX #PROB4 POINT TO PROBABILITIES JSR PROBLITY TSTA TEST FOR BAT MIGRATION BLS HAP1 JSR MIGRATN HAP1 JSR PROBLITY TSTA TEST FOR FIND A ROCK BLS HAP3 JSR ROCKX HAP3 JSR PROBLITY TSTA TEST FOR RATS EATING FOOD BLS HAP5 JSR RATS HAP5 JSR PROBLITY TSTA TEST FOR ROCK SLIDE BLS HAP7 JSR SLIDE HAP7 JSR PROBLITY TSTA TEST FOR EXTRA SUPPLIES BLS HAP9 JSR EXTRA HAP9 RTS RETURN **SKIP * * MIGRATN JSR PSHX SAVE IX JSR RAND ANDA #$03 1 TO 4 INCA TAB LDAA DAYS SBA STAA DAYS LDX #ROOMS MIG1 LDAA 3,X FIND SOME BATS CMPA #'B BEQ MIG2 INX INX INX INX BRA MIG1 MIG2 JSR PSHX SAVE BAT LOCATION LDAA #1 STAA COUNT JSR GENITEM LOAD NEW BATS RANDOMLY JSR PULX RESTORE OLD BAT LOCATION CLR 3,X CLEAR OLD BATS LDX #TX18 REPORT BATS JSR STROUT JSR PULX RESTORE IX RTS * * * ROCKX TST SHOTS IF ARROWS LEFT BEQ ROK1 RTS RETURN ROK1 JSR PSHX SAVE IX INC ROCKS ADD ROCKS TO PILE LDX #TX23 REPORT FIND JSR STROUT LDX #TX24 JSR STROUT JSR PULX RESTORE IX RTS **SKIP * * RATS JSR PSHX SAVE IX INC DAYS ASR DAYS REDUCE DAYS BY HALF LDX #TX26 REPORT RATS JSR STROUT JSR PULX RESTORE IX RTS * * * SLIDE JSR PSHX SAVE IX SLD1 JSR RANDROOM GET A TUNNEL STAA OLDROOM LDAA 1,X BMI SLD1 IGNORE IF ALREADY CLOSED COM 1,X CLOSE HALF TUNNEL JSR PNTROOM POINT TO OTHER HALF LDAA OLDROOM CMPA ,X BEQ SLD5 FIND RIGHT TUNNEL BACK INX CMPA ,X BEQ SLD5 INX SLD5 COM ,X CLOSE OTHER HALF LDX #TX27 REPORT SLIDE JSR STROUT JSR PULX RESTORE IX RTS **SKIP * * EXTRA JSR PSHX SAVE IX JSR RAND INCREASE DAYS BY ANDA #$03 1 TO 4 INCA TAB LDAA DAYS ABA STAA DAYS LDX #TX23 REPORT FIND JSR STROUT LDX #TX25 JSR STROUT JSR PULX RESTORE IX RTS * * * EXTERNAL REFERENCES * CHARIN JMP $C006 MONITOR: INCHAR CHAROUT JMP $C003 MONITOR: OUTCHAR STROUT PSHA JSR $C009 MOINTOR: PDATA PULA RTS BLKOUT PSHA LDAA #$20 JSR CHAROUT PULA RTS EXIT JMP $C000 MONITOR: RETURN