Karoshi MSX Community
05 de Julio de 2021, 08:12:54 pm *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: LDIRVM desde DOS  (Leído 6505 veces)
0 Usuarios y 1 Visitante están viendo este tema.
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« : 24 de Marzo de 2009, 07:18:46 pm »

Pues eso, que he empezado a trastear un poco con el DOS y encuentro problemas con esta rutina. Uso la función 001Ch del DOS y va bien con otras referidas al VDP, como CHGMOD, FILVRM, WRTVDP, INIGRP o WRTVRM, por ejemplo. Todas van como debieran. Pero a la hora de usar LDIRVM la cosa no chuta. Pasa la cantidad de bytes indicada al sitio indicado, pero lo que pasa no tiene nada que ver con la fuente.  Huh ¿Hay que tener algo en cuenta en especial con esta rutina?

Estoy usando AsMSX y probando en el BlueMSX, tanto MSX1 como MSX2.

un saludo.
En línea

sempre fun un valente corredor
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #1 : 24 de Marzo de 2009, 08:37:20 pm »

Te doy una pista: ¿verdad que los datos que tienes que copiar están por debajo de la posición 4000h de memoria? Ten en cuenta que cuando activas con una llamada la rutina LDIRVM, la página 0 (0000h-3FFFh) apunta al slot 0-0 (o el que corresponda) con las 16 KB de BIOS.

Resumo el chorizo de arriba: estás copiando el contenido de la BIOS a VRAM y no los datos que tú quieres. ¿Cómo solucionarlo? Pasar los datos a copiar a una posición por encima de 4000h con un LDIR de forma previa y después llamar a LDIRVM tal y como lo vienes haciendo.

A mi también me pasó en su momento Sad
En línea
SapphiRe_MSX
Visitante
« Respuesta #2 : 24 de Marzo de 2009, 10:21:49 pm »

A mi también me pasó en su momento Sad

y a mí... Grin Grin
En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #3 : 24 de Marzo de 2009, 11:39:09 pm »

Ostras! Pues es verdad! Ya me podía yo comer el tarro que no me daba cuenta. Con lo obvio que parece, jeje. Gracias!
En línea

sempre fun un valente corredor
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #4 : 25 de Marzo de 2009, 09:22:18 am »

Son las típicas cosas que te dejan pegado al ordenador durante horas tratando de depurar un error inexistente. Y al descubrir uno la solución, el pensamiento que se te enciende con luces de neón en plena meninge es: "DUH!".

De todos modos, muy bien si ya has aprendido a usar las llamadas de la BIOS desde MSX-DOS a través de CALSLT. Aunque si no recuerdo mal, el asMSX tiene una macro para hacer todo el proceso (LD IY,[EXPTBL]; LD IX,RUTINA; CALL CALSLT) de una vez. A mi me costó lo mío llegar hasta aquí Wink

Y sigo sin usar MSX-DOS Sad

Insisto: el peor proceso de depuración al que me he sometido fue durante el desarrollo del GRIEL'S QUEST. Forzaba un modo mixto (!) y ponía el bit que indica en los registros del VDP si están instaladas 4 o 16 KB. Como los valores a escribir en los registros los había copiado, no entré en su análisis, y buscaba escrituras espurias a VRAM. Lo que sucedía era que la VRAM superior a 1000h no era refrescada y al cabo de un tiempo, se degradaba su contenido, por lo que los gráficos se corrompían de forma continuada incluso sin escribir ni un byte a VRAM. Fueron muchas horas las que perdí hasta que me di cuenta. Además, para hacerlo fácil, en muchos MSX sí que funcionaba bien porque la VDP ignoraba este bit (clónicos del TMS, todos los V99xx, etc.).
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #5 : 25 de Marzo de 2009, 12:26:36 pm »

Como newbie de Karoshi no acabo de entender como e_sedes usa esas rutinas:

Cuando arranco en modo MSX-DOS, tengo los 64ks de RAM, el programa empieza en 0100h. Eso es dirección de primeros bytes, osea pilla en la pagina 0. Si dentro de mi codigo cambio la pagina 0 al slot 0, para tener la BIOS y acceder a sus rutinas,...¿ no deberia colgarse mi programa ya que el PC esta indicando una posición de pagina 0 ?
Seguramente entienda mal las llamadas a BIOS des de DOS  Huh
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #6 : 25 de Marzo de 2009, 12:32:06 pm »

Las llamadas inter-slot (interslot calls) gestionan todo esto. Es decir, hay una función de MSX-DOS que se ocupa de gestionar la llamada y el retorno al estado original. Evidentemente, si desde un código en página 0 se cambia "a pelo" el slot de la misma página, el resultado no será bueno.
Pero en el caso de una llamada inter-slot, el propio sistema operativo se encarga de tomar las medidas necesarias para devolver la ejecución al punto adecuado del programa una vez restituida la página oportuna.

Si no he sido suficientemente claro, plantéame un ejemplo y lo diseccionaremos aquí entre todos para aclarar los conceptos.
En línea
SapphiRe_MSX
Visitante
« Respuesta #7 : 25 de Marzo de 2009, 12:58:27 pm »

Evidentemente, si desde un código en página 0 se cambia "a pelo" el slot de la misma página, el resultado no será bueno.

Pues yo cambio "a pelo" el contenido de la página 1 (un mapper de cartucho, no el slot) desde la propia página 1 y funciona perfectamente... Con eso quiero decir que se puede hacer ese tipo de cambios, pero que hay que tener MUCHO cuidado con lo que se hace... no es recomendable.

Por si tenéis curiosidad, me refiero a esto: http://z80st-software.blogspot.com/2008/12/48k-lineales-en-el-cartucho-flash-de.html
En línea
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #8 : 25 de Marzo de 2009, 04:15:50 pm »

Me he leido tu articulo...
Y mi nivel hace que aún entienda solo la mitad de lo q leo Smiley Pero estoy contento de saber de lo q hablar que ya es mucho para mi.

Me tengo q mirar eso de las llamardas interslot a ver q tal, que aunque aun no se cuanto va a ocupar la produccion que tenemos entremanos, mejor estar prevenido por si hay q "switchear" paginas por falta de espacio.

Y volviendo al tema : ¿ Siempre LDIRVM coge los bytes del mismo slot donde esté la BIOS ?
lo pregunto por esta frase de pitpan :
"...apunta al slot 0-0 (o el que corresponda) con las 16 KB de BIOS." Pero esto no me parece posible, porque según tengo entendido la BIOS y la RAM no están en el mismo slot. La Bios es 0 y la RAM es 1 o otro no ?

Quizas parece q no me he leido los tutoriales del tema que hay en el foro de desarrollo, pero os doy fe que si  Roll Eyes quizas estoy un poco empanao y aun no veo la luz al final del camino.
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
SapphiRe_MSX
Visitante
« Respuesta #9 : 25 de Marzo de 2009, 04:27:20 pm »

Y volviendo al tema : ¿ Siempre LDIRVM coge los bytes del mismo slot donde esté la BIOS ?

No. LDIRVM coge los bytes de la memoria tal y como esté en el momento de llamar a la rutina, sin tocar para lada los slots.

Citar
lo pregunto por esta frase de pitpan :
"...apunta al slot 0-0 (o el que corresponda) con las 16 KB de BIOS." Pero esto no me parece posible, porque según tengo entendido la BIOS y la RAM no están en el mismo slot. La Bios es 0 y la RAM es 1 o otro no ?

Claro. Cuando haces una llamada inter-slot a la BIOS, la BIOS se pone en su sitio (slot 0-0 en la página 0) y luego si llamas a LDIRVM, tendrás la página 0 posicionada ahí. A eso se refería Pitpan.
En línea
e_sedes
Karoshi Maniac
****
Mensajes: 442



Email
« Respuesta #10 : 26 de Marzo de 2009, 12:54:06 am »

De todos modos, muy bien si ya has aprendido a usar las llamadas de la BIOS desde MSX-DOS a través de CALSLT. Aunque si no recuerdo mal, el asMSX tiene una macro para hacer todo el proceso (LD IY,[EXPTBL]; LD IX,RUTINA; CALL CALSLT) de una vez. A mi me costó lo mío llegar hasta aquí Wink
Pues si, uso .CALLBIOS del asMSX  Wink
Pues yo cambio "a pelo" el contenido de la página 1 (un mapper de cartucho, no el slot) desde la propia página 1 y funciona perfectamente... Con eso quiero decir que se puede hacer ese tipo de cambios, pero que hay que tener MUCHO cuidado con lo que se hace... no es recomendable.
Si es que os va el vicio cosa mala  Grin Wink
En línea

sempre fun un valente corredor
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #11 : 26 de Marzo de 2009, 09:57:39 am »

Resumo muy rápido:

LDIRVM sólo puede leer de la memoria visible al procesador. Si estamos ejecutando LDIRVM, eso quiere decir que en la página 0 (0000h-3FFFh) tenemos la BIOS. Por lo tanto, los datos a copiar deberán encontrarse siempre en las páginas 1 a 3 (4000h-FFFFh), salvo que queramos copiar parte de la BIOS a VRAM. En realidad, esto último no es tan extraño, porque nos podría interesar copiar el juego de caracteres de la BIOS, que se encuentra almacenado en la misma BIOS Wink

Otro apunte: aunque no es lo habitual, en algunos ordenadores, BIOS y RAM están en un mismo slot, aunque, evidentemente, en páginas diferentes. Por ejemplo, el extrañísimo Pioneer PX7 tiene en 0-0 la BIOS, en 0-1 el BASIC, y en 0-2 y 0-3 RAM. En 1-1 tiene una extensión del BASIC para hacer algunos efectos en plan PowerPoint básicos. Y los slots 2 y 3 asignados a las ranuras de cartucho. Efectivamente, se trata de un pedazo de ordenador que incomprensiblemente viene con sólo 32 KB de RAM Sad
En línea
k0ga
Karoshi Fan
**
Mensajes: 85


Email
« Respuesta #12 : 13 de Abril de 2009, 08:36:44 pm »

A mi también me pasó en su momento Sad

y a mí... Grin Grin


A mi lo que me paso fue poner el codigo de la irq en la pagina 0 xD
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!