1

Après avoir subit maintes pressions (couteau sous la gorge, menaces de mort, offres de petits gâteaux) de la part de monsieur Kuk, j'ai voulu franchir le pas pour me mettre à la NGP(C).

Je précise que je suis un gros noob, je ne connais pas du tout la scène (il y en a une ?), je n'ai joué qu'à Puzzle Bobble et je n'ai lu que 2 fois les documents du kit de dev wink

Comme mon idée de départ était de porter mon jeu GB Airaki sur NGPC, je voulais en premier lieu voir si la production de cartouches pouvait se faire sans encombres.
A ce moment là, Kuk m'a indiqué que certains homebrewers avaient été bloqués a cette étape a cause d'une certaine "protection".
Sachant que les cartouches officielles n'avaient qu'une puce de flash, j’étais surpris.

Bref, après la lecture de quelques sujets ici et sur des sites étrangers, il s’avère que c'est loin d’être un problème.

L'objet de ce présent sujet, c'est d'avoir votre avis concernant la proposition d'une solution:

J'ai actuellement un modèle de carte qui peut accommoder des jeux de 2Mo, ainsi que la définition logique du bidule magique qui permet de faire passer le dit jeu.
Les jeux de 4Mo sont pas loin, il faut juste que je teste en situation réelle.

Ça serait mentir de dire que c'est obscur et complexe, mais vu que visiblement personne n'est allé jusque là pour une production (sauf pour des linkers), je pensais proposer contre une rémunération raisonnable:

-Soit un pack entier (fichiers GERBER, fusemap, liste des composants) sous forme de fichiers pour en faire ce que bon vous semble.
-Soit un kit avec un programmateur et un lot de cartes toutes faites. Prêt a l'usage.
-Soit juste un lot de puces pré-programmées.

Une fois encore, mon but n'est pas de me remplir les poches, mais d’amortir les quelques heures de boulot et surtout de voir de nouvelles cartouches apparaitre smile
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

2

-

3

love arme
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

4

Kuk, arrête de maltraiter ce pauvre Furrtek embarrassed
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

tu veux le remplacer ? fesses fouet
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

6

J'ai déja mangé chez toi, j'estime avoir suffisamment souffert embarrassed
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

Le lot de puce pré-programmé ne serait pas forcément pour l'utilisateur lambda, non ?
Sinon toutes les autres propositions me paraissent intéressantes et comme dit Orion, je trouve aussi normal que tu récupères quelque chose en échange du travail fourni. wink
avatar
----- SNK Forever -----
Association Retro-gaming Connexion : http://www.retro-gc.fr/
http://www.consoles-portables.com

8

J'ai pas de traces des coups de fouets encore, ça va wink

Oui tout compte fait, celui qui achèterait des puces préprogrammées n'aurait probablement pas de mal à écrire le "code", ni à programmer la puce lui même... Mais les deux autres propositions valent toujours smile

Concernant le montant, je sais bien que ce n'est pas toujours évident de récupérer un minimum de bénéfice quand on produit un jeu rétro donc quand je dis "raisonnable", je veux dire "pas grand chose" tongue (Kuk pose ce couteau)
Sauf si bien sur je fournis les cartes toutes prêtes, là il y aurait des frais matériels qui ne dépendent pas de moi.
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

9

Ce serait quoi la différence avec les cartes produites par Flavor (http://flashmasta.com/) ?
Je ne vois pas trop

10

La quantité disponible, le prix surtout, la possibilité de bloquer la carte en écriture pour empêcher de s'en servir comme cartouche flash.
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

11

et pour les sauvegardes, ce serait compatible aussi?

12

Oui aussi. Sous réserve de toujours avoir de la flash en blocs, mais il devrait y en avoir pour quelques années encore...
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

13

./7 J'ai oublié les mots "facile à utiliser" dans ma phrase... tongue
Donc même à les payer plus cher, je pense que oui les deux autres propositions sont plus intéressantes.
avatar
----- SNK Forever -----
Association Retro-gaming Connexion : http://www.retro-gc.fr/
http://www.consoles-portables.com

14

J'ai reçu les cartes proto. Ben 0.2mm en trop c'est sacrément chiant !

Finalement c'était peut être trop d'espoir de recevoir des sous sur un bricolage pareil. Je vais finir par tout refiler en espérant avoir une petite donation si c'est utilisé (canette de coca, cure-dent, feuille de PQ...)
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

15

En se cotisant, on devrait pouvoir t'offrir tout ça à la fois smile

Si ça peut te consoler, les erreurs d'épaisseur de ce genre c'est très courant en impression 3D (même "pro"), je crois que je n'ai jamais vu de pièce qui n'ait pas dû être un peu limée pour être à la bonne taille.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

16

C'est les PCBs qui sont trop épais en fait, le 1.6mm coince avec les coques originales et ne fait pas contact sans sad Je vais passer la coque à la ponceuse.

Pour la logique, voilà comment ça marche:

Les E/S avec la flash pendant le boot NGP et NGPC sont les suivantes (adresse,data):

5555 AA
2AAA 55
5555 F0 (reset)
5555 AA
2AAA 55
5555 90 (autoselect)
Lecture 0000 (ID fabricant: doit être $98, $B0, ou $EC)
Lecture 0003 (doit être $80)
Lecture 0001 (ID composant: doit être $AB (512ko), $2C (1Mo), ou $2F (2Mo). C'est important car c'est utilisé par le BIOS pour trouver la map des secteurs pendant les sauvegardes. Les jeux de 4Mo ont simplement 2x 2Mo, donc le code reste $2F)
Lecture 0002 (doit être $80)
5555 AA
2AAA 55
5555 F0 (reset)

Si ce test passe, le header est lu pour voir si un des deux strings de reconnaissance sont présents.

Pour faire fonctionner les sauvegardes, la flash doit avoir des secteurs de 64ko sinon le BIOS risque de ne pas apprécier (une 29F040 marche). Aussi important, le dernier secteur devrait dans l’idéal faire 16ko, mais s'il fait 64ko ça marche quand même. Celui ci est utilisé par le BIOS uniquement pour diverses choses que je ne comprend pas.
Il semblerait qu'il soit effacé la première fois que le jeu est lancé, ou lorsqu'il contient des données corrompues. Par exemple avec un jeu de 4Mo, le dernier secteur est à 1FC000~1FFFFF et le BIOS fait:

5555 AA
2AAA 55
5555 80
5555 AA
2AAA 55
1FC000 30

Lorsque le BIOS efface un secteur ou tous les secteurs inscriptibles (je ne sais pas si c'est utilisé, mais il en est capable), il relis le(s) secteur(s) en question en boucle pour voir s'ils sont pleins de $FF. Il y a un timeout relatif au nombre de secteurs à vérifier mais je n'ai pas calculé sa durée. Il y a aussi un nombre d'essais max.

Pour qu'un jeu démarre, il faut donc détecter quand le BIOS veut passer la flash en mode ID, désactiver la vraie flash, répondre a sa place, détecter quand le BIOS veut qu'on repasse en mode normal, et repasser la main à la flash.
Pour faire ça, je colle le bus de données entier ainsi que les 16 premiers bits d'adresse sur le CPLD.
Sur le front montant de /WR, je regarde si l'adresse est $5555. Si c'est le cas, je regarde si les données sont soit:
-$90: Un flag est mis a 1 pour dire qu'on va devoir faire taire la flash et répondre a sa place (/CS haut).
-$F0: Le flag est remis a 0 pour laisser la flash parler.
Pour savoir quelle info il faut spoofer, je regarde juste les 2 premiers bits d'adresse: si le bit 1 est a 1, réponse toujours $80. Sinon, si le bit 0 est a 1, réponse ID composant, sinon ID fabricant.

Le tout tient dans un EPM3032. Je donne le code dès que c'est propre, mais sinon ça marche smile

2mpajq0.jpg
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.

17

top
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

18

Bravo pour le travail en tout cas ! smile
avatar
----- SNK Forever -----
Association Retro-gaming Connexion : http://www.retro-gc.fr/
http://www.consoles-portables.com

19

Très impresionnant

20

la production Homebrew sur NGPC va pouvoir commencé love
avatar
La Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/

21

top
avatar
@originalfei
Homebrews Connexion
In pixels we trust.
ORE WO DARE DA TO OMOTTE YAGARU !

22

smile
Pour le dev, il y avait toujours moyen avec un émulateur et le flashmasta non ?
Pour la prod par contre, pas vu de solution toute faite encore :<
module ngpspoof ( FL_CE_IN, FL_CE_OUT, NGP_ADDR, NGP_DAT, NGP_WR, NGP_OE, NGP_CE ); input FL_CE_IN; output FL_CE_OUT; input NGP_WR; input NGP_OE; input NGP_CE; input [15:0] NGP_ADDR; inout [7:0] NGP_DAT; wire [7:0] REG_DAT; wire NGP_READ; reg STATE = 0; assign NGP_READ = (~NGP_OE & NGP_WR & STATE); assign FL_CE_OUT = READ ? 1 : FL_CE_IN; assign NGP_DAT = READ ? REG_DAT : 8'bzzzzzzzz; assign REG_DAT = NGP_ADDR[1] ? 8'h80 : NGP_ADDR[0] ? 8'h2F: 8'hEC; always@(posedge NGP_WR) begin if (NGP_ADDR == 16'h5555) begin if (NGP_DAT == 8'h90) STATE <= 1; //Enter ID req if (NGP_DAT == 8'hF0) STATE <= 0; //Exit ID req end end endmodule

J'ai racheté des cartes en 1mm, je les aurais dans 3 semaines...
avatar
Je fais des trucs. Des fois ça marche, des fois ça marche pas.