Gamoover

[move]Vous aimez la série Ricky la belle vie, Julio Iglésias ou l'émission Kohlanta ? Alors soyez les bienvenus sur Gamoover ! [/move]

Micro Processeur et PIA / RIOT

Démarré par tilowil, Mardi 05 Mai 2020, 20:38:33 PM

tilowil

Bonjour à tous,
En attendant de pouvoir avancer un peu plus sur le Time Machine, sur le Testeur de TTL et sur le dépannage de ma MPU Data East, il m'est venue une idée saugrenue, que j'aimerai pouvoir mettre en application. Mais pour cela ma noobitude en électronique me créer une barrière infranchissable sans une main tendue par quelqu'un qui s'y connait.

Je le dis de suite il va falloir me parler simplement, comme pour un gamin avec des dessins que je puisse 'colorier' :D.

Mon idée : utiliser un Arduino (oui encore :D) pour me connecter en lieu et place du processeur sur la CPU/MPU et pouvoir tester simplement avec un 16x2 les composants lié au processeur, a savoir la RAM, la ROM (eproms) et les PIA, surtout les PIA.
Je sais qu'il existe des cartes pouvant tester les RAMs et les PIAs seul, mais je me dit que de pouvoir, à la place du processeur, 'discuter' avec les composants de nos cartes de flippers se serait quand même bien pratique pour avancer rapidement. De plus ce système permettrai aussi de tester le bus de la carte. Et pourquoi pas avec un 'moniteur à led' branché sur les connecteurs pouvoir verifier toute la chaine, du processeur à la sortie de la carte.

Mon interrogation concerne surtout les PIA et les RIOT.
Comment lire un PIA / RIOT et comment voir qu'il a bien reçu la consigne que l'on veut lui transmettre ? En gros comment le micro processeur 'parle' au PIA / RIOT et le PIA / RIOT renvoie t il des informations au micro processeur ?

Bien sur le but est de pouvoir tester les cartes Gottlieb (6502 <=> 6532) et pour le moment les cartes Data East (6802/6808 <=> 6821), et pourquoi pas ensuite l'adapter au cartes Williams, Bally en fonction du processeur et des composants.

Pour le moment les informations que j'ai pu trouver concernant cette communication :


L'on voit bien la communication entre le PIA et le Micro processeur via le bus Address (16 bits) et le bus Data(8 bits).
concernant le 6502 la communication avec le RIOT 6532 se fait avec un bus Address (7 bits) et le bus Data (8 bits). D'ailleurs dans la doc du RIOT il annonce une compatibilité avec le 6800


Mais je ne trouve pas d'informations en cas de PIA / RIOT multiple comme sur nos cartes de flipper. Gottlieb a 3 RIOT et Data East à 6 PIA.

Réellement le PIA / RIOT est un peu sombre pour moi.

Bien sur comme je vais recevoir de l'aide, je partagerai le résultat final, si c'est faisable ici sur Gamoover.

Voila j'espère que le sujet va intéressé du monde même s'il est très particulier.

Merci de votre aide pour me permettre de comprendre cette bestiole avec plein de pattes :D.


Little_Rabbit

#1
Salut Tilowil !

Intéressant comme projet !  ^-

Je pense qu'il faut que tu commences par te documenter sur le fonctionnement élémentaire d'un microprocesseur :

- son bus d'adresses
- son bus de données
- son bus système

Le fait qu'au final tu cherches à communiquer avec un RIOT, un PIA ou une RAM ne change pas vraiment la donne : le principe est le même.

Et c'est d'autant plus vrai qu'un 6502 n'a qu'un seul plan d'adressage : il n'y a pas comme sur un Z80 par exemple un plan mémoire, et un plan d'E/S distinct.

Quant à la présence de plusieurs RIOT sur le même PCB, c'est l'adresse à laquelle ils sont câblés qui change : c'est donc simplement l'adresse qui sera présentée sur le bus d'adresse qui déterminera le RIOT auquel on veut parler :) (et c'est donc le décodage d'adresse présent sur le PCB qui sélectionne tel ou tel RIOT).

Sinon, ton projet est-il pour le plaisir de la démarche intellectuelle, ou bien dans le but de faire quelque chose dont tu as vraiment besoin ? :)

Je te pose la question car ce que tu cherches à faire existe déjà : je n'arrive pas à retrouver le lien mais spectroman m'a déjà parlé d'un montage à base d'Arduino que tu plug à la place d'un processeur et qui va t'analyser les composants de tel ou tel PCB (il faut rédiger un petit "driver" pour chaque pcb). Je vais tâcher de remettre la main sur le lien !...

[edit : ah voilà, je pense avoir trouvé : sur cette page d'UKVAC ! ]

[edit 2 : le site de l'auteur Paul Swan ]


A+
Recherche bornes dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Gottlieb des années 80 (Spirit, Amazon Hunt, ...), Baby Pac Man. Divers :  Ice Cold Beer => Trois fois rien quoi ! :D
Ma séance sur le divan : c'est grave Docteur ? :-\
Ma gaming room, ma storage room

tilowil

Bonsoir Little_rabbit,

Oui Spectroman n'en a parler aussi. Mais ce montage n'est prévu que pour les PCB de jeux vidéo.
L'auteur a effectivement fait une 'sonde' pour les 6502 pour les jeux Tomahawk 777 et Astro-Fighter, mais il n'est nul part fait mention de RIOT.
Il a aussi fait une sonde pour le 6809, peut être similaire au 6808/6802 utilisé pour les MPU Data East, mais pareil nul part il y fait mention de PIA.
Quand je dis nul part, c'est dans son code. Donc il m'est venu l'idée de créer une bibliothèque qui pourra analyser, depuis son architecture les cartes de flipper.

Il est d'accord pour que ses cartes servent de 'sonde' pour ce projet, mais il ne peut pas m'aider car il n'a pas de carte CPU/MPU de flipper pour faire des recherches. Il ne me reste plus que la compréhension du dialogue pour démarrer le codage.

Pour répondre à ta question, c'est en premier lieu pour le fun, mais aussi pour faire des recherches de panne sur ma MPU Data East (celle du Time Machine) et ma MPU Gottlieb (celle du Genesis). Car en ce moment le Genesis fonctionne avec une carte Lisy80, car mes 2 CPU Star 80B sont en panne, que je ne trouve pas la panne et que je ne veux plus payer ni 120€ ni le moindre euros pour faire réparer les cartes  >:D. Donc je refléchis à des solutions. Solutions qui pourront servir à d'autres personnes, qui comme moi en on marre d'être prises pour des vaches à lait dès qu'il y a besoin de faire faire une réparations sur son flipper. Tout comme le testeur de TTL c'est à la base du à un besoin de tester les TTL de la carte MPU Data East.

Mais avant de me lancer j'ai besoin de comprendre comment ca fonctionne. Logique :D.

En tout cas merci pour ton message.

A+

spectroman

#3
Ah ces informaticiens, quand ils n'ont pas de SDK/DLL... :D

Le 6532 (RIOT) est un chip trois en un. Dans ce chip, il y'a :
- une ram de 128 Octets
- deux PIO
- un timer

La communication entre le 6502 et le 6532 se fait par l'intermédiaire d'un bus de donnée, d'un bus d'adresse et d'un bus de signaux de contrôle.



Quand le 6502 veut communiquer avec un 6532, il faut qu'il le sélectionne, c'est généralement fait par un décodage du bus d'adresse.

Sur un system 80A, le décodage d'adresse est fait comme cela :




Par exemple, si tu veux sélectionner le RIOT SOLENOID et LAMP (U6) :



Il faut regarder attentivement les broches 37 (/CS2) , 38 (CS1) de U6. Elles sont connectées respectivement aux signaux SEL2 et Z8-10.

Les conditions de selections sont /CS2 = 0 et CS1 = 1. Pour quelles soient vraies, il faut :
/CS2 = 0 <=> SEL2 = 0 <=> /(/AB13 & /AB12) = 0 <=> AB13 | AB12 = 0 <=> AB13 = 0 et AB12 = 0
CS1 = 1 <=> Z8-10 = 1 <=> /(/AB8 + //AB7) = 1 <=> /(/AB8 + AB7) = 1 <=> AB8 & /AB7 = 1 <=> AB8 = 1 et AB7 = 0

Conclusion quand toutes les conditions suivantes sont vraies : AB13 = 0, AB12 = 0, AB8 = 1, AB7 = 0 le RIOT U6 est sélectionné.

Par exemple lorsque le 6502 va lire ou écrire dans la plage d'adresse [0x0100 : 0x017F] le RIOT U6 est sélectionné. Idem pour la plage [0x0300:0x037F], et il y en a plein d'autre.

Voila c'est tout pour le petit déjeuner, la suite plus tard.

[edit] : tilowil pour approfondir, essaye de trouver des plages d'adresse qui sélectionnent les RIOT en U4 et U5
[edit2] : corriger erreur A11 => A13

spectroman

Citation de: Little_Rabbit le Mardi 05 Mai 2020, 22:06:38 PM
Je te pose la question car ce que tu cherches à faire existe déjà : je n'arrive pas à retrouver le lien mais spectroman m'a déjà parlé d'un montage à base d'Arduino que tu plug à la place d'un processeur et qui va t'analyser les composants de tel ou tel PCB (il faut rédiger un petit "driver" pour chaque pcb). Je vais tâcher de remettre la main sur le lien !...

[edit : ah voilà, je pense avoir trouvé : sur cette page d'UKVAC ! ]

[edit 2 : le site de l'auteur Paul Swan ]

Pour être plus précis, je t'ai même donné les 4 pcb pour le réaliser quand je t'ai amené le xenon ;)

Little_Rabbit

Salut,

On est bien d'accord Tilowil : quand je disais qu'il fallait écrire un "driver" pour chaque PCB, c'est ce travail qu'il faudrait faire pour tester par exemple un RIOT. Ce travail est rigoureusement identique dans le principe à ce qui doit être fait pour un PCB de jeu vidéo, ou un PCB de flipper :). Un CPU n'est pas sectaire et n'a pas conscience de travailler pour un flipper, ou pour des pixels qui bougent ! :D

Ce que je voulais dire, c'est que plutôt que de partir de zéro et devoir ré-inventer la roue en quelque sorte, mieux vaut partir de la base exceptionnelle qu'a partagé Paul Swan :).

La démarche intellectuelle reste tout à fait identique, et requiert la même compréhension d'un système à base de microprocesseur. C'est un peu comme si on ce disait "Tiens, j'ai envie de construire une console de jeu vidéo élémentaire from scratch, et de programmer des jeux dessus !". Ou bien, "Tiens, j'ai envie de programmer des jeux vidéo élémentaires sur le hardware d'une ATARI 2600 !". Dans les 2 cas une bonne partie du travail sera la même, la connaissance et compréhension intime du hardware sera nécessaire. Mais dans un cas tu vas passer des jours à pondre une base hardware et devoir construire tous les outils logiciels pour exploiter ce hardware. Dans l'autre cas on bénéficie d'une base éprouvée, faite par un expert.

Je voulais donc juste t'encourager à participer au projet de Paul Swan plutôt que de partir de zéro ;).

Pour t'accompagner, il nous faut parvenir à vulgariser le fonctionnement d'un système à microprocesseur, et donc au risque de me répéter, faire comprendre comment fonctionnent ensemble :

- un bus d'adresses
- un bus de données
- un  bus de contrôle

Ces principes sont communs à tous les microprocesseurs, à quelques nuances minimes près : un microprocesseur "parle" de la même façon à une ROM, un PIA, un RIOT ou un contrôleur d'écran. Dans un second temps, oui il faut comprendre la structure d'un RIOT, les registres qui permettent de le piloter, etc. Mais ça c'est la partie facile, où il suffit de lire sa doc technique pour savoir ce qu'il fait.

Il faut procéder par étape :

- comprendre les bus et leur fonctionnement
- réussir à tester une RAM par exemple, ou faire un CRC d'une ROM
- adresser un RIOT et définir un algorithme qui teste chacun de ces sous-ensembles
  => tester sa RAM
  => tester ses PIO (port d'entrée-sortie)
  => tester son Timer

Citation de: spectroman le Mercredi 06 Mai 2020, 08:00:12 AM
Pour être plus précis, je t'ai même donné les 4 pcb pour le réaliser quand je t'ai amené le xenon ;)
Bah je le sais bien, et c'est même grâce à ces PCB que je suis parvenu à retrouver le site de Paul Swan... Je n'en ai pas parlé pour ne pas susciter de jalousie ! :D

Et cela m'a du reste motiver pour m'y atteler prochainement ;).

A+
Recherche bornes dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Gottlieb des années 80 (Spirit, Amazon Hunt, ...), Baby Pac Man. Divers :  Ice Cold Beer => Trois fois rien quoi ! :D
Ma séance sur le divan : c'est grave Docteur ? :-\
Ma gaming room, ma storage room

spectroman

#6
Le signal /CS2 est le même sur les RIOT en U4 et U5 qu'en U6, la condition est donc identique AB13 = 0 et AB12 = 0

Pour le CS1 de U4 :
CS1 = 1 <=> Z8-4 = 1 <=> /(//AB8 + //AB7) = 1 <=> /(AB8 + AB7) = 1 <=> /AB8 & /AB7 = 1 <=> AB8 = 0 et AB7 = 0

Deux des plages d'adresse sont : [0x0000 : 0x007F] et [0x0200 : 0x027F]


Pour le CS1 de U5 :
CS1 = 1 <=> Z8-1 = 1 <=> /(//AB8 + /AB7) = 1 <=> /(AB8 + /AB7) = 1 <=> /AB8 & AB7 = 1 <=> AB8 = 0 et AB7 = 1

Deux des plages d'adresse sont : [0x0080 : 0x00FF] et [0x0280 : 0x02FF]


Maintenant, on s'intéresse à la broche 36 des RIOT (/RS) :



Si elle est à 0, c'est la RAM du RIOT qui est sélectionnée, sinon c'est les périphériques (PIO et Timer).

Cette broche est connectée au signal BAB9. Ce signal suit AB9, le bit d'adresse 9 du 6502 va donc sélectionner ou la RAM ou les périphériques.

On trouve ce plan d'adressage mémoire :
[0x0000 : 0x007F] : RAM du RIOT U4
[0x0080 : 0x00FF] : RAM du RIOT U5
[0x0100 : 0x017F] : RAM du RIOT U6

[0x0200 : 0x027F] : Périphériques du RIOT U4
[0x0280 : 0x02FF] : Périphériques du RIOT U5
[0x0300 : 0x037F] : Périphériques du RIOT U6

Le choix de Gottlieb au niveau du décodage d'adresse, permet d'avoir une RAM de 384 Octets continue (du point de vue du 6502) de l'adresse 0x0000 à 0x017F.


Concernant les périphériques internes au RIOT, un décodage d'adresse interne au chip, crée ce plan d'adressage :
Adresse interne 0: valeur des E/S en lecture ou en écriture du PIOA
Adresse interne 1: Configuration du sens (0 = Entrée, 1 = Sortie) des GPIO du PIOA
Adresse interne 2: valeur des E/S en lecture ou en écriture du PIOB
Adresse interne 3: Configuration du sens (0 = Entrée, 1 = Sortie) des GPIO du PIOB
Adresses interne suivantes : c'est le timer, non détaillé pour l'instant.

Un exemple sur l'adressage des périphériques : rendre active la sortie SOL9 d'un system 80A.

il faut configurer PA7 de U6 en sortie :
Mettre le bit 8 de l'adresse 0x0300 à 1

Piloter PA7 de U6 à 1 :
Mettre le bit 8 de l'adresse 0x0301 à 1

N'hésite pas à demander des explications complémentaire, si je n'ai pas été assez clair.

[edit2] corriger erreur A11 => A13

tilowil

#7
Bonjour,

Merci Spectroman, pour cette revelation. Je connaissais les ChipSelect, mais il me manquait ce petit truc que tu viens de me donner MERCI !

Donc après avoir suivi le schema et fait mes devoir en algèbre de Boole (voila un langage simple a comprendre pour moi :D)
J'ai pu faire mes devoirs de la matinée :D.
Tous les RIOT (U4, U5 et U6) ont sur le /CS2 = Sel2

donc je peux en déduire que si AB12=0 et AB13=0 pour U6, il en sera de même pour U5 et pour U4, reste donc à déterminer AB7 et AB8

- pour U4 (je reprends mes notes:D) :Z8-4=1 => Z8-5=0 | Z8-6=0
=>Z8-5=0 => Z7-4=0 => Z7-3=1 => Z7-2=1 => Z7-1=0 => AB7=0
=>Z8-6=0 => Z7-8=0 => Z7-9=1 => Z7-6=1 => Z7-5=0 => AB8=0

- pour U5 : Z8-1=1 => Z8-2=0 | Z8-3=0
=>Z8-2=0 => Z7-2=0 => Z7-1=1 => AB7=1
=>Z8-3=0 => Z7-8=0 => Z7-9=1 => Z7-6=1 => Z7-5=0 => AB8=0

Ce qui donne au final U4 = 0x0000-0x007F, U5 = 0x1000-0x107F et U6 = 0x0100-0x017F

Je vais aller voir ta réponse, car je vois que tu as posté autre chose pendant que je rédigeais. Il faut dire que j'ai mis un temps fou pour rédiger.

@Little_rabbit, je ne part pas from scratch, j'ai dejà fait réalisé les circuits de Paul Swan, je lui ai demandé l'autorisation de me servir de ses circuits pour faire le système.


Il ne me manque que les connecteurs avec détrompeur pour finir les circuits



En attendant ce week end, j'ai raté le coche le week end dernier, pour commander les éléments chez RS, je commence a regarder la partie programmation. Et comme je ne sais pas programmer quelque-chose que je ne comprends pas, je me renseigne ;) et j'apprends.

[EDIT] Et zut j'ai pas compris.  >:D bon on va tout reprendre calmement  :D :-((
Déjà je ne comprends pas pourquoi tu parles de AB11 et AB12.
Quand je suis le schema
Citation de: spectroman le Mercredi 06 Mai 2020, 07:14:37 AM

SEL2 <- Z9-3 <- Z9-1 & Z9-2. Z9-1<-Z7-10<-Z7-11=AB12. Z9-2<-Z7-12<-Z7-13=AB13. En suivant le schema je comprends que SEL2 vient d'une combinaison de AB12 et AB13, sauf erreur de ma part, mais dans ce cas je ne vois pas le lien entre SEL2 et AB11.

Pour U4 ok j'ai trouvé la même chose, la ou je ne comprends pas c'est pour U5. Si AB7 et AB8 donne le debut de l'adresse (U4 : AB7=0 et AB8=0 -> 0x00.., U6 : AB7=0 et AB8=1 -> 0x01.., dans ma logique de 'pisseur de code', U5 : AB7=1 et AB8=0 -> 0x10.. [les .. representant la valeur lié à AB11 et AB12, même si je ne comprends pas  comme dit plus haut])
Et la en lisant ta reponse boum, explosion nucléaire sous mon crane U5 ce n'est pas 0x1000-0x107F, mais 0x0080-0x00FF. Même si dans la logique des choses c'est normal car ainsi on a les plages ainsi
U4 [0x0000:0x007F]
U5 [0x0080:0x00FF]
U6 [0x0100:0x017F]
XX [0x0180:0x01FF]   
U4 [0x0200:0x027F]
U5 [0x0280:0x02FF]
U6 [0x0300:0x037F]
Quel est le lien dans ce cas entre les CS1 et /CS2 et les adresses ? Comment as tu determiné le debut des plages d'adresses et comment sais tu que la plage que j'ai attribué à XX n'est pas utilisée ?
[edit2] Suppression de la remarque AB11,AB12 vers AB12,AB13 dans [edit]

Little_Rabbit

Salut,

Citation de: tilowil le Mercredi 06 Mai 2020, 15:10:02 PM
@Little_rabbit, je ne part pas from scratch, j'ai dejà fait réaliser les circuits de Paul Swan, je lui ai demandé l'autorisation de me servir de ses circuits pour faire le système.

Ah bah génial alors ! Je n'avais pas compris ça au début !  ^-^

A+
Recherche bornes dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Gottlieb des années 80 (Spirit, Amazon Hunt, ...), Baby Pac Man. Divers :  Ice Cold Beer => Trois fois rien quoi ! :D
Ma séance sur le divan : c'est grave Docteur ? :-\
Ma gaming room, ma storage room

spectroman

#9
Citation de: tilowil le Mercredi 06 Mai 2020, 15:10:02 PM
[EDIT] Et zut j'ai pas compris.  >:D bon on va tout reprendre calmement  :D :-((
Déjà je ne comprends pas pourquoi tu parles de AB11 et AB12.
Quand je suis le schema SEL2 <- Z9-3 <- Z9-1 & Z9-2. Z9-1<-Z7-10<-Z7-11=AB12. Z9-2<-Z7-12<-Z7-13=AB13. En suivant le schema je comprends que SEL2 vient d'une combinaison de AB12 et AB13, sauf erreur de ma part, mais dans ce cas je ne vois pas le lien entre SEL2 et AB11.

C'est normal, a 6h00 du matin j'étais pas bien réveillé, c'est bien A12 & A13, tu as raison. Je vais le corriger dans mes posts précédents.

Citation de: tilowil le Mercredi 06 Mai 2020, 15:10:02 PM
Pour U4 ok j'ai trouvé la même chose, la ou je ne comprends pas c'est pour U5. Si AB7 et AB8 donne le debut de l'adresse (U4 : AB7=0 et AB8=0 -> 0x00.., U6 : AB7=0 et AB8=1 -> 0x01.., dans ma logique de 'pisseur de code', U5 : AB7=1 et AB8=0 -> 0x10.. [les .. representant la valeur lié à AB11 et AB12, même si je ne comprends pas  comme dit plus haut])
Et la en lisant ta reponse boum, explosion nucléaire sous mon crane U5 ce n'est pas 0x1000-0x107F, mais 0x0080-0x00FF. Même si dans la logique des choses c'est normal car ainsi on a les plages ainsi
U4 [0x0000:0x007F]
U5 [0x0080:0x00FF]
U6 [0x0100:0x017F]
XX [0x0180:0x01FF]   
U4 [0x0200:0x027F]
U5 [0x0280:0x02FF]
U6 [0x0300:0x037F]
Quel est le lien dans ce cas entre les CS1 et /CS2 et les adresses ? Comment as tu determiné le debut des plages d'adresses

Les CS1 et /CS2 sont décodés à partir du bus d' adresses. Si l'adresse est bonne, ils sont activés.

Le décodage d'adresse n'est pas complet sur un system 80, comme sur beaucoup de PCB. Sur ce systeme les bits d'adresse 15 & 14 sont inutilisés. Les bits 10 & 11 ne sont pas non plus utilisés pour accéder aux RIOT.


ChipA15A14A13A12A11A10A9 A8 A7A6..0
U4 X X 0 0 X X RS 0 0 YY
U5 X X 0 0 X X RS 0 1 YY
U6 X X 0 0 X X RS 1 0 YY

Quand il y a des X ca veut dire que tu peux mettre n'importe quelle valeur et que ca sera sélectionné. c'est pour ça que je dis qu'il y a plusieurs plages.

Par exemple sur U5 (si le bit RS est a 1, il faut ajouter 0x200) :

ChipA15A14A13A12A11A10A9 A8 A7A6..0Adresse
U5 X X 0 0 X X RS 0 1 YY
U5 0 0 0 0 0 0 RS 0 1 YY0x0080
U5 0 0 0 0 0 1 RS 0 1 YY0x0480
U5 0 0 0 0 1 0 RS 0 1 YY0x0880
U5 0 0 0 0 1 1 RS 0 1 YY0x0C80
U5 0 1 0 0 0 0 RS 0 1 YY0x4080
U5 0 1 0 0 0 1 RS 0 1 YY0x4480
U5 0 1 0 0 1 0 RS 0 1 YY0x4880
U5 0 1 0 0 1 1 RS 0 1 YY0x4C80
U5 1 0 0 0 0 0 RS 0 1 YY0x8080
U5 1 0 0 0 0 1 RS 0 1 YY0x8480
U5 1 0 0 0 1 0 RS 0 1 YY0x8880
U5 1 0 0 0 1 1 RS 0 1 YY0x8C80
U5 1 1 0 0 0 0 RS 0 1 YY0xC080
U5 1 1 0 0 0 1 RS 0 1 YY0xC480
U5 1 1 0 0 1 0 RS 0 1 YY0xC880
U5 1 1 0 0 1 1 RS 0 1 YY0xCC80

Toutes ces valeurs sélectionnent U5. par habitude on utilise celle ou les bits non fixés sont à 0.

le passage des bits aux adresses se fait en concatenant tous les bits de A15 à A0 et en convertissant en hexadécimal

A15A14A13A12A11A10A9 A8 A7A6..0binairehexa
0 0 0 0 0 0 0 0 10000000 00000000100000000x0080

Citation de: tilowil le Mercredi 06 Mai 2020, 15:10:02 PM
et comment sais tu que la plage que j'ai attribué à XX n'est pas utilisée ?

La combinaison ou A13 = 0, A12 = 0, A8 = 1, A7 = 1 ne sélectionne aucun chip d'après le schéma, le bus reste en haute impédance.

spectroman

#10
Avant d'attaquer la partie timer des RIOT, qui est très particulière, je termine le décodage de l'adressage d'un system 80A



U2 (2332)
S1=BAB13
S2=/BAB12

il faut que BAB13 soit à 1 et BAB12 à 0.
Les plages d'adresse sont :
[0x2000 : 0x2FFF]  : 4Ko
[0x6000 : 0x6FFF]  : 4Ko
[0xA000 : 0xAFFF]  : 4Ko
[0xE000 : 0xEFFF]  : 4Ko


Z5 (5101)
Il y'a une erreur sur le schema de gottlieb, c'est /CE1 et non CE1
/CE1=0 <=> //(/BAB11|/BAB12) = 0 <=> /BAB11 | /BAB12 = 0
CE2=1 <=> /BAB13 = 1 <=> BAB13 = 0

il faut que BAB13 soit à 0 et BAB12 à 1 et BAB11 = 1
Les plages d'adresse sont :
[0x1800 : 0x1FFF] : 2Ko
[0x5800 : 0x5FFF] : 2Ko
[0x9800 : 0x9FFF] : 2Ko
[0xD800 : 0xDFFF] : 2Ko

Mais Z5 ne fait que 256 mots, elle est donc adressée 8 fois sur chaque plage, car elle ne traite pas les bits A8, A9 & A10



U3 (2332)
S1=BAB13
S2=BAB12
il faut que BAB13 soit à 1 et BAB12 à 1.
Les plages d'adresse sont :
[0x3000 : 0x3FFF]  : 4Ko
[0x7000 : 0x7FFF]  : 4Ko
[0xB000 : 0xBFFF]  : 4Ko
[0xF000 : 0xFFFF]  : 4Ko


PROM1 (2716)
/OE=SEL1 = 0 <=>  /(/BAB11 & /BAB13) = 0 <=> BAB11 | BA13 = 0
/CE=0 <=> /BAB12 = 0 <=> BAB12 = 1
il faut que BAB13 soit à 0 et BAB12 à 1 et BAB11 = 0

Les plages d'adresse sont :
[0x1000 : 0x17FF] : 2Ko
[0x5000 : 0x57FF] : 2Ko
[0x9000 : 0x97FF] : 2Ko
[0xD000 : 0xD7FF] : 2Ko


PROM2
Je n'ai pas d'info sur le type de composant. Je ne sais pas quand elle est sélectionnée.
De mémoire elle est non montée.


En résumé, l'adressage complet du 6502 sur un system 80A est :

Plage d'adresseChip selectionné
0x0000 : 0x007FU4 RAM
0x0080 : 0x00FFU5 RAM
0x0100 : 0x017FU6 RAM
0x0180 : 0x01FFNU
0x0200 : 0x027FU4 PERIPHERIQUES
0x0280 : 0x02FFU5 PERIPHERIQUES
0x0300 : 0x037FU6 PERIPHERIQUES
0x0380 : 0x03FFNU
0x0400 : 0x07FFidem 0x0000 : 0x03FF
0x0800 : 0x0BFFidem 0x0000 : 0x03FF
0x0C00 : 0x0FFFidem 0x0000 : 0x03FF
0x1000 : 0x17FFPROM1 2716
0x1800 : 0x1FFFZ5 5101
0x2000 : 0x2FFFU2 2332
0x3000 : 0x3FFFU3 2332
0x4000 : 0x4FFFidem 0x0000 : 0x0FFF
0x5000 : 0x57FFPROM1 2716
0x5800 : 0x5FFFZ5 5101
0x6000 : 0x6FFFU2 2332
0x7000 : 0x7FFFU3 2332
0x8000 : 0x8FFFidem 0x0000 : 0x0FFF
0x9000 : 0x97FFPROM1 2716
0x9800 : 0x9FFFZ5 5101
0xA000 : 0xAFFFU2 2332
0xB000 : 0xBFFFU3 2332
0xC000 : 0xCFFFidem 0x0000 : 0x0FFF
0xD000 : 0xD7FFPROM1 2716
0xD800 : 0xDFFFZ5 5101
0xE000 : 0xEFFFU2 2332
0xF000 : 0xFFFFU3 2332

HELP: quelqu'un connait il la syntaxe pour afficher les bords sur un tableau? gc339 avait fait un post, mais je ne le retrouve plus.

Tilowil, est ce que j'ai assez détaillé pour que tu puisses décrire le mapping du system 80B pour ton projet?

gc339

#11
Citation de: spectroman le Jeudi 07 Mai 2020, 08:39:36 AM
HELP: quelqu'un connait il la syntaxe pour afficher les bords sur un tableau? gc339 avait fait un post, mais je ne le retrouve plus.

Il n'y a pas de balises spécifiques pour afficher des bordures. La seule solution c'est d'insérer:
• des caractères graphiques dans les cellules des tableaux pour y encadrer le texte à l'intérieur.
• des cellules avec le caractère graphique qui va bien entre les cellules ordinaires.




Les caractères graphiques sont récupérables en fin de table des caractères par copier/coller (Clic sur Démarrer ou appui sur touche Windows du clavier, puis Accessoires Windows et ensuite Table des Caractères).

A défaut on peut utiliser:
• le signe "-" pour les traits horizontaux,
• la barre verticale "|" (Alt Gr 6) pour les traits verticaux,
• l'étoile "*" pour les angles et les intersections.

De plus les caractères ont une largeur variable due à la police utilisée, ce qui peut parfois nécessiter l'utilisation de caractères à taille fixe (ou télétypés, balise [tt], ou bouton "Tt") pour que la largeur de cellule soit indépendante de son contenu.
• on peut utiliser les balises de cadrage "[left]", "[center]" ou "[right]" à l'intérieur des cellules pour obtenir un centrage différent des autres cellules ou du tableau lui-même,
• on peut insérer une image (d'une taille adaptée) dans chaque cellule adjacente, afin d'afficher plusieurs images côte à côte.

C'est pas franchement évident de réaliser un tableaux comportant de nombreuses cellules, ça génère beaucoup de lignes de codes avec une foultitude de balises, une seule d'oubliée et c'est le bazar assuré!

Pour ce type de tableau, une solution est de le réaliser avec un tableur (Excel, Calc...) puis:

  • de l'enregistrer au format "csv" (séparateur de champs = caractère de tabulation),
  • d'ouvrir ce fichier "csv" avec un éditeur de texte comme Notepad++,
  • de remplacer par exemple:

    • les séparateurs donc les tabulations "\t" par le texte "[/td][td][/td][td]",
    • les sauts de ligne "\r\n\" par "[/td][td]│[/td][/tr]\r\n[tr][td][/td][td]"
  • la largeur d'une cellule peut être réduite en repliant son texte sur plusieurs lignes par insertion de la balise [br] entre les mots où l'on veut forcer une nouvelle ligne. En contrepartie cela augmente la hauteur de la cellule et par conséquent celles des autres appartenant à la même rangée, idem pour les lignes verticales de cette rangée,
  • de vérifier la présence et l'exactitude des balises:

    • en début de première ligne "[tr][td][/td][td]",
    • en fin de la dernière  "[/td][td]│[/td][/tr]".
  • optionnellement, d'insérer une nouvelle ligne séparatrice entre chaque,

    • c'est la ligne qui comportera les caractères graphiques affichant les traits horizontaux (""), les intersections ("") et les extrémités ("" ou ""),
    • ces lignes sont toutes identiques hormis celle du haut et celle du bas puisque leurs extrémités sont remplacées par des coins ("", "", "" ou "") et leurs intersections par des jonctions ("" ou ""),
    • la ligne du haut devra servir de modèle pour les autres, le nombre de caractères graphiques dans chaque cellule devra être supérieur ou égal à celui du texte le plus long dans les cellules de la même colonne (la cellule la plus large dans une colonne impose sa largeur à toutes les autres, donc à la colonne lors de la création du tableau sur l'écran).
  • de copier/coller le texte obtenu dans la fenêtre de rédaction du message et de le prévisualiser pour vérifier le rendu du tableau et faire les corrections nécessaires avant de soumettre définitivement ce message.

Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard





spectroman

Merci beaucoup gc339,

Je vais essayer de mettre à jour mes tableaux.

Même si ça à l'air fastidieux.

tilowil

#13
Bonsoir,

:-* Merci Spectroman. Je dois avouer m'y etre repris a plusieurs fois durant la journée, mais je viens de finir de tout lire. MERCI. Je pense avoir presque tout compris. En tout cas ton explication est on ne peut plus claire. J'ai compilé la partie 6502 de Paul Swan, Il me reste à préparer une CPU Gottlieb et à la brancher, une fois que j'aurai finit la sonde avec les connecteurs. J'ai aussi trouvé sur le Github la partie 6802, pour les cartes Data East, mais pas de 6821 dedans, enfin visible au premier coup d'oeil dans le code. La nuit va faire son oeuvre :D.
Je vais repondre à une de tes "question" :
Citation de: spectroman le Jeudi 07 Mai 2020, 08:39:36 AM
PROM2
Je n'ai pas d'info sur le type de composant. Je ne sais pas quand elle est sélectionnée.
De mémoire elle est non montée.
La prom2 est parfois installée. Par exemple sur le Genesis il y a 2 Prom de jeu. La Prom1 montée sur la PiggyBack puis il y a une Prom2 installée en complément de la Prom1. La Prom1 est une 2764 et la Prom2 est une 2716. Mais comme je l'ai dit c'est la configuration du Genesis. Si la Prom2 n'est pas installé, le jeu ne démarre pas, dans le cas du Genesis.


Désolé pour la prom2 elle est sur la "pliure" du PDF. Je ferai une photo de ma version papier demain.

mais la Prom2 ressemble fortement à la Prom1 sur ton schéma.

Maintenant, je comprends mieux aussi le principe de fonctionnement de la programmation de Paul Swan  ^-^.   Paul envoie des plages d'adresses pour tester les différents éléments. En créant les librairies pour les cartes Gottlieb (exemple du 6502), si je lui envoie les bonnes plages d'adresses le système interrogera ou mettra en "oeuvre" les éléments choisis. Si je suis sur la RAM, il fera une lecture, si c'est les IO il fera une entrée ou une sortie, etc... J'ai juste survoler le programme pour le moment, il faut que je creuse un peu plus pour mieux comprendre. Mais je pense que Paul a fait le necessaire pour que l'ajout de "jeux" soit simple pour l'utilisateur, a condition de savoir ce que l'on fait.

Pendant que j'y pense. Petite question totalement stupide du soir.
Sur les cartes Gottlieb il y a TC1, je suppose que je peux brancher la sonde sur TC1, mais qu'il faut que j'ai dessouder le 6502 avant de faire les tests sinon le processeur va faire son job et l'arduino aura peut être du mal a récupérer des informations fiables.

En tout cas merci beaucoup Spectroman pour le temps que tu passes a écrire tout ça. Mal de tête pour le deuxième jour consecutif  ;D :D mais le projet est intéressant et enrichissant.  <:) :-*

[Edit]
Citation de: spectroman le Mercredi 06 Mai 2020, 16:54:23 PM
Par exemple sur U5 (si le bit RS est a 1, il faut ajouter 0x200) :

ChipA15A14A13A12A11A10A9 A8 A7A6..0Adresse
U5 X X 0 0 X X RS 0 1 YY
U5 0 0 0 0 0 0 RS 0 1 YY0x0080
U5 0 0 0 0 0 1 RS 0 1 YY0x0480
U5 0 0 0 0 1 0 RS 0 1 YY0x0880
U5 0 0 0 0 1 1 RS 0 1 YY0x0C80
U5 0 1 0 0 0 0 RS 0 1 YY0x4080
U5 0 1 0 0 0 1 RS 0 1 YY0x4480
U5 0 1 0 0 1 0 RS 0 1 YY0x4880
U5 0 1 0 0 1 1 RS 0 1 YY0x4C80
U5 1 0 0 0 0 0 RS 0 1 YY0x8080
U5 1 0 0 0 0 1 RS 0 1 YY0x8480
U5 1 0 0 0 1 0 RS 0 1 YY0x8880
U5 1 0 0 0 1 1 RS 0 1 YY0x8C80
U5 1 1 0 0 0 0 RS 0 1 YY0xC080
U5 1 1 0 0 0 1 RS 0 1 YY0xC480
U5 1 1 0 0 1 0 RS 0 1 YY0xC880
U5 1 1 0 0 1 1 RS 0 1 YY0xCC80

Toutes ces valeurs sélectionnent U5. par habitude on utilise celle ou les bits non fixés sont à 0.

le passage des bits aux adresses se fait en concatenant tous les bits de A15 à A0 et en convertissant en hexadécimal

A15A14A13A12A11A10A9 A8 A7A6..0binairehexa
0 0 0 0 0 0 0 0 10000000 00000000100000000x0080
OUI ! c'est beaucoup plus clair sur la raison de la valeur de la plage  8)

Citation de: spectroman le Mercredi 06 Mai 2020, 16:54:23 PM
La combinaison ou A13 = 0, A12 = 0, A8 = 1, A7 = 1 ne sélectionne aucun chip d'après le schéma, le bus reste en haute impédance.
Oui en suivant le schéma j'ai compris. Merci.

[Edit2]  changement de l'image de la prom2

[Edit3]
Voici un aperçu de la CPU Star80B du Genesis :

Tu peux y voir le Piggyback, sur lequel j'ai une piste qui est coupée avec la prom1 et a droite la prom2.


Le jumper E5


et les jumpers E4 et E7 à coté de la prom2.

Est ce que cela veut dire qu'il faut faire un module pour les cartes Star80, Star80A qui sont semblables et un module pour les cartes Star80B, parce que la gestion des eproms n'est pas la même ?
D'autant plus qu'en rédigeant cette partie, je me suis rendu compte que U2 et U3 ne sont pas présent sur ma carte Star80B. U2 est complètement absent et U3 a été remplacé par le PiggyBack.
Si je compare une carte Star80/80A et une carte Star80B :
- 80/80A : Emplacement U2 contient 2332, emplacement U3 contient 2332, Emplacement Prom1 contient Prom jeu 1, Emplacement Prom 2 vide.
- 80B : Emplacement U2 vide, emplacement U3 contient Piggyback avec Prom jeu 1, Emplacement Prom1 contient la Prom jeu 2, Emplacement Prom2 vide
pour le reste les cartes 80/80A et 80B sont identiques.

spectroman

#14
Désolé pour le retard, j'avais pas vu tes edit.

Je ne sais pas trop quoi répondre à ta question si il faut faire un module séparé pour les 80B.

C'est plus un problème d'architecture logicielle que d'électronique.

Tu es meilleur que moi sur cette partie, c'est à toi de choisir  :D

Je n'utiliserai pas le TC1, car tu ne verra pas si des pistes sont coupées autour du 6502.

As tu compris le paramétrage par adresse de la partie timer du RIOT ou tu veux un coup de main ?