RS232C/MIDI INTERFACE

Todo sobre la creación, diseño y programación de nuevo software para
nuestro Spectrum

Moderador: Sir Cilve Sinclair

Responder
fulas
Jack The Nipper
Mensajes: 141
Registrado: Lun Jul 02, 2007 3:28 pm
Ubicación: En Tenerife.

RS232C/MIDI INTERFACE

Mensaje por fulas » Dom Ago 03, 2008 6:49 pm

A ver si alguien me puede echar una mano con el tema del AY-8912, y de como acceder a sus registros para usar el puerto serie. Segun el manual de servicio de sinclair (gracias mcleod_ideafix):
5.7 RS232C/MIDI INTERFACE

5.7.1 The RS232C/MIDI interface is implemented using the Port A Data
Store in the sound generator chip IC32. The data store is a
special register at octal address 16 which accesses an 8-bit
bi-directional port A7-AO. The port occupies the same I/O space as
the sound generator registers and is accessed in much the same way.
The addition of a read cycle at I/O address FFFD^ allows the Z80 to
input data.

5.7.2 The port direction is determined by a control bit written to
register R7 on bus line D6. When D6 is low the port is configured
as an input and when high as an output. In this application A3-AO
are only used as outputs and A7-A4 as inputs. A3/A2 supply an
RS232C driver IC33 which converts the TT!_ outputs to RS232C levels
(+ 12V); A2 and A3 drive the CTS and RXD interface lines
respectively. A4 - A7 are supplied from an RS232C receiver IC34
which converts the RS232C inputs to TTL levels; A6 and A7 are
driven by the DTR and TXD interface lines respectively.

5.7.3 It is evident from the signal directions that the Spectrum
128 adopts the role of a data communications equipment (DCE).
However, DTR and CIS do not perform a handshake but are the same
signal transmitted in opposite directions. The transmission format
is asynchronous, full duplex with 11-bit data frames comprising 1
start bit, eight data bits and two stop bits. Two stop bits are
always sent, but the interface can receive satisfactorily with one.

Desde basic, por ejemplo, como hago para poner el registro R7 del AY configurado como entrada? y una vez hecho esto como leo el registro de datos que ha entregado el puerto serie? que no se en que registro lo deja.

Mcleod_ideafix
Yo no lo sé, pero sí sé que se controla de forma parecida al Interface 1, es decir, no existe UART que genere la señal RS232, sino que es el software quien debe generarla. En el caso del 128K, el puerto RS232 está conectado al puerto A de propósito general existente en el AY-8912.

Para más detalles consulta la pág. 21 y siguientes de:
ftp://ftp.worldofspectrum.org/pub/sincl ... Manual.pdf

Eso de que no existe UART, implica, supongo, que uno tiene que generar todas las señales a traves de los registros, como CTS, RTS, incluso comprobacion de bit START, DATO y bit de STOP.
Si se controla de forma parecida el interface 1, supongo que lo mas facil sera portar el codigo de la SHADOW ROM a un ejecutable desde la RAM del 128k ¿no?

En este hilo http://www.speccy.org/foro/viewtopic.php?f=6&t=460
Na_th_an escribio:
Puede que se modifique algo entre una cosa y otra, puede ser tema de datos en el bus y cosas así, o que BASIC de esas versiones desactiva el AY o algo asi. No puedo ayudarte más, porque yo cuando lo he usado he escrito todos los registros de una tacada, y así nunca he tenido problemas. Pero claro, eso te pararía algo más la ejecución...

Supongo que ahi esta el tema, configurar con OUTS el AY y luego leer el PORT A para cargar el byte en memoria.
Hazlo, o no lo hagas, pero no lo intentes.

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: RS232C/MIDI INTERFACE

Mensaje por mcleod_ideafix » Lun Ago 04, 2008 8:59 am

fulas escribió:Desde basic, por ejemplo, como hago para poner el registro R7 del AY configurado como entrada? y una vez hecho esto como leo el registro de datos que ha entregado el puerto serie? que no se en que registro lo deja.

Olvídate del BASIC. Es extremadamente lento para la generación de señales RS232. Ni siquiera BASIC compilado, ya que necesitas una rutina muy bien temporizada.

Es más, desde BASIC te bastaría emplear los comandos de BASIC que ya hay para usar el RS232, no tendrías que tener que usar código máquina:
http://www.worldofspectrum.org/ZXSpectr ... 8pt21.html

Desde C/M, en lugar de adaptar la rutina del interface 1, coge la que ya hay en la ROM. Mira esto:
http://www.mjwilson.demon.co.uk/rom/rom ... 12-24.html

Y busca la cadena 'RS232' para encontrar rapidamente las rutinas de entrada y salida por RS232.
Web: ZX Projects | Twitter: @zxprojects

fulas
Jack The Nipper
Mensajes: 141
Registrado: Lun Jul 02, 2007 3:28 pm
Ubicación: En Tenerife.

Re: RS232C/MIDI INTERFACE

Mensaje por fulas » Lun Ago 04, 2008 11:18 am

mcleod_ideafix escribió:Olvídate del BASIC. Es extremadamente lento para la generación de señales RS232. Ni siquiera BASIC compilado, ya que necesitas una rutina muy bien temporizada.

Es más, desde BASIC te bastaría emplear los comandos de BASIC que ya hay para usar el RS232, no tendrías que tener que usar código máquina:
http://www.worldofspectrum.org/ZXSpectr ... 8pt21.html


Hice pruebas con un 128k, un +2 y un plus 2A, esos comandos, FORMAT LPRINT "R", tiran con el +2A con el resto no, o al menos, me pasa a mi.
mcleod_ideafix escribió:Desde C/M, en lugar de adaptar la rutina del interface 1, coge la que ya hay en la ROM. Mira esto:
http://www.mjwilson.demon.co.uk/rom/rom ... 12-24.html

Vale, no se me habia ocurrido mirar en la rom. Lo cual quiere decir que si esta implementado y lo unico que hay que hacer es saber como llamar a esas rutinas, inicializacion del AY para cominicacion I/O , velocidad de transmicion etc, supongo que habra una rutina que valla colocando el codigo en memoria, lo que me lleva a pensar, por que no se doto al basic del 128k con algo parecido al LOAD *"B" ¿no?
Hazlo, o no lo hagas, pero no lo intentes.

fulas
Jack The Nipper
Mensajes: 141
Registrado: Lun Jul 02, 2007 3:28 pm
Ubicación: En Tenerife.

Re: RS232C/MIDI INTERFACE

Mensaje por fulas » Lun Ago 04, 2008 11:33 pm

Bueno pues vamos a empezar por algo de codigo, antes de ir al tajo, decir que no tengo ni idea de ensamblador, algo hize con un pic 16f84a hace tiempo, pero el codigo que he leido en este foro no me ha resultado dificil de comprender, debe ser por la calidad de los foreros :D ,al lio, en la rom 0 del 128k la primera rutina del uso de el rs232 hay varias cosas que no entido.

Código: Seleccionar todo

L06d8  ld   hl,$5b61     ; hl= SERFL SYS_VAR  keeps second char that can be received
       ld   a,(hl)       ; Is the second-character received flag set,
       and  a            ; i.e. have we already received data?
                             ; and a, a que coño le hace un and, a si misma?
       jr   z,L06e5      ; Jump ahead if not.
       ld   (hl),$00     ; Otherwise clear the flag
       inc  hl           ;
       ld   a,(hl)       ; and return the data which we received earlier.
       scf               ; Set carry flag to indicate success
       ret               ;

Pues de momentoooooooooo, esa operacion logica heeeeeee, no la pillo.
Gracias a todos.
Hazlo, o no lo hagas, pero no lo intentes.

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: RS232C/MIDI INTERFACE

Mensaje por mcleod_ideafix » Mar Ago 05, 2008 9:13 am

fulas escribió:Pues de momentoooooooooo, esa operacion logica heeeeeee, no la pillo.

La única operación lógica que veo ahí es un AND. ¿Qué es lo que no pillas?
Web: ZX Projects | Twitter: @zxprojects

Gandulf
Nonamed
Mensajes: 1067
Registrado: Lun May 07, 2007 10:06 pm

Re: RS232C/MIDI INTERFACE

Mensaje por Gandulf » Mar Ago 05, 2008 9:17 am

Me imagino que se refiere al sentido de hacer un and del registro A consigo mismo, ya que lógicamente devuelve el mismo resultado. Fulas, es una forma rápida de ver si el registro A vale 0. Podía haber puesto CP 0 pero se ahorra un byte. Antes de ponerte a mirar las rutinas de la rom deberías echar un ojo al set de instrucciones del Z80 y cómo éstas afectan a los flags, ya que si no te va a pasar esto en repetidas ocasiones.
Un saludo,

Gandulf

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: RS232C/MIDI INTERFACE

Mensaje por mcleod_ideafix » Mar Ago 05, 2008 7:21 pm

Ah! Vale! No me fijé en lo que había puesto de comentario. Sí, es para eso, para hacer un testeo rápido del registro A (después de eso, puedes comprobar si vale 0, si es negativo, etc.). También es una forma rápida de bajar el carry, ya que hay instrucción para subirlo (SCF) pero no para bajarlo. Si no se pudiera hacer así, habría que utilizar un SCF y después un CCF.
Web: ZX Projects | Twitter: @zxprojects

Gandulf
Nonamed
Mensajes: 1067
Registrado: Lun May 07, 2007 10:06 pm

Re: RS232C/MIDI INTERFACE

Mensaje por Gandulf » Mar Ago 05, 2008 10:31 pm

Yo la verdad es que tampoco he visto el comentario hasta después de haber contestado, ya que de lo contrario me hubierra ahorrado la primera parte. Al ir tabulado más a la derecha sólo leí los comentarios en inglés :oops:
Un saludo,

Gandulf

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Ahrefs [Bot], Majestic-12 [Bot] y 15 invitados