|
MsxKun
|
|
« Respuesta #1 : 27 de Diciembre de 2005, 03:14:11 pm » |
|
"Would it be possible to make openMSX give a big flashy warning when a program writes these hazardous values to R#7? It's known to cause hardware crashes and possible permanent damage."
O.o
|
|
|
En línea
|
-- She Bops!
|
|
|
jltursan
|
|
« Respuesta #2 : 27 de Diciembre de 2005, 04:12:40 pm » |
|
Bueno, históricamente es lo que se ha comentado siempre; pero me da la impresión de que no le ha pasado a mucha gente (a lo de cascar MSX, me refiero). De hecho a mi me funcionaban TODOS los puertos de joystick en TODOS mis MSX, uno de cada generación. Está claro que he estado jugando con la muerte... En fin, es fácil de corregir. Posiblemente hoy o mañana prepararé una nueva versión del "Caverns" con ese fallo eliminado y de paso ¡con un nuevo sistema de sfx que sustituye al (inexistente) previo, gracias a la inestimable colaboración de Wyz!. ¡Yay!
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
MsxKun
|
|
« Respuesta #3 : 28 de Diciembre de 2005, 08:57:46 pm » |
|
No indica si con el Parachuteless ha tenido el mismo problema o no (tb usa PT3), aunque yo lo probe en MSX1 durante toda la ru (osea que tiene chip de sonido, no esta en el msx-engine) y no hacia na raro. Tampoco en pruebas posteriores... Alguna forma de verificarlo seguro? En cuanto a lo de corregirlo, seria modificar el replayer de PT3? Como y donde? Ains... esto pasa por no usar el Caruso!
|
|
|
En línea
|
-- She Bops!
|
|
|
jltursan
|
|
« Respuesta #4 : 28 de Diciembre de 2005, 09:55:20 pm » |
|
Sustituyendo la rutina ROUT por esta otra : ;MSX version of ROUT (c)Dioniso ROUT: LD HL,AYREGS+Mixer LD A,[HL] AND 00111111b OR 10000000b LD [HL],A LD HL,AYREGS XOR A LD C,#A0 LOUT: OUT (C),A INC C OUTI DEC C INC A CP 13 JR NZ,LOUT OUT (C),A LD A,(HL) AND A RET M INC C OUT (C),A RET ...corriges el problema. No se si habrá algún otro método más práctico; pero a mi me vale... Para probarlo, si se supone que con el OpenMSX podían dar problemas los joysticks 1 y 2 (si el Parachuteless sólo usa teclado pues nada...) tienes ejecutarlo con un joystick virtual pinchado. Modifica lo siguiente : Al final del archivo C:\Documents and Settings\<usuario>\Mis Documentos\OpenMSX\share\settings.xml <KeyJoystick> <upkey>Q</upkey> <rightkey>P</rightkey> <downkey>A</downkey> <leftkey>O</leftkey> <buttonakey>X</buttonakey> <buttonbkey>C</buttonbkey> </KeyJoystick> Puedes dejarlo como está; pero yo prefiero estas teclas para no confundirme con el stick 0, los cursores. Una vez modificado, arranca el OpenMSX y en la consola (F10) teclea plug joyporta keyjoystick. Ahora se supone que has pinchado un joystick en el puerto 1, funciona con O,P,Q,A (si modificaste el settings.xml). Prueba el juego y si va bien, repite el proceso con el puerto 2, introduciendo en la consola unplug joyporta y plug joyportb keyjoystick. Si no te ha dado problemas durante un par de partidas y meterte por menús, pues eso es que está bien.
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
Dioniso
Visitante
|
|
« Respuesta #5 : 28 de Diciembre de 2005, 11:16:12 pm » |
|
Sustituyendo la rutina ROUT por esta otra : Lo único que hay que hacer es enmascarar los valores que se escriben al registro 7 puesto que estos valores no deberían pasar de 63 (%xx000000, no creo que haga falta explicar qué hacen estos bits). El "problema", a mí ya me han estallado 5 ordenadores (a veces la gente es increíble), es que el valor creado por el PT3 player para el registro 7 siempre escribirá el valor 0 en los dos bits más altos del registro 7. No es la forma correcta, pero tampoco supone un problema. A mí siempre me ha funcionado. Me ha bastado colocar 2 NOPs tras leer el joystick a pelo para que el valor sea el adecuado o ninguno si leo el joystick desde la BIOS. El Magical Stones 16k utiliza el PT3 player sin más, ha sido testeado en MSX1, MSX2, Turbo-R. No comprendo el alboroto. JLTursan hace lo correcto, aunque no sé si el valor a escribir debería ser siempre %10xxxxxx. Lo totalmente correcto, en cualquier rutina de sonido que maneje el registro 7 (es decir, todas) sería: 1-leer el registro 7 directamente del PSG. 2-enmascarar los dos bits más altos del valor que vayamos a escribir (valor que SÓLO debe utilizar los 6 primeros bits) con los obtenidos de leer el registro 7. 3-enviar el valor ya enmascarado al registro 7. La rutina del PT3 player, al igual que muchas otras, lo hacen de la forma más rápida posible, de eso se trata. Si fallara, obviamente, no habría que utilizarla. Pero el único fallo real viene en la teoría (no se debería hacer pero funciona perfectamente) y no sé si en algún emu. Para mí, un emu es algo muy práctico, muchísimo, pero NO es un MSX. Joder ... me estoy poniendo nervioso. Me acuerdo ahora de cuando MATRA puso el modo mixto en sus juegos y no iban en los emus. Fue aquello un fallo? Ellos se jactaban de que no funcionara el los emus y si en los MSX. Y el Seleniak? Esto sólo muestra las barreras entre los MSXs y los emus, que cada vez están más cerca. Un emu es un MSX pero sin magia. Bueno, un saludo. Parece que el PT3 player es una cosa mala. Vaya mxxrda de primer mensaje que he publicado en el fórum.
|
|
|
En línea
|
|
|
|
jltursan
|
|
« Respuesta #6 : 28 de Diciembre de 2005, 11:46:01 pm » |
|
Parece que el PT3 player es una cosa mala. Nah, ni de coña. Por lo que parece el jurado se ha propuesto destripar (y lo digo literalmente porque según parece han desensamblado código) todos los juegos y en cuanto encuentren el más mínimo problema lo van a sacar a la luz (lo cual no me parece mal). En mi juego hago una lectura secuencial de los sticks 0,1 y 2. Cualquier joystick conectado debería funcionar; pero al escribir en PSG#7 valores del tipo 00xxxxxx lo que está pasando es que el joystick 2 se va al carajo... Del Technical handbook : The 2 high order bits of R7 do not affect sound output. These are used to determine the direction of the data of two I/O ports which PSG has. When the corresponding bit is 0, the input mode is selected and, when 1, the output mode is selected. In MSX, port A is used for the input and port B for the output, so it should always be set so that bit 6 = "0" and bit 7 = "1".
Ese bit 7 es el que se va al carajo. Lo que no entiendo es como en los emuladores esto falla y en los MSX no pasaba nada de nada. EL joystick 2 funcionaba bien (o por lo menos en el NMS8245 y con un pad de la megadrive, que es el que recuerdo fijo). Bueno, lo dicho, que no tiene importancia. Editado: Acabo de darme cuenta que en el TH está mal explicado; así que corrijo la cita del texto con los valores correctos para los bits 6 y 7...
|
|
« Última modificación: 28 de Diciembre de 2005, 11:48:51 pm por jltursan »
|
En línea
|
Doom dee doom dee doom
|
|
|
Dioniso
Visitante
|
|
« Respuesta #7 : 28 de Diciembre de 2005, 11:54:40 pm » |
|
output, so it should always be set so that bit 6 = "0" and bit 7 = "1".
Ese bit 7 es el que se va al carajo. Osea que valdría un simple: ;MSX version of ROUT (c)Dioniso ROUT: LD HL,AYREGS+Mixer LD A,[HL] OR 10000000b LD [HL],A LD HL,AYREGS ... ;
|
|
|
En línea
|
|
|
|
jltursan
|
|
« Respuesta #8 : 29 de Diciembre de 2005, 12:29:54 pm » |
|
Si suponemos que el bit 0 va a llegar siempre a 0, sí; pero en el reporte del bug aseguraron que al PSG#7 le había llegado un $56 Así pues, como más vale prevenir que curar, enmascaro los dos bits y fuera problemas.
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
SapphiRe
Visitante
|
|
« Respuesta #9 : 29 de Diciembre de 2005, 12:57:42 pm » |
|
Si suponemos que el bit 0 va a llegar siempre a 0, sí; pero en el reporte del bug aseguraron que al PSG#7 le había llegado un $56 Así pues, como más vale prevenir que curar, enmascaro los dos bits y fuera problemas. Realmente dicen 56, no $56 y estoy de acuerdo con que es muy extraño que funcione bien en los MSX reales y no en el emulador, a mí me ha funcionado bien en mi MSX1 y en la RU ambos juegos han estado funcionando en un 8235 con joystick, por lo que no entiendo el alboroto... El finde tendreis una versión fixeada. En fin... -- SapphiRe
|
|
|
En línea
|
|
|
|
MsxKun
|
|
« Respuesta #10 : 29 de Diciembre de 2005, 01:54:23 pm » |
|
Pues mirare todo ello lueg en casa a ver, aunque a ver si encuentro ese cacho codigo en el que use yo, porque no podia compilar la version "normal" y me pasaron una rara con todo de etiquetas TC000algo, etc.... Y sip, Joe va con Joystick1 o Cursores indistintamente. Mirare de hacer las pruebas en el OpenMSX a ver que opina. Menos mal que es el open, pq si fuera el BlueMSX lo llevo claro, en mi carraca de pc va fatalmal de lento. En general no creo q haya demasiado problema con el susodicho registro, pero sip, es mejor asegurarse y ya esta. Gracias por toda la info!
|
|
|
En línea
|
-- She Bops!
|
|
|
jltursan
|
|
« Respuesta #11 : 29 de Diciembre de 2005, 02:11:51 pm » |
|
Realmente dicen 56, no $56 Ah, pues es verdad Bueno, pelillos a la mar, como ya he dicho más vale prevenir que curar (total por un mísero AND).
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
MsxKun
|
|
« Respuesta #12 : 29 de Diciembre de 2005, 03:15:12 pm » |
|
Sustituyendo la rutina ROUT por esta otra : Yo en el lugar del ROUT tengo esto, que parece ser el equivalente: ;------ output sound data to psg registers ;; DB 0,0,0,0 ; keep original location for code LD C,$A0 LD HL,TC100Z OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L DB $DD,$7C ; LD A,IXZ LD (TC4E9Z),A ADD A,(HL) INC C OUT (C),A INC L DEC C OUT (C),L DB $DD,$7D ; LD A,IXl INC C OUT (C),A INC L DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI DEC C OUT (C),L INC C OUTI LD A,(HL) OR A JR Z,TC87CZ DEC C OUT (C),L INC C OUT (C),A LD (HL),0 ;------ output done Digo yo que sera ahi. El codigo es diferente, pero es que el normal no me compilaba. JLTursan hace lo correcto, aunque no sé si el valor a escribir debería ser siempre %10xxxxxx.
Bueno, un saludo. Parece que el PT3 player es una cosa mala. Vaya mxxrda de primer mensaje que he publicado en el fórum.
De cosa mala nada Respecto al valor %10xxxxxx, segun el Handbook suele ser asi, aunque supongo que habria quien lo podria querer al reves. En todo caso, si al final resulta que es %00xxxxxx, eso significa que los dos puertos son de In, no? Si solo usas un puerto para entrada, da igual que el otro sea In o Out pq no vas a outputarle nada no? O confundo un tipo de puertos con otro? :S Sea como sea, he probado el Parachuteless en el debugger del NO$MSX, que te indica los valores de todos los registros del PSG (entre otros) y efectivamente el bit7 se va al garete... Mirare de corregirlo tb en el listado ASM de arriba, pero me iria mal que ocupara mas de 4 bytes de los que ya ocupaba antes...
|
|
« Última modificación: 29 de Diciembre de 2005, 03:16:43 pm por MsxKun »
|
En línea
|
-- She Bops!
|
|
|
MsxKun
|
|
« Respuesta #13 : 29 de Diciembre de 2005, 09:37:04 pm » |
|
Una ultima cosilla... Aqui en el cacho del mute al registro 7 tb le llegara un cerapio, por lo tanto el bit 7 sera 0: ;------ mute all psg registers TC07CZ: LD B,$0E XOR A TC07FZ: LD C,$A0 OUT (C),B INC C OUT (C),A DJNZ TC07FZ RET DB 0,0,0 ; keep original location for code ;------ mute done Nop?
|
|
|
En línea
|
-- She Bops!
|
|
|
jltursan
|
|
« Respuesta #14 : 29 de Diciembre de 2005, 10:25:38 pm » |
|
Sip ¡Caray!, eso si que es hacerle un mute al PSG...todito a 0. ¿Por que no pruebas la rutina convertida por Dioniso?, no creo que te lleve más de unos minutos sustituirla y parece mucho más elegante que la que usas actualmente...
|
|
|
En línea
|
Doom dee doom dee doom
|
|
|
|