Mais avant, je voudrais revenir sur une instruction IN A, (n) (applicable avec IN A,(C) aussi) :
L'adresse du port I/O via cette instruction est : AD[15..8] = A et AD[7..0] = n. Avec l'instruction IN A,(C), ce serait : IOAD[15..8] = B et IOAD[7..0] = C. Vous voyez où je veux en venir ?
Voici le schéma correspondant à la prise en compte des port I/O $FE et $FF : Vous noterez que le composant IC-5J (en bleu ciel) ne gère que :
- le port $FE en entrée et en sortie (/R0 et /W0).
- le port $FF en sortie seulement (/W1).
Il ne gère pas le cas IN A,($FF) (/R1).
Maintenant si je décide de capturer le signal sur le composant IC-5J qui décrirait /R1 de façon à l'envoyer sur un 74LS273 par exemple pour capturer le bus d'adresse AD[11..8] (présent via le socle de la ROM) et faire que les sorties de ce composant soient connectées aux entrées A15..A12 de la nouvelle ROM (64 Ko au lieu de 4 Ko), j'obtiens mon sélecteur de page PERMANENT. La broche CK se connectera au signal /R1 du IC-5J et la broche CL au /RESET - récupérable depuis IC-4H (vert) ou IC-4J (violet).
Du coup, pour copier une page, je fais :
Code : Tout sélectionner
LD A,page_number
IN A,($FF) ; sélectionne la page <page_number>
LD HL, 0 ; premier octet de la page
LD DE, <adresse DRAM> ; adresse en RAM pour le premier octet à copier
LD BC, 4096 ; une page fait 4 Ko
LDIR ; on copie la page en DRAM !
J'ai bon jusque-là ? si oui, j'aurais donc besoin d'un 74LS273 et d'une ROM de 64 Ko sur un circuit qui s'enfiche sur le socle de la ROM d'origine. J'aurais quand même besoin de capturer le /RESET et /R1 sur IC-5J par exemple.
A noter que si je veux étendre la capacité de la ROM au maximum (4 Ko x 256 = 1 Mo), il me faudra capturer les lignes d'adresses A15, A14, A13 et A12 quelque part pour les injecter dans le 74LS273 qui se connectera respectivement aux lignes A19, A18, A17 et A16 de la ROM étendue.
Vous en pensez quoi ? jouable ou il y a une faille dans l'idée ?