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 ""