X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;ds=sidebyside;f=mTaskInterpret.icl;h=164db5e60ab64688df2e2ddf1136ae959d3a7511;hb=6d956995e169ae8fd44d62e26e35d499a9660225;hp=7917c930614507df81c92f9587e785d2e7fe8a01;hpb=5fc9fc4e888f8a481fc66986a6389d4307ca9668;p=mTask.git diff --git a/mTaskInterpret.icl b/mTaskInterpret.icl index 7917c93..164db5e 100644 --- a/mTaskInterpret.icl +++ b/mTaskInterpret.icl @@ -164,9 +164,10 @@ instance fromByteCode MTaskDeviceSpec where | haveLed = (c bitand 1) > 0 , haveAio = (c bitand 2) > 0 , haveDio = (c bitand 4) > 0 - , aPins = toInt s.[3] - , dPins = toInt s.[4] , bytesMemory = from16bit $ s % (1,3) + , stackSize = from16bit $ s % (3,5) + , aPins = toInt s.[5] + , dPins = toInt s.[6] } derive gPrint Long, UserLED, Button, AnalogPin, DigitalPin, PinMode, Pin, BC, MTaskDeviceSpec @@ -264,15 +265,23 @@ unBC (BC x) = x instance sds ByteCode where sds f = {main = BC $ freshs - >>= \sdsi->pure {BCShare | sdsi=sdsi,sdsval=BCValue 0} - >>= \sds->pure (f (tell` [BCSdsFetch sds])) - >>= \(v In bdy)->modify (addSDS sds v) - >>| unBC (unMain bdy)} - where - addSDS sds v s = {s & sdss=[{sds & sdsval=BCValue v}:s.sdss]} - + >>= \sdsi->pure {BCShare | sdsname="", sdsi=sdsi, sdsval=BCValue 0} + >>= \sds ->pure (f $ tell` [BCSdsFetch sds]) + >>= \(v In bdy)->modify (addSDS sds v) + >>| unBC (unMain bdy)} + where + addSDS sds v s = {s & sdss=[{sds & sdsval=BCValue v}:s.sdss]} con f = undef +instance namedsds ByteCode where + namedsds f = {main = BC $ freshs + >>= \sdsi->pure {BCShare | sdsname="", sdsi=sdsi, sdsval=BCValue 0} + >>= \sds ->pure (f $ tell` [BCSdsFetch sds]) + >>= \(v Named n In bdy)->modify (addSDS sds n v) + >>| unBC (unMain bdy)} + where + addSDS sds n v s = {s & sdss=[{sds & sdsname=n, sdsval=BCValue v}:s.sdss]} + instance sdspub ByteCode where pub (BC x) = BC $ censor (\[BCSdsFetch s]->[BCSdsPublish s]) x @@ -364,15 +373,15 @@ toMessages interval x s instance == BCShare where (==) a b = a.sdsi == b.sdsi //Start = toMessages (OnInterval 500) $ toRealByteCode (unMain bc) zero -Start = fst $ toReadableByteCode (unMain $ bc) zero -//Start = fst $ toReadableByteCode (unMain $ blink LED1) zero -//Start = let (bcs, st) = toReadableByteCode (unMain bc) zero -// in (bcs, st.sdss) +//Start = [fst $ toReadableByteCode (unMain $ p0) zero +// ,'Text'.concat $ compile p0 +// ] +Start = toReadableByteCode (unMain $ p0) zero where -// bc = {main = ledOn (lit LED1)} -// bc = sds \x=5 In -// sds \y=4 In -// {main = If (y ==. lit 0) (pub x) (x =. x *. y :. y =. y -. lit 1)} + p0 :: (Main (a Int Expr)) | assign, namedsds, sds, arith a +// p0 = sds \x = 6 In {main = x =. x *. lit 7} + p0 = namedsds \x = 6 Named "x" In {main = x =. x *. lit 7} + bc = {main = IF (analogRead A0 >. lit 50) ( digitalWrite D0 (lit True) )