; LOGO.S ; THIS FILE CONTAINS THE ROUTINE FOR STARTING UP THE LOGO, "MKLOGO" ; AND ALSO THE LOOP WHICH POLES THE FIRE BUTTON TO SEE IF ; I SHOULD JUMP INTO STATPLAY AGAIN. GLBL LOGO GLBL DRAWLOGO GLBL MKHISCOR ; IN "HISCORE.S" GLBL MKAUTO GLBL CLEARALL GLBL POLLALL GLBL DWORDL,DWORDH,DWORDLEN ; USED IN "HISCORE" MKLOGO LDA #FALSE ; NO MLOADER IN LOGO MODE STA RUNLOAD STA SELREADY LDX #$FF ; RESET STACK POINTER TXS LDA #STATLOGO STA STATUS LDA #MLOGO STA MODE NEWSTATE LOGO INX ; MAKE SURE PLAYER 0 JOYSTICK IS USED STX CURRENT STX SCORELST+1 STX STATLIST+1 STX NUMCYCLE INX STX MAXCYCLE INX now is 2 STX SYSCOUNT+1 LDA #$58 ; STAY HERE FOR 10 SECONDS STA SYSCOUNT ONSCREEN wait for onscreen, then INVBLANK off screen JSR DRAWLOGO ; SET UP THE LOGO ITSELF LDA #$19 ; COLORS FOR TEXT STA COLORS+20 palette 5 LDA #$15 STA COLORS+21 LDA #$1F STA COLORS+22 LDA #8 ; LOGO DLISTS-- EACH WITH TWO ENTRIES STA LISTSTRT+8 STA LISTSTRT+9 ; NOW, SET UP THE HEADERS USED BY MENU SELECT. THESE (FOR NOW) ARE IN ; DLIST3 (DIFFICULTY) AND DLIST4 (PLAYNUM) ; NOTE: ALSO THERE IS THE COPYRIGHT MESSAGE ; PUT BLANKS IN THE CHARACTER MAPS: ; (ALL THREE, LENGTHS 13,14, AND 15) LDX #$2A LDA #NULL2 MKLOLP0 STA TXTLIST1,X DEX BNE MKLOLP0 LDA #L(TXTLIST1) ; COPYRIGHT, CENTERED AT BOTTOM STA DLIST0 LDA #$60 STA DLIST0+1 LDA #H(TXTLIST1) STA DLIST0+2 LDA #$B3 ; PALETTE 5, 13 LENGTH STA DLIST0+3 LDA #$20 STA DLIST0+4 LDX #11 LCOPYLP LDA COPYTXT,X STA TXTLIST1,X DEX BPL LCOPYLP LDA #L(TXTLIST2) STA DLIST3 LDA #$60 STA DLIST3+1 LDA #H(TXTLIST2) STA DLIST3+2 LDA #$B4 ; 12 CHARACTERS; PALETTE 5 STA DLIST3+3 LDX HOWHARD LDA DWORDPOS,X ; HPOS STA DLIST3+4 LDA DWORDL,X ; COPY WORD INTO "TXTLIST2" STA TEMP0 LDA DWORDH,X use stack for indirect STA TEMP1 LDY DWORDLEN,X LDIFFLP LDA (TEMP0),Y STA TXTLIST2,Y DEY BPL LDIFFLP ; NUMBER OF PLAYERS WILL SWITCH BETWEEN DLIST2 AND DLIST4. SETUP ; EVERYTHING THE SAME EXCEPT FOR THE SECOND BYTE. LDA #$60 LDX PLAYNUM BEQ LCOPYLP1 ; IF ONE PLAYER STA DLIST4+1 ; IF TWO PLAYER LDA #0 STA DLIST2+1 playnum must be 1 BEQ LCOPYLP2 jump LCOPYLP1 STA DLIST2+1 STX DLIST4+1 x is 0 LCOPYLP2 LDA #L(TXTLIST3) STA DLIST2 ; "ONE PLAYER" IN "DLIST2" STA DLIST4 LDY #2 LLOOP22 LDA LLTABLE,Y this loop stores to this header STA DLIST2+2,Y the values #H(txtlist3),#$b4,#$28 STA DLIST4+2,Y DEY BPL LLOOP22 ; PLAYNUM is in X AALOGO LDA PWORDL,X ; PLACE IN "TXTLIST3" STA TEMP0 LDA PWORDH,X STA TEMP1 LDY #9 LPLAYLP LDA (TEMP0),Y STA TXTLIST3,Y DEY BPL LPLAYLP INY FALSE is 0 STY DOITOVER LDA #30 ; DE-BOUNCE BEFORE FIRST SWITCH STA THRWTIME JSR SCRAPALL ; JSR DPPINIT ; TURN DMA ON ENDCYCLE ; THIS WILL ALSO BE CALLED FROM "HISCORE.S" DRAWLOGO LDA #$37 ; PROPER COLORS FOR PALETTE 6 STA COLORS+24 LDA #$35 STA COLORS+25 LDA #$33 STA COLORS+26 JSR CLRSTRCT JSR CLEARALL ; SIMILAR TO "CLRSCRN" BUT MORE SO LDA #LOGOTOP1 STA FSTAMP LDA #LOGOTOP2 STA FSTAMP+1 LDA #LOGOBOT1 STA FSTAMP+2 LDA #LOGOBOT2 STA FSTAMP+3 LDA #159 ; TOP OF ZONE 9 STA FYPOS STA FYPOS+1 LDA #143 STA FYPOS+2 ; TOP OF ZONE 8 STA FYPOS+3 LDA #BLOCK2 STA FHSTAMP STA FHSTAMP+1 STA FHSTAMP+2 STA FHSTAMP+3 LDA #LOGOPW1 STA FPALW STA FPALW+2 ; LEFT HALVES LDA #LOGOPW2 STA FPALW+1 STA FPALW+3 ; RIGHT HALVES LDA #24 STA FXPOS STA FXPOS+2 ; LEFT HALVES LDA #88 STA FXPOS+1 STA FXPOS+3 ; RIGHT HALVES JMP FLOADER ; LOAD INTO PROPER DLISTS ; same as JSR followed by RTS ; GOD COMES HERE DURING TITLE PAGE LOGO LDA HTHROW ; ACTUAL CONTROLLER VALUE ; BPL LOGCONT0 ; IF "THROWBUT == FALSE" BMI NEWGAME1 ; ELSE, BUTTON IS DOWN: START GAME LOGCONT0 LDX FPRESET ; IF RESET WAS PUSHED, GO TO GAME BPL LOGCONT2 INX from $ff to 0 STX RESREADY "false" NEWGAME1 JMP NEWGAME ; DO THE GAME OPTION SELECT BY POLLING THE JOYSTICK: ; NOTE: ALSO POLL THE SELECT SWITCH, AT THE SAME DEBOUNCE RATE. LOGCONT2 LDA THRWTIME BEQ LSELTEST ; IF ZERO, STAY HERE WAITING FOR A DEC THRWTIME ; BUTTON JMP LOGCONT1 LSELTEST LDX FPSELECT ; SELECT SWITCH BEQ LLTEST ; IF IT'S NOT PRESSED INX from $ff to 0 STX SELREADY "false" ; THERE ARE REALLY 8 "STATES" OR GAME OPTIONS-- 4 DIFFICULTY LEVELS ; TIMES 2 PLAYNUM VALUES. THUS THE FOLLOWING LOGIC-- LDX HOWHARD LDA PLAYNUM BEQ LSTEST00 ; 1 PLAYER-- FIRST HALF OF TABLES TXA ; 2 PLAYER CLC ADC #4 TAX LSTEST00 LDA SELNUM,X ; NEW PLAYNUM STA PLAYNUM LDA SELDIFF,X ; NEW DIFFICULTY STA HOWHARD BPL LLOVER ; RESET 10-SECOND TIMER ;a jump LLTEST LDX PLAYNUM LDY HOWHARD LDA HJOYDIR BEQ LLUP CMP #2 BEQ LLRIGHT CMP #4 BEQ LLDOWN CMP #6 BEQ LLLEFT CMP #8 BNE LLOVER ; IF NOT CENTERED, RESET SYSCOUNT JMP LOGCONT1 ; ELSE DECREMENT LLUP LDA UPNUM,X STA PLAYNUM BPL LLOVER LLDOWN LDA DOWNNUM,X STA PLAYNUM BPL LLOVER LLRIGHT LDA RIGHTNUM,Y STA HOWHARD BPL LLOVER LLLEFT LDA LEFTNUM,Y STA HOWHARD ; IF ANY OPTION IS CHANGED, THE CODE WILL COME HERE. ZERO OUT THE PLAYER ; SCORES-- AND RESET THE DEBOUNCE COUNTER LLOVER LDA #30 STA THRWTIME LDX #3 LDA #0 LLSC0LP STA PL0SCORE,X STA PL1SCORE,X DEX BPL LLSC0LP LDA #2 ; IF JOYSTICK WAS PUSHED, 10 MORE STA SYSCOUNT+1 ; SECONDS LDA #$58 STA SYSCOUNT LDX #$1C ; ZERO OUT DIFFICULTY AND PLAYNUM LDA #NULL2 LLLOOP0 STA TXTLIST2,X DEX BPL LLLOOP0 LDX HOWHARD ; UPDATE DIFFICULTY WORD LDA DWORDL,X ; COPY WORD INTO "TXTLIST2" STA TEMP0 LDA DWORDH,X STA TEMP1 LDA DWORDPOS,X STA DLIST3+4 ; HPOS LDY DWORDLEN,X LLDIFFLP LDA (TEMP0),Y STA TXTLIST2,Y DEY BPL LLDIFFLP LDX PLAYNUM ; UPDATE NUMBER OF PLAYERS WORD AALOGO1 LDA PWORDL,X STA TEMP0 LDA PWORDH,X ; PLACE IN "TXTLIST3" STA TEMP1 LDY #9 LLPLAYLP LDA (TEMP0),Y STA TXTLIST3,Y DEY BPL LLPLAYLP LDA #$60 ; WILL BE PLACED IN THE LUCKY DLIST LDX PLAYNUM ; PLACE IN PROPER DLIST BEQ LLPLAY01 ; ONE PLAYER STA DLIST4+1 ; FOR TWO PLAYER DEX playnum must be 1 STX DLIST2+1 store 0 LCJMP JMP LOGCONT2 LLPLAY01 STA DLIST2+1 LDA #0 STA DLIST4+1 BEQ LCJMP ; SKIP OVER THIS TEST LOGCONT1 LDX SELREADY BEQ LOGCONT3 ; STILL UP-- DON'T RESET DEBOUNCE LDA HJOYDIR CMP #8 BNE LOGCONT3 ; STILL PUSHED-- DON'T RESET INX ; MAKE SURE THAT THE FIRST PUSH STX THRWTIME ; REGISTERS IMMEDIATELY ; selready must have been $ff-- ; store 0 to thrwtime LOGCONT3 LDA SYSCOUNT ; DEC TIMER AND TEST SEC SBC #1 STA SYSCOUNT LDA SYSCOUNT+1 SBC #0 STA SYSCOUNT+1 BNE LOGOBYE LDA SYSCOUNT BNE LOGOBYE AENDLOGO LDX #0 ; DO ALL FOUR DIFFICULTY LEVELS AENDLOOP STX TEMP4 JSR MKHISCOR DMAOFF JSR POLLALL find out if any switches are down LDY #FALSE LDA FPRESET BNE LEAVE1 LDA FPSELECT BNE LEAVE2 LDA HTHROW BNE LEAVE3 LDA HJOYDIR CMP #$08 BNE LEAVEIT LDX TEMP4 POLLALL trashes X INX CPX #4 BMI AENDLOOP JSR HSCRTN JSR MKAUTO ENDCYCLE LEAVEIT JSR HSCRTN JSR MKLOGO LEAVE1 STY RESREADY JMP LEAVE LEAVE2 STY SELREADY BNE LEAVE ; same as JMP LEAVE3 STY THREADY LEAVE JSR HSCRTN clean-up after HSC is done JMP NEWGAME LOGOBYE ENDCYCLE ; USED TO ERASE ALL DLISTS CLEARALL ONSCREEN INVBLANK LDX #10 ZCLRA00 LDA LISTTABL,X STA LISTPTR LDA LISTTABH,X STA LISTPTR+1 LDY #0 STY LISTSTRT,X STY LISTSIZE,X ZCLRA01 LDA #0 STA (LISTPTR),Y INY CPY #LISTLENG ; LENGTH OF A DLIST BNE ZCLRA01 DEX ; GO TO NEXT DLIST BPL ZCLRA00 RTS LLTABLE DB H(TXTLIST3),$B4,$28