From 1328d948ba1d3e4d72ceb8a4a01db7bb982535b4 Mon Sep 17 00:00:00 2001 From: Nikita Orlov Date: Mon, 22 Mar 2021 13:15:19 +0300 Subject: PC access added --- src/Commands.hs | 4 +--- src/Machine.hs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Commands.hs b/src/Commands.hs index 6fce17b..32fc17f 100644 --- a/src/Commands.hs +++ b/src/Commands.hs @@ -114,11 +114,9 @@ doLINK _ = return () doUNLK :: Int -> Emulator () doUNLK a = do + incPC addr <- readA a val <- getLong addr - with pc $ \pc -> do - pcval <- readIORef pc - writeIORef pc (pcval + 2) writeA a val writeA 7 (addr + 4) diff --git a/src/Machine.hs b/src/Machine.hs index 6a09be9..23b7872 100644 --- a/src/Machine.hs +++ b/src/Machine.hs @@ -165,6 +165,19 @@ writeA 7 r = isSupervisor >>= \sup -> if sup writeA _ _ = return $ error "Incorrect Address register write" +------------------------------------------------------------------------------- +-- PC Register Access +readPC = with pc $ \pc -> do + return pc + +writePC r = with pc $ \pc -> do + writeIORef pc r + +incPC = with pc $ \pc -> do + pcval <- readIORef pc + writeIORef pc (pcval + 2) + + ------------------------------------------------------------------------------- -- Status Register Access -- cgit v1.2.3