diff options
Diffstat (limited to 'SHARC/Kernel.hs')
-rw-r--r-- | SHARC/Kernel.hs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/SHARC/Kernel.hs b/SHARC/Kernel.hs new file mode 100644 index 0000000..c074f36 --- /dev/null +++ b/SHARC/Kernel.hs @@ -0,0 +1,51 @@ +{- + This file is part of shark-disassembler. + + Copyright (C) 2014 Ricardo Wurmus + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +-} + +{-# LANGUAGE OverloadedStrings #-} + +module SHARC.Kernel where + +import SHARC.Types +import SHARC.Word48 +import SHARC.Instruction + +import Control.Monad (replicateM,mapM_) +import Data.Word (Word64) +import Data.Binary.Get +import qualified Data.ByteString.Lazy as B + + +type Kernel = [Instruction] + +-- the boot kernel is 256 48-bit words long, +-- each 48-bit is read as six 8-bit packages (LSB first) +getKernel :: Get Kernel +getKernel = replicateM 256 getInstruction + +parseKernel :: B.ByteString -> Kernel +parseKernel = runGet getKernel + +-- p.609, hw.pdf +-- ivt_start_address = 0x90000 :: Word64 +-- ivt_end_address = 0x900ff :: Word64 +printKernel :: B.ByteString -> IO () +printKernel bs = mapM_ printInstructionWithAddr $ zip [offset..] kernel + where + offset = 0x90000 :: Word64 + kernel = parseKernel bs |