Título: Detectar VDP V9938 Publicado por: aorante en 01 de Junio de 2010, 04:48:03 pm Hola compañeros!
Tengo una duda sobre hardware: Tengo un yamaha MSX1 cx5MII que como el Spectravideo SVI-738, dispone del VDP V9938 de los MSX2. En el proyecto en el que estoy metido (el PSGed), quiero detectar si es uno de estos ordenadores o un MSX2 (o sup), para cambiar la paleta de colores. Como puedo detectarlo el tipo de VDP? Tengo si es un modelo superior a la primera generación y he probado en el yamaha el cambio de paleta y funciona correctamente. Pongo la rutina por si identificáis algún error o mejora (en formato SDCC): Código: void setPalette() { __asm ld hl,#PALETTE xor a di out (#0x99),a ld a,#144 out (#0x99),a ld bc,#0x209A otir ei ret PALETTE: ; RB,G .db 0x00,0 .db 0x00,0 ; black .db 0x33,3 ; medium green .db 0x00,7 ; light green .db 0x05,0 ; dark blue .db 0x27,3 ; light blue .db 0x60,0 ; dark red .db 0x07,7 ; cyan .db 0x70,0 ; medium red .db 0x72,2 ; light red .db 0x60,6 ; dark yellow .db 0x74,7 ; light yellow .db 0x11,6 ; dark green .db 0x34,0 ; magenta .db 0x55,5 ; gray .db 0x77,7 ; white __endasm; } Título: Re: Detectar VDP V9938 Publicado por: mohai en 01 de Julio de 2010, 05:15:16 pm Si quieres detectar el chip de video que tiene un MSX, creo recordar que simplemente hay que leer un registro (creo que el 0), y uno de los bits te indica si es 9918/9928 o 9938.
Título: Re: Detectar VDP V9938 Publicado por: SapphiRe_MSX en 01 de Julio de 2010, 05:31:09 pm Si quieres detectar el chip de video que tiene un MSX, creo recordar que simplemente hay que leer un registro (creo que el 0), y uno de los bits te indica si es 9918/9928 o 9938. Ojalá fuera tan sencillo, pero no. La diferencia entre el VDP del MSX1 y el del MSX2 es que el del MSX2 tiene más registros, así que lo que se puede hacer es intentar localizar si la BIOS del MSX se dedica a escribir en ellos... Esto es lo que hace, por ejemplo, Ramones en el tutorial de manejo del ratón que publicó hace tiempo por aquí. Como no tengo tiempo y estoy perro, no tengo ganas de buscarlo aquí, así que os paso el enlace a la web de Konamito donde está: http://www.konamito.com/wp-content/uploads/2009/11/tutorial_armando4.rar Título: Re: Detectar VDP V9938 Publicado por: aorante en 01 de Julio de 2010, 05:43:30 pm Gracias Sapphire!
Aprovechando que Ramones estaba en la RU, hablamos del tema y me explico como lo resolvió para el Spectravideo SVI-738. Es lo que dices tu, de buscar una cadena en la bios, donde se accede a estos registros. En el caso del Yamaha CX5MII, que yo sepa, solo utiliza el V9938 para permitir las 80 columnas en screen 0. Título: Re: Detectar VDP V9938 Publicado por: SapphiRe_MSX en 01 de Julio de 2010, 06:36:02 pm Aprovechando que Ramones estaba en la RU, hablamos del tema y me explico como lo resolvió para el Spectravideo SVI-738. Es lo que dices tu, de buscar una cadena en la bios, donde se accede a estos registros. ¿No te funciona? Citar En el caso del Yamaha CX5MII, que yo sepa, solo utiliza el V9938 para permitir las 80 columnas en screen 0. Pues deberías buscar la cadena adecuada en tal caso :P Título: Re: Detectar VDP V9938 Publicado por: aorante en 01 de Julio de 2010, 06:58:09 pm No me he puesto con este tema, ya que busqué una opción alternativa: un menú de configuración donde se puede indicar la vdp usada (en ambos casos lo que hace es solamente cambiar la paleta).
Lo que no se es como responderá si se toca esta opción en un MSX sin el V9938. En el emulador se ven los sprites ok, pero el resto todo negro :P (http://3.bp.blogspot.com/_82S9Tngrad8/TCx2jsUuoCI/AAAAAAAAA3A/Rzm_oadWevA/s320/PSGed_v062a_0.png) Título: Re: Detectar VDP V9938 Publicado por: Jon_Cortazar en 02 de Julio de 2010, 04:44:01 am (http://3.bp.blogspot.com/_82S9Tngrad8/TCx2jsUuoCI/AAAAAAAAA3A/Rzm_oadWevA/s320/PSGed_v062a_0.png) PINTAZA :o Título: Re: Detectar VDP V9938 Publicado por: pitpan en 02 de Julio de 2010, 11:35:27 am La solución para detectar si el procesador es superior a un TMS99xx consiste en verificar si la BIOS inicializa registros correspondientes a un V99X8. Si detectamos que es así, entonces puedes llamar directamente a uno de los comandos del VDP y te indicará un número de versión, que será 0 para V9938, 1 para V9958 y así sucesivamente, aunque haya poca sucesión.
Título: Re: Detectar VDP V9938 Publicado por: mohai en 07 de Julio de 2010, 08:01:00 pm Se me ocurre otra manera, un poquito compleja, pero creo que funcionaría:
Activa el Screen 1. Activa el bit M4 (Si es TMS9918, no hará nada, si es V99x8, activará el Screen 4). Alinea 5 sprites en horizontal. Espera una INT. Lee el registro de estado 0. ¿Se ha activado el bit de 5º sprite? Si no es así, es V99x8. Título: Re: Detectar VDP V9938 Publicado por: MsxKun en 07 de Julio de 2010, 08:20:06 pm ¿Se ha activado el bit de 5º sprite? Si no es así, es V99x8. Pero es que ese bit al final no era 100% fiable... Título: Re: Detectar VDP V9938 Publicado por: aorante en 07 de Julio de 2010, 09:41:34 pm @mohai, el sistema me parece muy lioso, pero es muy ingenioso!! :)
a lo mejor hay una forma más sencilla utilizando tu idea... Gracias por el esfuerzo! Título: Re: Detectar VDP V9938 Publicado por: mohai en 09 de Julio de 2010, 01:08:59 pm ¿Se ha activado el bit de 5º sprite? Si no es así, es V99x8. Pero es que ese bit al final no era 100% fiable... Título: Re: Detectar VDP V9938 Publicado por: mohai en 09 de Julio de 2010, 01:15:05 pm ¿Se ha activado el bit de 5º sprite? Si no es así, es V99x8. Pero es que ese bit al final no era 100% fiable... Gracias! Se me ocurrió de repente. Ahora mismo se me ocurre otra forma, usando el BIOS: Poner el modo 80 columnas (ignoro si el BIOS, aunque sea un MSX 1 lo soportaría...). Si devuelve un error, no hay V9938. Seguro que hay otras maneras: Leer algún registro de estado del V9938 (se colgaría si es TMS9918?), intentar leer/escribir en una zona de VRAM mas allá de las 16 K, escribir/leer en los registros de de paleta ... Desde luego la manera más fácil es leer el BIOS, pero en el caso de los Yamaha y Spectravídeos sin modificar, el BIOS dice que es MSX1. En estos casos sólo habría que contar con 16K de VRAM. Título: Re: Detectar VDP V9938 Publicado por: aorante en 09 de Julio de 2010, 01:31:50 pm Esto de las 80 columnas tiene muy buena pinta...
En el caso del Yamaha, desde basic si pone a 80 columnas funciona, pero como se hace en asm? Título: Re: Detectar VDP V9938 Publicado por: MsxKun en 09 de Julio de 2010, 02:17:44 pm ¿Se ha activado el bit de 5º sprite? Si no es así, es V99x8. Pero es que ese bit al final no era 100% fiable... Es que aun asi creo recordar que Armando comento algo al respecto, que el se habia hecho una rutina de rotacion de sprites con ello y acabo descubriendo que no era siempre fiable... El topic deberia andar por aqui, a ver si lo encuentro... Título: Re: Detectar VDP V9938 Publicado por: aorante en 26 de Noviembre de 2010, 02:40:20 pm hace unos días que encontré este topic en los foros del MRC sobre el tema de la detección del VDP. NYYRIKKI da una forma de detectar varios VDP (V9938, TMS99XX y V9958)
http://es.msx.org/forumtopic10770.html Título: Re: Detectar VDP V9938 Publicado por: aorante en 02 de Diciembre de 2010, 04:29:46 pm Los que desarrolléis en SDCC la función (en ASM) quedaría así:
La función es una evolución de la desarrollada por marq de Lieves!Tuore (http://www.kameli.net/lt/) en su librería para desarrollo en SDCC para MSX y la dada por Nyyrikki en el foro de la MRC. Lieves!Tuore es un grupo demoscene de MSX de Finlandia. / Código: / identifica el tipo de VDP (6=TMS99XX. 0=V9938, 4=V9958) char getVdp(void) // Thanks to Nyyrikki { __asm ; Read status register 1 di ld A,#1 out (0x99),A ld A,#0x8F out (0x99),A in A,(0x99) push AF xor A out (0x99),A ld A,#0x8f out (0x99),A pop AF ei ; Return VDP number and #0b00000110 ;110 ld L,A ; VDP number in register A __endasm; Título: Re: Detectar VDP V9938 Publicado por: Sd-Snatcher en 02 de Diciembre de 2010, 11:25:33 pm ¿Y la libreria SDCC de Lieves!Tuore donde se puede encontrar?
Título: Re: Detectar VDP V9938 Publicado por: aorante en 03 de Diciembre de 2010, 12:31:50 am en la web del grupo, en varios de sus proyectos, ponen los fuentes que incluyen la librería, como en la demo Atsaas:
http://www.kameli.net/lt/prod.htm http://www.kameli.net/lt/devel.html Título: Re: Detectar VDP V9938 Publicado por: Sd-Snatcher en 03 de Diciembre de 2010, 01:03:37 am Muchas gracias.
|