Nuevo core de Jupiter ACE

Avatar de Usuario
mcleod_ideafix
Mensajes: 830
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Nuevo core de Jupiter ACE

Mensaje por mcleod_ideafix » 08 Nov 2015, 08:05

Si recargais el directorio "cores" vereis uno nuevo: "jupiter_ace_spartan6" . Es el primer core que escribí de un ordenador de 8 bits completo, pocos meses después de aprender Handel-C y después Verilog.

El test1 es un calco del core que escribí en el 2011, cuando salió el proeycto Jupiter ACE en Zona de Pruebas, dirigido por Jepalza. Lo único que he añadido a ese core es poder usar un teclado PS/2.

El test2 es una reescritura completa de arriba a abajo, con un estilo de codificación más acorde a lo que he aprendido en estos años. En consecuencia, el test2 está bastante más depurado, sigue todas las "guidelines" acerca de cómo diseñar correctamente cosas como la memoria RAM y ROM. Es lo que he estado haciendo durante la noche del sábado al domingo.

Además, y como esto es FPGA y aquí no tenemos que ceder a compromisos de diseño que hace 30 años sí tenías que hacer, me he tomado la libertad de que tanto la memoria de pantalla como la memoria de caracteres sean de doble puerto, lo que significa que cuando se accede a esas memorias usando el modo "fast" (las direcciones que no generan contienda) no se produce nieve ni glitches indeseados, cosa que sí ocurre en un Jupiter ACE real (y en el test1)

La memoria de caracteres es leible y escribible por el Z80. En el Jupiter ACE real sólo puede leerse.

Por último, como la Spartan 6 que usamos tiene bastante RAM disponible, he implementado toda la RAM dentro de ella, con lo que el chip de RAM de 512KB del ZX-Uno, en este core está dormido (junto con la tarjeta SD, al menos hasta que Antonio haga algo al respecto ;) )

Esta implementación tiene 51KB de RAM en total: 49KB de usuario, 1KB de memoria de pantalla y 1KB de memoria de caracteres. la ROM es la estándar del Jupiter ACE, y ocupa 8KB. En total ocupamos 59KB de los 72KB de memoria block de que disponemos en la Spartan.

Faltan algunos flecos por terminar, tal como mezclar adecuadamente MIC y SPK (ahora mismo salen uno por un altavoz distinto) y que se escuche EAR (que ahora mismo no se escucha nada, pero cargar carga)

La primera cosa que todo nuevo usuario hace en el Jupiter ACE es sacar la lista de palabras del diccionario por defecto. Esto se hace con la orden VLIST

Para cargar algún juego o lo que sea: no es tan sencillo como en el Spectrum. Hay que saber el nombre del diccionario (así se llama al conjunto de nuevos comandos que se carga) que quieres cargar. He dejado alguna cosilla en "software" (recargar esa parte del repositorio). Para dudas, consultar el manual del equipo, y agarraos los machos porque ¡esto es Forth!

Por ejemplo: el siguiente programa testea y muestra en pantalla la cantidad total de RAM disponible en un Jupiter ACE, y mira si el espejo de memoria RAM está habilitado o no. Esto de habilitar el espejo de memoria sólo tenía sentido con la ampliación de 29KB que diseñé para el Jupiter ACE de ZdP. En esta implementación siempre está habilitado.

Está en el directorio "tests" dentro de "jupiter_ace". Suministro fuentes, binario en formato TAP, TZX y WAV. OJO que el formato TAP no es como el del Spectrum. En "utils" os paso un programilla que hice que convierte un TAP de Jupiter ACE a un TZX que después puede cargarse con el Taper (está en las cosas de Sam Coupé) o pasarse a WAV con la utilidad tzx2wav.

Se carga tecleando:

Código: Seleccionar todo

load l l
(l es la L minúscula)

Debería verse esto en pantalla al cabo de unos segundos de ejecución:
jupiter_ace_51k.jpg
Encontrareis muchos programas y juegos (y las instrucciones para cargar cada uno, porque no todos se cargan igual, hay que saber el nombre del diccionario y de la palabra de arranque), mirar la sección de software del repositorio general de Jupiter ACE:
http://www.jupiter-ace.co.uk/software_index.html

El teclado está configurado para uno español, incluyendo los caracteres de puntuación, matemáticos, etc. La tecla EDIT (borrar linea) es F2. La tecla Ctrl-4 es VIDEO INVERSO. La tecla Ctrl-9 es GRAPHICS. Los cursores están mapeados a las teclas del cursor del Jupiter ACE (CAPS+5678). ESC es la tecla BREAK (CAPS+SPACE). Se puede resetear el ordenador como siempre, Ctrl-Alt-Supr. Ctrl-Alt-F5 dispara una NMI pero ahora mismo no está conectada al Z80.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Nuevo core de Jupiter ACE

Mensaje por Quest » 08 Nov 2015, 08:32

Maravilloso :D
Una gran oportunidad para trastear con un equipo totalmente desconocido para mi.

Ya tengo ganas de llegar a casa esta tarde para probarlo :plasplas:
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
mcleod_ideafix
Mensajes: 830
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Nuevo core de Jupiter ACE

Mensaje por mcleod_ideafix » 08 Nov 2015, 09:56

Prueba rápida de algo que se puede hacer con este clon, pero no con un Jupiter ACE estándar (al menos no de esta forma)

Teclea la siguiente palabra, respetando los espacios donde los haya (puede hacerse en minúsculas todo si se quiere):

Código: Seleccionar todo

: BOLD
12288 11264 DO
I C@ DUP 2 * OR I C!
LOOP
;
Cuando pulsemos ENTER tras cada linea veremos que se va añadiendo a la parte superior de la pantalla. Después de dar ENTER a la última línea, la del punto y coma, debe aparecer un OK en pantalla.

Ahora, para tener algo de texto en pantalla, teclea VLIST y ENTER

Y a continuación, teclea BOLD (y ENTER)

Lo que esto hace: ejecuta un bucle con índice desde 11264 hasta 12887 inclusive. En cada vuelta lee la posición de memoria apuntada por el índice del bucle, la desplaza a la izquierda y la combina con un OR con el contenido original, actualizando acto seguido dicha posición de memoria con el dato combinado. En BASIC sería algo así:

Código: Seleccionar todo

10 FOR i=11264 TO 12287
20 POKE i, (PEEK(i)*2) OR PEEK(i)
30 NEXT i
Resulta que en ese rango de posiciones de memoria es donde se encuentra la definición de los caracteres de la fuente de letras del Jupiter ACE. Al desplazar cada byte a la izquierda y combinarlo consigo mismo, obtenemos un efecto de letra negrita (bold). En el Jupiter ACE original esto no puede hacerse porque ese rango de memoria no es leíble, sólo escribible.

El efecto se ve en tiempo real en pantalla porque el Jupiter ACE tiene una memoria enfocada a caracteres, y los pinta por hardware, así que si se modifica la definición de uno, automáticamente se actualiza en pantalla.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
jepalza
Mensajes: 613
Registrado: 02 Oct 2015, 18:52

Re: Nuevo core de Jupiter ACE

Mensaje por jepalza » 08 Nov 2015, 11:00

Madre mia, la de cores que estamos sacando. Qué locura organizar todo esto!!! A este paso, batimos el recórd de conversiones a un mismo sistema.

Avatar de Usuario
antoniovillena
Mensajes: 2619
Registrado: 27 Sep 2015, 20:41

Re: Nuevo core de Jupiter ACE

Mensaje por antoniovillena » 08 Nov 2015, 15:52

Bueno ya he encontrado el hilo del Bascolace. Es una ROM para Jupiter Ace que lo convierte prácticamente en un ZX Spectrum en lo que a Basic se refiere.

http://retrolandia.net/foro/showthread. ... 148#pid148

Hice 2 versiones, una con tokens y otra sin tokens. Como no cabía en la ROM de 8K empleo 2 ROMs. La primera se autocopia en RAM y pasado un tiempo se conmuta a la segunda, que se queda de forma permanente. Lo suyo sería que pudieras implementar esto en el core. Bajo emuladores se puede ver con un snapshot y la segunda ROM, pero en el ZX-Uno lo suyo sería hacerlo con doble ROM.

Aquí tienes la versión Bascolace ejecutándose bajo emulador online (no funciona en móviles):

http://jupiler.retrolandia.net/ace

Y aquí ejecutando un juego que venía en mi manual de Spectrum +2A.

http://jupiler.retrolandia.net/ace?bustout.tap

Avatar de Usuario
antoniovillena
Mensajes: 2619
Registrado: 27 Sep 2015, 20:41

Re: Nuevo core de Jupiter ACE

Mensaje por antoniovillena » 08 Nov 2015, 15:59

mcleod_ideafix escribió:Por último, como la Spartan 6 que usamos tiene bastante RAM disponible, he implementado toda la RAM dentro de ella, con lo que el chip de RAM de 512KB del ZX-Uno, en este core está dormido (junto con la tarjeta SD, al menos hasta que Antonio haga algo al respecto ;) )
La SD se puede quedar dormida, no hay mucha variedad de juegos y además ocupan poco, por lo que la carga en cinta es rápida. Respecto a la SRAM, si vas a implementar la doble ROM ya no te va a caber todo en BRAM (51+16=67K), así que puedes implementar los 4 slots de ROM con la BRAM (2 del Bascolace, 1 de la ROM original del Jupiter Ace y otra alternativa) y los 51K de RAM del Jupiter Ace con SRAM.

Avatar de Usuario
mcleod_ideafix
Mensajes: 830
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Nuevo core de Jupiter ACE

Mensaje por mcleod_ideafix » 08 Nov 2015, 16:19

Antonio: usar BRAM tiene una ventaja respecto a lo del Bascolace, y es que puedo precargar el contenido que quiera no solo en ROM sino también en la RAM, por lo que el equipo arrancaria ya con esta ROM. Si empleara SRAM podria también conseguirse añadiendo un puerto de E/S para habilitar la escritura en ROM de forma que cargaría la ROM del Bascolace en RAM desde cassette, habilitaria la escritura en ROM, copiaria el cacho de ROM de 8K que correspondiera, volveria a deshabilitar la escritura en ROM y por último, RST 0 ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
antoniovillena
Mensajes: 2619
Registrado: 27 Sep 2015, 20:41

Re: Nuevo core de Jupiter ACE

Mensaje por antoniovillena » 08 Nov 2015, 18:02

Ahora que caigo, si tienes implementada la RAM en BRAM no habría inconveniente en precargar el contenido de los primeros 8K de ROM (en RAM), con lo que no hay necesidad de una segunda ROM de 8K.

Avatar de Usuario
mcleod_ideafix
Mensajes: 830
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Nuevo core de Jupiter ACE

Mensaje por mcleod_ideafix » 08 Nov 2015, 19:15

antoniovillena escribió:Ahora que caigo, si tienes implementada la RAM en BRAM no habría inconveniente en precargar el contenido de los primeros 8K de ROM (en RAM), con lo que no hay necesidad de una segunda ROM de 8K.
Exacto, es lo que te comentaba antes, pero al final he optado por la otra opción, la de permitir escrituras en ROM.

El test 2a_rom_escribible permite esto. Se ha definido un puerto de I/O, el 127 decimal. Escribiendo en él los códigos ASCII de las letras de la palabra "ENABLEWR" uno detrás de otro, se habilita la escritura en ROM. Escribiendo cualquier otra cosa en ese puerto deshabilita la escritura.

He cogido tu ROM y la he partido en los cachos que van a un sitio y a otro, y con eso he escrito un programa que carga las ROM's, las pone en su sitio, habilitando la escritura en ROM temporalmente, y por último salta al comienzo de la nueva ROM. Funciona perfectamente.

Salvo por un detalle: no sé cómo has hecho la rutina de lectura de teclado, que algunas teclas que deberían ser con SYMBOL SHIFT en el ACE convencional aquí no funcionan (por ejemplo el símbolo del $ ). Es como si para algunas teclas se activara el CAPS SHIFT+tecla en lugar del SYMBOL SHIFT+tecla. Estoy usando la ROM que lleva el tokenizador incorporado y me permite teclear comandos letra a letra.

Acabo de hacer un cambio en el core de teclado para que las dos teclas CTRL se comporten como CAPS SHIFT y SYMBOL SHIFT por separado, para así poder tener un layout completo y poder pulsar cualquier combinación de teclas independientemente de que tu teclado sea español o inglés. A ver si así doy con qué combinación has usado para esas teclas.

EDITO: nada, que no consigo sacar el símbolo del $ ni con CAPS SHIFT ni con SYMBOL SHIFT. ¿Puedes comprobar eso? En tu emulador tampoco consigo sacarlas. Los símbolos que no consigo sacar son: @ # $ % & _ | \ (c)

El cargador del BASCOLACE, y código fuente asociado está en la carpeta "bascolace_loader" dentro de la carpeta del core.

Por último: esta ROM admite color, ¿verdad? ¿Cómo lo usas?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
antoniovillena
Mensajes: 2619
Registrado: 27 Sep 2015, 20:41

Re: Nuevo core de Jupiter ACE

Mensaje por antoniovillena » 08 Nov 2015, 19:31

Está parcheado para usar teclado de spectrum. Tengo que desparchear. Luego te comento también lo del color, desde el emulador se conmuta con f7.

Responder