Ici il est possible à l’occasion d’un balayage vidéo de se servir du cycle dédié à l’accès ordinateur pour écrire une donnée mémorisée dans le registre REMP. Comme dit précédemment il est déconseillé d’accéder à la mémoire de l’extension pendant que cette fonction s’exécute. Il sera, en revanche, tout à fait possible de lire l’état du Flag RRQ qui passe à zéro à la fin de l’opération.
La commande de remplissage est réalisée en envoyant un ‘1’ sur le FLAG RRQ. Cette commande valide le remplissage à la prochaine synchro verticale. Un signal indique au CPLD DONNEES la requête en faisant passer la ligne GORPL à ‘1’ jusqu’à la fin de la trame verticale suivante.
Le remplissage est exécuté uniquement pour les octets visibles grâce au signal VIEW. Cela permet de récupérer les octets de fin de ligne ou de fin d’écran pour du stockage supplémentaire au profit des programmes.
CPLD ADRESSES
VIEW.t = 'b'0 ;
VIEW.ck = 'b'0 ;
VIEW.ar = MCL5 & MCL4 & !MCL3 & !MCL2 & !MCL1 & !MCL0 & MCY2 & !MCY1 ;
VIEW.ap = !MCL5 & !MCL4 & !MCL3 & !MCL2 & !MCL1 & !MCL0 & !MLG9 ;
CTRL_RRQ.d = TRS_A12 ;
CTRL_RRQ.ck = MREQ & INOUT & !RDWR & !TRS_A0 & !TRS_A1 ;
CTRL_RRQ.ar = !VGA_VSYNC & GORPL ; /* ARRET DU REMPLISSAGE EN FIN DE TRAME VERTICALE */
GORPL.d = CTRL_RRQ ; /* ACTIVATION DU REMPLISSAGE EN DEBUT DE TRAME VERTICALE */
GORPL.ck = VGA_VSYNC ;
GORPL.ar = !CTRL_RRQ ;
MEM_A0.d = (TRS_A0 & MREQ # GORPL & VIEW & MCL0) & MCY2 & MCY1 # !MCY2 & MCL0 # MCY2 & !MCY1 & MT0;
MEM_A1.d = (TRS_A1 & MREQ # GORPL & VIEW & MCL1) & MCY2 & MCY1 # !MCY2 & MCL1 # MCY2 & !MCY1 & MT1;
MEM_A2.d = (TRS_A2 & MREQ # GORPL & VIEW & MCL2) & MCY2 & MCY1 # !MCY2 & MCL2 # MCY2 & !MCY1 & MT2;
MEM_A3.d = (TRS_A3 & MREQ # GORPL & VIEW & MCL3) & MCY2 & MCY1 # !MCY2 & MCL3 # MCY2 & !MCY1 & MT3;
MEM_A4.d = (TRS_A4 & MREQ # GORPL & VIEW & MCL4) & MCY2 & MCY1 # !MCY2 & MCL4 # MCY2 & !MCY1 & MT4;
MEM_A5.d = (TRS_A5 & MREQ # GORPL & VIEW & MCL5) & MCY2 & MCY1 # !MCY2 & MCL5 # MCY2 & !MCY1 & MT5;
MEM_A6.d = (TRS_A6 & MREQ # GORPL & VIEW & MLG1) & MCY2 & MCY1 # !MCY2 & MLG1 # MCY2 & !MCY1 & MT6;
MEM_A7.d = (TRS_A7 & MREQ # GORPL & VIEW & MLG2) & MCY2 & MCY1 # !MCY2 & MLG2 # MCY2 & !MCY1 & MT7;
MEM_A8.d = (TRS_A8 & MREQ # GORPL & VIEW & MLG3) & MCY2 & MCY1 # !MCY2 & MLG3 # MCY2 & !MCY1 & MT8;
MEM_A9.d = (TRS_A9 & MREQ # GORPL & VIEW & MLG4) & MCY2 & MCY1 # !MCY2 & MLG4 # MCY2 & !MCY1 & MT9;
MEM_A10.d = (TRS_A10 & MREQ # GORPL & VIEW & MLG5) & MCY2 & MCY1 # !MCY2 & MLG5 # MCY2 & !MCY1 & MT10;
MEM_A11.d = (TRS_A11 & MREQ # GORPL & VIEW & MLG6) & MCY2 & MCY1 # !MCY2 & MLG6 # MCY2 & !MCY1 & MT11;
MEM_A12.d = (TRS_A12 & MREQ # GORPL & VIEW & MLG7) & MCY2 & MCY1 # !MCY2 & MLG7 # MCY2 & !MCY1 & MT12;
MEM_A13.d = (TRS_A13 & MREQ # GORPL & VIEW & MLG8) & MCY2 & MCY1 # !MCY2 & MLG8 # MCY2 & !MCY1 & MT13;
MEM_A14.d = (MREQ & (TRS_A14 & CTRL_PL0 # !TRS_A14 & CTLA_M0) # GORPL & VIEW & CTRL_PL0) & MCY2 & MCY1 # !MCY2 & MCY0 # MCY2 & !MCY1;
MEM_A15.d = (MREQ & (TRS_A14 & CTRL_PL1 # !TRS_A14 & CTLA_M1) # GORPL & VIEW & CTRL_PL1) & MCY2 & MCY1 # !MCY2 & MCY1 # MCY2 & !MCY1;
MEM_A16.d = (MREQ & (TRS_A14 & CTRL_PGE # !TRS_A14 & CTLA_M2) # GORPL & VIEW & CTRL_PGE) & MCY2 & MCY1 # !MCY2 & CTRL_PGL # MCY2 & !MCY1 & CTRL_PGE;
Coté données il faut positionner l’octet REMP sur le bus de données de la mémoire lorsque le remplissage est requis et dans le bon cycle MCY6-7.
CPLD DONNEES
MEM_D0.d = (TRS_D0 & !GORPL # GORPL & REMP_D0) & MCY2 & MCY1 # VS0 & MCY2 & !MCY1;
MEM_D1.d = (TRS_D1 & !GORPL # GORPL & REMP_D1) & MCY2 & MCY1 # VS1 & MCY2 & !MCY1;
MEM_D2.d = (TRS_D2 & !GORPL # GORPL & REMP_D2) & MCY2 & MCY1 # VS2 & MCY2 & !MCY1;
MEM_D3.d = (TRS_D3 & !GORPL # GORPL & REMP_D3) & MCY2 & MCY1 # VS3 & MCY2 & !MCY1;
MEM_D4.d = (TRS_D4 & !GORPL # GORPL & REMP_D4) & MCY2 & MCY1 # VS4 & MCY2 & !MCY1;
MEM_D5.d = (TRS_D5 & !GORPL # GORPL & REMP_D5) & MCY2 & MCY1 # VS5 & MCY2 & !MCY1;
MEM_D6.d = (TRS_D6 & !GORPL # GORPL & REMP_D6) & MCY2 & MCY1 # VS6 & MCY2 & !MCY1;
MEM_D7.d = (TRS_D7 & !GORPL # GORPL & REMP_D7) & MCY2 & MCY1 # VS7 & MCY2 & !MCY1;
On récapitule : Le remplissage est donc actif lorsque GORPL est à ‘1’, pendant un balayage vertical et uniquement sur les octets affichés.