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

476 lines
14 KiB
ArmAsm

********************************
********************************
***** *****
***** ROUTINES *****
***** BALLES *****
***** *****
********************************
********************************
;
;
********************************
* FEU *
* PREPARE UNE NOUVELLE ENTREE *
* DANS LA TABLE DES BALLES *
********************************
;
FEU LDA NBALLES ;NOMBRE DE BALLES ACTIVES
CMP NBAMAX ;COMPARAISON AU MAX
BNE FEU1 ;<>0, RESTE DE LA PLACE
RTS ;PLUS DE PLACE, ON NE FAIT RIEN
;
FEU1 LDA DBALLE ;COMPTEUR DELAI ENTRE BALLES
BEQ FEU2 ;=0, TIR AUTORISE.
RTS
;
* RECHERCHE ENTREE LIBRE *
;
FEU2 LDX NBAMAX
FEU3 LDA YBALLE,X ;ORDONNEE DE LA BALLE X
BEQ FEU4 ;=0, L'ENTREE EST LIBRE
DEX ;BALLE SUIVANTE
BPL FEU3
BRK ;IMPOSSIBLE D'ARRIVER ICI!
;
* DEPART D'UNE NOUVELLE BALLE *
;
FEU4 INC NBALLES
LDA YBMIN ;ORDONNEE DE DEPART
STA YBALLE,X
;
LDA XBASE ;ABSCISSE BASE
CLC
ADC #$06 ;ABSCISSE CANON
STA XBALLE,X
TAY
LDA NUMOCT,Y ;# OCTET DE LA BALLE
STA OCTBALLE,X
;
LDA DEPL,Y ;# DEPLACEMENT AD-HOC
STA DPBALLE,X
;
;
STX NBA ;# BALLE COURANTE
* AFFICHAGE BALLE *
;
JSR PRBALLE ;AFFICHAGE DE LA BALLE
JSR XCIMAGE
;
* VERIFICATION COLLISION *
;
LDA COLLIS
BMI FEU5 ;<0, PAS DE COLLISION
JSR SPLASH ;TRAITEMENT DES COLLISIONS
;
FEU5 LDA FRBAL ;REMISE A NEUF DU COMPTEUR D'ESPACEMENT
STA DBALLE
RTS
********************************
* CLF *
* ARRET DE LA BALLE #NBA *
********************************
;
CLF LDX NBA ;# DE LA BALLE
LDA #$00
STA YBALLE,X
DEC NBALLES
RTS
;
;
********************************
* MVTBALLE *
* MOUVEMENT DES BALLES ACTIVES*
********************************
;
;
* VERIFICATION COMPTEUR *
;
MVTBALLE DEC CPTRBA ;DECOMPTE FREQUENCE
BNE MVTB4 ;<>0, PAS D'EXECUTION A CE CYCLE
LDA FRBA ;REMISE A NEUF COMPTEUR
STA CPTRBA
;
* MISE A JOUR BALLES ACTIVES *
;
LDA NBAMAX
STA NBA ;# DE BALLE COURANTE
MVTB1 LDX NBA ;INDICE DS LA TABLE DES BALLES
LDA YBALLE,X ;ORDONNEE DE LA BALLE X
BEQ MVTB3 ;=0, BALLE INACTIVE
;
*EFFACEMENT *
;
JSR PRBALLE
JSR XIMAGE ;XDRAW
;
* CALCUL NOUVELLE POSITION *
;
;
LDX NBA ;RESTAURATION DE X
LDA YBALLE,X
SEC
SBC IBV ;VITESSE VERTICALE
STA YBALLE,X
;
* VERIFICATION FIN DE PARCOURS *
;
CMP YBMAX
BNE MVTB2 ;<>0, ENCORE DU CHEMIN A FAIRE
JSR CLF ;ARRET BALLE
BPL MVTB3 ;=JMP
;
*REAFFICHAGE *
;
MVTB2 JSR PRBALLE
JSR XCIMAGE
;
* VERIFICATION COLLISION *
;
LDA COLLIS
BMI MVTB3 ;PAS DE COLL.
JSR SPLASH
;
;
* BOUCLAGE *
;
MVTB3 DEC NBA ;BALLE SUIVANTE
BPL MVTB1
;
MVTB4 RTS
;
;
********************************
* SPLASH: COLLISION D'UNE BALLE*
********************************
;
;
;
;
SPLASH JSR PRBALLE
JSR NIMAGE ;EFFACEMENT BALLE (PARFOIS NECESSAIRE...)
;
;
* COLLISION AVEC BOMBE? *
;
;
LDA NBOMBES ;NOMBRE DE BOMBES
BEQ SPLASH3 ;PAS DE BOMBES EN ROUTE
;
LDA NBOMAX
STA NBO
SPLASH1 JSR CMPBB ;COMPARER BALLE ET BOMBE
LDA SEMBB ;SEMAPHORE DE COLLISION
BMI SPLASH2 ;COORDONNEES PAS EGALES
;
;
JSR PRBOMBE
JSR NIMAGE ;EFFACEMENT BOMBE
JSR CLF ;ARRET BALLE
JSR ALB ;ARRET BOMBE
RTS ; TERMINE
;
SPLASH2 DEC NBO ;BOMBE SUIVANTE
BPL SPLASH1 ;ON CONTINUE
;
;
* COLLISION AVEC ENVAHISSEUR? *
;
;
SPLASH3 JSR LCMORT ;CALCUL L ET C DE L'ENVAHISSEUR TOUCHE
;
;
LDA L2 ;EST-CE BIEN UN ENVAHISSEUR???
CMP LMORT ;LMORT<=L2
BMI SPLASH5 ;PAS UN ENV!
;
LDA C2
CMP CMORT ;CMORT<=C2
BMI SPLASH5 ;PAS UN ENVAHISSEUR
;
LDX LMORT ;VERIFICATION PRESENCE
LDA ATLL,X ;ADRESSE TABLE TL(LMORT)
STA BDRL
LDA ATLH,X
STA BDRH
;
LDY CMORT ;COLONNE
LDA (BDRL),Y ;INDICATEUR DE PRESENCE
BEQ SPLASH5 ;PERSONNE!
;
;
* COLLISION AVEC UN ENVAHISSEUR*
;
;
LDA #$00 ;MISE A JOUR SEMAPHORE DE PRESENCE
STA (BDRL),Y
;
JSR CLF ;ARRET BALLE
;
JSR PREXPL ;AFFICHAGE EXPLOSION
JSR IMAGE
LDA #$15
JSR DELAI ;LAISSER VOIR
;
DEC NENV ;DECREMENTER NOMBRE TOTAL D'ENV.
BNE SPLASH4 ;<>0, IL EN RESTE
JMP GAGNE ;LE JOUEUR A GAGNE
;
;
;
SPLASH4 JSR CALCSPL ;MISE A JOUR C1,C2 ETC...
;
LDA #$07 ;MISE A JOUR SCORE
SEC
SBC LMORT
LSR ;INCREMENT SCORE /10
JSR INCPTS ;INCREMENTER SCORE
JSR AFFPTS ;AFFICHER
;
JSR PREXPL ;EFFACER DEBRIS EXPLOSION
JSR XIMAGE
;
;
RTS ;TERMINE
;
;
;
* COLLISION AVEC ABRI *
;
;
SPLASH5 JSR PRECLAT ;PREPARATION PARAMETRES ECLAT
JSR NIMAGE ;AFFICHAGE EN NOIR
JSR CLF ;ARRET BALLE
RTS
;
********************************
* LCMORT *
* CALCUL DE LA LIGNE ET DE LA *
* COLONNE DE L'ENVAHISSEUR *
* POSSIBLEMENT TOUCHE. *
********************************
;
;
LCMORT LDX NBA
LDA YBALLE,X
SEC
SBC YVERT
LSR
LSR
LSR
LSR ;/16
STA LMORT ;LIGNE DU MALHEUREUX
ASL
ASL
ASL
ASL
CLC
ADC YVERT
STA YENV ;Y AFFICHAGE
;
LDA OCTBALLE,X ;OCTET ENVAHISSEUR
SEC
SBC XHORIZ
CLC
ADC COLLIS
TAY
LDA DIV3,Y ;/3
CLC
STA TEMP ;SA COLONNE PAR RAPPORT A C1
ADC C1
STA CMORT ;SA COLONNE PAR RAPPORT A 0
LDA TEMP
ASL
CLC
ADC TEMP ;*3
CLC
ADC XHORIZ
STA XENV ;SON NUMERO D'OCTET
RTS
;
********************************
* CALCSPL *
* RECLACUL DES SOMMES LIGNE *
* ET COLONNE, DE L2,C1,C2,NDPLH*
* ET XHORIZ *
********************************
;
* MISE A JOUR DES SOMMES L & C *
;
CALCSPL LDY LMORT ;LIGNE DU MORT
LDA SLIGNE,Y
SEC
SBC #$01
STA SLIGNE,Y
;
LDY CMORT ;COLONNE
LDA SCOL,Y
SEC
SBC #$01
STA SCOL,Y
;
* MISE A JOUR DE L2,C1,C2 *
;
LDA #$FF ;NOUVELLE VALEUR PROVISOIRE
STA NL2
STA NC1
STA NC2
;
LDY L1 ;RECHERCHE DERNIERE LIGNE NON VIDE
DEY ;POUR COMPENSER LE INY QUI SUIT
CALCSPL1 INY
LDA SLIGNE,Y ;NBRE D'ENV. SUR LA LIGNE Y
BEQ CALCSPL2
STY NL2 ;DERNIERE LIGNE NON VIDE
;
CALCSPL2 CPY L2
BNE CALCSPL1
;
LDY C1 ;CALCUL DE NC1 ET NC2
DEY ;POUR COMPENSER LE INY QUI SUIT
CALCSPL3 INY ;COLONNE SUIVANTE
LDA SCOL,Y ;NBRE D'ENV. SUR CETTE COLONNE
BEQ CALCSPL4 ;=0, COLONNE EST VIDE
;
STY NC2 ;DERNIERE COLONNE NON VIDE
;
LDA NC1
BPL CALCSPL4 ;>=0, ON A DEJA TROUVE LA 1ERE COLONNE NON VIDE
STY NC1
CALCSPL4 CPY C2
BNE CALCSPL3
;
* RECALCUL DE XHORIZ *
;
LDA NC1 ;CALCUL DE XHORIZ
SEC
SBC C1 ;NC1-C1
STA TEMP
ASL ;*2
CLC
ADC TEMP ;*3
STA TEMP
CLC
ADC XHORIZ
STA XHORIZ ;XHORIZ:=XHORIZ+3*(NC1-C1)
;
* RECALCUL DE NDPLH *
LDY PASH ;V-A-T'ON A GAUCHE OU A DROITE?
BPL CALCSPL5 ;>=0, A DROITE
LDA TEMP ;NDPLH:=NDPLH+3*(NC1-C1)
CLC
ADC NDPLH
STA NDPLH
BPL CALCSPL6
;
CALCSPL5 LDA C2 ;NDPLH:=NDPLH +3*(C2-NC2)
SEC
SBC NC2
STA TEMP
ASL
CLC
ADC TEMP ;*3
CLC
ADC NDPLH
STA NDPLH
;
* MISE A JOUR DE C1, C2 ET L1 *
;
CALCSPL6 LDA NC1
STA C1
LDA NC2
STA C2
LDA NL2
STA L2 ;NOUVELLE VALEUR DE L2
;
RTS
;;
;
********************************
* PRBALLE: PREPARATION DES PARA*
* METRES BALLE. *
********************************
;
;
PRBALLE LDA #$02
STA NOCTETS
LDA #$04
STA NLIGNES
;
LDX NBA ;# BALLE COURANTE
LDY DPBALLE,X ;# DU DEPLACEMENT
LDA BALLEBP,Y ;ADRESSE FORME B.P.
STA FORMEL
LDA #>BALLE0
STA FORMEH
;
LDA YBALLE,X
TAY
LDA OCTBALLE,X
TAX
;
RTS
;
;
********************************
* PREXPL *
* PREPARATION DES PARAMETRES *
* POUR L'EXPLOSION D'UN ENV. .*
********************************
;
;
PREXPL LDA #$02
STA NOCTETS
LDA #$10
STA NLIGNES
;
LDA #<EXPL ;ADRESSE FORME
STA FORMEL
LDA #>EXPL
STA FORMEH
;
LDY YENV ;ORDONNEE DE L'ENVAHISSEUR
DEY
DEY
DEY
DEY ;ORDONNEE DE L'EXPLOSION
LDX XENV
;
RTS
;
;
;
********************************
* PRECLAT *
* PREPARATION DES PARAMETRES *
* D'ECLAT DANS UN ABRI. *
********************************
;
;
PRECLAT LDA #$02
STA NOCTETS
LDA #$08
STA NLIGNES
;
LDX NBA ;# BALLE
LDY DPBALLE,X ;# DU DEPLACEMENT
LDA ECLATBP,Y ;ADRESSE B.P. DE LA FORME
STA FORMEL
LDA #>ECLAT0
STA FORMEH
;
LDY YBALLE,X
DEY
DEY
DEY
DEY
LDA OCTBALLE,X
TAX
;
RTS
;
;