1
0
mirror of https://github.com/rzzzwilson/pymlac.git synced 2025-06-10 09:32:41 +00:00
2015-11-06 14:07:53 +07:00

135 lines
2.8 KiB
C
Executable File

/*
* Trace routines for vimlac.
*/
#include <stdarg.h>
#include "vimlac.h"
#include "cpu.h"
bool TraceFlag = false;
static char *TraceFile = "trace.out";
static FILE *trace_fp = NULL;
/******************************************************************************
* Description : printf()-style output routine to RAW screen.
* Parameters : like printf()
* Returns :
* Comments :
******************************************************************************/
void
trace_open(void)
{
trace_fp = fopen(TraceFile, "a");
TraceFlag = true;
}
/******************************************************************************
* Description : printf()-style output routine to RAW screen.
* Parameters : like printf()
* Returns :
* Comments :
******************************************************************************/
void
trace_close(void)
{
if (trace_fp != NULL)
fclose(trace_fp);
trace_fp = NULL;
TraceFlag = false;
}
/******************************************************************************
* Description : printf()-style output routine to RAW screen.
* Parameters : like printf()
* Returns :
* Comments :
******************************************************************************/
void
Emit(char *fmt, ...)
{
va_list ap;
char buff[512];
char *chptr;
va_start(ap, fmt);
vsprintf(buff, fmt, ap);
va_end(ap);
for (chptr = buff; *chptr != '\0'; ++chptr)
fprintf(trace_fp, "%c", *chptr);
fflush(trace_fp);
}
void
DumpRegs(char *buff)
{
sprintf(buff, "AC=0%6.6o\tL=%1.1o", cpu_get_AC(), cpu_get_L());
}
void
trace_delim(char *fmt, ...)
{
va_list ap;
char buff[1024];
va_start(ap, fmt);
vsprintf(buff, fmt, ap);
va_end(ap);
Emit("%s\n", buff);
}
/******************************************************************************
Description : printf()-style trace routine to dump registers.
Parameters :
Returns :
Comments :
******************************************************************************/
void
traceRegs(void)
{
static char outbuff[512];
if (TraceFlag != false)
{
char emitbuff[512];
DumpRegs(outbuff);
sprintf(emitbuff, "\t;%s", outbuff);
Emit(emitbuff);
}
}
/******************************************************************************
Description : printf()-style trace routine.
Parameters : like printf()
Returns :
Comments :
******************************************************************************/
void
trace(char *fmt, ...)
{
static char outbuff[512];
if (TraceFlag != false)
{
va_list ap;
va_start(ap, fmt);
vsprintf(outbuff, fmt, ap);
va_end(ap);
Emit("0%6.6o\t%s", cpu_get_prev_PC(), outbuff);
traceRegs();
Emit("\n");
}
}