Abrir ficheros binarios en +2E
Moderador: Sir Cilve Sinclair
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Abrir ficheros binarios en +2E
Hola a todos, este es mi primer mensaje.
Hace un tiempo me hice con un +2A supuestamente averiado muy económico al que sólo le falla el modulador de RF, por vídeo compuesto y por RGB funciona perfectamente.
Le monté un interface IDE simple de 8 bits (un poco chapucero) interno y le actualicé las ROMS. Primero lo conecté a un HDD de 20 Gigas y después con un adaptador a una CF de 4 Gigas, en ambos casos funciona perfectamente.
LLegados a este punto lo que quería ahora es grabar archivos .Z80 en la CF o HDD desde el PC, pero no he conseguido la forma de hacerlo, ni con el emulador SPIN ni con esa herramienta que hay por ahí que se supone que sirve para eso.
Entonces pensé en interconectar el PC y el Spectrum por el puerto Serie. Después de muchos líos conseguí enviar y recibir datos entre el +2a y el PC, a una velocidad algo lenta pero factible.
Lo primero que envié (a parte de pruebas de texto) fueron unos archivos .SCR en que con sendos programas en BASIC (QBASIC desde el PC y 128 BASIC desde el Spectrum) mediante bucles FOR enviaba byte a byte todo el contenido del archivo SRC. En el Spectrum cada byte leído era directamente "pokeado" a la memoria de vídeo, de forma que se iba generando la imagen en pantalla. Una vez llena y coloreada la pantalla hacia automáticamente un SAVE "nombre" SCREEN$ al "disco duro" del Spectrum. Estas pruebas me ayudaron a determinar a que velocidad máxima podía enviar datos sin que se corrompiesen, ajustando un delay que había dentro del bucle del PC.
Una vez conseguí guardar unas cuantas fotos perfectamente en el Spectrum, intenté hacer lo mismo pero con archivos .Z80. Sólo que en lugar de volcar en la memoria de vídeo, lo hice en la RAM por encima de la RAMTOP ajustada al máximo para tener el máximo espacio, y grabados a disco con SAVE "nombre.Z80" CODE direccion,bytes , pero esto limita mucho el tamaño máximo que puede tener un archivo Z80, que normalmente son más grandes y no caben. Las pruebas con archivos Z80 pequeños (juegos para spectrum 16K) funcionaron perfectamente al ejecutarlos con el comando SPECTRUM del +2e.
Entonces se me ocurrió que en lugar de escribir en la RAM para luego guardar en disco que quizás se podría guardar en disco directamente abriendo un archivo binario en modo escritura. Examiné los comandos del +3e (http://www.worldofspectrum.org/zxplus3e ... mands.html) y no parecía complicado, pero los datos se corrompen, los ficheros creados tenían justo el doble de bytes que el original. Me di cuenta que cuando yo escribía un byte, en realidad se escribían 2, entonces forcé a cambiar el puntero de escritura al fichero para que el siguiente byte a escribir lo hiciera encima de ese segundo byte que no se de donde salía, con esto conseguí al menos que el tamaño del archivo generado fuera igual que el original pero aún así al ejecutarlo con el comando SPECTRUM no funcionaba, seguramente los datos estaban corruptos.
No se si es un problema de mi programa (algo muy simple) o del +2E que no funciona correctamente.
La verdad es que llegado a este punto y no poder llenar el "disco duro" de cosas hacen del +2E algo bastante inútil.
Perdón por la parrafada.
Hace un tiempo me hice con un +2A supuestamente averiado muy económico al que sólo le falla el modulador de RF, por vídeo compuesto y por RGB funciona perfectamente.
Le monté un interface IDE simple de 8 bits (un poco chapucero) interno y le actualicé las ROMS. Primero lo conecté a un HDD de 20 Gigas y después con un adaptador a una CF de 4 Gigas, en ambos casos funciona perfectamente.
LLegados a este punto lo que quería ahora es grabar archivos .Z80 en la CF o HDD desde el PC, pero no he conseguido la forma de hacerlo, ni con el emulador SPIN ni con esa herramienta que hay por ahí que se supone que sirve para eso.
Entonces pensé en interconectar el PC y el Spectrum por el puerto Serie. Después de muchos líos conseguí enviar y recibir datos entre el +2a y el PC, a una velocidad algo lenta pero factible.
Lo primero que envié (a parte de pruebas de texto) fueron unos archivos .SCR en que con sendos programas en BASIC (QBASIC desde el PC y 128 BASIC desde el Spectrum) mediante bucles FOR enviaba byte a byte todo el contenido del archivo SRC. En el Spectrum cada byte leído era directamente "pokeado" a la memoria de vídeo, de forma que se iba generando la imagen en pantalla. Una vez llena y coloreada la pantalla hacia automáticamente un SAVE "nombre" SCREEN$ al "disco duro" del Spectrum. Estas pruebas me ayudaron a determinar a que velocidad máxima podía enviar datos sin que se corrompiesen, ajustando un delay que había dentro del bucle del PC.
Una vez conseguí guardar unas cuantas fotos perfectamente en el Spectrum, intenté hacer lo mismo pero con archivos .Z80. Sólo que en lugar de volcar en la memoria de vídeo, lo hice en la RAM por encima de la RAMTOP ajustada al máximo para tener el máximo espacio, y grabados a disco con SAVE "nombre.Z80" CODE direccion,bytes , pero esto limita mucho el tamaño máximo que puede tener un archivo Z80, que normalmente son más grandes y no caben. Las pruebas con archivos Z80 pequeños (juegos para spectrum 16K) funcionaron perfectamente al ejecutarlos con el comando SPECTRUM del +2e.
Entonces se me ocurrió que en lugar de escribir en la RAM para luego guardar en disco que quizás se podría guardar en disco directamente abriendo un archivo binario en modo escritura. Examiné los comandos del +3e (http://www.worldofspectrum.org/zxplus3e ... mands.html) y no parecía complicado, pero los datos se corrompen, los ficheros creados tenían justo el doble de bytes que el original. Me di cuenta que cuando yo escribía un byte, en realidad se escribían 2, entonces forcé a cambiar el puntero de escritura al fichero para que el siguiente byte a escribir lo hiciera encima de ese segundo byte que no se de donde salía, con esto conseguí al menos que el tamaño del archivo generado fuera igual que el original pero aún así al ejecutarlo con el comando SPECTRUM no funcionaba, seguramente los datos estaban corruptos.
No se si es un problema de mi programa (algo muy simple) o del +2E que no funciona correctamente.
La verdad es que llegado a este punto y no poder llenar el "disco duro" de cosas hacen del +2E algo bastante inútil.
Perdón por la parrafada.
- wilco2009
- Freddy Hardest
- Mensajes: 543
- Registrado: Lun Sep 17, 2012 9:40 am
- Ubicación: Valencia
Re: Abrir ficheros binarios en +2E
Sin conocer mucho la sintaxis del +3E, eso que cuentas suena a que la escritura es en modo 16 bits. Si es así hay que tener en cuenta que el Z80 (al igual que los procesadores de Intel) utiliza codificación little endian. Eso significa que los primeros 8 bits son los menos significativos.
Debería intentar a leer los datos en parejas y darles la vuelta antes de escribirlos a ver si así funciona.
Debería intentar a leer los datos en parejas y darles la vuelta antes de escribirlos a ver si así funciona.
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Re: Abrir ficheros binarios en +2E
wilco2009 escribió:Sin conocer mucho la sintaxis del +3E, eso que cuentas suena a que la escritura es en modo 16 bits. Si es así hay que tener en cuenta que el Z80 (al igual que los procesadores de Intel) utiliza codificación little endian. Eso significa que los primeros 8 bits son los menos significativos.
Debería intentar a leer los datos en parejas y darles la vuelta antes de escribirlos a ver si así funciona.
No entiendo muy bien como hacerlo, porque si yo quiero escribir digamos un byte con el valor en decimal digamos 160 con
PRINT #6, 160
y el spectrum escribe 160 y en la siguiente posición del archivo 255
no puedo hacer nada para darle la vuelta, o almenos no se me ocurre
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Abrir ficheros binarios en +2E
wilco2009 escribió:Sin conocer mucho la sintaxis del +3E, eso que cuentas suena a que la escritura es en modo 16 bits. Si es así hay que tener en cuenta que el Z80 (al igual que los procesadores de Intel) utiliza codificación little endian. Eso significa que los primeros 8 bits son los menos significativos.
Debería intentar a leer los datos en parejas y darles la vuelta antes de escribirlos a ver si así funciona.
No creo que sea eso. Las rutinas BASIC funcionan independientemente de lo que tengas pinchado como disco duro. De hacer la traducción de 16 bits a 8 bits y viceversa se encargan las rutinas de la ROM del +2E (la parte del +3DOS parcheada que es en esencia un +2E)
Postea por aquí el programa en BASIC del 128K a ver si damos con la tecla.
La otra utildiad que intentaste para pasarte cosas a la compact flash, ¿qué utilidad es? Yo tengo hecha una que si bien no funciona aún con unidades con "halved sectors", sí que funciona para imágenes en formato HDF que estén en ese formato. Es la que usa internamente el programa "Strowsaw". A ver si encuentro por algún sitio el post o e-mail donde indico cómo usarla para el caso "halved sector".
Web: ZX Projects | Twitter: @zxprojects
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Abrir ficheros binarios en +2E
mittemot escribió:y el spectrum escribe 160 y en la siguiente posición del archivo 255
no puedo hacer nada para darle la vuelta, o almenos no se me ocurre
¿Cómo compruebas lo que has leído? Es decir, ¿cómo sabes que en la siguiente posición del archivo hay un 255? Si lo estás haciendo leyendo directamente los sectores de la CF desde el PC, entonces claro que te sale eso, por el tema del "halved sector".
Otra cosa: el PRINT que haces debería terminar en ";" porque si no, escribe el byte que quieres y a continuación, el carácter de retorno de carro. ¿No será eso lo que te está pasando?
Web: ZX Projects | Twitter: @zxprojects
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Re: Abrir ficheros binarios en +2E
mcleod_ideafix escribió:mittemot escribió:y el spectrum escribe 160 y en la siguiente posición del archivo 255
no puedo hacer nada para darle la vuelta, o almenos no se me ocurre
¿Cómo compruebas lo que has leído? Es decir, ¿cómo sabes que en la siguiente posición del archivo hay un 255? Si lo estás haciendo leyendo directamente los sectores de la CF desde el PC, entonces claro que te sale eso, por el tema del "halved sector".
Otra cosa: el PRINT que haces debería terminar en ";" porque si no, escribe el byte que quieres y a continuación, el carácter de retorno de carro. ¿No será eso lo que te está pasando?
porque una vez creado el archivo leo sus bytes con un input # dentro de un bucle y los comparo con el original, no leo directamente desde los sectores de la CF y menos desde el PC (de hecho no entiendo porque dices esto).
Lo del Print también lo tuve en cuenta y puse ; pero no había diferencia.
De todas formas ¿hay alguna forma de pasar archivos Z80 menos engorrosa y sobre todo que funcione?
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Re: Abrir ficheros binarios en +2E
mcleod_ideafix escribió:wilco2009 escribió:Sin conocer mucho la sintaxis del +3E, eso que cuentas suena a que la escritura es en modo 16 bits. Si es así hay que tener en cuenta que el Z80 (al igual que los procesadores de Intel) utiliza codificación little endian. Eso significa que los primeros 8 bits son los menos significativos.
Debería intentar a leer los datos en parejas y darles la vuelta antes de escribirlos a ver si así funciona.
No creo que sea eso. Las rutinas BASIC funcionan independientemente de lo que tengas pinchado como disco duro. De hacer la traducción de 16 bits a 8 bits y viceversa se encargan las rutinas de la ROM del +2E (la parte del +3DOS parcheada que es en esencia un +2E)
Postea por aquí el programa en BASIC del 128K a ver si damos con la tecla.
La otra utildiad que intentaste para pasarte cosas a la compact flash, ¿qué utilidad es? Yo tengo hecha una que si bien no funciona aún con unidades con "halved sectors", sí que funciona para imágenes en formato HDF que estén en ese formato. Es la que usa internamente el programa "Strowsaw". A ver si encuentro por algún sitio el post o e-mail donde indico cómo usarla para el caso "halved sector".
el Strowsaw no me leia nada de la tarjeta, eso sí, luego la volvia a conectar al Spectrum y ahí estaban los archivos
El código era algo así (de memoria) , no puedo acceder ahora a él pq está en el "hdd" del spectrum y no lo tengo aquí.
10 FORMAT LPRINT "R"
20 LET A=0
30 OPEN #4 "O>PROGRAMA.Z80"
40 FOR C=0 TO 10000 : REM LONGITUD DE ARCHIVO
50 INPUT #3,A
60 GO TO #4,C
70 PRINT #4,A;
80 NEXT C
90 CLOSE #4:CLOSE #3
es muy básico y ya digo que recibiendo datos del puerto serie funciona perfectamente.
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Abrir ficheros binarios en +2E
mittemot escribió:porque una vez creado el archivo leo sus bytes con un input # dentro de un bucle y los comparo con el original, no leo directamente desde los sectores de la CF y menos desde el PC (de hecho no entiendo porque dices esto).
Pues porque la interface que te has hecho, la de 8 bits simple, sólo usa la mitad de la capacidad de la CF. Eso significa que cuando se escriben datos en un sector de 512 bytes de la CF, sólo escribe 256 de esos 512. Entre cada byte con información y el siguiente, la CF almacena precisamente un FFh. Por eso, cuando dijiste que al leer leías un byte bien y otro a 255, pensé que lo estabas haciendo así, directamente sobre la tarjeta en el PC.
mittemot escribió:De todas formas ¿hay alguna forma de pasar archivos Z80 menos engorrosa y sobre todo que funcione?
No, que yo sepa. Es por eso por lo que escribí "3e", y un poco más tarde, Davide Guida escribió el front-end "Strowsaw" que ya conoces.
Lo malo es que yo nunca he usasdo este tipo de interfaces de 8 bits. He usado un DivIDE y una interface ZXMMC, y en ambos casos, se usa toda la capacidad de la tarjeta, por lo que "3e" de momento sólo funciona con dispositivos que usen sectores de 512 bytes completos.
Hace algún tiempo pude dotar a "3e" de la capacidad de manejar dispositivos de 8 bits, pero no a través del dispositivo físico, sino a través de imágenes en formato HDF de ese dispositivo. Es decir, tú coges tu CF, y con un programa, creo recordar que era de Pera Putnik, copias el contenido de la CF a un fichero en el PC con extensión HDF. Si la CF estaba configurada para usarse con una interface de 8 bits, tienes la opción de crear la imagen HDF en modo "halved sector". Esos ficheros HDF sí que los soporta "3e", así que la cosa sería:
- Con la utilidad de Pera Putnik (ahora mismo no recuerdo cómo se llama), haz un vocado de tu CF en modo "halved sector" a un archivo en tu PC
- Usa Strowsaw y abre el fichero imagen HDF. Deberías poder ver entonces la estructura de particiones y ficheros.
- Cuando hayas pasado a la imagen todos los ficheros Z80 que querías pasar, cierra Strowsaw y con la utilidad de Pera Putnik, haz la operación inversa de copiar la imagen HDF a la CF.
Web: ZX Projects | Twitter: @zxprojects
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Abrir ficheros binarios en +2E
El programa de Pera Putnik al que me refería es éste:
http://hardware.speccy.org/temp/drimgs.html
Y la opción a marcar en tu caso es HDF256.
http://hardware.speccy.org/temp/drimgs.html
Y la opción a marcar en tu caso es HDF256.
Web: ZX Projects | Twitter: @zxprojects
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Re: Abrir ficheros binarios en +2E
mcleod_ideafix escribió:
Pues porque la interface que te has hecho, la de 8 bits simple, sólo usa la mitad de la capacidad de la CF. Eso significa que cuando se escriben datos en un sector de 512 bytes de la CF, sólo escribe 256 de esos 512. Entre cada byte con información y el siguiente, la CF almacena precisamente un FFh. Por eso, cuando dijiste que al leer leías un byte bien y otro a 255, pensé que lo estabas haciendo así, directamente sobre la tarjeta en el PC.
No, que yo sepa. Es por eso por lo que escribí "3e", y un poco más tarde, Davide Guida escribió el front-end "Strowsaw" que ya conoces.
Lo malo es que yo nunca he usasdo este tipo de interfaces de 8 bits. He usado un DivIDE y una interface ZXMMC, y en ambos casos, se usa toda la capacidad de la tarjeta, por lo que "3e" de momento sólo funciona con dispositivos que usen sectores de 512 bytes completos.
Hace algún tiempo pude dotar a "3e" de la capacidad de manejar dispositivos de 8 bits, pero no a través del dispositivo físico, sino a través de imágenes en formato HDF de ese dispositivo. Es decir, tú coges tu CF, y con un programa, creo recordar que era de Pera Putnik, copias el contenido de la CF a un fichero en el PC con extensión HDF. Si la CF estaba configurada para usarse con una interface de 8 bits, tienes la opción de crear la imagen HDF en modo "halved sector". Esos ficheros HDF sí que los soporta "3e", así que la cosa sería:
- Con la utilidad de Pera Putnik (ahora mismo no recuerdo cómo se llama), haz un vocado de tu CF en modo "halved sector" a un archivo en tu PC
- Usa Strowsaw y abre el fichero imagen HDF. Deberías poder ver entonces la estructura de particiones y ficheros.
- Cuando hayas pasado a la imagen todos los ficheros Z80 que querías pasar, cierra Strowsaw y con la utilidad de Pera Putnik, haz la operación inversa de copiar la imagen HDF a la CF.
Te refieres a este programa ?
http://rst.serveblog.net/photoweb/drimg.png
porque ya lo probé en su dia y no funcionaba, salía como si todo el contenido del la unidad fuera caótico, quizás no supiera utilizarlo porque no tengo claro esto del halved sector
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Abrir ficheros binarios en +2E
mittemot escribió:Te refieres a este programa ?
http://rst.serveblog.net/photoweb/drimg.png
porque ya lo probé en su dia y no funcionaba, salía como si todo el contenido del la unidad fuera caótico, quizás no supiera utilizarlo porque no tengo claro esto del halved sector
Ese mismo. Prueba a copiar con él desde la CF a un fichero HDF activando el modo HD256. Si así lo pilla Strowsaw, es que la copia ha sido correcta
Web: ZX Projects | Twitter: @zxprojects
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Re: Abrir ficheros binarios en +2E
mcleod_ideafix escribió:mittemot escribió:Te refieres a este programa ?
http://rst.serveblog.net/photoweb/drimg.png
porque ya lo probé en su dia y no funcionaba, salía como si todo el contenido del la unidad fuera caótico, quizás no supiera utilizarlo porque no tengo claro esto del halved sector
Ese mismo. Prueba a copiar con él desde la CF a un fichero HDF activando el modo HD256. Si así lo pilla Strowsaw, es que la copia ha sido correcta
Muchas gracias por la información, en cuanto lo pruebe ya comentaré aquí los resultados.
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Re: Abrir ficheros binarios en +2E
Bueno ya lo probé y aparentemente funciona, puedo leer y escribir ficheros.
El problema es que tarda una eternidad en leer y sobre todo en grabar la imagen de disco.
aún así los ficheros .Z80 no le ejecutan (se cuelga o reinicia el ordenador), deben perder la integridad o yo que se
el caso es que los SCR si funcionan perfectamente
El problema es que tarda una eternidad en leer y sobre todo en grabar la imagen de disco.
aún así los ficheros .Z80 no le ejecutan (se cuelga o reinicia el ordenador), deben perder la integridad o yo que se
el caso es que los SCR si funcionan perfectamente
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Abrir ficheros binarios en +2E
mittemot escribió:Bueno ya lo probé y aparentemente funciona, puedo leer y escribir ficheros.
El problema es que tarda una eternidad en leer y sobre todo en grabar la imagen de disco.
aún así los ficheros .Z80 no le ejecutan (se cuelga o reinicia el ordenador), deben perder la integridad o yo que se
el caso es que los SCR si funcionan perfectamente
Los ficheros Z80 debes grabarlos sin cabecera de +3DOS (binary mode en el StrowSaw)
Web: ZX Projects | Twitter: @zxprojects
- mittemot
- Herbert
- Mensajes: 75
- Registrado: Mar Oct 16, 2012 8:42 am
- Ubicación: Castellón
- Contactar:
Re: Abrir ficheros binarios en +2E
mcleod_ideafix escribió:mittemot escribió:Bueno ya lo probé y aparentemente funciona, puedo leer y escribir ficheros.
El problema es que tarda una eternidad en leer y sobre todo en grabar la imagen de disco.
aún así los ficheros .Z80 no le ejecutan (se cuelga o reinicia el ordenador), deben perder la integridad o yo que se
el caso es que los SCR si funcionan perfectamente
Los ficheros Z80 debes grabarlos sin cabecera de +3DOS (binary mode en el StrowSaw)
Los ficheros están bien grabados, y es que después de fijarme más, a veces sí cargan los Z80 y otras no, a veces se carga la pantalla del menu (o lo que fuera que se tiene que ver) y se queda bloqueado. Es curioso porque cuando acabo de encender la máquina el primer juego suele cargar, después de un rato ya no carga ninguno. No sé si será problema de alimentación y al principio la fuente tira un poco más y luego baja. Uso la original del +2a y con ella alimento todo.
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados