Utilidad para actualizar SPI Flash vía tarjeta SD

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por Quest » 10 Abr 2016, 15:14

chernandezba escribió:Claro, pero hay que activar dicha protección ;)
Lo que quiero decir es que en emulador se comporta igual que en máquina real, o al menos eso debería
Que me corrijan mcleod o Antonio si me equivoco, pero la escritura a flash no es posible mientras El bit BOOTM esté a 0 en el registro MASTERCONF (0x00). Siendo esto así, y teniendo en cuenta que la Bios tras cargar la rom pone BOOTM a 0 y LOCK a 1, pego un extracto del wiki sobre el registro MASTERCONF:
* BOOTM: a 1 indica que ZX-Uno está en modo boot (modo configuración). El modo boot sólo tiene sentido mientras se está ejecutando el firmware de arranque, donde se permite configurar algunos aspectos de ZX-Uno antes de pasar al modo ejecución. MASTERCONF siempre puede ser leído, tanto en modo boot como en modo ejecución. Se pone a 0 manualmente por programa, y en ese momento, ZX-Uno entra en modo ejecución.
..
*LOCK: Cuando vale 1, impide que se puedan hacer más cambios a ciertos bits del registro MASTERCONF. Este bit se pone a 0 sólo mediante un reset maestro (Ctrl-Alt-BkSpace) o al apagar y encender el clon
Entre los bits que LOCK impide cambiar, está BOOTM.

Lo que quiero decir es que si tal como dice Antonio en el primer post, le funciona la escritura a la spi, significa que ZesaruX no se comporta como el ZX-UNO real, o eso deduzco yo con estas pistas.

Insisto en que si esto no era así, que me corrijan, pero recuerdo una larga conversación hace tiempo en ZDP sobre este tema, y recuerdo que era así.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

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

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por antoniovillena » 10 Abr 2016, 15:50

Uto escribió:Hola Antonio,

He estado mirando el código del comando .upgrade, por pura curiosidad, dado que es la primera vez que veo el fuente de un comando esxDOS. He entendido como va pero me surgen algunas dudas, y perdón por secuestrar el hilo un poco:

- ¿Lo de hacer los "print" poniendo un DB detrás del call, luego el pop HL y tal ¿es por ahorra de memoria?¿de ciclos? Hay un espacio máximo para un comando ESXDOS?
No. No es por ahorrar memoria, simplemente me resultó más fácil así. No tengo ni idea del espacio máximo. Sé que empieza en $2000, así que deduzco que un comando no puede tener más de 8192 bytes, pero puede estar más limitado aún.
Uto escribió: - Las llamadas a RST 8 a ESXDOS. ¿De donde sacas la documentación? Yo hace tiempo que mandé correo al autor pero nunca recibí respuesta, y ahora veo que la cosa es bastante sencilla, pero no hay docs por ningún lado, y por tanto andar probando al azar llamadas a ESXDOS "a ver que pasa" es un infierno. Cuando pedi los docs quería hacer un comando .cat, y creo que ahora viendo los fuentes del tuyo podría hacerlo, porque ya veo por qué.
No hay documentación pública, es un proyecto cerrado. Sólo unos pocos tienen acceso. Por ejemplo el esxdos.inc yo no lo tengo, se lo tienes que pedir directamente al autor, y si te lo pasa es con la condición de que no lo hagas público. Utilicé ingeniería inversa partiendo del binario y del código fuente del playzxm.
Uto escribió: - ¿Para que el DB $3e de la rutina PRINT? Escribe un simbolo > ¿hay alguna razón que no sea estética?
Es una instrucción (ld a,x) para evitar el siguiente rst $10. Lo lógico es utilizar un jr, pero ocupa 2 bytes.

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

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por antoniovillena » 10 Abr 2016, 15:52

Respecto a lo del bit LOCK, es como dice Quest. Tengo que encontrar una forma de saltarme la protección que no sea muy insegura.

Avatar de Usuario
carmeloco
Mensajes: 749
Registrado: 25 Dic 2015, 12:02

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por carmeloco » 10 Abr 2016, 16:37

antoniovillena escribió:Respecto a lo del bit LOCK, es como dice Quest. Tengo que encontrar una forma de saltarme la protección que no sea muy insegura.
¿Ya estamos auto-hackeando el :zxuno: ? :lol:

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

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por Uto » 10 Abr 2016, 18:10

antoniovillena escribió: Es una instrucción (ld a,x) para evitar el siguiente rst $10. Lo lógico es utilizar un jr, pero ocupa 2 bytes.
Había mirado mal el opcode, con el opcode correcto se entiende mejor, aunque mira que programas raro (y a la par eficiente) jeje

Una última pregunta: ¿para que ensamblador son esos fuentes? PASMO me parece que no es ¿cual usas? (por no complicarme la vida)

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

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por antoniovillena » 10 Abr 2016, 18:19

Uto escribió: Había mirado mal el opcode, con el opcode correcto se entiende mejor, aunque mira que programas raro (y a la par eficiente) jeje

Una última pregunta: ¿para que ensamblador son esos fuentes? PASMO me parece que no es ¿cual usas? (por no complicarme la vida)
SjAsmPlus

Avatar de Usuario
chernandezba
Mensajes: 832
Registrado: 02 Oct 2015, 23:35

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por chernandezba » 10 Abr 2016, 22:11

En principio el emulador gestiona bien esos bits que se bloquean, esta es la parte del código que lo controla:

if (last_port_FC3B==0 && (zxuno_ports[0]&128)==128 ) {
debug_printf (VERBOSE_DEBUG,"MASTERCONF lock bit set to 1");

//Solo se pueden modificar bits 6,5,4,3
//Hacemos mascara del valor nuevo quitando bits 7,0,1,2 (que son los que no se tocan)
value=value&(255-128-1-2-4);

z80_byte valor_puerto=zxuno_ports[0];

//Valor actual de masterconf conservamos bits 7,0,1,2
valor_puerto = valor_puerto & (128+1+2+4);

//Y or con lo que teniamos
valor_puerto |= value;

value = valor_puerto;
}


O hay aquí un error que no veo o Antonio está haciendo ese update de otra manera y quizá saltándose algún otro posible bug del emulador... Pero como digo, esta parte de código asegura el bloqueo sobre los bits 7,0,1,2

Saludos
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

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

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por antoniovillena » 10 Abr 2016, 22:27

Hola César

Lo que pasa es que ese bit 7 (más significativo) de MASTERCONF (el llamado LOCK) también bloquea todos los accesos a SPI Flash, cosa que tu emulador no hace.

Ya he parcheado el firmware para que no active LOCK y lo he subido a la cuenta de Google Drive. Si os bajáis el siguiente multiboot.mcs

https://drive.google.com/a/antonioville ... FoYzg/view

Y lo grabáis con el cable JTAG, ya podéis actualizar mediante SD en futuras ocasiones. Lo he probado en hardware real y funciona. También he subido tanto binario como imagen a la carpeta que va a la SD

https://drive.google.com/a/antonioville ... UFvOEVOMEE

Avatar de Usuario
chernandezba
Mensajes: 832
Registrado: 02 Oct 2015, 23:35

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por chernandezba » 10 Abr 2016, 22:31

Hola Antonio

Pues o yo no lo veo o aquí no lo tenéis documentado eso

http://www.zxuno.com/wiki/index.php/ZX_Spectrum


Saludos
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
Mensajes: 832
Registrado: 02 Oct 2015, 23:35

Re: Utilidad para actualizar SPI Flash vía tarjeta SD

Mensaje por chernandezba » 10 Abr 2016, 22:35

Concretamente:

LOCK: Cuando vale 1, impide que se puedan hacer más cambios a ciertos bits del registro MASTERCONF. Este bit se pone a 0 sólo mediante un reset maestro (Ctrl-Alt-BkSpace) o al apagar y encender el clon.


Ahí no dice nada de la spi..
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Responder