help needed con rutina de carga rapida. (Solucionado)

Moderador: Fundadores

Responder
Avatar de Usuario
Spirax !Sinclair 1
Demonio tercer orden
Demonio tercer orden
Mensajes: 715
Registrado: 09 Oct 2017, 17:03
Ubicación: Leganes (Madrid)
Has thanked: 24 times
Been thanked: 46 times

help needed con rutina de carga rapida. (Solucionado)

Mensaje por Spirax »

Hola demonios.

a ver que tal andamos de cm :b

he cogido una rutina de carga rapida y la he adaptado para que me tarde menos en cargar un juego.
concretamente el Abe's Escape

despues de un monton de pruebas. soy incapaz de hacerla funcionar en un 128k gris.
me explico las pruebas las hago con spectaculator.

una vez creado el tzx completo con el programa de carga, los bloques turbo, etc.

resulta que en el +2 128 gris solo me carga el primer bloque turbo.
a la hora de cargar el segundo, tercero y cuarto no me pilla el sync de la cabecera :evil: y me estoy volviendo loco .

sin embargo si lo cargo en un +2a o en el +3 (en el spectaculator) fuciona todo como debe y cargan todos los Bloques turbo carga a la primera.

otro dato curioso
este juego para que funcione bine, hay que entrar en el basic del 128 y correr usr0 para que reinicialize en modo 48k pero con acceso a la memoria extra.
pues como digo en +2a y en +3b funciona perfectamente, la rutina de carga funciona todas las veces y carga bien.

pero en el +2 gris que es en el que quiero que funcione por que es el que tengo fisicamente ::?
si hago el usr0
y cargo el juego
me carga el programa, y carga el primer bloque de datos turbo, lo carga bien pero al ejecutar la rutina de carga por segunda vez para otro bloque de datos, ya no pilla la cabecera.
creo que el problema esta en ld_edge1 y ld_edge2 que pierde el carry en algun momento y reincia la cuenta de h por lo que no coge la cabecera.

otro dato curioso es que si en el +2 gris, no ejecuto el usr0 y cargo el programa de inicio en modo loader 128k si que carga todos los bloques turbo.
pero el juego no funciona de esta manera.(se reinicia despues de la musica inicial al elejir idioma)
el original en tap si funciona perfectamente en el +2 gris haciendo el usr0 y cargandolo despues. pero tarda un huevo en cargar :D

a alguien se le ocurre alguna diferencia por la que pueda fallar en el plus 2 gris?

el motivo de hacer esto es porque tengo un plus 2 gris y queria cargarlo con mi tzxduino en el spectrum en vez de en el emulador :mrgreen:

cualquier comentario sera agradecido.
no se si puede colgar aqui un tzx modificado para que lo probeis.
o al ser una modificacion que ademas no funciona bien mejor no distruirla :|
gracias

os adjunto un bmp con la rutina de carga para la pantalla a ver si alguien me da alguna pista examinando el codigo :|
esta basada en una version antigua de antes de cargandoleches con algunos cambios mios.

edito para cambiar el titulo a solucionado
el problema era que los bloques de memeria contenida son distintos en el +2 gris y en el +2a/b
Última edición por Spirax el 22 Dic 2017, 21:17, editado 3 veces en total.
Avatar de Usuario
Kyp !Sinclair 1
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3377
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 28 times
Been thanked: 146 times

Re: help needed con rutina de cara rapida.

Mensaje por Kyp »

¿Puede ser por donde está la rutina de carga? ¿Has tenido en cuenta que en el 128K/+2 las páginas de RAM en contienda son las impares mientras que en el +3/+2AB son las 4, 5, 6 y 7?
Avatar de Usuario
Spirax !Sinclair 1
Demonio tercer orden
Demonio tercer orden
Mensajes: 715
Registrado: 09 Oct 2017, 17:03
Ubicación: Leganes (Madrid)
Has thanked: 24 times
Been thanked: 46 times

Re: help needed con rutina de cara rapida.

Mensaje por Spirax »

aja. pues no. eso no lo he mirado.
voy a ver q paginas usa el juego.

gracias por la sugerencia. por lo menos me sirve de pista de algo donde buscar.
Avatar de Usuario
mad3001 !Atari
Demonio segundo orden
Demonio segundo orden
Mensajes: 1938
Registrado: 25 Nov 2015, 00:15
Ubicación: Mostoles(Madrid)
Has thanked: 83 times
Been thanked: 116 times

Re: help needed con rutina de cara rapida.

Mensaje por mad3001 »

Kyp escribió: 19 Dic 2017, 12:45 ¿Puede ser por donde está la rutina de carga? ¿Has tenido en cuenta que en el 128K/+2 las páginas de RAM en contienda son las impares mientras que en el +3/+2AB son las 4, 5, 6 y 7?
Pensaba que lo mismo es eso pero dice que hace un USR 0 para ir al modo 48k... en ese modo la pagina superior es RAM 0 salvo que esté "a posta" utilizando otra página mediante el cambio de bancos en 0x7ffd...

La rutina de cargando leches es muy "quisquillosa"... ya con el Dandanator nos dimos de leches según el Spectrum utilizado... simplemente por una ULA con un pelín de sensibilidad mayor o menor puede pasar que cargue o no cargue
Volviendo a los origenes... programa en assembler
Avatar de Usuario
Spirax !Sinclair 1
Demonio tercer orden
Demonio tercer orden
Mensajes: 715
Registrado: 09 Oct 2017, 17:03
Ubicación: Leganes (Madrid)
Has thanked: 24 times
Been thanked: 46 times

Re: help needed con rutina de cara rapida.

Mensaje por Spirax »

mad3001 escribió: 19 Dic 2017, 13:48
Kyp escribió: 19 Dic 2017, 12:45 ¿Puede ser por donde está la rutina de carga? ¿Has tenido en cuenta que en el 128K/+2 las páginas de RAM en contienda son las impares mientras que en el +3/+2AB son las 4, 5, 6 y 7?
Pensaba que lo mismo es eso pero dice que hace un USR 0 para ir al modo 48k... en ese modo la pagina superior es RAM 0 salvo que esté "a posta" utilizando otra página mediante el cambio de bancos en 0x7ffd...

La rutina de cargando leches es muy "quisquillosa"... ya con el Dandanator nos dimos de leches según el Spectrum utilizado... simplemente por una ULA con un pelín de sensibilidad mayor o menor puede pasar que cargue o no cargue
gracias a los dos.
si va a ser eso.

el juego solo funciona bien en modo 48k despues del usr0
pero despues de la carga de cada bloque veo que hace unos cambios de banco de la memoria.
yo la rutina de carga la ubico en 65300
y depues de cada carga como el juego cambiaba el bloque de memoria para ir dejando los datos,yo volvia a meter la rutina de carga otra vez en la 65300, ya que habia verificado previamente que esta direccion estaba libre en todos los bloques despues de la carga y no se iva a pisar nada. pero no se me habia ocurrido que los distintos bloques de memoria podrian tener un comportamiento diferente respecto a la memoria contenida segun el bloque que fuera.

me toca investigar un poco el tema de la memoria contenida segun en que bloques de memoria para mover la rutina de carga segun la memoria que se use.
ya que creia que todos los que estaban por encima de 32768 eran iguales ::?

saludos
me toca leer mucho sobe la paginacion del 128, jajaja
ya ire contando como avanzo.
Avatar de Usuario
mad3001 !Atari
Demonio segundo orden
Demonio segundo orden
Mensajes: 1938
Registrado: 25 Nov 2015, 00:15
Ubicación: Mostoles(Madrid)
Has thanked: 83 times
Been thanked: 116 times

Re: help needed con rutina de cara rapida.

Mensaje por mad3001 »

A ver, puedes usar los bancos 0 y 2, son los 2 únicos bancos en común a todos los spectrum 128 que son de memoria "no contenida".... además el banco 2 (salvo que tengas un modo allram en Amstrad +2A/B/+3) siempre está entre 32768 y 49151
yo lo que hago cuando no tengo espacio en esa RAM 2 (que es lo habitual ya que el 99,9% de los juegos usan todo ese bloque), es buscar otro hueco en otro banco (por ejemplo RAM 3) y vuelco provisionalmente el espacio que necesito al otro banco libre.... luego pongo mi rutina ahí en la RAM 2.... hago lo que necesite hacer (la carga en tu caso)... vuelvo a dejar en su sitio el bloque de la ram 2.... y ya continuo.... lo malo es si justo tienes que cargar de la RAM 2.... en ese caso me iría a la RAM 0 aunque claro, eso implica algunos pasos más y tener un cacho de código en otra zona para hacer todos esos (o parte de los) trasvases de información...

Tienes una muy buena información de paginación aquí:
http://www.worldofspectrum.org/faq/refe ... erence.htm
Volviendo a los origenes... programa en assembler
Avatar de Usuario
Spirax !Sinclair 1
Demonio tercer orden
Demonio tercer orden
Mensajes: 715
Registrado: 09 Oct 2017, 17:03
Ubicación: Leganes (Madrid)
Has thanked: 24 times
Been thanked: 46 times

Re: help needed con rutina de cara rapida.

Mensaje por Spirax »

completado :)
efectivamente el problema estaba en que los bloques de ran contenida son distintos en +2 girs y en +2ab
mas o menos he tenido que hacer lo que esplica mad3001 (gracias)
modificar los bloques de carga para añadir la rutina de carga en la ram2 y despues sobrescribir la rutina de carga con los datos que deberian ir.
ahora a probar a ver si me he cargado los niveles o funciona bien.
de momento ya me carga sin problemas en el spectaculator tanto en +2gris como en +2ab
y tambien carga en el spectrum +2gris que tengo con el tzxduino :)

gracias a los dos por las pistas de la memoria contenida no se me habia ocurrido que eran diferences bloques en cada modelo.
Avatar de Usuario
Spirax !Sinclair 1
Demonio tercer orden
Demonio tercer orden
Mensajes: 715
Registrado: 09 Oct 2017, 17:03
Ubicación: Leganes (Madrid)
Has thanked: 24 times
Been thanked: 46 times

Re: help needed con rutina de carga rapida. (Solucionado)

Mensaje por Spirax »

Hola.

pues par que le echeis un vistazo a la rutina de carga tan mona que me ha quedado, jijiji

lo que hace.
carga un programita en basic que pone, borde, pantalla, y tinta a 0, asi como un poke para cambiar la variable del sistema del border tambien a 0.
despes carga el codigo con la rutina, como es para pruebas (aun) no me he molestado en meterla dentro del programa basic

despues el codigo lo que hace es generar una tabla con las direcciones de inico de cada linea de la pantalla y los atributos por linea.
pone el borde a azul/negro en la detecion del sincronismo y salta a la rutina de detecion de cabecera.
cuando la detecta cambia el borde a negro/negro y salta a la carga de pantalla.
al terminar la carga de la pantalla cambia el borde a negro/verde salta a la carga de datos.

nota los datos son una segunda pantalla que se carga en memoria y al termina si todo fue bien hace un ldir para ponerla en pantalla.

como no se si se puede distrubuir pantallas de juegos he puesto dos que cree en su dia para ponerlas en la distribucion de retrorange pi como video de inicio.

espero que os cargue bien :)
a ver que os parece el turbo.
yo lo cargo con tzxduino y me van de perlas. la velocidad es aprox de unos 4500bps.

por ejemplo el manic miner, desde darle al play inicial con cargador y todo tarda unos 55 segundos en un spectrum sin modificar :twisted:
saludos
Nota: llevo decadas sin programar, y es de lo que me acuerdo de Codigo maquina del z80. estoy seguro que es mejorable, sobre todo la parte de calculo de direcciones en vivo, queno fui capaz ya que doy muchas vueltas y se me desincronizaban los bits, al final me tuve que crear la tabla para los efectos de pantalla y una segunda parte de la rutina de carga para los datos.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Responder

Volver a “Sinclair”