this allows libraries to register interrupt handlers, so multiple components can use the same hardware level interrupt