2019-05-16 16:48:45 +02:00
|
|
|
// The OS/K Team licenses this file to you under the MIT license.
|
|
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
|
|
|
|
#include "arch.h"
|
|
|
|
|
|
|
|
void dumpmem(ctx_t *ctx, ulong start, ulong size)
|
|
|
|
{
|
|
|
|
uint i;
|
|
|
|
for (i = 0; i < size/sizeof(ushort); i++) {
|
|
|
|
if (i % 4 == 0) {
|
|
|
|
if (i > 0) {
|
|
|
|
if (i % 8 == 0) log("\n");
|
|
|
|
else log(" ");
|
|
|
|
}
|
|
|
|
|
|
|
|
log("[0x%08lX]=0x", start + i * 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
log("%04hX", ctx->mp[addr2real(start) + i]);
|
|
|
|
|
|
|
|
}
|
|
|
|
log("\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
void dumpfwstack(ctx_t *ctx)
|
|
|
|
{
|
2019-05-16 17:14:37 +02:00
|
|
|
//log("\nFirmware stack:\n");
|
|
|
|
//dumpmem(ctx, FWSTACK - 128, 128 + 64);
|
2019-05-16 16:48:45 +02:00
|
|
|
}
|
|
|
|
|
2019-05-16 21:42:23 +02:00
|
|
|
void d_log(ctx_t *ctx, char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start(ap, fmt);
|
|
|
|
|
|
|
|
if (ctx->disf) {
|
|
|
|
vfprintf(ctx->disf, fmt, ap);
|
|
|
|
fflush(ctx->disf);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
vlog(fmt, ap);
|
|
|
|
|
|
|
|
va_end(ap);
|
|
|
|
}
|
|
|
|
|
2019-05-29 16:57:22 +02:00
|
|
|
void dumpinstr(ctx_t *ctx, ulong rip, uint rep,
|
|
|
|
ushort c, acc_t *p1, acc_t *p2)
|
2019-05-16 16:48:45 +02:00
|
|
|
{
|
|
|
|
acc_t *p = 0;
|
|
|
|
instr_t *i = &ctx->i[c];
|
2019-05-16 21:42:23 +02:00
|
|
|
|
2019-05-29 16:57:22 +02:00
|
|
|
d_log(ctx, "0x%08lX: %s%s", rip,
|
|
|
|
(rep ? "rep " : ""),
|
|
|
|
i->name);
|
2019-05-16 16:48:45 +02:00
|
|
|
|
|
|
|
if (i->prm1 != NOPRM)
|
|
|
|
p = p1;
|
|
|
|
lp:
|
|
|
|
if (p != 0) {
|
2019-05-29 16:57:22 +02:00
|
|
|
if (p->mem) d_log(ctx, " %c:[", getmempref(p->mlen));
|
2019-05-16 21:42:23 +02:00
|
|
|
else d_log(ctx, " ");
|
2019-05-16 16:48:45 +02:00
|
|
|
|
|
|
|
if (p->type == A_REG)
|
2019-05-16 21:42:23 +02:00
|
|
|
d_log(ctx, "%s", ctx->r[p->val].name);
|
2019-05-16 16:48:45 +02:00
|
|
|
else
|
2019-05-29 16:57:22 +02:00
|
|
|
d_log(ctx, "%c:0x%lX", getmempref(p->ilen), p->val);
|
2019-05-16 16:48:45 +02:00
|
|
|
|
|
|
|
if (p->mem) {
|
|
|
|
if (p->off)
|
2019-05-16 21:42:23 +02:00
|
|
|
d_log(ctx, "+%hd", p->off);
|
|
|
|
d_log(ctx, "]");
|
2019-05-16 16:48:45 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (p == p1 && i->prm2 != NOPRM) {
|
|
|
|
p = p2;
|
2019-05-16 21:42:23 +02:00
|
|
|
d_log(ctx, ",");
|
2019-05-16 16:48:45 +02:00
|
|
|
goto lp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-16 21:42:23 +02:00
|
|
|
d_log(ctx, "\n");
|
2019-05-16 16:48:45 +02:00
|
|
|
}
|