add system time, clean up pci into pci.sys, clean up syscall names, fix USERAPC1 typo

This commit is contained in:
maksw committed 2026-06-11 18:11:59 +02:00
1 parent c1a291c4c9
commit e41bf6e2c0
64 files changed
+4514 -2220

No files matched your search

+2 -2
View File
@@ -251,7 +251,7 @@ static bool g_prev_key[KEYMAP_COUNT];
static void poll_input(void)
{
for (int i = 0; i < (int)KEYMAP_COUNT; i++) {
bool cur_down = (SysKbIsKeyDown(g_keymap[i].inputKey) != 0);
bool cur_down = (SysIsKeyDown(g_keymap[i].inputKey) != 0);
bool prev_down = g_prev_key[i];
if (cur_down && !prev_down) doom_key_down(g_keymap[i].key);
@@ -295,7 +295,7 @@ static void render_frame(const uint8_t* rgba)
}
}
SysScreenBlit(0, 0, DISP_W, DISP_H, g_blit_buf);
SysBlitScreen(0, 0, DISP_W, DISP_H, g_blit_buf);
}
static int build_argv_from_command_line(const char* cmdline, char* storage, size_t storageSize,
+6 -6
View File
@@ -81,7 +81,7 @@ static void update_screen_size(void) {
int oldCols = gCols;
int oldRows = gRows;
if (SysScreenGetSize(&pxW, &pxH) == 0 && pxW > 0 && pxH > 0) {
if (SysGetScreenSize(&pxW, &pxH) == 0 && pxW > 0 && pxH > 0) {
gCols = pxW / GLYPH_W;
gRows = pxH / GLYPH_H;
@@ -111,7 +111,7 @@ static void put_cell(int col, int row, char c, uint32_t fg, uint32_t bg) {
cell->bg = bg;
}
SysScreenPutChar(c, col * GLYPH_W, row * GLYPH_H, fg, bg);
SysPutScreenChar(c, col * GLYPH_W, row * GLYPH_H, fg, bg);
}
static void clear_row(int row, uint32_t bg) {
@@ -473,8 +473,8 @@ static void editor_loop(void) {
while (true) {
render();
INPUT_KEY key = SysKbReadKey();
uint32_t mods = SysKbGetModifiers();
INPUT_KEY key = SysReadKey();
uint32_t mods = SysGetKeyModifiers();
bool ctrl = (mods & INPUT_MOD_CTRL) != 0;
if (ctrl && key == EDIT_KEY_Q) {
@@ -535,10 +535,10 @@ static void print(const char* s) {
int main(void) {
parse_filename_from_cmdline();
load_file();
SysScreenClear(COL_BG);
SysClearScreen(COL_BG);
invalidate_screen_cache();
editor_loop();
SysScreenClear(0x012456);
SysClearScreen(0x012456);
invalidate_screen_cache();
print("edit: goodbye\n");
SysExitProcess(0);
+9 -9
View File
@@ -191,9 +191,9 @@ int main(void) {
print(")\n");
uint32_t sock = 0;
st = SysSocket(SYS_AF_INET, SYS_SOCK_STREAM, SYS_IPPROTO_TCP, &sock);
st = SysCreateSocket(SYS_AF_INET, SYS_SOCK_STREAM, SYS_IPPROTO_TCP, &sock);
if (st != SYS_STATUS_SUCCESS) {
print("httpget: SysSocket failed "); print_u64(st); print("\n");
print("httpget: SysCreateSocket failed "); print_u64(st); print("\n");
SysExitProcess(1);
}
@@ -206,9 +206,9 @@ int main(void) {
addr.Address[2] = ip[2];
addr.Address[3] = ip[3];
st = SysConnect(sock, &addr, sizeof(addr));
st = SysConnectSocket(sock, &addr, sizeof(addr));
if (st != SYS_STATUS_SUCCESS) {
print("httpget: SysConnect failed "); print_u64(st); print("\n");
print("httpget: SysConnectSocket failed "); print_u64(st); print("\n");
SysCloseHandle(sock);
SysExitProcess(1);
}
@@ -225,9 +225,9 @@ int main(void) {
size_t totalSent = 0;
while (totalSent < off) {
size_t sent = 0;
st = SysSend(sock, request + totalSent, off - totalSent, 0, &sent);
st = SysSendSocket(sock, request + totalSent, off - totalSent, 0, &sent);
if (st != SYS_STATUS_SUCCESS || sent == 0) {
print("httpget: SysSend failed "); print_u64(st); print(" sent="); print_u64(sent); print("\n");
print("httpget: SysSendSocket failed "); print_u64(st); print(" sent="); print_u64(sent); print("\n");
SysCloseHandle(sock);
SysExitProcess(1);
}
@@ -238,9 +238,9 @@ int main(void) {
size_t total = 0;
for (;;) {
size_t got = 0;
st = SysRecv(sock, buf, sizeof(buf) - 1, 0, &got);
st = SysRecvSocket(sock, buf, sizeof(buf) - 1, 0, &got);
if (st != SYS_STATUS_SUCCESS) {
print("\nhttpget: SysRecv failed "); print_u64(st); print(" after "); print_u64(total); print(" bytes\n");
print("\nhttpget: SysRecvSocket failed "); print_u64(st); print(" after "); print_u64(total); print(" bytes\n");
SysCloseHandle(sock);
SysExitProcess(1);
}
@@ -251,7 +251,7 @@ int main(void) {
}
print("\nhttpget: done, "); print_u64(total); print(" bytes\n");
SysShutdown(sock, SYS_SHUTDOWN_BOTH);
SysShutdownSocket(sock, SYS_SHUTDOWN_BOTH);
SysCloseHandle(sock);
SysExitProcess(0);
return 0;
+4 -4
View File
@@ -250,9 +250,9 @@ int main(void) {
format_ipv4(ipText, sizeof(ipText), ip);
uint32_t sock = 0;
st = SysSocket(SYS_AF_INET, SYS_SOCK_RAW, SYS_IPPROTO_ICMP, &sock);
st = SysCreateSocket(SYS_AF_INET, SYS_SOCK_RAW, SYS_IPPROTO_ICMP, &sock);
if (st != SYS_STATUS_SUCCESS) {
print("ping: SysSocket(raw icmp) failed "); print_u64(st); print("\n");
print("ping: SysCreateSocket(raw icmp) failed "); print_u64(st); print("\n");
SysExitProcess(1);
}
@@ -296,7 +296,7 @@ int main(void) {
sendReq.SentOut = &sent;
uint64_t start = SysGetTick();
st = SysSendTo(sock, &sendReq);
st = SysSendToSocket(sock, &sendReq);
if (st != SYS_STATUS_SUCCESS) {
print("ping: send failed seq="); print_u64(seq); print(" status="); print_u64(st); print("\n");
if (i + 1 < count) SysSleep(1000);
@@ -319,7 +319,7 @@ int main(void) {
recvReq.RemoteAddressSizeInOut = &fromSize;
recvReq.ReceivedOut = &got;
st = SysRecvFrom(sock, &recvReq);
st = SysRecvFromSocket(sock, &recvReq);
if (st == SYS_STATUS_TIMEOUT)
break;
if (st != SYS_STATUS_SUCCESS) {
+58 -3
View File
@@ -77,12 +77,35 @@ static void printUIntWidth(uint32_t n, size_t width) {
printUInt(n);
}
static void printUIntZeroWidth(uint32_t n, size_t width) {
uint32_t digits = u64Digits(n);
while (width > digits) { print("0"); width--; }
printUInt(n);
}
static void printUInt64Width(uint64_t n, size_t width) {
uint32_t digits = u64Digits(n);
if (width > digits) printSpaces(width - digits);
printUInt64(n);
}
static void printDirTime(const SYS_SYSTEM_TIME* t) {
if (!t || !(t->Flags & SYS_TIME_FLAG_VALID)) {
print("---- -- -- --:-- ");
return;
}
printUIntZeroWidth(t->Year, 4);
print("-");
printUIntZeroWidth(t->Month, 2);
print("-");
printUIntZeroWidth(t->Day, 2);
print(" ");
printUIntZeroWidth(t->Hour, 2);
print(":");
printUIntZeroWidth(t->Minute, 2);
print(" ");
}
static void printStringWidth(const char* s, size_t width) {
size_t len = s ? strlen(s) : 0;
if (s) print(s);
@@ -95,7 +118,7 @@ static void printStringWidth(const char* s, size_t width) {
static void readLine(char* buf, int len) {
int pos = 0;
while (true) {
char c = SysKbReadChar();
char c = SysReadKeyboardChar();
if (!c) { SysYield(); continue; }
if (c == '\r' || c == '\n') { print("\n"); break; }
if ((c == '\b' || c == 127) && pos > 0) { pos--; print("\b \b"); continue; }
@@ -120,6 +143,7 @@ static void cmd_help() {
print("Available commands:\n"
" help - Show this list\n"
" mem - Show memory usage\n"
" time - Show system wall-clock time\n"
" stats - Show scheduler/CPU/PMM telemetry\n"
" ps - List processes\n"
" dir [path] - List directory contents\n"
@@ -226,6 +250,34 @@ static void cmd_stats(void) {
print(" 1024+: "); printUInt64(pmm.FreeRunHistogram[7]); print("\n");
}
static void cmd_time(void) {
SYS_SYSTEM_TIME t;
uint32_t status = SysGetSystemTime(&t);
if (status != 0) {
print("time: failed: ");
printUInt(status);
print("\n");
return;
}
printUIntZeroWidth(t.Year, 4); print("-");
printUIntZeroWidth(t.Month, 2); print("-");
printUIntZeroWidth(t.Day, 2); print(" ");
printUIntZeroWidth(t.Hour, 2); print(":");
printUIntZeroWidth(t.Minute, 2); print(":");
printUIntZeroWidth(t.Second, 2); print(".");
printUIntZeroWidth(t.Millisecond, 3);
print(" epoch="); printUInt64(t.EpochSeconds);
print(" flags=0x"); printUInt(t.Flags);
if (t.Flags & SYS_TIME_FLAG_TZ_KNOWN) {
print(" tz="); printInt(t.TimeZoneMinutes);
} else {
print(" tz=unspecified");
}
print("\n");
}
static void cmd_mem(void) {
SYS_MEMORY_STATUS st;
if (SysGetMemoryStatus(&st) != 0) {
@@ -338,6 +390,8 @@ static void cmd_dir(const char* path) {
SYS_DIR_ENTRY ke;
while (SysReadDir(hDir, &ke) == 0) {
printDirTime(&ke.LastWriteTime);
// Corrected Attribute Check: 0x10 is the Directory bit in FAT
if (ke.Attr & 0x10) {
print("<DIR> ");
@@ -397,7 +451,7 @@ static int runCommand(const char* cmd) {
if (!cmd || *cmd == '\0') return 0;
if (strcmp(cmd, "exit") == 0) return 1;
if (strcmp(cmd, "help") == 0) { cmd_help(); return 0; }
if (strcmp(cmd, "clear") == 0) { SysScreenClear(0x012456); return 0; }
if (strcmp(cmd, "clear") == 0) { SysClearScreen(0x012456); return 0; }
if (strncmp(cmd, "crash", 5) == 0) {
// Check the sub-option trailing "crash " (offset 6)
if (strcmp(cmd + 6, "void") == 0) {
@@ -437,6 +491,7 @@ static int runCommand(const char* cmd) {
}
}
if (strcmp(cmd, "mem") == 0) { cmd_mem(); return 0; }
if (strcmp(cmd, "time") == 0 || strcmp(cmd, "date") == 0) { cmd_time(); return 0; }
if (strcmp(cmd, "stats") == 0 || strcmp(cmd, "telemetry") == 0) { cmd_stats(); return 0; }
if (strcmp(cmd, "ps") == 0) { cmd_ps(); return 0; }
if (strcmp(cmd, "dir") == 0) { cmd_dir("."); return 0; }
@@ -453,7 +508,7 @@ static int runCommand(const char* cmd) {
if (create_process(program, &hProc, cmd) == 0) {
SysWaitForProcess(hProc);
SysCloseHandle(hProc);
while (SysKbPoll()) (void)SysKbReadChar();
while (SysPollKeyboard()) (void)SysReadKeyboardChar();
} else { print("shell: launch failed\n"); }
return 0;
}
+14 -14
View File
@@ -76,9 +76,9 @@ int main(void) {
}
uint32_t listener = 0;
uint32_t st = SysSocket(SYS_AF_INET, SYS_SOCK_STREAM, SYS_IPPROTO_TCP, &listener);
uint32_t st = SysCreateSocket(SYS_AF_INET, SYS_SOCK_STREAM, SYS_IPPROTO_TCP, &listener);
if (st != SYS_STATUS_SUCCESS) {
print("tcpserve: SysSocket failed "); print_u64(st); print("\n");
print("tcpserve: SysCreateSocket failed "); print_u64(st); print("\n");
SysExitProcess(1);
}
@@ -91,16 +91,16 @@ int main(void) {
bindAddr.Address[2] = 0;
bindAddr.Address[3] = 0;
st = SysBind(listener, &bindAddr, sizeof(bindAddr));
st = SysBindSocket(listener, &bindAddr, sizeof(bindAddr));
if (st != SYS_STATUS_SUCCESS) {
print("tcpserve: SysBind failed "); print_u64(st); print("\n");
print("tcpserve: SysBindSocket failed "); print_u64(st); print("\n");
SysCloseHandle(listener);
SysExitProcess(1);
}
st = SysListen(listener, 4);
st = SysListenSocket(listener, 4);
if (st != SYS_STATUS_SUCCESS) {
print("tcpserve: SysListen failed "); print_u64(st); print("\n");
print("tcpserve: SysListenSocket failed "); print_u64(st); print("\n");
SysCloseHandle(listener);
SysExitProcess(1);
}
@@ -111,9 +111,9 @@ int main(void) {
SYS_SOCKET_ADDRESS_IPV4 remote;
size_t remoteSize = sizeof(remote);
uint32_t client = 0;
st = SysAccept(listener, &remote, &remoteSize, &client);
st = SysAcceptSocket(listener, &remote, &remoteSize, &client);
if (st != SYS_STATUS_SUCCESS) {
print("tcpserve: SysAccept failed "); print_u64(st); print("\n");
print("tcpserve: SysAcceptSocket failed "); print_u64(st); print("\n");
SysCloseHandle(listener);
SysExitProcess(1);
}
@@ -129,9 +129,9 @@ int main(void) {
char request[1025];
size_t got = 0;
st = SysRecv(client, request, sizeof(request) - 1, 0, &got);
st = SysRecvSocket(client, request, sizeof(request) - 1, 0, &got);
if (st != SYS_STATUS_SUCCESS) {
print("tcpserve: SysRecv failed "); print_u64(st); print("\n");
print("tcpserve: SysRecvSocket failed "); print_u64(st); print("\n");
SysCloseHandle(client);
SysCloseHandle(listener);
SysExitProcess(1);
@@ -168,13 +168,13 @@ int main(void) {
#undef APPEND_LITERAL
size_t sent = 0;
st = SysSend(client, response, off, 0, &sent);
st = SysSendSocket(client, response, off, 0, &sent);
if (st == SYS_STATUS_SUCCESS)
st = SysSend(client, body, sizeof(body) - 1, 0, &sent);
st = SysSendSocket(client, body, sizeof(body) - 1, 0, &sent);
if (st != SYS_STATUS_SUCCESS)
print("tcpserve: SysSend failed "), print_u64(st), print("\n");
print("tcpserve: SysSendSocket failed "), print_u64(st), print("\n");
SysShutdown(client, SYS_SHUTDOWN_BOTH);
SysShutdownSocket(client, SYS_SHUTDOWN_BOTH);
SysCloseHandle(client);
SysCloseHandle(listener);
print("tcpserve: done\n");
+10 -10
View File
@@ -116,9 +116,9 @@ static int run_send(const char* cmd) {
}
uint32_t sock = 0;
uint32_t st = SysSocket(SYS_AF_INET, SYS_SOCK_DGRAM, SYS_IPPROTO_UDP, &sock);
uint32_t st = SysCreateSocket(SYS_AF_INET, SYS_SOCK_DGRAM, SYS_IPPROTO_UDP, &sock);
if (st != SYS_STATUS_SUCCESS) {
print("udp: SysSocket failed "); print_u64(st); print("\n");
print("udp: SysCreateSocket failed "); print_u64(st); print("\n");
return 1;
}
@@ -140,10 +140,10 @@ static int run_send(const char* cmd) {
req.RemoteAddressSize = sizeof(remote);
req.SentOut = &sent;
st = SysSendTo(sock, &req);
st = SysSendToSocket(sock, &req);
SysCloseHandle(sock);
if (st != SYS_STATUS_SUCCESS) {
print("udp: SysSendTo failed "); print_u64(st); print("\n");
print("udp: SysSendToSocket failed "); print_u64(st); print("\n");
return 1;
}
@@ -159,9 +159,9 @@ static int run_listen(const char* cmd) {
if (!tok[0] || !parse_port(tok, &port)) { usage(); return 1; }
uint32_t sock = 0;
uint32_t st = SysSocket(SYS_AF_INET, SYS_SOCK_DGRAM, SYS_IPPROTO_UDP, &sock);
uint32_t st = SysCreateSocket(SYS_AF_INET, SYS_SOCK_DGRAM, SYS_IPPROTO_UDP, &sock);
if (st != SYS_STATUS_SUCCESS) {
print("udp: SysSocket failed "); print_u64(st); print("\n");
print("udp: SysCreateSocket failed "); print_u64(st); print("\n");
return 1;
}
@@ -170,9 +170,9 @@ static int run_listen(const char* cmd) {
bindAddr.Family = SYS_AF_INET;
bindAddr.Port = port;
st = SysBind(sock, &bindAddr, sizeof(bindAddr));
st = SysBindSocket(sock, &bindAddr, sizeof(bindAddr));
if (st != SYS_STATUS_SUCCESS) {
print("udp: SysBind failed "); print_u64(st); print("\n");
print("udp: SysBindSocket failed "); print_u64(st); print("\n");
SysCloseHandle(sock);
return 1;
}
@@ -191,10 +191,10 @@ static int run_listen(const char* cmd) {
req.RemoteAddressSizeInOut = &remoteSize;
req.ReceivedOut = &got;
st = SysRecvFrom(sock, &req);
st = SysRecvFromSocket(sock, &req);
SysCloseHandle(sock);
if (st != SYS_STATUS_SUCCESS) {
print("udp: SysRecvFrom failed "); print_u64(st); print("\n");
print("udp: SysRecvFromSocket failed "); print_u64(st); print("\n");
return 1;
}