Shoot ... Again n°18

Par Dominique Pessan


Classé sixième, par nos amis britanniques, dans le top ten des meilleurs jeux d'arcades sur Oric, MANIC MINER méritait bien son bâton de maréchal ( oui, je sais Monsieur Spock, de joie ! Bâton de joie!)


L'état des lieux.


Ma version du jeu, n'est visiblement pas une version originale... ( bon...) . Un seul bloc entre #500 et #A000 constitue le jeu. Mais plusieurs modules ont été "rassemblés" car les espaces libres ne manquent pas . Si votre version est constituée de plusieurs modules, vous adapterez facilement ce qui suit.

La gestion du clavier, originale, encore une fois, est située en $773 et est appelée deux fois dans le jeu. Une première fois en $6C7 pour gérer les pauses et une seconde fois en $705 pour tout le reste.


La gestion du clavier.


Ce qui est original, c'est le nombre de touches qu'il est possible d'utiliser pour chaque action. Voyez plutôt :

Gauche: Q,E,T,U,O,[ Droite : W,R,Y,I,P,],® ¯

Saut : Z,W,C,V,BN,M,<,>,? Pause : A,S,D,F,G

Music : H,J,K,L,:,' et return.

 

Sur un clavier QWERTY, on remarque tout de suite la logique " en lignes" de ces choix. Seulement la logique des touches n'est pas celle de la matrice lignes / colonnes utilisée pour la lecture du clavier et il va falloir retrouver nos petits.

Voici le listing commenté de cette routine.

0773 A2 09 LDX #$09 0775 A9 00 LDA #$00 Initialise $76, $77, $78, $79, 0777 95 76 STA $76,X $7A, $7B, $7C, $7D, $7E, $7F 0779 CA DEX à zéro. 077A 10 FB BPL $0777 077C A9 08 LDA #$08 Init. le compteur de colonnes 077E 85 06 STA $06 à huit. 0780 A9 00 LDA #$00 Init le compteur de touches, 0782 85 0E STA $0E à zéro. 0784 A2 7F LDX #$7F Première colonne testée 0786 A0 07 LDY #$07 Compteur de lignes. 0788 86 07 STX $07 Sauve "numéro" de colonne 078A A9 0E LDA #$0E N° de registre I/O du 8912 078C 20 4C 07 JSR $074C SP qui écrit le contenu de X dans le registre du 8912 dont le n° est dans A 078F 8C 00 03 STY $0300 Ecrit le n° de ligne sur le port B 0792 AD 00 03 LDA $0300 Teste si touche enfoncée par 0795 29 08 AND #$08 lecture du bit 3 de ORB

0797 85 0C STA $0C Le résultat est sauvé en $C 0799 AD 00 03 LDA $0300 puis on refait le test ,le résultat 079C 29 08 AND #$08 doit être identique 079E C5 0C CMP $0C sinon on recommence... 07A0 D0 F0 BNE $0792 ( je sais pas à quoi ça sert ...) 07A2 29 08 AND #$08 On reteste le bit 3 ( Ouf ! ) 07A4 F0 13 BEQ $07B9 Si on n'a pas appuyé 07A6 A6 0E LDX $0E Si oui, X contient l'index touches 07A8 BD C9 07 LDA $07C9,X et on va lire une valeur 07AB C9 09 CMP #$09 spécifique à chaque touches 07AD 90 05 BCC $07B4 dans une table. Si cette valeur 07AF 85 7F STA $7F est inférieure à 9 on va en 7B4 07B1 4C B9 07 JMP $07B9 Sinon on saute. 07B4 AA TAX La valeur devient Index 07B5 A9 FF LDA #$F On charge A avec #FF 07B7 95 76 STA $76,X Une des cases entre$76 et $7F ( fonction de X, donc de la touche) est mise à FF. 07B9 A6 07 LDX $07 Récupère le n° de colonne 07BB E6 0E INC $0E Incréménte le pteur de touches 07BD 88 DEY Décrémente le pteur de lignes 07BE 10 C8 BPL $0788 S'il reste des lignes, on boucle 07C0 8A TXA Sinon, on change de colonne 07C1 38 SEC en décalant d'un bit vers la 07C2 6A ROR la droite le bit à zéro du motif 07C3 AA TAX adressant une colonne 07C4 C6 06 DEC $06 Décrémente le ptr de colonnes 07C6 D0 BE BNE $0786 Tant qu'il reste des colonnes 07C8 60 RTS Quand y'en a plus ...

Voici la table en $7C9.

07C9 3D 01 00 01 85 02 03 33
07D1 04 03 01 01 5C 32 00 02
07D9 86 03 7F 00 FF 02 05 31
07E1 07 FF 08 07 FF 06 FF FF
07E9 02 00 01 00 2D 34 03 02
07F1 30 03 00 02 84 02 01 35
07F9 83 80 01 02 39 36 00 02
0801 38 01 00 02 82 02 81 37

 

Chaque ligne de cette table peut-être considérée comme une colonne de la matrice clavier et chaque colonnes comme une ligne ( vous suivez ?) Le tout en partant par la fin ( En haut à gauche ,soit 3D c'est l'intersection de la 7è ligne et de la 7è colonne). Prenons l'exemple des 1, on les trouve :

 

Premier 1: à l'intersection 7è col. / 6è ligne soit W
2è : "         7ècol./ 4è ligne soit ®
3è : "        6è col. / 5è ligne soit ]
4è : "        6è col. / 4è ligne soit ¯
5è : "        3è col. / 5è ligne soit P
6è : "        2è col. / 1è ligne soit R
7è : "        1è col. / 5è ligne soit I
8è : "        0è col. / 6è ligne soit Y

 

On reconnait l'ensemble des touches de déplacement à droite, pour lesquelles X sera donc égal à 1 . On en conclu que c'est $76,X soit $77 qui sera mis à FF si on veut aller à droite. De même:

 

Gauche X=0 $76 = #$FF
Droite X=1 $77 = #$FF
Saut X=2 $78 = #$FF
Pause X=3 $79 = #$FF
Esc X=5 $7B = #$FF
Ctrl X=6 $7C = #$FF
Shift X=7 $7D = #$FF
Funct X=8 $7E = #$FF

( Vous pouvez vous amuser à retrouver les touches pour X=2 par exemple...)

Nous avons maintenant les valeurs à intégrer à notre routine de lecture de la manette de jeu.


La méthode utilisée.


Comme d'habitude, maintenant, nous allons détourner les deux appels la gestion du clavier, vers notre gestion de la manette de jeu. De manière à être totalement "transparente" pour le reste du jeu, notre routine commence par initialiser la zone des $76 à $ 7F à 0. Vient ensuite, la classique lecture de la position du JS . La table va nous donner l'indice X ( équivalent à la routine clavier ). La suite est un peu nouvelle, on renseigne les cases $76 à 7F en fonction de la position du JS puis on appelle la routine de gestion clavier, en sautant l'initialisation ( $76 - $7F ), avant de retourner au jeu, qui n' y a vu que du feu!

 

Voici le listing .

3200   A2 09       LDX #$09     Remplace l'initialisation
3202   A9 00       LDA #$00     de cette zone qui aurait
3204   95 76       STA $76,X    due être réalisée par le jeu
3206   CA          DEX          en $773
3207   10 FB       BPL $3204
3209   AD 01 03    LDA $0301
320C   48          PHA 
320D   AD 03 03    LDA $0303
3210   48          PHA 
3211   A9 C0       LDA #$C0
3213   8D 03 03    STA $0303
3216   A9 40       LDA #$40
3218   8D 01 03    STA $0301
321B   AD 01 03    LDA $0301
321E   A8          TAY 
321F   29 20       AND #$20
3221   AA          TAX          Gestion classique du JS
3222   98          TYA 
3223   4A          LSR 
3224   29 0C       AND #$0C
3226   8D 2E 32    STA $322E
3229   98          TYA 
322A   29 03       AND #$03
322C   18          CLC 
322D   69 04       ADC #$04
322F   A8          TAY 
3230   B9 60 32    LDA $3260,Y
3233   8D 5E 32    STA $325E
3236   8E 5F 32    STX $325F
3239   A0 FF       LDY #$FF    Valeur à écrire
323B   AE 5E 32    LDX $325E   Charg X avec déplacement
323E   C9 09       CMP #$09    Si aucune action, la table contient 09
3240   F0 02       BEQ $3244   Y'avait 9, donc on saute
3242   94 76       STY $76,X   Pas 9, donc valeur pour  X et cases adéquates à #$FF
3244   AD 5F 32    LDA $325F   Pour  test saut
3247   D0 04       BNE $324D   Si pas 0, on n'a pas sauté
3249   A2 02       LDX #$02    Si 0, X=2 et
324B   94 76       STY $76,X   $78 = #$FF
324D   68          PLA 
324E   8D 03 03    STA $0303
3251   68          PLA         Récupère l'état du port A
3252   8D 01 03    STA $0301
3255   20 7C 07    JSR $077C   Appel gestion clavier, hors
3258   60          RTS         initialisation et retour

 

3260 09 09 09 09 09 01 00 09 3268 09 01 00 03 09 01 00 09


La marche à suivre.


1 - Entrez le listing suivant:

10A=#3200:F=#3270:L=100:REPEAT:FOR A=A TO A+15:READ C$
20K=VAL("#"+C$):S=S+K+65536*(S+K>65535):IF A<=F THEN POKE A,K
30NEXT:READ D$:IF S=VAL("#"+D$) THEN L=L+5: UNTILA>F:END
40PING:PRINT"Erreur ligne";L
100DATA A2,09,A9,00,95,76,CA,10,FB,AD,01,03,48,AD,03,03,05E0
105DATA 48,A9,C0,8D,03,03,A9,40,8D,01,03,AD,01,03,A8,29,0B20
110DATA 20,AA,98,4A,29,0C,8D,2E,32,98,29,03,18,69,04,A8,0FDF
115DATA B9,60,32,8D,5E,32,8E,5F,32,A0,FF,AE,5E,32,C9,09,1715
120DATA F0,02,94,76,AD,5F,32,D0,04,A2,02,94,76,68,8D,03,1DC9
125DATA 03,68,8D,01,03,20,7C,07,60,55,55,55,55,55,55,55,221B
130DATA 09,09,09,09,09,01,00,09,09,01,00,03,09,01,00,09,2272
135DATA 55,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,22C7

 

2 - RUN
3 - SAVE"JSMANIC",A#3200,E#3270
4 - MANICMNR,N
5 - JSMANIC
6 - DOKE#6C8,#3200
7 - DOKE#706,#3200
8 - SAVEU"MANICMNR",A#500,E#A000,T#5FD

 

Nota : N'oubliez pas de couper la musique... ( touche J ).


Télécharger  MANIC MINER ! Download

la page baton de joie   joystick page