Le CPLD est en interface directe avec le TRS-80, il joue le rôle du contrôleur de disque.

Le microcontrôleur simule le lecteur de disquette dont ces dernières sont remplacées par des SD-Card dont il assure les échanges. Il gère également un mini afficheur OLED sur son bus SPI. Il s'interface avec le CPLD avec un bus de données AT_D7 à D0 et des signaux de gestion protocolaire. Avec tout ça il ne dispose plus assez de lignes pour gérer un clavier. Ce dernier st donc reporté sur le CPLD.

Le CPLD, lui, gère donc toutes les lignes du bus d'extension du TRS-80: 

  • TRS-A15 à A0
  • TRS_D7 à D0
  • TRS_SYSRES
  • TRS_INTAK
  • TRS_INT
  • TRS_RD
  • TRS_WR
  • TRS_IN
  • TRS_OUT

Quatre lignes utilisées pour le clavier.

  • AT_SET:
  • AT_ACK
  • AT_CMD
  • AT_A0~A1
  • AT_INT
  • AT_CLV

Sept autres permettent les échanges de données entre les deux puces

Transferts vus du TRS-80:

L'écriture et la lecture des registre du CPLD à partir du TRS-80 est identique aux accès mémoire. 

 

Lecture d'un registre par le microcontrôleur:

Les échanges avec le microcontrôleur sont asynchrones. En effet le CPLD signale qu'une valeur de registre a été écrite et est en attente, puis laisse au microcontrôleur le choix du moment où il pourra la lire:


La commande est mémorisée par le CPLD lorsque celui-ci est adressé, c'est à dire lorsque l'adresse ${$}$37EC est présente sur le Bus d'adresse du processeur et que celui-ci réalise une opération d'écriture. les poids A1 et A0 des adresses sont mémorisés afin de signaler quel registre est écrit. (ici le registre Command car A0 = A1 = '0')

Le microcontrôleur, après avoir détecté la présence d'un donnée à lire, le signal au CPLD en passant la ligne AT_ACK à '1' ce qui permet de rendre la donnée disponible sur le bus de données AT_Dx ainsi que les adresses du registre concerné AT_A1 et AT_A0. Une fois les données lues, AT_ACK repasse à zéro, ce qui permet au CPLD de lever le signal CMD et refaire passer les bus AT_Dx et AT_Ax en haute impédance.

 

A tout moment le microcontrôleur peut lire l'état du clavier en passant la ligne AT_CLV à '1' :

Le clavier est signalé sur les bits de poids fort alors que le lecteur sélectionné sur les bits de poids forts:

    • Bit 0: Drive 0
    • Bit 1: Drive 1
    • Bit 2: Drive 2
    • Bit 3: Drive 3
    • Bit 4: Ligne Clavier 0
    • Bit 5: Ligne Clavier 1
    • Bit 6: Ligne Clavier 2
    • Bit 7: Ligne Clavier 3
Ecriture dans un registre par le microcontrôleur:

Le microcontrôleur positionne l'adresse du registre devant être mis à jour sur AT_Ax il positionne les données sur le bus AT_Dx puis passe la AT_SET à '1' puis la repositionne à '0'. A la fin de cet échange il repasse le bus AT_Dx en haute impédance. Dans la figure ci-dessus il s'agit d'écrire dans le registre STATUS (A0 = A1 = '0')