mirror of
https://github.com/TomHarte/CLK.git
synced 2024-09-27 02:55:07 +00:00
Update logging.
This commit is contained in:
parent
7e47329e2a
commit
2200940efe
@ -11,6 +11,12 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
Log::Logger<Log::Source::MultiMachine> logger;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
using namespace Analyser::Dynamic;
|
using namespace Analyser::Dynamic;
|
||||||
|
|
||||||
MultiMachine::MultiMachine(std::vector<std::unique_ptr<DynamicMachine>> &&machines) :
|
MultiMachine::MultiMachine(std::vector<std::unique_ptr<DynamicMachine>> &&machines) :
|
||||||
@ -61,13 +67,14 @@ bool MultiMachine::would_collapse(const std::vector<std::unique_ptr<DynamicMachi
|
|||||||
|
|
||||||
void MultiMachine::did_run_machines(MultiTimedMachine *) {
|
void MultiMachine::did_run_machines(MultiTimedMachine *) {
|
||||||
std::lock_guard machines_lock(machines_mutex_);
|
std::lock_guard machines_lock(machines_mutex_);
|
||||||
#ifndef NDEBUG
|
|
||||||
|
if constexpr (logger.enabled) {
|
||||||
|
auto line = logger.info();
|
||||||
for(const auto &machine: machines_) {
|
for(const auto &machine: machines_) {
|
||||||
auto timed_machine = machine->timed_machine();
|
auto timed_machine = machine->timed_machine();
|
||||||
LOGNBR(PADHEX(2) << timed_machine->get_confidence() << " " << timed_machine->debug_type() << "; ");
|
line.append("%0.4f %s; ", timed_machine->get_confidence(), timed_machine->debug_type().c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LOGNBR(std::endl);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
DynamicMachine *front = machines_.front().get();
|
DynamicMachine *front = machines_.front().get();
|
||||||
std::stable_sort(machines_.begin(), machines_.end(),
|
std::stable_sort(machines_.begin(), machines_.end(),
|
||||||
|
@ -11,13 +11,14 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
#define NDEBUG
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define LOG_PREFIX "[MFP] "
|
|
||||||
#include "../../Outputs/Log.hpp"
|
#include "../../Outputs/Log.hpp"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
Log::Logger<Log::Source::MFP68901> logger;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
using namespace Motorola::MFP68901;
|
using namespace Motorola::MFP68901;
|
||||||
|
|
||||||
ClockingHint::Preference MFP68901::preferred_clocking() const {
|
ClockingHint::Preference MFP68901::preferred_clocking() const {
|
||||||
@ -64,11 +65,11 @@ uint8_t MFP68901::read(int address) {
|
|||||||
case 0x11: case 0x12: return get_timer_data(address - 0xf);
|
case 0x11: case 0x12: return get_timer_data(address - 0xf);
|
||||||
|
|
||||||
// USART block: TODO.
|
// USART block: TODO.
|
||||||
case 0x13: LOG("Read: sync character generator"); break;
|
case 0x13: logger.error().append("Read: sync character generator"); break;
|
||||||
case 0x14: LOG("Read: USART control"); break;
|
case 0x14: logger.error().append("Read: USART control"); break;
|
||||||
case 0x15: LOG("Read: receiver status"); break;
|
case 0x15: logger.error().append("Read: receiver status"); break;
|
||||||
case 0x16: LOG("Read: transmitter status"); break;
|
case 0x16: logger.error().append("Read: transmitter status"); break;
|
||||||
case 0x17: LOG("Read: USART data"); break;
|
case 0x17: logger.error().append("Read: USART data"); break;
|
||||||
}
|
}
|
||||||
return 0x00;
|
return 0x00;
|
||||||
}
|
}
|
||||||
@ -169,11 +170,11 @@ void MFP68901::write(int address, uint8_t value) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
// USART block: TODO.
|
// USART block: TODO.
|
||||||
case 0x13: LOG("Write: sync character generator"); break;
|
case 0x13: logger.error().append("Write: sync character generator"); break;
|
||||||
case 0x14: LOG("Write: USART control"); break;
|
case 0x14: logger.error().append("Write: USART control"); break;
|
||||||
case 0x15: LOG("Write: receiver status"); break;
|
case 0x15: logger.error().append("Write: receiver status"); break;
|
||||||
case 0x16: LOG("Write: transmitter status"); break;
|
case 0x16: logger.error().append("Write: transmitter status"); break;
|
||||||
case 0x17: LOG("Write: USART data"); break;
|
case 0x17: logger.error().append("Write: USART data"); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
update_clocking_observer();
|
update_clocking_observer();
|
||||||
@ -220,7 +221,7 @@ HalfCycles MFP68901::next_sequence_point() {
|
|||||||
// MARK: - Timers
|
// MARK: - Timers
|
||||||
|
|
||||||
void MFP68901::set_timer_mode(int timer, TimerMode mode, int prescale, bool reset_timer) {
|
void MFP68901::set_timer_mode(int timer, TimerMode mode, int prescale, bool reset_timer) {
|
||||||
LOG("Timer " << timer << " mode set: " << int(mode) << "; prescale: " << prescale);
|
logger.error().append("Timer %d mode set: %d; prescale: %d", timer, mode, prescale);
|
||||||
timers_[timer].mode = mode;
|
timers_[timer].mode = mode;
|
||||||
if(reset_timer) {
|
if(reset_timer) {
|
||||||
timers_[timer].prescale_count = 0;
|
timers_[timer].prescale_count = 0;
|
||||||
@ -398,7 +399,7 @@ int MFP68901::acknowledge_interrupt() {
|
|||||||
|
|
||||||
int selected = 0;
|
int selected = 0;
|
||||||
while((1 << selected) != mask) ++selected;
|
while((1 << selected) != mask) ++selected;
|
||||||
// LOG("Interrupt acknowledged: " << selected);
|
// logger.error().append("Interrupt acknowledged: %d", selected);
|
||||||
return (interrupt_vector_ & 0xf0) | uint8_t(selected);
|
return (interrupt_vector_ & 0xf0) | uint8_t(selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,10 +29,12 @@ enum class Source {
|
|||||||
M50740,
|
M50740,
|
||||||
Macintosh,
|
Macintosh,
|
||||||
MasterSystem,
|
MasterSystem,
|
||||||
|
MultiMachine,
|
||||||
MFP68901,
|
MFP68901,
|
||||||
MSX,
|
MSX,
|
||||||
NCR5380,
|
NCR5380,
|
||||||
OpenGL,
|
OpenGL,
|
||||||
|
PCMTrack,
|
||||||
SCC,
|
SCC,
|
||||||
SCSI,
|
SCSI,
|
||||||
SZX,
|
SZX,
|
||||||
@ -52,6 +54,7 @@ constexpr bool is_enabled(Source source) {
|
|||||||
default: return true;
|
default: return true;
|
||||||
|
|
||||||
// The following are all things I'm not actively working on.
|
// The following are all things I'm not actively working on.
|
||||||
|
case Source::MFP68901:
|
||||||
case Source::NCR5380:
|
case Source::NCR5380:
|
||||||
case Source::SCC: return false;
|
case Source::SCC: return false;
|
||||||
}
|
}
|
||||||
@ -65,7 +68,10 @@ constexpr const char *prefix(Source source) {
|
|||||||
case Source::AtariST: return "AtariST";
|
case Source::AtariST: return "AtariST";
|
||||||
case Source::CommodoreStaticAnalyser: return "Commodore StaticAnalyser";
|
case Source::CommodoreStaticAnalyser: return "Commodore StaticAnalyser";
|
||||||
case Source::i8272: return "i8272";
|
case Source::i8272: return "i8272";
|
||||||
|
case Source::MFP68901: return "MFP68901";
|
||||||
|
case Source::MultiMachine: return "Multi machine";
|
||||||
case Source::NCR5380: return "5380";
|
case Source::NCR5380: return "5380";
|
||||||
|
case Source::PCMTrack: return "PCM Track";
|
||||||
case Source::SCSI: return "SCSI";
|
case Source::SCSI: return "SCSI";
|
||||||
case Source::SCC: return "SCC";
|
case Source::SCC: return "SCC";
|
||||||
case Source::SZX: return "SZX";
|
case Source::SZX: return "SZX";
|
||||||
@ -81,12 +87,14 @@ constexpr const char *prefix(Source source) {
|
|||||||
template <Source source>
|
template <Source source>
|
||||||
class Logger {
|
class Logger {
|
||||||
public:
|
public:
|
||||||
|
static constexpr bool enabled = is_enabled(source);
|
||||||
|
|
||||||
Logger() {}
|
Logger() {}
|
||||||
|
|
||||||
struct LogLine {
|
struct LogLine {
|
||||||
public:
|
public:
|
||||||
LogLine(FILE *stream) : stream_(stream) {
|
LogLine(FILE *stream) : stream_(stream) {
|
||||||
if constexpr (!is_enabled(source)) return;
|
if constexpr (!enabled) return;
|
||||||
|
|
||||||
const auto source_prefix = prefix(source);
|
const auto source_prefix = prefix(source);
|
||||||
if(source_prefix) {
|
if(source_prefix) {
|
||||||
@ -95,12 +103,12 @@ class Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
~LogLine() {
|
~LogLine() {
|
||||||
if constexpr (!is_enabled(source)) return;
|
if constexpr (!enabled) return;
|
||||||
fprintf(stream_, "\n");
|
fprintf(stream_, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void append(const char *format, ...) {
|
void append(const char *format, ...) {
|
||||||
if constexpr (!is_enabled(source)) return;
|
if constexpr (!enabled) return;
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
vfprintf(stream_, format, args);
|
vfprintf(stream_, format, args);
|
||||||
|
@ -9,6 +9,12 @@
|
|||||||
#include "PCMTrack.hpp"
|
#include "PCMTrack.hpp"
|
||||||
#include "../../../Outputs/Log.hpp"
|
#include "../../../Outputs/Log.hpp"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
Log::Logger<Log::Source::PCMTrack> logger;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
using namespace Storage::Disk;
|
using namespace Storage::Disk;
|
||||||
|
|
||||||
PCMTrack::PCMTrack() : segment_pointer_(0) {}
|
PCMTrack::PCMTrack() : segment_pointer_(0) {}
|
||||||
@ -60,7 +66,7 @@ PCMTrack *PCMTrack::resampled_clone(Track *original, size_t bits_per_track) {
|
|||||||
return pcm_original->resampled_clone(bits_per_track);
|
return pcm_original->resampled_clone(bits_per_track);
|
||||||
}
|
}
|
||||||
|
|
||||||
ERROR("NOT IMPLEMENTED: resampling non-PCMTracks");
|
logger.error().append("NOT IMPLEMENTED: resampling non-PCMTracks");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user