From 399d1b3ff438a9aa04d21847e5b794e02a5cc3ec Mon Sep 17 00:00:00 2001 From: hneemann Date: Wed, 21 Dec 2016 13:41:55 +0100 Subject: [PATCH] fixed a bug in the counter, ovf is now high for a complete cycle. --- src/main/dig/processor/ProcessorIntr.dig | 45 ++++++++----------- .../neemann/digital/core/memory/Counter.java | 13 +++--- .../digital/core/memory/CounterTest.java | 2 +- 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/src/main/dig/processor/ProcessorIntr.dig b/src/main/dig/processor/ProcessorIntr.dig index 63b75ac5f..2d83ae85a 100644 --- a/src/main/dig/processor/ProcessorIntr.dig +++ b/src/main/dig/processor/ProcessorIntr.dig @@ -1218,7 +1218,7 @@ An dieser Adresse muss sich die ISR befinden. 11 - + Tunnel @@ -1232,12 +1232,12 @@ An dieser Adresse muss sich die ISR befinden. C - + Ground - + Tunnel @@ -1249,11 +1249,6 @@ An dieser Adresse muss sich die ISR befinden. - - Not - - - @@ -1321,7 +1316,7 @@ An dieser Adresse muss sich die ISR befinden. - + @@ -1473,12 +1468,8 @@ An dieser Adresse muss sich die ISR befinden. - - - - - - + + @@ -1573,12 +1564,12 @@ An dieser Adresse muss sich die ISR befinden. - - + + - - + + @@ -1720,6 +1711,10 @@ An dieser Adresse muss sich die ISR befinden. + + + + @@ -1760,10 +1755,6 @@ An dieser Adresse muss sich die ISR befinden. - - - - @@ -1864,10 +1855,6 @@ An dieser Adresse muss sich die ISR befinden. - - - - @@ -1896,6 +1883,10 @@ An dieser Adresse muss sich die ISR befinden. + + + + diff --git a/src/main/java/de/neemann/digital/core/memory/Counter.java b/src/main/java/de/neemann/digital/core/memory/Counter.java index 91dec380c..0e0fdb711 100644 --- a/src/main/java/de/neemann/digital/core/memory/Counter.java +++ b/src/main/java/de/neemann/digital/core/memory/Counter.java @@ -32,6 +32,7 @@ public class Counter extends Node implements Element { private ObservableValue clrIn; private boolean lastClock; private int counter; + private boolean ovfOut=false; /** * Creates a new instance @@ -51,6 +52,11 @@ public class Counter extends Node implements Element { boolean clock = clockIn.getBool(); if (clock && !lastClock) { counter++; + if (counter == ovfValue) { + counter = 0; + ovfOut = true; + } else + ovfOut = false; } lastClock = clock; if (clrIn.getBool()) @@ -59,12 +65,7 @@ public class Counter extends Node implements Element { @Override public void writeOutputs() throws NodeException { - if (counter == ovfValue) { - counter = 0; - ovf.setValue(1); - } else - ovf.setValue(0); - + ovf.setBool(ovfOut); out.setValue(counter); } diff --git a/src/test/java/de/neemann/digital/core/memory/CounterTest.java b/src/test/java/de/neemann/digital/core/memory/CounterTest.java index be96b07b3..2a5aff21b 100644 --- a/src/test/java/de/neemann/digital/core/memory/CounterTest.java +++ b/src/test/java/de/neemann/digital/core/memory/CounterTest.java @@ -40,7 +40,7 @@ public class CounterTest extends TestCase { } sc.check(0, 0, 255, 0); sc.check(1, 0, 0, 1); - sc.check(0, 0, 0, 0); + sc.check(0, 0, 0, 1); sc.check(1, 0, 1, 0); }