module SynacorEngine where
-import Debug.Trace
+-- import Debug.Trace
-- import System.Environment
import Data.Bits
import Control.Lens
import Data.List
import Data.Char
-import Numeric
+-- import Numeric
import Control.Monad.State.Strict
import Control.Monad.Reader
makeMachine :: Memory -> Machine
-makeMachine memory = Machine
+makeMachine mem = Machine
{ _ip = 0
, _inputIndex = 0
, _registers = M.fromList [ (r, 0) | r <- [0..7] ]
- , _memory = memory
+ , _memory = mem
, _stack = []
, _tracing = False
}
when isTracing
do cip <- gets _ip
(l, _) <- dissembleInstruction cip
- registers <- gets _registers
- let regVals = intercalate "; " $ fmap show $ M.elems registers
- stack <- gets _stack
- let stackVals = intercalate "; " $ fmap show $ take 10 stack
+ regs <- gets _registers
+ let regVals = intercalate "; " $ fmap show $ M.elems regs
+ stk <- gets _stack
+ let stackVals = intercalate "; " $ fmap show $ take 10 stk
tell $ fmap (fromIntegral . ord) (">> " ++ l ++ " : r> " ++ regVals ++ " : s> " ++ stackVals ++ "<<")
runDissemble :: Word16 -> Int -> Machine -> [String]