diff --git a/ka/err/errno.k b/ka/crt/err/errno.k similarity index 100% rename from ka/err/errno.k rename to ka/crt/err/errno.k diff --git a/ka/fmt/format.k b/ka/crt/fmt/format.k similarity index 84% rename from ka/fmt/format.k rename to ka/crt/fmt/format.k index c4c75d6..709e832 100644 --- a/ka/fmt/format.k +++ b/ka/crt/fmt/format.k @@ -1,5 +1,5 @@ ; 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 "fmt/itoa.k" +include "crt/fmt/itoa.k" diff --git a/ka/fmt/itoa.k b/ka/crt/fmt/itoa.k similarity index 100% rename from ka/fmt/itoa.k rename to ka/crt/fmt/itoa.k diff --git a/ka/prn/print.k b/ka/crt/prn/print.k similarity index 100% rename from ka/prn/print.k rename to ka/crt/prn/print.k diff --git a/ka/str/strchr.k b/ka/crt/str/strchr.k similarity index 100% rename from ka/str/strchr.k rename to ka/crt/str/strchr.k diff --git a/ka/str/strcmp.k b/ka/crt/str/strcmp.k similarity index 100% rename from ka/str/strcmp.k rename to ka/crt/str/strcmp.k diff --git a/ka/str/strcpy.k b/ka/crt/str/strcpy.k similarity index 100% rename from ka/str/strcpy.k rename to ka/crt/str/strcpy.k diff --git a/ka/crt/str/string.k b/ka/crt/str/string.k new file mode 100644 index 0000000..ee9d229 --- /dev/null +++ b/ka/crt/str/string.k @@ -0,0 +1,9 @@ +; 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 "crt/str/strlen.k" +include "crt/str/strrev.k" +include "crt/str/strcpy.k" +include "crt/str/strcmp.k" +include "crt/str/strchr.k" + diff --git a/ka/str/strlen.k b/ka/crt/str/strlen.k similarity index 100% rename from ka/str/strlen.k rename to ka/crt/str/strlen.k diff --git a/ka/str/strrev.k b/ka/crt/str/strrev.k similarity index 100% rename from ka/str/strrev.k rename to ka/crt/str/strrev.k diff --git a/ka/dos.k b/ka/dos.k index 144df8c..ff5b3bd 100644 --- a/ka/dos.k +++ b/ka/dos.k @@ -42,10 +42,15 @@ STRLEN_MAX := 0xFFFFFFFF ; ; Include librairies ; -include "err/errno.k" -include "fmt/format.k" -include "prn/print.k" -include "str/string.k" +include "crt/err/errno.k" +include "crt/fmt/format.k" +include "crt/prn/print.k" +include "crt/str/string.k" + +; +; Include drivers +; +include "sys/memdev.k" ; ; Disk Operating System diff --git a/ka/main.k b/ka/main.k index acd3405..6f49754 100644 --- a/ka/main.k +++ b/ka/main.k @@ -5,8 +5,13 @@ ; Main function ; main: - mov rbx, 10 - lea rax, b[rbx + -1] + jmp ramdev_test + +ramdev_test: + call DevGetMemOff + mov rdx, rax + + call DevGetMemSize ret stosb_test: @@ -70,8 +75,6 @@ itoa_test: .buf = [32] devtest: - enter - mov ax0, .buf devctl 0, 1 @@ -80,7 +83,6 @@ devtest: iocall 0, 0 - leave ret .buf = [32] @@ -127,13 +129,3 @@ str_test: .buf1 = [32] .buf2 = "!!!!!!!!!!!!!" -; -; Exit function -; -exit: - mov ax0, .msg - call print - - ret - -.msg = "Goodbye World :(\n" diff --git a/ka/str/string.k b/ka/str/string.k deleted file mode 100644 index 25306dc..0000000 --- a/ka/str/string.k +++ /dev/null @@ -1,9 +0,0 @@ -; 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 "str/strlen.k" -include "str/strrev.k" -include "str/strcpy.k" -include "str/strcmp.k" -include "str/strchr.k" - diff --git a/ka/sys/memdev.k b/ka/sys/memdev.k new file mode 100644 index 0000000..fb837db --- /dev/null +++ b/ka/sys/memdev.k @@ -0,0 +1,16 @@ +; The OS/K Team licenses this file to you under the MIT license. +; See the LICENSE file in the project root for more information. + +MEMDEV := 1 + +MEMDEV_GETMEMOFF := 0 +MEMDEV_GETMEMSIZE := 1 + +DevGetMemOff: + iocall MEMDEV, MEMDEV_GETMEMOFF + ret + +DevGetMemSize: + iocall MEMDEV, MEMDEV_GETMEMSIZE + ret + diff --git a/vm/dv/memdev.c b/vm/dv/memdev.c index bda7951..357af9e 100644 --- a/vm/dv/memdev.c +++ b/vm/dv/memdev.c @@ -3,8 +3,25 @@ #include +long memdev_getmemoff(ctx_t *ctx, dev_t *dev) +{ + rax = MEMOFF; + + return 0; +} + +long memdev_getmemsize(ctx_t *ctx, dev_t *dev) +{ + rax = ctx->mz; + + return 0; +} + long memdev_poweron(ctx_t *ctx, dev_t *dev) { + dev->fslots[0] = memdev_getmemoff; + dev->fslots[1] = memdev_getmemsize; + dev->state = DEVGOOD; return 0; diff --git a/vm/pc/DEVAPI b/vm/in/DEVCTL similarity index 81% rename from vm/pc/DEVAPI rename to vm/in/DEVCTL index 1a13d66..043a037 100644 --- a/vm/pc/DEVAPI +++ b/vm/in/DEVCTL @@ -26,10 +26,10 @@ The return value in rax is a status value: The slots for "devctl" are architecture-rerserved. They consist of the following functions: Slot Param (ax0) Description - 0 ptr Write device type into buffer - 1 ptr Write device name into buffer - 2 ptr Write device model into buffer - 3 ptr Write device vendor into buffer + 0 ptr Write device type into 32-bytes buffer + 1 ptr Write device name into 32-bytes buffer + 2 ptr Write device model into 32-bytes buffer + 3 ptr Write device vendor into 32-bytes buffer 4 rax=major, rdx=minor 5 rax=feats, rdx=revis diff --git a/vm/la/karch.lang b/vm/la/karch.lang index 9b75313..b674fe4 100644 --- a/vm/la/karch.lang +++ b/vm/la/karch.lang @@ -46,17 +46,18 @@ - ^\s+[a-zA-Z0-9_.$%]{2,} + ^\s+[a-zA-Z0-9_.$%]{1,} + %%?[a-z][a-z0-9.]+ (inv|flg) - r[isb]p + r[isdb]p r[a-fs][xi] - [an]x[0-9]+ + [a-z]x[0-9]+ (sa|cr)[0-9]+ diff --git a/vm/pc/arch.h b/vm/pc/arch.h index 40c5f7a..9f627fb 100644 --- a/vm/pc/arch.h +++ b/vm/pc/arch.h @@ -87,21 +87,8 @@ void _except(ctx_t *, int, char *, ...) __attribute__((__noreturn__)); void decode(ctx_t *ctx); -#define MEMOFF (1 * 1024 * 1024) -#define MEMSIZE (16 * 1024 * 1024) // 16MB - -#define addr2real(p) (((p) - MEMOFF) / 2) -#define real2addr(p) (((p) + MEMOFF) / 2) - -// Address of boot firmware stack -#define FWSTACK (MEMOFF * 2) // 2MB - -ulong readmem(ctx_t *c, ulong addr, uint len); -void writemem(ctx_t *, ulong val, ulong addr, uint len); - -ulong readmemzx(ctx_t *c, ulong addr, uint len); -void writememzx(ctx_t *, ulong val, ulong addr, uint len); +#include #include #include #include diff --git a/vm/pc/dev.h b/vm/pc/dev.h index 46823e0..90767f0 100644 --- a/vm/pc/dev.h +++ b/vm/pc/dev.h @@ -57,5 +57,3 @@ int devfini(ctx_t *, dev_t *); int devinitall(ctx_t *); int devfiniall(ctx_t *); -extern dev_t cpudev; - diff --git a/vm/pc/dump.c b/vm/pc/dump.c index 03e1f54..98a354b 100644 --- a/vm/pc/dump.c +++ b/vm/pc/dump.c @@ -21,7 +21,13 @@ static void dump_acc(ctx_t *ctx, acc_t *p) log("%s", ctx->r[p->reg].name); else if (p->type == A_IMM64) - log("0x%lX", p->val); + { + if (p->val < 0xA) + log("%lu", p->val); + + else + log("0x%lX", p->val); + } else { @@ -31,7 +37,7 @@ static void dump_acc(ctx_t *ctx, acc_t *p) if (mfmt == AM_IMM64) log("0x%lX]", p->addr); - + else if (mfmt == AM_RR) { if (p->reg1 && p->reg2) diff --git a/vm/pc/mem.h b/vm/pc/mem.h new file mode 100644 index 0000000..c2af6b4 --- /dev/null +++ b/vm/pc/mem.h @@ -0,0 +1,17 @@ +// The OS/K Team licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#define MEMOFF (1 * 1024 * 1024) +#define MEMSIZE (16 * 1024 * 1024) // 16MB + +#define addr2real(p) (((p) - MEMOFF) / 2) +#define real2addr(p) (((p) + MEMOFF) / 2) + +// Address of boot firmware stack +#define FWSTACK (MEMOFF * 2) // 2MB + +ulong readmem(ctx_t *c, ulong addr, uint len); +void writemem(ctx_t *, ulong val, ulong addr, uint len); + +ulong readmemzx(ctx_t *c, ulong addr, uint len); +void writememzx(ctx_t *, ulong val, ulong addr, uint len); diff --git a/vm/pc/regs.c b/vm/pc/regs.c index aba07d5..8638fa9 100644 --- a/vm/pc/regs.c +++ b/vm/pc/regs.c @@ -108,16 +108,17 @@ void dumpregs(ctx_t *ctx) DUMPREGS(SA0, SA3); DUMPREGS(CR0, CR3); - log("\nrip=0x%-16lX rsp=0x%-16lX rbp=0x%-16lX flg=0x%-16lX\n", + + log("\n\nrip=0x%-16lX rsp=0x%-16lX rbp=0x%-16lX flg=0x%-16lX\n\n", rip, rsp, rbp, flg); - 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)); + log("CF=%x OF=%x\n" + "ZF=%x SF=%x\n" + "PF=%x DF=%x\n" + "IF=%x UF=%x\n", + !!(flg&CF), !!(flg&OF), + !!(flg&ZF), !!(flg&SF), + !!(flg&PF), !!(flg&DF), + !!(flg&IF), !!(cr0&UF)); }