NAM STAR TREK ***************************** * STAR TREK GAME 1.2 * BY UNKNOWN SOURCE * RECOVERED FROM OLD FLOPPIES * * ADOPTED TO RUN ON THE MC3 * BY DANIEL TUFVESSON 2014 ***************************** * * MONITOR ROUTINE ADDRESSES * OUTCH EQU $C003 INCH EQU $C006 CONTRL EQU $C000 * * STORAGE AREAS * ORG $20 STPSFL RMB 1 BASEX RMB 1 BASEY RMB 1 BASESX RMB 1 BASESY RMB 1 GLMFLG RMB 1 SECKLN RMB 1 FLAGC RMB 1 TIMDEC RMB 1 STCFLG RMB 1 SQFLG RMB 1 PNTFLG RMB 1 COURSE RMB 1 WARP RMB 1 FINCX RMB 1 FINCY RMB 1 COUNT RMB 1 TEMP RMB 2 TEMP2 RMB 2 XTEMP RMB 2 TIME0 RMB 2 GAMTIM RMB 1 TIMUSE RMB 2 SHENGY RMB 2 KLNENG RMB 2 PHSENG RMB 2 TOPFLG RMB 1 BOTFLG RMB 1 LSDFLG RMB 1 RSDFLG RMB 1 PHOTON RMB 1 CURQUX RMB 1 CURQUY RMB 1 CURSCX RMB 1 CURSCY RMB 1 TRIALX RMB 1 TRIALY RMB 1 FLAG RMB 1 CNDFLG RMB 1 SCANX RMB 1 SCANY RMB 1 COUNT1 RMB 1 SECINF RMB 1 MASK RMB 1 KLNGCT RMB 1 LENGTH RMB 1 ASAVE RMB 1 SHIELD RMB 1 ENERGY RMB 2 TSAVE1 RMB 1 HITKLS RMB 1 HITSTR RMB 1 HITBAS RMB 1 TEMP3 RMB 2 GALCNT RMB 1 DAMENG RMB 1 DAMSRS RMB 1 DAMLRS RMB 1 DAMPHS RMB 1 DAMPHT RMB 1 DAMSHL RMB 1 DAMTEL RMB 1 DAMTRB RMB 1 DAMCOM RMB 1 PCOUNT RMB 1 TORP SPREAD COUNT PTZFLG RMB 1 NO MORE TORP FLAG GAMEND RMB 1 AUTOSR RMB 1 AUTOLR RMB 1 SUPFLG RMB 1 TELFLG RMB 1 ATKENG RMB 2 QUDPTR RMB 2 POINTS TO CURR LOC IN QUDMAP PASWRD RMB 3 PHTFLG RMB 1 SHUTCR RMB 1 SHUTLX RMB 1 SHUTLY RMB 1 QUDMAP RMB 64 COMMAP RMB 64 MUST FOLLOW QUDMAP IMMEDIATELY SECMAP RMB 16 PACKED SECTOR (64*2 BITS) 00=., 01=*, 10=K, 11=B STUF RMB 4 SEED FOR RANDOM FUNCTION * * PROGRAM ENTRY * ORG $0200 JMP STRTRK * * TABLE OF MOVE VECTORS * MOVTBL FCB $00,$FF,$01,$FF,$01,$00,$01,$01 FF=-1 FCB $00,$01,$FF,$01,$FF,$00,$FF,$FF * * CHARACTER PRINT TABLE * CHRTBL FCC /.*KBN/ * * COMMAND CODE TABLE * CMDTBL FCC /ENSRLRPHPTDRSHTPSDTBCO/ * * COMMAND JUMP TABLE * JMPTBL FDB SETCRS FDB SRSCAN FDB LRSCAN FDB PHASOR FDB PHOTOR FDB DAMRPT FDB SHLDS FDB TELEPT FDB SELFDE FDB TRCTBM FDB COMPTR * PDATA JSR OUTCH INX PDATA1 LDAA 0,X CMPA #$04 BNE PDATA RTS * PCRLF LDAA #$0D JSR OUTCH LDAA #$0A JMP OUTCH * PSTRNG BSR PCRLF BRA PDATA1 * OUTHL PSHA LSRA LSRA LSRA LSRA BSR OUTHR PULA RTS * OUTHR PSHA ANDA #$0F ORAA #$30 CMPA #$39 BLS OUTDIG ADDA #7 OUTDIG JSR OUTCH PULA RTS * OUTS PSHA LDAA #$20 BRA OUTDIG * * LIB RANDOM RANDOM 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 * * PRINT TITLE * STRTRK LDX #TITLE JSR PSTRNG * * CLEAR ALL TEMP STORAGE * LDX #STPSFL SETCLR CLR 0,X INX CPX #STUF LAST VALUE OF RAM AREA BNE SETCLR LDAA #$FF LDX #COMMAP CLRMAP STAA 0,X INX CPX #COMMAP+64 BNE CLRMAP LDX #SHTLNG JSR PSTRNG JSR INCH CMPA #'S BEQ SETQD INC LENGTH SET LONG FLAG * * SETUP SPACE * SETQD LDX #QUDMAP LDAB #64 SETUP0 JSR RANDOM CMPA #$FC BLS SETUP1 LDAA #4 BRA SETUP5 SETUP1 CMPA #$F7 BLS SETUP2 LDAA #3 BRA SETUP5 SETUP2 CMPA #$E0 BLS SETUP3 LDAA #2 BRA SETUP5 SETUP3 CMPA #$A0 BLS SETUP4 LDAA #1 BRA SETUP5 SETUP4 CLRA SETUP5 CLR ASAVE TST LENGTH BEQ SETUP8 STAA ASAVE JSR RANDOM CMPA #$F0 BLS SETUP6 LDAA #3 BRA SETUP8 SETUP6 CMPA #$C0 BLS SETUP7 LDAA #2 BRA SETUP8 SETUP7 CLRA SETUP8 ADDA ASAVE STAA 0,X STORE SECT KLNGON CNT ADDA KLNGCT STAA KLNGCT STARS JSR RANDOM ANDA #$38 ORAA 0,X STAA 0,X CONT INX DECB BEQ CONT1 JMP SETUP0 * * GET STARBASE LOCATION * CONT1 JSR RANDOM ANDA #$7 TAB JSR RANDOM ANDA #$7 STAA BASEX STAB BASEY INC STPSFL LDX #QUDMAP JSR STPSEX LDAA #$40 ORAA 0,X STAA 0,X CONT2 BSR REFUEL JSR RANDOM ADDA #0 DAA STAA TIME0+1 JSR RANDOM ANDA #$7F ORAA #$23 ADDA #0 DAA STAA TIME0 BSR MAKTIM TST LENGTH BEQ GATM TAB BSR MAKTIM ABA DAA GATM STAA GAMTIM JSR RANDOM SET SHUTTLECRAFT LOCATION ANDA #$7 STAA SHUTLX JSR RANDOM ANDA #$7 STAA SHUTLY BRA CONT3 * * REFUEL THE ENTERPRISE * REFUEL CLR SHIELD LDAA #$30 STAA ENERGY CLR ENERGY+1 STAA SHENGY CLR SHENGY+1 LDAA #15 STAA PHOTON LDX #DAMENG FIX ALL DAMAGE REFUL1 CLR 0,X INX CPX #DAMENG+9 BNE REFUL1 RTS * * CALCULATE GAME TIME * MAKTIM JSR RANDOM ANDA #$0F ORAA #$31 ADDA #0 DAA RTS * * CONTINUE SETUP * CONT3 JSR RANDOM ANDA #7 STAA CURQUX JSR RANDOM ANDA #7 STAA CURQUY JSR SETUPS LDX #BASINF JSR PSTRNG LDAA BASEX BSR FIXOUT JSR OUTDSH LDAA BASEY BSR FIXOUT LDX #INTRO0 JSR PSTRNG LDX #PASWRD LDAB #3 CONT4 JSR INCH STAA 0,X INX DECB BNE CONT4 LDX #INTRO1 JSR PSTRNG BSR OUTDAT LDX #INTRO2 JSR PSTRNG BSR OUTKLN LDX #INTRO3 JSR PSTRNG CLR TEMP LDAA GAMTIM STAA TEMP+1 JSR OUTBCD LDX #INTRO4 JSR PSTRNG BSR OUTQUD LDX #INTRO6 JSR PSTRNG BSR OUTSEC JMP COMAND * * OUTPUT A NUMBER * FIXOUT ADDA #$31 JSR OUTCH RTS * * OUTPUT STARDATE * OUTDAT LDX TIME0 STX TEMP JSR OUTBCD LDAA #'. JSR OUTCH LDAA TIMDEC JSR OUTHR RTS * * OUTPUT A KLINGON COUNT * OUTKLN LDAA KLNGCT OUTK0 CLR TEMP OUTK1 CLR TEMP+1 LDAB #10 OUTK2 SBA BCS OUTK3 INC TEMP+1 CMPB TEMP+1 BNE OUTK2 INC TEMP BRA OUTK1 OUTK3 ABA LDAB TEMP+1 ASLB ASLB ASLB ASLB ABA STAA TEMP+1 JSR OUTBCD RTS * * OUTPUT QUADRANT LOCATION * OUTQUD LDAA CURQUY BSR FIXOUT BSR OUTDSH LDAA CURQUX BSR FIXOUT RTS * * OUTPUT A SECTOR * OUTSEC LDAA CURSCY BSR FIXOUT BSR OUTDSH LDAA CURSCX BSR FIXOUT RTS * * OUTPUT A DASH * OUTDSH LDAA #'- JSR OUTCH RTS * * ADD THE A-REG TO THE INDEX REGISTER * FIXXRG STX TEMP ADDA TEMP+1 STAA TEMP+1 LDX TEMP RTS * * GET COMMAND AND PERFORM IT * COMAND LDAA GAMTIM CMPA TIMUSE+1 BHI NOEXTC JMP NOMTIM NOEXTC TST KLNGCT BNE NOEXT2 JMP NOMKLN NOEXT2 TST SUPFLG BEQ NOEXT4 LDX #SUPDES JSR PSTRNG JSR SELFDA JMP ENDGAM * NOEXT4 JSR CLRCQU CLEAR K & S LDAA #2 CMPA CNDFLG DOCKED? BEQ CMND27 CLR CNDFLG TST SECKLN RED? BEQ CMNDAC DECA STAA CNDFLG CMNDAC JSR RANDOM CMPA #$FC SPACE STORM BLS COMND2 LDX #SPSTRM JSR PSTRNG LDAA #2 STAA DAMSHL JSR SHLDWN * COMND2 JSR RANDOM CMPA #$FC SUPERNOVA? BLS CMND25 JSR SUPNOV CMND25 JSR ATTACK ALLOW ATTACK TST ENERGY BPL COMND0 JMP NRGOUT * COMND0 TST SHUTCR BNE CMND01 LDAA SHUTLX CMPA CURQUX BNE CMND01 LDAA SHUTLY CMPA CURQUY BNE CMND01 LDX #SHTSIG JSR PSTRNG CMND01 LDAA #3 CMPA ENERGY BLS CMNDAD STAA CNDFLG CMNDAD TST SHENGY BPL CMND27 CLRA STAA SHIELD STAA SHENGY STAA SHENGY+1 CMND27 LDX #COMST PRINT COMMAND PROMPT JSR PSTRNG CLR STCFLG CLR PHTFLG COMND3 JSR INCH CMPA #$D BEQ ILCMND TAB JSR INCH LDX #CMDTBL CHKCM1 CMPB 0,X BNE INX2 CMPA 1,X BEQ GOTCMD INX2 INX INX CPX #CMDTBL+22 BNE CHKCM1 ILCMND LDX #EXPCMD JSR PSTRNG BRA COMND3 * GOTCMD LDAA #22 STEP FORWARD 22 BYTES TO ROUTINE ADDRESS GCMD1 INX DECA BNE GCMD1 LDX 0,X JSR 0,X TST GAMEND BEQ CMND99 JMP ENDGAM CMND99 JMP COMAND * * OUTPUT A 4 DIGIT BCD NUMBER * OUTBCD CLR FLAG LDAA TEMP BEQ OUTBC2 ANDA #$F0 BEQ OUTBC1 LDAA TEMP JSR OUTHL OUTBC1 LDAA TEMP ANDA #$0F JSR OUTHR INC FLAG OUTBC2 LDAA TEMP+1 TST FLAG BNE NOZERO ANDA #$F0 BEQ OUTBC3 NOZERO JSR OUTHL OUTBC3 LDAA TEMP+1 ANDA #$0F JSR OUTHR RTS * * LOWER THE SHIELDS * SHLDS TST SHIELD BEQ SHLDUP SHLDWN CLR SHIELD LDX #DWNST SHLD0 JSR PSTRNG SHLD1 RTS * * RAISE THE SHIELDS * SHLDUP LDAA SHENGY CMPA #1 BLS SHLD1 TST DAMSHL BNE SHLDWN INC SHIELD LDX #SHENGY LDAA #2 STAA TEMP CLR TEMP+1 JSR BCDSUB LDX #UPSTR BRA SHLD0 * * SHORT RANGE SCAN * SRSCAN TST DAMSRS BEQ SSCAN1 TST SHUTCR BNE SSCAN0 JSR RPTDAM RTS SSCAN0 LDX #SCBKUP JSR PSTRNG SSCAN1 JSR PCRLF CLR SCANY LDAA CNDFLG CMPA #2 BNE SSCAN2 JSR REFUEL SSCAN2 LDX #SECMAP STX TEMP2 JSR DOSCAN LDX #SDATE JSR PDATA1 JSR OUTDAT JSR DOSCAN LDX #CNDTNS JSR PDATA1 LDAA CNDFLG BEQ SRSCN1 CMPA #1 BEQ SRSCN0 CMPA #3 BEQ OUTCN1 LDX #DOCKED BRA OUTCND OUTCN1 LDX #YELLOW OUTCND JSR PDATA1 BRA SRSCN2 * SRSCN0 LDX #RED BRA OUTCND * SRSCN1 LDX #GREEN BRA OUTCND * SRSCN2 BSR DOSCAN LDX #QUADP JSR PDATA1 JSR OUTQUD BSR DOSCAN LDX #SECP JSR PDATA1 JSR OUTSEC BSR DOSCAN LDX #ENGSTR JSR PDATA1 LDX ENERGY STX TEMP JSR OUTBCD BSR DOSCAN LDX #KLSTR JSR PDATA1 JSR OUTKLN BSR DOSCAN LDX #SHSTR JSR PDATA1 LDX SHENGY STX TEMP JSR OUTBCD TST SHIELD BEQ SRSCN4 LDX #UPSCAS BRA SRSCN5 * SRSCN4 LDX #DNSCAS SRSCN5 JSR PDATA1 BSR DOSCAN LDX #TRPSTR JSR PDATA1 CLR TEMP LDAA PHOTON ADDA #0 DAA STAA TEMP+1 JSR OUTBCD LDX QUDPTR UPDATE COMPUTER MAP LDAA 0,X JSR UPDCMP RTS * * OUTPUT 1 SHORT RANGE SCAN LINE * DOSCAN JSR PCRLF LDAA #2 STAA COUNT CLR SCANX DOSCN LDAA #4 STAA COUNT1 LDX TEMP2 LDAA 0,X DOSCN0 STAA ASAVE LDAA CURSCY CMPA SCANY IS IT Y-LOC OF ENTERPRISE? BNE CHK0 LDAA CURSCX CMPA SCANX BNE CHK0 LDAA #'E JSR OUTCH BRA GOAHD CHK0 LDAA ASAVE DOSCN1 LDX #CHRTBL ANDA #3 JSR FIXXRG LDAA 0,X JSR OUTCH GOAHD JSR OUTS LDX TEMP2 INC SCANX DEC COUNT1 BEQ DOSCN2 LDAA ASAVE LSRA LSRA BRA DOSCN0 DOSCN2 INX STX TEMP2 LDAA 0,X DEC COUNT BNE DOSCN INC SCANY RTS * * SETUP SECTOR MAP * SETUPS CLR SECKLN LDX #SECMAP LDAB #16 CLRA SETPS1 STAA 0,X INX DECB BNE SETPS1 LDX #QUDMAP LDAA CURQUX LDAB CURQUY STPSEX STAA ASAVE TSTB BEQ SETPS4 SETPS2 LDAA #8 SETPS3 INX DECA BNE SETPS3 DECB BNE SETPS2 SETPS4 LDAA ASAVE BEQ SETPS6 SETPS5 INX DECA BNE SETPS5 SETPS6 TST STPSFL BEQ STPSNX CLR STPSFL RTS * STPSNX STX QUDPTR LDAB 0,X STAB SECINF BEQ SETP10 ANDB #7 BEQ SETPS7 STAB COUNT STAB SECKLN LDAA #2 STAA MASK BSR PUTINM SETPS7 LDAB SECINF ANDB #$38 BEQ SETPS8 LSRB LSRB LSRB STAB COUNT LDAA #1 STAA MASK BSR PUTINM SETPS8 LDAB SECINF BITB #$40 BEQ SETPS9 LDAA #1 STAA COUNT LDAA #3 STAA MASK BSR PUTINM SETPS9 LDAB SECINF BPL SETP10 INC SUPFLG SETP10 JSR RANDOM ANDA #7 STAA TRIALX JSR RANDOM ANDA #7 STAA TRIALY JSR CHKPOS TST FLAG BNE SETP10 LDAA TRIALX STAA CURSCX LDAA TRIALY STAA CURSCY * * COMPUTE LOCAL KLINGON ENERGY * CSCKEN LDAB SECKLN ASLB LDX #KLNENG CSCEXT CLR 0,X CLR 1,X CSCKN1 JSR RANDOM ADDA #0 DAA CLR TEMP STAA TEMP+1 JSR BCDADD DECB BNE CSCKN1 RTS * * PUT OBJECTS IN SECTOR MAP * PUTINM LDX #SECMAP JSR RANDOM ANDA #$F STAA TSAVE1 JSR FIXXRG LDAB 0,X JSR RANDOM ANDA #3 STAA ASAVE BEQ PUTIN2 PUTIN1 RORB RORB DECA BNE PUTIN1 PUTIN2 BITB #3 BNE PUTINM ORAB MASK LDAA ASAVE BEQ PUTIN4 PUTIN3 ROLB ROLB DECA BNE PUTIN3 PUTIN4 STAB 0,X DEC COUNT BNE PUTINM LDAA MASK CMPA #3 BNE PUTIN6 LDAB TSAVE1 CLC RORB LDAA ASAVE BCC PUTIN5 ADDA #4 PUTIN5 STAA BASESX STAB BASESY PUTIN6 RTS * * CHECK FOR EMPTY POSITIONS * CHKPOS CLR FLAG STX XTEMP LDX #SECMAP LDAA TRIALY BEQ CHKPO2 CHKPO1 INX INX DECA BNE CHKPO1 CHKPO2 LDAA TRIALX CMPA #3 BLS CHKPO3 INX SUBA #4 CHKPO3 LDAB 0,X STAA ASAVE BEQ CHKPO5 CHKPO4 LSRB LSRB DECA BNE CHKPO4 CHKPO5 ANDB #3 BEQ CHKPO6 STAB FLAG TST STCFLG BEQ CHKPO6 TST PHTFLG BNE CHKPO7 CMPB #2 BEQ CHKPO7 CHKPO6 LDX XTEMP RTS * CHKPO7 LDAB #$FC LDAA ASAVE BEQ CHKPO9 SEC CHKPO8 ROLB ROLB DECA BNE CHKPO8 CHKPO9 ANDB 0,X STAB 0,X BRA CHKPO6 * * FIRE PHOTON TORPEDO * PHOTOR TST DAMPHT BEQ PTRNDM PTRND9 JSR RPTDAM RTS PTRNDM TST PHOTON ANY LEFT BNE PHOTRO PTEMPT LDX #PTEMST JSR PSTRNG INC PTZFLG RTS * PHOTRO INC PHTFLG JSR RANDOM ANDA #$F ORAA #4 STAA WARP DEC PHOTON * * WARP ENGINES AND PHOTON TORP COURSE * SETCRS CLR SQFLG CLR GLMFLG LDX #CRSSTR JSR PSTRNG JSR INCHCK CMPA #7 BHI ABC29 JSR OUTS JSR OUTS STAA COURSE TST PHTFLG BNE PHTOR1 LDX #WRPSTR JSR PSTRNG JSR INCHCK STAA WARP TST PNTFLG BNE STCRS2 STAA SQFLG TST DAMENG BNE PTRND9 * STCRS2 JSR INCH CMPA #$0D BNE STCRS2 LDAA COURSE PHTOR1 LDX #MOVTBL ASLA JSR FIXXRG LDAA WARP BNE ABC30 ABC29 RTS * ABC30 STAA COUNT TST SQFLG BEQ STCRS3 LDAA #$0F STAA COUNT STCRS3 LDAA CURSCX LDAB CURSCY PHTOR2 ADDA 0,X ADDB 1,X JSR TSTBND TST FINCX BEQ ABC1 JMP STCRS5 * ABC1 TST FINCY BEQ ABC5 JMP STCRS5 * ABC5 STAA TRIALX SAVE TRIAL POSITION STAB TRIALY TST PHTFLG BEQ ABC4 JSR OUTS BSR OBATSO ABC4 INC STCFLG JSR CHKPOS CHK IF BLKD LDAA FLAG BEQ STCRS4 TST PHTFLG BEQ ABC2 JMP PHTOR3 * ABC2 CMPA #2 BNE ABC3 JMP KLGRAM * ABC3 LDX #BLOKST JSR PSTRNG OBATSO LDAA TRIALY JSR FIXOUT JSR OUTDSH LDAA TRIALX JSR FIXOUT TST PHTFLG BEQ STCRET RTS * STCRET JMP STCRS6 * STCRS4 TST PHTFLG BEQ STCRSB JUMP IF NOT LDAA TRIALX LDAB TRIALY DEC COUNT BNE PHTOR2 PHTOR4 LDX #PNOENG JSR PSTRNG JMP STCRS6 * STCRSB LDAA TRIALX STAA CURSCX LDAA TRIALY STAA CURSCY JSR RANDOM CMPA #$80 BLS STCRSC LDAA #1 JSR FIXTIM LDAA #3 JSR FIXENG STCRSC DEC COUNT DEC MOVE CNTR BEQ STCRSD JMP STCRS3 * STCRSD TST SQFLG BNE STCRS5 QUADRANT MOVE! JMP STCRS6 * STCRS5 TST PHTFLG BEQ ABC6 JMP PHTOR4 ABC6 LDAA WARP STAA COUNT ABC7 LDAA CURQUX LDAB CURQUY TST SQFLG BEQ STCRS7 ADDA 0,X ADDB 1,X STAA TRIALX STAB TRIALY JSR TSTBND TST FINCX BEQ ABCD0 JMP GALBND * ABCD0 TST FINCY BEQ ABCD1 JMP GALBND * ABCD1 LDAA TRIALX STAA CURQUX LDAA TRIALY STAA CURQUY INC GLMFLG LDAA #6 JSR FIXTIM LDAA #$30 JSR FIXENG DEC COUNT BNE ABC7 STCRSA JSR SETUPS STCRS6 CLR CNDFLG LDAA BASEX CMPA CURQUX BNE SEXIT1 LDAB BASEY CMPB CURQUY BNE SEXIT1 LDAA BASESX LDAB BASESY DOCKED? INCA SUBA CURSCX CMPA #2 BHI SEXIT1 SEXIT0 INCB SUBB CURSCY CMPB #2 BHI SEXIT1 SDOCK LDAA #2 STAA CNDFLG SEXIT1 TST AUTOSR BEQ SEXIT2 JSR SRSCAN SEXIT2 TST AUTOLR BEQ SEXIT3 JSR LRSCAN SEXIT3 RTS * STCRS7 ADDA FINCX ADDB FINCY CMPA #7 BHI GALBND CMPB #7 BHI GALBND STAA CURQUX STAB CURQUY LDAA #7 JSR FIXTIM BRA STCRSA * * RAMMED A KLINGON ROUTINE * KLGRAM LDX #KRMSTR JSR PSTRNG LDAA #1 STAA COUNT CLR SQFLG INC HITKLS DEC KLNGCT DEC KLINGON COUNT DEC SECKLN INC PHTFLG JSR OBATSO LDX #HEVDAM JSR PSTRNG LDAB #$6A JSR MANDAM LDX #STILFT JSR PSTRNG JSR OUTKLN JMP STCRSB * * PRINT GALAXY LIMIT MESSAGE * GALBND LDX #GLBNDS JSR PSTRNG LDAA GALCNT INCA CMPA #3 BNE GALBN2 LDX #GALDUM JSR PSTRNG INC GAMEND RTS * GALBN2 STAA GALCNT TST GLMFLG BNE ABC20 JMP STCRS6 * ABC20 JMP STCRSA * * TORPEDO HAS HIT SOMETHING * PHTOR3 LDX #PHITST JSR PSTRNG LDAA FLAG CMPA #2 KLINGON? BNE ABC8 DEC SECKLN DEC KLNGCT INC HITKLS LDX #KLGSTR JSR PDATA1 LDX #STILFT JSR PSTRNG JSR OUTKLN BRA ABC10 * ABC8 CMPA #1 STAR? BNE ABC11 INC HITSTR LDX #STARST ABC9 JSR PDATA1 ABC10 RTS * ABC11 LDX #BASEST HIT BASE! INC HITBAS BRA ABC9 * * SEE IF GALAXY EDGE REACHED * TSTBND CLR FINCX CLR FINCY TSTA BPL TSTBN1 DEC FINCX BRA TSTBN2 * TSTBN1 CMPA #7 BLS TSTBN2 INC FINCX TSTBN2 TSTB BPL TSTBN3 DEC FINCY RTS * TSTBN3 CMPB #7 BLS TSTBN4 INC FINCY TSTBN4 RTS * * INPUT CHARACTER AND CHECK * INCHCK CLRA INCHK0 STAA PNTFLG JSR INCH CMPA #'. BEQ INCHK0 CMPA #'9 BHI INCHK1 CMPA #'0-1 BLS INCHK1 SUBA #$30 RTS * INCHK1 LDX #ERR JSR PDATA1 BRA INCHCK * * ADD TO GAME TIME * FIXTIM ADDA TIMDEC CMPA #9 BLS FIXTM1 SUBA #10 STAA TIMDEC CLR TEMP LDAA #1 STAA TEMP+1 STX XTEMP LDX #TIME0 JSR BCDADD LDX #TIMUSE JSR BCDADD JSR FIXDAM LDX XTEMP RTS * FIXTM1 STAA TIMDEC RTS * *SUBTRACT FROM ENERGY AMOUNT * FIXENG STX XTEMP LDX #ENERGY CLR TEMP STAA TEMP+1 JSR BCDSUB LDX XTEMP RTS * * BCD ADDITION * BCDADD CLC BRA BCDFIX * * BCD SUBTRACTION * BCDSUB LDAA #$99 SUBA TEMP STAA TEMP LDAA #$99 SUBA TEMP+1 STAA TEMP+1 SEC * BCDFIX LDAA 1,X ADCA TEMP+1 DAA STAA 1,X LDAA 0,X ADCA TEMP DAA STAA 0,X RTS * * LONG RANGE SCAN * LRSCAN TST DAMLRS BEQ LRSNDM JSR RPTDAM RTS * LRSNDM CLR TOPFLG CLR BOTFLG CLR LSDFLG CLR RSDFLG LDX #LRSCST JSR PSTRNG JSR OUTQUD JSR PCRLF LDAA CURQUX BNE LRSCNT INC LSDFLG LRSCNT CMPA #7 BNE LRSCN2 INC RSDFLG LRSCN2 LDAA CURQUY BNE LRSCN3 INC TOPFLG LRSCN3 CMPA #7 BNE LRSCN4 INC BOTFLG LRSCN4 LDX QUDPTR LRSCNC LDAA #$F7 JSR FIXXRG TST TOPFLG BEQ LRSCN7 BSR OUTTH0 BRA LRSCN8 * LRSCN7 BSR OUTLIN LRSCN8 LDAA #5 JSR FIXXRG BSR OUTLIN LDAA #5 JSR FIXXRG TST BOTFLG BEQ LRSCN9 BSR OUTTH0 BRA LRSC10 * LRSCN9 BSR OUTLIN LRSC10 RTS * * OUTPUT 1 LINE OF LONG RANGE SCAN * OUTLIN LDAA 0,X TST LSDFLG BEQ OUTLN1 CLRA BRA OUTLN2 OUTLN1 BSR UPDCMP OUTLN2 BSR OUTQIN LDAA 0,X BSR UPDCMP BSR OUTQIN LDAA 0,X TST RSDFLG BEQ OUTLN3 CLRA BRA OUTLN4 OUTLN3 BSR UPDCMP OUTLN4 BSR OUTQIN JSR PCRLF RTS * * UPDATE COMPUTER HISTORY MAP * UPDCMP STAA 64,X RTS * * OUTPUT QUADRANT INFORMATION * OUTQIN TAB ANDA #$80 CLC ROLA ROLA JSR OUTHR TBA ANDA #$40 LSRA LSRA JSR OUTHL TBA ANDA #$38 STARS ASLA JSR OUTHL TBA ANDA #$07 KLINGONS JSR OUTHR INX JSR OUTS RTS * * OUTPUT A LINE OF ZEROS * OUTTH0 LDAA #3 STAA COUNT OUTTH1 CLRA BSR OUTQIN DEC COUNT BNE OUTTH1 JSR PCRLF RTS * * FIRE PHASORS * PHASOR TST DAMPHS BEQ PHSNDM JSR RPTDAM RTS * PHSNDM TST SHIELD BEQ PHASR1 LDX #MLSHLD BRA TOOMC1 * PHASR1 LDX #ENAVLB REPORT ENERGY JSR PSTRNG LDX ENERGY STX TEMP JSR OUTBCD LDX #FIRENG JSR PSTRNG JSR INBCD LDAA PHSENG CMPA ENERGY BHI TOOMCH BNE PHASR2 LDAA PHSENG+1 CMPA ENERGY+1 BLS PHASR2 TOOMCH LDX #TOMUCH TOOMC1 JSR PSTRNG RTS * PHASR2 JSR RANDOM CMPA #$F4 BLS PHASR3 LDX #PHAMIS JSR PSTRNG BRA PHASR6 * PHASR3 LDAA PHSENG CMPA KLNENG BHI PHASR4 BNE PHASR5 LDAA PHSENG+1 CMPA KLNENG+1 BLS PHASR5 PHASR4 CLR KLNENG CLR KLNENG+1 LDX #ALKILL JSR PSTRNG LDX #STILFT JSR PSTRNG LDAB SECKLN STAB HITKLS LDAA KLNGCT SBA STAA KLNGCT JSR OUTKLN CLR SECKLN KILALK LDX #SECMAP LDAA #16 STAA COUNT KILAL1 LDAB #4 LDAA 0,X KILAL2 RORA BCS KILAL4 RORA BCC KILAL3 CLC KILAL3 DECB BNE KILAL2 RORA STAA 0,X INX DEC COUNT BNE KILAL1 BRA PHASR6 * KILAL4 RORA BRA KILAL3 * PHASR5 LDX #PHSENG STX TEMP LDX #KLNENG JSR BCDSUB LDX #KHTADM JSR PSTRNG PHASR6 LDX PHSENG STX TEMP LDX #ENERGY JSR BCDSUB RTS * * INPUT A BCD NUMBER * INBCD CLR PHSENG CLR PHSENG+1 INBCD1 JSR INCH CMPA #'0 BLO EXIT BSR CHECK TST FLAGC BNE INEROR LDAB #4 INBCD2 ASL PHSENG+1 ROL PHSENG DECB BNE INBCD2 ADDA PHSENG+1 STAA PHSENG+1 BRA INBCD1 * INEROR LDX #ERR JSR PDATA1 BRA INBCD1 * EXIT RTS * CHECK CLR FLAGC CMPA #'9 BHI SETFLG ANDA #$0F RTS * SETFLG INC FLAGC RTS * * SELF DESTRUCT ROUTINE * SELFDE LDX #ABORT1 JSR PSTRNG LDX #PASWRD LDAB #3 SELFD1 JSR INCH CMPA 0,X BNE SELFD2 INX DECB BNE SELFD1 SELFDA LDX #DISINT JSR PSTRNG INC GAMEND RTS * SELFD2 LDX #ABORT2 JSR PSTRNG RTS * * TELEPORT ROUTINE * TELEPT LDAA #$12 CMPA TIMUSE+1 BHI TELEP2 TST TELFLG BNE TELEP4 JSR RANDOM CMPA #$B0 POSS DAMAGED BLS TELEP1 INC TELFLG TELEP1 JSR RANDOM MALFUNCTION? CMPA #$80 BHI TELEP5 LDAA BASEX STAA CURQUX LDAA BASEY STAA CURQUY TELEPA JMP STCRSA * TELEP2 LDX #CANTUS TELEP3 JSR PSTRNG RTS * TELEP4 LDX #DMGDST BRA TELEP3 * TELEP5 JSR RANDOM ANDA #7 STAA CURQUX JSR RANDOM ANDA #7 STAA CURQUY LDX #SOMWHR JSR PSTRNG BRA TELEPA * * KLINGON ATTACK ROUTINE * ATTACK TST SECKLN ANY Ks? BNE ATTAC1 RTS * ATTAC1 JSR RANDOM MAY NOT ATTACK CMPA #$B0 BHI ATTAC2 LDX #ATKENG LDAB SECKLN ASLB JSR CSCEXT LDX ATKENG STX TEMP TST SHIELD BNE ATTAC3 LDX #ENERGY JSR BCDSUB JSR PCRLF LDX ATKENG STX TEMP JSR OUTBCD LDX #KATKDN JSR PDATA1 LDAB #$FA JSR MANDAM ATTAC2 RTS * ATTAC3 LDX #SHENGY JSR BCDSUB LDX #KATKUP JSR PSTRNG RTS * * END OF GAME CLEANUP ROUTINE * NRGOUT LDX #NMENGS NRGOU1 JSR PSTRNG BRA ENDGAM * NOMTIM LDX #NMTMST BRA NRGOU1 * NOMKLN LDX #NMKLST JSR PSTRNG BRA ENDGM2 * ENDGAM LDX #FAILST JSR PSTRNG BRA ENDGM3 * ENDGM2 LDX #SUCCST JSR PSTRNG ENDGM3 LDX #PLAYAG JSR PSTRNG JSR INCH CMPA #'Y BEQ ENDGM4 JMP CONTRL * ENDGM4 JMP STRTRK * * CLEAR OUT CURRENT QUADRANT * CLRCQU LDX QUDPTR LDAA 0,X SUBA HITKLS CLEAR Ks LDAB HITSTR CLEAR Ss ASLB ASLB ASLB SBA TST HITBAS CLEAR B? BEQ CLRCQ2 ANDA #$BF LDAB #$A STAB BASEX STAB BASEY CLR CNDFLG CLRCQ2 STAA 0,X CLRA STAA HITKLS STAA HITSTR STAA HITBAS RTS * * FIX DAMAGE ROUTINE * FIXDAM LDX #DAMENG FIXDM1 TST 0,X BEQ FIXDM2 DEC 0,X FIXDM2 INX CPX #DAMENG+9 BNE FIXDM1 RTS * * SUPERNOVA GENERATOR * SUPNOV JSR RANDOM ANDA #7 TAB JSR RANDOM ANDA #7 STAB TSAVE1 LDX #QUDMAP INC STPSFL JSR STPSEX LDAB 0,X ANDB #7 CLEAR Ks LDAA KLNGCT SBA STAA KLNGCT LDAA #$80 STAA 0,X LDX #SUPSTR JSR PSTRNG LDAA TSAVE1 JSR FIXOUT JSR OUTDSH LDAA ASAVE JSR FIXOUT RTS * * GENERATE MAIN DAMAGE * MANDAM LDX #DAMENG MANDM1 JSR RANDOM CBA BLS MANDM2 JSR RANDOM ANDA #3 SEC ADCA 0,X STAA 0,X MANDM2 INX CPX #DAMENG+9 BNE MANDM1 TST DAMSHL BEQ MANDM3 CLR SHIELD MANDM3 TST DAMCOM BEQ MANDM4 CLR AUTOSR CLR AUTOLR MANDM4 RTS * * REPORT DAMAGE HAS OCCURED * RPTDAM LDX #DMGDST JSR PSTRNG RPTDM8 RTS * * GENERATE A DAMAGE REPORT * DAMRPT LDX #DMRPST JSR PSTRNG LDX #DEVSTR STX TEMP2 LDX #DAMENG DMRPT2 TST 0,X BNE DMRPT3 BMPX4 STX TEMP3 LDX TEMP2 INX INX INX INX INX INX INX INX INX INX INX STX TEMP2 LDX TEMP3 BRA DMRPT4 * DMRPT3 STX TEMP3 LDX TEMP2 JSR PSTRNG INX STX TEMP2 LDX TEMP3 LDAB #3 OUTS4 JSR OUTS DECB BNE OUTS4 LDAA 0,X JSR OUTK0 DMRPT4 INX CPX #DAMENG+9 BNE DMRPT2 BRA RPTDM8 * * COMPUTER CODE * COMPTR TST DAMCOM BEQ CMPTR1 JSR RPTDAM RTS * CMPTR1 LDX #CPRMPT JSR PSTRNG JSR INCH CMPA #'T BEQ TSPRED CMPA #'M BEQ CMPMAP CMPA #'S BNE CMPTR1 LDX #SRMODE JSR PSTRNG CLR AUTOSR JSR INCH CMPA #'Y BNE AUTO2 INC AUTOSR AUTO2 LDX #LRMODE JSR PSTRNG CLR AUTOLR JSR INCH CMPA #'Y BNE AUTOEX INC AUTOLR AUTOEX RTS * CMPMAP LDX #CMPHST JSR PSTRNG LDX #COMMAP CMPMP1 JSR PCRLF LDAA #8 STAA COUNT CMPMP2 LDAA 0,X CMPA #$FF BNE CMPMP3 STX TEMP3 LDX #NOSCAN JSR PDATA1 LDX TEMP3 INX BRA CMPMP4 * CMPMP3 JSR OUTQIN CMPMP4 DEC COUNT BNE CMPMP2 CPX #COMMAP+64 BNE CMPMP1 RTS * TSPRED TST DAMPHT BEQ TS2 JSR RPTDAM RTS * TS2 CLR PTZFLG LDX #HWMANY JSR PSTRNG JSR INCH CMPA #'0 BLO TS2 BEQ TSEX CMPA #'9 BGT TS2 ANDA #$0F STAA PCOUNT TS3 JSR PTRNDM DEC PCOUNT BEQ TSEX TST PTZFLG BEQ TS3 TSEX RTS * * TRACTOR BEAM ROUTINE * TRCTBM TST SHUTCR BNE NPCKUP LDAA SHUTLX CMPA CURQUX BNE NPCKUP LDAA SHUTLY CMPA CURQUY BNE NPCKUP LDX #SCONBD INC SHUTCR BRA TRCTEX * NPCKUP LDX #NOPICK TRCTEX JSR PSTRNG RTS * * TEXT STRINGS * TITLE FCB $A FCC /- - - - S T A R T R E K - - - - VERSION 1.2/ FCB 4 SHTLNG FCC /SHORT OR LONG GAME? (S-L): / FCB 4 UPSCAS FCC / UP/ FCB 4 BASINF FCC /STARBASE IN QUADRANT: / FCB 4 DOCKED FCC /DOCKED/ FCB 4 DNSCAS FCC / DOWN/ FCB 4 PTEMST FCC /ALL TORPEDOS FIRED!/ FCB 4 INTRO1 FCB $A FCC /IT IS STARDATE / FCB 4 INTRO2 FCC /THE KLINGONS NUMBER / FCB 4 INTRO3 FCC /YOUR TIME LIMIT (IN STARDATES) = / FCB 4 INTRO4 FCC /YOU ARE IN QUADRANT / FCB 4 INTRO6 FCC /AND SECTOR / FCB 4 COMST FCB $A FCC /COMMAND? / FCB 4 DWNST FCC /THE SHIELDS ARE DOWN, SIR/ FCB 4 UPSTR FCC /THE SHIELDS ARE UP, SIR/ FCB 4 CRSSTR FCC /WHAT COURSE, SIR? (0-7): / FCB 4 WRPSTR FCC /WHAT WARP FACTOR, SIR: / FCB 4 BLOKST FCC /THE ENTERPRISE IS BLOCKED AT SECTOR / FCB 4 KRMSTR FCC /WE'VE RAMMED A KLINGON AT SECTOR / FCB 4 GLBNDS FCC /YOU'VE REACHED THE EDGE OF THE GALAXY AND UNKNOWN/ FCB $D,$A FCC /FORCES HAVE STOPPED THE ENTERPRISE!/ FCB 4 PHITST FCC /YOUR TORPEDO HAS HIT A / FCB 4 PNOENG FCC /THE TORPEDO HAS RUN OUT OF ENERGY/ FCB 4 SDATE FCC / STARDATE: / FCB 4 CNDTNS FCC / CONDITION: / FCB 4 YELLOW FCC /YELLOW!/ FCB 4 RED FCC /RED!!!/ FCB 4 GREEN FCC /GREEN/ FCB 4 QUADP FCC / QUADRANT: / FCB 4 SECP FCC / SECTOR: / FCB 4 ENGSTR FCC / ENERGY: / FCB 4 KLSTR FCC / KLINGONS: / FCB 4 SHSTR FCC / SHIELDS: / FCB 4 TRPSTR FCC / TORPEDOS: / FCB 4 LRSCST FCC /SCAN FOR QUADRANT / FCB 4 MLSHLD FCC /YOU MUST FIRST LOWER SHIELDS!/ FCB 4 ENAVLB FCC /THE AVAILABLE ENERGY IS: / FCB 4 FIRENG FCC /HOW MUCH ENERGY SHALL I USE: / FCB 4 TOMUCH FCC /YOU DON'T HAVE ENOUGH ENERGY!/ FCB 4 PHAMIS FCC /PHASORS HAVE MISFIRED!/ FCB 4 ALKILL FCC /ALL KLINGONS IN THIS SECTOR HAVE BEEN DESTROYED!/ FCB 4 KHTADM FCC /THE ENEMY HAS BEEN DAMAGED/ FCB 4 ERR FCC / INVALID ENTRY! / FCB 4 STARST FCC /STAR, BILLIONS HAVE DIED/ FCB 4 BASEST FCC /BASE, YOUR ONLY SOURCE OF SUPPLY IS NOW GONE!/ FCB 4 KLGSTR FCC /KLINGON, CONGRATULATIONS/ FCB 4 INTRO0 FCC /ENTER YOUR 3 LETTER ABORT PASSWORD: / FCB 4 STILFT FCC /THE REMAINING KLINGONS NUMBER / FCB 4 KATKDN FCC / UNIT HIT ON THE ENTERPRISE/ FCB 4 KATKUP FCC /KLINGONS HAVE ATTACKED, BUT THE SHIELDS ARE HOLDING!/ FCB 4 DISINT FCC /ENTERPRISE HAS BEEN DESTROYED - ALL HANDS LOST!/ FCB 4 ABORT1 FCC /ABORT SEQUENCE STARTED - WHAT WAS YOUR PASSWORD? / FCB 4 ABORT2 FCC /ABORT SEQUENCE ABANDONED - PASSWORD ERROR/ FCB 4 CANTUS FCC /THE TELEPORTER REPAIRS ARE NOT YET FINISHED, SORRY/ FCB 4 SOMWHR FCC /TELEPORTER MALFUNCTION - BASE NOT REACHED/ FCB 4 SPSTRM FCB 7 FCC /WE'VE HIT A SPACE STORM - SHIELDS DAMAGED!/ FCB 4 GALDUM FCC /THE 3RD ATTEMPT TO LEAVE THE GALAXY HAS CAUSED AN/ FCB $D,$A FCC /AUTOMATIC SELF-DESTRUCT SEQUENCE. IT CANNOT BE STOPPED!!!/ FCB 4 NMENGS FCB 7 FCC /THE ENTERPRISE IS OUT OF ENERGY. IT CAN NO LONGER EXIST./ FCB 4 NMTMST FCB 7 FCC /YOU HAVE RUN OUT OF STARDATES FOR THIS MISSION./ FCB 4 NMKLST FCB $A,7 FCC /CONGRATULATIONS!/ FCB $A,$D,0,0,0,0 FCC /YOU HAVE DESTROYED ALL THE KLINGONS./ FCB 4 FAILST FCC /YOUR MISSION WAS A FAILURE, THE FEDERATION MUST SURRENDER./ FCB 4 SUCCST FCC /THE FEDERATION HAS BEEN SAVED BY YOUR GALLANT ACTIONS./ FCB $D,$A FCC /YOU ARE AWARDED THE STARFLEET MEDAL OF HONOR./ FCB 4 SUPDES FCC /MESSAGE FROM STARFLEET COMMAND:/ FCB $D,$A FCC / THE ENTERPRISE HAS JUST BEEN DESTROYED BY A/ FCB $D,$A FCC / SUPERNOVA IN IT'S CURRENT QUADRANT - ALL HANDS LOST./ FCB 4 SUPSTR FCB 7 FCC /SENSORS REPORT A SUPER NOVA IN QUADRANT / FCB 4 HEVDAM FCC /BADLY DAMAGED/ FCB 4 DMGDST FCC /DEVICE IS DAMAGED AND UNUSABLE. REPAIRS HAVE BEEN STARTED/ FCB 4 DMRPST FCB $A FCC /DEVICE STATUS/ FCB 4 DEVSTR FCC /ENGINES / FCB 4 FCC /SHORT SCAN/ FCB 4 FCC /LONG SCAN / FCB 4 FCC /PHASORS / FCB 4 FCC /TORPEDOS / FCB 4 FCC /SHIELDS / FCB 4 FCC /TELEPORTER/ FCB 4 FCC /TRACTOR BM/ FCB 4 FCC /COMPUTER / FCB 4 PLAYAG FCC /WOULD YOU LIKE TO PLAY AGAIN? (Y-N): / FCB 4 SCONBD FCC /THE SHUTTLE CRAFT IS REPORTED ON BOARD, SIR/ FCB 4 NOPICK FCC /THE SENSORS SHOW NOTHING TO BE PICKED UP, SIR/ FCB 4 EXPCMD FCC /THE COMMANDS ARE AS FOLLOWS:/ FCB $D,$A,$A FCC /CMND ACTION/ FCB $D,$A FCC / EN ACTIVATE WARP ENGINGS/ FCB $D,$A FCC / SR SHORT RANGE SCAN/ FCB $D,$A FCC / LR LONG RANGE SCAN/ FCB $D,$A FCC / PH FIRE PHASOR BEAMS/ FCB $D,$A FCC / PT FIRE PHOTON TORPEDOS/ FCB $D,$A FCC / DR DAMAGE REPORT/ FCB $D,$A FCC / SH SHIELDS UP OR DOWN/ FCB $D,$A FCC / TP TELEPORT TO BASE QUADRANT/ FCB $D,$A FCC / SD SELF DESTRUCT SEQUENCE/ FCB $D,$A FCC / TB ACTIVATE TRACTOR BEAMS/ FCB $D,$A FCC / CO BATTLE COMPUTER/ FCB $D,$A FCB 4 SHTSIG FCC /SENSORS REPORT SHUTTLE CRAFT GALILLEO IN THIS QUADRANT, SIR/ FCB 4 SCBKUP FCC /SHUTTLE CRAFT SENSORS PROVIDING BACKUP SCAN, SIR/ FCB 4 CPRMPT FCC /COMPUTER IS CAPABLE OF 3 FUNCTIONS:/ FCB $D,$A FCC / T = TORPEDO SPREAD/ FCB $D,$A FCC / M = PRINT SCAN HISTORY MAP/ FCB $D,$A FCC / S = SET AUTO SCAN/ FCB $D,$A,$A FCC /ENTER COMPUTER COMMAND: / FCB 4 CMPHST FCC /STATUS OF QUADRANTS WHEN LAST SCANNED (**** = NO SCAN YET)/ FCB $D,$A,4 NOSCAN FCC /**** / FCB 4 HWMANY FCC /ENTER NUMBER OF TORPEDOS IN SPREAD (0-9): / FCB 4 SRMODE FCC /AUTO SCAN ON FOR SHORT RANGE SENSORS? (Y-N): / FCB 4 LRMODE FCC /AUTO SCAN ON FOR LONG RANGE SENSORS? (Y-N): / FCB 4 * END