Duda con OUTs en BASIC

Por FX

Champion (264)

Imagen del FX

18-11-2014, 00:32

Hola, me he dado cuenta por casualidad que en BASIC permite hacer OUT a puertos superiores a FFh.
Cómo es esto posible? Que corresponde a algún puerto "normal"?
O hay forma de hacer esto mismo en ensamblador.
Por ejemplo:
OUT &H200, 1 corresponde a algún puerto dentro de los números (00-FFh)?
O como se haría este OUT &H200, 1 desde ASM?
Un saludo
FX

Login sesión o register para postear comentarios

Por FX

Champion (264)

Imagen del FX

18-11-2014, 00:36

Vale, he probado a hacer un OUT &H2A8 para ver que pasa, y parece que debe ser equivalente a un OUT &HA8.
Pero no lo sé seguro, ni he encontrado algo que lo diga en ningún lado.
Si hay alguien que lo sepa seguro, que lo diga (No sé porqué en los manuales de MSX no lo especifica, o por lo menos no lo he encontrado)
FX

Por Guillian

Prophet (3438)

Imagen del Guillian

18-11-2014, 09:17

El bus de direcciones del Z80, como ya sabes, es de 16 bits.
Cuando haces un OUT en los 8 bits bajos (A0-A7) se pone el número del puerto y en los 8 bits altos (A8-A15) se pone el valor de otro registro según que tipo de instrucción OUT uses.
Por ejemplo, OUT (C),A pondrá el contenido del registro B en A8-A15, el de C en A0-A7 y A en el bus de datos D0-D7.

Realmente solo hay 256 puertos válidos, pero podrías diseñar un hardware que hiciese uso de esos 8 bit altos del bus de direcciones.

Por FX

Champion (264)

Imagen del FX

18-11-2014, 13:07

Hummmm.
Entonces por lo que veo un OUT(C),A por ejemplo sería en realidad un OUT(BC),A, aunque en el MSX no se utilice.
Muy interesante.
Cuantas cosas me quedan por aprender!!!
Gracias Guillian, como siempre
FX

Por jltursan

Prophet (2520)

Imagen del jltursan

19-11-2014, 00:07

Esa "feature" es empleada, por ejemplo, por el Spectrum para leer su teclado Smile

Por mohai

Paladin (924)

Imagen del mohai

07-01-2015, 15:20

A raiz A raiz de ésta duda, me entra otra duda:
¿El BASIC maneja el byte alto del bus de datos?
Es decir, ¿Filtra el valor dado en un OUT o un IN y lo recorta a 8 bits o manda al registro B el byte alto tal y como lo teclearíamos desde BASIC?

Ya sé que el hardware MSX no está preparado para OUTs de 16 bits, cualquier OUT que hagamos se "enrollará" y acabará escribiendo en un puerto existente, pero se podría diseñar un hardware que haga uso de un puerto libre y lo extienda a 16 bits.