#include "dcpu16.h"
#include "hw_clock.h"
+#define MSG_(__level__, __vm__, ...) do { ((__vm__) ? ((struct dcpu16 *)(__vm__))->msg_cb_ : dcpu16_msg_)(__level__, __VA_ARGS__); } while (0)
+#define MSG_INFO(__vm__, ...) MSG_(DCPU16_MSG_INFO, __vm__, __VA_ARGS__)
+#define MSG_ERROR(__vm__, ...) MSG_(DCPU16_MSG_ERROR, __vm__, __VA_ARGS__)
+#ifdef DEBUG
+#define MSG_DEBUG(__vm__, ...) MSG_(DCPU16_MSG_DEBUG, __vm__, __VA_ARGS__)
+#else /* DEBUG */
+#define MSG_DEBUG(__vm__, ...) do { } while (0)
+#endif /* DEBUG */
+
struct clock_ {
DCPU16_WORD cycle_;
DCPU16_WORD rate;
if (clock->interrupt_message) {
if (dcpu16_interrupt(vm, clock->interrupt_message))
- vm->warn_cb_("%s: could not send interrupt", hw->name_);
+ MSG_ERROR(vm, "%s: could not send interrupt", hw->mod->name_);
}
}
}
hw->data = calloc(1, sizeof(struct clock_));
if (hw->data == NULL) {
- hw->vm->warn_cb_("%s():%s", "calloc", strerror(errno));
+ MSG_ERROR(hw->vm, "%s():%s", "calloc", strerror(errno));
return -1;
}
return 0;
}
}
-static struct dcpu16_hw hw_ = {
+
+struct dcpu16_hw_module dcpu16_hw_module_clock = {
.name_ = "Generic Clock (compatible)",
+
.id_l = 0xb402,
.id_h = 0x12d0,
.ver = 0x0001,
.hwi = clock_hwi_,
.cycle = clock_cycle_,
.reset = clock_reset_,
- .data = (struct clock_ *)NULL
-};
-struct dcpu16_hw_module dcpu16_hw_module_clock = {
- .template = &hw_,
.data_init = clock_data_init_,
.data_free = clock_data_free_,
.ctl = NULL,