.PAGE 'WES001' ;+++++++++++++++++++++++++++++++++ ; MAIN ROUTINE ;+++++++++++++++++++++++++++++++++ *=$E000 ; ;---------- POWER ON START -------------- SSTART SEI ;IRQ DISABLE CLD LDX #$FF TXS ;STACK INITIALIZE IOINIT ; ;-------- VIC INITIALIZE LDX #46 SETVIC LDA VICTBL,X STA VIC,X DEX BPL SETVIC ; ;-------- SID INITIALIZE LDX #24 SETSID LDA SIDTBL,X STA SID,X DEX BPL SETSID ; ;-------- ZERO ,2 ,3 PAGE INITIALIZE LDX #0 TXA RAMINI STA $0002,X STA $0200,X STA $0300,X INX BNE RAMINI ;------------------------------------------------------- ; GAME START ;------------------------------------------------------- MAIN JSR TITCRT ;PROGRAM START SETTING SUB CALL JSR SETIN1 ;PROGRAM START SETTING SUB CALL LOOPST JSR SETIN2 ;FLAG SETTING DIEST JSR SCRSET ;SCREEN SETTING JSR SET06 LDA #$1F STA SIGVOL LDA #01 JSR SOUND LDA SPSPCL ;--------------- PROGRAM LOOP START --------------- CICLE ;CICLE DECREMENT LDA SCROLY ;SYNC WITH RASTER BPL CICLE JSR SET7F8 ;USED DBG LDA SPSPCL ;GET COLLISION STA COLLSS ;SP -- SP LDA SPBGCL ;SP -- BAK STA COLLSC ; ;======= TIMER LOADING ======= TIMER INC TIMSL ;GAME START TO 20 SET OF SLOW LDA TIMSL BNE TIM2 INC TIMER1 LDA #5 CMP TIMER1 BNE TIM2 LDA #02 JSR SOUND DEC SPUP ;SPEED UP FLAG SET ACTIVE 'FF' TIM2 LDA TIMER1 CMP #$10 BCC TIM3 JSR WOLMS TIM3 JSR PLBUL ;PLAYER BEEM JSR PLAYER JSR WOLMS ;ENEMYS MOVE ROUTINE JSR ENEMM ;ENEMYS SET JSR COLLCH ;COLLISION CHECK ROUTINE JSR EXPLO ;EXPLO SUB JSR SOUNDM ;MUSIC SUB ;======= PLAYER DIE AND SCREEN CLEAR PROCESS ========= DIE LDA DIW0 ;PLAYER OF DIE TO GAME END TEST CMP #DIES BEQ DIE2 LDA CLW ;WOR ALL KILL CHECK BNE CICLE LDA DIW0 BMI DIE2 JMP BONOUT DIE2 DEC PLRST ;GAME END TEST BNE DIEST JMP REPLAY ;PLAYER NO REMAIND TO REPLAY ROUTINE ;---------------------------------------------------- ; KEYBOARD DATA (F1) READ ROUTINE ;---------------------------------------------------- RDFKEY LDX #$FF STX CIDDRA ;SET DATA DIRECTION A INX ;X=0 STX CIDDRB ;SET DATA DIRECTION B LDY #00 LDX #$FE ;COLUMN 0 JSR RDROW CPX #$EF ;ROW 4 F1 ? BNE RDF090 ;YES INY ;PUSH F1 KEY RDF090 RTS ;---------------------------------------------------- ; KEYBOARD DATA (A,L,;,.,P)READ ;---------------------------------------------------- RDKEY LDX #$FF STX CIDDRA ;SET DATA DIRECTION A INX ;X=0 STX CIDDRB ;SET DATA DIRECTION B RDK010 LDA #$1F ;MAKE BIT SAME JOY. LDX #$DF ;COLUMN 5 JSR RDROW CPX #$FB ;ROW 2 L ? BNE RDK020 ;NO AND #$FB ;LEFT SET BNE RDK080 RDK020 CPX #$FD ;ROW 1 P ? BNE RDK030 ;NO AND #$FE ;UP SET BNE RDK080 RDK030 CPX #$EF ;ROW 4 . ? BNE RDK040 ;NO AND #$FD ;DOWN SET BNE RDK080 RDK040 LDX #$FD ;COLUMN 1 JSR RDROW CPX #$FB ;ROW 2 A ? BNE RDK050 ;NO AND #$EF ;FIRE BIT ON! BNE RDK080 RDK050 LDX #$BF ;COLUMN 6 JSR RDROW CPX #$FB ;ROW 2 ;? BNE RDK080 ;NO AND #$F7 ;RIGHT SET RDK080 STA SCANFL RDK090 JMP RDJOY ;---------------------------------------------------- ; KEYBOARD ROW READ TO (X-REG) ;---------------------------------------------------- RDROW STX CIAPRA ;COLUMN OUT RDR010 LDX CIAPRB ;ROW INPUT CPX CIAPRB BNE RDR010 RTS ;---------------------------------------------------- ; JOYSTICK DATA READ ROUTINE ;---------------------------------------------------- RDJOY LDX #00 STX FIRE STX CIDDRA STX CIDDRB ;SET DATA DIRECTION RDJOY0 LDA CIAPRB CMP CIAPRB BNE RDJOY0 AND SCANFL RDJ010 TAY ;SAVE BIT DATA AND #$10 ;FIRE PRESSED? BNE RDJ020 ;NO LDA #$80 STA FIRE ;YES FIRE BIT ON BNE RDJ060 ;JMP RDJ020 TYA AND #%00000010 ;DOWN ? BNE RDJ030 ;NO LDX #DOWN BNE RDJ060 ;JMP RDJ030 TYA AND #%00000001 ;UP ? BNE RDJ040 ;NO LDX #UP BNE RDJ060 ;JMP RDJ040 TYA AND #%00000100 ;LEFT ? BNE RDJ050 ;NO LDX #LEFT BNE RDJ060 ;JMP RDJ050 TYA AND #SP3SET ;RIGHT? BNE RDJ060 ;NO LDX #RIGHT RDJ060 STX INDRCF RTS ;*--------------------------------------------------* ;* WAIT A FEW SEC. (16MS * X) * ;*--------------------------------------------------* WAIT LDA SCROLY ;GET SYNC BPL WAIT TYA PHA TXA PHA JSR SOUNDM PLA TAX PLA TAY WAIT10 LDA SCROLY ; BMI WAIT10 DEX BNE WAIT RTS ;*--------------------------------------------------* ;* CLEAR SCREEN & COLOR * ;*--------------------------------------------------* CLRCRT LDX #0 CLR010 LDA KOLOR ;CHRACTER COLOR SET STA COLRAM,X STA COLRAM+$100,X STA COLRAM+$200,X STA COLRAM+$300-24,X LDA #$00 ;SPACE STA SCREEN,X STA SCREEN+$100,X STA SCREEN+$200,X STA SCREEN+$300-24,X INX BNE CLR010 CLR020 CLR030 RTS SET7F8 LDX #8 S7F010 LDA SV07F8-1,X STA $07F8-1,X DEX BNE S7F010 LDX #8 S7F020 LDA SV07F8-1,X CMP $07F8-1,X BNE SET7F8 DEX BNE S7F020 RTS ;*--------------------------------------------------* ;* CHROUT : CHRACTER OUT .X(LOW) .Y(HIGH) * ;*--------------------------------------------------* CHROUT STX WK0 STY WK0+1 CHR010 LDY #00 STY WK5 ;OUT CHR. INDEX LDA (WK0),Y STA WK2 ;OUT ADDRESS LOW INY LDA (WK0),Y STA WK3 ;OUT ADDRESS HIGH CHR020 INY LDA (WK0),Y CMP #$FF BEQ CHR090 ;EXIT CMP #$FE BEQ CHR030 ;CHANGE OUT ADDRESS CMP #$FD BEQ CHR040 ;SELECT NEXT LINE STY WK4 ;Y SAVE LDY WK5 ;CHR. OUT INDEX STA (WK2),Y ;CHR. OUT INC WK5 LDY WK4 ;Y GET LDA WATCHR ;DISPLAY WAIT? BEQ CHR020 ;NO LDX #10 JSR WAIT JMP CHR020 CHR030 INY CLC ;(WK0,WK0+1)=Y+(WK0,WK0+1) TYA ADC WK0 STA WK0 LDA WK0+1 ADC #0 STA WK0+1 JMP CHR010 CHR040 CLC LDA WK2 ADC #40 STA WK2 LDA WK3 ADC #00 STA WK3 LDA #00 STA WK5 BEQ CHR020 ;JMP CHR090 LDA #00 STA WATCHR RTS ;------------------------- ; SCREEN MEIRO SETING ; (NAME : SCRSET) ;------------------------- ; ; MEMORY NAME YAKUWARI ; POINX ...............CENTER X LINE OF BIC 1CHR ; POINY ...............CENTER Y LINE OF BIC 1CHR ; COUNT ...............TATE OR YOKO COUNT OF 1CHR ; ADLS ................SCREEN NO (2 BYTE) LOW (+1 = HIGH) ; SCRSET LDA #CYAN STA KOLOR JSR CLRCRT ;CLEAR SCREEN LDX #