{- 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 . -} {-# 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