home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
94xx
/
9403b.d64
/
spritedemo.asc
< prev
next >
Wrap
Text File
|
1995-03-30
|
23KB
|
913 lines
;---------------------------------------
; SPRITE MOVER
;---------------------------------------
; (W) IN 1991 BY INGO KUSCH
; SIMONSTR.9
; 4700 HAMM 3
; TEL:02381/464619
;---------------------------------------
; BEREICH : -X- : 456-480
; ------- (480-456) CLR !!!!
; -Y- : 40-240
;---------------------------------------
;ABKUERZUNGEN:
; 'SR' - SPRITE ROUTINE
; (MOVE-PROGRAMM)
; 'SD' - SPRITE DARSTELLUNG
; (SICHTBARMACHEN DER BEERECHNETEN
; SPRITES MIT FIRST & NEXT)
; ZW.SP. - ZWISCHEN SPEICHER
; S.O. - SIEHE OBEN
; S.U. - SIEHE UNTEN
; CLR - CLEAR = LOESCHEN
; SPR - SPRITE
; ADR - ADRESSE
; TAB - TABELLE
; TRK - TRACK
; NR - NUMMER
; ? - BEDINGUNGEN/ABFRAGEN
; ! - BEFEHLE/ANWEISUNGEN
;---------------------------------------
;--- SPRITE TABELLEN
BASE = $4000
INITTB = BASE
XPOS = BASE+30 ;POSITION X
YPOS = BASE+60 ; " Y
BLOCK = BASE+90 ;BLOCK NR
CONTROL = BASE+120 ;ON/MSB/COLOR
DELTAX = BASE+150 ;BEWEGUNG -X-
DELTAY = BASE+180 ; " -Y-
DELAY = BASE+210 ;COUNTDOWN
SINXHI = BASE+240 ;SINUS -X-
SINXLO = BASE+270
SINX1 = BASE+300
SINX2 = BASE+330
SINX3 = BASE+360
SINYHI = BASE+390 ;SINUS -Y-
SINYLO = BASE+420
SINY1 = BASE+450
SINY2 = BASE+480
SINY3 = BASE+520
ANITB = BASE+570 ;ANIMATION
ANICO = BASE+600
ANITCO = BASE+630
SPECLO = BASE+660 ;SPECIAL-PRGS
SPECHI = BASE+690
TRKLO = BASE+720 ;TRACK COUNT
TRKHI = BASE+750
TRKPO = BASE+780
ACCTX = BASE+810 ;BESCHLEUNIGUNG-X-
ACCTY = BASE+840 ; " -Y-
ACCT1 = BASE+870 ; " -ZEIT -X-
ACCT2 = BASE+900 ; " " -Y-
ZWISCH = BASE+930 ;BEELIEBIG
ZWISCH2 = BASE+960 ;NUTZBAR
ZWISCH3 = BASE+990 ; "
ZWISCH4 = BASE+1020 ; "
XPOS2 = BASE+1050 ;FUER 'SD'
YPOS2 = BASE+1080 ;NOTWENDIGE
CONTROL2 = BASE+1110 ;ZWISCHEN TABS
BLOCK2 = BASE+1140
YTAB = BASE+$0500 ;SORTIER TAB 1
SRTAB = YTAB+100 ; " " 2
SRTAB2 = YTAB+130 ; ZW.SP. 'SD'
SPFREE = YTAB+160 ;SORTIER TAB 3
;--- ZEROPAGE ADRESSEN
ADR = $02
MADR = $04
MRE = $06
XWERT = $08
YWERT = $09
CNTR = $0A
IREG = $0B
FSPR = $0C
SPR = $0D
SPR2 = $0E
SPR3 = $0F
ZWR = $10
ZWR2 = $11
MZWR = $12
MZWR2 = $13
BY = $14
MY = $15
SY = $16
TIME = $17 ;'UHR'
SPR21 = $1A
SPR31 = $1B
;--- MAKROS
SETIRQ .MACRO ;SETZT IRQ
LDA #<\1
STA $FFFE
LDA #>\1
STA $FFFF
.ENDM
FREE .MACRO ;GIBT IRQ FREI
ASL $D019
CLI
.ENDM
;--- MAIN PART
*= $0810
JMP INIT ;S.U.
;---------------------------------------
;* ACHTUNG ! DIE FOLGENDE ROUTINE WIRD
; VON DEN IRQ-PROGRAMMEN FIRST & NEXT
; ANGESPRUNGEN ! SIE STEHT HIER VORN,
; DAMIT SIE EINIGE TAKTZYKLEN SCHNELLER
; (BRANCHES NUR IN GLEICHE PAGE USW...)
;---------------------------------------
SET DEC SPR21 ;BRINGT DIE
BMI ST3 ;SPRS AUF
LDX SPR21 ;DEN SCREEN ...
LDY SRTAB2,X
LDA CONTROL2,Y ;FARBE
BPL SET ;NOCH AN ?!?!
LDX SPR
STA $D027,X
ASL A ;MSB HOLEN
ASL A
LDA $D010
AND TABB,X
BCC ST10 ;MSB - SETZEN
ORA TABC,X
ST10 STA $D010
LDA BLOCK2,Y ;BLOCK-NUMMER
ST4 STA $07F8,X
TXA
ASL A
TAX
LDA XPOS2,Y ;X-POSITION
STA $D000,X
LDA YPOS2,Y ;Y-POSITION
STA $D001,X
LDA SPR ;NEXT SPR
ADC #$01
AND #$07
STA SPR
RTS
TABB .BYTE $FE,$FD,$FB,$F7
.BYTE $EF,$DF,$BF,$7F
TABC .BYTE $01,$02,$04,$08
.BYTE $10,$20,$40,$80
ST3 PLA ;KEINE SPRS
PLA ;MEHR
#SETIRQ (FIRST) ;IRQ AN DEN
LDA $D011 ; ANFANG
AND #$7F ;RASTER
STA $D011 ; REFRESH
LDA #10
STA $D012
LDA SPR31
CMP #$08 ;ZURUECK NACH:
BCS ST31
JMP F3 ;FIRST ?!?
ST31 JMP N3 ;ODER NEXT ??
;---------------------------------------
;* EIGENTLICHER PROGRAMM BEGINN
;---------------------------------------
INIT SEI
LDA #$05 ;ROM AUS
STA $01
LDA #$00
STA $D020 ;BACKGROUND
STA $D021 ; COLORS
STA $DC0E ;ZEIT IRQS
STA $DC0D ;SPERREN
TAX
II1 LDA #$00
STA BASE,X ;REGISTER
STA BASE+$0100,X ;ZURUECK-
STA BASE+$0200,X ; SETZEN
STA BASE+$0300,X
STA BASE+$0400,X
STA BASE+$0500,X
LDA #$20
STA $0400,X ;BILDSCHIRM
STA $0500,X ;CLR !
STA $0600,X
STA $0700,X
DEX
BNE II1
LDX #30 ;DITO
LDA #$00
II2 STA $02,X ;ZEROPAGE
DEX
BPL II2
LDA #$FF ;MULTICOLOR
STA $D01C ;ON
LDA #$06 ;SPR
STA $D025 ; FARBEN
LDA #$01 ;SETZEN
STA $D026
START LDA #<NMI ;NMIS
LDX #>NMI ;AUFFANGEN
STA $FFFA
STX $FFFB
#SETIRQ (FIRST) ;RASTER-IRQ
LDA $D011 ; INIT...
AND #$7F ;RASTER MSB
STA $D011 ;CLR
LDA #20 ;RASTERZEILE
STA $D012 ;SETZEN
LDA #$81 ;RASTERIRQ
STA $D01A ; MASKIEREN
CLI ;FREIGABE
WAIT JSR MINIT ;SPR INIT
JSR TIMER ;HIER PLATZ FUER
JMP WAIT ;CHECK-ROUTINEN
;TIMER-ROUTINEN
;USW. AUSSERHALB
;DES IRQ !
;---------------------------------------
;* STELLT DIE ERSTEN ACHT SPRITES DAR
;---------------------------------------
FIRST STA A1+1 ;REGISTER
STX X1+1 ; RETTEN
STY Y1+1
INC BY ;ZEITTAKT
LDA BY
AND #$3F ;CIRCA JEDEN
BNE I1 ; 64. SCREEN
LDA TIME ; EINMAL
CLC ; TIME-COUNTER
ADC #1 ; ERHOEHEN !
STA TIME
BCC I1
INC TIME+1
I1
LDA SPR2 ;HIER WERDEN DIE
STA SPR21 ;VON DER 'SR'
LDA SPR3 ;BEARBEITETEN
STA SPR31 ;REGISTER IN
LDX #30 ;DIE FUER 'SD'
IN2 LDA XPOS,X ;NOTWENDIGEN
STA XPOS2,X ;COPIERT.
LDA YPOS,X
STA YPOS2,X ;DADURCH KANN
LDA CONTROL,X ;DIE BERECHNUNG
STA CONTROL2,X ;'SR' (FUER DEN
LDA BLOCK,X ;NAECHSTEN
STA BLOCK2,X ;DURCHLAUF)
LDA SRTAB,X ;PARALLEL MIT
STA SRTAB2,X ;'SD' ABLAUFEN,
DEX ;OHNE DASS BEIDE
BPL IN2 ;SICH STOEREN !
LDA #$00 ;SPR EIN!
STA SPR
LDX SPR31
F5 CPX #$09 ;MEHR ALS 8 ?
BCC F4
LDX #$08 ;DANN: ALLE AN!
F4 LDA TABD,X ;SONST: EVTL.
STA $D015 ; WENIGER!
JSR SET ;DIE OBERSTEN 8
JSR SET ;SPR DARSTELLEN!
JSR SET
JSR SET
JSR SET
JSR SET
JSR SET
JSR SET
LDA $D001 ;UNTERE KANTE
ADC #21 ;DES NAECHSTEN
STA $D012 ;SPRS NEUER
#SETIRQ (NEXT) ;RASTER-INIT !
F3 #FREE ;IRQ FREI
JSR MOVE ;'SR'
LDA #$00
STA $D020
A1 LDA #$00 ;REGISTER
X1 LDX #$00 ; RETTEN
Y1 LDY #$00
NMI RTI
;---------------------------------------
;* STELLT DIE WEITEREN SPRITES DAR !
;---------------------------------------
NEXT STA A2+1 ;S.O.
STX X2+1
STY Y2+1
N2 JSR SET ;'SD'
ASL A ;NOCH GENUG RAS-
TAX ;TER ZEIT BIS
LDA $D001,X ;ZUM NAECHSTEN
ADC #21 ;SPR, UM NOCH
STA ZWR ;EINEN IRQ AUS-
LDX $D012 ;ZULOESEN ???
INX
CPX ZWR
BCS N2 ;NEIN : N2
STA $D012 ;JA !
N3
A2 LDA #$00 ;S.O.
X2 LDX #$00
Y2 LDY #$00
#FREE
RTI
;---------------------------------------
;* EIGENTLICHE SPRITE-ROUTINE 'SR'
;---------------------------------SYNTAX
;ZUR BEWEGUNG & DARSTELLUNG DER SPRITES!
; úúúúúúúúúúúúúúúúúúúúúú
; ░└└└└└└└└└└└└«
; XXXX XXXX ▌CONTROL-BYTE▌
; ▌▌▌▌ ¡└└└└SPRITE FARBE ¡└└└└└└└└└└└└╜
; ▌▌▌¡└└└└└└1ST/2ND NIBBLE (SINUS)
; ▌▌¡└└└└└└└EXPLOSION ON/OFF
; ▌¡└└└└└└└└MSB
; ¡└└└└└└└└└SPRITE ON/OFF
;---------------------------------------
MOVE LDA MY ;FUER X/Y
EOR #$80 ;BEWEGUNG :
STA MY ;UP/DOWN HALF
;(S.U.)
LDX #30
MO2 LDA CONTROL,X
BPL YR5 ;SPR AN ?
;JA !
LDA #$00 ;ZWISCHENWERTE
STA XWERT ;LOSECHEN
STA YWERT
AN5 LDA ANITB,X ;ANIMATION ?
BNE AN51
JMP XS ;NEIN : S.U.
AN51 ASL A ;JA:AUSFUEHREN
DEC ANITCO,X
BPL AN21 ;NEXT STEP ?
TAY ;JA !
LDA ANITAB+2,Y ;WARTEZEIT
STA ANITCO,X ; RESTAURIEREN
LDA ANITAB,Y ;ADR
STA ADR ;HOLEN
LDA ANITAB+1,Y
STA ADR+1
LDY ANICO,X ;STEPNUMMER
AN3 LDA (ADR),Y ;BLOCK HOLEN
BNE AN2 ;BLOCK OK ?
STA ANICO,X ;NEIN:
TAY ;ANIMATION VON
BCC AN3 ;VORNE ?
LDA ANITB,X ;NICHT NOCHMAL!
AND #$3F ;EXPLOSION ?
BEQ AN8 ;JA : CLR
AN41 INC INITTB,X ;NEIN:NEXT INIT
LDA #$00 ;ANIM. FERTIG
STA ANITB,X
AN4 LDA CONTROL,X
ASL A
BPL AN42 ;MSB ?
LDA XPOS,X ;JA :
CMP #160 ; SPR CLR ?
BCC AN42 ; NEIN
CMP #200
BCS AN42 ; NEIN
BCC AN8 ;JA!
AN42 LDA YPOS,X ; SORTIERT SPR.
LSR A ; IN YTAB EIN
LSR A
CMP #10 ;SPR CLR ?
BCC AN8 ; JA
CMP #60
BCS AN8 ; JA
TAY ;NEIN
YR4 LDA YTAB,Y
BEQ YR3 ;PLATZ BESETZT?
INY ; JA:NEXT PLACE
CPY #60
BCC YR4 ; END OF TAB?
BCS YR5 ; JA: NEXT SPR
YR3 TXA
STA YTAB,Y ; EINSORTIEREN
BNE YR5
AN8 LDA #$00 ; SPR CLR!
STA CONTROL,X
YR5 DEX ; NEXT SPR
BEQ YR51 ; ALL READY ?
JMP MO2 ; NO
YR51 JMP SORT ; ALL READY !!
AN2 STA BLOCK,X ; NEW BLOCK
INC ANICO,X ; STEP FORWARD
AN21 BCC XS ; EXPLOSION ?
LDY #0 ; VIELLEICHT
LDA ANITB,X
AND #$3F
BNE XS ; EXPLOSION ?
JMP SETXY ; JA!
XS LDA CONTROL,X ; WEITER :
EOR #$10 ; FIRST/SEC.
STA CONTROL,X ; HALFBYTE
ASL A
ASL A
ASL A
STA SY ; SICHERN
LDA SINXHI,X ; SINUS IN
BEQ YS ; X-RICHTUNG ?
STA ADR+1 ; JA:ADR
LDA SINXLO,X ; HOLEN
STA ADR
LDY SINX1,X
LDA (ADR),Y ; WERT HOLEN
BIT SY ; 1ST/2ND
BMI XS2 ; HALFBYTE ?
LSR A ; FIRST
LSR A
LSR A
LSR A
XS2 AND #$0F ; SECOND
TAY
LDA DELTB,Y ; AUS TAB HOLEN
STA XWERT ; ABLEGEN
BIT SY ; BEREITS NEXT
BPL YS ; BYTE ???
LDA SINX1,X ; JA!
CLC ; STEP FORWARD
ADC #1
CMP SINX2,X
BCC XS1 ;ENDE ERREICHT?
LDA SINX3,X ; JA:RESTART
XS1 STA SINX1,X ; NEIN:STORE
YS LDA SINYHI,X ; SINUS IN
BEQ DEL ; Y-RICHTUNG ?
STA ADR+1 ; JA :ADR
LDA SINYLO,X ; HOLEN
STA ADR
LDY SINY1,X
LDA (ADR),Y ; DITO
BIT SY ; ALLES ANALOG
BMI YS2 ; ZU -XS-
LSR A
LSR A
LSR A
LSR A
YS2 AND #$0F
TAY
LDA DELTB,Y
STA YWERT
BIT SY
BPL DEL
LDA SINY1,X
CLC
ADC #1
CMP SINY2,X
BCC YS1
LDA SINY3,X
YS1 STA SINY1,X
DEL LDA DELAY,X ; COUNTDOWN ?
BEQ ACX
DEC DELAY,X ; JA:AUSFUEHREN
BNE ACX ; NULL ?
INC INITTB,X ; JA:NEXT INIT
ACX LDA ACCTX,X ;BESCHLEUNIGUNG X?
BEQ DX
DEC ACCT1,X ;JA:WERT SCHON
BPL AC1 ; AENDERN ?
LDA ACCTX,X ;JA: ZEIT
STA ACCT1,X ; RESTAURIEREN
LDA DELTAX,X ;TAB-WERT HOLEN
AND #$F0
STA ZWR2 ;ZIEL RETTEN
LSR A
LSR A
LSR A
LSR A
STA ZWR ;ZIEL WERT
LDA DELTAX,X
AND #$0F ;MOMENT WERT
CMP ZWR ;ZIEL
BNE AC5 ; ERREICHT?
LDA #$00 ; JA : ACC-
STA ACCTX,X ; ENDE !
BEQ ACY
AC5 BCC AC3 ;ZIEL ANNAEHREN
SBC #1
BPL AC4
AC3 ADC #1
AC4 ORA ZWR2 ;TAB WERT
STA DELTAX,X ; ZURUECK !
BNE DX1
AC1 LDA DELTAX,X ;BEWEGUNG AUS-
BNE DX1 ; FUEHREN !
DX LDA DELTAX,X ; X -
BEQ DY ; BEWEGUNG ??
BIT MY ; JA
BPL DX1 ; 1ST/2ND HALF?
LSR A ;1ST
LSR A
LSR A
LSR A
DX1 AND #$0F ;2ND
TAY
LDA DELTB,Y ; S.O.
CLC
ADC XWERT ;ABLEGEN
STA XWERT
ACY LDA ACCTY,X ;BESCHLEUNIGUNG Y?
BEQ DY
DEC ACCT2,X ;JA: WEITER
BPL AC11 ;ANALOG -ACX-
LDA ACCTY,X
STA ACCT2,X
LDA DELTAY,X
AND #$F0
STA ZWR2
LSR A
LSR A
LSR A
LSR A
STA ZWR
LDA DELTAY,X
AND #$0F
CMP ZWR
BNE AC6
LDA #$00
STA ACCTY,X
BEQ SPC
AC6 BCC AC7
SBC #1
BPL AC8
AC7 ADC #1
AC8 ORA ZWR2
STA DELTAY,X
BNE DY1
AC11 LDA DELTAY,X
BNE DY1
DY LDA DELTAY,X ; Y BEWEGUNG ?
BEQ SPC
BIT MY ; ANALOG -DX- !
BPL DY1
LSR A
LSR A
LSR A
LSR A
DY1 AND #$0F
TAY
LDA DELTB,Y
CLC
ADC YWERT
STA YWERT
SPC LDA SPECHI,X ;SPECIAL PRG ?!
BEQ SETXY
STA SP1+2 ;JA! ADR
LDA SPECLO,X ; HOLEN
STA SP1+1
STX SP1+4 ;SPR-NR RETTEN
SP1 JSR $FFFF ;INS ZUSATZ-PRG
LDX #0 ;SPR-NR RETTEN
SETXY LDA XWERT ;NEUE SPR-POS.
BEQ SX5 ;BERECHNEN !
CLC
ADC XPOS,X ;X-POS
STA XPOS,X
BIT XWERT
BPL SX3 ;XWERT NEG?
BCC SX3+2 ;ADD.UEBERLAUF?
BCS SX5 ;JA/NEIN?
SX3 BCC SX5
LDA CONTROL,X ;MIT MSB !
EOR #$40
STA CONTROL,X
SX5 LDA YWERT
BEQ SX4
CLC
ADC YPOS,X ;Y-POS
STA YPOS,X ; UND FERTIG!
SX4 JMP AN4 ;EINSORTIEREN !
;---------------------------------------
;* ABSCHLIESSENDER SORTIER - ALGORITHMUS
;---------------------------------------
SORT LDY #0
LDX #60
AN7 LDA YTAB,X ;TAB SEARCH
BEQ AN6 ;SPR GEFUNDEN?
STA SRTAB,Y ;JA:EINSORTIEREN!
LDA #0
STA YTAB,X ;WERT CLR!
INY ;NEXT
AN6 DEX ;GANZEN BEREICH
CPX #10 ;DURCHSUCHEN!
BCS AN7
LDA #$FF ;ENDE DER TAB
STA SRTAB,Y ;MARKIEREN
STY SPR2 ;SPR-ANZAHL
STY SPR3 ;RETTEN
FS7 DEY ;UEBERPRUEFT
BEQ TRY ;NOCHMALS DIE
LDX SRTAB,Y ;REIHENFOLGE
LDA YPOS,X ;DER SPRITES
LDX SRTAB-1,Y ;MITTELS DER
CMP YPOS,X ;JEWEILIGEN
BCC FS7 ;(ECHTEN) YPOS
LDA SRTAB,Y ;& SORTIERT UM
STA SRTAB-1,Y ;(FALLS NOETIG)
TXA
STA SRTAB,Y
BNE FS7
TRY LDY #0 ;FERTIGT EINE
LDX #30 ;TABELLE DER
FS2 LDA CONTROL,X ;FREIEN SPR
BMI FS1 ;AN ...
LDA INITTB,X
BEQ FS3 ;WIRD VON
BPL FS1 ;GETSPR GENUTZT
CMP #$FF
BNE FS1
LDA #$00
STA INITTB,X
BEQ FS1
FS3 TXA
STA SPFREE,Y
INY
FS1 DEX
BNE FS2
DEY
STY FSPR ;ENDE DES MOVE
RTS ;PROGRAMMS
;---------------------------------------
;* INITIALISIERT ALLE SPRITES MITTELS
; TRACK-TABELLE !
;---------------------------------------
MINIT LDX #30
MI17 LDA INITTB,X
BEQ MI1 ;INIT ?
CMP #$FF ;VIELLEICHT ?
BEQ MI1
BMI MI16 ;JA:EXPLOSION
LDY CONTROL,X ;JA:NORMAL
STY CNTR
BMI MI2 ;SPR ON?
ASL A ;NEIN
TAY
LDA TRKTAB,Y ;TRACK ADR
STA TRKLO,X ; HOLEN
STA MADR
LDA TRKTAB+1,Y
STA TRKHI,X
STA MADR+1
JSR CLR ;ALTE WERT CLR
LDY #0
LDA (MADR),Y ;POSITION
BEQ MI15 ; GEGEBEN ?
ASL A ;JA !
STA XPOS,X ; X-POS &
ROR A
LSR A
AND #$40
STA CNTR ; MSB HOLEN!
INY
LDA (MADR),Y
STA YPOS,X ; Y-POS HOLEN!
MI15 LDY #2
BNE MI32 ; WEITER
MI16 JSR EXPL2 ;EXPL.-INIT
MI13 LDA CNTR
STA CONTROL,X ;SPR EIN/AUS
MI14 LDA #0
STA INITTB,X ;INIT FERTIG!
MI1 DEX
BNE MI17 ;NEXT SPR?
RTS ;MINIT ENDE !!!
;SPR WAR EIN !
MI2 TYA ;CONTROL-REG!
ASL A
ASL A
BMI MI14 ;EXPL ?
MI12 LDA TRKLO,X ;NO: ALTE
STA MADR ; ADR HOLEN
LDA TRKHI,X
BEQ MI14
STA MADR+1
LDY TRKPO,X ;POINTER
MI32 LDA (MADR),Y
BEQ MI14 ;TRACK ENDE ?
CMP #$FF ;NO:
BEQ MIJMP ;JUMP/EINSCHUB?
JSR MI3 ;NO: NORM-INIT!
INY
TYA ;NEUEN
STA TRKPO,X ;POINTER RETTEN
JMP MI13 ;NEXT SPR !
MIJMP INY
LDA (MADR),Y ;TESTEN !
CMP #$FF
BEQ MIJ1 ;JUMP ?
CMP #$FE
BEQ MIJS ;EINSCHUB ?
DEY
JMP MI13 ;WEDER NOCH !
MIJ1 INY ;JUMP!
LDA (MADR),Y ; HOLT NEUE
STA TRKLO,X ; TRACK ADR
INY ; & UEBERGIBT!
LDA (MADR),Y ; ACHTUNG :
STA TRKHI,X ;----------
LDA #0 ;MUSS AUF
STA TRKPO,X ;STATUS BYTE
BEQ MI12 ;WEISEN !!!
;EINSCHUB !
MIJS INY ; HOLT
LDA (MADR),Y ; EINSPRUNG
STA MIJS2+1 ; DER INIT-SEQ
INY
LDA (MADR),Y ;ACHTUNG:
STA MADR+1 ;--------
MIJS2 LDA #$00 ;MUSS AUF
STA MADR ;STATUS BYTE
INY ;WEISEN !
TYA
STA TRKPO,X
LDY #0
LDA (MADR),Y ; FUEHRT SIE
JSR MI3 ; AUS & KEHRT
JMP MI13 ; ZURUECK
MI3 LSR A ;HOLT ALLE
STA IREG ; DATEN AUS DEM
BCC MI4 ; TRACK !
INY
LDA (MADR),Y ;SPECIAL INIT?
STA MI4-6 ;WENN JA:
INY ; HOLT EINSRUNG
LDA (MADR),Y
STA MI4-5
STY MI4-1 ;RETTET X,Y
STX MI4-3
JSR $FFFF ;SPRINGT EIN!
LDX #0 ; X,Y RETTEN
LDY #0
MI4 LSR IREG ;BASIC
BCC MI5 ; REFRESH ?
INY ;JA:
LDA (MADR),Y ;JA: HOLT:
BEQ MI41
STA BLOCK,X ; BLOCK &
MI41 LDA CNTR
AND #$40
INY
ORA (MADR),Y ; FARBE !
ORA #$80 ;& SPR ON !
STA CNTR
MI5 LSR IREG ;BEWEGUNG X/Y?
BCC MI6
INY ;JA: HOLT:
LDA (MADR),Y ; DELTAX
STA DELTAX,X
INY
LDA (MADR),Y ; DELTAY
STA DELTAY,X
MI6 LSR IREG ;COUNT DOWN?
BCC MI7
INY ;JA:
LDA (MADR),Y ; HOLT DELAY
STA DELAY,X
MI7 LSR IREG ;BESCHLEUNIGUNG
BCC MI8 ; X/Y ?
INY ;JA!
STY MI71+1 ;Y RETTEN
LDA (MADR),Y ;HOLT ZEIGER
ASL A ; AUF ACCTB
ASL A ; *4
TAY ;HOLT AUS
LDA ACCTB+1,Y ; ACCTB :
STA ACCTX,X ; TIME X
LDA ACCTB,Y ;ZIEL/START -X-
STA DELTAX,X
LDA ACCTB+3,Y ; TIME Y
STA ACCTY,X
LDA ACCTB+2,Y ;ZIEL/START -Y-
STA DELTAY,X
LDA #$00 ; ALTE COUNTER
STA ACCT1,X ; CLR
STA ACCT2,X
MI71 LDY #$00 ;Y ZURUECK
MI8 LSR IREG ;ANIMATION ?
BCC MI9
INY ;JA
LDA (MADR),Y ;ANIMATIONS-NR.
ASL A ;*2
STA ANITB,X ;UEBERGEBEN
LDA #0
STA ANITCO,X ; CLR
STA ANICO,X
MI9 LSR IREG ;SPECIAL-PRG
BCC MI10
INY ;JA !
LDA (MADR),Y
STA SPECLO,X ;HOLT ADR !
INY
LDA (MADR),Y ;&UEBERGIBT !
STA SPECHI,X
MI10 LSR IREG ;SINUS ?
BCC MI11
INY ; JA!
LDA (MADR),Y ;HOLT NR FUER
JMP SININIT ;SINTAB2 & INIT
MI11 RTS