add lwIP TCP/IP stack as a runtime driver, native socket syscalls, SysGetMemoryStatus replacing CatchAllDebugBucket, fix timeGetTime to return milliseconds, fix SysSleep to interpret argument as milliseconds, SysGetTick now returns microseconds, harden all syscalls against bad user pointers with CopyFromUser/CopyToUser/MmProbeUser throughout, add networking test apps, port-forward 8080 in runa.bat, split LWIP_DRIVER_CFLAGS, add settings.ini to deploy, remove ethernet.c stub

This commit is contained in:
maksw committed 2026-05-22 18:54:53 +02:00
1 parent 18b4dd0f61
commit df13b8056c
365 files changed
+143263 -1362

No files matched your search

+20 -43
View File
@@ -24,25 +24,6 @@ static void printInt(int32_t n) {
else { printUInt((uint32_t)n); }
}
static uint64_t parseUInt64(const char* s) {
uint64_t v = 0;
while (*s == ' ') s++;
while (*s >= '0' && *s <= '9') v = v * 10 + (uint64_t)(*s++ - '0');
return v;
}
// Parse up to 6 comma-separated uint64 values.
// Returns the number of values actually parsed.
static int parseArgs(const char* line, uint64_t args[6]) {
int count = 0;
while (*line && count < 6) {
args[count++] = parseUInt64(line);
while (*line && *line != ',') line++; // skip to next comma
if (*line == ',') line++; // consume comma
}
return count;
}
static void printUInt64(uint64_t n) {
if (n == 0) { print("0"); return; }
char buf[20]; int i = 0;
@@ -80,7 +61,7 @@ static char* trim(char* s) {
static void cmd_help() {
print("Available commands:\n"
" help - Show this list\n"
" debug - Enter debug bucket mode\n"
" mem - Show memory usage\n"
" dir [path] - List directory contents\n"
" cd <path> - Change directory\n"
" type <file> - Display file contents\n"
@@ -90,30 +71,26 @@ static void cmd_help() {
" exit - Close the shell\n");
}
static void cmd_debug(void) {
print("Entered debug mode. Type args as: a0,a1,a2,a3,a4,a5\n");
print("Type 'exit' to leave.\n");
static void printSizeKiB(uint64_t bytes) {
printUInt64(bytes / 1024u);
print(" KiB");
}
char line[MAX_CMD];
while (true) {
print("debug> ");
readLine(line, MAX_CMD);
char* t = trim(line);
if (strcmp(t, "exit") == 0) {
print("Exit debug.\n");
break;
}
if (*t == '\0') continue;
uint64_t args[6] = {0, 0, 0, 0, 0, 0};
parseArgs(t, args);
uint64_t ret = SysCatchAllDebugBucket(args[0], args[1], args[2],
args[3], args[4], args[5]);
printUInt64(ret);
print("\n");
static void cmd_mem(void) {
SYS_MEMORY_STATUS st;
if (SysGetMemoryStatus(&st) != 0) {
print("mem: failed\n");
return;
}
print("Memory Status:\n");
print(" Free physical: ");
printSizeKiB(st.FreePhysicalBytes);
print("\n Kernel pool: ");
printSizeKiB(st.KernelPoolBytes);
print("\n User heap: ");
printSizeKiB(st.UserHeapBytes);
print("\n");
}
static void cmd_write(const char* args) {
@@ -203,7 +180,7 @@ static int runCommand(const char* cmd) {
if (strcmp(cmd, "help") == 0) { cmd_help(); return 0; }
if (strcmp(cmd, "clear") == 0) { SysScreenClear(0); return 0; }
if (strcmp(cmd, "crash") == 0) { *(int*)0 = 42; return 0; }
if (strcmp(cmd, "debug") == 0) { cmd_debug(); return 0; }
if (strcmp(cmd, "mem") == 0) { cmd_mem(); return 0; }
if (strcmp(cmd, "dir") == 0) { cmd_dir("."); return 0; }
if (strncmp(cmd, "dir ", 4) == 0) { cmd_dir(cmd + 4); return 0; }
if (strncmp(cmd, "cd ", 3) == 0) { if (SysSetCwd(cmd + 3) != 0) print("cd: failed\n"); return 0; }