PC99  DSK (DATA ';P'` John Phillips. 1984TABLES P#STARGAZER1 ,boots STARGAZER 1 from EA3  GPLLNK  P COMUTL PSource code for STAR GAZER 1 by STARSO 9PLSAVE  P$ SUBS2 ?YP?STARSROM PjQMAIN :P:&INITS $P$0SUBS1 BPBpNUMS  $P `INPUT PBOGBRABM BMUBSTB BBE BEXBECBUTBABBLEB. B B B B B B B B B B B F B B B B B B 3B. BPRBOGBRABMSB WBHIBCHB ABREB BBIGBGEBR B B B BTHF BANB 8BK BWIBLLB CBREBATBE BNEBW B B B B BFIBLEB NBAMBESB BBY BADBDIF SAVE 9(B(CB) BCOBPYBRIBGHBT B19B81B BBY BTEBXABS BINBSTBRUBMEBNTF BS,B IBNCB.9(.B B B B B B B B B B B B B B B B B BSABVEF B MBEMBORBY BIMBAGBE B B B B B B B B B B B B B B B B B F BNGB AB OBNEB B B BTOB TBHEB LBASBT BBYBTEB OBF BTHBE B B B B BCUF BRRBENBT BFIBLEB NBAMBE.B B B B B B B B B B B B B B B B F B B B B B B CBURBREBNTB FBILBE B: B B B B B B B B B B B F B B B B B B 1B. BPRBOGBRABM BTOB BBE BSABVEBD BMUBSTB B B B BALF BREBADBY BBEB LBOABDEBD.B B B B B B B B B B B B B B B B F B B B B B B 2B. BTHBE BFIBRSBT BWOBRDB IBN BTHBE B B B B B BPRF BBVBBBBTBBBBmBBBBJBBB B,BBB BB|B F BB=BB. B`B+BBB B+BaB`B,BBB|BBBBBBpBBF B BB BABBB!B0BB+}BB[4-nDSRLNK4-GPLLNK4.GPLWS 4GRMRA F B+2BB B BBB+2BB+RBB3B(nBBBHBB+2B`BBBBBBF BB+1BBBB+BBBBBaB[BBBBBBB‚B"BBB+BF BBB+BB B B,zBBBBB+1B B,BBB(.BBB B-BBBF B B IB/OB EBRRBORB B B B B B B B B B B B BBADB FBILBE BNABMEF B B B B B B B B B BBBBB BBBBBBB9+BBF BBB||BBBB(.BBB BBBBB+BBB B+B B+B+BBF B B B B B B B B B B B B B B SBTABTUBS:B B B B B B B F B B B B B B B B B B B B B B B B B B B B B B B B F B B B B B B B B B B B B B B B B B B B B B B B B F 4GRMRD 4GRMWA 4, KSCAN 6+SAVE 4,SFIRST4,SLAST 4,SLOAD 4-VMBR F 4-VMBW 4.VSBR 4,@VSBW F : B+2BBB B-BB+BBB B+B B+B+B B+B+BBBB+BBB F B-&BBBBFB B-NB B+2B+.B#BBBBVB BBBBB. B`B+B=F BBaB B+B B+0BBB+RBBB. BB+rBBBBB B B-ZB`B+BBF B B+B+BB,lB BBРB|BBB`B-BB`BuBBBBB B*BBF BBBBBB BBB BBBBBB B,\B+BBBBBBBF BxB+BBB+B`B-BBBB+BBB B+B[B B+B+BB,lBBBF B B B B B B B B B B B B B B B B B B B B B B BENBTEF BR BFIBLEB NBAMBE?B B B B B B B B B B B B B B B B B B F B B B B B BCSB9+29+RB SBLABSTB IBS BINBVABLIBD B B B B B B F `A:BB0BBBgBnBBBB?B;wBBwBBBBBBBBBBBF AjBBBBBBBnBnBB8BB`pB8BBBBBBBBBBnBF ABB8BxBBxBBxBBB'BB=B|B=B|B7BxBB;~BB;~BB9vBF ABCEB,BTHBENB PBREBSSB TBHEB FBIRBE BBUBTTBONB*BHIBTSB*B*MBISBS*BCBHEF AJBCKB YBOUBR BSCBORBEBATB SBOUBNDB, BPRBESBS BYOBURB KBEYBPBREBSSB BBACF AzBK BFOBR BMEBNUB!BBBBBB B!BABBBBBAB!B BBBF f AB`C B`CC BBBBBBBBBBBBBBB BF A*BBBBBBBBBBBBBBBBBBBBBBBBF AZBBBBBBB6BBBBBBBBBBBBBB B B BF ABBBBBBB$Bj*B**B*$BB`pB8BBB9BBBBBBBnBF ABB8BBBB-B{vBmBB?BBB8BBBBBB=BB"BBBoKBwOF AB|`BB+hB1B4BSB?_BUB;^B.dB*B3B8BqB)B9Bb6Bi=BbABg@Bl9Bq5Bn5Bp/B8B4Bu.B;B:B=BGBF AzCCCCBCCC?CC C C OC C C $BB'KB'cB.sB3BBBAB1B&F ABY2Ba=BoDBNBRBEBB@OB4`B>cBCB7B2~B+B$B(BJBogBFB-BBWWBVhB=gF AB1cBoBBCBUBZB$BZ0Bu9B8BQ;BnMBzbBB+fB=]BUB1B'B5B=BUB{ABkF AZBBqBBBBBBBBBBBBBBBBBBB?BpB00B0pF ABBB?BBBBBp0BBBBB?BpB00B0pBBBBBBBBpF ABBB8B00B00BBBBBB?BBpBBBp0BpB??BpBB?BBpB0pF AJB NBorBthB SBtaBr.B TBheB BBigB DBipB-pBerB fBorBmsB pBarBt BofB aB lBarF AzBgeBr B cBonBstBelBlaBtiBonB -B UBrsBa BMaBjoBr.B TBheB LBitBtlBe BDiBppF ABerB iBs BfaBinBteBraBndB sBmaBllBerB tBhaBn BthBe BBiBg B B DBipBpeBr.F A*B UBrsBa BMaBjoBr BUrBsaB MBinBorBLBeoBCBanBceBrBGeBmiBniBHBerBcuBleF AZBsBLiBbrBaBViBrgBo BCaBprBicBorBnuBs BSaBgiBttBarBiuBsBThBe BBiBg BDiF ABppBerBTBheB LBitBtlBe BDiBppBerBTBheB LBioBnBThBe BCrBabB TBheB TBwiF A B'B-BWBWhBLMB@pB:B`BBj6Bs4Bl-B:BIB9BB'MB'aB)eB-qB/wB2B5B@BBF A:BAB@B3B1B3B)BZ0B_4BcBqCBGBLBOBQBOBHBEBFBB>QB6]B7`BBBBF ABVB BVCBB BXBfBCB8BCB`C ~BBBBB B B B BF ACBBBBCB BBBCBCFBBCBC8BBCBC?BF A BCBCBBCBCBBCB CBBCB CBBBBCF ABCDBC CnBCBBCBCBBCB C{BYBCxBCBBBF AC4BBCB8BCB C{BVB BVCBB BXBdBCB8BCB`C ~F ABCB8BCB CzBVBBXBBfB CzBWBCCXBCB B-C{BF AzBBB#CBB.BCBBBC6B BvBB BuCBBB C{B-BF AB^B B0BCBBBCBBBCBB BBCBBBB BEBF AB`CBCBBBCBBBCBBBBCBBBBCBC8F AZBBBBFB C~BB0BBBGB C~BB0BBBBBCBB CF AB]C.CCCCC>BBBBB2 B3 B4 B5 BËB C}BtBC6B BuCF ABB`C ~B BuCBB C{B-B`CBBtB CzB-B C{BtB BtC}BF A:BB`BѴBBFBB B 7BB5B B(B0B 8B(B8BBHBBBC$BBF AjBCB8BCB`C ~B B0BӠBXB B ^B.CB BB BBCBӠBYB F AB ^B.CB BB BBCBB0B[B B2BCB-BB.BBCB,BF AB B,BDBBCBC CXB C{BXBCxBC4BB4BCB8BCDB F AJC{BWB BWC{BBCBC4BBBCB8BCDBC CXBCBBF AzCBCBBCB C{BYBCxBCBBBC4BBCB8BCB C{F AjB BB*BFCBBڠCzBFB B@BCLBJBB B BB B6B B8BڠBAF AB6B BBDBB!B6CBBCLBJBBB BBB"B6BBBBBF ABB`BB6BBBBBCDBBBB(B(BgB6B B B`BBBBBF AJBBBB‰B`B@B B%CBUBBB BB BBBѵB BB*BB 6B&F AzB8BFBBBC$B B BBBJB C~BBBB BBBB)BBBF AB_BBC6B BuCBB C}BtBBBC6B BuCBB`C ~B BuCF A*B%BBBBZBBBBBBBB[BB@B B BC,BҳB B BBF AZB#BsB B B BBBB BCBBBBCB8)BB~BCHB BCHF ABBCHBBCHBB~BC4BBBCBBCB\BB@BB BCBF A BBCBC?BB B0BZBB;B;B{BËBCBBDBBEBBFBBCBF A:BCCBBCBBB&BBCCBBCBLB%BBBCCBBCBLF AjB%BBBB&BBCCBBCBB&BBCB B(BB BBChBCF ABBCB(BBBBBBCB2 BBB CB.BCBBCBCF A*B#BBCBBBB CzB,BB0B[BBB BJBB TBBDBBB@F AZBBaBCDB BB CBB BBBBB BCB C~B B BCBRB CF ABB C{BtBC6B BuCBB C|BtBC6B BuCBB BuCBBF A BC6B BuCBB_B B;BBB B0BCBBCB0BCBCB0BF A:CBCBCBB BBCBBBBCBBBBCLBJBB JBF ABB$BB&BB(BB*B3B$B B$CBBB$B3B&BB&B3B(BB(F AB3B*BB*BB~BBBB BCBB~BB_B`B@BBBCBBF ABBB BBBBBSB B%BBEB B 5BBBBCB_B{BBCF ABLB%BBB&BBCB B(BB BBChBCB%BBBCB B(BF AB BBC"BCB%BBBB&BBCB B(BB BBC"B^BB{BѻF AB B 6BFB%BBѻB BB B 7B;B‹BBBCBBB B BBBCF ABB CBDBBABBB CBDBBABBDB C~B[B@CB@CBCBCB(CB[F ACCCCCCBKBBBBBBB*B`B&BaBBBBBBB F AB B(B B$Bb BBBBBBBBBBB BB B$B(BBCHB F ABBBBBBB~BBB[BBB`BsB B!BB`B~BBBsB;BF ABBBBBCBBBBB`BjBBBBB[BBB;BB C{BF A*B C{BBBB[BBBBBBBBBBB[B BoB:`BB*BzB F AC~B[B;BB;B B BCBBBBBB\B;B{B B 1B@BBB BF ABB;B BsB BѳB B 6B&B8BFBBBC$B B BBB`B B C~BF A BBB BBBB\B{BѻBB;B{BBEBB B 6BFB BBBBGBF 5GAZER 5SFIRST5fSLAST 5SLOAD F : 99/4 AS 0170: 99/4 AS 0171AZBB[B;BBB`BBBBBBBB BBBB[B CBBB]BF ABBBBaB@BBBB-BBBBBB CBBB]BBBBBF ABBB`BBBBBB;BB{BBBBBBBBBB`BBBF A:BBCB B B BBIB C~BB BB%BBBB_B{BѻBB;B{BF AjBEBB B 6BFB BBBBGBBBCB B B BBIB C~BB BF AB%BBBB_BBBBBBBBBBBB BBBBB BBF AB*BB B(BB]B BBEBcBBBBBEBB`B*BCHB BBB F AJB@BBBCFB BCBBBaBBBDBaBCBBBBCHB BBF AzBBBCGBB CFB`B B@BCB]B B CBB BBBB BCB F ABBB[B;BB{BBBBBBB`B@BBBB1BBBB BBF ABB[B;BB{BBBB~BBhBBlBBjB BlB CB BhB C~BF AJBhBBlB BjBB B~B B~BhBBB[F LATIN0 BYTE 10 TEXT 'Ursa Major'LATIN1 BYTE 10 TEXT 'Ursa Minor' LATIN2 BYTE 3 TEXT 'Leo' LATIN3 BYTE 6 TEXT 'Cancer' LATIN4 BYTE 6 TEXT 'Gemini' LATIN5 BYTE 8 TEXT 'Hercules'*LATIN6 BYTE 10* TEXT 'Cassiopeia' LATIN7 BYTE 5 TEXT 'Libra' LATIN8 BYTE 5 TEXT 'Virgo'LATIN9 BYTE 11 TEXT 'Capricornus'*LATINA BYTE 7* TEXT 'Cepheus'LATINB BYTE 11 TEXT 'Sagittarius'***************** COMMON NAMES ** TEXT 'the North Star. The Big Dip-'* TEXT 'per forms part of a larger '* TEXT 'constellation - Ursa Major. '**DESCR1 TEXT 'The Little Dipper is fainter'* TEXT 'and smaller than the Big ' TEXT 'A Greek Hero'*COMM6 BYTE 21#* TEXT 'The Lady in Her Chair'COMM7 BYTE 10 TEXT 'The Scales'COMM8 BYTE 10 TEXT 'The Virgin' COMM9 BYTE 8 TEXT 'The Goat'*COMMA BYTE 19!* TEXT 'Father of Andromeda'* TEXT 'marks the head of Hercules. '*+*DESCR6 TEXT 'Cassiopeia is located on the'** TEXT 'side of the North Star op- '** TEXT 'posite the Big Dipper. In '** TEXT 'Greek mythology, Cassiopeia ' TEXT 'Cancer.*'**DESCR4 TEXT 'Gemini is symbolized by '* TEXT 'twins. Astrologers believe '* TEXT 'that Gemini is ruled by the '* TEXT 'planet Mercury, which is '* TEXT 'named for the ancient Roman '* TEXT 'Dipper. It forms almost the '* TEXT 'entire contellation Ursa '* TEXT 'Minor. The North Star is the'& TEXT 'end star of the handle.*'**DESCR2 TEXT 'Leo is symbolized by a lion.'COMMB BYTE 10 TEXT 'The Archer'***************** DESCRIPTIONS ******************DESCR0 TEXT 'The Big Dipper consists of 7'* TEXT 'stars. The 2 stars in the '* TEXT 'front of the cup point to '****************COMM0 BYTE 14 TEXT 'The Big Dipper'COMM1 BYTE 17 TEXT 'The Little Dipper' COMM2 BYTE 8 TEXT 'The Lion' COMM3 BYTE 8 TEXT 'The Crab' COMM4 BYTE 9 TEXT 'The Twins'COMM5 BYTE 12% TEXT 'messenger of the gods.*'**DESCR5 TEXT 'In 1934, a star in Hercules '* TEXT 'began to grow brighter until'* TEXT 'it looked brighter than the '* TEXT 'North Star. Such a star is '* TEXT 'called a NOVA. A red star '* TEXT 'Astrologers believe that Leo'# TEXT 'is ruled by the Sun.*'**DESCR3 TEXT 'Cancer is symbolized by a '* TEXT 'crab. Astrologers believe '* TEXT 'that the Moon, which they '* TEXT 'consider a planet, rules '** TEXT 'was the mother of Andromeda '** TEXT 'and the wife of Cepheus. '**DESCR7 TEXT 'Libra is symbolized by a '* TEXT 'pair of weighing scales. As-'* TEXT 'trologers believe that Libra'. SOCB @H01,@>83FD SOUND LIST IN VDP RAM LIMI 2 RT%*************************************%* STANDARD KEYBOARD SCAN ROUTINE *%*************************************%SCANKY LIMI 0 DISABLE INTS* TEXT 'an archer. Astrologers be- '* TEXT 'lieve that Sagittarius is '* TEXT 'ruled by the planet Jupiter,'* TEXT 'which they consider a wise '# TEXT 'and friendly planet.*'** TEXT 'that the planet Saturn rules'* TEXT 'Capricorn. They consider '* TEXT 'Saturn to have a stern in- ' TEXT 'fluence.*'*+*DESCRA TEXT 'In Greek mythology, Cepheus '** TEXT 'was a king. He was the hus- '* TEXT 'is ruled by the planet Venus'* TEXT 'which is named for the Roman'* TEXT 'goddess of love and beauty. '**DESCR8 TEXT 'Virgo is symbolized by a '* TEXT 'virgin. Astrologers believe '( LWPI GPLWS GPLWS EQU >83E0' BL @SCAN SCAN EQU >000E LWPI MYWS$ LIMI 2 ENABLE INTS) B *R11 RETURN TO CALLER'**************************************** FILE IS > C O M U T L < EVEN!*********************************!* SUBROUTINE TO TRIGGER SOUND *!********************************* SNDSUB LIMI 0. MOV *R11+,@>83CC ADDRESS OF SOUND LIST& MOVB @H01,@>83CE SET THE FLAGS** TEXT 'band of Cassiopeia and the '** TEXT 'father of Andromeda. One '** TEXT 'star in Cepheus is in the '** TEXT 'class of Cepheid Variables. '**DESCRB TEXT 'Sagittarius is symbolized by'* TEXT 'Virgo is ruled by the planet'* TEXT 'Mercury, which was named for'* TEXT 'the messenger of the ancient' TEXT 'Roman gods.*'**DESCR9 TEXT 'Capricorn is symbolized by a'* TEXT 'goat. Astrologers believe ''* 5. R1 OF NEW WORKSPACE IS DESTROYED'***************************************)JPVSBW DATA MYWS2,VSBWGO NEW WORKSPACE,PC%VSBWGO LIMI 0 DISABLE INTS0 MOV *R13,R1 GETS VDPADD FROM OLD R0" SWPB R1 LOW FIRST# AI R0,->8000 RESTORE R0* LIMI 2 ENABLE INTERRUPTS- B *R11 AND RETURN TO CALLER '***************************************'* SINGLE BYTE WRITE TO VDP . . . *'* CALLED BY BLWP @VSBW *%* I.E. BL @VWTR *%* DATA >0711 *%* THIS INSTANCE CHANGES VDP REG. 7 *%* TO >11 (CHANGES BACKGROUND COLOR) *%* RETURN LINKAGE IS R11. *%*************************************JPVWTR MOV *R11+,R0'* GENERATES A 16 BIT RANDOM NUMBER AND*'* PLACES IT IN R10. RETURN IS IN R11. *'***************************************RANDNO LI R9,28645( MPY @SEED,R9 SEED EQU >83C0 AI R10,31417& MOV R10,@SEED MAKE NEW SEED* MOVB R1,@VDPWA R1LB2 EQU MYWS2+3% SWPB R1 RESTORE HIGH' ORI R1,>4000 SET WRITE FLAG) MOVB R1,@VDPWA SET UP HIGH BYTE) NOP VDPWA EQU >8C020 MOVB @2(R13),@VDPWD VALUE FROM OLD R1 MSB'* 1. MUST HAVE SECOND WORKSPACE *'* 2. VDPADD MUST BE PRELOADED *'* 3. MSB OF R1 MUST BE PRELOADED WITH'* VALUE TO BE WRITTEN *'* 4. R13,14,15 OF 2ND WS MUST BE *'* PRESERVED *%JPVWTG LIMI 0 DISABLE INTS! ORI R0,>8000 SET FLAG+ SWPB R0 SET LOW BYTE FIRST( MOVB R0,@VDPWA VDPWA EQU >8C02- SWPB R0 NOW SET UP HIGH BYTE" MOVB R0,@VDPWA SET VDPWA) B *R11 RETURN TO CALLER%*************************************%* VDP WRITE TO REGISTER ROUTINE. THE*%* PARAMETER IS PASSED DOWN AS DATA *%* USING THIS FORMAT: (LB, THEN HB) *%* VALUE TO WRITE/8/VDP REG. # *)* VDPWD EQU >8C00$ LIMI 2 ENABLE INTS. RTWP RETURN AND RESTORE ME'***************************************'* SINGLE BYTE READ FROM VDP . . . *'* CALLED BY BLWP @VSBR *)* VDPRD EQU >8800$ LIMI 2 ENABLE INTS. RTWP RETURN AND RESTORE ME%*************************************%* R E A D F R O M V D P ROUTINE *%* THIS ROUTINE ASSUMES THAT THE *'* 5. R1 OF NEW WORKSPACE IS DESTROYED'***************************************)JPVSBR DATA MYWS2,VSBRGO NEW WORKSPACE,PC%VSBRGO LIMI 0 DISABLE INTS0 MOV *R13,R1 GETS VDPADD FROM OLD R0' SWPB R1 LOW BYTE FIRST%* DATA SAL,2,MYWS+2 *%*************************************/WRTVCL MOV *R11+,VDPADD VDPADD EQU 0 (R0)/WRTCL MOV *R11+,WCOUNT WCOUNT EQU 3 (R3)/WRTL MOV *R11+,WLOC WLOC EQU 4 (R4)( MOVB VDPADD,@VDPWA SEND HI BYTE( NOP WASTE SOME TIME+R00010 MOVB @VDPRD,*RLOC+ VDPRD EQU >8800 DEC RCOUNT JGT R00010$ LIMI 2 ENABLE INTS) B *R11 RETURN TO CALLER%* PARAMETERS ARE PASSED FOLLOWING *%* THE BL @RDVCL STATEMENT. I.E.: *%* BL @RDVCL *%* DATA SAL,2,MYWS+2 *%*************************************/RDVCL MOV *R11+,VDPADD VDPADD EQU 0 (R0)* MOVB R1,@VDPWA R1LB2 EQU MYWS2+3* SWPB R1 RESTORE HIGH BYTE) MOVB R1,@VDPWA SET UP HIGH BYTE) NOP VDPWA EQU >8C020 MOVB @VDPRD,@2(R13) VALUE FROM OLD R1 MSB'* 1. MUST HAVE SECOND WORKSPACE *'* 2. VDPADD MUST BE PRELOADED *'* 3. MSB OF R1 IS WHERE THE BYTE *'* WILL BE WRITTEN *'* 4. R13,14,15 OF 2ND WS MUST BE *'* PRESERVED *%*************************************%* W R I T E T O V D P ROUTINE *%* THIS ROUTINE ASSUMES THAT THE *%* PARAMETERS ARE PASSED FOLLOWING *%* THE BL @WRTVCL STATEMENT. I.E.: *%* BL @WRTVCL */RDCL MOV *R11+,RCOUNT RCOUNT EQU 3 (R3)/RDL MOV *R11+,RLOC RLOC EQU 4 (R4)%READ LIMI 0 DISABLE INTS SWPB VDPADD' MOVB VDPADD,@VDPWA SEND LO BYTE( SWPB VDPADD WASTE SOME TIME%WRITE LIMI 0 DISABLE INTS SWPB VDPADD' MOVB VDPADD,@VDPWA SEND LO BYTE( SWPB VDPADD WASTE SOME TIME* ORI R0,>4000 SET FLAG TO WRITE MOVB VDPADD,@VDPWA >8C02( NOP WASTE SOME TIME(* DATE STARTED: *(* *(****************************************'***************************************'* MEMORY MAPPED E Q U A T E S *'*************************************** DEC @TEMPC DONE? JNE VDP000 NOT YET MOV @XML,VDPADD RESTORE MOV @XML,@TEMPV RESTORE LIMI 2 ENABLE) B *R11 RETURN TO CALLER%*************************************VDPVDP MOV *R11+,VDPADDVDPCL MOV *R11+,WCOUNTVDPL MOV *R11+,WLOC%VDP LIMI 0 DISABLE INTS$ MOV VDPADD,@XML SAVE VDPADD# MOV VDPADD,@TEMPV SAVE AGAIN! MOV WLOC,@TEMPL SAVE LOC+W00010 MOVB *WLOC+,@VDPWD VDPWD EQU >8C00 DEC WCOUNT JGT W00010' AI VDPADD,->4000 RESTORE VDPADD$ LIMI 2 ENABLE INTS) B *R11 RETURN TO CALLER%*************************************CPURAM EQU >8300 CPURAM$SEED EQU >83C0 RAND # SEED2DISINT EQU >83C2 DISABLE INTERRUPT ADDRESS* * 8=ALL 4=AUTOMOT 2=SOUND 1=QUIT*>EXTINT EQU >83C4 ADDRESS OF EXTERNAL INTERRUPT ROUTINE* FILE IS > D A T A <(****************************************(* T I T L E . . . . *(* *(* WRITTEN BY: *(* DESIGNED BY: *# MOV WCOUNT,@TEMPC SAVE COUNT#VDP000 MOV @TEMPL,VDPADD GET SOURCE$ BLWP @JPVSBR READ A BYTE! MOV @TEMPV,VDPADD GET DEST$ BLWP @JPVSBW READ A BYTE" INC @TEMPV NEXT DEST$ INC @TEMPL NEXT SOURCE%* V D P T O V D P ROUTINE *%* THIS ROUTINE ASSUMES THAT THE *%* PARAMETERS ARE PASSED FOLLOWING *%* THE BL @VDPVDP STATEMENT. I.E.: *%* BL @WRTVCL *%* DATA SAL,2,CT DEST,COUNT,SOURCE*$TEMP2 EQU >8332 2 TEMP SAVE$TEMP3 EQU >8334 2 TEMP SAVE:DUMMYV EQU >8336 4 6,7,8,9 FOR DUMMY ANSWER VALUES)* EQU >833A RESERVED FOR VDP* EQU >833C "* EQU >833E "*'***************************************%MYWS EQU >8300 MY WORKSPACE)MYWS2 EQU >8320 SECOND WORKSPACEPTSTAT EQU >8320 PTSTAT&* EQU >8322 FOR VSBW,VSBR#Y1 EQU >8324 FOR LINALGX1 EQU >8326 ".SAL EQU >1B00 SPRITE ATTRIBUTE LIST$CT EQU >2000 COLOR TABLE.SVT EQU >1F00 SPRITE VELOCITY TABLE/SDL EQU >1C00 SPRITE DESCRIPTOR LIST1PDT EQU >0000 PATTERN DESCRIPTOR TABLE.SNDPNT EQU >83CC POINTER TO SOUND LIST#STRTSD EQU >83CE START BYTE$SVVDP1 EQU >83D4 SAVE VDP R10SCNTIM EQU >83D6 SCREEN TIME OUT COUNTER/RAMFLG EQU >83FD VDP RAM FLAG FOR SOUND5CONNUM EQU >8340 2 CONSTELLATION NUMBER (0-N)5SAVNAM EQU >8342 2 SAVED NAME POINTER ADDRESS4MATCHC EQU >8344 1 MATCHING POSITION # (0-3))WHCHGM EQU >8345 1 GAME LEVEL 0-5Y2 EQU >8328 "X2 EQU >832A "6FING EQU >832C FINGER POSITION POINTER (0-3),FIRFLG EQU >832D FIRE FLAG 0=NO FIRE2SAVHIL EQU >832E 2 SAVED HIGHLIGHT ADDRESS$TEMP1 EQU >8330 2 TEMP SAVE(HIVDP EQU >3800 FREE VDP AT TOP%RAMSET EQU HIVDP RAM CHAR SET4SCREEN EQU >0000 SCREEN FOR MULTI COLOR MODE%PAB EQU >0F80 PAB VDP SPOT'***************************************'* C P U R A M E Q U A T E S *&VDPRD EQU >8800 VDP READ DATA'VDPWD EQU >8C00 VDP WRITE DATA/VDPWA EQU >8C02 VDP READ/WRITE ADDRESS1SCAN EQU >000E ADDRESS OF KSCAN ROUTINE+SIT EQU >1800 SCREEN IMAGE TABLEDUSECON EQU >8346 16 THROUGH >8356 : USED CONSTELLATION ARRAY*SHOWN EQU >8356 1 # CONSTEL. SHOW$GUESS EQU >8357 1 # GUESSES$HITS EQU >8358 1 # OF HITS&MISSES EQU >8359 1 # OF MISSES* score screen info'* R E G I S T E R E Q U A T E S *'***************************************VDPADD EQU 0 R0!RLOC EQU 1 R1 R PWLOC EQU 1 R1!RCOUNT EQU 2 R2 F V!WCOUNT EQU 2 R2 O D&TEMPL EQU >836C TEMP FOR WLOC*+XML EQU >837E XML RETURN ADDRESS*)KEYBRD EQU CPURAM+>74 KEYBOARD TO SCAN%KEY EQU CPURAM+>75 KEY RETURNED#JOYY EQU CPURAM+>76 JOYSTICK Y#JOYX EQU CPURAM+>77 JOYSTICK X BYTE 1,>FF,8 BYTE 1,>F0,16- BYTE 1,>FF,0 STOP NOISE GENERATOR SDL2E EQU $*SDLST3 EQU $ PLOT STAR BYTE 4,>9F,>BF,>DF,>F0,1 BYTE 3,>CF,>05,>E3,1 BYTE 2,>C5,>05,1 BYTE 2,>C0,>05,1R13LB EQU MYWS+27 R13R14LB EQU MYWS+29 R14R15LB EQU MYWS+31 R15'***************************************'* S O U N D L I S T E Q U A T E S *'*************************************** SOUNDS EQU $*SDLST1 EQU $ PROMPT SOUND'***************************************'* WORKSPACE E Q U A T E S *'***************************************R0LB EQU MYWS+1 R0R1LB EQU MYWS+3 R1R2LB EQU MYWS+5 R2R3LB EQU MYWS+7 R3#TIMER EQU CPURAM+>79 TIMER BYTE$STATUS EQU CPURAM+>7C STATUS BYTE$MOTION EQU CPURAM+>7A MOTION BYTE-INTWS EQU CPURAM+>C0 INTERRRUPT WORKSPACE&GPLWS EQU CPURAM+>E0 GPL WORKSPACE'***************************************CSHITS EQU >8360CSMISS EQU >8361SCHITS EQU >8362SCMISS EQU >8363CGHITS EQU >8364CGMISS EQU >8365SGHITS EQU >8366SGMISS EQU >8367(TEMPV EQU >8368 TEMP FOR VDPADD(TEMPC EQU >836A TEMP FOR WCOUNT BYTE 4,>90,>BF,>DF,>FF,1 BYTE 2,>8B,>06,6 BYTE 2,>8F,>07,6 BYTE 2,>8B,>06,6- BYTE 1,>9F,0 STOP NOISE GENERATOR SDL1E EQU $*SDLST2 EQU $ RAZZ SOUND BYTE 4,>9F,>BF,>DF,>F0,1 BYTE 3,>C6,>0D,>E3,16R4LB EQU MYWS+9 R4R5LB EQU MYWS+11 R5R6LB EQU MYWS+13 R6R7LB EQU MYWS+15 R7R8LB EQU MYWS+17 R8R9LB EQU MYWS+19 R9R10LB EQU MYWS+21 R10R11LB EQU MYWS+23 R11R12LB EQU MYWS+25 R12 BYTE 2,>C7,>04,1 BYTE 2,>C0,>04,1 BYTE 2,>C9,>03,1 BYTE 1,>FF,0 SDL3E EQU $* SDLST4 EQU $ BYTE 4,>9F,>BF,>DF,>F0,1 BYTE 1,>E4,5 BYTE 1,>FF,0 SDL4E EQU $** V D P E Q U A T E S*( TEXT 'THEN PRESS THE FIRE BUTTON' HITM BYTE 6 TEXT '*HITS*' MISSM BYTE 6 TEXT '*MISS*'RECSCR BYTE 16 TEXT 'CHECK YOUR SCORE'PRESSM BYTE 24& TEXT 'AT SOUND, PRESS YOUR KEY'MENUM BYTE 20'* T E X T S T A T E M E N T S *'***************************************OPTH BYTE 20' TEXT 'S T A R G A Z E R' 20OPT1 BYTE 15 TEXT ' Meet the Stars'OPT2 BYTE 14 TEXT ' Com/Sci Match'OPT3 BYTE 14'***************************************'* B Y T E S T A T E M E N T S *'***************************************H00 BYTE >00H01 BYTE >01H02 BYTE >02H03 BYTE >03H04 BYTE >04H05 BYTE >05H06 BYTE >06H07 BYTE >070SNDBUF EQU >3800 SOUND BUFFER IN VDP RAM%PROMPT EQU SNDBUF PROMPT SOUND1RAZZ EQU SDL1E-SOUNDS+SNDBUF RAZZ6MARK EQU SDL2E-SOUNDS+SNDBUF MARK STARFFC0,>A090,>8884,>8281#URCORN DATA >FF03,>0509,>1121,>4181 TEXT ' Sci/Com Match'OPT4 BYTE 13 TEXT ' Common Guess'OPT5 BYTE 17 TEXT ' Scientific Guess'OPT6 BYTE 13 TEXT ' Score Screen'OPTP1 BYTE 30, TEXT 'MOVE THE GLOVE TO YOUR CHOICE,'OPTP2 BYTE 26H08 BYTE >08H09 BYTE >09H0A BYTE >0AH0B BYTE >0BH0C BYTE >0CH0D BYTE >0DH0E BYTE >0EH0F BYTE >0FHC0 BYTE >C0HD0 BYTE >D0HFF BYTE >FF'***************************************'***************************************'* D A T A S T A T E M E N T S *'***************************************BVDPREG DATA >02A2,>06FF,>0336,>0304 VDP REGS BIT MAP MODE>ZEROES DATA 0,0,0,0,0,0,0,0 CLEAR COLOR TABLE# DATA >DE6E,>B6DB,>EFFE,>FC38*>SALINI DATA >C078,>800F STAR POINTER HAND@ DATA >C078,>840F ANSWER POINTER HAND DATA >C078,>800F DATA >D000SALINT BYTE 5*8-1,16,>80,>0F BYTE >D0# DATA >DE6E,>B6DB,>EFFE,>FC30*'HANDD DATA >00C0,>E0E1,>E367,>6EFF >90# DATA >FFFF,>FFFF,>FF7F,>7F3F# DATA >3B77,>EEDD,>BB77,>EEDD# DATA >FBF7,>FEFC,>FCF8,>F0E0*'HFUP DATA >0303,>0303,>0303,>0303 >94# DATA >DE6E,>B6DB,>EFFE,>FC38*'HANDL DATA >0000,>0000,>0000,>2D7F >84# DATA >7B76,>6DDB,>F77F,>3F1C# DATA >0000,>060E,>1C38,>F0F0# DATA >E0C0,>9CFE,>F0E0,>8000*'HANDO DATA >3DE2,>9188,>C422,>1110 >88#LLCORN DATA >8182,>8488,>90A0,>C0FF#LRCORN DATA >8141,>2111,>0905,>03FF#HORZ DATA >FF00,>0000,>0000,>00FF#VERT DATA >8181,>8181,>8181,>8181#A10 DATA >0024,>6A2A,>2A2A,>2A24$*CPYRIT DATA >3C42,>99A1,>A199,>423C,SALCL1 BYTE 61,124,>88,>01 BLACK OUTLINE* BYTE 61,124,>8C,>0F WHITE SOLID* BYTE 55,120,>90,>0F WHITE SOLID BYTE >D0,SALCL2 BYTE 59,126,>88,>01 BLACK OUTLINE* BYTE 59,126,>8C,>0F WHITE SOLID# DATA >0707,>0703,>0101,>0000# DATA >0000,>0000,>0000,>DAFE# DATA >FE6E,>6EB6,>B7FE,>FC38*'HFDOWN DATA >0000,>6070,>381C,>0F0F >98# DATA >0707,>0301,>0101,>0000# DATA >0000,>0000,>0000,>D4FE# DATA >083C,>4680,>7008,>0601# DATA >8058,>2492,>4925,>1101# DATA >2191,>4925,>1101,>02FC*'HANDU DATA >181D,>6E77,>3B1D,>0E0F >8C# DATA >0703,>397F,>0F07,>0100# DATA >0080,>D86C,>B6DA,>EE7E'***************************************'* S P R I T E D E F I N I T I O N S *'***************************************'HAND DATA >0000,>6070,>381C,>0F0F >80# DATA >0703,>397F,>0F07,>0100# DATA >0000,>0000,>0000,>B4FE* BYTE 57,118,>90,>0F WHITE SOLID BYTE >D0' CLR R4 CLEAR REGISTER+ MOVB @GRMRD,R4 GET DATA FROM GROM CI R4,>0F00 >0F?- JNE INCR NO, SO TRY NEXT BYTE5 MOVB @GRMRD,R4 GOT THE >0F, SO NEED THE >F0 CI R4,>F000 >F0?5* THIS FIRST PIECE OF CODE MUST BE EXECUTED BEFORE *5* ANY CALLS TO @GPLLNK CAN BE MADE. YOU ONLY HAVE TO*5* EXECUTE THIS TOP CODE, ONCE! *5*****************************************************1 SWPB R0 SENDING HIGH BYTE FIRST. MOVB R0,@GRMWA FOLLOWED BY LOW BYTE3 LI R0,GPLRTN GET DESIRED RETURN ADDRESS8 MOV R0,@>8300 PUT RETURN ADDRESS IN XML TABLE+* NOTE: THIS ADDRESS MUST ALWAYS BE >8300!!&************************************** JPLLNK LIMI 03 MOVB @>8373,R1 FETCH GPL SUBSTACK POINTER' SRL R1,8 MAKE IT A WORD' AI R1,>8302 ADD PAD OFFSET= MOV @XML,*R1 PUT XML INSTRUCTION ADDRESS ON STACK- JNE INCR NO, SO TRY NEXT BYTE- JMP GOTGRT FOUND RETURN ADDRESS*.INCR INC R3 TRY NEXT SET OF BYTES JMP GPLP*(GOTGRT MOV R3,@XML SET XML ADDRESS0 LIMI 2 ENABLE INTERRUPTS AGAIN7GPL LI R3,>0300 START SCANNING ABOUT >300 GROM*+GPLP LIMI 0 DISABLE INTERRUPTS& MOVB R3,@GRMWA SET HIGH BYTE SWPB R3$ MOVB R3,@GRMWA SET LO BYTE SWPB R3 RESTORE** FILE IS > G P L L N K <4GRMWA EQU >9C02 GROM WRITE ADDRESS REGISTER1GRMRD EQU >9800 GROM READ DATA REGISTER5*****************************************************5* START SCANNING FOR A >0FF0 IN GROM FOR XML RETURN *; SWPB R1 HIGH BYTE CONTAINS OFFSET INTO PAD4 MOVB R1,@>8373 UPDATE GPL SUBSTACK POINTER2 MOV *R11+,R0 GETCH GPL ROUTINE ADDRESS3 MOVB R0,@GRMWA SET UP GPL PROGRAM COUNTER) RT RETURN TO CALLER&**************************************&* THIS IS THE SUBROUTINE CODE TO *&* REPLACE GPLLNK. REGISTERS 0 AND 1 *&* OF YOUR CALLING WORKSPACE ARE *&* ALTERED. SO IS >8300 CPU RAM. *+ LWPI >83E0 LOAD GPL WORKSPACE+ B @>006A BRANCH TO GPL CODE GPLRTN LIMI 2- LWPI MYWS RESTORE MY WORKSPACE/ RT RETURN TO MAIN PROGRAM DEC R2 DONE? JNE THIRDS NOT YET'***************************************'* LOAD CHARACTER SETS INTO CPU BUFFER *'*************************************** * UPPER CASE * LIMI 0&**************************************2 BL @CLRVDP CLEAR EVERYTHING OUT DATA CT,>1800,>0000 BL @CLRVDP DATA PDT,>1800,>0000+* BL @JPVWTR BLACK BACKGROUND* DATA >0711*/ CLR R0 CHANGE TO BIT MAP MODE3 LI R1,VDPREG POINT TO VDP REGISTER DATA, LI R2,8 8 REGISTERS TO LOAD.BMLOOP MOVB *R1+,@R0LB GET DATA FOR REGISTER, BL @JPVWTG WRITE TO REGISTER*FILE IS > I N I T S <4OPTPOS BYTE 5*8-1 OPTION SCREEN HAND POSITION BYTE 7*8-1 BYTE 9*8-1 BYTE 11*8-1 BYTE 13*8-1 BYTE 15*8-1&**************************************&* INITIALIZATIONS FOR STARS PROGRAM *7 LI R0,HIVDP+>100 WRITE CHAR SET TO HIVDP, FIRST MOV R0,@>834A SET FAC& MOVB @R0LB,@STATUS CLEAR STATUS# BL @JPLLNK USE GPLLNK# DATA >18 SMALL CAPS* BL @WRTVCL DATA RAMSET+>1D0,8,A10( LI VDPADD,SIT START OF SCREEN( CLR R1 START CHAR OF 00 LI R2,>300 >300 PATTERNS TO SCREEN*THIRDS BLWP @JPVSBW WRITE A PATTERN% AI R1,>0100 NEXT PATTERN) INC VDPADD NEXT SCREEN SPOT& AI R0,>0100 NEXT REGISTER DEC R2 DONE? JNE BMLOOP NOT YET LI R0,>E200 MOVB R0,@SVVDP1&**************************************&* FORMAT SCREEN >00 TO >FF 3 TIMES *&************************************** EVEN MAIN EQU $*STARS LWPI MYWS LOAD MY WORKSPACE2 BL @GPL GET >0FF0 FOR GROM RETURN******************************** SET TO BIT MAP MODE, NOW ********************************%BACK BL @JPVWTR SCREEN OFF DATA >01A2* BL @JPVWTR BLUE BACKGROUND DATA >07446 BL @CLRVDP CLEAR PATTERN DESCIPTOR TABLE, DATA PDT,>1800,>0000 FILL WITH ZEROES BL @CLRVDP( LI WLOC,SOUNDS START OF SOUNDS$ LI WCOUNT,SDL4E-SOUNDS LENGTH# BL @WRITE OUT TO VDP&**************************************&* ZERO SCORE AREAS *&************************************** LI R0,CSHITS* DATA OPTH,>F1F1** BL @WRTMSG* BYTE 17,7* DATA COPYRM,>F0F0** BL @WRTMSG* BYTE 2,3* DATA EGOM,>F0F0** BL @WRTMSG* BYTE 23,5* DATA PRESSM,>F0F0*( BL @WRTVCL NULLIFY SPRITES* BL @WRTVCL * DATA RAMSET+>200,8,CPYRIT* * LOWER CASE7 LI R0,HIVDP+>300 WRITE CHAR SET TO HIVDP, FIRST MOV R0,@>834A SET FAC& MOVB @R0LB,@STATUS CLEAR STATUS# BL @JPLLNK USE GPLLNK6 DATA CT,>1800,>0000 FILL WITH BACKGROUND COLOR0 MOVB @H0F,@>837E INITIAL COLOR FOR GLOVE*/ BL @WRTVCL LOAD LEFT HAND PATTERN DATA SDL,1*32,HAND+328 BL @WRTVCL PLACE HAND SPRITE ON THE SCREEN CLR R1 LI R2,8/2ZSALP MOV R1,*R0+ DEC R2 JNE ZSALP&**************************************&* CREATE OPTION SCREEN *&* ENTRY POINT FOR BACK KEY *&************************************** DATA SAL,1,HD0$* BL @JPVWTR SCREEN ON* DATA >01E2* BL @PAUSE&**************************************&* LOAD SOUND LISTS TO VDP RAM *&**************************************% LI VDPADD,SNDBUF SOUND BUFFER# DATA >4A SMALL CAPS'***************************************'* CREATE TITLE SCREEN SEQUENCE *'**************************************** BL @JPVWTR#* DATA >01A2 SCREEN OFF** BL @WRTMSG* BYTE 12,6 DATA SAL,5,SALINT' MOVB @H00,@FING FIRST POSITION* BL @DRWBOX BYTE 1,5,3,22* BL @FILL BYTE 2,6,1,20 DATA >F1F1* BL @WRTMSG BYTE 2,6 DATA OPTH,>F1F1* BL @WRTMSG CB @KEY,@H0F BACK? JNE NTBKKY NOPE' B @ZZZZZZ BACK TO BANK 0 * CLR R2-* B @BANKSW GO BACK TO MAIN MENU*$*===================================NTBKKY CB @KEY,@H0D ENTER? DATA OPT5,>F0F0* BL @WRTMSG BYTE 15,4 DATA OPT6,>F0F0* BL @WRTMSG BYTE 18,1 DATA OPTP1,>1F1F* BL @WRTMSG BYTE 19,3 DATA OPTP2,>1F1F* BL @WRTMSG BYTE 21,6#SCNJOY MOV @JOYY,@JOYY JOY MOVED?$ JEQ GETGAM NO, SO EXIT* MOVB @JOYY,@JOYY MOVED UP OR DOWN? JGT HNDUPX UP JLT HNDDWX DOWN* HNDUPX MOVB @FING,R0 AT TOP?+ JEQ GETGAM YES, SO CAN'T MOVE% CB @KEY,@HFF KEY PRESSED?- JEQ SCNJOY NO, SO SCAN JOYSTICK CLR R3 MOVB @KEY,R3 CI R3,>0500 UP KEY?( JEQ HNDUPX YES, SO MOVE UP CI R3,>0000 DOWN? JNE NTNTRK NO JMP GOTGAM*#NTNTRK AB @H01,@>837E NEXT COLOR$ CB @>837E,@H0F PAST WHITE? JLE STCOL NOT YET) MOVB @H02,@>837E RESTORE TO GREEN%STCOL LI R0,SAL+3 COLOR NYBBLE DATA MENUM,>F6F6** BL @WRTMSG* BYTE 23,3* DATA EGOM,>F0F0*$ BL @JPVWTR SCREEN ON DATA >01E2GGLOOP MOVB @H00,@KEYBRD$*===================================* CHECK FOR BACK" BL @SCANKY GET A KEY BYTE 5,4 DATA OPT1,>F0F0* BL @WRTMSG BYTE 7,4 DATA OPT2,>F0F0* BL @WRTMSG BYTE 9,4 DATA OPT3,>F0F0* BL @WRTMSG BYTE 11,4 DATA OPT4,>F0F0* BL @WRTMSG BYTE 13,4* JEQ HNDDWX YES, SO MOVE DOWN% CI R3,>1200 FIRE BUTTON?) JEQ GOTGAM YES, SO GOT GAME% CI R3,>0D00 FIRE BUTTON?) JEQ GOTGAM YES, SO GOT GAME" JMP GETGAM WRONG KEY*" MOVB @>837E,R1 GET COLOR* BLWP @JPVSBW WRITE NEW COLOR"GETGAM AB @H01,@KEYBRD SCAN NEXT CB @KEYBRD,@H03 DONE?* JEQ GGLOOP YES, SO TRY AGAIN% BL @SCANKY SCAN FOR KEY2 SB @H01,@FING DECREMENT FINGER POSITION! JMP HNDMVX AND MOVE#HNDDWX CB @FING,@H05 AT BOTTOM?+ JEQ GETGAM YES, SO CAN'T MOVE2 AB @H01,@FING INCREMENT FINGER POSITION*'***************************************'* INITIALIZE ANY VARIABLES FOR THE *'* GAME. *'***************************************. MOVB @H00,@FING FIRST FINGER POSITION LI VDPADD,18*256+32+CT8 BL @WRTVCL PLACE ANY SPRITES ON THE SCREEN DATA SAL,13,SALINI&**************************************&* FORMAT THE SCREEN FOR GAME PLAY. *&**************************************& CB @WHCHGM,@H05 SCORE SCREEN?%GOTGAM BL @JPVWTR SCREEN OFF DATA >01A2- MOVB @FING,@WHCHGM HAVE WHICH GAME- BL @CLRVDP CLEAR VDP AGAIN DATA PDT,>1800,0 BL @CLRVDP DATA CT,>1800,0% BL @JPVWTR BLUE AGAIN%HNDMVX MOVB @FING,R3 GET POSITION SRL R3,8 ADJUST CLR R4 PREPARE, MOVB @OPTPOS(R3),R4 GET Y POSITION% AI R4,16 ADD X OFFSET" BL @WRTVCL MOVE HAND DATA SAL,2,MYWS+80 MOV VDPADD,@SAVHIL SAVE HIGHLIGHT ADDRESS+ CLR @HITS NO HITS, OR MISSES MOVB @WHCHGM,R0 MEET?5 JEQ NOSHOW YES, SO DON'T DISPLAY SCORES- BL @SHOWHM SHOW HITS AND MISSES*9 JNE FTPSN NO, SO FORMAT THE PLAYING SCREEN- JMP NOSHOW YES, SO DON'T FORMAT0FTPSN BL @PLAYSC MAKE THE PLAYING SCREEN** ADDED 6/28/87* BL @WRTMSG BYTE 0,4 DATA PRESSM,>F6F6 DATA >0744'***************************************'* LOAD ANY SPRITE PATTERNS HERE *'***************************************- BL @WRTVCL LOAD SPRITE PATTERNS DATA SDL,7*32,HAND(DBNCE BL @SCANKY KEY STILL DOWN?# MOVB @JOYY,R0 JOY MOVED?% JNE DBNCE STILL MOVING% CB @KEY,@HFF KEY PRESSED?& JNE DBNCE STILL PRESSED' JMP GGLOOP NOW SCAN AGAIN*( JEQ CHKJOY NO, CHECK JOYST&CHKKEY CI R3,>0500 5 OR GREATER?= JGT FIPA YES, SO ONLY CHECK FOR FIRE OR PAUSE$ SWPB R3 MOVE TO LOW& SLA R3,1 MULTIPLY BY 2INPBK CB @KEY,@H0D JNE INPCLK MOVB @H01,@FIRFLG B @INPTRTINPCLK CLR @KEYBRD% MOVB @H00,@FIRFLG NO FIRE, YET*BRDINC AB @H01,@KEYBRD ADD 1 TO KEYBOARD$ CB @KEYBRD,@H03 PAST SPLIT? BYTE 21*8-1,16HILLOC DATA 18*256+32+CT DATA 19*256+32+CT DATA 20*256+32+CT DATA 21*256+32+CT********************************************* *** ROUTINE TO TEST KEYBOARD AND JOYSTICKS *4NOSHOW LI R0,USECON NO CONSTELLATIONS USED, YET LI R1,>FFFF LI R2,8NONEG MOV R1,*R0+ DEC R2 JNE NONEG*$ BL @JPVWTR SCREEN ON DATA >01E2& MOV @WHERE(R3),R10 GET DEST' B *R10 BRANCH TO DEST'FIPA CI R3,>1200 Q,Y OR BUTTON?% JEQ FIRE YES, SO FIRE CI R3,>0D00 . OR V?% JEQ FIRE YES, SO FIRE( JNE GOBRD NO, SO CONTINUE% B @INPTRT YES, SO EXIT%GOBRD BL @SCANKY SCAN FOR KEY( CLR R3 PREPARE FOR KEY MOVB @KEY,R3 COPY& CI R3,>FF00 KEY PRESSED ?** RETURN LINK IN R14 *********************************************$INPUT MOV R11,R14 SAVE RETURN, MOVB @H03,@KEYBRD CHECK THE KEYBOARDY BL @SCANKY CB @KEY,@H0F JNE INPBK B @BACK* FILE IS > I N P U T <'WHERE DATA DOWN LOGIC ROUTINES DATA BRDINC DATA BRDINC DATA BRDINC DATA BRDINC DATA UP,FNGLOC BYTE 18*8-1,16 LEFT ANSWER POINTER BYTE 19*8-1,16 BYTE 20*8-1,16" JMP BRDINC WRONG KEY#CHKJOY MOV @JOYY,@JOYY JOY MOVED?) JEQ BRDINC NO, SO TRY AGAIN" MOVB @JOYY,@JOYY JOY MOVED! JGT UP MOVED UP# JLT DOWN MOVED DOWN*  DATA SAL+8,2,MYWS+84 MOV @HILLOC(R3),VDPADD GET WHERE TO HIGHLIGHT) MOV VDPADD,@SAVHIL SAVE IN CPU. BL @CLRLV HIGHLIGHT THIS PHRASE# DATA 24*8,>F1F1 WITH BLACK)* W A I T F O R K E Y R E L E A S E ' SB @H01,@FING NO, SO MOVE UP*3MOVFNG MOV @SAVHIL,VDPADD WHERE WE JUST HIGHLIGHTED/ JEQ NOHIL IF ZERO, DON'T RESTORE4 BL @CLRLV UNHIGHLIGHT PREVIOUS ANSWER DATA 24*8,>F6F6*NOHIL MOVB @FING,R3 COPY  JNE ISNOT3 NO' B @GAME3 YES, SO DO IT!#ISNOT3 CB @WHCHGM,@H04 SCI GUESS? JNE ISNOT4 NO& B @GAME4 YES, SO DO IT+ISNOT4 B @CHKSCR CHECK SCORE SCREEN&************************************** * FILE IS > M A I N <&**************************************&* M A I N P L A Y I N G L O O P *&**************************************(PHLLPS CB @WHCHGM,@H00 MEET THE STARS? JNE ISNOT0 NO' B @GAME0 YES, SO DO IT! !DBNCE2 BL @SCANKY KEY DOWN( MOVB @JOYY,R0 JOY UP OR DOWN? JNE DBNCE2" CB @KEY,@HFF KEY DOWN? JNE DBNCE2 JMP BRDINC*&FIRE MOVB @H01,@FIRFLG SET FIRE FLAG JMP BRDINC  SRL R3,8 AJUST" SLA R3,1 MULT BY 2. MOV @FNGLOC(R3),R4 GET POINTER POSITION4 BL @WRTVCL WRITE LEFT HAND TO NEW SPOT DATA SAL+4,2,MYWS+8( AI R4,26*8 RIGHT HAND, TOO BL @WRTVCL +DOWN CB @FING,@H03 AT BOTTOM ALREADY?' JEQ BRDINC YES, SO IGNORE) AB @H01,@FING NO, SO MOVE DOWN$ JMP MOVFNG MOVE FINGER* UP MOVB @FING,@FING AT TOP?' JEQ BRDINC YES, SO IGNORE 'ISNOT0 CB @WHCHGM,@H01 COM/SCI MATCH? JNE ISNOT1 NO' B @GAME1 YES, SO DO IT!'ISNOT1 CB @WHCHGM,@H02 SCI/COM MATCH? JNE ISNOT2 NO' B @GAME2 YES, SO DO IT!&ISNOT2 CB @WHCHGM,@H03 COMMON GUESS? &**************************************&* RETURN POINT FOR MOVING SUBROUTINES*&**************************************INPTRT B *R14!&* GAME 0: MEET THE STARS *&************************************** GAME0 BL @SNDSUB PROMPT DATA PROMPT BL @PAUSE5 CLR @CONNUM ONLY SHOW FIRST CONSTELLATONGAME0L BL @PLOTC BL @NAMEC DATA LATIN!, JMP ANOTH1 AND ONE MORE SHOWN!*G1BAD BL @SNDSUB DATA RAZZ% BL @SHAKE SHAKE FINGER' AB @H01,@GUESS ONE MORE GUESS% CB @GUESS,@H01 FIRST GUESS?) JNE G1BAD2 NO, SECOND GUESS!4 BL @NAMEC SHOW COMMON MATCHING ANSWER DATA COMM"GAME11 BL @INPUT GET INPUT* CB @FIRFLG,@H01 FIRE KEY PRESSED?$ JNE GAME11 NO FIRE KEY' CB @FING,@MATCHC DID HE GET IT?! C @CONNUM,@CONMAX JL GAME0L B @BACK'***************************************'* GAME 1: COMMON TO SCIENTIFIC MATCH *'***************************************GAME1 BL @SNDSUB DATA PROMPT% BL @PAUSE WAIT FOR KEY! BL @SNDSUB DATA PROMPT BL @PAUSE BL @LINEC BL @NAMEC DATA COMM BL @DELAY DATA 4 BL @SNDSUB DATA PROMPT BL @PAUSE BL @DESCRC% DATA >F6F6 WHITE/LT RED!# BL @LINEC SHOW LINES" BL @DELAY AND DELAY! DATA 4 1 SECOND& JMP GAME11 AND TRY AGAIN*G1BAD2 BL @SNDSUB DATA RAZZ BL @SHAKE, BL @NAMEC SHOW CORRECT ANSWER!' JNE G1BAD NOT THIS GUESS*#G1GOOD BL @CLAP CLAP HANDS! AB @H01,@HITS GOT ONE!, BL @SHOWHM HOW HITS AND MISSED( BL @DELAY DELAY 4 SECONDS DATA 16!# MOVB @H00,@SHOWN NONE SHOWN0 CLR @HITS NONE HIT OR MISSED, YET CLR @CSHITS%GAME10 MOVB @H00,@GUESS NONE GUESSED* BL @GETCON GET CONSTELLATION3 DATA LATIN AND DISPLAYS LATIN ANSWERS! BL @SNDSUB DATA PROMPT BL @PAUSE BL @FILL BYTE 2,7,12,18 DATA >0101 BL @FILL BYTE 15,0,1,32 DATA >0000 BL @FILL BYTE 17,2,6,28 DATA >0606 INC @CONNUM", JMP ANOTH2 AND ONE MORE SHOWN!*G2BAD BL @SNDSUB DATA RAZZ BL @SHAKE' AB @H01,@GUESS ONE MORE GUESS% CB @GUESS,@H01 FIRST GUESS?) JNE G2BAD2 NO, SECOND GUESS# BL @LINEC SHOW LINES"3 DATA COMM AND DISPLAYS LATIN ANSWERS4 BL @NAMEC SHOW COMMON MATCHING ANSWER DATA LATIN"GAME21 BL @INPUT GET INPUT* CB @FIRFLG,@H01 FIRE KEY PRESSED?$ JNE GAME21 NO FIRE KEY" DATA PROMPT BL @PAUSE" B @BACK NEXT GAME'***************************************'* GAME 2: SCIENTIFIC TO COMMON MATCH *'***************************************GAME2 BL @SNDSUB DATA PROMPT" DATA LATIN+ BL @WRTVCL CLEAR HAND SPRITES DATA SAL+4,1,HC0 BL @WRTVCL DATA SAL+8,1,HC0 AB @H01,@MISSES BL @SHOWHM) BL @DESCRC SHOW DESCRIPTION DATA >F6F6 BL @DELAY"" BL @DELAY AND DELAY! DATA 4 1 SECOND& JMP GAME21 AND TRY AGAIN*G2BAD2 BL @SNDSUB DATA RAZZ BL @SHAKE, BL @NAMEC SHOW CORRECT ANSWER DATA COMM"' CB @FING,@MATCHC DID HE GET IT?' JNE G2BAD NOT THIS GUESS*G2GOOD BL @CLAP! AB @H01,@HITS GOT ONE!, BL @SHOWHM HOW HITS AND MISSED( BL @DELAY DELAY 4 SECONDS DATA 16"% BL @PAUSE WAIT FOR KEY# MOVB @H00,@SHOWN NONE SHOWN0 CLR @HITS NONE HIT OR MISSED, YET CLR @SCHITS%GAME20 MOVB @H00,@GUESS NONE GUESSED* BL @GETCON GET CONSTELLATION" DATA 4 BL @SNDSUB DATA PROMPT+ BL @PAUSE WAIT FOR KEY PRESS*(ANOTH1 AB @H01,@SHOWN ONE MORE SHOWN!" CB @SHOWN,@H0A 10 SHOWN? JL GAME10 NOT YET MOV @HITS,@CSHITS BL @SNDSUB"+ BL @WRTVCL CLEAR HAND SPRITES DATA SAL+4,1,HC0 BL @WRTVCL DATA SAL+8,1,HC0( AB @H01,@MISSES ONE MORE MISSED- BL @SHOWHM SHOW HITS AND MISSES) BL @DESCRC SHOW DESCRIPTION#3 DATA COMM AND DISPLAYS LATIN ANSWERS"GAME31 BL @INPUT GET INPUT* CB @FIRFLG,@H01 FIRE KEY PRESSED?$ JNE GAME31 NO FIRE KEY' CB @FING,@MATCHC DID HE GET IT?' JNE G3BAD NOT THIS GUESS*# MOV @HITS,@SCHITS BL @SNDSUB DATA PROMPT BL @PAUSE" B @BACK NEXT GAME'***************************************'* GAME 3: COMMON GUESS *'***************************************GAME3 BL @SNDSUB# BL @SNDSUB DATA PROMPT+ BL @PAUSE WAIT FOR KEY PRESS*(ANOTH3 AB @H01,@SHOWN ONE MORE SHOWN!" CB @SHOWN,@H0A 10 SHOWN? JL GAME30 NOT YET MOV @HITS,@CGHITS BL @SNDSUB DATA PROMPT#! DATA 4 1 SECOND& JMP GAME31 AND TRY AGAIN*G3BAD2 BL @SNDSUB DATA RAZZ BL @SHAKE, BL @NAMEC SHOW CORRECT ANSWER DATA COMM+ BL @WRTVCL CLEAR HAND SPRITES#G3GOOD BL @CLAP BL @NAMEC DATA COMM! AB @H01,@HITS GOT ONE!, BL @SHOWHM HOW HITS AND MISSED( BL @DELAY DELAY 4 SECONDS DATA 16, JMP ANOTH3 AND ONE MORE SHOWN!*G3BAD BL @SNDSUB# DATA PROMPT% BL @PAUSE WAIT FOR KEY# MOVB @H00,@SHOWN NONE SHOWN0 CLR @HITS NONE HIT OR MISSED, YET CLR @CGHITS%GAME30 MOVB @H00,@GUESS NONE GUESSED* BL @GETCON GET CONSTELLATION# DATA >F6F6 BL @DELAY DATA 4 BL @SNDSUB DATA PROMPT+ BL @PAUSE WAIT FOR KEY PRESS*(ANOTH2 AB @H01,@SHOWN ONE MORE SHOWN!" CB @SHOWN,@H0A 10 SHOWN? JL GAME20 NOT YET# DATA SAL+4,1,HC0 BL @WRTVCL DATA SAL+8,1,HC0( AB @H01,@MISSES ONE MORE MISSED- BL @SHOWHM SHOW HITS AND MISSES) BL @DESCRC SHOW DESCRIPTION DATA >F6F6 BL @DELAY DATA 4# DATA RAZZ BL @SHAKE' AB @H01,@GUESS ONE MORE GUESS% CB @GUESS,@H01 FIRST GUESS?) JNE G3BAD2 NO, SECOND GUESS# BL @LINEC SHOW LINES" BL @DELAY AND DELAY$ BL @PAUSE" B @BACK NEXT GAME'***************************************'* GAME 4: SCIENTIFIC GUESS *'***************************************GAME4 BL @SNDSUB DATA PROMPT% BL @PAUSE WAIT FOR KEY$+ BL @PAUSE WAIT FOR KEY PRESS*(ANOTH4 AB @H01,@SHOWN ONE MORE SHOWN!" CB @SHOWN,@H0A 10 SHOWN? JL GAME40 MOV @HITS,@SGHITS BL @SNDSUB DATA PROMPT BL @PAUSE" B @BACK NEXT GAME$& JMP GAME41 AND TRY AGAIN*G4BAD2 BL @SNDSUB DATA RAZZ BL @SHAKE, BL @NAMEC SHOW CORRECT ANSWER DATA LATIN+ BL @WRTVCL CLEAR HAND SPRITES DATA SAL+4,1,HC0 BL @WRTVCL$! AB @H01,@HITS GOT ONE!, BL @SHOWHM HOW HITS AND MISSED( BL @DELAY DELAY 4 SECONDS DATA 16, JMP ANOTH4 AND ONE MORE SHOWN!*G4BAD BL @SNDSUB DATA RAZZ BL @SHAKE$# MOVB @H00,@SHOWN NONE SHOWN0 CLR @HITS NONE HIT OR MISSED, YET CLR @SGHITS%GAME40 MOVB @H00,@GUESS NONE GUESSED* BL @GETCON GET CONSTELLATION3 DATA LATIN AND DISPLAYS LATIN ANSWERS$&**************************************&* RECORD YOUR SCORE SCREEN. *&**************************************SCRPLC BYTE 6,20,6,27 BYTE 8,20,8,27 BYTE 10,20,10,27 BYTE 12,20,12,27*%CHKSCR BL @CLRVDP CLEAR SCREEN$ DATA SAL+8,1,HC0( AB @H01,@MISSES ONE MORE MISSED- BL @SHOWHM SHOW HITS AND MISSES) BL @DESCRC SHOW DESCRIPTION DATA >F6F6 BL @DELAY DATA 4 BL @SNDSUB DATA PROMPT$' AB @H01,@GUESS ONE MORE GUESS% CB @GUESS,@H01 FIRST GUESS?) JNE G4BAD2 NO, SECOND GUESS# BL @LINEC SHOW LINES" BL @DELAY AND DELAY! DATA 4 1 SECOND$"GAME41 BL @INPUT GET INPUT* CB @FIRFLG,@H01 FIRE KEY PRESSED?$ JNE GAME41 NO FIRE KEY' CB @FING,@MATCHC DID HE GET IT?' JNE G4BAD NOT THIS GUESS*G4GOOD BL @CLAP BL @NAMEC DATA LATIN%(* SUBROUTINE TO SHOW HITS AND MISSES. *(* RETURN LINK IS R12 *(****************************************$SHOWHM MOV R11,@TEMP1 SAVE RETURN% MOVB @HITS,R14 GET #OF HITS SRL R14,8 ADJUST%) AI R8,>30 ADD ASCII OFFSET& SLA R8,3 MULTIPLY BY 8. AI R8,RAMSET POINTS TO DATA NEEDED*' MOV R6,VDPADD WHERE TO WRITE& MOV R8,WLOC WHAT TO WRITE* LI WCOUNT,8 HOW MANY TO WRITE% DATA OPT5,>F0F0*) LI R3,8 8 SCORES TO SHOW- LI R4,SCRPLC START FROM THE FIRST$ LI R5,CSHITS R5 IS INDEX* !CKSCRL MOVB *R4+,R6 HAVE ROW$ MOVB *R4+,R7 HAVE COLUMN% DATA PDT,>1800,0 BL @CLRVDP DATA CT,>1800,>F0F0* BL @WRTMSG HEADING BYTE 2,2 DATA RECSCR,>F0F0* BL @WRTMSG BYTE 4,18 DATA HITM,>F0F0* BL @WRTMSG BYTE 4,25%; SLA R14,5 MULTIPLY BY 32 = POINTS TO PATTERN AI R14,NUMS LI R12,8*256 ROW 8 LI R13,2*256 COLUMN*. BL @PUT4 PUT 4 CHARS ON SCREEN*) MOVB @MISSES,R14 GET #OF MISSES%, BL @VDP WRITE A SCORE DIGIT* DEC R3 DONE? JNE CKSCRL NOT YET** BL @SNDSUB NOW WAIT FOR KEY DATA PROMPT BL @PAUSE B @BACK(****************************************%! ANDI R6,>FF00 ROW *256# SRL R7,8 ADJUST COL& SLA R7,3 MULTIPLY BY 87 A R7,R6 R6 HAS SCREEN ADDRESS TO WRITE*( MOVB *R5+,R8 GET SCORE VALUE SRL R8,8 ADJUST% DATA MISSM,>F0F0* BL @WRTMSG BYTE 6,1 DATA OPT2,>F0F0* BL @WRTMSG BYTE 8,1 DATA OPT3,>F0F0* BL @WRTMSG BYTE 10,1 DATA OPT4,>F0F0* BL @WRTMSG BYTE 12,1% SRL R14,8 ADJUST; SLA R14,5 MULTIPLY BY 32 = POINTS TO PATTERN AI R14,NUMS LI R12,8*256 ROW 8 LI R13,28*256 COLUMN*. BL @PUT4 PUT 4 CHARS ON SCREEN* MOV @TEMP1,R11&# BL @HRC CALL HCHAR, BYTE 1,>F1 1 REP, RED ON TRANS' MOV @TEMP3,R11 RESTORE RETURN) RT RETURN TO CALLER******************************* CLAP HANDS. RETURN IS R13. *& BL @MOVEEM! AI R12,1*256 NEXT ROW# AI R13,-1*256 BACK 1 COL# AI R14,8 NEXT DATA BL @MOVEEM! AI R13,1*256 NEXT COL# AI R14,8 NEXT DATA BL @MOVEEM* MOV @TEMP2,R11&*SHAKL0 MOV R6,R1 MOVE HAND SPRITES. BLWP @JPVSBW FIRST POSITION LI R2,>3000 SHKDL1 DEC R2 JNE SHKDL1 MOV R7,R1 BLWP @JPVSBW LI R2,>3000 SHKDL2 DEC R2 JNE SHKDL2&3 BL @WRTVCL RESTORE SPRITES TO NORMAL! DATA SAL,13,SALINI) B *R13 RETURN TO CALLER******************************* SHAKE FINGER. RETN IS R13. *******************************"SALSHK BYTE 59,126,>94,>0F,>D0,>00*&******************************$CLAP MOV R11,R13 SAVE RETURN LI R5,7 5 CLAPS**CLAPL0 BL @WRTVCL MOVE HAND SPRITES, DATA SAL,13,SALCL1 FIRST POSITION BL @SNDSUB DATA CLAPS LI R0,>3000& RT********************** MOVE REGISTERS **********************$MOVEEM MOV R11,@TEMP3 SAVE RETURN! MOV R12,R5 COPY ROW$ MOV R13,R6 COPY COLUMN% MOV R14,R7 COPY ADDRESS& RT*************************** PUT 4 DIGITS ON SCREEN ***************************$PUT4 MOV R11,@TEMP2 SAVE RETURN. BL @MOVEEM MOVE REGISTERS NEEDED$ AI R13,1*256 NEXT COLUMN" AI R14,8 NEXT DATA&$SHAKE MOV R11,R13 SAVE RETURN! LI R5,4 4 SHAKES- BL @WRTVCL PLACE HAND ON SCREEN DATA SAL,5,SALSHK LI R6,>9400 UP LI R7,>9800 DOWN$ LI VDPADD,SAL+2 VDP ADDRESS*& CLPDL1 DEC R0 JNE CLPDL1 BL @WRTVCL DATA SAL,13,SALCL2 LI R0,>3000 CLPDL2 DEC R0 JNE CLPDL2* DEC R5 DONE WITH 5 CLAPS JNE CLAPL0 NOT YET*', DEC R5 DONE WITH 4 SHAKES? JNE SHAKL0 NOT YET*3 BL @WRTVCL RESTORE SPRITES TO NORMAL! DATA SAL,13,SALINI) B *R13 RETURN TO CALLER'# DATA >E070,>3030,>3070,>E0C0*9 DATA >0000,>FFFF,>0000,>0103 DATA PER '7'# DATA >0000,>F0F0,>70E0,>C080# DATA >070E,>1C38,>3030,>3030# DATA >0000,>0000,>0000,>0000*'9 DATA >0000,>0103,>070F,>1D39 DATA PER '4'# DATA >0000,>8080,>8080,>8080# DATA >71E1,>FFFF,>0101,>0101# DATA >8080,>F0F0,>8080,>8080*9 DATA >0000,>FFFF,>C0C0,>C0FF DATA PER '5''# DATA >0000,>0000,>0000,>0000# DATA >0606,>0606,>0606,>3F3F# DATA >0000,>0000,>0000,>C0C0*9 DATA >0000,>3F7F,>E0C0,>0000 DATA PER '2'# DATA >0000,>80C0,>E060,>60E0# DATA >0307,>1E3C,>70E0,>FFFF'* FILE IS > N U M S <(****************************************(* *(* SPECIAL CHARACTERS FOR SCORE ROUTINE *(* *(*****************************************'9 DATA >0000,>3F7F,>E0C0,>E070 DATA PER '8'# DATA >0000,>C0E0,>7030,>70E0# DATA >3F3F,>70E0,>C0E0,>7F3F# DATA >C0C0,>E070,>3070,>E0C0*9 DATA >0000,>3F7F,>E0C0,>C0C0 DATA PER '9''# DATA >0000,>F0F0,>0000,>00C0# DATA >FF00,>0000,>C0E0,>7F3F# DATA >E070,>3030,>3070,>E0C0*9 DATA >0000,>3F7F,>E0C0,>C0DF DATA PER '6'# DATA >0000,>C0E0,>7030,>00C0# DATA >FFF0,>C0C0,>C0E0,>7F3F'# DATA >C080,>0000,>0000,>F0F0*9 DATA >0000,>7FFF,>E0C0,>0001 DATA PER '3'# DATA >0000,>C0E0,>7030,>E0C0# DATA >0F0F,>0000,>C0E0,>7F3F# DATA >80C0,>E070,>3070,>E0C0*'9NUMS DATA >0000,>3F7F,>E1C3,>C3C7 DATA PER '0'# DATA >0000,>80C0,>E0E0,>6060# DATA >CECE,>DCD8,>F8F0,>7F3F# DATA >6060,>6060,>60E0,>C080*9 DATA >0000,>060E,>1E06,>0606 DATA PER '1'