************************************* * * 7-FARBIGE PLAYERS OHNE DMA * * ASSEMBLER; ATMAS-II * * P. FINZEL 1987 ************************************* * * ZEROPAGE-ADRESSEN * VPOS0 EQU $F0 VERTIKALPOS. PLAYER 0 VPOS1 EQU $F1 V-POS. PLAYER 1 VPOS2 EQU $F2 V-POS. PLAYER 2 VPOS3 EQU $F3 V-POS. PLAYER 3 * * DARSTELLUNGS-FLAGS: * $FF = NOCH NICHT DARGESTELLT * 0-7 = DARSTELLUNG LAEUFT * 8 = ENDE * FLAG0 EQU $F4 FLAG1 EQU $F5 FLAG2 EQU $F6 FLAG3 EQU $F7 * VC EQU $F8 ZWISCHENSPEICHER F. VCOUNT * * OPERATING SYSTEM & HARDWARE * SDMCTL EQU $022F DMA-KONTROLLREG. HPOSP0 EQU $D000 HOR.-POSITION SIZEP0 EQU $D008 BREITE DER PLAYER GRAFP0 EQU $D00D FORMREGISTER COLPM0 EQU $D012 FARBE PLAYER GRACTL EQU $D01D GRAPHIK-KONTROLLREG. WSYNC EQU $D40A WAIT FOR HSYNC VCOUNT EQU $D40B NUMMER DER BILDZEILE SETVBV EQU $E45C ROUTINE INTERRUPTVEKTOR XITVBV EQU $E462 ABSCHLUSS DES VBI * ORG $A800 * JMP START * * HORIZONTAL-POSITIONEN * HPOS0 DFB 60 HPOS1 DFB 100 HPOS2 DFB 140 HPOS3 DFB 180 * * GESCHWINDIGKEITEN * VX DFB $FE,2,$FE,2 * ZAEHL DFB 0 HILFSZAEHLER * * ----------------------------------------------- * HAUPTPROGRAMM * ----------------------------------------------- * START LDA #30 VERTIKALE START- STA VPOS0 POSITIONEN FEST- LDA #50 LEGEN STA VPOS1 LDA #70 STA VPOS2 LDA #90 STA VPOS3 LDA #1 MITTLERE BREITE STA SIZEP0 FUER ALLE PLAYERS STA SIZEP0+1 AUSWAEHLEN STA SIZEP0+2 STA SIZEP0+3 LDA #0 GESAMTE DMA STA SDMCTL ABSCHALTEN LDA #0 DATENWEG VON ANTIC STA GRACTL ZU GTIA SPERREN LDY #VBIPGM:L VBI-ROUTINE LDX #VBIPGM:H STARTEN LDA #7 DEFERRED VBI JSR SETVBV RTS * * ----------------------------------------------- * VBI-ROUTINE * ----------------------------------------------- * VBIPGM CLD ZUR SICHERHEIT LDX #3 LOESCH LDA #0 STA GRAFP0,X FORMREGISTER LOESCHEN LDA HPOS0,X HORIZONTALE STA HPOSP0,X POSITIONEN FESTLEGEN LDA #$FF FLAGS AUF NOCH STA FLAG0,X NICHT DARGESTELLT DEX BPL LOESCH * * SORGT FUER BEWEGUNG: VPOSS WIRD GEMAESS * VX VERAENDERT * LDX ZAEHL WER IST DRAN? LDA VPOS0,X VPOS=VPOS+VX CLC ADC VX,X CMP #16 OBERE GRENZE? BCC INVERS CMP #112 UNTERE GRENZE? BCS INVERS STA VPOS0,X JMP ZAEHLER INVERS LDA VX,X GESCHWINDIGKEIT EOR #$FF INVERTIEREN STA VX,X INC VX,X ZAEHLER INC ZAEHL ZAEHLER AUF LDA ZAEHL NAECHSTEN PLAYER CMP #4 BNE NXTZEIL LDA #0 STA ZAEHL * * PHASE 1 DES KERNELS * NXTZEIL LDA VCOUNT VCOUNT ZWISCHEN- STA VC SPEICHERN LDX FLAG0 DARSTELLUNG? BPL PEND0 JA --> LDA VPOS0 NEIN, ANFANGS- CMP VC POSITION ERREICHT? BNE PL1 NEIN --> INX JA, FLAG ERHOEHEN PEND0 CPX #8 ENDE ERREICHT? BCS PL1 JA --> LDA STAB0,X NEIN, DANN FORM STA CS0+1 AUS SHAPE-TAB. LDA CTAB0,X UND FARBE AUS STA CC0+1 COLOR-TAB. INX FLAG WEITER STX FLAG0 UND MERKEN * * JETZT DAS GLEICHE SPIEL FUER PLAYER 1 * PL1 LDX FLAG1 BPL PEND1 LDA VPOS1 CMP VC BNE PL2 INX PEND1 CPX #8 BCS PL2 LDA STAB1,X STA CS1+1 LDA CTAB1,X STA CC1+1 INX STX FLAG1 * * EBENSO FUER PLAYER 2 * PL2 LDX FLAG2 BPL PEND2 LDA VPOS2 CMP VC BNE PL3 INX PEND2 CPX #8 BCS PL3 LDA STAB2,X STA CS2+1 LDA CTAB2,X STA CC2+1 INX STX FLAG2 * * EBENSO FUER PLAYER 3 * PL3 LDX FLAG3 BPL PEND3 LDA VPOS3 CMP VC BNE SEG2 INX PEND3 CPX #8 BCS SEG2 LDA STAB3,X STA CS3+1 LDA CTAB3,X STA CC3+1 INX STX FLAG3 *-------------------------------------- * PHASE 2: GEFUNDENE WERTE IN HARDWARE * REGISTER UEBERTRAGEN * ACHTUNG: DIE NULLEN WERDEN PER * PROGRAMM UEBERSCHRIEBEN *-------------------------------------- SEG2 STA WSYNC HOR.SYNCHRONISATION CS0 LDA #0 WERT NACH FORM- STA GRAFP0 REGISTER 0 CC0 LDA #0 WERT NACH FARB- STA COLPM0 REGISTER 0 CS1 LDA #0 STA GRAFP0+1 USW CC1 LDA #0 STA COLPM0+1 CS2 LDA #0 STA GRAFP0+2 USW CC2 LDA #0 STA COLPM0+2 CS3 LDA #0 STA GRAFP0+3 USW CC3 LDA #0 STA COLPM0+3 LDA VC BILDSCHIRMENDE CMP #120 ERREICHT? BEQ VBIENDE JA --> JMP NXTZEIL WEITER ==> * * JETZT IST DER VBI ZU ENDE! * VBIENDE JMP XITVBV VBI ENDE * *-------------------------------------- * FORM UND FARBTABELLEN *-------------------------------------- * PLAYER 0 * STAB0 DFB $18,$3C,$7E,$FF DFB $7E,$3C,$18,$00 CTAB0 DFB 4,8,12,14,12,5,4,0 * * PLAYER 1 * STAB1 DFB $7E,$3C,$18,$FF DFB $18,$3C,$7E,$00 CTAB1 DFB $4E,$4A,$38,$34 DFB $32,$44,$46,0 * * PLAYER 2 * STAB2 DFB $03,$07,$0F,$1F DFB $3F,$7F,$FF,$00 CTAB2 DFB $84,$88,$94,$98 DFB $A4,$A8,$A4,0 * * PLAYER 3 * STAB3 DFB $3C,$7E,$FF,$7E DFB $FF,$7E,$3C,$00 CTAB3 DFB $14,$28,$3C,$44 DFB $58,$6C,$74,0