Summary - The user selects the preferred mode at run time based on a description of the implementation capabilities. - Allow the implementation to support a number of different modes 2-state mode only (strict) – report error if X/Z passed to emulator This is the minimum supported mode and the default mode. 2-state mode with selectable coercion User specifies coercion mapping (X = 0/1; Z=0/1) User specifies if warning is issued for X/Z in this mode or not 4-state mode (no coercion) - Allow the user to query the implementation capabilities at initialization time. - Allow the user to select the preferred mode of implementation operation after the query. - Allow the user to select the preferred mode of TB. - Selecting an unsupported mode results in an error. - Question: Do we allow an implementation to support only two-state types at run time? New Calls - Update SCEMIInit, to take an argument, or add a new call SCEMICapabilities. SCEMIInit(struct SCEMICapabilities *e); or SCEMIQueryCapabilities(struct SCEMICapabilities *e); - The SCEMICapabilities structure has one member, StateSupport, an enumerated type. - Add SCEMISelectCapabilities(const SCEMICapabilities *e,int XValue, int YValue); This selcets mode and coercion. Usage example pseudocode: SCEMIInit(SCEMICapabilities &e); if( e.StateSupport == FullFourState) { request full four state; set TB mode to four state; } else if (e.StateSupport == FourStateTypesWithCoercion) { Specify coercion X/Z to (0,1) set TB mode to two state; } else if (e.StateSupport == TwoStateStrict) { set TB mode to strict two state } else if (e.StateSupport == TwoStateTypesOnly ) { Set TB mode to two state only mode } else { /* this should have been detected at compile time - ie. 2 state minimum is required */ throw("compiled against the wrong library"); } Note: As per your modification, at run time, the emulator is queried at init for its capabilities (hidden to user in middleware/rendezvous) - if the user mode selected fits within the capability of the emulator -> accepted - if the user mode selected does not meet the emulator’s capability -> error @ init time Example: - Emulator capable of 2-state, with or without coercion Case 1: - User selects: 4-state (no coercion) - Emulator will report error Case 2: - User selects: 2-state (coercion), mapping X=0, Z=1, no warning - Emulator accepts and runs without warning