49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Model
 | 
						|
 | 
						|
The emulator is designed to support multiple models simultaneously. Each model
 | 
						|
must be implemented by following the `model_spec` interface, which defines the
 | 
						|
functions that will be called by the emulation when that model is enabled.
 | 
						|
 | 
						|
Each model must have a unique character that identifies the model, and will be
 | 
						|
used to filter the events in the MCV (model, category, value) tuple of the
 | 
						|
input event.
 | 
						|
 | 
						|
Unless otherwise stated, all model functions return 0 on success or -1 on error.
 | 
						|
 | 
						|
## Probe
 | 
						|
 | 
						|
The probe function determines if the model should be enabled or not, based on
 | 
						|
the information read from the metadata of the traces. No events are available
 | 
						|
yet. Returns -1 on error, 0 if the model must be enabled or 1 if not.
 | 
						|
 | 
						|
If the model is not enabled, no other function will be called.
 | 
						|
 | 
						|
## Create
 | 
						|
 | 
						|
The create function is called for each enabled model to allow them to allocate
 | 
						|
all the required structures to perform the emulation using the
 | 
						|
[extend](../extend) mechanism. All the required channels must be created and
 | 
						|
registered in the patch bay in this function, so other models can found them in
 | 
						|
the next stage.
 | 
						|
 | 
						|
## Connect
 | 
						|
 | 
						|
In the connect function, the channels and multiplexers are connected, as all the
 | 
						|
channels of all models have already been registered in the patch bay. The
 | 
						|
channels must also be connected to the output traces to record the states.
 | 
						|
 | 
						|
## Event
 | 
						|
 | 
						|
The event function is called only if the processed input event matches the model
 | 
						|
character. The function must return 0 on success or -1 on error. If an error
 | 
						|
is returned, the emulator will print some information about the current event and
 | 
						|
proceed to call the last stage so the traces can be closed and flushed to disk
 | 
						|
before stopping the emulation process.
 | 
						|
 | 
						|
## Finish
 | 
						|
 | 
						|
This function is called when there are no more events to be processed or when
 | 
						|
the emulator has encountered a problem processing on event and needs to abort
 | 
						|
the emulation process. The output traces must be closed to write all the buffers
 | 
						|
into disk. Additional allocated structures may now be freed.
 |