Ayuda con los slots

Página 1/3
| 2 | 3

Por FX

Champion (264)

Imagen del FX

29-07-2013, 14:13

Hola. Ante todo comentar que he intentado mirar lo que he podido en webs, pero no he encontrado nada que me pueda ayudar, o por lo menos que haya podido "traducir" para enterarme para hacer lo que os comento.
Supongo que los muchos que estais por aquí podreis darme un poco de luz en esto. Mi cabeza ya esta a punto de explotar... jejejeje
Lo que necesito hacer es una rutina que en la pagina 3, pueda buscar ram en la pagina 0 y 1 y los guarde. Intento hacer que sea lo más compatible posible con cualquier MSX y entonces tengo que comprobar cambiando slots con FFFF. He encontrado una rutina que he adaptado a lo que quiero hacer, pero está hecha para trabajar en la pagina 2, y cambia la pagina 3 al hacer las comprobaciones.
1. No se puede usar FFFF sin cambiar esta pagina 3?
2. Que tengo mal en mi rutina para que no me cambie esta pagina 3?

Muchas gracias a todos por adelantado
Un saludo
Felix

Entrada:
							di
							ld a,(ffffh)
							cpl
							ld (_fffforig),a
							push af
							in a,(a8h)
							ld (_memorig),a
							push af
							and 30h
							ld b,a
							in a,(a8h)
							and f0h
							dec a
							ld hl,0010h
_bucle1:
							inc a
							out (a8h),a
							ld c,a
							ld a,(hl)
							cpl
							ld (hl),a
							cp (hl)
							ld a,c
							jr z,_ramen00
							ld e,00h
_bucle2:
							ld a,c
							rrca
							rrca
							and c0h
							or b
							out (a8h),a
							ld a,(ffffh)
							cpl
							and f0h
							or e
							ld (ffffh),a
							ld a,c
							out (a8h),a
							ld a,(hl)
							cpl
							ld (hl),a
							cp (hl)
							ld a,c
							jr z,_ramen00
							inc e
							ld a,e
							cp 04h
							jr nz,_bucle2
							ld a,c
							jr _bucle1
_ramen00:
							sub 04h
							ld hl,4010h
_bucle3:
							add a,04h
							out (a8h),a
							ld c,a
							ld a,(hl)
							cpl
							ld (hl),a
							cp (hl)
							ld a,c
							jr z,_ramen40
							ld e,00h
_bucle4:
							ld a,c
							rrca
							rrca
							rrca
							rrca
							and c0h
							or b
							out (a8h),a
							ld a,(ffffh)
							cpl
							and f3h
							or e
							ld (ffffh),a
							ld a,c
							out (a8h),a
							ld (hl),a
							cp (hl)
							ld a,c
							jr z,_ramen40
							ld a,e
							add a,04h
							ld e,a
							cp 10h
							jr nz,_bucle4
							ld a,c
							jr _bucle3
_ramen40:
							ld (_memnuevo),a
							ld a,(ffffh)
							cpl
							ld (_ffffnuevo),a
							pop af
							out (a8h),a
							pop af
							ld (ffffh),a
							ei
							ret
_fffforig:
							db 0
_memorig:
							db 0
_ffffnuevo:
							db 0
_memnuevo:
							db 0
Login sesión o register para postear comentarios

Por Guillian

Prophet (3233)

Imagen del Guillian

30-07-2013, 09:42

Felixesp wrote:

1. No se puede usar FFFF sin cambiar esta pagina 3?

No. Ese registro sirve para seleccionar el subslot del slot que haya en ese momento en la página 3. Por lo tanto, para poder ir buscando por todos los slots y subslots hay que cambiar el slot que hay en la página 3 y luego escribir en FFFF.

Felixesp wrote:

2. Que tengo mal en mi rutina para que no me cambie esta pagina 3?

No me he puesto a mirarla, pero sería buena idea que le echases un ojo al tutorial que escribió Armando sobre cómo buscar RAM en un MSX.

Por FX

Champion (264)

Imagen del FX

30-07-2013, 15:07

Hola Guillian:
Muchas gracias por responderme.
Me temía que no pudiera actuar sin cambiar esa pagina 3.
Tendré que arreglármelas para pasar la rutina a la pagina 2, aunque no sé porqué, probando en el emulador con un MSX2+, no consigo que me devuelva a la pagina inicial, y, obviamente, se bloquea, ya que no deja la BIOS ni el BASIC en su sitio. (aunque sí que encuentra la memoria RAM)
Sobre el tutorial de Armando, si que lo había visto y lo intenté adecuar (ya que no sólo necesito RAM en las paginas 0 y 1). Las partes de memoria lineal, etc... no las necesitaba. Pero no he logrado hacer que me funcione. Tendré que ponerme de nuevo con paciencia, o igual "tracear" la rom que venía incluida a ver si así lo consigo comprender.
Pondré mis experiencias por aquí, por si sirven para alguien más
Y si alguien consigue saber lo que tengo mal, bienvenido sea
Un saludo
Felixesp

Por FX

Champion (264)

Imagen del FX

31-07-2013, 00:30

Hola de nuevo:
He seguido haciendo pruebas.
Me he hecho un pequeño programa, en el que pongo el slot en FF (que es el que me da el programa en la maquina con RAM), y en FFFF, pongo el valor que me daba la anterior rutina, que es FF (lo pongo "XOReado" y entonces es 00), y perfecto, me sale RAM en pagina 0 y 1. En la misma rutina, pongo justo detrás, un OUT A8 a los valores tal cual se enciende la maquina, que son F0. y pongo en FFFF el valor inicial de la maquina (pasado con XOR), que es 8. Así si que vuelve la BIOS y el BASIC, pero con la rutina anterior nada, no hay manera. No sé porqué ocurre esto.
Esta rutina funciona bien en varias máquinas que he probado en emulador (MSX y MSX2), pero con MSX2+ (o con MSX Turbo R) es donde dá problemas. El problema lo tengo localizado, pero no sé cual es la razón para subsanarlo. La máquina que dá fallos tiene el Slot 0 expandido. El resto que funcionan tiene expandidos, pero no el 0.
Alguna idea?
Un saludo
Felixesp

Por Guillian

Prophet (3233)

Imagen del Guillian

31-07-2013, 13:47

Felixesp wrote:

Tendré que arreglármelas para pasar la rutina a la pagina 2, aunque no sé porqué, probando en el emulador con un MSX2+, no consigo que me devuelva a la pagina inicial, y, obviamente, se bloquea, ya que no deja la BIOS ni el BASIC en su sitio. (aunque sí que encuentra la memoria RAM)

Es probable que eso te ocurra porque la rutina no restaura la configuración de subslots que había en cada slot.
Mirando la rutina por encima veo que al princpio guardas la configuración de slots y la de subslots para el slot que hay en la página 3. Pero si para buscar RAM vas mirando en todos los subslots de cada slot, pero no restauras el subslot que había antes de empezar, al terminar tendrás valores incorrectos y por eso no ves la BIOS ni el BASIC.

Por FX

Champion (264)

Imagen del FX

31-07-2013, 18:54

Hola Guillian de nuevo:
Siempre en nuestra ayuda en lo que necesitamos...
Te me has adelantado a mi nuevo comentario, ya que justo ayer de noche dí con el problema.
Para dejarlo aquí comentado, por si a alguien le puede servir, sí, como dice Guillian, el problema estaba en que como se iba buscando por todas los slots y se modificaban las paginas hasta que se daba con una de RAM, los spots quedaban como querían. Al querer volver a la paginación inicial, no me daba cuenta que no tenía porqué ser la pagina 3 del mismo slot necesariamente que las de la pagina 0 y 1. (De hecho no eran y por eso el problema de que no cambiara estas dos paginas al grabar en FFFF).
Ayer después de pegarme contra una pared una y otra vez, me puse a hacer la rutina desde 0 a mi manera (aunque los puristas pensarían que se podría mejorar), ya que miro todos los slots con sus expansiones, tengan o no estas expansiones. Y después voy dejando los slots como estaban al principio antes de salir. Así funciona con cualquier máquina que he probado hasta ahora.
Ya os iré contando las cosas que iré haciendo con esta rutina.
A ver si lo que hago con ella no sólo sirve para mi satisfacción, sino que le sirve a alguna persona más...jejeje
Un saludo
Y muchas gracias Guillian!!!
Felixesp

Por DarkSchneider

Paladin (880)

Imagen del DarkSchneider

06-03-2014, 13:26

Si la terminas corregida sería un detalle que la compartieras con los demás Wink

Por manolito74

Paladin (1013)

Imagen del manolito74

11-03-2014, 23:32

Hola:

Por si te sirviera de algo échale un vistazo a este Tutorial:

http://www.msxblog.es/curso-de-desproteccion-de-programas/

Suerte & Saludetes. ;-)

Por mohai

Paladin (841)

Imagen del mohai

15-03-2014, 13:08

Hola.
Hace poco hice una rutina para hacer lo que necesitas.
Te voy a contar las ideas de las que yo partí a ver si te sirve:
Partiendo de que en entorno BASIC (o solo BIOS), estan habilitadas las paginas 2 y 3 para RAM, tu programa siempre encontrará RAM en esas páginas, así que lo cargamos en la pagina 2, que siempre va a estar habilitada.
Si quieres habilitar las 32K bajas, tendrás que buscar por todos los slots y subslots, desde el slot-subslot 0-0.
Pero, si luego quieres restaurar el BIOS, tendrás que saber antes en que slot-subslot está (por defecto, en todos los MSX está en el 0-0, pero puedes usar la variable #FCC1).
No des por seguro que todo MSX con 64K de RAM la tiene en el mismo slot-subslot, porque en la práctica no es así. Imagínate que podrías tener incluso cada página en un slot-subslot distinto...
Para leer o escribir en el registro de subslot de un slot (#FFFF), tendrás que habilitar obligatoriamente su página 3.
Si no tienes claro cómo están dispuestos los slots y subslots en un MSX, mejor hazte un dibujo o mírate los que suelen venir en los manuales.
Y no hace falta que restaures el estado de cada slot y subslot que vayas probando, porque lo que te interesa es saber donde está la RAM y dónde el BIOS.

Por manolito74

Paladin (1013)

Imagen del manolito74

15-03-2014, 14:18

Hola:

Lo que comenta Moahi viene bastante bien explicado gráfica y técnicamente en el enlace que te comentaba. Ahí se habla de la disposición de la Memoria del MSX, Slots, Subslots... etc.

http://www.msxblog.es/curso-de-desproteccion-de-programas/

Saludetes. ;-)

Por mohai

Paladin (841)

Imagen del mohai

17-03-2014, 14:47

Buenas,

efectivamente, el control de los slots viene muy bien explicado en ese artículo.
Lo que no explica es el funcionamiendo de los subslots.
Pero bueno, si tienes claro como funciona el registro #A8, te será muy fácil coprender cómo funciona el #FFFF.

salu2

Página 1/3
| 2 | 3