From 6b82be0624b827e825ad2f9912ab6a9bbcbb48f9 Mon Sep 17 00:00:00 2001 From: TomW Date: Tue, 15 Sep 2015 21:53:45 +0100 Subject: [PATCH] Tweaks to PIT latch operation - Juko XT now boots again. --- src/ibm.h | 1 + src/pit.c | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ibm.h b/src/ibm.h index d19e7f3..8830cbb 100644 --- a/src/ibm.h +++ b/src/ibm.h @@ -213,6 +213,7 @@ typedef struct PIT int count[3]; int using_timer[3]; int initial[3]; + int latched[3]; } PIT; PIT pit; diff --git a/src/pit.c b/src/pit.c index ffb8509..a8277db 100644 --- a/src/pit.c +++ b/src/pit.c @@ -336,6 +336,7 @@ void pit_write(uint16_t addr, uint8_t val, void *priv) pit.ctrl |= 0x30; pit.rereadlatch[t] = 0; pit.rm[t] = 3; + pit.latched[t] = 1; } else { @@ -348,7 +349,7 @@ void pit_write(uint16_t addr, uint8_t val, void *priv) pit.rm[val>>6]=3; 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; pit.initial[t] = 1; 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*/ t = addr & 3; - if (pit.rereadlatch[addr & 3]) + if (pit.rereadlatch[addr & 3] && !pit.latched[addr & 3]) { pit.rereadlatch[addr & 3] = 0; pit.rl[t] = pit_read_timer(t); @@ -431,14 +432,17 @@ uint8_t pit_read(uint16_t addr, void *priv) case 0: temp = pit.rl[addr & 3] >> 8; pit.rm[addr & 3] = 3; + pit.latched[addr & 3] = 0; pit.rereadlatch[addr & 3] = 1; break; case 1: temp = (pit.rl[addr & 3]) & 0xFF; + pit.latched[addr & 3] = 0; pit.rereadlatch[addr & 3] = 1; break; case 2: temp = (pit.rl[addr & 3]) >> 8; + pit.latched[addr & 3] = 0; pit.rereadlatch[addr & 3] = 1; break; case 3: