CPC-POWER : CPC-SOFTS - CPCArchives 
Options de Recherche :
 
 
 

ARTICLES

72 / 73

Renegade - Cheat mode

L'activation du sang rouge dans Renegade n'est pas une légende, voici les explications concernant la programmation du test clavier :

 

#02D2

di
ld hl,#0040    Buffer des touches pressées pour les 10 lignes a scannées

Routine scan touche pressée, Si aucune touche pressée A=#FF
ld bc,#f40e
out (c),c
ld b,#f6
in a,(c)
and #30
ld c,a
or #c0
out (c),a
out (c),c
inc b
ld a,#92
out (c),a
push bc
set 6,c

#02F0    

ld b,#f6
out (c),c
ld b,#f4
in a,(c)
cpl          Inversion de tous les bits de A, donc si aucune touche pressée A=0
ld (hl),a    On stocke
inc l        Incrémentation du buffer
inc c        Ligne suivante
ld a,c
and #0f
cp #0a       10eme ligne atteinte ?
jp nz,#02f0  non, alors on boucle
pop bc
ld a,#82
out (c),a
dec b
out (c),c
ei
ret

 #030E

ld a,(#a76f)
push af
call #0396
ld (#a76f),a

#0318

ld c,a        C contient la valeur qui nous intéresse, autrement dit #FF pour cheat code OK
pop af
xor c
and c
ld (#a770),a  stocke valeur pour traitement de mouvement ou de coup
ret p         retour boucle principale du jeu si ESC pas pressé
inc c
jr nz,#032f   si C<>0 saute le cheat code et passe en Pause

#0323

ld a,#18
ld (#0e1d),a
xor a
ld (#03db),a
    ...

#032F    Jeu mis en pause

...

#0396

call #02d2

1ere Pass de comparaison des touches pressées avec le cheat code attendu.
Touches clavier
Ligne     #08 ; #01 ; #00 ; #00 ; #07 ; #05 ; #08 ; #07
Valeur    #04 ; #01 ; #02 ; #04 ; #08 ; #80 ; #20 ; #20

ld h,#00
ld b,#00
ld de,#03bb
call #03a6

2eme Pass de comparaison
Touches clavier + Joystick
Ligne     #08 ; #01 ; #00 ; #00 ; #09 ; #09 ; #09 ; #09
Valeur    #04 ; #80 ; #40 ; #80 ; #01 ; #02 ; #04 ; #08

ld de,#03cb

#03A6

ld c,#01    Compteur C mis a 1

#03A8

ld a,(de)    A contient l'unité de la ligne qu'on veut comparer  
add #40      on additionne #40 a A,
ld l,a       on se cale avec le buffer précèdent des touches pressées par ligne en #40 a #49
inc de
ld a,(de)    A contient la valeur des touches qui doivent être pressées pour cette ligne
inc de
and (hl)     On compare A avec ce qui est dans le buffer correspondant à cette ligne
jr z,#03b3   Si différent, Carry a 0 puis on saute
scf          Sinon on met la Carry a 1

#03B3

rl c         On multiplie C par 2 + la Carry    
jr nc,#03a8  Fin de la Pass ? non, on boucle alors !
ld a,c       on mets le résultat final dans A
or b         OR B, B qui vaut 0 pour la première Pass, donc ça ne change rien
ld b,a       B contient le résultat final pour la première Pass
ret      

#03BB     

db #08,#04,#01,#01,#00,#02,#00,#04
db #07,#08,#05,#80,#08,#20,#07,#20

#03CB     

db #08,#04,#01,#80,#00,#40,#00,#80
db #09,#01,#09,#02,#09,#04,#09,#08


A la fin de la deuxième Pass, A contient le résultat de la deuxième Pass, puis le OR B, avec la valeur de B obtenu lors de la première Pass, donnera une valeur totale dans A, qui sera elle-même mis dans C, au retour du CALL en #0318

 

Matrice Clavier CPC

LIGNES Colonne / Bit
0 1 2 3 4 5 6 7
0 Fleche Haut Fleche Droite Fleche Bas Pave Num 9 Pave Num 6 Pave Num 3 Pave Num Enter Pave Num .
1 Fleche Gauche Copy Pave Num 7 Pave Num 8 Pave Num 5 Pave Num 1 Pave Num 2 Pave Num 0
2 CLR [ Enter ] Pave Num 4 SHIFT   CTRL
3 £ - = @ P + ; * : ? / >
4 0 9 O I L K M <
5 8 7 U Y H J N ESPACE
6 6 5 R T G F B V
7 4 3 E W S D C X
8 1 2 ESC Q TAB A CAPS LOCK Z
9 Joystick Haut Joystick Bas Joystick Gauche Joystick Droite Joystick Fire NC NC DEL

 

LIGNES Example : ESC + W + A + D + Espace + ← + ↓ + →    (bit 0 a gauche vers bit 7 a droite) Hexa
Colonne / Bit
0 1 2 3 4 5 6 7
40 0 1 1 0 0 0 0 0 06
41 1 0 0 0 0 0 0 0 01
45 0 0 0 0 0 0 0 1 80
47 0 0 0 1 0 1 0 0 28
48 0 0 1 0 0 1 0 0 24

 

LIGNES Example : ESC + Joy ↑ + A + D + Espace + 0 + ↓ + Enter   (bit 0 a gauche vers bit 7 a droite) Hexa
Colonne / Bit
0 1 2 3 4 5 6 7
40 0 0 1 0 0 0 1 0 44
41 0 0 0 0 0 0 0 1 80
45 0 0 0 0 0 0 0 1 80
47 0 0 0 0 0 1 0 0 20
48 0 0 1 0 0 1 0 0 24
49 1 0 0 0 0 0 0 0 01

 

Combinaison physiquement possible avec valeur dans Registre B pour 1ere Pass, et A pour 2eme Pass

TOUCHES Ligne Registre
40 41 45 47 48 49 B A C
ESC+W+A+D+Espace+++ 00000110/06 00000001/01 10000000/80 00101000/28 00100100/24 00000000/00 FF 80 FF
ESC+W+A+D+Espace+++Enter 01000100/44 00000001/01 10000000/80 00101000/28 00100100/24 00000000/00 DF A0 FF
ESC+W+A+D+Espace++.+ 10000010/82 00000001/01 10000000/80 00101000/28 00100100/24 00000000/00 EF 90 FF
ESC+W+A+D+Espace++.+Enter 11000000/C0 00000001/01 10000000/80 00101000/28 00100100/24 00000000/00 CF B0 FF
ESC+W+A+D+Espace+0++ 00000110/06 10000000/80 10000000/80 00101000/28 00100100/24 00000000/00 BF C0 FF
ESC+W+A+D+Espace+0++Enter 01000100/44 10000000/80 10000000/80 00101000/28 00100100/24 00000000/00 9F E0 FF
ESC+W+A+D+Espace+0+.+ 10000010/82 10000000/80 10000000/80 00101000/28 00100100/24 00000000/00 AF D0 FF
ESC+W+A+D+Espace+0+.+Enter 11000000/C0 10000000/80 10000000/80 00101000/28 00100100/24 00000000/00 8F F0 FF
ESC+W+A+D+Joy↓+++ 00000110/06 00000001/01 00000000/00 00101000/28 00100100/24 00000010/02 FB 84 FF
ESC+W+A+D+Joy↓+++Enter 01000100/44 00000001/01 00000000/00 00101000/28 00100100/24 00000010/02 DB A4 FF
ESC+W+A+D+Joy↓++.+ 10000010/82 00000001/01 00000000/00 00101000/28 00100100/24 00000010/02 EB 94 FF
ESC+W+A+D+Joy↓++.+Enter 11000000/C0 00000001/01 00000000/00 00101000/28 00100100/24 00000010/02 CB B4 FF
ESC+W+A+D+Joy↓+0++ 00000110/06 10000000/80 00000000/00 00101000/28 00100100/24 00000010/02 BB C4 FF
ESC+W+A+D+Joy↓+0++Enter 01000100/44 10000000/80 00000000/00 00101000/28 00100100/24 00000010/02 9B E4 FF
ESC+W+A+D+Joy↓+0+.+ 10000010/82 10000000/80 00000000/00 00101000/28 00100100/24 00000010/02 AB D4 FF
ESC+W+A+D+Joy↓+0+.+Enter 11000000/C0 10000000/80 00000000/00 00101000/28 00100100/24 00000010/02 8B F4 FF
ESC+W+A+Joy→+Espace+++ 00000110/06 00000001/01 10000000/80 00001000/08 00100100/24 00001000/08 FE 81 FF
ESC+W+A+Joy→+Espace+++Enter 01000100/44 00000001/01 10000000/80 00001000/08 00100100/24 00001000/08 DE A1 FF
ESC+W+A+Joy→+Espace++.+ 10000010/82 00000001/01 10000000/80 00001000/08 00100100/24 00001000/08 EE 91 FF
ESC+W+A+Joy→+Espace++.+Enter 11000000/C0 00000001/01 10000000/80 00001000/08 00100100/24 00001000/08 CE B1 FF
ESC+W+A+Joy→+Espace+0++ 00000110/06 10000000/80 10000000/80 00001000/08 00100100/24 00001000/08 BE C1 FF
ESC+W+A+Joy→+Espace+0++Enter 01000100/44 10000000/80 10000000/80 00001000/08 00100100/24 00001000/08 9E E1 FF
ESC+W+A+Joy→+Espace+0+.+ 10000010/82 10000000/80 10000000/80 00001000/08 00100100/24 00001000/08 AE D1 FF
ESC+W+A+Joy→+Espace+0+.+Enter 11000000/C0 10000000/80 10000000/80 00001000/08 00100100/24 00001000/08 8E F1 FF
ESC+W+Joy←+D+Espace+++ 00000110/06 00000001/01 10000000/80 00101000/28 00000100/04 00000100/04 FD 82 FF
ESC+W+Joy←+D+Espace+++Enter 01000100/44 00000001/01 10000000/80 00101000/28 00000100/04 00000100/04 DD A2 FF
ESC+W+Joy←+D+Espace++.+ 10000010/82 00000001/01 10000000/80 00101000/28 00000100/04 00000100/04 ED 92 FF
ESC+W+Joy←+D+Espace++.+Enter 11000000/C0 00000001/01 10000000/80 00101000/28 00000100/04 00000100/04 CD B2 FF
ESC+W+Joy←+D+Espace+0++ 00000110/06 10000000/80 10000000/80 00101000/28 00000100/04 00000100/04 BD C2 FF
ESC+W+Joy←+D+Espace+0++Enter 01000100/44 10000000/80 10000000/80 00101000/28 00000100/04 00000100/04 9D E2 FF
ESC+W+Joy←+D+Espace+0+.+ 10000010/82 10000000/80 10000000/80 00101000/28 00000100/04 00000100/04 AD D2 FF
ESC+W+Joy←+D+Espace+0+.+Enter 11000000/C0 10000000/80 10000000/80 00101000/28 00000100/04 00000100/04 8D F2 FF
ESC+Joy ↑+A+D+Espace+++ 00000110/06 00000001/01 10000000/80 00100000/20 00100100/24 00000001/01 F7 88 FF
ESC+Joy ↑+A+D+Espace+++Enter 01000100/44 00000001/01 10000000/80 00100000/20 00100100/24 00000001/01 D7 A8 FF
ESC+Joy ↑+A+D+Espace++.+ 10000010/82 00000001/01 10000000/80 00100000/20 00100100/24 00000001/01 E7 98 FF
ESC+Joy ↑+A+D+Espace++.+Enter 11000000/C0 00000001/01 10000000/80 00100000/20 00100100/24 00000001/01 C7 B8 FF
ESC+Joy ↑+A+D+Espace+0++ 00000110/06 10000000/80 10000000/80 00100000/20 00100100/24 00000001/01 B7 C8 FF
ESC+Joy ↑+A+D+Espace+0++Enter 01000100/44 10000000/80 10000000/80 00100000/20 00100100/24 00000001/01 97 E8 FF
ESC+Joy ↑+A+D+Espace+0+.+ 10000010/82 10000000/80 10000000/80 00100000/20 00100100/24 00000001/01 A7 D8 FF
ESC+Joy ↑+A+D+Espace+0+.+Enter 11000000/C0 10000000/80 10000000/80 00100000/20 00100100/24 00000001/01 87 F8 FF

 

Article rédigé par Stéphane BEGUE

 

Article créé le : Samedi 21 Avril 2018 à 16 h 23
Dernière mise à jour le : Samedi 21 Avril 2018 à 18 h 01
 
 

CPC-POWER/CPCArchives, projet maintenu par Fredouille.
Programmation par Kukulcan © 2007-2018 tous droits réservés.
Reproduction sans autorisation interdite. Tous les titres utilisées appartiennent à leurs propriétaires respectifs.