utopian escribió:Aunque ahora que lo pienso... Black, cuando cargas y cambias de banco, ¿llegas a tocar el puerto 1FFD? Este puerto sólo es útil en el +2A y +3, y en teoría no debería hacer nada en los otros modelos... Pero vete tú a saber lo que hace el hardware real

No, no llegué a usar el puerto $1FFD en ningún momento. No me hace falta, ya que cuando se pone a cargar, la ROM del editor es desactivada antes de ejecutarse el propio comando LOAD.
Luego durante la carga, al ir 6 bloques de memoria en 1 único bloque de cinta, es lógico que use 6 "cabeceras" internas que indican la dirección de inicio, el número de bytes a cargar y el banco a activar. El código para ello, una vez leído en L el byte de la cinta es:
Código: Seleccionar todo
LD A,L ; Activamos bloque RAM adecuado
PUSH BC
LD BC,$7FFD
OUT (C), A
POP BC
Siendo A valores entre 0 y 6. Tan simple como eso. Como no habilito interrupciones en ningún momento de la carga, no necesito informar al sistema de que el banco ha cambiado, actualizando la variable BANKM ($5B5C). El orden de carga ha sido elegido a propósito, para que el último sea de nuevo el banco 0 del estado original.
De todas formas, en el hipotético caso de que no se cambiara correctamente el banco, como véis en el TZX, es un bloque estándar con FLAG 255 y checksum válido. Yo leo el checksum y lo calculo como la propia ROM. Si ha habido a lo largo de los 68 KB un único bit cambiado, saldrá el mensaje de "LOAD ERROR" abajo con borde en rojo. Pero ello significa problema con la cinta (volúmen, velocidad, etc, etc).
La parte primera de la pantalla de carga ya utiliza las técnicas anteriormente descritas. Si sale la pantalla de carga y luego da error el bloque largo de 68 KB, yo sí que apuntaría a problema de entrada de sonido. Si el juego llega al final del todo y no sale nada, entonces ya podemos buscar otras causas.
Un saludo.