From 474de0309d2ed7566ec9b84ae6a410c8b07643ef Mon Sep 17 00:00:00 2001 From: julianb0 Date: Thu, 30 May 2019 13:25:30 +0200 Subject: [PATCH] break --- dos/main.k | 1 + pc/Makefile | 3 ++- pc/except.c | 2 ++ pc/instrs/INSTRS | 12 +++++++++--- pc/instrs/debug.c | 15 +++++++++++++++ pc/regs.c | 2 +- 6 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 pc/instrs/debug.c diff --git a/dos/main.k b/dos/main.k index fcce8f3..c6320a9 100644 --- a/dos/main.k +++ b/dos/main.k @@ -22,6 +22,7 @@ main: ; exit: enter + break mov ax0, .msg call print diff --git a/pc/Makefile b/pc/Makefile index 58e6a39..33fe0f1 100644 --- a/pc/Makefile +++ b/pc/Makefile @@ -5,7 +5,8 @@ all: k.exe src = instrs/instrs.c decd.c main.c regs.c dump.c \ instrs/jumps.c except.c disd.c mem.c instrs/logic.c \ - instrs/stack.c instrs/super.c instrs/arith.c log.c + instrs/stack.c instrs/super.c instrs/arith.c log.c \ + instrs/debug.c obj = $(patsubst %.c,%.o,$(src)) diff --git a/pc/except.c b/pc/except.c index 71d8968..0089616 100644 --- a/pc/except.c +++ b/pc/except.c @@ -16,6 +16,8 @@ void _except(ctx_t *ctx, int code, char *fmt, ...) log("\n"); dumpregs(ctx); + log("\n"); + dumpfwstack(ctx); if (ctx->mp) diff --git a/pc/instrs/INSTRS b/pc/instrs/INSTRS index 47efa90..60a7749 100644 --- a/pc/instrs/INSTRS +++ b/pc/instrs/INSTRS @@ -160,9 +160,6 @@ xchg m m lea r m lea m m -# get code segment -gcs r m - # # Stack manipulation instructions # @@ -199,8 +196,17 @@ popf cli sti +# +# Misc. instructions +# + # Prints a character on the screen prn r prn i prn m +# +# Debugging instructions +# +break + diff --git a/pc/instrs/debug.c b/pc/instrs/debug.c new file mode 100644 index 0000000..3283093 --- /dev/null +++ b/pc/instrs/debug.c @@ -0,0 +1,15 @@ +// 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 "instrs.h" +#include "arch_i.h" + +IMPL_START_0(break) +{ + log("\nExecuting BREAK INSTR\n"); + dumpregs(ctx); + + while ((getchar() != '\n')); + log("Resuming execution\n"); +} +IMPL_END; diff --git a/pc/regs.c b/pc/regs.c index 1f04de2..8ccbd52 100644 --- a/pc/regs.c +++ b/pc/regs.c @@ -88,7 +88,7 @@ void dumpregs(ctx_t *ctx) log("%s%s=0x%-16lX ", r->name, (strlen(r->name) == 2 ? "=" : ""), r->val); } - log("\nrip=0x%-16lX rbp=0x%-16lX rsp=0x%-16lX flg=0x%-16lX\n\n", + log("\nrip=0x%-16lX rbp=0x%-16lX rsp=0x%-16lX flg=0x%-16lX\n", ctx->r[RIP].val, ctx->r[RBP].val, ctx->r[RSP].val,