Recuperar gráfico de pantalla tras la carga

Moderador: Fundadores

Avatar de Usuario
Fermars
Demonio segundo orden
Demonio segundo orden
Mensajes: 1195
Registrado: 20 Feb 2014, 16:58
Ubicación: El Escorial
Been thanked: 3 times

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Fermars »

Lo siento chicos, pero ni el listado de Bubu ni el listado de Elfoscuro funcionan. Está claro que las direcciones de memoria iniciales para cargar las pantallas son demasiado bajas y el basic las machaca tal y como ha sugerido Sinclair.
En el caso del listado de elfoscuro, ya consigo llegar un poco "más allá" subiendo un poco las direcciones pero después me marca otro error de fuera de rango en la línea 300 que no se solventar.
Por otro lado, en el caso del listado de Bubu he aumentado en 10000 (que no se si se puede hacer así al tuntún) todos los valores y ahora funciona, al finalizar de cargar las pantallas y pulsar las teclas 1, 2 y 3 puedo cargar los distintos gráficos pero se muestran fatal. Este es el listado (he añadido algunas pausas para confirmar las cargas) y el error al pulsar el número 2. Con el número 1 la pantalla está en negro y el 3 tiene un resultado similar al 2:

Hago un LIST para mostrar el listado completo:

Imagen

Imagen

Imagen

Estoy seguro que en este caso tengo que cambiar algún valor más, pero sinceramente no se cual. ¿alguna idea?
Fernando
Avatar de Usuario
Bubu
Demonio segundo orden
Demonio segundo orden
Mensajes: 1125
Registrado: 02 May 2013, 20:35

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Bubu »

Voy a picar el código y te cuenco, es que te puse el código sin probarlo si quiera, mea culpa...
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
Avatar de Usuario
Fermars
Demonio segundo orden
Demonio segundo orden
Mensajes: 1195
Registrado: 20 Feb 2014, 16:58
Ubicación: El Escorial
Been thanked: 3 times

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Fermars »

Bubu escribió:Voy a picar el código y te cuenco, es que te puse el código sin probarlo si quiera, mea culpa...
Si lo vas a probar en un emulador, no te molestes. Te paso el sna para que no pierdas tiempo.


https://dl.dropboxusercontent.com/u/172 ... screen.sna
Fernando
Avatar de Usuario
Bubu
Demonio segundo orden
Demonio segundo orden
Mensajes: 1125
Registrado: 02 May 2013, 20:35

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Bubu »

OK, se chocaba el código en BASIC con la rutina en código máquina y las pantallas. Lo he reubicado todo y ya va bien. Eso sí, te cabrán 5 pantallas y no 6. Si quieres más de 5 pantallas tendrás que usar las rutinas de compresión de MH, pero eso es ya otra historia.

Código: Seleccionar todo

10 LOAD "" CODE 25856, 6912
20 LOAD "" CODE 32768, 6912
30 LOAD "" CODE 39680, 6912
... etc ...
100 RESTORE 110: FOR N=0 to 11: READ A: POKE 25000+N, A: NEXT N
110 DATA 17, 0, 64, 33, 0, 0, 1, 0, 27, 237, 176, 201
120 LET K$=INKEY$: IF K$="" THEN GOTO 120
210 IF K$="1" THEN LET A=0: LET B=101
220 IF K$="2" THEN LET A=0: LET B=128
230 IF K$="3" THEN LET A=0: LET B=155
... etc ...
300 POKE 25004, A: POKE 25005, B
310 RANDOMIZE USR 25000
320 GOTO 120
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
Avatar de Usuario
Bubu
Demonio segundo orden
Demonio segundo orden
Mensajes: 1125
Registrado: 02 May 2013, 20:35

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Bubu »

Ah, en tu ejemplo anterior preguntabas que qué te faltaba por tocar. Pues te faltaban las variables A y B, que le dicen al código máquina dónde tienes cada pantalla. Si p.ej. la pantalla 1 la tienes en la dirección 34000, tienes que hacer las siguientes operaciones para calcular A y B:

B = INT (d/256)
A = d - 256*B

Así, para el caso 34000 tendríamos:

B = INT (34000/256) = 132
A = 34000 - 256*132 = 208
Última edición por Bubu el 15 Abr 2014, 13:48, editado 2 veces en total.
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
Avatar de Usuario
Fermars
Demonio segundo orden
Demonio segundo orden
Mensajes: 1195
Registrado: 20 Feb 2014, 16:58
Ubicación: El Escorial
Been thanked: 3 times

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Fermars »

Ahora sí, funciona perfectamente ¡gracias!. Para intentar que A y B se calcule solo, he metido los valores de dirección en variables y así puedo cambiar las direcciones en una línea de manera que B se calcula como INT (p1/256) y esto me va bien pero, no entiendo como sacas el valor de A. ¿No es cada uno de los valores de 110 de forma sucesiva? A ti además, siempre lo pones como que vale 0...
Fernando
Avatar de Usuario
Bubu
Demonio segundo orden
Demonio segundo orden
Mensajes: 1125
Registrado: 02 May 2013, 20:35

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Bubu »

A es el resto de dividir la dirección entre 256. A mí me sale 0 porque he escogido una dirección cuyo resto da 0: si divides 25856 entre 256, verás que de resto sale 0. Por eso B=0 en mi caso. Pero si tu dirección es la 34000, el resto es 208.
En forma de variables, sería así:

LET B = INT(P1/256)
LET A = P1 - 256*A

Y una vez tienes la A y la B de P1, las de P2 y sucesivas serían ir sumando 27 a la variable B.
Última edición por Bubu el 15 Abr 2014, 13:49, editado 1 vez en total.
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
Avatar de Usuario
Fermars
Demonio segundo orden
Demonio segundo orden
Mensajes: 1195
Registrado: 20 Feb 2014, 16:58
Ubicación: El Escorial
Been thanked: 3 times

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Fermars »

Perdóname Bubu, tengo un fallo de concepto... me queda claro que B es el resultado de la división sin decimales y A es precisamente el valor del resto de la división.
B lo tengo definido exactamente así en el listado y funciona con A = 0, pero cuando pongo que A vale P1 - 256*A, me da un Integer out of range 300:1.

En LET A = P1 - 256*A, el valor del segundo "A" que se multiplica con 256 ¿de donde sale? supongo que son los valores de DATA de la línea 110, pero no estoy seguro porque sinceramente, nunca he usado RESTORE y READ, que supongo que serán la clave del temita...
Fernando
Avatar de Usuario
Bubu
Demonio segundo orden
Demonio segundo orden
Mensajes: 1125
Registrado: 02 May 2013, 20:35

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Bubu »

Perdón, Fermars, que estoy empanao, AjAJJAjA, quise decir:

LET B = INT(P1/256)
LET A = P1 - 256*B
Si algo funciona... no lo toques. ¡¡Pero ni de coña!!
Avatar de Usuario
Fermars
Demonio segundo orden
Demonio segundo orden
Mensajes: 1195
Registrado: 20 Feb 2014, 16:58
Ubicación: El Escorial
Been thanked: 3 times

Re: Recuperar gráfico de pantalla tras la carga

Mensaje por Fermars »

Jajajaj, me voy a volver loco :P :P, menos mal que todavía me queda algo de razón . Ahora ya me cuadra todo. Lo que pasa es que para que funcione está claro que le tengo que poner en el listado el valor de B antes que el valor de A. ¡Ya funciona coño! :D :D

Si me surge algo nuevo ya os lo preguntaré, pero de momento con esto ya me sirve. Investigaré un poco más el listado de elfoscuro también, que tiene que funcionar.
¡Gracias!
Fernando
Responder

Volver a “Sinclair”