modules | ||
build.cfg | ||
build.lua | ||
modules.cfg | ||
README.md | ||
testboot.lua |
MultICE
The MultIplexed Computing Environment for OpenComputers
A simple, unprotected, cooperative multitasking operating system.
Building
MultICE uses a relatively simple build system. It has been tested on Arch Linux, Debian Linux, OpenOS and Plan9k.
1. Choose modules.
The system is made out of modules from the modules/
directory. When you run the build script, it assembles them, and optionally optomises the code for space.
Modules are specified in the modules.cfg
file and are relative to the modules/
folder.
An example for interactive usage with networking:
base/header.lua
drivers/dterm.lua
library/print.lua
drivers/keyboard.lua
library/net.lua
applications/luash.lua
base/footer.lua
2. Configure build system
The build system has a configuration file build.cfg
.
optomise
Can either be yes or no.
Specifies whether to run the simple optomisation function on the kernel.
test
Can either be yes or no.
Specifies whether to test the final kernel (using load). Only picks up syntax errors.
log
Can either be yes or no.
Specifies whether to output log files.
opath
Specifies where to put the output kernel.
3. Build.
Simply run build.lua
. Under OpenOS or plan9k that may just be going to the right dir and entering build
, but under proper UNIX systems it may involve lua build.lua
.
Base OS API
s(name,function,environment)
Spawns a process from function
under the name name
, with the environment table specified in environment
. Environment doesn't really have much use right now.
l()
Returns the last event. Doesn't actually work right now.
h(...)
Pushes an event to the queue, with whatever data you specify. Generally used for IPC.
Module APIs
library/print.lua
These functions should be display device indepentent.
print(...)
Displays its arguments on the display device as a string, with a newline.
write(...)
Displays its arguments on the display device as a string, without a newline
drivers/keyboard.lua
This is a device-specific driver.
readln()
Reads a line of input from the keyboard.
library/net.lua
Note: Settings have to be set in the kernel module, at the line
tM,nP,nID = {}, 4096, 1
Where 4096 is the port and 1 is the device ID. Device ID can be any data type, port must be a number.
Network messages can be read from _G.ev
, they have the type net_msg
ns(id,po,msg)
Sends network message msg
to device id
on port po