Shoot ... Again
n°17Par Dominique Pessan
|
Mister WIMPY a vraiment beaucoup de mal à s'en sortir avec son lapin dévoreur de légume . Donnons lui un coup de main en adaptant le jeu au Joy-stick! Etat des lieux. La cuisine de Mr Wimpy se trouve en mémoire entre #2DF9 et #87C3. La routine de gestion du clavier est située en # 517F . Elle est appelée de trois points différents du logiciel, qui sont: #3A8D, #48E1 et #520D. Le registre X est défini avant chaque appel. Listing commenté de cette routine. 517F 48 Sauve A sur le pile 5180 98 TYA 5181 48 PHA Sauve Y sur la pile 5182 8A TXA Charge A avec X 5183 29 07 AND #$07 Calcule un numéro 5185 09 B8 ORA #$B8 de ligne de la matrice 5187 8D 00 03 STA $0300 clavier, l'écrit sur ORB 518A 8A TXA Récupère X 518B 4A LSR Trois décalages |
![]() 518C 4A LSR à droite. 518D 4A LSR 518E A8 TAY Transf. ds Y comme index 518F B9 6C 4D LDA $4D6C,Y Charge N° colonne matrice 5192 20 67 51 JSR $5167 Ecrit ce n° ds port I/O du 8912 (SP non décrit ici ) 5195 68 PLA 5196 A8 TAY Récupère Y 5197 68 PLA Récupère A 5198 85 27 STA $27 Provisoirement en $27 519A A9 08 LDA #$08 Teste PB3, = 1 si appuis 519C 2C 00 03 BIT $0300 = 0 sinon 519F 08 PHP Sauve P ( donc Z ) 51A0 A5 27 LDA $27 Récupère A 51A2 28 PLP Récupère Z( test appuis) 51A3 60 RTS Fin de sous programme. |
Ci dessous, le tableau de calcul des numéros de lignes de la matrice clavier et de l'index Y ,de chargement du numéro de colonne.
Appel X X AND#$07 ORA #$B8 lignes 3x LSR Y colonnes Touches depuis hexa en binaire 0000 0111 1011 1000 b2b1b0 sur X déci.
$3A8D 0C 0000 1100 0000 0100 1011 1100 4 0000 0001 1 FD < , > $520D 14 0001 0100 0000 0100 1011 1100 4 0000 0010 2 FB < . > 2E 0010 1110 0000 0110 1011 1110 6 0000 0101 5 DF < A > 2A 0010 1010 0000 0010 1011 1010 2 0000 0101 5 DF < Z > $48E3 22& 0010 0010 0000 0010 1011 1010 2 0000 0100 4 EF < Ctrl >
Les "numéros" de colonnes sont lus dans la table située en $4D6C suivante, indexée par Y.
4D6C: FE FD FB F7 EF DF BF 7F Par exemple, si Y = 4 , LDA$4D6C,Y charge bien A avec EF ( le premier élément a pour indice 0 ).
Au retour de ce sous programme, la routine en $3A8D, teste le bit Z du registre d'état par un BEQ puis positionne les bits de l'accumulateur par une série de OU logiques.
Appuis sur < , > : bit 3 à 1 / Appuis sur < . > : bit 2 à 1
Appuis sur < A > : bit 1 à 1 / Appuis sur < Z > : bit 0 à 1
La routine en $520D, fait de même, avec les bits de la case mémoire $92.
La routine en $48E3, teste simplement l'appuis sur < Ctrl > ( Pepper gun ) par BEQ.
|
La méthode utilisée. La modification va consister simplement, à détourner les appels de la routine $517F vers notre lecture du JS en $87D0 . Nous y ferons un appel à $517F avant le retour de manière à conserver sans modification la gestion du clavier. Il faudra néanmoins sauter le STA$ 92 en $521B. De même, chaque appel de la gestion clavier étant légèrement différent, nous avons trois points d'entrée à notre routine. Point 1: $87D0, la routine elle même, gère $92. Point 2: $ 8815, pour la gestion du tir. 8815 JSR$87D0 Appel routine principale 8818 LDA$882F Charge case tir 881B CMP#$00 Test si tir ( 0 si tir ) 881D PHP Sauve résultat du test ( Z) 881E LDA$27 Récupère A, placé là par $5198 8820 PLP Récupère Z pour le BEQ qui attend 8821 RTS au retour du SP Point 3 : $8822, pour la gestion de A . 8822 JSR$87D0 Appel routine principale 8825 PHP Sauve test appuis touche de $517F 8226 LDA$92 Positionne les bits de A, idem à $92 8828 PLP Récupère test clavier 8829 RTS Retour au jeu Comme pour Ratsplat, les valeurs de la table de lecture de la position du JS sont données par le jeu. Les valeurs intermédiaires ( droite et haut par exemple) ont été calculées par OU logique. Je ne donne pas le listing désassemblé de la routine principale, elle est très semblable à celle donnée la dernière fois. |
La marche à suivre. 1 - Entrez le listing suivant.
10A=#87D0:F=#8840:L=100:REPEAT:FOR A=A TO A+15:READ C$
2 - RUN original devient par 5 - SAVEU"WIMPY",A#2DF9,E#8840,AUTO |
