break;
}
}
+
+struct dcpu16_hw *spc2000_new(struct dcpu16 *vm) {
+ struct dcpu16_hw *hw;
+
+ hw = calloc(1, sizeof *hw);
+ if (hw == NULL) {
+ vm->warn_cb_("%s():%s", "calloc", strerror(errno));
+ return NULL;
+ }
+
+ memcpy(hw, &hw_, sizeof *hw);
+
+ hw->data = calloc(1, sizeof(struct spc2000_));
+ if (hw->data == NULL) {
+ vm->warn_cb_("%s():%s", "calloc", strerror(errno));
+ free(hw);
+ return NULL;
+ }
+
+ hw->vm = vm;
+
+ return hw;
+}
+
+void spc2000_del(struct dcpu16_hw **hw) {
+ if (hw) {
+ if (*hw) {
+ if ((*hw)->data) {
+ free((*hw)->data);
+ (*hw)->data = NULL;
+ }
+ free(*hw);
+ *hw = NULL;
+ }
+ }
+}