¢;SET VERTICAL BLANK VECTOR¢SETVBV EQU $E45C¢;VERTICAL BLANK TEXT VECTOR¢XITVBV EQU $E462¢;¢; --------------------------------¢; ZERO PAGE REGISTERS VARIABLES¢; --------------------------------¢;¢ ORG $CB¢VAR1 DB 0¢VAR2 DB 0¢VAR3 DB 0¢ADD1 DS 2¢ADD2 DS 2¢;¢;¢;¢; --------------------------------¢; PROGRAM STORAGE LOCATIONS¢; --------------------------------¢;¢ ORG $600¢PVERT DB 0,0,0,0¢MVERT DB 0,0,0,0¢POLDVERT DB 0,0,0,0¢MOLDVERT DB 0,0,0,0¢;¢;¢;PLAYER TABLE ADDRESS TABLE¢PLAYER¢ DB 0,0¢ DB 0,0¢ DB 0,0¢ DB 0,0¢;¢;MISSILE TABLE ADDRESS TABLE¢MISSILE¢ DB 0,0¢;¢;ON/OFF SWITCH¢SWITCH DB 0¢;¢;PLAYER IMAGE ADDRESS TABLE¢IMAGE¢ DW IMAGES0¢ DW IMAGE1¢ DW IMAGE2¢ DW IMAGE3¢;¢;IMAGE DEFINITION TABLE¢;¢; IMAGES¢IMAGE0 DB 0,0,0,0,0¢ DB 0,0,0,0,0¢IMAGE1 DB 0,0,0,0,0¢ DB 0,0,0,0,0¢IMAGE2 DB 0,0,0,0,0¢ DB 0,0,0,0,0¢IMAGE3 DB 0,0,0,0,0¢ DB 0,0,0,0,0¢;¢;PLAYER SIZE TABLE¢PSIZE DB 0,0,0,0¢; -------------------------------¢; INITIALIZE THE PM ROUTINE¢; -------------------------------¢;¢; THIS IS THE BASIC ENTRY POINT¢ PLA¢;¢; SETUP THE VERTICAL BLANK INTERUPT¢; JUMP VECTOR¢ LDX #HIGH VB¢ LDY #LOW VB¢ LDA #7¢ JSR SETVBV¢ RTS¢;¢; -------------------------------¢; VERTICAL BLANK ROUTINE (PM)¢; -------------------------------¢;¢VB¢ LDA SWITCH ;CHECK IF THE SWITCH IS ON¢ BNE VB1 ;IF NOT THEN JUST RETURN¢ JSR MPLOT ;CALL THE MISSILE PLOT ROUTINE¢ JSR PPLOT ;CALL THE PLAYER PLOT ROUTINE¢VB1 JMP XITVBV¢;¢;¢; THIS IS THE ROUTINE TO PLOT THE¢; PLAYERS¢PPLOT:¢ LDA #3 ;SET THE PLAYER COUNT¢ STA VAR1 ; AND SAVE IT IN VAR1¢PPLOT0:¢ LDX VAR1 ;GET THE CURRENT PLAYER NUMBER¢ LDA PVERT,X ;GET THE NEW Y¢ COOR¢ STA VAR3 ; AND SAVE IT IN VAR3¢ LDY POLDVERT,X ;GET THE OLD Y COOR¢ STA POLDVERT,X ;STORE THE NEW Y COOR AS THE OLD¢ LDA PSIZE,X ;GET THE SIZE OF THE CURRENT PLAYER¢ STA VAR2 ; AND STORE IT IN VAR2¢ TXA ;MULTIPLY THE PLAYER NUMBER¢ ASL A ; BY 2¢ TAX¢ LDA PLAYER,X ;MOVE THE ADDRESS OF THE PLAYER¢ STA ADD1 ; TO THE TEMPORARY REGISTER (ADD1)¢ LDA PLAYER+1,X¢ STA ADD1+1¢ LDA IMAGE,X ;MOVE THE ADDRESS OF THE IMAGE¢ STA ADD2 ; TO THE TEMPORARY REGISTER (ADD2)¢ LDA IMAGE+1,X¢ STA ADD2+1¢; THIS SECTION OF CODE IS USED¢;TO ERASE THE PLAYER FROM HIS¢;OLD POSITION¢ LDX VAR2 ;LOAD X WITH THE SIZE OF THE PLAYER¢ LDA #0¢PPLOT1¢ STA (ADD1),Y ;STORE ZERO¢ DEY ;DECREMENT THE BYTE POSITION COUNTER¢ CPY #$FF¢ BEQ PPLOT2 ;IF EQUAL WE'VE HIT THE TOP OF THE PLAYER¢ DEX ;DECREMENT THE SIZE COUNTER¢ BPL PPLOT1 ;IF STILL POSITIVE ZERO THE NEXT BYTE¢;¢;THIS PART OF THE CODE IS USED TO¢;PLOT THE PLAYER 'N HIS NEW LOCATION¢PPLOT2¢ LDY VAR2 ;GET THE IMAGE OFF¢ SET¢ LDA (ADD2),Y ;GET THE NEXT IMAGE BYTE¢ LDY VAR3 ;GET THE PLAYER TABLE OFFSET¢ STA (ADD1),Y ;PUT THE IMAGE BYTE IN THE PLAYER TABLE¢ DEY ;DECREMENT THE PLAYER TABLE OFFSET¢ STY VAR3 ;STORE THE NEW PLAYER TABLE OFFSET¢ CPY #$FF ;IF THE NEXT BYTE WOULD BE OFF THE END¢ ;OF THE PLAYER THEN EXIT THE PLOT LOOP¢ BEQ PPLOT3¢ DEC VAR2 ;DECREMENT THE IMAGE OFFSET¢ BPL PPLOT2 ;IF WE HAVE NOT REACHED THE END THEN¢ ;LOOP AGAIN TO PLOT ANOTHER IMAGE BYTE¢PPLOT3¢ DEC VAR1 ;DECREMENT THE PLAYER COUNT¢ BPL PPLOT0 ;IF THERE IS STILL ANOTHER PLAYER THEN¢ ;LOOP AGAIN TO PLOT THE NEXT PLAYER¢ RTS¢;¢;¢MPLOT¢ LDX #3 ;LOAD X WITH THE MISSILE COUNT¢ LDA MISSILE ;PLACE THE ADDRESS OF THE MISSILE TABLE¢ ;IN THE TEMPORARY ADDRESS REGISTER¢ STA ADD1¢ LDA MISSILE+1¢ STA ADD1+1¢MPLOT0¢ LDY MOLDVERT,X ;GET THE OLD MISSILE LOCATION¢ LDA OFFTABLE,X ;TURN THE OLD IMAGE OFF¢ AND (ADD1),Y¢ STA (ADD1),Y¢ LDY MVERT,X ;GET THE NEW MISSILE LOCATION¢ LDA ONTABLE,X ;TURN THE NEW MISSILE IMAGE ON¢ ORA (ADD1),Y¢ STA (ADD1),Y¢ TYA ;MOVE THE NEW LOCATION TO THE OLD¢ ;MISSILE LOCATION TABLE FOR NEXT TIME¢ STA MOLDVERT,X¢ DEX ;DECREMENT THE MISSILE COUNTER¢ BPL MPLOT0 ;IF THERE IS STILL ANOTHER MISSILE¢ ;THEN LOOP TO PLOT THE NEXT MISSILE¢ RTS¢;¢ONTABLE DB $01,$0C,$20,$C0¢OFFTABLE DB $FC,$F2,$CF,$2F¢;¢;¢; --------------------------------¢; DUMMY ROUTINE (IGNORE)¢; --------------------------------¢;¢START¢ JMP ($0A)¢ END START¢