[ZX-81] Comment est décodé le clavier ???

Placez ici vos trucs et astuces, étalez sans retenue votre savoir-faire et votre science qui va nous permettre de redonner une apparence neuve et fonctionnelle à nos bouzes.

Modérateurs : Papy.G, fneck, Carl

Notator
Messages : 1300
Inscription : 09 août 2015 20:13

Re: [ZX-81] Comment est décodé le clavier ???

Message par Notator »

6502man a écrit : 15 oct. 2020 16:19 Donc il y a un OUT (HL),A il me semblait que les assembleurs refusent d'autres arguments que registre 8 bits pour IN/OUT, il faut que je vérifie ....
Est-ce que j'ai dit qu'il existait un OUT (HL) ? Non.

Voici exactement ce que j'ai écrit (et j'ai mis en gras les mots importants) :
Notator a écrit : 15 oct. 2020 03:45 C'est le format 8 bits d'adressage mémoire des instructions d'entrées/sorties les plus courantes qui a entretenu cette confusion.
Mais il en est d'autres qui utilisent les registres HL (16 bits) en adressage, et permettent donc d'accéder au champ complet d'adressage du Z80 en I/O.
Ainsi, on a OTDR, OTIR, OUTD, OUTI qui travaillent avec les registres HL pour l'adressage... :wink:
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Avatar de l’utilisateur
hlide
Messages : 3506
Inscription : 29 nov. 2017 10:23

Re: [ZX-81] Comment est décodé le clavier ???

Message par hlide »

@Notator, ben ce n'est pas non plus très clair quand tu disais "Mais il en est d'autres qui utilisent les registres HL (16 bits) en adressage, et permettent donc d'accéder au champ complet d'adressage du Z80 en I/O", car on pouvais sous-entendre adressage I/O pour HL et non mémoire. Exemple OUTI est plus ou moins équivalent à "LD t, (HL): DEC B : OUT (BC), t : INC HL". On a bien BC pour l'adressage 16-bit du port, HL étant la source en mémoire.

Notez également que B est décrémenté avant le OUT donc du coup si on veut faire un OUT sur $0200, il faut faire "LD BC,$0300 : OUTI". Quel merdier n'est-ce pas ? raison de plus pour "taire" sur l'adressage I/O 16-bit...
The contents of the HL register pair are placed on the address bus to select a location in memory. The byte contained in this memory location is temporarily stored in the CPU. Then, after the byte counter (B) is decremented, the contents of register C are placed on the bottom half (A0 through A7) of the address bus to select the I/O device at one of 256 possible ports. Register B may be used as a byte counter, and its decremented value is placed on the top half (A8 through A15) of the address bus. The byte to be output is placed on the data bus and written to a selected peripheral device. Finally, the register pair HL is incremented.
Dernière modification par hlide le 16 oct. 2020 12:42, modifié 1 fois.
Avatar de l’utilisateur
6502man
Messages : 12332
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [ZX-81] Comment est décodé le clavier ???

Message par 6502man »

Ne nous énervons pas :wink:

Ca reste quand même pas très pratique puisque aucun adressage 16 bits n'est possible directement avec IN ou OUT et les solutions avec OTDR, OTIR, OUTD, OUTI pas toujours les plus simple à utiliser, notamment lorsque l'on veux uniquement lire ou écrire un octet sur un port ???

De plus sur le ZX-81 il n'utilise pas ces instructions mais uniquement IN / OUT !!!!
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
hlide
Messages : 3506
Inscription : 29 nov. 2017 10:23

Re: [ZX-81] Comment est décodé le clavier ???

Message par hlide »

Toute opération sur le port I/O est bien sur 16-bit, c'est juste qu'il y a des effets de bords à surveiller quand un périphérique décide de prendre en compte tout les bits du bus d'adresse. Mais en règle général, la majorité des décodeurs I/O ne tiennent compte des 8 bits de poids faible du bus d'adresse. En d'autre terme, même si ta machine a tendance à n'utiliser que 256 ports, ton périphérique peut très bien choisir de considérer tous les bits, du moment que la partie faible du port n'entre pas en conflit avec un existant. La partie forte du port pourrait servir à adresser les différents registres du périphérique (exemple, IDE $0-$F) tandis que l'on ne garde qu'un seul port faible plutôt que d'avoir à en allouer 16 en tout.
Avatar de l’utilisateur
hlide
Messages : 3506
Inscription : 29 nov. 2017 10:23

Re: [ZX-81] Comment est décodé le clavier ???

Message par hlide »

L'usage de OTDR, OTIR me semble plus rare et pas rapide de toute façon. On préféra une séquence de "OUTI/D : OUTI/D : ... : OUTI/D" surtout quand le nombre est constant.

De plus, on peut ruser (supposons que le périphérique à 4 registres et que le dernier registre enclenche une opération) :

Code : Tout sélectionner

LD HL,IOOperation
LD BC,IOPORT+$0300
OUTI ; IOReg[2] = (HL)++
OUTI ; IOReg[1] = (HL)++
OUTI ; IOReg[0] = (HL)++
LD B,$04
OUTI ; IOReg[3] = (HL)++
Avatar de l’utilisateur
6502man
Messages : 12332
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [ZX-81] Comment est décodé le clavier ???

Message par 6502man »

Le problème qui peut y avoir à utiliser les 16bits sur les machines n'utilisant que les 8 bits de poids faible, c'est que l'on peut rentrer en conflit avec les autres périphériques puisque le décodage ne doit pas prendre en compte A8-A15 !!!

En tout cas j'aurais découvert un trucs que je ne savait pas sur le Z80, même si peut utilisé l'adressage I/O sur 16 bits c'est quand même fou que Zilog n'est pas implémenté un adressage IN/OUT sur 16bits simple :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
hlide
Messages : 3506
Inscription : 29 nov. 2017 10:23

Re: [ZX-81] Comment est décodé le clavier ???

Message par hlide »

Arf, le code en exemple je l'avais corrigé car il était faux mais j'ai oublié de valider. Tant pis...
Répondre