--- /dev/null
+#include "logger.h"
+
+static uint64_t sEventNumber = 0;
+
+uint64_t getNextEventNumber() {
+ return sEventNumber++;
+}
+
+uint64_t getEventNumber() {
+ return sEventNumber;
+}
+
+static uint32_t sCurrentPC = 0;
+
+void setPC(uint32_t pc) {
+ sCurrentPC = pc;
+}
+uint32_t getPC() {
+ return sCurrentPC;
+}
\ No newline at end of file
--- /dev/null
+#pragma once
+
+#include <stdio.h>
+#include <stdint.h>
+
+uint64_t getNextEventNumber();
+uint64_t getEventNumber();
+
+void setPC(uint32_t);
+uint32_t getPC();
+
+#define LOG_REG_W(name, addr, value) \
+ printf("%llu: (%08x) [W] %s [%08x] <= %08x\n", getNextEventNumber(), getPC(), name, addr, value)
+
+#define LOG_REG_R(name, addr, value) \
+ printf("%llu: (%08x) [R] %s [%08x] => %08x\n", getNextEventNumber(), getPC(), name, addr, value)
return m_OSMR[3];
case OSCR:
- LOG_REG_R("OSTimer OSCR", address, m_OSCR);
+ //LOG_REG_R("OSTimer OSCR", address, m_OSCR);
return m_OSCR;
case OSSR:
void OsTimer::put_data(uint32_t const address, uint32_t const value) {
switch (address)
{
- case OSMR0:
+ case OSMR0: {
LOG_REG_W("OSTimer OSMR0", address, value);
+ auto delta = value - m_OSCR;
+ printf("OSTimer 0 set to %d ticks (%fms)\n", delta, delta / 3686.400f);
m_OSMR[0] = value;
break;
-
- case OSMR1:
+ }
+ case OSMR1: {
LOG_REG_W("OSTimer OSMR1", address, value);
+ auto delta = value - m_OSCR;
+ printf("OSTimer 1 set to %d ticks (%fms)\n", delta, delta / 3686.400f);
m_OSMR[1] = value;
break;
-
- case OSMR2:
+ }
+ case OSMR2: {
LOG_REG_W("OSTimer OSMR2", address, value);
+ auto delta = value - m_OSCR;
+ printf("OSTimer 2 set to %d ticks (%fms)\n", delta, delta / 3686.400f);
m_OSMR[2] = value;
break;
-
- case OSMR3:
+ }
+ case OSMR3: {
LOG_REG_W("OSTimer OSMR3", address, value);
+ auto delta = value - m_OSCR;
+ printf("OSTimer 3 set to %d ticks (%fms)\n", delta, delta / 3686.400f);
m_OSMR[3] = value;
break;
-
+ }
case OSCR:
LOG_REG_W("OSTimer OSCR", address, value);
m_OSCR = value;