Gamoover

[move]Bienvenue sur Gamoover, portail francophone de l'arcade.

[WIP] Bricolage sur CPS1

Démarré par aje_fr, Dimanche 09 Juin 2013, 23:01:53 PM

aje_fr

Et un de plus (mon préféré) : captain commando  :-)=
Think different, don't purchase Apple !

Thieum


Un de mes préférés aussi, surtout parce qu'on peut jouer un bébé qui pilote un robot qui pilote un robot!


aje_fr

J'attaque maintenant 3 wonders, ça risque d'être un peu plus chaud comme le GAL n'est pas dumpé pour cette version de PCB.
Dommage car le jeu démarre correctement mais les graphismes ne fonctionnent pas comme il faut.
A suivre.
Think different, don't purchase Apple !

yannick60

courage,si besoin j'ai strider ;)

aje_fr

#20
Il m'aura donné du fil à retordre, mais c'est bon, un de plus ! 3 wonders  :-)= :-)=
A l'avenir il faudra que je dévie quelques adresses de plus mais bon pour le moment, c'est pas mal du tout !
Think different, don't purchase Apple !

aje_fr

#21
Encore un autre, king of dragons !
Bon, je voulais tester punisher mais il ne veut pas démarrer, peut être le boot chinois marchera mieux.
Sinon, la GAL22V10 n'est pas du tout du tout assez puissante, il vas falloir passer à plus couillu  :D
Maintenant il reste le son à s'occuper aussi !
A+
Think different, don't purchase Apple !

yannick60

Pour info mon strider tourne sur B21 et sur la même b board que toi,c'est pour ça que je te l'ai proposé. ;)

aje_fr

Salut,
Ouaip, je vais tenter strider, ce fera le huitième de la liste  ;)
A+
Think different, don't purchase Apple !

aje_fr

Ca y est, strider aussi tourne


Donc pour résumer :

  • Street Fighter 2 CE
  • Daimakaimura
  • Captain Commando
  • Cadillac & Dinosaurs (qui n'aura peut être pas de son)
  • King of Dragon
  • Knight of the round
  • 3 Wonders
  • Strider

Reste maintenant à changer la GAL pour quelque chose de plus gros et s'attaquer au son (mais là, ça devrait être beaucoup plus facile) !

A suivre donc !
Think different, don't purchase Apple !

kroustibat

tiens question bête d'un méga n00b ... j'ai récupéré une pcb originale de sf2 et un programmateur d'eprom. comment identifier le modèle des proms pour les lire (les sf2e-1m,...)?

merci




Iro

C'est marqué dessus, normalemnt
C'est du 27c*** (27C4096)
Ton programmateur ne s'est pas les identifier ?
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO   

kroustibat

Citation de: Iro le Mardi 18 Juin 2013, 10:05:36 AM
C'est marqué dessus, normalemnt
C'est du 27c*** (27C4096)
Ton programmateur ne s'est pas les identifier ?

mon programmeur ne les identifie pas malheureusement :s Et j'ai eu beau lire dessus, c'était plus de référence capcom que des références puces

dlfrsilver

#28
juste pour info, j'ai mis sur arcade system un topic ou y a mes roms cps1 patchées....

si la C-board est la CPS-B-21, le driver video de mame donne les valeurs.

Après ce qu'il faut savoir c'est qu'un jeu CPS1 peut faire des verifications matérielles, (comprendre l'équivalent pour ceux qui connaissent l'amiga ou l'atari ST d'un copylock).

la C-board est doté d'une puce "programmable d'usine". Vous pouvez pour protéger un jeu cps1 tout frais en mettant les adresses materielles qui affichent les layers du jeu dans une ram volatile.... Sans parler, et c'est de loin le plus difficile, des checksums (une saloperie qu'on trouve sur les jeux amiga et atari ST aussi....sauf qu'au lieu d'en avoir 5 ou 10, un jeu CPS1 voir un jeu QSOUND peut facile en avoir plus de 60! genre saturday night slamasters ou son upgrade en multijoueur (je suis toujours dessus, et j'ai pas fini....)

Vous voyez tout de suite ou je veux en venir.... je parle des jeux CPS-1 a pile, héhéhé :)

genre knights of the round, y a genre presque 70 ou 80 modifications à faire dans le code programme du jeu. sur les 70 ou 80 modifs, y a pas loin de 20 checksums.....

C'est un quoi un checksum sur un jeu CPS-1 protégé ? c'est une instruction 68000 qui bien souvent va utiliser de maniere indirecte un registre matériel. je vous donne un exemple, le registre de base
pour afficher les layers, c'est $12C0. la layer 1 ca peut etre $12C4, la layer 2 $12C8 et la layer 3 la somme de $12C0 + octetlayer1+octetlayer2+octetlayer3 ! le jeu va verifier l'octet (ex : $C4 et $C8) et ça dans un programme allez le chercher ! XD

je posterais ici en détails toutes les modifs pour knights of the round pour que vous vous fassiez une idée :)

EDIT : j'ai passé 20 minutes à checker Willow :)

y a au minimum 23 modifications a faire, et pas de bol, ils ont utilisé des checksums avec vérification
des registres matériels en mode indirect....

voici ce que j'ai utilisé pour trouvé les valeurs à changer :

        ctrl    priority masks      palctrl      layer enable masks  */
CPSB03 : 0x30,{0x2e,0x2c,0x2a,0x28},  0x26,    {0x20,0x10,0x08,0x00,0x00}

CPSB01 : 0x26,{0x28,0x2a,0x2c,0x2e},  0x30,    {0x02,0x04,0x08,0x30,0x30}

base register $800140 (registre immuable sur toutes les cartes CPS1)

     
la base pour comprendre :

registre de base pour toutes les fonctions matérielles = $800140
registre de controle de la palette = $800140+30 = $800170
registre de controle d'affichage des layers = $12C0 (registre fixe sur toutes les carte CPS1)

Willow :
$12C0+20=$12E0 (affichage layer 1)
$12C0+10=$12D0 (affichage layer 2)
$12C0+08=$12C8 (affichage layer 3)
$12C0+20+10+08=$12F8 (affichage layer 1,2,3 en même temps... si si si :) )

Strider :
$12C0+02=$12C2 (affichage layer 1)
$12C0+04=$12C4 (affichage layer 2)
$12C0+08=$12C8 (affichage layer 3)
$12C0+02+04+08=$12CE (affichage layer 1,2,3 en même temps... si si si :) )

willow :
Priority Mask 1 = $800140+2E=$80016E
Priority Mask 2 = $800140+2C=$80016C
Priority Mask 3 = $800140+2A=$80016A
Priority Mask 4 = $800140+28=$800168

strider :
willow :
Priority Mask 1 = $800140+28=$800168
Priority Mask 2 = $800140+2A=$80016A
Priority Mask 3 = $800140+2C=$80016C
Priority Mask 4 = $800140+2E=$80016E

registre de contrôle de la palette
Willow : $800140+26=$800166
Strider : $800140+30=$800170


aje_fr

#29
Salut,
Comme je te l'ai dit par MP, merci énormément pour tes explications !  ^-^
Alors, je suis en train d'essayer de comprendre le désuicidage de king of dragon pour apprendre le fonctionnement.

Voici donc la définition de mame pour la C board par défaut et celle avec la protection :

 438  /*                     CPSB ID    multiply protection      unknown      ctrl     priority masks   palctrl    layer enable masks  */
 452  #define CPS_B_21_DEF 0x32,  -1,   0x00,0x02,0x04,0x06, 0x08, -1,  -1,   0x26,{0x28,0x2a,0x2c,0x2e},0x30, {0x02,0x04,0x08,0x30,0x30} // pang3 sets layer enable to 0x26 on startup
 454  #define CPS_B_21_BT2  -1,   -1,   0x1e,0x1c,0x1a,0x18,  -1, 0x0c,0x0a,  0x20,{0x2e,0x2c,0x2a,0x28},0x30, {0x30,0x08,0x30,0x00,0x00}


J'ai compris la plupart des changements dans le code grâce à tes explications, mais je bute sur certaines.

1er exemple:

ROM CODEE
00001DB8: 303C 12F8       move.w  #$12f8, D0
00001DBC: 33C0 0080 0160  move.w  D0, $800160.l

ROM DECODEE
00001DB8: 303C 12CE       move.w  #$12ce, D0
00001DBC: 33C0 0080 0166  move.w  D0, $800166.l

Je comprends que le $800166 qui devient $800160 est dû à la variable CTRL qui passe de $26 à $20.
Par contre, le $12F8 qui correspondrait à $12C0 + $30 + $8 donc soit à layer 1 + layer 2 ou layer 2 + layer 3.
On voit que ça a été remplacé par $12ce = $12c0 + $2 + $4 + $8 donc layer 1 + layer 2 + layer 3. Est-ce parce que tu avais un doute sur quelle layer était utilisée ?


2eme exemple

ROM CODEE
000023C4: 33C0 0080 015E  move.w  D0, $80015e.l
000023CA: 33C1 0080 015C  move.w  D1, $80015c.l
000023D0: 2039 0080 0158  move.l  $800158.l, D0

ROM DECODEE
000023C4: 33C0 0080 0140  move.w  D0, $800140.l
000023CA: 33C1 0080 0142  move.w  D1, $800142.l
000023D0: 2039 0080 0142  move.l  $800142.l, D0

Là.... je ne comprends pas beaucoup... voir même rien, d'où sortent ces valeurs ? Elles apparaissent aussi à d'autres endroits.
Car si on retranche $800140, on ne retombe sur aucune des valeurs du tableau des priority mask à ajouter...

3e exemple

ROM CODEE
00005A8C: 1B7C 0001 1EF0  move.b  #$1, ($1ef0,A5)
...
00009D86: 1039 0000 E254  move.b  $e254.l, D0

ROM DECODEE
00005A8C: 1B7C 0000 1EF0  move.b  #$0, ($1ef0,A5)
...
00009D86: 103C 002C       move.b  #$2c, D0
00009D8A: 4E71            nop


Pourquoi écrire 0 dans le PPU ? Et la deuxième portion, est-ce pour faire sauter une protection ?

Idem ici, est-ce pour ne pas utiliser certaines fonctions du PPU :

ROM CODEE
000106BC: 33FC 1D6B 0080  move.w  #$1d6b, $80014c.l
         014C
000106C4: 33FC 21C2 0080  move.w  #$21c2, $80014a.l
         014A

ROM DECODEE
000106BC: 4E71            nop
000106BE: 4E71            nop
000106C0: 4E71            nop
000106C2: 4E71            nop
000106C4: 4E71            nop
000106C6: 4E71            nop
000106C8: 4E71            nop
000106CA: 4E71            nop



Bon, j'arrête là, ça fait pas mal de questions  :D

A bientôt
Think different, don't purchase Apple !

dlfrsilver

Citation de: aje_fr le Jeudi 20 Juin 2013, 23:24:42 PM
Salut,
Comme je te l'ai dit par MP, merci énormément pour tes explications !  ^-^
Alors, je suis en train d'essayer de comprendre le désuicidage de king of dragon pour apprendre le fonctionnement.

Voici donc la définition de mame pour la C board par défaut et celle avec la protection :

 438  /*                     CPSB ID    multiply protection      unknown      ctrl     priority masks   palctrl    layer enable masks  */
 452  #define CPS_B_21_DEF 0x32,  -1,   0x00,0x02,0x04,0x06, 0x08, -1,  -1,   0x26,{0x28,0x2a,0x2c,0x2e},0x30, {0x02,0x04,0x08,0x30,0x30} // pang3 sets layer enable to 0x26 on startup
 454  #define CPS_B_21_BT2  -1,   -1,   0x1e,0x1c,0x1a,0x18,  -1, 0x0c,0x0a,  0x20,{0x2e,0x2c,0x2a,0x28},0x30, {0x30,0x08,0x30,0x00,0x00}


J'ai compris la plupart des changements dans le code grâce à tes explications, mais je bute sur certaines.

1er exemple:

ROM CODEE
00001DB8: 303C 12F8       move.w  #$12f8, D0
00001DBC: 33C0 0080 0160  move.w  D0, $800160.l

ROM DECODEE
00001DB8: 303C 12CE       move.w  #$12ce, D0
00001DBC: 33C0 0080 0166  move.w  D0, $800166.l

Je comprends que le $800166 qui devient $800160 est dû à la variable CTRL qui passe de $26 à $20.
Par contre, le $12F8 qui correspondrait à $12C0 + $30 + $8 donc soit à layer 1 + layer 2 ou layer 2 + layer 3.
On voit que ça a été remplacé par $12ce = $12c0 + $2 + $4 + $8 donc layer 1 + layer 2 + layer 3. Est-ce parce que tu avais un doute sur quelle layer était utilisée ?

explication : tu as vu la difference dans les valeurs pour l'activation des couches ?
ce qui se passe, c'est que suivant la C-board, l'activation ou l'affichage et enchainement des couches ne fonctionne pas pareil :) dans le cas que tu cites, la rom avec le fichier config maintenu en vie avec la pile active toujours la layer 1 et 3 en même temps, de facon obligatoire. Seule la layer 2 peut etre affichée individuellement. Mais comme le système est très souple, quand on modifie les valeurs pour convertir le jeu pour le C-board CPS-B-21 par défaut (sans pile quoi :) ) on doit respecter ce système.
donc on prend $12C0 (registre de base des layers) et on ajoute $02+$04+08$ pour activer les trois couches. sur la config protégée par pile, $30 n'active pas la layer 1+3 ou ou 2+3 mais bien les layers 1 ET 3, puisque $30 est la valeur qui les active toutes les deux ! donc par rapport à la config normale, ça revient a qu'on affiche les couche 1+3 ($30) + la couche 2 ($08) soit si on regarde de plus près les couches 1,2,3 en même temps. Donc forcément, pour le mode normal, on utilisera les les trois valeurs d'activation de layer 1,2,3 soit $02,$04,$08.


Citation
2eme exemple

ROM CODEE
000023C4: 33C0 0080 015E  move.w  D0, $80015e.l
000023CA: 33C1 0080 015C  move.w  D1, $80015c.l
000023D0: 2039 0080 0158  move.l  $800158.l, D0

ROM DECODEE
000023C4: 33C0 0080 0140  move.w  D0, $800140.l
000023CA: 33C1 0080 0142  move.w  D1, $800142.l
000023D0: 2039 0080 0142  move.l  $800142.l, D0

Là.... je ne comprends pas beaucoup... voir même rien, d'où sortent ces valeurs ? Elles apparaissent aussi à d'autres endroits.
Car si on retranche $800140, on ne retombe sur aucune des valeurs du tableau des priority mask à ajouter...

normal, je t'ai pas encore expliqué ce que c'est, tout simplement parce que strider et willow ne sont pas concernés par ce genre de cas de figure. ici tu as a faire a ce que les gens de mame appelent des protections par multiplication. le PPU spécial utilisé ici possède des registres matériel en plus.
la routine que tu me montres en est une regarde : ($800140+1e=$80015E, $800140+1c=$80015C, $800140+18=$800158). les adresses pour la protection par multiplication ont donc été changées. Si tu le fais pas, ton jeu il va foirer un truc violent :)

Citation
3e exemple

ROM CODEE
00005A8C: 1B7C 0001 1EF0  move.b  #$1, ($1ef0,A5)
...
00009D86: 1039 0000 E254  move.b  $e254.l, D0

ROM DECODEE
00005A8C: 1B7C 0000 1EF0  move.b  #$0, ($1ef0,A5)
...
00009D86: 103C 002C       move.b  #$2c, D0
00009D8A: 4E71            nop


Pourquoi écrire 0 dans le PPU ? Et la deuxième portion, est-ce pour faire sauter une protection ?

ah super, pour ça on verra plus tard. Faut déjà que tu comprennes comment le reste fonctionne.
Ici c'est un accès en mode indirect.

Citation
Idem ici, est-ce pour ne pas utiliser certaines fonctions du PPU :

ROM CODEE
000106BC: 33FC 1D6B 0080  move.w  #$1d6b, $80014c.l
         014C
000106C4: 33FC 21C2 0080  move.w  #$21c2, $80014a.l
         014A

ROM DECODEE
000106BC: 4E71            nop
000106BE: 4E71            nop
000106C0: 4E71            nop
000106C2: 4E71            nop
000106C4: 4E71            nop
000106C6: 4E71            nop
000106C8: 4E71            nop
000106CA: 4E71            nop



Bon, j'arrête là, ça fait pas mal de questions  :D

A bientôt

normal la encore je ne t'ai pas expliqué ce que c'est. Pourtant si tu regardes bien, tout est indiqué
dans les 2 lignes que tu as copié du driver vidéo de mame :)

A bientôt :)

Iro

J'aime bien les mecs qui débarquent de n'importe où sur le forum et te mettent une claque :D
Chapeau <:)
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF - Ma collec' de panels

LES TUTOS DE GAMO