aboutsummaryrefslogtreecommitdiff
path: root/src/Instructions.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Instructions.hs')
-rw-r--r--src/Instructions.hs272
1 files changed, 272 insertions, 0 deletions
diff --git a/src/Instructions.hs b/src/Instructions.hs
new file mode 100644
index 0000000..9c2e2cb
--- /dev/null
+++ b/src/Instructions.hs
@@ -0,0 +1,272 @@
+-- This module describes the semantics of machine instructions.
+module Instructions where
+
+import Prelude hiding (Word)
+import Machine
+import Utils
+import Data.IORef
+
+
+doORICCR :: Emulator ()
+doORICCR = return ()
+
+doORISR :: Emulator ()
+doORISR = return ()
+
+doORI :: Int -> Int -> Int -> Emulator ()
+doORI _ _ _ = return ()
+
+doANDICCR :: Emulator ()
+doANDICCR = return ()
+
+doANDISR :: Emulator ()
+doANDISR = return ()
+
+doANDI :: Int -> Int -> Int -> Emulator ()
+doANDI _ _ _ = return ()
+
+doSUBI :: Int -> Int -> Int -> Emulator ()
+doSUBI _ _ _ = return ()
+
+doADDI :: Int -> Int -> Int -> Emulator ()
+doADDI _ _ _ = return ()
+
+doEORICCR :: Emulator ()
+doEORICCR = return ()
+
+doEORISR :: Emulator ()
+doEORISR = return ()
+
+doEORI :: Int -> Int -> Int -> Emulator ()
+doEORI _ _ _ = return ()
+
+doCMPI :: Int -> Int -> Int -> Emulator ()
+doCMPI _ _ _ = return ()
+
+doMOVEP :: Int -> Int -> Int -> Int -> Emulator ()
+doMOVEP _ _ _ _ = return ()
+
+doBTST :: Int -> Int -> Int -> Int -> Emulator ()
+doBTST _ _ _ _ = return ()
+
+doBCHG :: Int -> Int -> Int -> Int -> Emulator ()
+doBCHG _ _ _ _ = return ()
+
+doBCLR :: Int -> Int -> Int -> Int -> Emulator ()
+doBCLR _ _ _ _ = return ()
+
+doBSET :: Int -> Int -> Int -> Int -> Emulator ()
+doBSET _ _ _ _ = return ()
+
+doMOVEA :: Int -> Int -> Int -> Int -> Emulator ()
+doMOVEA _ _ _ _ = return ()
+
+doMOVE :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doMOVE _ _ _ _ _ = return ()
+
+doSRMOVE :: Int -> Int -> Emulator ()
+doSRMOVE _ _ = return ()
+
+doMOVECCR :: Int -> Int -> Emulator ()
+doMOVECCR _ _ = return ()
+
+doMOVESR :: Int -> Int -> Emulator ()
+doMOVESR _ _ = return ()
+
+doNEGX :: Int -> Int -> Int -> Emulator ()
+doNEGX _ _ _ = return ()
+
+doCLR :: Int -> Int -> Int -> Emulator ()
+doCLR _ _ _ = return ()
+
+doNEG :: Int -> Int -> Int -> Emulator ()
+doNEG _ _ _ = return ()
+
+doNOT :: Int -> Int -> Int -> Emulator ()
+doNOT _ _ _ = return ()
+
+doEXT :: Int -> Int -> Emulator ()
+doEXT _ _ = return ()
+
+doNBCD :: Int -> Int -> Emulator ()
+doNBCD _ _ = return ()
+
+doSWAP :: Int -> Emulator ()
+doSWAP _ = return ()
+
+doPEA :: Int -> Int -> Emulator ()
+doPEA _ _ = return ()
+
+doILLEGAL :: Emulator ()
+doILLEGAL = return ()
+
+doTAS :: Int -> Int -> Emulator ()
+doTAS _ _ = return ()
+
+doTST :: Int -> Int -> Int -> Emulator ()
+doTST _ _ _ = return ()
+
+doTRAP :: Int -> Emulator ()
+doTRAP _ = return ()
+
+doLINK :: Int -> Emulator ()
+doLINK a = do
+ incPC
+ addr <- readA a 4
+ sp <- readA 7 4
+ writeA 7 4 (sp - 4)
+ setLong (sp - 4) addr
+
+doUNLK :: Int -> Emulator ()
+doUNLK a = do
+ incPC
+ addr <- readA a 4
+ val <- getLong addr
+ writeA a 4 val
+ writeA 7 4 (addr + 4)
+
+doMOVEUSP :: Int -> Int -> Emulator ()
+doMOVEUSP _ _ = return ()
+
+doRESET :: Emulator ()
+doRESET = return ()
+
+doNOP :: Emulator ()
+doNOP = with pc $ \pc -> do
+ pcval <- readIORef pc
+ writeIORef pc (pcval + 2)
+
+doSTOP :: Emulator ()
+doSTOP = return ()
+
+doRTE :: Emulator ()
+doRTE = return ()
+
+doRTS :: Emulator ()
+doRTS = return ()
+
+doTRAPV :: Emulator ()
+doTRAPV = return ()
+
+doRTR :: Emulator ()
+doRTR = return ()
+
+doJSR :: Int -> Int -> Emulator ()
+doJSR _ _ = return ()
+
+doJMP :: Int -> Int -> Emulator ()
+doJMP _ _ = return ()
+
+doMOVEM :: Int -> Int -> Int -> Int -> Emulator ()
+doMOVEM _ _ _ _ = return ()
+
+doLEA :: Int -> Int -> Int -> Emulator ()
+doLEA _ _ _ = return ()
+
+doCHK :: Int -> Int -> Int -> Emulator ()
+doCHK _ _ _ = return ()
+
+doDBcc :: Int -> Int -> Emulator ()
+doDBcc _ _ = return ()
+
+doScc :: Int -> Int -> Int -> Emulator ()
+doScc _ _ _ = return ()
+
+doADDQ :: Int -> Int -> Int -> Int -> Emulator ()
+doADDQ _ _ _ _ = return ()
+
+doSUBQ :: Int -> Int -> Int -> Int -> Emulator ()
+doSUBQ _ _ _ _ = return ()
+
+doBRA :: Int -> Emulator ()
+doBRA _ = return ()
+
+doBSR :: Int -> Emulator ()
+doBSR _ = return ()
+
+doBcc :: Int -> Int -> Emulator ()
+doBcc _ _ = return ()
+
+doMOVEQ :: Int -> Int -> Emulator ()
+doMOVEQ _ _ = return ()
+
+doDIVU :: Int -> Int -> Int -> Emulator ()
+doDIVU _ _ _ = return ()
+
+doDIVS :: Int -> Int -> Int -> Emulator ()
+doDIVS _ _ _ = return ()
+
+doSBCD :: Int -> Int -> Int -> Emulator ()
+doSBCD _ _ _ = return ()
+
+doOR :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doOR _ _ _ _ _ = return ()
+
+doSUBA :: Int -> Int -> Int -> Int -> Emulator ()
+doSUBA _ _ _ _ = return ()
+
+doSUBX :: Int -> Int -> Int -> Int -> Emulator ()
+doSUBX _ _ _ _ = return ()
+
+doSUB :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doSUB _ _ _ _ _ = return ()
+
+doCMPA :: Int -> Int -> Int -> Int -> Emulator ()
+doCMPA _ _ _ _ = return ()
+
+doCMP :: Int -> Int -> Int -> Int -> Emulator ()
+doCMP _ _ _ _ = return ()
+
+doCMPM :: Int -> Int -> Int -> Emulator ()
+doCMPM _ _ _ = return ()
+
+doEOR :: Int -> Int -> Int -> Int -> Emulator ()
+doEOR _ _ _ _ = return ()
+
+doMULU :: Int -> Int -> Int -> Emulator ()
+doMULU _ _ _ = return ()
+
+doMULS :: Int -> Int -> Int -> Emulator ()
+doMULS _ _ _ = return ()
+
+doABCD :: Int -> Int -> Int -> Emulator ()
+doABCD _ _ _ = return ()
+
+doEXG :: Int -> Int -> Int -> Int -> Emulator ()
+doEXG _ _ _ _ = return ()
+
+doAND :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doAND _ _ _ _ _ = return ()
+
+doADDA :: Int -> Int -> Int -> Int -> Emulator ()
+doADDA _ _ _ _ = return ()
+
+doADDX :: Int -> Int -> Int -> Int -> Emulator ()
+doADDX _ _ _ _ = return ()
+
+doADD :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doADD _ _ _ _ _ = return ()
+
+doASD :: Int -> Int -> Int -> Emulator ()
+doASD _ _ _ = return ()
+
+doLSD :: Int -> Int -> Int -> Emulator ()
+doLSD _ _ _ = return ()
+
+doROXd :: Int -> Int -> Int -> Emulator ()
+doROXd _ _ _ = return ()
+
+doROd :: Int -> Int -> Int -> Emulator ()
+doROd _ _ _ = return ()
+
+doADSR :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doADSR _ _ _ _ _ = return ()
+
+doLSDR :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doLSDR _ _ _ _ _ = return ()
+
+doROXdR :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doROXdR _ _ _ _ _ = return ()
+
+doROdR :: Int -> Int -> Int -> Int -> Int -> Emulator ()
+doROdR _ _ _ _ _ = return ()