mirror of
https://gitlab.os-k.eu/os-k-team/kvisc.git
synced 2023-08-25 14:05:46 +02:00
regsd
This commit is contained in:
parent
49323d29a9
commit
88cd996041
11
as/regs.lst
11
as/regs.lst
@ -3,6 +3,9 @@ rip
|
||||
flg
|
||||
rbp
|
||||
rsp
|
||||
rx0
|
||||
rx1
|
||||
rx2
|
||||
rax
|
||||
rbx
|
||||
rcx
|
||||
@ -27,6 +30,14 @@ ax4
|
||||
ax5
|
||||
ax6
|
||||
ax7
|
||||
lx0
|
||||
lx1
|
||||
lx2
|
||||
lx3
|
||||
lx4
|
||||
lx5
|
||||
lx6
|
||||
lx7
|
||||
cr0
|
||||
cr1
|
||||
cr2
|
||||
|
1
ka/dos.k
1
ka/dos.k
@ -5,7 +5,6 @@
|
||||
; Entry point
|
||||
;
|
||||
_start:
|
||||
; Initializes the stack
|
||||
mov rbp, 0x200000
|
||||
mov rsp, rbp
|
||||
|
||||
|
@ -594,14 +594,6 @@ clr
|
||||
#
|
||||
cla
|
||||
|
||||
#
|
||||
# Clear base non-volatile registers (CLN)
|
||||
#
|
||||
# NX0 = NX1 = NX2 = NX3 = 0
|
||||
# NX4 = NX5 = NX6 = NX7 = 0
|
||||
#
|
||||
cln
|
||||
|
||||
#---------------------------------------------------------------------------#
|
||||
# Deprecated and deleted instruction #
|
||||
#---------------------------------------------------------------------------#
|
||||
|
@ -72,12 +72,5 @@ IMPL_START_0(cla)
|
||||
}
|
||||
IMPL_END;
|
||||
|
||||
IMPL_START_0(cln)
|
||||
{
|
||||
nx0 = nx1 = nx2 = nx3 = 0;
|
||||
nx4 = nx5 = nx6 = nx7 = 0;
|
||||
}
|
||||
IMPL_END;
|
||||
|
||||
//----------------------------------------------------------------------------//
|
||||
|
||||
|
@ -66,7 +66,8 @@ struct acc_t
|
||||
uint mlen;
|
||||
|
||||
// For instruction dumping ONLY
|
||||
ushort reg1, reg2, imm1, imm2;
|
||||
ushort reg1, reg2;
|
||||
short imm1, imm2;
|
||||
};
|
||||
|
||||
enum { NOPRM, P_REG, P_IMM, P_MEM=4 };
|
||||
|
162
vm/pc/regs.c
162
vm/pc/regs.c
@ -5,99 +5,119 @@
|
||||
|
||||
reg_t arch_r[NREGS] =
|
||||
{
|
||||
{ "inv", "Invalid register", "Invalid", 0, RES },
|
||||
|
||||
{ "rip", "Instruction pointer", "Special; Volatile", 0, RES },
|
||||
{ "flg", "Flags register", "Special; Volatile", 0, RES },
|
||||
// Invalid register
|
||||
{ "inv", 0, RES },
|
||||
|
||||
// Instruction pointer
|
||||
{ "rip", 0, RES },
|
||||
|
||||
// Flags register
|
||||
{ "flg", 0, RES },
|
||||
|
||||
// Stack registers
|
||||
{ "rbp", "Stack base", "Special; Non-volatile", 0, GPR },
|
||||
{ "rsp", "Stack pointer", "Special; Non-volatile", 0, GPR },
|
||||
{ "rbp", 0, GPR },
|
||||
{ "rsp", 0, GPR },
|
||||
|
||||
// Reserved registers
|
||||
{ "rx0", 0, RES },
|
||||
{ "rx1", 0, RES },
|
||||
{ "rx2", 0, RES },
|
||||
|
||||
// General-purpose volatile registers
|
||||
{ "rax", "Accumulator 0", "Volatile", 0, GPR },
|
||||
{ "rbx", "Accumulator 1", "Volatile", 0, GPR },
|
||||
{ "rcx", "Accumulator 2", "Volatile", 0, GPR },
|
||||
{ "rdx", "Accumulator 3", "Volatile", 0, GPR },
|
||||
{ "rsx", "Accumulator 4", "Volatile", 0, GPR },
|
||||
{ "rbi", "Accumulator 5", "Volatile", 0, GPR },
|
||||
{ "rdi", "Accumulator 6", "Volatile", 0, GPR },
|
||||
{ "rsi", "Accumulator 7", "Volatile", 0, GPR },
|
||||
{ "rax", 0, GPR },
|
||||
{ "rbx", 0, GPR },
|
||||
{ "rcx", 0, GPR },
|
||||
{ "rdx", 0, GPR },
|
||||
{ "rsx", 0, GPR },
|
||||
{ "rbi", 0, GPR },
|
||||
{ "rdi", 0, GPR },
|
||||
{ "rsi", 0, GPR },
|
||||
|
||||
// General-purpose non-volatile registers
|
||||
{ "nx0", "Accumulator 8", "Non-volatile", 0, GPR },
|
||||
{ "nx1", "Accumulator 9", "Non-volatile", 0, GPR },
|
||||
{ "nx2", "Accumulator 10", "Non-volatile", 0, GPR },
|
||||
{ "nx3", "Accumulator 11", "Non-volatile", 0, GPR },
|
||||
{ "nx4", "Accumulator 12", "Non-volatile", 0, GPR },
|
||||
{ "nx5", "Accumulator 13", "Non-volatile", 0, GPR },
|
||||
{ "nx6", "Accumulator 14", "Non-volatile", 0, GPR },
|
||||
{ "nx7", "Accumulator 15", "Non-volatile", 0, GPR },
|
||||
{ "nx0", 0, GPR },
|
||||
{ "nx1", 0, GPR },
|
||||
{ "nx2", 0, GPR },
|
||||
{ "nx3", 0, GPR },
|
||||
{ "nx4", 0, GPR },
|
||||
{ "nx5", 0, GPR },
|
||||
{ "nx6", 0, GPR },
|
||||
{ "nx7", 0, GPR },
|
||||
|
||||
// Argument registers; volatile
|
||||
{ "ax0", "Argument 0", "Volatile", 0, GPR },
|
||||
{ "ax1", "Argument 1", "Volatile", 0, GPR },
|
||||
{ "ax2", "Argument 2", "Volatile", 0, GPR },
|
||||
{ "ax3", "Argument 3", "Volatile", 0, GPR },
|
||||
{ "ax4", "Argument 4", "Volatile", 0, GPR },
|
||||
{ "ax5", "Argument 5", "Volatile", 0, GPR },
|
||||
{ "ax6", "Argument 6", "Volatile", 0, GPR },
|
||||
{ "ax7", "Argument 7", "Volatile", 0, GPR },
|
||||
{ "ax0", 0, GPR },
|
||||
{ "ax1", 0, GPR },
|
||||
{ "ax2", 0, GPR },
|
||||
{ "ax3", 0, GPR },
|
||||
{ "ax4", 0, GPR },
|
||||
{ "ax5", 0, GPR },
|
||||
{ "ax6", 0, GPR },
|
||||
{ "ax7", 0, GPR },
|
||||
|
||||
// cr0: various flags
|
||||
{ "cr0", "Control register 0", "Control", 0, CTL },
|
||||
// Leaf function registers; volatile
|
||||
{ "lx0", 0, GPR },
|
||||
{ "lx1", 0, GPR },
|
||||
{ "lx2", 0, GPR },
|
||||
{ "lx3", 0, GPR },
|
||||
{ "lx4", 0, GPR },
|
||||
{ "lx5", 0, GPR },
|
||||
{ "lx6", 0, GPR },
|
||||
{ "lx7", 0, GPR },
|
||||
|
||||
// cr1: code offset
|
||||
{ "cr1", "Control register 1", "Control", 0, CTL },
|
||||
|
||||
// cr2: data offset
|
||||
{ "cr2", "Control register 2", "Control", 0, CTL },
|
||||
|
||||
// Unused
|
||||
{ "cr3", "Control register 3", "Control", 0, CTL },
|
||||
{ "cr4", "Control register 4", "Control", 0, CTL },
|
||||
{ "cr5", "Control register 5", "Control", 0, CTL },
|
||||
{ "cr6", "Control register 6", "Control", 0, CTL },
|
||||
{ "cr7", "Control register 7", "Control", 0, CTL },
|
||||
// Control register
|
||||
{ "cr0", 0, CTL },
|
||||
{ "cr1", 0, CTL },
|
||||
{ "cr2", 0, CTL },
|
||||
{ "cr3", 0, CTL },
|
||||
{ "cr4", 0, CTL },
|
||||
{ "cr5", 0, CTL },
|
||||
{ "cr6", 0, CTL },
|
||||
{ "cr7", 0, CTL },
|
||||
|
||||
// System-reserved
|
||||
{ "sa0", "Supervisor acc. 0", "System; Non-volatile", 0, SYS },
|
||||
{ "sa1", "Supervisor acc. 1", "System; Non-volatile", 0, SYS },
|
||||
{ "sa2", "Supervisor acc. 2", "System; Non-volatile", 0, SYS },
|
||||
{ "sa3", "Supervisor acc. 3", "System; Non-volatile", 0, SYS },
|
||||
{ "sa4", "Supervisor acc. 4", "System; Non-volatile", 0, SYS },
|
||||
{ "sa5", "Supervisor acc. 5", "System; Non-volatile", 0, SYS },
|
||||
{ "sa6", "Supervisor acc. 6", "System; Non-volatile", 0, SYS },
|
||||
{ "sa7", "Supervisor acc. 7", "System; Non-volatile", 0, SYS },
|
||||
{ "sa0", 0, SYS },
|
||||
{ "sa1", 0, SYS },
|
||||
{ "sa2", 0, SYS },
|
||||
{ "sa3", 0, SYS },
|
||||
{ "sa4", 0, SYS },
|
||||
{ "sa5", 0, SYS },
|
||||
{ "sa6", 0, SYS },
|
||||
{ "sa7", 0, SYS },
|
||||
};
|
||||
|
||||
#define DUMPREGS(down, up) \
|
||||
for (i = down; i <= up; i++) { \
|
||||
if (i % 4 == 0) \
|
||||
log("\n"); \
|
||||
r = &ctx->r[i]; \
|
||||
log("%s=0x%-16lX ", r->name, r->val); \
|
||||
} \
|
||||
|
||||
void dumpregs(ctx_t *ctx)
|
||||
{
|
||||
int i;
|
||||
reg_t *r;
|
||||
|
||||
log("\nRegisters:");
|
||||
assert(inv == 0);
|
||||
|
||||
for (i = RAX; i < CR4; i++) {
|
||||
if ((i-1) % 4 == 0)
|
||||
log("\n");
|
||||
DUMPREGS(RAX, RSI);
|
||||
DUMPREGS(AX0, AX3);
|
||||
DUMPREGS(LX0, LX3);
|
||||
|
||||
r = &ctx->r[i];
|
||||
log("%s%s=0x%-16lX ", r->name,
|
||||
(strlen(r->name) == 2 ? "=" : ""), r->val);
|
||||
}
|
||||
log("\nrip=0x%-16lX rbp=0x%-16lX rsp=0x%-16lX inv=0x%-16lX\n",
|
||||
rip, rbp, rsp, inv);
|
||||
log("\n");
|
||||
DUMPREGS(NX0, NX3);
|
||||
DUMPREGS(SA0, SA3);
|
||||
DUMPREGS(CR0, CR3);
|
||||
|
||||
log("\nFlags: 0x%-16lX\n", flg);
|
||||
log("\nrip=0x%-16lX rsp=0x%-16lX rbp=0x%-16lX flg=0x%-16lX\n",
|
||||
rip, rsp, rbp, flg);
|
||||
|
||||
log("CF=%-4x OF=%-4x\n"
|
||||
"ZF=%-4x SF=%-4x\n"
|
||||
"PF=%-4x DF=%-4x\n"
|
||||
"IF=%-4x UF=%-4x\n",
|
||||
!!(flg&CF), !!(flg&OF),
|
||||
!!(flg&ZF), !!(flg&SF),
|
||||
!!(flg&PF), !!(flg&DF),
|
||||
!!(flg&IF), !!(cr0&UF));
|
||||
log("\nCF=%-4x OF=%-4x "
|
||||
"ZF=%-4x SF=%-4x\n"
|
||||
"PF=%-4x DF=%-4x "
|
||||
"IF=%-4x UF=%-4x\n",
|
||||
!!(flg&CF), !!(flg&OF),
|
||||
!!(flg&ZF), !!(flg&SF),
|
||||
!!(flg&PF), !!(flg&DF),
|
||||
!!(flg&IF), !!(cr0&UF));
|
||||
}
|
||||
|
||||
|
23
vm/pc/regs.h
23
vm/pc/regs.h
@ -35,18 +35,17 @@ enum
|
||||
struct reg_t
|
||||
{
|
||||
char *name;
|
||||
char *desc;
|
||||
char *conv;
|
||||
ulong val;
|
||||
ulong flags;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
INV,
|
||||
#define inv R(INV)
|
||||
|
||||
INV = 0,
|
||||
|
||||
RIP, FLG, RBP, RSP,
|
||||
RX0, RX1, RX2,
|
||||
#define inv R(INV)
|
||||
#define rip R(RIP)
|
||||
#define flg R(FLG)
|
||||
#define rbp R(RBP)
|
||||
@ -69,10 +68,6 @@ enum
|
||||
#define nx1 R(NX1)
|
||||
#define nx2 R(NX2)
|
||||
#define nx3 R(NX3)
|
||||
#define nx4 R(NX4)
|
||||
#define nx5 R(NX5)
|
||||
#define nx6 R(NX6)
|
||||
#define nx7 R(NX7)
|
||||
|
||||
AX0, AX1, AX2, AX3,
|
||||
AX4, AX5, AX6, AX7,
|
||||
@ -85,6 +80,8 @@ enum
|
||||
#define ax6 R(AX6)
|
||||
#define ax7 R(AX7)
|
||||
|
||||
LX0, LX1, LX2, LX3,
|
||||
LX4, LX5, LX6, LX7,
|
||||
|
||||
CR0, CR1, CR2, CR3,
|
||||
CR4, CR5, CR6, CR7,
|
||||
@ -92,10 +89,6 @@ enum
|
||||
#define cr1 R(CR1)
|
||||
#define cr2 R(CR2)
|
||||
#define cr3 R(CR3)
|
||||
#define cr4 R(CR4)
|
||||
#define cr5 R(CR5)
|
||||
#define cr6 R(CR6)
|
||||
#define cr7 R(CR7)
|
||||
|
||||
SA0, SA1, SA2, SA3,
|
||||
SA4, SA5, SA6, SA7,
|
||||
@ -103,10 +96,6 @@ enum
|
||||
#define sa1 R(SA1)
|
||||
#define sa2 R(SA2)
|
||||
#define sa3 R(SA3)
|
||||
#define sa4 R(SA4)
|
||||
#define sa5 R(SA5)
|
||||
#define sa6 R(SA6)
|
||||
#define sa7 R(SA7)
|
||||
|
||||
NREGS
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user