Intento de implementación de Enteprise 128 en FPGA

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1746 veces

Intento de implementación de Enteprise 128 en FPGA

Mensajepor ron » 05 May 2020 11:44

No hace mucho tiempo, formamos un pequeño equipo de entusiastas y con la ayuda de rampa069, Fernando Mosquera, SubCritical y otros grandes conocedores de las FPGA, pudimos implementar varias cosas, incluido el core de Oric con Microdisc. De todos modos, en el grupo hay usuarios con gran conocimiento de Z80 y HW de Enterprise. El grupo es bastante sólido y estamos abiertos a cualquier persona que pueda aportar documentación y conocimiento.

Actualmente nos comunicamos por Telegram por la celeridad, pero este hilo se crea para ir documentando y comentando con más tranquilidad y profundidad, si alguno tenéis inquietud con este desarrollo y considera que puede aportar valor, me enviáis un privado y miramos de sumaros al grupo.

El objetivo principal es lograr una implementación de Enterprise 128 que funcione en placas FPGA como MiST, MiSTica y SiDi y para que más tarde se puedan portar a FPGA como MiSTer u otras.

Dos de los principales escollos a superar son los ASIC o Custom: Nick y Dave, ya que no hay implementación y todo lo que tenemos son los emuladores y la documentación que todos conocemos.

Hemos abierto un hilo en EnterpriseForEver, el foro húngaro especialista en Enterprise por antonomasia:
https://enterpriseforever.com/hardware/ ... over-fpga/

GFlorez, será nuestro interlocutor, a ver si los colegas húngaros o de otros sitios nos pueden ayudar con lo que sea, todo es bienvenido y muy agradecido.

Sin prisas pero sin pausa, no importa cuánto tiempo pueda consumir, es algo que se hace de forma totalmente altruista, incondicional y sin ningún tipo de beneficio.

Tenemos que centrar nuestros esfuerzos para intentar conseguir la mejor implementación posible de Nick y Dave. Es clave, porque el resto del núcleo ya está más o menos definido.
Lo primero que necesitamos es tener la base de Video del Nick para comenzar a pintar en la pantalla y agregar gradualmente todo el desarrollo. La parte de Dave parece más asequible.

En posts posteriores os iremos desgranando lo que ya tenemos y que nos falta.

Muchas gracias y ánimo.

Avatar de Usuario
kikems
Mensajes: 3879
Registrado: 30 May 2013 19:23
Agradecido : 1302 veces
Agradecimiento recibido: 1658 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor kikems » 05 May 2020 11:56

Uffff la que vais a liar. Si finalmente tenemos Enterprise FPGA, alucino.

Avatar de Usuario
Jinks
Mensajes: 2019
Registrado: 09 Oct 2013 16:47
Agradecido : 196 veces
Agradecimiento recibido: 258 veces
Contactar:

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor Jinks » 05 May 2020 14:15

Con regalarnos un Oric ya era suficiente... pero si también nos regaláis un Enterprise yo no voy a poner pegas -no

jltursan
Mensajes: 2943
Registrado: 20 Sep 2011 13:59
Agradecido : 240 veces
Agradecimiento recibido: 712 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor jltursan » 05 May 2020 19:22

Raro sería que ninguno de los usuarios húngaros no se vuelque con la investigación. Si es que ya es raro que no haya nada al respecto a estas alturas...

¡Ánimo!

Avatar de Usuario
Jinks
Mensajes: 2019
Registrado: 09 Oct 2013 16:47
Agradecido : 196 veces
Agradecimiento recibido: 258 veces
Contactar:

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor Jinks » 06 May 2020 07:59

Off Topic
Menuda casualidad.
Ayer mismo me puse con un juego de Spectrum que nunca había probado, el Extreme.
Y, ¿qué pone tanto en la pantalla de carga como en la que sale cuando el juego termina de cargar?
"NICK + DAVE"
https://www.youtube.com/watch?v=_7G0ZZqHHfM&t=0

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1746 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor ron » 06 May 2020 10:05

Para hacer una primera aproximación al core que pretendemos conseguir, intentaré explicar lo que se ha ido planeando.

Hay dos coders notables con grandes cosas. Son Gyorgy (Gyurco, también conocido como Slingshot) y Sorgelig. Ambos se encuentran entre los más representativos de MiST y MiSTer. Ambos tienen dos core de Sam Coupé separados implementados.

Este es el git de Sorgelig: https://github.com/sorgelig/SAMCoupe_MIST
Este es el git gyurco (slingshot): https://github.com/gyurco/SAMCoupe_MIST

Ehh ! tranquis, xD, Sí, dije Sam Coupé. Pero explicaré qué significa todo esto. Todos saben que el Enterprise es mejor micro que el Sam Coupé. Enter es un diseño de 1983, Sam del 87/8

¿ No es extraño tener el Sam Coupé en lugar del Videoton como base ?

Pese a todo lo que pudierais pensar, las máquinas son más parecidas de lo que se cree.
El Videoton es similar en software, pero no en hardware, que es de lo que se trata aquí. Creemos que Miles Gordon Technologies debió haber mirado de reojo al Enterprise, porque casualmente, hay muchas circunstancias que hacen que sea óptimo aprovechar lo que ya se ha hecho. Al menos en términos de FPGA. Durante el desarrollo del core de Oric pudimos estudiar el core de Sam ya que estuvimos mirando la parte de la controladora de discos, pese a ser un Z80 a 6MHz, no supone ningún problema. El Z80 es asíncrono, con lo que podemos moverlo a la velocidad que queramos.

Ya por otra parte quedan los relojes y los timmings, no es tampoco cuestión de hacer un megapost explicando, se trata de una idea general. Implementar el DAVE como un Pseudo-DAVE no va a darnos demasiados problemas, pero somos conscientes que el Pseudo-NICK va a ser dificil y complejo. NICK accede directamente a RAM ( VRAM ) y DAVE hace muchas más cosas que generar audio, como ser el responsable de la gestión de la memoria.

DAVE:
Stereo Sound Generator
MMU ( Memory Paging )
Address Decoding para la RAM en placa y ROM en cartucho
Interrupciones del Sistema, incluyendo un programmable frequency timer interrupt a 1 MHz y dos external inputs.
Circuito de Reset Z80 compatible con RAM dinámica.
I/O Strobe signals para uso de octal latches externos y buffers tri-estado
Reloj sistema a 1 MHz
Z80 Wait State generator.


NICK:
Estas son sus principales características

Video Ram Addressing
Line Parameter Table
Line Parameter Base Pointer
Line Parameter Blocks
Left and Right Margins
Colour Mode and the Palette Registers
Pixel Graphics Modes
Character Modes - 64, 128 and 256
Attribute Graphics Mode
Vsync Mode - Vertical Synchronisation
Video Interrupts
Determination Of Colours
Control Registers.


Mixed mode displays
User definable characters from fonts of 64, 128 or 256
8­bit colour output (256 colours)
2,3,16 and 256 colours per line chose from 256
Maximum resolution (using interlace) 672 * 512
Cell based graphics, bitmap and characters
Characters any height from 1 to 256 scanlines
Choice of 256 border colours
User defined screen width and hight
External colour input (unlimited sprites or TV camera)
Efficient use of RAM (can work with < 1K of RAM)
4 colour­pairs in 84 column text mode
Special use of bits to increase colour options
Pointer based memory mapping, for flexibility and speed


Obviamente, el core de Enteprise una vez que esté listo para implementar NICK y DAVE no tendrá nada que ver con el original. En breve abriremos un Git y pondremos en letras grandes " NO FUNCIONA ", cuando lo haga, nos vamos de fiesta. Hay bastante documentación y tenemos el emulador de Istvan Varga, EP128 que es bueno a rabiar y con un debugger que seguro nos viene genial. En cualquier caso está emulado en MESS. Todo eso, más los Enteprise físicos, osciloscopio para señales y mucha paciencia nos tiene que ayudar.

Los primeros pasos son elegir los componentes que vamos a reutilizar, añadir el FrameWork moderno de MiST, y hacer fork a Enteprise. De este modo se puede empezar a mover puertos, mapa de RAM, etc...

El EXOS detecta las ROMS del Enteprise al vuelo. Si detecta una cabecera en un bloque de 16K, la usa.
La ROM ya está cargando mediante ioctl_download a SDRAM, el paginado con bloques de 16Kb ... no es tan diferente ... con los cambios apropiados no vemos ningún impedimento para usarlos como base sobre la cual implementar.

Es un buen comienzo. Por lo que vemos, la forma de leer el teclado es muy similar a la de AY, Interrupciones, mmu, muy parecido.
En este momento tenemos registros de audio claros, no será muy difícil crear un prototipo de DAVE y la paginación basada en salidas es del tipo CP/M Rampa069 va a intentar convertir un AY en un Pseudo-DAVE y por otro lado va a comenzar la creación de un Pseudo-NICK que de momento solo vuelque memoria de video a pantalla. Ayudará a ver si hay actividad en la RAM aunque no se lea nada. Tenemos claro que la RAM no va a suponer un problema. Un primer prototipo bien puede ir con 576 o 1024KB de RAM.

En una fase posterior se trata de suplantar el ASIC de Sam por Pseudo-NICK y SAA por pseudo-DAVE.

Es una etapa inicial, se trata de crear prototipos hasta que el Nick pueda comenzar a generar y pintar video. Tenemos que ver hasta dónde podemos llegar, ya que en otros core las partes que faltaban hasta que los esquemas se obtuvieron o se decaparon los integrados, se basaron en lo que estaba escrito en emuladores. Como ejemplo el CPC.

Vamos sin prisa pero sin pausa, mucha paciencia y mucho ánimo.
Sentiros libres de comentar y añadir lo que despierte interés o puntos de vista.

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1746 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor ron » 06 May 2020 11:15

¿Qué hacen estos chips? NICK & DAVE

Empezamos con el DAVE:

Dave es responsable del sonido en la máquina por un lado y de desplazamiento a través de la memoria RAM por el otro.
Esta gestión de memoria es uno de los puntos fuertes de la máquina: recibe los dos cables "wires" de las direcciones más altas del Z80, las líneas A15 y A14, respectivamente, como "entradas". Con estas dos líneas, puede decidir a cuál de los 64 KB de espacio direccionable de 64 KB accede el Z80.

Hay 4 piezas dentro del chip. Registro de 8 bits, la línea A15 / A14 selecciona uno de estos. El registro seleccionado se envía a una salida de 8 bits como una línea de dirección adicional. El bus de direcciones de la máquina se forma al tener la línea de dirección 14 (inferior) de la CPU (A13..A0), a la que se agrega la línea de dirección 8 (superior) "emitida" por DAVE (A21..A14).

Por lo tanto, este es un espacio de direcciones de 22 bits, lo que significa 4 MBYTE de memoria total. En el sistema, la ROM y la RAM se dividen en segmentos de 16 KB, ¡es completamente libre de variar a dónde ir! :) EXOS observa los 256 segmentos cuando enciende la máquina, y luego almacena muy bien dónde se encuentra.

Debido a los 8 bits, los números de segmento pueden estar en el rango 0..255, algunos de los cuales se utilizan de fábrica. Estos incluyen la ROM de la placa base, que aparece en los segmentos 0..3, y el conector de "cartucho" (etiquetado ROMBAY en la esquina superior izquierda de la placa base, pero no solo la ROM aquí), a los que se asignan los segmentos 4..7. O la memoria de video de la placa base, que se puede ver en los segmentos 255..252, y la expansion de RAM internoa de 64 KB, que se muestra en el 251..248. Pero el resto es "gratis".

No hay paginación ROM / RAM separada, también se resuelve con esta lógica. (Debido a esto, no es como si una ROM estuviera "debajo" de RAM, que es ROM cuando se lee, pero los datos se escriben en la RAM que está debajo cuando se escribe. Aunque podría hacerse con una extensión.

Ahora veamos el NICK:

Nick, hay dos versiones, la versión inicial a veces funciona incorrectamente.
En este caso NICK es responsable de los gráficos y, con ello, del control de la memoria de video. (Esta memoria es el grupo IC 8 a la izquierda de la CPU + ROM en la placa base. Nick ve 64 KB de RAM "todo en uno", ¡no se ve afectado por el desplazamiento de 16 KB de la CPU! Esta memoria está en un bus separado, esto no es accesible desde el puerto de expansión.

Y aquí viene la "parte del truco": acceder a esta memoria desde la CPU. (Lo cual es una suposición). El tiempo de esta memoria es tal que NICK genera tres ciclos completos de DRAM seguidos. En el caso de los dos primeros, él da el título, estos ciclos son siempre lecturas. Usa los datos leídos aquí para mostrarlos. El tercer ciclo puede obtener la CPU si solo la necesita. Este ciclo triple de DRAM se repite continuamente en todos los modos de pantalla.

Sin embargo, hay un poco de "desorden" aquí: el reloj de la CPU no se ajusta a este patrón. La solución es muy interesante ... Por un lado, hay dos controladores de bus que conectan la dirección deseada (A13..A0 desde la CPU y A15 / A14 desde el DAVE) al bus de direcciones de memoria de video cuando está libre. O hay un tercer controlador de bus que hace lo mismo con el bus de datos de la CPU, solo que es bidireccional ya que el Z80 también puede leer / escribir. El truco es que el reloj de la CPU se "enruta" a través de NICK. (En realidad, obtiene el reloj dual de la CPU, lo asigna a la CPU). Cuando la CPU quiere acceder a la memoria de video, NICK "detiene" el reloj de la CPU hasta que el ciclo de RAM se triplique de la CPU a la CPU. no viene Si lo hace, habilita esas tres unidades principales de bus y luego, cuando se completa el ciclo de RAM, "pasa" el reloj de la CPU.

Aunque el Z80 tiene una entrada WAIT que se puede usar para esperar en tal caso, no se puede usar aquí. Incluso sería bueno escribir memoria de video (espera hasta que tenga lugar el ciclo de CPU DRAM), pero no funciona al leer. Leer la RAM "a tiempo" de alguna manera parece que el ciclo comienza con la configuración de la dirección y luego "al final del tiempo de acceso" los datos leídos se muestran en las salidas de memoria.

Sin embargo, estos datos solo estarán allí hasta que se complete el ciclo de RAM dado. Si el tiempo del ciclo de RAM está cerca del tiempo de acceso de RAM, los datos válidos estarán en el bus solo durante una pequeña parte del ciclo. Si el Z80 esperara con la entrada WAIT, la espera tendría que estar apagada en algún lugar aquí, pero la CPU no almacenará el estado del bus de datos en este momento . El almacenamiento se produce cuando finaliza el ciclo actual de memoria por parte de la CPU. Este almacenamiento de datos y la terminación del ciclo se activan por uno de los cambios de borde correspondientes de la señal del reloj. Si dicho borde de cambio de reloj de la CPU no está incluido en la "ventana de tiempo" válida de los datos cargados por las RAM en el bus de datos, el Z80 almacenará datos incorrectos.
Por ello, con este truco de sincronización, los dos buses de diferentes frecuencias (bus de memoria de video / bus de CPU) se sincronizan en el momento deseado, durante el tiempo del cambio de borde significativo.
Esta "parada" suena muy mal en términos de velocidad de ejecución del programa, pero el Z80 usa memoria "con poca frecuencia" en relación con su reloj, por lo que la notable desaceleración no es demasiado grande. (El Z80 de 4 MHz es "medible" a una velocidad de aproximadamente 3,5 MHz.) Pareciera que cualquier acceso a la memoria de video es más lento que el de "otra" memoria normal. (Sensación pura de “chip-ram” / “fast-ram” )

Este diseño asincrónico, por otro lado, permite una pequeña cosa no despreciable , es decir, el posible aumento en el reloj de la CPU. Esto no se puede hacer en otras máquinas "contemporáneas" (tan fácilmente) porque el reloj común también lleva la línea de video / frecuencia de actualización, y las pantallas contemporáneas (en su mayoría televisores) no pueden recibir nada más. Por esta razón, en el caso de EP, el CPU turbo es casi una cosa básica. (Que desafortunadamente tiene mucho espacio para la máquina, pero ese es un asunto diferente).

Los otros periféricos de la máquina están hechos de circuitos TTL simples (a veces soportados por dos circuitos analógicos pero de todos modos docenas de circuitos integrados), con la excepción de los dos chips personalizados sin componentes especiales.

dancresp
Mensajes: 5634
Registrado: 13 Nov 2010 02:08
Agradecido : 314 veces
Agradecimiento recibido: 446 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor dancresp » 06 May 2020 13:46

Otro core que sería bienvenido a mi MiST.

La verdad es que es un micro que solo he visto una vez, precisamente gracias a tí que te lo trajiste a una "Retro Vilobiwiki", y que emulado parece potente, pero del que no he podido aprender gran cosa ya que la mayor parte del software son ports de otros sistemas.

A ver si tenéis suerte en esta empresa... (seguro que sí)
Buscando la IP de la W.O.P.R. he encontrado mi índice

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1746 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor ron » 09 May 2020 22:59

Tenemos algunos progresos, mucho más de lo que podríamos esperar. Nuestro amigo rampa069 no nos ha dado tiempo ni asimilar todo lo que ya ha logrado hacer. ¡Asombroso!

Debido a que la SDRAM de FPGA tiene 24 bits de direccionamiento, rampa069 ha reducido con éxito la MMU Enterprise de una manera muy inteligente. Primeros 8 bits (Contenido del puerto señalado por las dos líneas altas como un banco) +2 bits (El puerto activo (B0, B1, B2, B3)) + 14 bits bajos del bus de direcciones ..., tan pronto Como un Pseudo_NICK puede comenzar a pintar, hay muchas posibilidades de que comience a funcionar de inmediato.

Entonces, Kyp está rehaciendo las señales de control, pero dado que Kyp usa un reloj maestro de 28MHz, con el reloj habilitado es más complicado. Hay muchos relojes de combinatoria y eso no le gusta a la FPGA. La ventaja de las implementaciones de FPGA es que a medida que se alcanzan los hitos, se puede comenzar a realizar pruebas.

Ahora la ROM se carga bien, solo usando un archivo EP128.ROM en la raíz de SD en el que pueden concatenar todas las ROMS que se quieran. Se carga desde SD en la dirección 0.-

También la controladora de disco está funcionando.

Seguramente esta noche, ramp069 habilitará el Git y se desplegará toda la parte ya convertida a EP128. Más o menos estas son las noticias que tenemos, parece que todo va más rápido de lo esperado.

Os dejamos un par de fotos del nuevo esqueleto.... -thumbup

ep128menu001.jpg
ep128menu001.jpg (56.02 KiB) Visto 343 veces

ep128menu002.jpg
ep128menu002.jpg (61.21 KiB) Visto 343 veces

Avatar de Usuario
minter
Mensajes: 2897
Registrado: 22 Jul 2014 18:51
Agradecido : 3132 veces
Agradecimiento recibido: 1313 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor minter » 09 May 2020 23:56

Flipante!!!!

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1746 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor ron » 11 May 2020 20:04

Pseudo Nick ha empezado a pintar, cortesía de rampa069 y Kyp ! ! ! -drinks -thumbup

nick02.jpg
nick02.jpg (123.85 KiB) Visto 289 veces

nick03.jpg
nick03.jpg (81.76 KiB) Visto 289 veces

dancresp
Mensajes: 5634
Registrado: 13 Nov 2010 02:08
Agradecido : 314 veces
Agradecimiento recibido: 446 veces

Re: Intento de implementación de Enteprise 128 en FPGA

Mensajepor dancresp » 12 May 2020 00:29

Olé, olé, otro core !!!

Al final tendremos toda nuestra coleccion + software en una cajita !!! -drinks
Buscando la IP de la W.O.P.R. he encontrado mi índice


Volver a “MiST / MiSTica / SiDi”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado