Pagination d'une EEPROM avec une GAL V16 / V20 ...

C'est le lieu des discussions diverses et variées, mais toujours en rapport avec le thème général du forum et dans l'esprit de celui-ci.

Modérateurs : Carl, Papy.G, fneck

Avatar du membre
Silou78
Messages : 82
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 13 juin 2017 22:07

6502man a écrit :Concernant A15-A12 ce n'est pas pour adresser l'EEPROM mais uniquement pour servir de mécanisme de pagination et donc restreinte la plage à 8000h - 8FFFh pour éviter d'écrire où il ne faut pas :wink:
Ah ok. Je comprends mieux maintenant.
Ceci-dit, il faut que tu changes les équations rom_Ce et rom_Oe :

Code : Tout sélectionner

field address  = [A15..12] ;
select_rom = address:[4..B] ;  /* Selectionne la ROM pour toutes les adresses de 4000h à BFFFh
rom_Ce = select_rom ;
rom_Oe = select_rom & !memrw ;
Il y a aussi un truc à vérifier : DBIN
Il me semble que cela doit être actif à l'état haut (Write), alors que la variable memrw est prévue dans le script pour être active à l'état bas. Donc peut-être faudra-t-il écrire : PIN 7 = memrw ; (donc en enlevant le ! devant la variable)... à vérifier. :wink:
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 05 sept. 2017 16:46

Me voici de retour après 2 mois de dur labeur :roll: :roll:

Donc j'ai recu depuis les PCB de cartouches pour faire mes tests :

ImageImage

J'ai fait un PCB 2 en 1 et prévu pour qu'il soit sécable facilement ;)
Image

Premier test avec un support sur la version "cartouche", les ROMS de 8Ko fonctionnent.
Image

Avec la version TestBoard j'ai pu tester les ROMS de 8 et 16 Ko (24 / 27 des jeux existants sur Pyuuta) :D
Par contre pour les cartouches 32Ko (3 existantes) impossible à utiliser sur le port cartouches car il manque des signaux :lol:
Et après quelques recherche ces 3 cartouches ne peuvent fonctionner qu'avec une extension spécifique :shock:
J'ai bien l'extension mais aucune de ces 3 cartouches, elles sont très rare et atteignent souvent des prix très haut :(

j'ai commencé a faire des essais sur le port d'extension mais j'ai seulement réussi à faire fonctionner les cartouches 8 et 16Ko mais pas les 32Ko.
Les 32Ko qui ont une plage mémoire chevauchant une partie de la ROM interne, et je n'ai pas trouvé les signaux permettant de paginer la ROM ...

les cartouches de 8 et 16 Ko occupent la zone mémoire de 8000h-BFFFh.
Le Bios du Pyuuta occupe la zone 0000h-3FFFh .
le basic occupe la zone 4000h-7FFFh.
Les cartouches 32Ko occupent la zone 4000h-BFFFh.

Le pinout du port cartouche:
Image

Le pinout du port d'extension:


Je vais chercher comment utiliser les 32Ko si d'ici la fin de la semaine je n'y arrive pas je ferais une cartouche avec uniquement les jeux 8 et 16Ko :?

...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Patrick
Messages : 380
Enregistré le : 16 mai 2009 09:30
Localisation : Clermont-Ferrand

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Patrick » 05 sept. 2017 21:25

Sympa tes PCBs.
Tu peux indiquer le logiciel de conception, le fabricant de PCBs, comment tu réalises la zone sécable ?
Patrick

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 12 sept. 2017 16:18

- Soft: DipTrace (Freeware edition)
- PCB: GojGo
- zone sécable avec DIPTRACE j'ai dessiné un rectangle comme propriété "board cutout" en laissant suffisament en haut et en bas :wink:


Finalement je ne suis pas arrivé à faire démarrer une ROM 32Ko même sur le port d'extension :? :oops:

C'est pas grave comme j'avais prévu le plan B, faire une megarom avec les jeux 8 et 16 Ko (24 des 27 jeux existants), j'espère faire le premier test d'ici ce week end ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 17 sept. 2017 10:13

Bon finalement j'ai pas trouvé comment faire fonctionner les ROM 32Ko donc je suis passé au plan B uniquement les ROMS 8 et 16 Ko pour le port cartouche.

Maintenant il me reste un autre problème le programmateur d'EEPROM ne veut pas me programmer correctement les GAL22V10x :twisted:

Ou j'ai rien compris :roll:

J'ai essayé plusieurs GAL22V10D , GAL22V10B , GAL22V10C , mais à chaque fois il grave et à la vérification me retourne une erreur comme ci dessous, J'ai essayé divers paramètres mais toujours le même problème :(

J'utilise un TL866.

Peut être que toutes les GAL que j'ai acheté sont HS ou bien est ce le programmateur (tester sur 2 PC différents) ???

Quelqu'un à déjà programmer ces types de GAL ou à un programmateur compatible ?

Erreur:
erreur GAL 1.jpg
erreur GAL 1.jpg (267.38 Kio) Vu 334 fois
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
irios
Messages : 3069
Enregistré le : 04 nov. 2007 19:47
Localisation : Rochefort du Gard (30)
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par irios » 17 sept. 2017 11:05

Où as-tu acheté les GAL ? :mrgreen:
http://irioslabs.over-blog.com/

La connaissance ne vaut que si elle est partagée par tout le monde.
I2C

Avatar du membre
Silou78
Messages : 82
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 17 sept. 2017 11:25

Il y en a qui ont le même problème avec le MiniPro > v6.5
S'ils reviennent à la v6.5, ça semble fonctionner.
Problème plus spécifique au 22v10 apparemment.
D'autres qui sur un lot arrivent seulement à passer l'étape du verify que pour 1 gal sur 5 (soupçons d'un mauvais lot ?)
Voir ce topic (où est aussi disponible un lien pour télécharger l'archive .rar du MiniPro v6.5).
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 17 sept. 2017 11:35

Où as-tu acheté les GAL ?
Sur Ebay, évidemment le prix était très bas :lol:
S'ils reviennent à la v6.5, ça semble fonctionner.
J'avais justement le V6.5 d'installé comme ça ne fonctionnais pas j'ai upgradé en 6.6 mais idem :?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 17 sept. 2017 11:58

J'en ai recommandé d'un vendeur Français, je serai fixé sur le programmateur ou les GAL :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 18 sept. 2017 17:08

J'ai adapté le code pour le GAL en fonction des signaux disponibles sur le port cartouche et de ceux nécessaires pour faire la pagination.

Le principe lorsque il y a une écriture à l'adresse 8000 (0000 sur l'Eeprom) on reporte la valeur des bits DATA A0-A4 sur les pins A14-A18, d'après le datasheet du TMS9915 le signal Write est à l'état bas lors d"une écriture.


J'ai prévu d'adapter pour un G16V8 c'est juste suffisant pour le nombre de pins disponibles, mais d'après le simulateur j'ai un comportement différent au départ avec le G22V10 les sorties sont à l'état bas mais pour le G16V8 les sorties sont à l'état haut :roll:

Y a t'il un moyen de fixer un état initial aux sorties du GAL ???



Avec le G22V10 :
G22V10.jpg
G22V10.jpg (145.49 Kio) Vu 295 fois

Avec le G16V8:
G16V8.jpg
G16V8.jpg (160.76 Kio) Vu 295 fois
Datasheet:
Pyuuta_Chronog.jpg
Pyuuta_Chronog.jpg (119.42 Kio) Vu 295 fois
Le code:

Code : Tout sélectionner

Name     EEPROM-Paging ;
PartNo   00 ;
Date     11/06/2017 ;
Revision 02 ;
Designer Silou78_and_6502man ;
Company  Futura ;
Assembly None ;
Location None ;
Device   g22v10 ;


/* ********************************** */
/*      PYUUTA  MEGAROM               */
/*                                    */
/*  EEPROM  AT28C040    512Ko         */
/*                                    */
/*  BANK de 16Ko   A14 - A19          */   
/*                                    */
/*                                    */
/*    AT28C040  READ MODE :           */
/*  CE and OE are low and WE is high  */
/*                    non WE is low   */


/* *************** INPUT PINS ***********************************************/
PIN 1        = cpu_clk            ; /* CPU Clock                            */ 
PIN [2..6]   = [d0..4]            ; /* CPU Data Bus                         */ 
PIN 7        = !memrw             ; /* Memory Read/Write (write active low) */ 
PIN [8..11]  = [A10..13]          ; /* CPU Address Bus                      */


/* *************** OUTPUT PINS **********************************************/
PIN [14..18] = [ra14..18]         ; /* EEPROM Address Bus  24 games         */

PIN 19 = test;
 
/*  PIN 12 = GND  PIN 24 = VCC 	*/



/* **** Declarations and Intermediate Variable Definitions ******************/
FIELD address = [A10..13] ;



/* **** Logic Equations *****************************************************/ 
select_page = address:[0000] & !memrw ;

/* Principe de la bascule D pour memoriser le numero de page ROM :          */
/* Quand la selection de page n'est pas activee (select_page = niveau bas), */
/* alors la sortie [ra15..19] conserve son etat precedent (num. page ROM).  */
ra14.D = d0 & !select_page # ra14 & select_page ;
ra15.D = d1 & !select_page # ra15 & select_page ;
ra16.D = d2 & !select_page # ra16 & select_page ;
ra17.D = d3 & !select_page # ra17 & select_page ;
ra18.D = d4 & !select_page # ra18 & select_page ;


test = select_page ;

/* *******  END  ***** */

Code : Tout sélectionner

Name     PYUUTA-G16 ;
PartNo   00 ;
Date     11/06/2017 ;
Revision 02 ;
Designer Silou78_and_6502man ;
Company  Futura ;
Assembly None ;
Location None ;
Device   g16v8 ;


/* ********************************** */
/*      PYUUTA  MEGAROM               */
/*                                    */
/*  EEPROM  AT28C040    512Ko         */
/*                                    */
/*  BANK de 16Ko   A14 - A19          */   
/*                                    */
/*                                    */
/*    AT28C040  READ MODE :           */
/*  CE and OE are low and WE is high  */
/*                    non WE is low   */


/* *************** INPUT PINS ***********************************************/
PIN 1        = cpu_clk            ; /* CPU Clock                            */ 
PIN [2..6]   = [d0..4]            ; /* CPU Data Bus                         */ 
PIN 7        = !memrw             ; /* Memory Read/Write (write active low) */ 
PIN [8..9]   = [A10..11]          ; /* CPU Address Bus                      */
PIN [12..13] = [A12..13]          ; /* CPU Address Bus                      */

/* *************** OUTPUT PINS **********************************************/
PIN [15..19] = [ra14..18]         ; /* EEPROM Address Bus  24 games         */

PIN 14 = test;
 
/*  PIN 12 = GND  PIN 24 = VCC 	*/



/* **** Declarations and Intermediate Variable Definitions ******************/
FIELD address = [A10..13] ;



/* **** Logic Equations *****************************************************/ 
select_page = address:[0000] & !memrw ;



/* Principe de la bascule D pour memoriser le numero de page ROM :          */
/* Quand la selection de page n'est pas activee (select_page = niveau bas), */
/* alors la sortie [ra15..19] conserve son etat precedent (num. page ROM).  */
ra14.D = d0 & !select_page # ra14 & select_page ;
ra15.D = d1 & !select_page # ra15 & select_page ;
ra16.D = d2 & !select_page # ra16 & select_page ;
ra17.D = d3 & !select_page # ra17 & select_page ;
ra18.D = d4 & !select_page # ra18 & select_page ;


test = select_page ;

/* *******  END  ***** */

EDIT: sur le G16V8 il y a une pin I/OE qui n'est pas sur le G20V10, dans le datasheet je ne vois rien de précisé sur cette broche :idea:
Est ce que je dois l'activé pour que le GAL soit actif comme pour une EPROM ou un 74LS ???
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 19 sept. 2017 16:01

Hier soir j'ai réussi à programmer 2 GAL une G20V10 et une G16V8 avec mon programmateur d'eeprom.

Premier test soldé par un échec :?

La partie programmation ca c'est facile, même si j'avais jamais programmé pour ce CPU avec des mnémoniques totalement nouveaux, ca reste bien documenté, et le VDP c'est le même que les MSX, Coleco, SC3000, que je connais bien.

La partie hardware, la c'est beaucoup plus compliqué pour moi :lol:

L'EEPROM 2Mbit partitionnée en page de 16Ko.
permière page = Menu
deuxième page = jeu 1
troisième page = jeu 2
....

Le GAL programmé pour paginé si il y une écriture en 8000.
les sorties du GAL connectées a l'EEPROM A14-A18.

Dès l'allumage de la machine les sorties du GAL G20V10 sont au niveau haut et donc impossible d’accéder au menu :(
En forcant les adresses de l'EEPROM aux niveau bas j'accède bien au menu, voir photo ci dessous :D

J'ai connecté une résistance et une led sur une sortie du GAL et dès l'allumage de la machine la led s'allume et clignote en permanence :twisted:

Donc soit j'ai mal formulé les équations pour le GAL, soit j'ai mal étudié les conditions pour la pagination (WR,A13-A10), ou soit la condition n'est suffisamment restrictive :(

Si vous avez une idée ou voyez ou j'ai commis une erreur n'hésitez pas, j'apprends ...

Je pourrais utiliser des composants classiques 74LS, mais je pense que le problème viens peut être de la condition pour la pagination :(

Menu&Gal.jpg
Menu&Gal.jpg (267.77 Kio) Vu 271 fois
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Silou78
Messages : 82
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 21 sept. 2017 00:00

Salut Phil,

Dans l'équation pour obtenir le select_page, je ne vois plus de A15 (ni de A14 d'ailleurs), donc ça va paginer pas uniquement que pour une écriture à l'adresse 8000 mais aussi pour les adresses 0000, 4000 et C000. Donc pas étonnant que la led clignote. Ou bien alors il y a quelque chose que je ne comprends pas dans ton câblage.

Pour le reset des bascules D il te faut dédier une pin d'entrée relié au reset (pas vu sur le connecteur, donc il faut le recréer avec un RC entre le VCC et GND). La pin à récupérer peut être celle de test (quand la select_page sera débuguée, ce ne sera plus utile de la sortir).
Et dans le programme rajouter quelque chose du genre (.AR est le reset asynchrone de la sortie des bascules D) :
[ra15..19].AR = reset

En espérant que ça te donne des pistes pour avancer dans ton projet... :wink:
a+
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 28 sept. 2017 17:46

Bon je crois que je suis un peu dans l'impasse avec le port cartouche pour faire la pagination avec un GAL :(

Et je n'arrive pas à utiliser .AR, winculp m'indique une erreur manquant .SR ????
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Avatar du membre
Silou78
Messages : 82
Enregistré le : 11 févr. 2017 14:54
Localisation : Yvelines (78)

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par Silou78 » 29 sept. 2017 23:59

Mais non, courage, j'en suis sûr que tu n'es pas loin de la solution. :wink:

Pour le problème du manque d'entrées sur le GAL pour décoder tous les bits d'adresses, il suffirait de rajouter un circuit de portes NOR (ex: 74LS02) pour coupler quelques unes des lignes d'adresses de poids faible.
Ex : (A10 NOR A11) NOR (A10 NOR A11) -> 1 entrée sur le GAL
(A12 NOR A13) NOR (A12 NOR A13) -> 1 entrée sur le GAL
reste plus que A14 et A15 -> 2 entrées sur le GAL
Soit 4 entrées en tout au lieu de 6.

Pour le .SR (reset synchrone, il va falloir relire la doc, il y a peut être quelque chose à faire en plus du .AR). J'essaierai d'y regarder peut-être la semaine prochaine car je ne suis pas chez moi ce week-end.

Pour le signal reset manquant sur le port cartouche, pas grave : comme je te le disais, il suffit de réaliser un circuit RC (résistance - condensateur) entre le Vcc et GND afin d'avoir un signal qui reste que quelques ms à l'état bas actif, le temps que le condensateur se charge. Ce sera suffisant à la mise sous tension pour initialiser automatiquement les sorties des bascules D.
Sylvain
Les + malins et les + chanceux sont au sommet, les autres grenouillent.
La vie est un éternel combat contre soi-même.

Avatar du membre
6502man
Messages : 8423
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Pagination d'une EEPROM avec une GAL V16 / V20 ...

Message par 6502man » 30 sept. 2017 16:26

Merci pour ton aide ;)

En faite je suis confronté à 2 problèmes :

- l'absence des signaux A14 et A15 sur le port cartouche (et RESET mais contournable avec un condensateur/résistance).
- La compréhension de la programmation dans winculp d'une bascule D fonctionnelle :oops:

J'ai fait des recherche pendant un long moment et j'ai trouvé sur un site Coréen un exemple de bascule D :
http://dolicom.egloos.com/10007776

Code : Tout sélectionner

Flip-Flop을 사용하는 논리회로 구현
논리설계를 하다보면 combination회로만 필요한것이 아니라, seqence 회로가 필요하다. 이를 위해서는 출력 구조에서 FF의 표현이 필요하고 이 방법을 알아 봅니다.
다음 특수한 몇가지 표현을 다음 표와 같다. 주로 FF표현할 때 다음표를 참조할 수 있다.
만약 특정 FF을 사용 한다면 입력 D을 결정해야 하는데 다음과 같이 표현 한다.
Out.D = A1 & A2;
기타 중요한 요소는 RESET신호와 PRESET신호가 있다.
RESET : .AR
PRESET : .SP
만약 14번 핀이 출력이고 D-Flip-flop을 사용한다면
pin 2 = In1;
pin 3 = In2;
pin 4 = Res;
pin 14 = Sout;
Sout.d = In1 & In2; -- 입력 In1과 In2을 AND하여 입력 한다.
Sout.ar = !Res;
Sout.sp = ! In1 & ! In2;
와 같이 표현하면 된다. 밑의 그림을 참조하면 여러가지 표현이 가능함을 알 수 있다.
FF의 clock은 22V10은 1번 핀으로 고정되어 있다.

아래 표에서 CUPL의 항목을 사용하며 되며 다양한 출력 포드를 구성할 수 있다.
중요한 몇가지는
.D
.CK
.OE
.AP
.AR
.SP
.SR

주의 할것은 칩에 따라 위의 코드가 다 사용돼는것이 아닙니다. 따라서 compile과정에서 error가 날 수 있습니다. table12와 같이 다양한 것은 단지 PAL/GAL을 위한 것이 아니라 좀더 복잡한 CPLD급도 정의를 한 것입니다.
이 문서에서 예를 든 GAL 'G22V10'는 구조에서 CLK을 어느 논리회로로 구성할 수 없고 단지 1번 핀으로 입력 됩니다. 이런 경우 'out.ck = in1;'와 같은 코드는 문제가 됩니다.



다음 표는 각 칩별로 가능한 Extensions에 대한 목록 입니다. 이 테이블은 위와 같은 회로에서 확인할 수 있습니다.



다음 회로가 어떤 회로인지는 모르지만 생각나는데로 설계 보았습니다. FF을 이용하는 예 입니다.
DFF.PLD
Name DFF;
Partno AFT22V10C;
Revision 01;
Date 8/10/99;
Designer Song;
Company icom;
Location None;
Assembly None;
Device G22V10;
/* Test Register */
/*
Block Diagram
---------
| |
Logic ----->| |-----> Q / S
| |
| |
CLK ------->|> |
| |
---------
*/
/* Inputs */
pin 1 = CLK;
pin 2 = I1;
pin 3 = I2;
pin 4 = RES;
/* Outputs */
pin 14 = Sout;
pin 15 = Qout;

/* EQUATIONS */
Qout.d = I1 $ !I2;
Qout.ar = !RES;
Qout.sp = !RES;

Sout.d = Qout & I2;
Sout.ar = !RES;
Sout.sp = !RES;
위의 로직을 이용한 결과는 DFF.JED 이다.

CUPL(WM) 5.0a Serial# 60008009
Device g22v10 Library DLIB-h-40-1
Created Tue Jun 22 17:28:33 2004
Name DFF
Partno AFT22V10C
Revision 01
Date 8/10/99
Designer Song
Company icom
Assembly None
Location None
*QP24
*QF5892
*G0
*F0
*L00000 11111111011111111111111111111111
*L00032 11111111111100000000000000000000
*L04864 00000000000000000000111111111111
*L04896 11111111111111111111111111111111
*L04928 11110111111111111111111111111111
*L04960 11111111111100000000000000000000
*L05824 10000100000101000110010101000011
*L05856 00100011001001010110001100010011
*C1495
*8F4A
Avec ce schéma :
Image

Il indique que selon le chip utilisé les déclarations ne sont pas les même ni les extensions compatibles avec ce chip :roll: :roll:

Si j'ai bien compris à minima il faut au moins une clock, une entrée .D, un reset .AR et un preset .SP (pourquoi pas .AP) !!!

Qu'est ce que exactement le PRESET sur un GAL ???
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Répondre