Problema con la carga de Tai-Pan 128k

Avatar de Usuario
carmeloco
Mensajes: 746
Registrado: 25 Dic 2015, 12:02

Re: Problema con la carga de Tai-Pan 128k

Mensaje por carmeloco » 26 Abr 2018, 23:30

zx81 escribió:@rcmolina

Si nos cuentas lo que has tocado, a lo mejor sirve para mejorar también otros emuladores software... ;)
Según el readme del GitHub:
V1.36 Polarity handling

rcmolina
Mensajes: 109
Registrado: 22 Nov 2015, 16:41

Re: Problema con la carga de Tai-Pan 128k

Mensaje por rcmolina » 27 Abr 2018, 17:25

@zx81, pues la verdad lo que he hecho es inspirarme en tu post y leer algo sobre diferencias entre polaridad y cambio de fase en la onda.
El mérito es todo tuyo..

Lo primero que hice fue grabar en wav con audacity la salida del maxduino, y efectivamente ví que salía de arranque con forma de onda invertida (negativa). La siguiente prueba fue hacer un invert en audacity y ver que cargaba el juego. :D

Conclusión, la imagen especular funciona. Lo siguiente estaba más o menos claro, hay que invertir toda la onda, cuando pongo un cero es un uno y cuando pongo un uno es un cero... i.e invierto los comportamientos.

#ifndef polarity //antes
#define WRITE_LOW PORTB &= ~_BV(1) // El pin9 es el bit1 del PORTB
#define WRITE_HIGH PORTB |= _BV(1) // El pin9 es el bit1 del PORTB
// pin 0-7 PortD0-7, pin 8-13 PortB0-5, pin 14-19 PortC0-5
#endif

#ifdef polarity //tras el cambio
#define WRITE_HIGH PORTB &= ~_BV(1) // El pin9 es el bit1 del PORTB
#define WRITE_LOW PORTB |= _BV(1) // El pin9 es el bit1 del PORTB
// pin 0-7 PortD0-7, pin 8-13 PortB0-5, pin 14-19 PortC0-5
#endif

.. No me funcionaba ... el otro punto es que me dí cuenta que en cada interrupción cuando había pausas se forzaba a un estado (pinState) concreto, y lo que hice fue invertirlo también.

void wave2() {
..
} else {
if(workingPeriod >= 1 && wasPauseBlock==false) {
pinState = !pinState;
..
if (pinState == LOW) WRITE_LOW;
else WRITE_HIGH;
if(pauseFlipBit==true) {
newTime = 1500; //Set 1.5ms initial pause block
#ifndef polarity
pinState = LOW; //Set next pinstate LOW
#endif
#ifdef polarity
pinState = HIGH; //Set next pinstate HIGH
#endif

Responder