Shoot ... Again
n°16Par Dominique Pessan
RATSPLAT, vous connaissez ? Mais si, le jeu où il vous faut six doigts à une main pour arriver à échapper au méchant fantôme... Allez Hop ! Adaptation Joy-stick !!
Ce jeu est situé en mémoire entre #5FD et #3810. La routine de gestion du clavier est en #239F. Elle est quelque peu originale ( en tout cas, pour moi ), en voici le listing commenté.
239F A9 00 LDA #$00 Initialise la case mémoire 42 àzéro.
23A1 85 42 STA $42 Les bits de cette case, seront représentatifs des touches actionnées
23A3 A2 05 LDX #$05 Compteur de boucles, on va tester six touches( 5,4,3,2,1,0 ).
23A5 BD 50 02 LDA $0250,X $250:table des lignes matrice clavier (des 6 touches sélectionnées)
23A8 8D 00 03 STA $0300 On met le numéro de ligne sur le Port B du VIA.
23AB BD 56 02 LDA $0256,X $256:table des col. matrice clavier (des 6 touches sélectionnées)
23AE 86 00 STX $00 On sauve X en $00.
23B0 AA TAX X contient maintenant le numéro de colonne.
23B1 A9 0E LDA #$0E A contient le numéro du registre du 8912 dans lequel on veut écrire.
23B3 20 E0 22 JSR $22E0 Comme $F590, cette routine va écrire le contenu de X dans le
registre du 8912 spécifié par A.
23B6 A6 00 LDX $00 On récupère X.
23B8 A9 08 LDA #$08 On charge A avec 8 pour tester le bit 3 du
23BA 2C 00 03 BIT $0300 Port B du VIA, qui signale, si il est a 1, que la touche à
l'intersection ligne / colonne,a été pressée.
23BD F0 07 BEQ $23C6 Si la touche n'est pas enfoncée, on va tester la suivante.
23BF BD 5C 02 LDA $025C,X Si la touche a été pressée, onprend un élément
de la table en $25C qui contient une valeur dont un
23C2 05 42 ORA $42 seul bit est a un, différent en fonction de la touche ( de X).
On fait un OU avec la valeur précédente
23C4 85 42 STA $42 de $42,ce qui concerve les précédents bits et vient rajouter
celui de la touche en cours.
23C6 CA DEX On décrémente le compteur de touches.
23C7 10 DC BPL $23A5 Tant qu'on n'a pas eu X=0 (inclus), on reboucle.
23C9 60 RTS Plus de touche, on sort et $42 a autant de bits a 1 que de touches
ont étépressées durant le test.
Voici la liste des valeurs d'origine dans les tables:
$250 03 07 02 00 07 04 Lignes $256 7F F7 DF BF DF FE Colonnes $25C 01 02 04 08 10 20Touches: < ' > < / > < Z > < X > < RET> < ESP>
Rôle : haut bas gauche droite tir arme
Pour intégrer la gestion du joy-stick ,sans supprimer celle du clavier, j'ai modifié le début de la routine comme suit:
239F 20 11 38 JRS$3811 Appel de la routine de gestion du JS. 23A2 EA NOP Bouche trou.
La gestion du JS a, quant à elle, été adaptée pour gérer la case $42 correctement. En voici le listing.
3811 98 TYA Sauvegarde Y sur la Pile.
3812 48 PHA
3813 AD 01 03 LDA $0301 Sauvegarde l'état du port A du VIA sur la pile.
3816 48 PHA
3817 AD 03 03 LDA $0303 Sauvegarde l'état du registre de direction du port A.
381A 48 PHA
381B A9 00 LDA #$00 Initialise la case $42 à 0
381D 85 42 STA $42
381F A9 C0 LDA #$C0 Six lignes en entrées, deux lignes en sorties.
3821 8D 03 03 STA $0303
3824 A9 40 LDA #$40 Accès poignée de droite.
3826 8D 01 03 STA $0301
3829 AD 01 03 LDA $0301 Lecture état du J.S.
382C A8 TAY Sauve cet état dans Y.
382D 29 20 AND #$20 Test TIR ( le bouton de tir est relié au bit 5 du port A
d'où le #20 = 0010 0000.
382F AA TAX Transfert du résultat du test dans X ( X contient #00
si on a tiré, #20 sinon ).
3830 98 TYA Récupère l'état.
3831 4A LSR Fait un décalage logique à droite( chaque bit de l'ac-
cumulateur se décale d'un cran à droite ).
3832 29 0C AND #$0C En testant les bits 2 et 3, on teste en fait les bits 3
et 4 ( décalés) donc ( Haut ou Bas ).
3834 8D 3C 38 STA $383C Le résultat du test ( 0 ou 4 ou 8, car Haut et Bas sont
exclusif l'un de l'autre ) est stocké en vue addition.
3837 98 TYA On récupère l'état du JS.
3838 29 03 AND #$03 Test des bits 0 et 1 ( soit Gauche / droite ) Le résultat
sera 0 ou 1 ou 2 dans A .
383A 18 CLC Mise à 0 de la retenue en vue addition ultérieure.
383B 69 04 ADC #$04 On additionne le résultat du test des bits 0 et 1 a celui
du test des bits 3 et 4.
383D A8 TAY Le résultat est transféré dans Y pour servir
d'index de table.
383E B9 70 38 LDA $3870,Y Prend une valeur dans la table ( fonction de l'état
du JS par Y ).
3841 8D 6E 38 STA $386E Stockage provisoire.
3844 E0 20 CPX #$20 X contient toujours le résultat du test du Tir.
3846 F0 08 BEQ $3850 On n'a pas tiré.
3848 A2 10 LDX #$10 On a tiré, alors on stocke #10 provisoirement,
384A 8E 6F 38 STX $386F Dans $386F.
384D 4C 55 38 JMP $3855 et on saute le cas ou on n'a pas tiré.
3850 A2 00 LDX #$00 Ici, on n'a pas tiré, alors on stocke #00 provisoirement,
3852 8E 6F 38 STX $386F dans $386F.
3855 68 PLA
3856 8D 03 03 STA $0303 On récupère DDRA sur la pile.
3859 68 PLA
385A 8D 01 03 STA $0301 On récupère ORA sur la pile.
385D 68 PLA
385E A8 TAY On récupère Y.
385F AD 6F 38 LDA $386F
3862 0D 6E 38 ORA $386E OU logique entre les bits représentatifs de la position du
JS et celui représentatif du tir.
3865 85 42 STA $42 Le résultat est dans $42,
3867 60 RTS on peut retourner à la gestion du clavier , comme si de
rien n'était...
|
Table des valeurs pour lecture Joy-stick 3870 00 00 00 00 00 09 05 01 Explication en fonction des différentes positions du JS Haut, bas, gauche et droite sont données par le jeu en $25C. Les valeurs intermédiaires sont obtenues en faisant un OU logique comme le ferait la routine de gestion du clavier.)
haut (01)
4 ou 1 = (05 8 ou 1 = (09)
gauche (04) repos (00) droite (08)
4 ou 2 = (06) 8 ou 2 = (0A)
bas (02)
La marche à suivre. 1 - Entrez le listing suivant
10 A=#3811:F=#3880:L=100:REPEAT:FOR A=A TO A+15:READ C$ 2 - RUN 3 - RATSPLAT,N4 - POKE#239F,#20:DOKE#23A0,#3811:POKE#23A2,#EA 5 - SAVEU"RATSPLAT",A#5FD,E#3880,AUTO |
|
Nota :Les déplacements et le tir sont pilotés par le JS, Le changement d'arme reste au clavier par <ESPACE>.
