60 lines
947 B
C++
60 lines
947 B
C++
// (C) 2018-2023 by Folkert van Heusden
|
|
// Released under MIT license
|
|
|
|
#include <unistd.h>
|
|
|
|
#include "console.h"
|
|
#include "cpu.h"
|
|
#include "kw11-l.h"
|
|
#include "utils.h"
|
|
|
|
#if defined(ESP32)
|
|
#include "esp32.h"
|
|
#endif
|
|
|
|
|
|
#if defined(ESP32)
|
|
void thread_wrapper_kw11(void *p)
|
|
{
|
|
kw11_l *const kw11l = reinterpret_cast<kw11_l *>(p);
|
|
|
|
kw11l->operator()();
|
|
}
|
|
#endif
|
|
|
|
kw11_l::kw11_l(bus *const b, console *const cnsl) : b(b), cnsl(cnsl)
|
|
{
|
|
#if defined(ESP32)
|
|
xTaskCreate(&thread_wrapper_kw11, "kw11-l", 2048, this, 1, nullptr);
|
|
#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
|
|
}
|
|
}
|
|
}
|