|
Qui veut jouer à STYX avec une manette de jeu ?
L'état des lieux.
Styx n'est formé que d'un seul module, situé entre #2000 et # 7100. La routine de gestion du clavier est située en #21E0.

La marche à suivre.
1 - Entrez le listing suivant ( sauvegardez le)
10 A=#7101:F=#7170: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,8A,48,AD,01,03,48,AD,03,03,48,A9,C0,8D, 03,059F
105 DATA 03,A9,40,8D,01,03,AD,01,03,A8,29,20,AA,98,4A, 29,0A73
110 DATA 0C,8D,2A,71,98,29,03,18,69,0C,A8,B9,60,71,8D, 5E,1015
115 DATA 71,E0,20,F0,02,A2,FE,8E,5F,71,68,8D,03,03,68, 8D,1766
120 DATA 01,03,68,AA,68,A8,AD,5E,71,60,00,00,00,00,00, 00,1B68
125 DATA 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 00,1B68
130 DATA 00,00,00,00,BF,DF,00,00,BF,DF,00,00,BF,DF,00, EA,212C
2 - RUN
3 - STYX,N
4 - POKE#21E4,#20:DOKE#21E5,#7101( JSR$7101)
5 - POKE#21E7,#C9:POKE#21E8,#BF (CMP#$BF)
6 - POKE#21E9,#D0 ( BNE$...)
7 - POKE#21F1,#AD:DOKE#21F2,#715E
(LDA$715E)
8 -POKE#21F4,#C9:POKE#21F5,#DF(CMP#$DF )
9 - POKE#21F6,#D0( BNE$.... )
10- POKE#2208,#AD:DOKE#2209,#715F(LDA$715F)
|
11- POKE#220B,#C9:POKE#220C,#FE(CMP#$FE )
12- POKE#220D,#D0( BNE$... )
13- SAVEU"STYX",A#2000,E#7170,AUTO
Quelques explications ?
A la sortie de la routine de gestion de la manette, implantée
en #7101 par le listing BASIC, A et la case mémoire #715E
contiennent #BF ou #DF selon la direction choisie ( droite
ou gauche) et #715F contient # FE ou #00 selon que l'on
a fait feu ou pas.
Gestion des déplacements originale ( Clavier )
21E0 A9 00 LDA #$00 Initialise $07 à 0, case image
21E2 85 07 STA $07 du clavier ( spécifique à ce jeu)
21E4 A2 BF LDX #$BF Donnée à écrire ds registre I/O
21E6 20 D2 20 JSR $20D2 du 8912 ( colonne 6 matrice clavier )
20D2 A9 0E LDA #$0E N° du registre I/O 8912 (14)
20D4 20 96 20 JSR $2096
2096 8D 01 03 STA $0301 N° registre 8912 sur port A
2099 A9 FF LDA #$FF 1111 1111 CA2 et CB2 à 1
209B 8D 0C 03 STA $030C donc: adressage du registre
209E A9 DD LDA #$DD 1101 1101 CA2 et CB2 à 0
20A0 8D 0C 03 STA $030C donc: 8912 isolé du port A
20A3 60 RTS
20D7 8A TXA Transfert de la donnée à écrire
20D8 20 8C 20 JSR $208C dans A,
208C 8D 01 03 STA $0301 Puis sur le port A
208F A9 FD LDA #$FD CA2 à 0,CB2 à 1
2091 8D 0C 03 STA $030C donc: écriture ds registre $0E
2094 D0 08 BNE $209E (?)
2096 8D 01 03 STA $0301 (?)
2099 A9 FF LDA #$FF 1111 1111 (?)
209B 8D 0C 03 STA $030C CA2 et CB2 à 1(?)
209E A9 DD LDA #$DD CA2 et CB2 à 0
20A0 8D 0C 03 STA $030C donc: 8912 isolé du port A
20A3 60 RTS
20DB A9 04 LDA #$04 N° de ligne matrice clavier
20DD 4C 24 20 JMP $2024.
2024 8D 00 03 STA $0300 sur le port B du VIA
2027 48 PHA
2028 68 PLA Temporisation
2029 48 PHA
202A 68 PLA
202B AD 00 03 LDA $0300 Lecture du port B
202E 29 08 AND #$08 Test de PB3 ( =1 si touche enfoncée)
2030 60 RTS
21E9 F0 06 BEQ $21F1 si PB3=0, on n'a pas appuyé
21EB A5 07 LDA $07
21ED 09 01 ORA #$01 mise à 1 du bit 0 de l'octet $07
21EF 85 07 STA $07 spécifique à ce jeu...)
21F1 A2 DF LDX #$DF Test touche suivante
Pour comprendre la greffe de la gestion du joy-stick, il vous
suffit de remplacer les 3 fois 6 octets en #21E4, #21F1 et
#2208 par les octets POKés aux points 4 à 12.
|