From: Matthijs Kooijman Date: Thu, 19 Feb 2009 12:10:10 +0000 (+0100) Subject: Use tuples instead of a ADT for the register bank state. X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fmaster-project%2Fc%CE%BBash.git;a=commitdiff_plain;h=e771c40c12c3d93a1c59b396cf862cb0ac617d94 Use tuples instead of a ADT for the register bank state. We can't translate ADT's yet, but tuples work. --- diff --git a/Alu.hs b/Alu.hs index f26bb83..e9ddf57 100644 --- a/Alu.hs +++ b/Alu.hs @@ -16,13 +16,14 @@ program = [ (High, High, dontcare) -- r1 = z (0) ] -initial_state = (Regs Low High, Low, Low) +--initial_state = (Regs Low High, Low, Low) +initial_state = ((Low, High), Low, Low) -- Register bank type RegAddr = Bit ---type RegisterBankState = (Bit, Bit) -data RegisterBankState = Regs { r0, r1 :: Bit} deriving (Show) +type RegisterBankState = (Bit, Bit) +--data RegisterBankState = Regs { r0, r1 :: Bit} deriving (Show) register_bank :: (RegAddr, Bit, Bit) -> -- (addr, we, d) @@ -30,18 +31,22 @@ register_bank :: (RegisterBankState, Bit) -- (s', o) register_bank (Low, Low, _) s = -- Read r0 - (s, r0 s) + --(s, r0 s) + (s, fst s) register_bank (High, Low, _) s = -- Read r1 - (s, r1 s) + --(s, r1 s) + (s, snd s) register_bank (addr, High, d) s = -- Write (s', dontcare) where - Regs r0 r1 = s + --Regs r0 r1 = s + (r0, r1) = s r0' = if addr == Low then d else r0 r1' = if addr == High then d else r1 - s' = Regs r0' r1' + --s' = Regs r0' r1' + s' = (r0', r1') -- ALU