Canon X07 - The project

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Papy.G, fneck, Carl

Pocket
Messages : 358
Inscription : 12 janv. 2020 20:58
Localisation : Toulouse
Contact :

Re: Canon X07 - The project

Message par Pocket »

Salut,

De mémoire, c'est une entrée spécifique qui permet de mettre les outputs en état haute impédance (faut creuser la doc pour confirmer).

A+
Pocket
Image
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

1) Le signal /INTA ne concerne que /INT (Z80), donc l'interruption à la priorité la plus basse. Tu ne pourras pas utiliser les autres.
2) Il semblerait que tu n'ais pas besoin du mode "registered" mais "combinatorial". Je regarde de plus près comment faire ça en WinCUPL...
3) As-tu besoin de donner des vecteurs identiques à l'un des deux exemples que tu as donnés ? car ils ne sont pas identiques sur la sortie de D0-7. Le plus sensé serait de donner à D0-7 les valeurs $00, $02, $04, $06, $08, $0A, $0C, $0E pour économiser sur la taille du tableau des vecteurs d'interruption.
4) Je vois que tu as MODE_INT ("interruption de mode" ? il faut plutôt dire INT_MODE - pour "mode d'interruption" car c'est inversé en anglais, voire IM2) pour prendre en compte le fait que le Z80 soit en mode 2 (instruction IM 2) ou pas.
5) Il y a normalement moyen de forcer les sorties à haute-impédance. Reste à voir si on peut le faire sur cette condition : (/INTA == 1 || IM2 == 0).
6) Je ne suis pas sûr que IM2 (MODE_INT) soit nécessaire en entrée car il me semble que /INTA n'est actif à 0 que si le CPU est passé en IM 2. Du coup, la condition /INTA = 1 pour forcer D0-7 en haute-impédance serait suffisante.
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

Bon voici comment j'ai implémenté ton dispatcheur d'interruption /INT0~/INT7 :

1) D'abord sous Digital :
nINT0-7.png
nINT0-7.png (139.6 Kio) Consulté 438 fois
2) Ensuite sous WinCUPL 5 (l'archive contient le source PLD, le binaire JED et la simulation) :
CUPL_INT0-7.zip
(4.22 Kio) Téléchargé 9 fois
3) Résultat de la simulation :
- si /INTA est à 1, pas de sortie sur D0-D7.
- si /INTA est à 0, sortie sur D0-D7 en fonction des /INTi à 0 avec l'octet égal à i*2 où le i le plus haut des /INTi à 0 l'emporte.
- si l'un des /INTi est à 0, alors /INTR à 0 sinon 1. Je me suis posé la question s'il fallait que /INTR soit Z ou 0 au lieu de de 1 ou 0.
Sans titre.png
Sans titre.png (101.02 Kio) Consulté 438 fois
Papyosaure
Messages : 49
Inscription : 25 nov. 2021 09:33
Localisation : Ardèche

Re: Canon X07 - The project

Message par Papyosaure »

Bonjour à tous,
À mon avis, nINTR ne doit pas être à Z, car c’est nITR qui déclenche l’interruption. À la réception de l’interruption, la routine d’interruption vient lire sur le bus le numéro de l’interruption la plus prioritaire.
Je ne connais pas le NSC800, sur le Z80 il existe le mode d’interruptions vectorisées qui permet d’aller directement à la routine de l’interruption correspondante. Le z80 permet 256 vecteurs.
François
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

Le Z, c'est pour permettre une source extérieure /INT raccordée à /INTR. Après réflexion, ce n'est pas bon que /INTR et la source extérieure soient toutes deux actives donc il faudrait mieux connecter la source extérieure à l'une des entrées existantes ou en créer une sur une broche libre du GAL (/INTX en 10) par exemple, et faire en sorte que le /INTR sortant soit le seul à aller dans le NSC800.

L'implémentation proposée fait que la priorité est donnée dans cet ordre : /INT7, /INT6, /INT5, /INT4, /INT3, /INT2, /INT1, /INT0. Si c'est l'inverse que l'on souhaite, il faut alors juste renommer les broches.

Le CPU dans NSC800 est en fait un Z80, donc on parle bien de ce tableau qui sert de vecteurs d'interruption. L'adresse de saut est donnée par la paire de registres I (poids fort) et cet octet présenté dans le bus de donnée comme un offset (poids faible), donc on virtuellement 65536 octets de table et même 65537 octets car un vecteur est encodé sur deux octets. Si on respecte le fait que le bit 0 de cet offset soit à 0 (une adresse d'interruption, c'est deux octets !), ça nous fait virtuellement 128 entrées d'interruption non chevauchantes. Là j'ai choisi que nos 8 interruptions soient placées au début de ce tableau (I = $nn00) avec les offset suivants : $00, $02, $04, $06, $08, $0A, $0C et $0F, de sorte que le tableau ne fasse que 16 octets pour éviter la fragmentation de ces entrées qui est créée par les schémas d'exemple (offset = 0b00xxx000 ou 0b11xxx111 au lieu de ce que propose : 0b0000xxx0).

EDIT: Celui qui propose 0b11xxx111 mime les instructions RST xxx si I = 0 mais je n'en vois pas trop l'intérêt… à part que en mode IM0, on présenterait ces instructions sur le bus de donnée ? ben non car il ne doit pas y avoir de /INTA dans ce cas.
Avatar de l’utilisateur
jeffounet
Messages : 1594
Inscription : 25 janv. 2020 06:59
Localisation : Les Angles (30)

Re: Canon X07 - The project

Message par jeffounet »

Bonjour à tous,

Tout d'abord merci pour vos réponses.
Je me suis décidé à sacnner une partie du livre sur le NSC800 (j'étais réticent au fait de le scanner car cela casse le dos du livre mais bon, comme on ne le trouve pas en scann...)
Bref, voici la partie concernant les interruptions, vous y retrouverez les deux schémas.
interruptions partie 1.rar
(633.34 Kio) Téléchargé 12 fois
interruptions partie 2.rar
(484.26 Kio) Téléchargé 12 fois
Voilà d'ou viennent les schémas et infos que j'avais.

Bonne journée

Jean-François
Il n'y a que 11 sortes de gens, ceux qui comprennent ceux qui ne comprennent pas et ceux qui me font répéter!
Jean-François
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

Ok, celui qui donne 0x11xxx111, c'est clairement pour le mode IM0 (qui apparemment se sert bien de /INTA). Ce mode est quasiment jamais utilisé par les Z80. En avons-nous besoin ? ça fait gâchis d'une table de 128 octets pour juste 16 octets d'utile, avec une fragmentation de 2 octets tous les 8 octets. Encore que je supposerais que I = 0 et qu'à cet adresse Canon aurait quelque chose de son crû s'il utilise IM0. Mais mon petit doigt me dit que Canon ne doit pas utiliser IM0. Si ?

L'autre pour le mode IM2 (le plus intéressant à mes yeux), c'est bien 0x0000xxx0 et non 0x00xxx000 ! je me suis trompé mais du coup, c'est raccord avec mon implémentation. Donc pas de gâchis, la table fait bien 16 octets sans fragmentation.

Du coup, je comprends mieux le coup du INT_MODE (il devrait s'appelait IM0 ou IM2) qui permet de conditionner la sortie du bus de donnée.

Mais je m'interroge en fait sur l'intérêt : Canon a dû déjà faire un choix sur le mode utilisé. Je ne vois pas trop comment on peut affecter INT_MODE d'une part, d'autre part, le signal /INTR du CPU est probablement déjà connecté quelque part. Du coup, je suis perplexe sur l'utilité (car le document que tu donnes ne concerne que le NSC800, pas le Canon).
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

Et je vois un autre problème : la durée des /INT. Le schéma de timing montre qu'il peut remonter assez vite, genre bien avant que /INTA se déclenche. Or les schémas de circuit pour IM0 et IM2 ne fonctionnent que si /INT est maintenu jusqu'au front montant de /INTA. Du coup, j'y crois moyen. Ne faudrait-il pas latch-er ces /INT sur leur front descendant ? mais j'ai bien conscience que la prise en compte du /INT du Z80 ne se fait pas sur un front descendant comme pour le /NMI mais bien sur un niveau bas de /INT, donc il faudrait juste espérer que le signal /INT à 0 reste aussi longtemps pour permettre à /INTA de faire son boulot.
Avatar de l’utilisateur
jeffounet
Messages : 1594
Inscription : 25 janv. 2020 06:59
Localisation : Les Angles (30)

Re: Canon X07 - The project

Message par jeffounet »

Bonjour Hlide,

Je viens de regardé le schéma du X07 et il semble que le INTR/ ne soit pas utilisé, de plus sur le schéma de la carte vidéo X720 il est simplement reporté sur le connecteur cartouche à l'arrière de l'interface vidéo. Connecteur pour lequel il semblerait qu'il n'y ai jamais eu d'utilisation quelconque!
Je peux éventuellement le router sur une des entrée libre du module interruptions.
Pour ce qui est du X07 il n'utilise que INTA, INTB et INTC et pas NMI d'apreès le livre "Application en assembleur dans l'univers du Canon X07" dont voici un extrait:
x-07_Applications ASM-27-29.pdf
(495.56 Kio) Téléchargé 12 fois
Après si seul le mode 2 est utile, alors je peux simplifier les choses. J'avais implémenté les deux modes en pensant les gérer , via des jumpers au début, puis en discutant via un signal que l'on "configurerait" à la dmande via une sortie du CLPD par exemple d'ou le INT_MODE.
Autre question (saugrenue peut-être) la ligne IEO, en provenance du bus RC2014, ne peut-elle pas être envoyée sur une des lignes d'interruptions disponible?

Bonne journée

Jean-François
Il n'y a que 11 sortes de gens, ceux qui comprennent ceux qui ne comprennent pas et ceux qui me font répéter!
Jean-François
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

J'ai modifié le source du GAL22V10 (WinCUPL) en ajoutant la broche IM2 (à 1 pour mode IM2 sinon 0 pour mode IM0) et voici l'archive complet :
CUPL_INT0-7.zip
(6.31 Kio) Téléchargé 7 fois
Et ce que ça donne en simulation avec IM2 = 0 (donc en mode IM0) :
Sans titre.png
Sans titre.png (71.79 Kio) Consulté 342 fois
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

jeffounet a écrit : 05 mars 2024 13:19 Autre question (saugrenue peut-être) la ligne IEO, en provenance du bus RC2014, ne peut-elle pas être envoyée sur une des lignes d'interruptions disponible?
Réponse :
Je vois où tu veux en venir mais ce n'est pas une bonne idée à mon avis, car chaque puce Z80 qui a un IEO doit se chainer pour que la gestion des priorités soit gérée de façon efficace (note le besoin du INTACK).
1653aa.gif
1653aa.gif (3.72 Kio) Consulté 339 fois
Dernière modification par hlide le 05 mars 2024 17:18, modifié 1 fois.
Avatar de l’utilisateur
jeffounet
Messages : 1594
Inscription : 25 janv. 2020 06:59
Localisation : Les Angles (30)

Re: Canon X07 - The project

Message par jeffounet »

Bon, tout d'abord je vous dois des excuses car quand j'ai scanné le livre, j'ai oublié 2 doubles pages! (oui je sais, ça fait 4 ... shame on me!) :oops: :oops: :oops:
Donc voici la fin du chapitre:
interruption partie 3.pdf
(310.05 Kio) Téléchargé 16 fois
Question bête du newbee de service, le signal /INTACK ne serait-il pas équivalent à /INTA en mode 2 (mode Z80)?

Jean-François
Il n'y a que 11 sortes de gens, ceux qui comprennent ceux qui ne comprennent pas et ceux qui me font répéter!
Jean-François
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: Canon X07 - The project

Message par hlide »

A ce stade, je ne peux pas dire ce que c'est ce INTACK, l'information n'est pas lapidaire.
Répondre