Nueva compañía retrosoft español, Cañadul.
Moderador: Sir Cilve Sinclair
- miguel
- Manic Miner
- Mensajes: 293
- Registrado: Mar Abr 17, 2007 12:27 am
- Ubicación: Parla - Madrid
- Contactar:
Cañadul escribió:Hola.
Efectivamente, los niveles del 19 al 25 tenian la misma contraseña.
He subido una nueva version, con las contraseñas nuevas para estos niveles.
Podeis descargarla en http://perso.orange.es/elitelmotril
Gracias.
Hola y bienvenidos al foro.
Lo primero dar la enhorabuena por el juego, me parece muy aditivo.
Y ahora una pregunta ¿sería mucho pedir que, a la vez que el archivo SNA, se ponga disponible para descarga un TZX o TAP? Para meterlo a la Compact Flash o a disco sería más sencillo.
Muchas gracias.
-
- rst 0
- Mensajes: 4
- Registrado: Dom Oct 28, 2007 8:57 pm
Hola.
Hemos tenido que usar un SNA, por motivos de falta de memoria, asi el juego aprovecha desde la 4000 hexadecimal hasta casi la FFFF hexadecimal.
Por ejemplo el Menu es una pantalla, no es un grafico que luego se imprime, por ese motivo, una vez que se esta jugando, no se puede volver a el. Y al pulsar la tecla "Y" solo presenta los guines para escribir el codigo del nivel sin fondo.
No se exactamente como se construye un TAP o TZX, pero si con este mapa de memoria se puede hacer, si alguien me dice como, por mi no habria problema en hacerlo.
Saludos.
Hemos tenido que usar un SNA, por motivos de falta de memoria, asi el juego aprovecha desde la 4000 hexadecimal hasta casi la FFFF hexadecimal.
Por ejemplo el Menu es una pantalla, no es un grafico que luego se imprime, por ese motivo, una vez que se esta jugando, no se puede volver a el. Y al pulsar la tecla "Y" solo presenta los guines para escribir el codigo del nivel sin fondo.
No se exactamente como se construye un TAP o TZX, pero si con este mapa de memoria se puede hacer, si alguien me dice como, por mi no habria problema en hacerlo.
Saludos.
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Ese "casi" puede que sea suficiente para una rutinilla en ensamblador que cargue el resto del juego...
Por ejemplo, veo un hueco muy gordo comenzando en #FE5B . Ahí cabe de sobras un cargador. El bloque que se cargue contendrá el mismo código del cargador, de tal forma que al sobreescribirlo no quede afectado.
Por ejemplo, veo un hueco muy gordo comenzando en #FE5B . Ahí cabe de sobras un cargador. El bloque que se cargue contendrá el mismo código del cargador, de tal forma que al sobreescribirlo no quede afectado.
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:
Cañadul escribió:No se exactamente como se construye un TAP o TZX, pero si con este mapa de memoria se puede hacer, si alguien me dice como, por mi no habria problema en hacerlo.
Saludos.
Pues mira, dicho y hecho. Aquí tienes un TAP con vuestro juego y ehem, ehem... pantalla de carga incluida.
El cargador se aloja en una linea REM, y se encarga de poner la pila en el buffer de impresora, para que no moleste, cargar la pantalla, y un bloque principal que en vuestro juego va desde 24000 hasta 65535. En ese bloque principal he usado un hueco de 5 bytes que he pillado a partir de la posición #FE5B para alojar la última parte de la rutina de carga, consistente en un CALL #0556 seguido de un RETN.
El cargador, después de cargar este bloque, pone la pila en #FFFB (tal y como estaba en el SNA), da valores a IX y DE para que carguen un segundo bloque desde 16384 hasta 23999, y por último, salta a #FE5B donde se hace la llamada a LOAD y con RETN se recupera el PC y comienza el juego.
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:
Para hacer el TAP:
He usado Spectaculator, la especificación de los SNA, la especificación de los TAP y un editor hexadecimal (HexEdit).
1. Miro con el debugger de Spectaculator que hay un pequeño hueco de unos 21 bytes a partir de #F5FB. Me lo apunto para luego.
2. Observo el SNA con el editor hexadecimal y apunto los parámetros importantes: en este caso, la dirección de la pila, que es #FFFB. Aquí se almacena el PC ya que los SNA "comienzan" la ejecución con un RETN (para conservar las interrupciones como estaban y todo eso).
3. Con el mismo editor hexadecimal corto los primeros 27 bytes y me quedo con el mapa de la memoria del Spectrum: 49152 bytes. Cojo y grabo dos archivos: uno con la parte de memoria que va desde 16384 hasta 23999 y le llamo menu.bin, y otra que va desde 24000 hasta 65535, que le llamo main.bin. También elaboro con mucho sufrimiento, esfuerzo, tesón y constancia una pantalla de carga, que grabo como screen.bin (6912 bytes).
4. Hago un cargador BASIC con una rutina en C/M incrustrada en la primera linea REM. El C/M es éste:
4a. Para ello, primero compilo este código con PASMO y genero un .BIN de 59 bytes.
4b. Escribo un programa en BASIC con la primera línea REM seguida de 59 caracteres, seguida de unos borders, unos papers, mensajito de carga, etc. y al final, un RANDOMIZE USR (PEEK 23635+256*PEEK 23636+5)
4c. Con Spectaculator, cargo el .BIN de la rutina y al preguntar por dirección le digo la 23760 (en el Spectaculator previamente he desactivado Interface 1 y demás para que no desplace la variable PROG). El resultado es una línea REM con basura. Pokeo en 23755 y 23756 sendos ceros para hacer esa línea intocable.
4d. Creo en el Spectaculator un nuevo fichero TAP. Le llamo astro2008.tap. Desde BASIC hago un SAVE "astro2008" LINE 1, y al aparecer el "Start tape..." pulso Ctrl+Alt+Espacio para poner en marcha la "grabadora virtual" de Spectaculator. Pulso ENTER y ya tengo un TAP con un bonito cargador.
5. Sin abandonar Spectaculator, hago un reset al Spectrum y luego un CLEAR 23999. Cargo screen.bin arrastrando el fichero a Spectaculator. A la pregunta de dónde lo cargo, le digo que 24000. Después, grabo ese código al TAP con SAVE "screen" CODE 24000,6912
6. Hago lo mismo con main.bin y menu.bin, en este orden. Para cada uno de ellos, primero arrastro el fichero a Spectaculator, le digo que lo cargue a partir de 24000 y grabo el bloque al TAP como SAVE "main" CODE 24000,41536 y SAVE "menu" CODE 24000,7616. Antes de grabar "main" al TAP, pokeo a mano a partir de la dirección 65115 los valores 205,86,5,237,69. Estos son los códigos de CALL #0556 ; RETN (también hubiera valido modificarlo en el editor hexadecimal).
7. La cosa ya está casi lista. Sólo falta un retoque al TAP: la rutina que he escrito espera tres bloques sin cabecera, y los que he grabado están con cabecera, así que hay que quitársela. Esto seguro que se puede hacer mucho más comodamente con algún editor ad-hoc para ficheros TAP, pero como no tenía ninguno a mano, usé de nuevo el editor hexadecimal.
8. Con el editor hexadecimal cargo el TAP y busco cada uno de los tres bloques donde se almacenan las cabeceras (la primera parte de la carga). Cada uno de estos bloques ocupa 21 bytes
- 2 bytes para indicar la longitud del bloque sin contar estos 2 bytes (en la cabecera la longitud vale 19)
- De los 19 siguientes, tenemos:
* 1 que indica el byte de flag (vale 0 para la cabecera)
---------- AQUI VIENE LA INFORMACION ESTANDAR DE CABECERA -----
* 1 para indicar el tipo de bloque (vale 3 para Bytes:)
* 10 para el nombre del bloque, relleno con espacios
* 2 que indican la longitud del bloque de datos
* 2 que indican la dirección de comienzo del bloque de datos
* 2 no usados en bloques tipo Byte:
--------------------------------------------------------------------------------------
* 1 para el checksum
Así que uso el editor para suprimir los tres bloques del TAP que tienen esta información, quedándome sólo con el bloque completo (cabecera + datos) del BASIC, y tres bloques sin cabecera con la pantalla de carga, bloque principal, y bloque con la pantalla del menú. Grabo el resultado y listo.
He usado Spectaculator, la especificación de los SNA, la especificación de los TAP y un editor hexadecimal (HexEdit).
1. Miro con el debugger de Spectaculator que hay un pequeño hueco de unos 21 bytes a partir de #F5FB. Me lo apunto para luego.
2. Observo el SNA con el editor hexadecimal y apunto los parámetros importantes: en este caso, la dirección de la pila, que es #FFFB. Aquí se almacena el PC ya que los SNA "comienzan" la ejecución con un RETN (para conservar las interrupciones como estaban y todo eso).
3. Con el mismo editor hexadecimal corto los primeros 27 bytes y me quedo con el mapa de la memoria del Spectrum: 49152 bytes. Cojo y grabo dos archivos: uno con la parte de memoria que va desde 16384 hasta 23999 y le llamo menu.bin, y otra que va desde 24000 hasta 65535, que le llamo main.bin. También elaboro con mucho sufrimiento, esfuerzo, tesón y constancia una pantalla de carga, que grabo como screen.bin (6912 bytes).
4. Hago un cargador BASIC con una rutina en C/M incrustrada en la primera linea REM. El C/M es éste:
Código: Seleccionar todo
;Cargador para TAP de Astro 2008
org 23760 ;Cargador en linea REM
Cargador proc
ld sp,23551 ;Pila en area de impresora
;Carga de pantalla
ld ix,16384
ld de,6912
scf
ld a,255
call 1366
;Carga parte principal: los últimos 41536 bytes
ld ix,24000
ld de,41536
scf
ld a,255
call 1366
;Carga parametros ultima carga y salta ultima carga
ld sp,#0fffb
di
;Borrado de pantalla
ld hl,22528
ld (hl),0
ld de,22529
ld bc,767
ldir
ld ix,16384
ld de,7616
scf
ld a,255
jp #0fe5b ;En esta posicion estarán los bytes: C4 56 05 ED 45
endp
end 23760
4a. Para ello, primero compilo este código con PASMO y genero un .BIN de 59 bytes.
4b. Escribo un programa en BASIC con la primera línea REM seguida de 59 caracteres, seguida de unos borders, unos papers, mensajito de carga, etc. y al final, un RANDOMIZE USR (PEEK 23635+256*PEEK 23636+5)
4c. Con Spectaculator, cargo el .BIN de la rutina y al preguntar por dirección le digo la 23760 (en el Spectaculator previamente he desactivado Interface 1 y demás para que no desplace la variable PROG). El resultado es una línea REM con basura. Pokeo en 23755 y 23756 sendos ceros para hacer esa línea intocable.
4d. Creo en el Spectaculator un nuevo fichero TAP. Le llamo astro2008.tap. Desde BASIC hago un SAVE "astro2008" LINE 1, y al aparecer el "Start tape..." pulso Ctrl+Alt+Espacio para poner en marcha la "grabadora virtual" de Spectaculator. Pulso ENTER y ya tengo un TAP con un bonito cargador.
5. Sin abandonar Spectaculator, hago un reset al Spectrum y luego un CLEAR 23999. Cargo screen.bin arrastrando el fichero a Spectaculator. A la pregunta de dónde lo cargo, le digo que 24000. Después, grabo ese código al TAP con SAVE "screen" CODE 24000,6912
6. Hago lo mismo con main.bin y menu.bin, en este orden. Para cada uno de ellos, primero arrastro el fichero a Spectaculator, le digo que lo cargue a partir de 24000 y grabo el bloque al TAP como SAVE "main" CODE 24000,41536 y SAVE "menu" CODE 24000,7616. Antes de grabar "main" al TAP, pokeo a mano a partir de la dirección 65115 los valores 205,86,5,237,69. Estos son los códigos de CALL #0556 ; RETN (también hubiera valido modificarlo en el editor hexadecimal).
7. La cosa ya está casi lista. Sólo falta un retoque al TAP: la rutina que he escrito espera tres bloques sin cabecera, y los que he grabado están con cabecera, así que hay que quitársela. Esto seguro que se puede hacer mucho más comodamente con algún editor ad-hoc para ficheros TAP, pero como no tenía ninguno a mano, usé de nuevo el editor hexadecimal.
8. Con el editor hexadecimal cargo el TAP y busco cada uno de los tres bloques donde se almacenan las cabeceras (la primera parte de la carga). Cada uno de estos bloques ocupa 21 bytes
- 2 bytes para indicar la longitud del bloque sin contar estos 2 bytes (en la cabecera la longitud vale 19)
- De los 19 siguientes, tenemos:
* 1 que indica el byte de flag (vale 0 para la cabecera)
---------- AQUI VIENE LA INFORMACION ESTANDAR DE CABECERA -----
* 1 para indicar el tipo de bloque (vale 3 para Bytes:)
* 10 para el nombre del bloque, relleno con espacios
* 2 que indican la longitud del bloque de datos
* 2 que indican la dirección de comienzo del bloque de datos
* 2 no usados en bloques tipo Byte:
--------------------------------------------------------------------------------------
* 1 para el checksum
Así que uso el editor para suprimir los tres bloques del TAP que tienen esta información, quedándome sólo con el bloque completo (cabecera + datos) del BASIC, y tres bloques sin cabecera con la pantalla de carga, bloque principal, y bloque con la pantalla del menú. Grabo el resultado y listo.
Web: ZX Projects | Twitter: @zxprojects
- na_th_an
- Nonamed
- Mensajes: 1889
- Registrado: Lun May 07, 2007 10:16 am
- Ubicación: Andalucía
- miguel
- Manic Miner
- Mensajes: 293
- Registrado: Mar Abr 17, 2007 12:27 am
- Ubicación: Parla - Madrid
- Contactar:
mcleod_ideafix escribió:Pues mira, dicho y hecho. Aquí tienes un TAP con vuestro juego y ehem, ehem... pantalla de carga incluida.
Muchas gracias por el curro.
-
- Nonamed
- Mensajes: 1221
- Registrado: Mar Abr 17, 2007 12:35 pm
- Ubicación: Valencia
- Contactar:
Hola ...
Desde hoy mismo tenéis la página Web de Cañadul hospedada en Speccy.org:
http://canadul.speccy.org/
Un saludo
Desde hoy mismo tenéis la página Web de Cañadul hospedada en Speccy.org:
http://canadul.speccy.org/
Un saludo
NoP / Compiler
-
- Nonamed
- Mensajes: 1194
- Registrado: Lun May 07, 2007 12:11 pm
- Ubicación: Frankfurt, Germany
- Contactar:
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Cañadul escribió:Acabo de subir la version TAP publicada por mcleod_ideafix.
Espero que hayais cambiado la pantalla de carga
Web: ZX Projects | Twitter: @zxprojects
-
- Nonamed
- Mensajes: 1194
- Registrado: Lun May 07, 2007 12:11 pm
- Ubicación: Frankfurt, Germany
- Contactar:
- zyloj
- Freddy Hardest
- Mensajes: 711
- Registrado: Mar Abr 17, 2007 12:31 am
- Ubicación: cada día más lejos de aquí
- Contactar:
- mcleod_ideafix
- Johnny Jones
- Mensajes: 3985
- Registrado: Vie Sep 21, 2007 1:26 am
- Ubicación: Jerez de la Frontera
- Contactar:
Por eso lo digo... esto pasa por no cargar las cosas a la velocidad adecuada...
Web: ZX Projects | Twitter: @zxprojects
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 17 invitados