dcpu16-0.1.0.0: src/Dcpu16/Dumper.hs
module Dcpu16.Dumper (dump) where
import Dcpu16.Cpu
import Control.Monad
import Text.Printf
dumpMemLine :: CpuState -> Int -> IO ()
dumpMemLine cpu addr = do
putStr (printf "%04X:" addr)
forM_ [0..7] (\i -> readMemory cpu (addr + i) >>= putStr . printf " %04X")
putStrLn ""
dumpMemPage :: CpuState -> Int -> IO ()
dumpMemPage cpu base = forM_ [0,8..56] (\i -> dumpMemLine cpu (base + i))
dump :: CpuState -> IO ()
dump cpu = do
pc <- readRegister cpu RegPC
sp <- readRegister cpu RegSP
a <- readRegister cpu RegA
b <- readRegister cpu RegB
c <- readRegister cpu RegC
x <- readRegister cpu RegX
y <- readRegister cpu RegY
z <- readRegister cpu RegZ
i <- readRegister cpu RegI
j <- readRegister cpu RegJ
putStrLn $ printf "PC: %04X SP: %04X" pc sp
putStrLn $ printf "A: %04X B: %04X C: %04X" a b c
putStrLn $ printf "X: %04X Y: %04X Z: %04X" x y z
putStrLn $ printf "I: %04X J: %04X" i j
putStrLn "\nMemory dump:"
dumpMemPage cpu 0
putStrLn ""