merge
[dcpu16] / hw_clock.c
index f70dcf4c3d368f634f12435d62ab5cd4ea2c1f37..252c08f28096d78832a99736a2bc70e57d94b129 100644 (file)
@@ -5,6 +5,15 @@
 #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;
@@ -39,7 +48,7 @@ void clock_cycle_(struct dcpu16 *vm, struct dcpu16_hw *hw) {
 
         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_);
         }
     }
 }
@@ -71,7 +80,7 @@ int clock_data_init_(struct dcpu16_hw *hw, void *data) {
 
     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;
@@ -87,8 +96,10 @@ void clock_data_free_(struct dcpu16_hw *hw) {
     }
 }
 
-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,
@@ -97,11 +108,9 @@ static struct dcpu16_hw hw_ = {
     .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,
+    .ctl_cmd = NULL,
 };