Skip to content
Ivanq edited this page Apr 22, 2018 · 4 revisions

Russian

Для доступа к низкоуровнему API можно использовать системные вызовы (__SYSCALL). Это глобальный JavaScript объект, содержащий функции:

  • log - Отображает сообщение в порт COM1 (при использовании QEMU - в терминале родительской системы)
  • write
  • eval - Аналог JS eval
  • version - Версия ядра и V8 ({"kernel": Number, "v8": String})
  • getCommandLine - Возвращает параметры запуска (обычно - путь к ядру)
  • initrdReadFile - Читает файл из системного раздела
  • initrdReadFileBuffer - Читает файл в буфер из системного раздела
  • initrdListFiles - Возвращает массив со всеми системными файлами (аналог find в linux)
  • initrdGetKernelIndex
  • startProfiling - Запускает профайлинг (не работает)
  • stopProfiling - Останавливает профайлинг
  • debug - Предназначение неизвестно.
  • takeHeapSnapshot - Снимает снимок кучи V8, но зачем?
  • memoryInfo - Информация об используемой и доступной оперативной памяти
  • systemInfo - Зачем?
  • reboot - Перезагрузка ОС
  • bufferAddress - Получение физического адреса буффера в памяти (внимание, из за страничной памяти может работать не совсем предсказуемо)
  • memoryBarrier - Зачем он в JS?
  • allocDMA - Выделить страницу памяти, обычно используется для DMA. Размер страницы - 2 мегабайта
  • getSystemResources - Получает системные ресурсы вроде IO портов и памяти
  • stopVideoLog - Отключает вывод сообщений ядра на экран, обратного пути нет.
  • setTime - Задать системное время
  • halt - Разгрузить процессор и ждать до события (инструкция hlt на ассемблере)
  • acpiGetPciDevices
  • acpiSystemReset - Перезагрузка через ACPI
  • acpiEnterSleepState - Изменяет состояние питания. Недоработано, этим можно только выключить.
  • vesaGetCInfo - (временно не работает до реализации VESA)

English

Use syscalls (__SYSCALL) to access low-level API. __SYSCALL is a global JavaScript object containing the following functions:

  • log - Shows a message in COM1 (this is parent OS terminal when using QEMU)
  • write
  • eval - practically the same as JS eval
  • version - Core and V8 version ({"kernel": Number, "v8": String})
  • getCommandLine - Returns kernel arguments (usually path to core)
  • initrdReadFile - Reads a file from system partition
  • initrdReadFileBuffer - Reads a file from system partition to a buffer
  • initrdListFiles - Returns an array of all system files (like find in Linux)
  • initrdGetKernelIndex
  • startProfiling - Starts profiling (doesn't work right now)
  • stopProfiling - Stops profiling
  • debug - Unknown (???)
  • takeHeapSnapshot - Takes V8 heap snapshot, but why?
  • memoryInfo - Info about used and available memory
  • systemInfo - Why?
  • reboot - Reboots OS
  • bufferAddress - Returns physical address of a buffer in memory (warning: may work rather odd because of memory pages)
  • memoryBarrier - Why do we need it in JS?
  • allocDMA - Allocates emmory page, usually for DMA. Page size is 2 MB
  • getSystemResources - Returns system resources such as IO ports and memory
  • stopVideoLog - Disables kernel messages, no way to enable back
  • setTime - Sets system time
  • halt - Stop processor and wait for an event (hlt instruction in Assembler)
  • acpiGetPciDevices
  • acpiSystemReset - Reboots via ACPI
  • acpiEnterSleepState - Changes power state. Not ready yet, can only be disabled
  • vesaGetCInfo - (not working till VESA implementation is ready)
Clone this wiki locally