mirror of
https://github.com/c3d/DB48X-on-DM42.git
synced 2024-09-28 03:20:53 +02:00
3cfa86fbd5
To ease debugging, add a %t format turning RPL object pointers into their text rendering while tracing. Signed-off-by: Christophe de Dinechin <christophe@dinechin.org>
133 lines
3.9 KiB
C++
133 lines
3.9 KiB
C++
// ****************************************************************************
|
|
// main.cpp DB48X project
|
|
// ****************************************************************************
|
|
//
|
|
// File Description:
|
|
//
|
|
// DM42 simulator for the DB48 project
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//
|
|
// ****************************************************************************
|
|
// (C) 2022 Christophe de Dinechin <christophe@dinechin.org>
|
|
// This software is licensed under the terms outlined in LICENSE.txt
|
|
// ****************************************************************************
|
|
// This file is part of DB48X.
|
|
//
|
|
// DB48X is free software: you can redistribute it and/or modify
|
|
// it under the terms outlined in the LICENSE.txt file
|
|
//
|
|
// DB48X is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
// ****************************************************************************
|
|
|
|
#include "object.h"
|
|
#include "recorder.h"
|
|
#include "sim-rpl.h"
|
|
#include "sim-window.h"
|
|
|
|
#include <QApplication>
|
|
#include <QWindow>
|
|
|
|
RECORDER(options, 32, "Information about command line options");
|
|
|
|
bool run_tests = false;
|
|
bool db48x_keyboard = false;
|
|
extern uint wait_time;
|
|
|
|
|
|
size_t recorder_render_object(intptr_t tracing,
|
|
const char *UNUSED format,
|
|
char *buffer, size_t size,
|
|
uintptr_t arg)
|
|
// ----------------------------------------------------------------------------
|
|
// Render a value during a recorder dump (%t format)
|
|
// ----------------------------------------------------------------------------
|
|
{
|
|
object_p value = object_p(arg);
|
|
size_t result = 0;
|
|
if (tracing)
|
|
{
|
|
if (value)
|
|
{
|
|
char tmp[80];
|
|
size_t sz = value->render(tmp, sizeof(tmp)-1);
|
|
tmp[sz] = 0;
|
|
result = snprintf(buffer, size, "%p[%lu] %s[%s]",
|
|
(void *) value,
|
|
value->size(),
|
|
value->fancy(),
|
|
tmp);
|
|
}
|
|
else
|
|
{
|
|
result = snprintf(buffer, size, "0x0 <NULL>");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
result = snprintf(buffer, size, "%p", (void *) value);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
// ----------------------------------------------------------------------------
|
|
// Main entry point for the simulator
|
|
// ----------------------------------------------------------------------------
|
|
{
|
|
const char *traces = getenv("DB48X_TRACES");
|
|
recorder_trace_set(".*(error|warning)s?");
|
|
if (traces)
|
|
recorder_trace_set(traces);
|
|
recorder_dump_on_common_signals(0, 0);
|
|
recorder_configure_type('t', recorder_render_object);
|
|
|
|
record(options,
|
|
"Simulator invoked as %+s with %d arguments", argv[0], argc-1);
|
|
for (int a = 1; a < argc; a++)
|
|
{
|
|
record(options, " %u: %+s", a, argv[a]);
|
|
if (argv[a][0] == '-')
|
|
{
|
|
switch(argv[a][1])
|
|
{
|
|
case 't':
|
|
recorder_trace_set(argv[a]+2);
|
|
break;
|
|
case 'T':
|
|
run_tests = true;
|
|
break;
|
|
case 'd':
|
|
db48x_keyboard = true;
|
|
break;
|
|
case 'w':
|
|
if (argv[a][2])
|
|
wait_time = atoi(argv[a]+2);
|
|
else if (a < argc)
|
|
wait_time = atoi(argv[++a]);
|
|
}
|
|
}
|
|
}
|
|
|
|
#if QT_VERSION < 0x060000
|
|
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
|
#endif // QT version 6
|
|
|
|
QCoreApplication::setOrganizationName("DB48X Project");
|
|
QCoreApplication::setOrganizationDomain("48calc.org");
|
|
QCoreApplication::setApplicationName("DB48X");
|
|
|
|
QApplication a(argc, argv);
|
|
MainWindow w;
|
|
w.show();
|
|
return a.exec();
|
|
}
|