module HybridInstr where import Amiga import qualified SynthWF import SynthWF(SynthWF) data HybridInstr = HybridInstr { defaultdecay :: UBYTE , reserved :: [ UBYTE ] , rep :: UWORD , replen :: UWORD , voltbllen :: UWORD , wftbllen :: UWORD , volspeed :: UBYTE , wfspeed :: UBYTE , wforms :: UWORD , voltbl :: [ UBYTE ] , wftbl :: [ UBYTE ] , wf0 :: PTR -- FIXME , wf :: [ Maybe SynthWF ] } deriving (Show) peek :: MEM -> PTR -> IO HybridInstr peek m p = do defaultdecay' <- peekUBYTE m (p+6) reserved' <- mapM (peekUBYTE m) $ pointerRange (p+7) 1 3 rep' <- peekUWORD m (p+10) replen' <- peekUWORD m (p+12) voltbllen' <- peekUWORD m (p+14) wftbllen' <- peekUWORD m (p+16) volspeed' <- peekUBYTE m (p+18) wfspeed' <- peekUBYTE m (p+19) wforms' <- peekUWORD m (p+20) voltbl' <- mapM (peekUBYTE m) $ pointerRange (p+22) 1 128 wftbl' <- mapM (peekUBYTE m) $ pointerRange (p+150) 150 128 wf0':wf'' <- mapM (peekPTR m) $ pointerRange (p+278) 4 64 wf' <- mapM (SynthWF.peek m . (p+) $?) wf'' return $ HybridInstr defaultdecay' reserved' rep' replen' voltbllen' wftbllen' volspeed' wfspeed' wforms' voltbl' wftbl' wf0' wf'