#include #include "console.h" #include "cpu.h" #include "kw11-l.h" #include "utils.h" #if defined(ESP32) void thread_wrapper_kw11(void *p) { kw11_l *const kw11l = reinterpret_cast(p); kw11l->operator()(); } #endif kw11_l::kw11_l(bus *const b, console *const cnsl) : b(b), cnsl(cnsl) { #if defined(ESP32) xTaskCreatePinnedToCore(&thread_wrapper_kw11, "kw11-l", 2048, this, 1, nullptr, 0); #else th = new std::thread(std::ref(*this)); #endif } kw11_l::~kw11_l() { stop_flag = true; #if !defined(ESP32) th->join(); #endif delete th; } void kw11_l::operator()() { while(!stop_flag) { if (*cnsl->get_running_flag()) { b->set_lf_crs_b7(); if (b->get_lf_crs() & 64) b->getCpu()->queue_interrupt(6, 0100); myusleep(1000000 / 50); // 20ms } else { myusleep(1000000 / 10); // 100ms } } }