wudsn-ide/com.wudsn.ide.ref/ASM/Apple2/MERLIN32/INVADERS/BOMBES.s
2018-12-30 16:52:33 +01:00

314 lines
9.2 KiB
ArmAsm

********************************
********************************
***** *****
***** ROUTINES *****
***** BOMBES *****
***** *****
********************************
********************************
;
;
********************************
* DROP: PREPARE UNE NOUVELLE *
* ENTREE DANS LA TABLE DES *
* BOMBES. *
********************************
;
DROP LDA NBOMBES ;NOMBRE DE BOMBES ACTIVES
CMP NBOMAX ;COMPARAISON AU MAX
BNE DROP1 ;<>0, PAS ATTEINT
RTS ;ON NE FAIT RIEN
;
;
* ON TIRE OU ON TIRE PAS? *
;
DROP1 JSR HASARD
LDA RND1
BEQ DROP2 ;NUL ON TIRE
RTS
;
;
* RECHERCHE D'UNE ENTREE LIBRE *
;
DROP2 LDX NBOMAX ;INDICE DS LA TABLE
DROP3 LDA YBOMBE,X ;LIGNE DE LA BOMBE X
BEQ DROP4 ;ESPACE LIBRE
DEX ;ENTREE SUIVANTE
BPL DROP3
BRK ;IMPOSSIBLE D'ARRIVER ICI!
;
DROP4 INC NBOMBES
LDA YENV ;LIGNE DU LANCEUR
CLC
ADC #$0C ;BAS DE L'ENVAHISSEUR
STA YBOMBE,X
;
JSR HASARD
LDY RND2 ;NOMBRE COMPRIS ENTRE 0 ET 6
LDA DPAL,Y ;DEPLACEMENT DE LA BOMBE
STA DPBOMBE,X
;
;
LDA XENV ;OCTET DE L'ENVAHISSEUR
CLC
ADC OSAL,Y ;-1 OU 0 SELON Y
STA OCTBOMBE,X ;OCTET DE LA BOMBE
ASL
ASL
ASL ;*8
SEC
SBC OCTBOMBE,X ;OCTET*7
CLC
ADC DPBOMBE,X ;+ DEPLACEMENT
STA XBOMBE,X ;ABSCISSE EN PIXELS
;
;
STX NBO ;# BOMBE COURANTE
JSR PRBOMBE
JSR XCIMAGE ;TRACE AVEC VERIF. COLL.
LDA COLLIS
BMI DROP5 ;<0, PAS DE COLLISION
JSR BOUM
;
DROP5 RTS
********************************
* ALB *
* ARRET DE LA BOMBE #NBO *
********************************
;
ALB LDX NBO ;# DE LA BOMBE
LDA #$00
STA YBOMBE,X
DEC NBOMBES
RTS
;
;
********************************
* MVTBOMBE *
* MOVEMENT DES BOMBES *
********************************
;
;
* VERIFICATION FREQUENCE *
;
MVTBOMBE DEC CPTRBO
BNE MVTBO4 ;<>0, ON NE FAIT RIEN
;
LDA FRBO ;REMISE A NEUF DU COMPTEUR
STA CPTRBO
;
* MISE A JOUR DE CHAQUE BOMBE *
* ACTIVE *
;
LDA NBOMAX ; 1ER INDICE DS LES TABLEAUX
STA NBO ;# BOMBE COURANTE
MVTBO1 LDX NBO
LDA YBOMBE,X ;Y DE LA BOMBE
BEQ MVTBO3 ;=0, INACTIVE
*EFFACEMENT *
;
JSR PRBOMBE
JSR XIMAGE ;XDRAW
;
* CALCUL NOUVELLE POSITION *
;
;
LDX NBO
LDA YBOMBE,X
CLC
ADC IBV ;VITESSE VERTICALE
STA YBOMBE,X
;
* VERIFICATION FIN DE PARCOURS *
;
CMP YBOMAX
BCC MVTBO2 ;PAS ATTEINTE
JSR ALB ;ARRET BOMBE
BPL MVTBO3
;
*REAFFICHAGE *
;
MVTBO2 JSR PRBOMBE
JSR XCIMAGE
;
* VERIFICATION COLLISION *
;
LDA COLLIS
BMI MVTBO3 ;PAS DE COLL.
JSR BOUM
;
;
* BOUCLAGE *
;
MVTBO3 DEC NBO ;BOMBE SUIVANTE
BPL MVTBO1
MVTBO4 RTS
;
;
********************************
* BOUM *
* TRAITEMENT DES COLLISIONS DE *
* BOMBES. *
********************************
;
;
BOUM LDX NBO ;# DE LA BOMBE
;
* A-T-ELLE HEURTE UNE BALLE? *
;
LDA NBALLES ;NOMBRE DE BALLES ACTIVES
BEQ BOUM2 ;AUCUNE
;
LDA NBAMAX
STA NBA ;N0 DE BALLE COURANTE
BOUM1 JSR CMPBB ;COMPARER COORDONEES
LDA SEMBB ;SEMAPHORE COLLISION BALLE-BOMBE
BPL BOUM4 ;COORDONNEES EGALES
DEC NBA
BPL BOUM1 ;VOIR BALLE SUIVANTE
;
;
;
* COLLISION DERRIERE ABRIS? *
;
BOUM2 LDX NBO ;# BOMBE
LDA YBOMBE,X ;# DE SA LIGNE
CMP #$A1 ;EST ELLE > ABRIS?
BPL BOUM3 ;OUI, BASE EST FOUTUE!!!
;
;
* COLLISION AVEC ABRI *
;
;
JSR PRTROU
JSR NIMAGE
JSR PRBOMBE
JSR NIMAGE ;EFFACEMENT BOMBE
JSR ALB ;ARRET BOMBE
RTS
;
;
* COLLISION AVEC BASE *
;
;
BOUM3 JSR PRBOMBE
JSR XIMAGE ;EFFACER LA BOMBE
JSR ALB ;ARRET BOMBE
;
JSR EXPLB ;EXPLOSION DE LA BASE
LDA #$FF
JSR DELAI ;ON ATTEND UN CHOUYA
;
JSR NVBASE ;ENGAGER NOUVELLE BASE
RTS
;
;
;
* COLLISION AVEC BALLE *
;
;
BOUM4 JSR PRBALLE
JSR NIMAGE ;EFFACER LA BALLE
JSR PRBOMBE
JSR NIMAGE ;EFFACEMENT BOMBE NBO
JSR CLF ;ARRETER LA BALLE
JSR ALB ;ARRETER LA BOMBE
RTS ;TERMINE
;
;
********************************
* PRBOMBE *
* PARAMETRES FORME BOMBE *
********************************
;
;
PRBOMBE LDA #$02
STA NOCTETS
LDA #$04
STA NLIGNES
;
;
LDX NBO ;# DE LA BOMBE
LDY DPBOMBE,X ;# DU DEPLACEMENT
LDA BOMBEBP,Y ;ADRESSE FORME B.P.
STA FORMEL
LDA #>BOMBE0
STA FORMEH
;
LDA YBOMBE,X ;ORDONNEE
TAY
LDA OCTBOMBE,X ;# D'OCTET
TAX
;
RTS
;
;
********************************
* PRTROU *
* PREPARATION PARAMETRES DE *
* TROU *
********************************
;
;
PRTROU LDA #$02
STA NOCTETS
LDA #$07
STA NLIGNES
;
LDX NBO ;# DE LA BOMBE
LDY DPBOMBE,X ;# DU DEPLACEMENT
LDA TROUBP,Y
STA FORMEL
LDA #>TROU0
STA FORMEH
;
LDY YBOMBE,X ;LIGNE DE LA BOMBE
;
LDA OCTBOMBE,X
TAX
RTS
;
;
********************************
* CMPBB *
* COMPARAISON COORDONNEES *
* BOMBE NBO ET BALLE NBA. *
* *
********************************
;
;
CMPBB LDA #$FF
STA SEMBB ;SEMAPHORE DESARME
;
LDY NBO ;# DE LA BOMBE
LDX NBA ;# DE LA BALLE
LDA YBALLE,X ;COMPARAISON DES ORDONNEES
CMP YBOMBE,Y
BNE CMPBB2 ;ORDONNEES DIFFERENTES
;
* COMPARAISON DES ABSCISSES *
;
LDA XBALLE,X ;ABSCISSE BALLE
CLC
ADC #$01 ;+1
STA TEMP
LDX #$04 ;COMPTEUR
CMPBB1 LDA TEMP
CMP XBOMBE,Y
BEQ CMPBB3 ;EGALITE-COLLISION
DEC TEMP
DEX ;DECOMPTE
BNE CMPBB1
;
CMPBB2 RTS ;PAS DE COLLISION
;
CMPBB3 STX SEMBB
;
RTS
;
;
********************************