Colocar RAM en la página 0

Por Mustang

Resident (49)

imagem de Mustang

06-06-2020, 23:09

Buenas a todos de nuevo. En la ROM que estoy haciendo necesito sustituir la página 0 de la memoria que ve el Z80 (la que contiene la BIOS al arrancar) por memoria RAM y dejarla permanentemente allí. Obviamente sé que no puedo hacer ninguna llamada a la BIOS en mi programa y que tengo que poner mi rutina ISR en 38h que dé servicio a las interrupciones en modo IM1 antes de activarlas. Todo eso ya está hecho, me funciona y no es problema. Pero me surgen unas dudas:

Primero. Tras sustituir la BIOS por RAM y buscando aprovechar el máximo posible de memoria disponible estoy colocando la pila en la dirección 0xFFFF de la RAM, que está situada en la página 3. ¿Se puede hacer esto con seguridad pues al no tener BIOS no se van a necesitar las variables del sistema y demás que empiezan justo debajo? ¿O hay alguna razón por la que pese a no utilizar la BIOS en ningún momento no deba de hacerlo y deba seguir colocando la pila en la dirección segura 0xF380?.

Segundo. Supongamos que la ROM es para un MSX2 o superior. El mínimo de RAM de esas máquinas tengo entendido que va a ser siempre 64K, ¿no?. Lo que estoy haciendo ahora mismo por no complicarme más es ver en qué slot y subslot está la RAM que el sistema ya coloca en la página 3 al arrancar y colocar el mismo slot y subslot en la página 0. Me parece haber leído, no recuerdo donde, que a partir de un MSX2 siempre se cumplía que la RAM estaba en el mismo slot y subslot. ¿Esto es realmente así o lo he leído yo mal?. El caso es que me funciona perfectamente tanto en mi Philips NMS 8280 como en varias máquinas que he probado en el openMSX. Pero la duda que tengo es, ¿se cumple esto SIEMPRE o existen MSX2 o superior donde la RAM que se puede colocar en la página 0 se encuentre en un slot y/o subslot diferente al de la RAM ya colocada en la página 3?.

Tercero. Qué hacer si no se cumple siempre lo anterior, o si queremos hacer lo mismo en un MSX1. Aquí sé que la cosa se complica. Lo primero es que imagino que en un primera generación sólo puedo ver RAM en la página 0 si el equipo tiene 64K, sino es imposible, ¿no?. Lo segundo es que aquí sí que sé que es seguro que me voy a encontrar equipos donde la RAM está en slots/subslots diferentes a la colocada en la página 3. Bien, he leído que lo que se hace es ir probando a colocar en la página deseada todos los slots/subslots posibles y hacer la comprobación de lectura/escritura/lectura/escritura en 16 posiciones consecutivas de memoria con el valor que contienen y su complemento a ver si se puede o no. Si te deja es que has encontrado RAM, sino a probar otro banco. ¿Este es el procedimiento correcto/habitual de hacerlo? ¿No tiene algún peligro el intentar leer/escribir en lo que quiera que sea que haya conectado en esos slots/subslots que desconocemos a priori lo que contienen?. Gracias.

Entrar ou registrar-se para comentar

Por Manel46

Paladin (674)

imagem de Manel46

07-06-2020, 09:49

La pila la puedes situar donde quieras de la ram. Pero no en 0xFFFF, Esta dirección es un port que controla los suslots.
Esto de colocar el mismo subslot de pa página 3 en la página 0, te funcionará en la mayoria de los casos. Claro, en máquinas de 64 KBs de ram, siempre y cuando esté de forma lineal. En algun caso no se cumple esto.
Por ejemplo en mi Tohiba HX-20, donde la ram visible páginas 2 y 3 está en el slot 0. Y la ram oculta páginas 0 y 1, en el slot 3 subslot 0.

Por Mustang

Resident (49)

imagem de Mustang

07-06-2020, 19:18

Gracias por la respuesta Manel46. Sí, en los MSX1 ya soy consciente de que voy a tener que buscar sí o sí la memoria por los slots/subslots del sistema porque hay equipos que no la tienen lineal. La duda que me queda es si en los MSX2 y superior puedo ahorrarme esta búsqueda, ya que creo (aunque no estoy seguro) que ahí sí se cumple esa norma.

Lo del la dirección 0xFFFF de control de subslots lo conozco, es que no me he explicado bien. Lo que quería decir es que hago un LD SP,0xFFFF para que la primera dirección que se escriba en la pila sea la 0xFFFE, para no machacar precisamente el registro de control de subslots. Si dices que puedo ponerla donde quiera, perfecto, me quedo ya tranquilo.

Por Manel46

Paladin (674)

imagem de Manel46

08-06-2020, 17:30

Ok Mustang. La pila la puedes colocar donde te apetezca de la ram. Incluso en la página 0. Siempre y cuando no conectes la bios ya mas.
Ten en cuenta que hay MSX1 que solo tienen 8 o 16 KBs de ram.
No estoy seguro si hay algún MSX2 que no tenga la ram de forma lineal.

Por Juan Luis

Master (147)

imagem de Juan Luis

09-06-2020, 16:10

Mustang, respecto a lo de buscar la memoria probando a escribir valores y luego leyéndolos, sí, se hace así.

Desactiva las interrupciones antes de la escritura del valor, y tras las pruebas en ese posible segmento de RAM, restaura el valor si es que era RAM y habilita las interrupciones. Como medida adicional, trata de hacer la prueba en una dirección de memoria (acorde a la página del Z80 donde la hayas mapeado) que no coincida con la de ningún ROM mapper.

Normalmente, el primer byte del segmento no suele tener ningún mapper.

En esta página tienes las direcciones de memoria de los mappers más habituales:
http://bifi.msxnet.org/msxnet/tech/megaroms

Por Mustang

Resident (49)

imagem de Mustang

09-06-2020, 20:34

Gracias por las respuestas. No había caído en tener en cuenta lo de los ROM mapper, podría ser un problema si en la búsqueda de RAM escribes en una dirección que cambie los bancos de un ROM mapper, que buen truco.

Por Manel46

Paladin (674)

imagem de Manel46

20-06-2020, 12:24

Huso página 0, para mis roms con OPL4, para situar allí el replayer, que es extenso y con tablas grandes. En nuestra rom "msx in a row!" tambien el replayer moonblaster 1.4.
Estos siempre deben estar presentes. Claro, en un megarom, vamos conmutando bancos en página 2, para cargar gráficos, y los replayers se deben ver en todo momento, si no se cortaría la música.
En la página 1 solo hay las rutinas.
Para situar la ram, uso "rominit64" rutina del genial "artrag". Si no la encuentras ponme un correo y te la paso.

Por Mustang

Resident (49)

imagem de Mustang

20-06-2020, 18:58

La he podido encontrar. Le he echado un vistazo y está genial. Gracias por el aporte.