¿Flash?¿BIOS?¿Cores?¿Firmware?

Discursiones en general sobre el proyecto que no tienen cabida en otro foro / General discussion for uncateorized topics about the ZX-Uno project
Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por Uto » 14 Sep 2016, 17:53

Hola,

Se me quedó pendiente del manual entender como arranca un ZX-Uno y que es lo que hace y donde va leyendo en cada caso. Además tengo cierta confusión con las nomenclaturas, y no se me han quitado las dudas con el ZX-Uno real (quizá se han diluido un poco, pero aclararse del todo no) :-)

Visualmente, cuando arranca el ZX-Uno se ejecuta la BIOS, pero a la vez parece que la BIOS tiene algo que ver con el CORE de Spectrum ¿o no?
¿La BIOS es lo mismo que cuando decís "el firmware"?

Luego está la flash, donde se almacenan probablemente las ROMS y los CORES ¿o no? Es que en el menú de la BIOS de upgrade hay una opción de Upgrade Flash, que si no recuerdo mal es la que usamos para las ROMS, pero luego está la opción de ugrade cores. ¿Es que los cores no están en la flash? ¿Van directamente a la FPGA?

¿Donde guarda la BIOS los valores del setup? ¿En la flash?

¿Y la ROM de ESXDOS donde va? ¿En la flash también?

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

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por mcleod_ideafix » 14 Sep 2016, 18:51

Uto escribió:Visualmente, cuando arranca el ZX-Uno se ejecuta la BIOS, pero a la vez parece que la BIOS tiene algo que ver con el CORE de Spectrum ¿o no?
Cuando le das corriente al ZX-UNO, la FPGA carga el "core principal", que siempre es el de Spectrum. Este core se usa como Spectrum, pero también como lanzadera para arrancar otros cores (cores secundarios).

Al arrancar el core principal, o sea, el Spectrum, lo hace como todos los Spectrums, a partir de la dirección 0000h de la ROM.

En el arranque (o tras un reset maestro), la ROM que ve el Z80 es una ROM de unos 8KB que contiene, entre otras cosas, código para cargar desde una posición concreta de la Flash los 16KB que conforman la ROM BIOS. Esta BIOS se carga en la RAM externa (la SRAM) y acto seguido, se configura para que parte de esa SRAM se vea como ROM. Después de eso, se salta al inicio de esa nueva ROM. Esto tarda muy poco y lo único que se nota (que muchos de vosotros no llegais a notarlo porque las teles LCD tardan unos segundos en dar imagen) es que la imagen inicial del core desaparece y en su lugar aparece el banner de ZX-UNO con la info de la BIOS.

Esa BIOS es desde la cual puedes lanzar otros cores. Lanzar un core significa enviar a un registro especial ( ICAP ) de la FPGA la dirección de inicio en la flash del nuevo core, y darle la orden de que se reconfigure con ese nuevo core. Esto se hace con dos de los registros disponibles en el esquema de puertos de E/S del Spectrum: COREADDR y COREBOOT (ver wiki técnica)
Registros del ZX-UNO: http://www.zxuno.com/wiki/index.php/ZX_ ... _de_ZX-Uno

Cuando desde la BIOS se arranca ya lo que es el Spectrum (con ESXDOS al principio, quizás) lo que se ha hecho antes es en la BIOS leer desde la Flash los contenidos del firmware ESXDOS y la ROM elegidas, cargarlas en determinadas posiciones de la SRAM (ver wiki técnica para más detalles de cómo se organiza el mapa de memoria en la SRAM), y por último, reconfigurar esa parte de la SRAM como ROM de usuario y ROM de ESXDOS. Una vez hecho esto, se salta a la posición 0000h de la nueva ROM, arrancando así normalmente.
Mapa de memoria de la SRAM en la wiki técnica: http://www.zxuno.com/wiki/index.php/ZX_ ... de_la_SRAM
Uto escribió:¿La BIOS es lo mismo que cuando decís "el firmware"?
Sí.
Uto escribió:Luego está la flash, donde se almacenan probablemente las ROMS y los CORES ¿o no? Es que en el menú de la BIOS de upgrade hay una opción de Upgrade Flash, que si no recuerdo mal es la que usamos para las ROMS, pero luego está la opción de ugrade cores. ¿Es que los cores no están en la flash? ¿Van directamente a la FPGA?
¿Donde guarda la BIOS los valores del setup? ¿En la flash?
¿Y la ROM de ESXDOS donde va? ¿En la flash también?
En la flash se guardan:
- Los cores (el core de Spectrum integra esa ROM inicial de 8KB)
- La BIOS con los mapas de teclado
- Los settings de la BIOS que guarda el usuario
- El firmware de ESXDOS (lo que en el DivMMC iría en la Flash EPROM)
- Las ROMs
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por Uto » 14 Sep 2016, 19:37

Vaya... o sea que antes de la BIOS todavía hay otra ROM, que cosas :-)

Ahora creo que ya lo entiendo todo, pero ese post es para enmarcar.

Duda: ¿Si tuvieramos muchos cores pequeños, por poner uno ejemplo los de las recreativas (aunque no se si son pequeños la verdad), podrían en teoría juntarse todos en un solo CORE y meterlos en un SLOT, y luego con COREADDR y COREBOOT apuntar a esa posición "a medio slot" y así forzar a la FPGA a reconfigurarse con un mini core (aunque también pillara los mini-cores de detrás e incluso un trozo del siguiente)?

Desde la BIOS no se podría, ¿pero directamente con OUTs sí?

Quizá rellenar la FPGA con un core que contenga un trozo de otro core no sea buena idea :-?

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por Uto » 14 Sep 2016, 19:53

Imagino que la Boot ROM de 8k además de cargar la BIOS y antes de hacerlo le dice a la FPGA que se configure con el core de Spectrum ¿no? ¿O eso lo hace solo por estar el primero en la flash?

¿La Boot ROM se graba entonces en la Flash junto con el core de Spectrum (al hacer upgrade del CORE 1) pero la BIOS no, esa se almacena separado, al hacer upgrade de "firmware" desde la propia BIOS?

¿Es por eso que al hacer upgrade del core de Spectrum hay tanto peligro? ¿Porque estamos tocando la Boot ROM?

Y al hacer upgrade de firmware también hay peligro ¿no? Porque estamos tocando la BIOS y si no cargan bien la BIOS, bien la Boot ROM, estamos brickeados. ¿Correcto?

¿La BIOS se come ya esos 16k?

Perdón por adelantado por ser tan pesado :roll:

Avatar de Usuario
jcgamestoy
Mensajes: 12
Registrado: 20 Mar 2016, 20:21

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por jcgamestoy » 14 Sep 2016, 20:00

mcleod_ideafix escribió:
Uto escribió:Visualmente, cuando arranca el ZX-Uno se ejecuta la BIOS, pero a la vez parece que la BIOS tiene algo que ver con el CORE de Spectrum ¿o no?
Cuando le das corriente al ZX-UNO, la FPGA carga el "core principal", que siempre es el de Spectrum. Este core se usa como Spectrum, pero también como lanzadera para arrancar otros cores (cores secundarios).

Al arrancar el core principal, o sea, el Spectrum, lo hace como todos los Spectrums, a partir de la dirección 0000h de la ROM.

En el arranque (o tras un reset maestro), la ROM que ve el Z80 es una ROM de unos 8KB que contiene, entre otras cosas, código para cargar desde una posición concreta de la Flash los 16KB que conforman la ROM BIOS. Esta BIOS se carga en la RAM externa (la SRAM) y acto seguido, se configura para que parte de esa SRAM se vea como ROM. Después de eso, se salta al inicio de esa nueva ROM. Esto tarda muy poco y lo único que se nota (que muchos de vosotros no llegais a notarlo porque las teles LCD tardan unos segundos en dar imagen) es que la imagen inicial del core desaparece y en su lugar aparece el banner de ZX-UNO con la info de la BIOS.

Esa BIOS es desde la cual puedes lanzar otros cores. Lanzar un core significa enviar a un registro especial ( ICAP ) de la FPGA la dirección de inicio en la flash del nuevo core, y darle la orden de que se reconfigure con ese nuevo core. Esto se hace con dos de los registros disponibles en el esquema de puertos de E/S del Spectrum: COREADDR y COREBOOT (ver wiki técnica)
Registros del ZX-UNO: http://www.zxuno.com/wiki/index.php/ZX_ ... _de_ZX-Uno

Cuando desde la BIOS se arranca ya lo que es el Spectrum (con ESXDOS al principio, quizás) lo que se ha hecho antes es en la BIOS leer desde la Flash los contenidos del firmware ESXDOS y la ROM elegidas, cargarlas en determinadas posiciones de la SRAM (ver wiki técnica para más detalles de cómo se organiza el mapa de memoria en la SRAM), y por último, reconfigurar esa parte de la SRAM como ROM de usuario y ROM de ESXDOS. Una vez hecho esto, se salta a la posición 0000h de la nueva ROM, arrancando así normalmente.
Mapa de memoria de la SRAM en la wiki técnica: http://www.zxuno.com/wiki/index.php/ZX_ ... de_la_SRAM
Uto escribió:¿La BIOS es lo mismo que cuando decís "el firmware"?
Sí.
Uto escribió:Luego está la flash, donde se almacenan probablemente las ROMS y los CORES ¿o no? Es que en el menú de la BIOS de upgrade hay una opción de Upgrade Flash, que si no recuerdo mal es la que usamos para las ROMS, pero luego está la opción de ugrade cores. ¿Es que los cores no están en la flash? ¿Van directamente a la FPGA?
¿Donde guarda la BIOS los valores del setup? ¿En la flash?
¿Y la ROM de ESXDOS donde va? ¿En la flash también?
En la flash se guardan:
- Los cores (el core de Spectrum integra esa ROM inicial de 8KB)
- La BIOS con los mapas de teclado
- Los settings de la BIOS que guarda el usuario
- El firmware de ESXDOS (lo que en el DivMMC iría en la Flash EPROM)
- Las ROMs
Grandisima explicación como siempre, a marcadores.

La verdad es que es todo un poco diferente a la Mist a la que estoy acostumbrado pero tiene logica al no tener ZX-Uno un microcontrolador con el que programar la FPGA, asi que asumo que esta solo se podra reprogramar del contenido de la memoria Flash (En otras palabras que no se puede auto-reprogramar leyendo un core de la RAM o la SD).

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

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por mcleod_ideafix » 14 Sep 2016, 20:51

Uto escribió:Duda: ¿Si tuvieramos muchos cores pequeños, por poner uno ejemplo los de las recreativas (aunque no se si son pequeños la verdad)
Todos los cores ocupan lo mismo: da igual que implementen un led que parpadea, o que implementen un Spectrum completo. En el caso del primero, lo que pasará es que la inmensa mayoría de la FPGA estará ociosa, sin hacer nada, sin recibir señales ni ná.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

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

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por mcleod_ideafix » 14 Sep 2016, 20:52

Uto escribió:Duda: ¿Si tuvieramos muchos cores pequeños, por poner uno ejemplo los de las recreativas (aunque no se si son pequeños la verdad), podrían en teoría juntarse todos en un solo CORE y meterlos en un SLOT, y luego con COREADDR y COREBOOT apuntar a esa posición "a medio slot" y así forzar a la FPGA a reconfigurarse con un mini core (aunque también pillara los mini-cores de detrás e incluso un trozo del siguiente)?
No, no puedes hacer eso.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

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

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por mcleod_ideafix » 14 Sep 2016, 20:56

Uto escribió:Imagino que la Boot ROM de 8k además de cargar la BIOS y antes de hacerlo le dice a la FPGA que se configure con el core de Spectrum ¿no? ¿O eso lo hace solo por estar el primero en la flash?
La boot ROM de 8KB es un programa en código máquina del Z80. Para cuando se llega a él para ejecutarlo, la FPGA ya es un Spectrum.
Uto escribió:¿La Boot ROM se graba entonces en la Flash junto con el core de Spectrum (al hacer upgrade del CORE 1) pero la BIOS no, esa se almacena separado, al hacer upgrade de "firmware" desde la propia BIOS?
Correcto. La boot ROM es muy difícil que tenga que cambiar. En cambio, ya estais viendo que cada poco tiempo se va revisando y actualizando la BIOS. La BIOS es mucho más compleja que esa pequeña boot ROM.
Uto escribió:¿Es por eso que al hacer upgrade del core de Spectrum hay tanto peligro? ¿Porque estamos tocando la Boot ROM?
No. El peligro está en que el core principal que la FPGA carga es el de Spectrum. Si ese core se graba mal, la FPGA no podrá cargarlo y se quedará, literalmente, catatónica.
Uto escribió:Y al hacer upgrade de firmware también hay peligro ¿no? Porque estamos tocando la BIOS y si no cargan bien la BIOS, bien la Boot ROM, estamos brickeados. ¿Correcto?
Correcto.
Uto escribió:¿La BIOS se come ya esos 16k?
La BIOS ocupa 16KB. Estos 16KB son aparte de los 8KB de la boot ROM (que desaparece del mapa en cuanto la ROM BIOS se activa y sólo vuelve a aparecer cuando hacemos un master reset)
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: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por Quest » 14 Sep 2016, 21:12

mcleod_ideafix escribió:
Uto escribió:Y al hacer upgrade de firmware también hay peligro ¿no? Porque estamos tocando la BIOS y si no cargan bien la BIOS, bien la Boot ROM, estamos brickeados. ¿Correcto?
Correcto.
sólo un pequeño apunte aquí. Si la BIOS (Firmware) queda corrupto, se graba mal, etc, pero el core de spectrum está intacto, hay modo de desbrickeo, la BOOTROM embebida en el core trae un "modo recovery" que consiste en una pequeña rutina de carga por EAR, que espera recibir el sonido de un TAP de una BIOS. Una vez terminada la carga por audio, salta esa BIOS, y te permite desde ella misma, actualizar la BIOS en flash. Este modo recovery se activa pulsando arriba+fuego en el joystick mientras se enciende el ZX-UNO. Como digo, SOLO ha de usarse en caso de "brick de BIOS".
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Uto
Mensajes: 1394
Registrado: 17 Dic 2015, 16:39

Re: ¿Flash?¿BIOS?¿Cores?¿Firmware?

Mensaje por Uto » 14 Sep 2016, 21:14

mcleod_ideafix escribió:
Uto escribió:Imagino que la Boot ROM de 8k además de cargar la BIOS y antes de hacerlo le dice a la FPGA que se configure con el core de Spectrum ¿no? ¿O eso lo hace solo por estar el primero en la flash?
La boot ROM de 8KB es un programa en código máquina del Z80. Para cuando se llega a él para ejecutarlo, la FPGA ya es un Spectrum.
¿Y qué es lo que hace que la FPGA cargue el core de Spectrum nada más empezar? ¿hay un programa a más bajo nivel aún o simplemente de alguna manera la FPGA "sabe" que tiene que hacerlo?

Por otro lado, y entendiendo que los cores son siempre igual de grandes, en un momento dado si hay equipos a implementar muy sencillos (pongamos que queremos implementar una calculadora y una máquina Pong) es posible que en la FPGA nos cupieran ambos circuitos a la vez. El problema es que si hay dos circuitos, al arrancar el core arrancarían ambos, y si ambos están conectados a los dispositivos de entrada (teclado, joystick) y salida (pantalla, audio) se puede montar un cacao fino. ¿voy bien?

¿No sería posible que en ese "doble-core" las respectivas ROM de cada dispositivo implementado tuvieran unas instrucciones al principio que lean un valor de la flash o de algún otro sitio, y si el valor les dice que deben desactivarse pongan a masa o a lo que haga falta cierta parte de su propia circuiteria que haga que el circuito en cuestión quede desconectado virtualmente de teclado, pantalla, etc.? La máquina desconectada realmente seguiría ejecutandose, pero ni recibiría inputs ni sacaría nada (electricamente hablando) por sus outputs

Esto ya si que es una paja mental de muy poco uso probablemente, pero ¿eso sí se puede? Perdón de nuevo, me he emocionado jajaja :roll:

Responder