interrupt driven, multi input, multi output, untested