Heroes' Rescue activa el modo Timex HiColor... o no

Software para o relacionado con el core ZX Spectrum / Software for or related to the ZX Spectrum core
Responder
Avatar de Usuario
Uto
Mensajes: 1389
Registrado: 17 Dic 2015, 16:39

Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por Uto » 12 Ene 2017, 09:55

Al juego Heroes REscue le salen los colores cambiados cuando lo arrancamos con la funcionalidad de modos Timex activada. He probado a activar Timex y desactivar ULAPlus y Radastan para estar seguro que es solo eso y es solo eso.

A priori uno podría pensar que le pasa como al Madmix Game, un out que activa sin querer el HiRes, pero el efecto en pantalla es muy diferente: no se produce ese lio de colores tremendo que viene de que se lean los atributos de un sitio donde en realidad hay código, sino que aparecen simplemente "raros", pero no se monta el pollo que se montaba en Madmix, el juego sigue siendo jugable.

http://www.mediafire.com/file/49d58zzid ... CUE_ZX.zip

El juego está hecho con AGD 4.6, que en teoría no soporta ni sabe nada de los modos Timex (aunque la versión nueva de AGD que se está gestando está hecha pensando en ellos, pero esta antigua no).

Lo dejo por aquí por si alguien quiere echarle un ojo a ver que puede estar pasando, no sea que haya algún tipo de cruce extraño y el desactivador de los modos Timex se deje algo fuera, o el hecho de tener activado el modo Timex implique algo más además de la estructura de la video RAM.

thEpOpE
Mensajes: 41
Registrado: 10 Oct 2016, 21:35

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por thEpOpE » 12 Ene 2017, 11:47

Hola Uto, anoche estuve hablando este mismo tema con Javi y compañía. No es un problema de Timex HiColor, El problema es que en el AGD han dejado las opciones de Ula+, y por lo que sea la tabla que carga está modificada. Por eso ves unos colores decolorados... Si lo pruebas en un emulador que tenga Ula+ verás que pasa lo mismo.

La rutina de carga de colores en la Ula+ se puede desactivar (basta poner un RET en la entrada a la misma). Para ello puedes usar el siguiente cargador Basic que te corrige el problema. No intentes modificar el cargador que tiene el juego porque lleva una pequeña protección del Basic y te va a dar problemas de sintaxis.

Código: Seleccionar todo

10 CLEAR 23999: LOAD "" SCREEN$: POKER 23739,111: LOAD "" CODE: POKE 32667,201: RANDOMIZE USR 32000
Con eso evitas que al cargarse el juego se active el modo de Ula+

Avatar de Usuario
Uto
Mensajes: 1389
Registrado: 17 Dic 2015, 16:39

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por Uto » 12 Ene 2017, 12:06

thEpOpE escribió:Hola Uto, anoche estuve hablando este mismo tema con Javi y compañía. No es un problema de Timex HiColor, El problema es que en el AGD han dejado las opciones de Ula+, y por lo que sea la tabla que carga está modificada. Por eso ves unos colores decolorados... Si lo pruebas en un emulador que tenga Ula+ verás que pasa lo mismo.

La rutina de carga de colores en la Ula+ se puede desactivar (basta poner un RET en la entrada a la misma). Para ello puedes usar el siguiente cargador Basic que te corrige el problema. No intentes modificar el cargador que tiene el juego porque lleva una pequeña protección del Basic y te va a dar problemas de sintaxis.

Código: Seleccionar todo

10 CLEAR 23999: LOAD "" SCREEN$: POKER 23739,111: LOAD "" CODE: POKE 32667,201: RANDOMIZE USR 32000
Con eso evitas que al cargarse el juego se active el modo de Ula+
Lo que dices cuadra mucho con lo que pasa en pantalla, es decir, tiene mucha más pinta de tener una paleta rara de ULAPlus que de que haya activado el modo HiColor de Timex.

Sin embargo, si yo se lo achaco a los modos Timex es porque he probado a dejar activo solo Timex y desactivado ULAPLus en el ZX-Uno, y pasa, pero si dejo activo solo ULAPlus no pasa. Como para activar/desactivar uso ZXUC, pueden pasar dos cosas:

1) Que ZXUC esté mal y tenga cruzados el setting de ULAPLus y Timex
2) Que sea el core el que esté mal y los tenga cambiados

También podría pasar que de alguna manera estén internamente relacionados (por ejemplo que haga falta ULAPlus para activar modos Timex y que por tanto un setup con Timex sin UlaPlus no tenga sentido)

Acabo de probar a dejar el registro $0F de ZX-Uno con el valor 00000101 (que en teoría es solo Timex activo), tras eso he intentando OUT 255,6 para activar HiRes y no ha funcionado. Es decir, el setting de Timex está activo pero no se activan.

Después he probado a dejarlo 00000110 (solo ULAPlus activo), y el OUT 255, 6 me pasa a modo Timex HiRes, pese a estar los modos Timex desactivados :veoestrellas:

En definitiva, probablemente tengas razón, pero o bien he dejado de entender como van esos flags del registro del ZX-Uno, o están cambiados :-?

thEpOpE
Mensajes: 41
Registrado: 10 Oct 2016, 21:35

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por thEpOpE » 12 Ene 2017, 12:35

Mira, esta es la rutina que en AGD activa el Ula+:

Código: Seleccionar todo

7F9B: LD BC, $BF3B
7F9E: LD A, $40
7FA0: OUT (C), A
7FA2: LD B, $FF
7FA4: LD A, $01
7FA6: OUT (C), A
7FA8: LD B, $40
7FAA: LD HL, $7FC0
7FAD: LD E, $00
7FAF: PUSH BC
7FB0: LD B, $BF
7FB2: LD A, E
7FB3: OUT (C), A
7FB5: LD B, $FF
7FB7: LD A, (HL)
7FB8: OUT (C), A
7FBA: INC E
7FBB: INC HL
7FBC: POP BC
7FBD: DJNZ $7FAF
7FBF: RET
Solamente usa el puerto $BF3B, por el que saca $40 (= 01000000), después pone $FF3B un 1 (con eso selecciona el registro 64, y lo pone a 1: ula+ activada), y a continuación va seleccionando de una tabla que está en $7FC0 lo valores que mete en los registros de la tabla de colores: usa E como indice de los registros de ula+. En 7FA8 inicia el contador de los 64 valores que mete (registro 0 a 63 de ula+). Va seleccionando el registro sacando al puerto $BF3B el numero de registro, y en $FF3B el valor que carga en el registro.

El motor de AGD no toca de los modos de video más puertos/registros que estos.

Avatar de Usuario
Uto
Mensajes: 1389
Registrado: 17 Dic 2015, 16:39

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por Uto » 12 Ene 2017, 13:27

thEpOpE escribió:Mira, esta es la rutina que en AGD activa el Ula+:

Código: Seleccionar todo

7F9B: LD BC, $BF3B
7F9E: LD A, $40
7FA0: OUT (C), A
7FA2: LD B, $FF
7FA4: LD A, $01
7FA6: OUT (C), A
7FA8: LD B, $40
7FAA: LD HL, $7FC0
7FAD: LD E, $00
7FAF: PUSH BC
7FB0: LD B, $BF
7FB2: LD A, E
7FB3: OUT (C), A
7FB5: LD B, $FF
7FB7: LD A, (HL)
7FB8: OUT (C), A
7FBA: INC E
7FBB: INC HL
7FBC: POP BC
7FBD: DJNZ $7FAF
7FBF: RET
Solamente usa el puerto $BF3B, por el que saca $40 (= 01000000), después pone $FF3B un 1 (con eso selecciona el registro 64, y lo pone a 1: ula+ activada), y a continuación va seleccionando de una tabla que está en $7FC0 lo valores que mete en los registros de la tabla de colores: usa E como indice de los registros de ula+. En 7FA8 inicia el contador de los 64 valores que mete (registro 0 a 63 de ula+). Va seleccionando el registro sacando al puerto $BF3B el numero de registro, y en $FF3B el valor que carga en el registro.

El motor de AGD no toca de los modos de video más puertos/registros que estos.
Sí, claramente está haciendo un "seteo" de la paleta de ULAPlus, la cuestión es por qué el ZX-Uno la aplica teniendo el ULAPlus desactivado :-?

He vuelto a mirar el wiki y el bit más bajo del registro $0F es ULAPlus, y a 1 es disabled, no lo entiendo :-?

Tengo que mirarlo con más detalle, pero hoy no voy a poder, lo mismo hay algo mal en ZXUC que me está engañando.

thEpOpE
Mensajes: 41
Registrado: 10 Oct 2016, 21:35

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por thEpOpE » 12 Ene 2017, 13:48

Respecto al MadMixGame :pacman1: , es un problema de como gestionan la sincronización. Lo que hicieron es una espera controlada de la cpu, mediante un bucle de escritura en ROM :quemecuentas: :

Código: Seleccionar todo

LD HL,0
LD D, H
LD E, L
LD BC, $600C
LDIR
y afinan la sincronización añadiendo 2 instrucciones al final :veoestrellas: :

Código: Seleccionar todo

 LD A,2
 OUT (255),A
 
No previeron que pudiera haber dispositivos conectados que hicieran uso del puerto 255 !! :tepego:

En el caso de MadMixGame puedes eliminar la instrucción del OUT, con POKE 38385, 0 : POKE 38386, 0 ; y sin necesidad desactivar cosas en el ZxUno.

En el caso de Zona0, que usa la misma técnica puedes corregir el error con POKE 39567,0: POKE 39568,0

No obstante puedes leer más información sobre la contención de puertos in/out en: http://www.worldofspectrum.org/faq/refe ... erence.htm

Avatar de Usuario
Uto
Mensajes: 1389
Registrado: 17 Dic 2015, 16:39

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por Uto » 12 Ene 2017, 13:54

Sí, el de MadMix game tengo claro la causa, por eso no me cuadraba este, porque no veía ninguna razón para ese OUT. Es la paleta está claro, lo que no está claro es por qué un ZX-Uno con el bit DIULAPLUS (Disable ULAPLus) activado en el regstro DEVCRTL2 se lo pasa por el arco de triunfo y accede a ULAPlus.

"DIULAPLUS: a 1 para deshabilitar la ULAplus. Cualquier escritura a los puertos de ULAplus se ignora. Las lecturas a dichos puertos devuelven el valor del bus flotante. No obstante tenga en cuenta que el mecanismo de contención para este puerto sigue funcionando aunque esté deshabilitado."

Quizá sea eso del mecanismo de contención, que no se qué es :-D

Avatar de Usuario
antoniovillena
Mensajes: 2611
Registrado: 27 Sep 2015, 20:41

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por antoniovillena » 12 Ene 2017, 14:49

Los cambios de desactivar ULAplus creo que se hicieron en el core T23. ¿Podría ser porque tengas el core T22? Aunque la BIOS esté actualizada y mande la info correcta al puerto, si no está implementado en el core no hace nada.

Avatar de Usuario
Uto
Mensajes: 1389
Registrado: 17 Dic 2015, 16:39

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por Uto » 12 Ene 2017, 15:01

antoniovillena escribió:Los cambios de desactivar ULAplus creo que se hicieron en el core T23. ¿Podría ser porque tengas el core T22? Aunque la BIOS esté actualizada y mande la info correcta al puerto, si no está implementado en el core no hace nada.
Tengo el T24, así que eso no es :-?

Además, si que parece hacer algo, pero en vez de deshabilitarse los timex con el bit del timex, parece hacerlo con ULAPlus. Quizá esté cambiado, a ver si esta noche o mañana pruebo a hacer un programa que cambie paleta de ULAPlus con ULAPLus deshabilitada y confirmo que es eso. También podría ser ZXUC que esté mal, pero tengo que mirarlo con más detalle.

thEpOpE
Mensajes: 41
Registrado: 10 Oct 2016, 21:35

Re: Heroes' Rescue activa el modo Timex HiColor... o no

Mensaje por thEpOpE » 12 Ene 2017, 17:56

Por cierto, Uto, en el faq, el registro SCANDBLCTRL ($0B) del zxuno lo tienes que actualizar. Falta de documentar el bit COPT, que es la forma en que se generan los sincronismos compuestos para RGB y video compuesto... y que creo que es el problema con mi tv Philips :evil: Creo recordar que en su momento cuando conecté el RGB del +3 a esa tv me hacía cosas muy muy raras también

Responder