
*************************************
*
* 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

