From d4d75b773e985dd1afcc89026f2afa483e8a28f3 Mon Sep 17 00:00:00 2001 From: Nikita Orlov Date: Fri, 2 Apr 2021 15:45:55 +0300 Subject: Size type fix --- src/Machine.hs | 10 +++++----- src/Utils.hs | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/Machine.hs b/src/Machine.hs index e6162e4..81df91d 100644 --- a/src/Machine.hs +++ b/src/Machine.hs @@ -55,7 +55,7 @@ with field f = do ------------------------------------------------------------------------------- -- Data and Address Registers Access -readD :: Int -> Long -> Emulator Long +readD :: Int -> Int -> Emulator Long readD 0 s = with drs $ \rs -> do (r,_,_,_,_,_,_,_) <- readIORef rs return $ convertLong r s @@ -82,7 +82,7 @@ readD 7 s = with drs $ \rs -> do return $ convertLong r s readD _ _ = return $ error "Incorrect Data register read" -readA :: Int -> Long -> Emulator Long +readA :: Int -> Int -> Emulator Long readA 0 s = with ars $ \rs -> do (r,_,_,_,_,_,_) <- readIORef rs return $ convertLong r s @@ -110,7 +110,7 @@ readA 7 s = isSupervisor >>= \sup -> if sup readA _ _ = return $ error "Incorrect Address register read" -writeD :: Int -> Long -> Long -> Emulator () +writeD :: Int -> Int -> Long -> Emulator () writeD 0 s r = with drs $ \rs -> do (r0,r1,r2,r3,r4,r5,r6,r7) <- readIORef rs writeIORef rs (combineLong r r0 s,r1,r2,r3,r4,r5,r6,r7) @@ -137,7 +137,7 @@ writeD 7 s r = with drs $ \rs -> do writeIORef rs (r0,r1,r2,r3,r4,r5,r6,combineLong r r7 s) writeD _ _ _ = return $ error "Incorrect Data register write" -writeA :: Int -> Long -> Long -> Emulator () +writeA :: Int -> Int -> Long -> Emulator () writeA 0 s r = with ars $ \rs -> do (r0,r1,r2,r3,r4,r5,r6) <- readIORef rs writeIORef rs (combineLong r r0 s,r1,r2,r3,r4,r5,r6) @@ -317,7 +317,7 @@ setLong a l = do ------------------------------------------------------------------------------- -- Operand Access -getOp :: Int -> Int -> Long +getOp :: Int -> Int -> Int -> Emulator (Emulator Long, Long -> Emulator ()) getOp 0 dr s = return (readD dr s, writeD dr s) getOp 1 ar s = return (readA ar s, writeA ar s) diff --git a/src/Utils.hs b/src/Utils.hs index cffcc11..81c6e8a 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -25,13 +25,13 @@ extractBits x r = fromBits $ toBits x r ------------------------------------------------------------------------------- -- Size Convertion -convertLong :: Word32 -> Word32 -> Word32 +convertLong :: Word32 -> Int -> Word32 convertLong x 1 = x .&. 0x000000FF convertLong x 2 = x .&. 0x0000FFFF convertLong x 4 = x convertLong _ s = error $ "Wrong size (" ++ show s ++ ") of convertLong" -combineLong :: Word32 -> Word32 -> Word32 -> Word32 +combineLong :: Word32 -> Word32 -> Int -> Word32 combineLong update base 1 = base .&. 0xFFFFFF00 .|. (convertLong update 1) combineLong update base 2 = base .&. 0xFFFF0000 .|. (convertLong update 2) combineLong update _ 4 = update -- cgit v1.2.3