Tweaks to PIT latch operation - Juko XT now boots again.
This commit is contained in:
parent
cedad6dba0
commit
6b82be0624
2 changed files with 7 additions and 2 deletions
|
|
@ -213,6 +213,7 @@ typedef struct PIT
|
||||||
int count[3];
|
int count[3];
|
||||||
int using_timer[3];
|
int using_timer[3];
|
||||||
int initial[3];
|
int initial[3];
|
||||||
|
int latched[3];
|
||||||
} PIT;
|
} PIT;
|
||||||
|
|
||||||
PIT pit;
|
PIT pit;
|
||||||
|
|
|
||||||
|
|
@ -336,6 +336,7 @@ void pit_write(uint16_t addr, uint8_t val, void *priv)
|
||||||
pit.ctrl |= 0x30;
|
pit.ctrl |= 0x30;
|
||||||
pit.rereadlatch[t] = 0;
|
pit.rereadlatch[t] = 0;
|
||||||
pit.rm[t] = 3;
|
pit.rm[t] = 3;
|
||||||
|
pit.latched[t] = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -348,7 +349,7 @@ void pit_write(uint16_t addr, uint8_t val, void *priv)
|
||||||
pit.rm[val>>6]=3;
|
pit.rm[val>>6]=3;
|
||||||
pit.rl[t] = pit_read_timer(t);
|
pit.rl[t] = pit_read_timer(t);
|
||||||
}
|
}
|
||||||
// pit.rereadlatch[val>>6]=1;
|
pit.rereadlatch[val>>6]=1;
|
||||||
if ((val>>6)==2) ppispeakon=speakon=(pit.m[2]==0)?0:1;
|
if ((val>>6)==2) ppispeakon=speakon=(pit.m[2]==0)?0:1;
|
||||||
pit.initial[t] = 1;
|
pit.initial[t] = 1;
|
||||||
if (!pit.m[val >> 6])
|
if (!pit.m[val >> 6])
|
||||||
|
|
@ -421,7 +422,7 @@ uint8_t pit_read(uint16_t addr, void *priv)
|
||||||
{
|
{
|
||||||
case 0: case 1: case 2: /*Timers*/
|
case 0: case 1: case 2: /*Timers*/
|
||||||
t = addr & 3;
|
t = addr & 3;
|
||||||
if (pit.rereadlatch[addr & 3])
|
if (pit.rereadlatch[addr & 3] && !pit.latched[addr & 3])
|
||||||
{
|
{
|
||||||
pit.rereadlatch[addr & 3] = 0;
|
pit.rereadlatch[addr & 3] = 0;
|
||||||
pit.rl[t] = pit_read_timer(t);
|
pit.rl[t] = pit_read_timer(t);
|
||||||
|
|
@ -431,14 +432,17 @@ uint8_t pit_read(uint16_t addr, void *priv)
|
||||||
case 0:
|
case 0:
|
||||||
temp = pit.rl[addr & 3] >> 8;
|
temp = pit.rl[addr & 3] >> 8;
|
||||||
pit.rm[addr & 3] = 3;
|
pit.rm[addr & 3] = 3;
|
||||||
|
pit.latched[addr & 3] = 0;
|
||||||
pit.rereadlatch[addr & 3] = 1;
|
pit.rereadlatch[addr & 3] = 1;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
temp = (pit.rl[addr & 3]) & 0xFF;
|
temp = (pit.rl[addr & 3]) & 0xFF;
|
||||||
|
pit.latched[addr & 3] = 0;
|
||||||
pit.rereadlatch[addr & 3] = 1;
|
pit.rereadlatch[addr & 3] = 1;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
temp = (pit.rl[addr & 3]) >> 8;
|
temp = (pit.rl[addr & 3]) >> 8;
|
||||||
|
pit.latched[addr & 3] = 0;
|
||||||
pit.rereadlatch[addr & 3] = 1;
|
pit.rereadlatch[addr & 3] = 1;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue