+typedef void (dcpu16_hw_signal_t)(struct dcpu16 *, struct dcpu16_hw *);
+typedef void (dcpu16_hw_data_free_t)(struct dcpu16_hw *);
+/* these are used to define hardware attached to the system */
+struct dcpu16_hw {
+ struct dcpu16 *vm; /* which system do I belong to */
+ char *name_;
+
+ DCPU16_WORD id_l;
+ DCPU16_WORD id_h;
+ DCPU16_WORD ver;
+ DCPU16_WORD mfg_l;
+ DCPU16_WORD mfg_h;
+
+ dcpu16_hw_signal_t *hwi;
+ dcpu16_hw_signal_t *cycle;
+ dcpu16_hw_signal_t *reset;
+
+ dcpu16_hw_data_free_t *data_free;
+ void *data;
+};
+
+typedef int (dcpu16_hw_data_init_t)(struct dcpu16_hw *, void *);
+struct dcpu16_hw_module {
+ struct dcpu16_hw *template;
+ dcpu16_hw_data_init_t *data_init;
+ dcpu16_hw_data_free_t *data_free;
+};
+