Identificar cargas sin cabecera
Moderador: Sir Cilve Sinclair
-
- Nonamed
- Mensajes: 1067
- Registrado: Lun May 07, 2007 10:06 pm
Identificar cargas sin cabecera
Viendo que hay gente por aquí que controla más que yo de lo que son las rutinas de carga y la carga en general del spectrum, a ver si me inspirais o dais ideas para mejorar esto:
En viaje al centro, hay un menú "lanzador" donde se redefinen las teclas, seleccionas el tipo de control, etc, y la fase que quieres cargar (4 o 5), como en el original vamos. Una vez le das a empezar, carga un bloque sin cabecera del tamaño que haga falta.
El problema es que como hasta ahora sólo está terminada la 4 no tengo que identificarla, cargo el bloque sin cabecera y listo. Pero cuando tenga la 5 lista, tengo que poder diferenciar las fases 4 y 5. No me apetece meter cabeceras, que forma que la idea que tengo en mente es poner dos bloques sin cabecera que contenga un byte con el número de fase justo antes.
Se me había ocurrido usar el "crc" (entre comillas) de las grabaciones, el parámetro que pasas antes de grabar un bloque a la rom, pero no he visto forma de alterarlo o generarlo desde las utilidades que tengo (van con el valor de A por defecto).
¿Se os ocurre alguna idea mejor (seguro que sí) para diferenciar los bloques sin tener que hacer esto o meter cabeceras?
En viaje al centro, hay un menú "lanzador" donde se redefinen las teclas, seleccionas el tipo de control, etc, y la fase que quieres cargar (4 o 5), como en el original vamos. Una vez le das a empezar, carga un bloque sin cabecera del tamaño que haga falta.
El problema es que como hasta ahora sólo está terminada la 4 no tengo que identificarla, cargo el bloque sin cabecera y listo. Pero cuando tenga la 5 lista, tengo que poder diferenciar las fases 4 y 5. No me apetece meter cabeceras, que forma que la idea que tengo en mente es poner dos bloques sin cabecera que contenga un byte con el número de fase justo antes.
Se me había ocurrido usar el "crc" (entre comillas) de las grabaciones, el parámetro que pasas antes de grabar un bloque a la rom, pero no he visto forma de alterarlo o generarlo desde las utilidades que tengo (van con el valor de A por defecto).
¿Se os ocurre alguna idea mejor (seguro que sí) para diferenciar los bloques sin tener que hacer esto o meter cabeceras?
Un saludo,
Gandulf
Gandulf
- na_th_an
- Nonamed
- Mensajes: 1889
- Registrado: Lun May 07, 2007 10:16 am
- Ubicación: Andalucía
La forma "bestia" que yo usaría es hacerme una "cabecera custom" que en realidad fuera un bloque sin cabecera que contuviese datos identificativos del archivo que sigue. Se puede trampear, pero serviría para que pusiera "cargando fase 4" o "fase 5", o dar un mensaje de error si se intenta cargar la fase incorrecta.
-
- Nonamed
- Mensajes: 1067
- Registrado: Lun May 07, 2007 10:06 pm
@Na_th_an
que tengo en mente es poner dos bloques sin cabecera que contenga un byte con el número de fase justo antes
La forma "bestia" que yo usaría es hacerme una "cabecera custom" que en realidad fuera un bloque sin cabecera
Ya, como os decía esa era la idea que tenía en mente (veo que hemos pensado lo mismo) pero quería saber si podría haber otra forma, me vale con que si el bloque no es el correcto dé un error de carga y espere el siguiente (nada más intentar cargarlo, sin tener que esperar al final a que de el error )
que tengo en mente es poner dos bloques sin cabecera que contenga un byte con el número de fase justo antes
La forma "bestia" que yo usaría es hacerme una "cabecera custom" que en realidad fuera un bloque sin cabecera
Ya, como os decía esa era la idea que tenía en mente (veo que hemos pensado lo mismo) pero quería saber si podría haber otra forma, me vale con que si el bloque no es el correcto dé un error de carga y espere el siguiente (nada más intentar cargarlo, sin tener que esperar al final a que de el error )
Un saludo,
Gandulf
Gandulf
- na_th_an
- Nonamed
- Mensajes: 1889
- Registrado: Lun May 07, 2007 10:16 am
- Ubicación: Andalucía
Si vas a usar tu propia rutina de carga, prepárala para que lea unos cuantos bytes al principio y los compare con algo para saber si es 4 o 5, y luego que siga cargando normalmente.
O sea, una rutina de carga que dado el bloque entrante trate los primeros bytes de una forma (para identificar). Si coinciden, el resto de los bytes se carga normalmente y si no, pues se aborta la carga con un mensaje o sigue esperando al siguiente bloque sin hacer nada.
O sea, una rutina de carga que dado el bloque entrante trate los primeros bytes de una forma (para identificar). Si coinciden, el resto de los bytes se carga normalmente y si no, pues se aborta la carga con un mensaje o sigue esperando al siguiente bloque sin hacer nada.
- miguel
- Manic Miner
- Mensajes: 293
- Registrado: Mar Abr 17, 2007 12:27 am
- Ubicación: Parla - Madrid
- Contactar:
Pues yo simplemente cambiaría el flag "A" para ello. Si estás usando la rutina de carga de la ROM, es lo más sencillo del mundo, simplemente le asignas a "A" el valor que quieras, tanto al salvar el bloque como al cargarlo.
Con esto si el flag no coincide con el indicado la rutina de LOAD simplemente no carga el bloque.
Un cargador tipo para esto sería:
Para salvar este mismo bloque podrías usar algo como:
Espero que te sirva.
Con esto si el flag no coincide con el indicado la rutina de LOAD simplemente no carga el bloque.
Un cargador tipo para esto sería:
Código: Seleccionar todo
scf
ld a, 5 (por ejemplo puedes poner el número de fase, lo normal en la rutina es 0 para cabeceras y 255 para bloques de datos)
ld ix, comienzo
ld de, longitud
call 1366
Para salvar este mismo bloque podrías usar algo como:
Código: Seleccionar todo
ld a, 5 (por ejemplo puedes poner el número de fase)
ld ix, comienzo
ld de, longitud
call 1218
Espero que te sirva.
-
- Nonamed
- Mensajes: 1067
- Registrado: Lun May 07, 2007 10:06 pm
@MIGUEL
Eso es a lo que me refería con CRC, al parámetro de flag A. El tema es que con las utilidades que tengo (ZXBlockEditor, etc) no soy capaz de cambiar este flag a un TAP previamente grabadop con el flag por defecto que me genera el ensamblador.
Esa fue la primera idea que tuve, pero como no vi opción de cambiar ese flag, desistí. Por eso os preguntaba. ¿Alguna idea de cómo modificarlo?? Bueno, la verdad es que podría hacer un programilla que cargara el bloque con el flag por defecto y luego lo grabara con el flag que quisiera yo, pero a lo mejor hay utilidades de PC que lo permitan hacer.
Eso es a lo que me refería con CRC, al parámetro de flag A. El tema es que con las utilidades que tengo (ZXBlockEditor, etc) no soy capaz de cambiar este flag a un TAP previamente grabadop con el flag por defecto que me genera el ensamblador.
Esa fue la primera idea que tuve, pero como no vi opción de cambiar ese flag, desistí. Por eso os preguntaba. ¿Alguna idea de cómo modificarlo?? Bueno, la verdad es que podría hacer un programilla que cargara el bloque con el flag por defecto y luego lo grabara con el flag que quisiera yo, pero a lo mejor hay utilidades de PC que lo permitan hacer.
Un saludo,
Gandulf
Gandulf
- miguel
- Manic Miner
- Mensajes: 293
- Registrado: Mar Abr 17, 2007 12:27 am
- Ubicación: Parla - Madrid
- Contactar:
Gandulf escribió:@MIGUEL
Eso es a lo que me refería con CRC, al parámetro de flag A. El tema es que con las utilidades que tengo (ZXBlockEditor, etc) no soy capaz de cambiar este flag a un TAP previamente grabadop con el flag por defecto que me genera el ensamblador.
Esa fue la primera idea que tuve, pero como no vi opción de cambiar ese flag, desistí. Por eso os preguntaba. ¿Alguna idea de cómo modificarlo?? Bueno, la verdad es que podría hacer un programilla que cargara el bloque con el flag por defecto y luego lo grabara con el flag que quisiera yo, pero a lo mejor hay utilidades de PC que lo permitan hacer.
Creo que no entiendo muy bien lo que quieres decir, pero el CRC y el FLAG son dos cosas diferentes. Si no recuerdo mal como funcionaba la rutina de carga el FLAG va al principio y funciona como te he dicho, y el CRC es el byte del final, que sirve para comprobar si la carga ha sido correcta.
El FLAG creo que se puede cambiar con una utilidad como TAPER, pero no estoy muy seguro y no lo tengo aquí a mano para probarlo.
-
- Nonamed
- Mensajes: 1067
- Registrado: Lun May 07, 2007 10:06 pm
Me refería al flag A por eso dije entre comillas y valor A por defecto, no me salía el nombre correcto . He probado con Tapper también pero no he visto la opción (tampoco conozco mucho el programa). Espero que haya una utilidad de PC que me solucione la papeleta (sino a lo mejor me la hago yo) porque si tengo que hacerlo desde el emulador de spectrum cada vez que ensamblo será un auténtico coñazo
Muchas gracias a todos por la información, si finalmente me tengo que hacer la utilidad en PC la colgaré por aquí por si a alguien más le hace falta.
EDITADO: El "Tapir" deja modificar los valores del raw de cinta, incluyendo checksum y flag A.
EDITADO II: Al grabarlo lo deja inservible. Al final lo he solucionado con un editor hexadecimal de ficheros, con la documentación del formato TAP. Listo, ya no me hacen falta cabeceras
Muchas gracias a todos por la información, si finalmente me tengo que hacer la utilidad en PC la colgaré por aquí por si a alguien más le hace falta.
EDITADO: El "Tapir" deja modificar los valores del raw de cinta, incluyendo checksum y flag A.
EDITADO II: Al grabarlo lo deja inservible. Al final lo he solucionado con un editor hexadecimal de ficheros, con la documentación del formato TAP. Listo, ya no me hacen falta cabeceras
Un saludo,
Gandulf
Gandulf
-
- Nonamed
- Mensajes: 1067
- Registrado: Lun May 07, 2007 10:06 pm
He probado en la beta real y funciona perfecto. Es una pena que las utilidades como ZXBlockEditor (todas las ZX Tools son super útiles y estan supercurradas, sobre todo el ZXPaintbrush y el ZXBlockEditor) te oculten los bytes de Flag y Checksum al editar un bloque. Está bien que lo haga por defecto como seguridad, pero debería dar opción a mostarlos. Por ejemplo el Tapir lo hace así, pero tras cambiarlo, le di al "save" y corrompió el TAP dejándolo inservible
Nada, el imprescindible editor hexadecimal de toda la vida y listo.
Nada, el imprescindible editor hexadecimal de toda la vida y listo.
Un saludo,
Gandulf
Gandulf
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 20 invitados