Add ports

This commit is contained in:
2025-11-19 22:17:52 +01:00
parent 19f1464a91
commit 2e29342c83
3 changed files with 42 additions and 8 deletions

View File

@@ -25,6 +25,37 @@ duk_ret_t native_addrw(duk_context *ctx)
return 0; return 0;
} }
// Port byte in
duk_ret_t native_ptin(duk_context *ctx)
{
// Get the port (first argument)
uint16_t port = (uint16_t)duk_to_uint32(ctx, 0);
uint8_t result;
__asm__ volatile("inb %1, %0"
: "=a"(result)
: "Nd"(port));
duk_push_uint(ctx, (duk_uint_t)result);
return 1;
}
// Port byte out
duk_ret_t native_ptout(duk_context *ctx)
{
// Get the port (first argument)
uint16_t port = (uint16_t)duk_to_uint32(ctx, 0);
// Get the value to write (second argument)
uint8_t value = (uint8_t)duk_to_uint32(ctx, 1);
__asm__ volatile("outb %0, %1"
:
: "a"(value), "Nd"(port));
return 0;
}
void kmain() void kmain()
{ {
// Initialize Duktape heap // Initialize Duktape heap
@@ -34,6 +65,14 @@ void kmain()
duk_push_c_function(ctx, native_addrw, 2); duk_push_c_function(ctx, native_addrw, 2);
duk_put_global_string(ctx, "$addrw"); duk_put_global_string(ctx, "$addrw");
// Register native port in function
duk_push_c_function(ctx, native_ptin, 1);
duk_put_global_string(ctx, "$ptin");
// Register native port out function
duk_push_c_function(ctx, native_ptout, 2);
duk_put_global_string(ctx, "$ptout");
// Execute embedded JavaScript code from build/index.js // Execute embedded JavaScript code from build/index.js
duk_push_string(ctx, embedded_js_code); duk_push_string(ctx, embedded_js_code);
duk_int_t returnCode = duk_peval(ctx); duk_int_t returnCode = duk_peval(ctx);

View File

@@ -6,12 +6,5 @@ import {
export function kmain() { export function kmain() {
kmod_graphics_vga_init(); kmod_graphics_vga_init();
kmod_graphics_vga_pushLine("[Kernel] Kernel initialized successfully.");
globalThis.console = {
log: function (msg: string) {
kmod_graphics_vga_pushLine(String(msg));
},
} as any;
eval("console.log('TS-DOS Program Started!!');");
} }

View File

@@ -1 +1,3 @@
declare function $addrw(address: number, value: number): void; declare function $addrw(address: number, value: number): void;
declare function $ptin(port: number): number;
declare function $ptout(port: number, value: number): void;