= OnInterrupt $ fromByteCode s bitand 127
instance fromByteCode MTaskDeviceSpec where
fromByteCode s = let c = toInt s.[0] in
- {MTaskDeviceSpec
- |haveLed=(c bitand 1) > 0
- ,haveAio=(c bitand 2) > 0
- ,haveDio=(c bitand 4) > 0
- ,bytesMemory=from16bit $ s % (1,3)
+ { MTaskDeviceSpec
+ | haveLed = (c bitand 1) > 0
+ , haveAio = (c bitand 2) > 0
+ , haveDio = (c bitand 4) > 0
+ , 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
t >>| tell [BCJmp endif, BCLab else] >>|
e >>| tell [BCLab endif]
-freshl = get >>= \st=:{freshl=[fr:frs]}->put {st & freshl=frs} >>| pure fr
-freshs = get >>= \st=:{freshs=[fr:frs]}->put {st & freshs=frs} >>| pure fr
+freshl = get >>= \st=:{freshl}->put ({st & freshl=freshl+1}) >>| pure freshl
+freshs = get >>= \st=:{freshs}->put ({st & freshs=freshs+1}) >>| pure freshs
instance noOp ByteCode where noOp = tell` [BCNop]
retrn = tell` [BCReturn]
instance zero BCState where
- zero = {freshl=[1..], freshs=[1..], sdss=[]}
+ zero = {freshl=1, freshs=1, sdss=[]}
toRealByteCode :: (ByteCode a b) BCState -> (String, BCState)
toRealByteCode x s