Shoot ... Again n°16

Par 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            20   

Touches: < ' > < / > < 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
3878 00 0A 06 02 00 08 04 00

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$
20 K=VAL("#"+C$):S=S+K+65536*(S+K>65535):IF A<=F THEN POKE A,K
30 NEXT:READ D$:IF S=VAL("#"+D$) THEN L=L+5:UNTIL A>F:END
40 PING:PRINT"Erreur ligne";L
100 DATA 98,48,AD,01,03,48,AD,03,03,48,A9,00,85,42,A9,C0,05AD
105 DATA 8D,03,03,A9,40,8D,01,03,AD,01,03,A8,29,20,AA,98,0A9E
110 DATA 4A,29,0C,8D,3C,38,98,29,03,18,69,0C,A8,B9,70,38,0F78
115 DATA 8D,6E,38,E0,20,F0,08,A2,10,8E,6F,38,4C,55,38,A2,1605
120 DATA 00,8E,6F,38,68,8D,03,03,68,8D,01,03,68,A8,AD,6F,1B5A
125 DATA 38,0D,6E,38,85,42,60,EA,EA,EA,EA,EA,EA,EA,EA,00,24BC
130 DATA 00,00,00,00,09,05,01,00,0A,06,02,00,08,04,00,FF,25E8

2 - RUN

3 - RATSPLAT,N
4 - 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>.


Télécharger  RATSPLAT ! Download

la page baton de joie   joystick page