Who checks the status (failure or success) of a command, the controller simulation, or the processor?
The controller simulation (which is your program) simply returns the status of the command it executed (which is the return code it gets from the disk or the memory) to the processor. The controller simulation does not concern itself with success/failure of the command it executes. The processor (which is the library code) decides how to handle the response it gets from the controller.