antoniovillena escribió:[*]Carga mediante SDs formateadas en FAT16/FAT32 con LFN. Esto sería lo más útil, pero lo más complicado a la vez. Sería un método alternativo a la carga en cinta para subir ROMs y Upgradear.[/list]
Como ves, lo más importante ya está implementado. También me tengo que poner de acuerdo con McLeod para implementar un bloqueo de paginación MASTER (un modo de paginación especial que tiene el ZX-Uno) y del acceso a la SPI Flash. De esta forma aislamos la BIOS del resto de software, no siendo posible por ejemplo que un programa pueda corromper el contenido de la Flash (y tener que usar el cable USB para arreglarlo).
La razón por la que originalmente he dejado activado el acceso a la Flash desde el modo "usuario" es porque pensé que los updates de BIOS se harían usando el soporte de almacenamiento masivo de +3e o de DIVMMC. Es decir, que no se incluiría ningún sistema de ficheros en la BIOS precisamente por existir ya soporte de FAT/FAT32/CPM en los firmwares "normales", y que por tanto los programas de update serían programas que correrían sobre estos S.O.
Por supuesto, es mucha mejor opción la de desactivar el uso de la Flash desde algo que no sea la BIOS. Una forma muy cómoda de hacerlo es obligar a que el update esté en una tarjeta SD recién formateada, y como único fichero en ella. Así, el firmware sólo tiene que buscar el primer sector donde se encuentre el comienzo del update (quizás con alguna cadena mágica para identificarla rápidamente) y a partir de ahí, estarán todos los bloques seguidos, por no haber fragmentación.
Si te parece bien, lo que voy a implementar en el test13 es:
- Posibilidad para que la ROM interna pueda ser reescrita desde el modo de configuración. Así, la ROM interna del core lo que tendría es un pequeño stub para cargar desde una posición fija de la flash, la BIOS. Esa BIOS se copiará en lugar del stub y así, mientras el equipo tenga corriente, las siguientes veces que se resetee, lo hará a la BIOS.
- Bloqueo de los puertos de acceso a la flash desde los modos de usuario.
antoniovillena escribió:Yo nunca me meto en la BIOS tras el arranque, sino que fuerzo un Master Reset con las teclas Ctrl+Alt+Backspace (si usas Ctrl y Alt derecho puedes hacer el combo con una sola mano) e inmediatamente pulso la tecla en cuestión (Esc ó F2). Lo ideal es dejar un retardo largo en el arranque y otro corto tras un Master Reset, pero no sé cómo distinguir una cosa de otra, puede que McLeod tenga alguna idea
Con el cambio que voy a hacer, la diferencia entre un "power cycle" y un "master reset" es que el primero arranca el stub que a su vez carga y arranca la BIOS. El master reset arranca directamente la BIOS.
Pongamos que la ROM "stub" es de 16K y en los cuatro últimos bytes tiene la secuencia 01020304 grabada. La BIOS de Antonio es cargada, pero respetando estos cuatro últimos valores (o se ponen en otro sitio si ahí hay un juego de caracteres o algo). Al arrancar la BIOS se mira si la secuencia mágica existe. Si está, es que se ha arrancado desde un "power cycle", se hace la pausa, y se borra la secuencia (el área de ROM es escribible). Si no está, es que se ha arrancado desde un "master reset".
Otra forma, incluso más sencilla: el "master reset" es Ctrl-Alt-BkSpace. Las tecla BkSpace en el Spectrum es CAPS + 0. Por tanto, si en el arranque de la BIOS se detecta que las teclas CAPS SHIFT y 0 están pulsadas, muy probablemente sea porque el usuario ha hecho un "máster reset".
-- Actualizado 21 Abr 2014, 03:02 --
antoniovillena escribió:Voy a hacer una pausa en el desarrollo de la BIOS, a no ser que aparezcan bugs.
Pues no sé qué estaré haciendo mal, pero el PROM.MCS que hay en el directorio "firmware" no me acaba de funcionar bien. Arranco la BIOS, pulso F2 (en lugar de poner <Edit> y <Break> puedes poner <F2> y <Esc> digo yo, que son los nombres verdaderos de las teclas) y accedo a lo que es la configuración de la BIOS. Elijo arrancar la ROM del Spectrum 48K y activar DIVMMC. Grabo los cambios, y aquello mete algo de basurilla en pantalla y se acabó. Sólo puedo volver a hacer Ctrl-Alt-BkSpace y volver a la BIOS. La ROM que sí me ha arrancado es la del Deathchase 3D.