mirror of https://github.com/vinc/moros.git
414 lines
12 KiB
HTML
414 lines
12 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>MOROS Manual</title>
|
|
<link rel="stylesheet" type="text/css" href="moros.css">
|
|
</head>
|
|
<body>
|
|
<h1>MOROS Manual</h1>
|
|
|
|
<h2>Boot</h2>
|
|
|
|
<p>During boot MOROS will display its version followed by the memory layout,
|
|
memory size, processor, devices, network cards, disks, and the real time clock.</p>
|
|
|
|
<pre><code>[0.250962] MOROS v0.10.3
|
|
[0.250962] MEM [0x00000000000000-0x00000000000FFF] FrameZero
|
|
[0.250962] MEM [0x00000000001000-0x00000000004FFF] PageTable
|
|
[0.250962] MEM [0x00000000005000-0x00000000015FFF] Bootloader
|
|
[0.250962] MEM [0x00000000016000-0x00000000016FFF] BootInfo
|
|
[0.250962] MEM [0x00000000017000-0x0000000002DFFF] Kernel
|
|
[0.250962] MEM [0x0000000002E000-0x0000000009EFFF] KernelStack
|
|
[0.250962] MEM [0x0000000009F000-0x0000000009FFFF] Reserved
|
|
[0.250962] MEM [0x000000000F0000-0x000000000FFFFF] Reserved
|
|
[0.250962] MEM [0x00000000100000-0x0000000028EFFF] KernelStack
|
|
[0.250962] MEM [0x0000000028F000-0x000000003FFFFF] Usable
|
|
[0.250962] MEM [0x00000000400000-0x000000005E1FFF] Kernel
|
|
[0.250962] MEM [0x000000005E2000-0x000000005EFFFF] PageTable
|
|
[0.250962] MEM [0x000000005F0000-0x00000001FDFFFF] Usable
|
|
[0.250962] MEM [0x00000001FE0000-0x00000001FFFFFF] Reserved
|
|
[0.250962] MEM [0x000000FEFFC000-0x000000FEFFFFFF] Reserved
|
|
[0.250962] MEM [0x000000FFFC0000-0x000000FFFFFFFF] Reserved
|
|
[0.250962] MEM 32720 KB
|
|
[0.251962] CPU GenuineIntel
|
|
[0.254961] CPU Intel(R) Core(TM) i5-4300M CPU @ 2.60GHz
|
|
[0.284957] PCI 0000:00:00 [8086:1237]
|
|
[0.312952] PCI 0000:01:00 [8086:7000]
|
|
[0.321951] PCI 0000:01:01 [8086:7010]
|
|
[0.321951] PCI 0000:01:03 [8086:7113]
|
|
[0.322951] PCI 0000:02:00 [1234:1111]
|
|
[0.323951] PCI 0000:03:00 [10EC:8139]
|
|
[0.377942] NET RTL8139 MAC 52-54-00-12-34-56
|
|
[0.382942] ATA 0:0 QEMU HARDDISK QM00001 (32 MB)
|
|
[0.384941] MFS Superblock found in ATA 0:0
|
|
[0.386941] RTC 2023-04-17 20:00:28 +0000
|
|
</code></pre>
|
|
|
|
<h2>Installation</h2>
|
|
|
|
<p>The first time MOROS will boot in diskless mode where you can use the builtin
|
|
commands to test the system or <code>install</code> to setup the
|
|
<a href="filesystem.html">filesystem</a> on a disk:</p>
|
|
|
|
<pre><code>Warning: MFS not found, run 'install' to setup the system
|
|
|
|
/
|
|
> install
|
|
Welcome to MOROS v0.10.3 installation program!
|
|
|
|
Proceed? [y/N] y
|
|
|
|
Listing disks ...
|
|
Path Name (Size)
|
|
/dev/ata/0/0 QEMU HARDDISK QM00001 (32 MB)
|
|
/dev/mem RAM DISK
|
|
|
|
Formatting disk ...
|
|
Enter path of disk to format: /dev/ata/0/0
|
|
Disk successfully formatted
|
|
MFS is now mounted to '/'
|
|
|
|
Populating filesystem...
|
|
Created '/bin'
|
|
Created '/dev'
|
|
Created '/ini'
|
|
Created '/lib'
|
|
Created '/net'
|
|
Created '/src'
|
|
Created '/tmp'
|
|
Created '/usr'
|
|
Created '/var'
|
|
Copied '/bin/clear'
|
|
Copied '/bin/halt'
|
|
Copied '/bin/ntp'
|
|
Copied '/bin/print'
|
|
Copied '/bin/reboot'
|
|
Copied '/bin/sleep'
|
|
Created '/dev/ata'
|
|
Created '/dev/ata/0'
|
|
Created '/dev/ata/0/0'
|
|
Created '/dev/ata/0/1'
|
|
Created '/dev/ata/1'
|
|
Created '/dev/ata/1/0'
|
|
Created '/dev/ata/1/1'
|
|
Created '/dev/clk'
|
|
Created '/dev/clk/uptime'
|
|
Created '/dev/clk/realtime'
|
|
Created '/dev/rtc'
|
|
Created '/dev/null'
|
|
Created '/dev/random'
|
|
Created '/dev/console'
|
|
Created '/dev/net'
|
|
Created '/dev/net/tcp'
|
|
Created '/dev/net/udp'
|
|
Copied '/ini/banner.txt'
|
|
Copied '/ini/boot.sh'
|
|
Copied '/ini/lisp.lsp'
|
|
Copied '/ini/shell.sh'
|
|
Copied '/ini/version.txt'
|
|
Created '/ini/palettes'
|
|
Copied '/ini/palettes/gruvbox-dark.sh'
|
|
Copied '/ini/palettes/gruvbox-light.sh'
|
|
Created '/ini/fonts'
|
|
Copied '/ini/fonts/zap-light-8x16.psf'
|
|
Copied '/ini/fonts/zap-vga-8x16.psf'
|
|
Created '/lib/lisp'
|
|
Copied '/lib/lisp/alias.lsp'
|
|
Copied '/lib/lisp/core.lsp'
|
|
Copied '/lib/lisp/file.lsp'
|
|
Copied '/tmp/alice.txt'
|
|
Copied '/tmp/machines.txt'
|
|
Created '/tmp/lisp'
|
|
Copied '/tmp/lisp/colors.lsp'
|
|
Copied '/tmp/lisp/doc.lsp'
|
|
Copied '/tmp/lisp/factorial.lsp'
|
|
Copied '/tmp/lisp/fibonacci.lsp'
|
|
Copied '/tmp/lisp/geotime.lsp'
|
|
Copied '/tmp/lisp/pi.lsp'
|
|
Copied '/tmp/lisp/sum.lsp'
|
|
Created '/tmp/life'
|
|
Copied '/tmp/life/centinal.cells'
|
|
Copied '/tmp/life/flower-of-eden.cells'
|
|
Copied '/tmp/life/garden-of-eden.cells'
|
|
Copied '/tmp/life/glider-gun.cells'
|
|
Copied '/tmp/life/pentadecathlon.cells'
|
|
Copied '/tmp/life/queen-bee-shuttle.cells'
|
|
Copied '/tmp/life/ship-in-a-bottle.cells'
|
|
Copied '/tmp/life/thunderbird.cells'
|
|
Copied '/tmp/life/wing.cells'
|
|
Created '/tmp/beep'
|
|
Copied '/tmp/beep/tetris.sh'
|
|
Copied '/tmp/beep/starwars.sh'
|
|
Copied '/tmp/beep/mario.sh'
|
|
Created '/var/log'
|
|
Created '/var/www'
|
|
Copied '/var/www/index.html'
|
|
Copied '/var/www/moros.css'
|
|
Copied '/var/www/moros.png'
|
|
|
|
Creating user...
|
|
Username: vinc
|
|
Password:
|
|
Confirm:
|
|
|
|
Installation successful!
|
|
|
|
Quit the console or reboot to apply changes
|
|
</code></pre>
|
|
|
|
<p>You can then use <code>^D</code> (a key combination of <code>CTRL</code> and <code>D</code>) to quit the
|
|
diskless mode and let MOROS run the bootscript <code>/ini/boot.sh</code> to login and use
|
|
the shell.</p>
|
|
|
|
<p>If no disks were detected or if you prefer not to use any you can mount the
|
|
system in memory and use a virtual disk with <code>memory format</code> before <code>install</code>
|
|
or using <code>/dev/mem</code> for the disk during the setup.</p>
|
|
|
|
<h2>Shell</h2>
|
|
|
|
<p>The <a href="shell.html">shell</a> is the primary command line interface to use MOROS.
|
|
This is were you can type a command and its arguments to tell the system what
|
|
to do:</p>
|
|
|
|
<pre><code>~
|
|
> print "Hello, World!"
|
|
Hello, World!
|
|
</code></pre>
|
|
|
|
<p>The system has a <code>help</code> command to help you remember the basic commands.</p>
|
|
|
|
<p>Most commands also have a special <code>--help</code> argument to show all their options.</p>
|
|
|
|
<h2>Directories</h2>
|
|
|
|
<p>The line above the command prompt tells you where you are in the disk. The
|
|
tilde <code>~</code> means that you are in your home directory:</p>
|
|
|
|
<pre><code>~
|
|
> print $DIR
|
|
/usr/vinc
|
|
</code></pre>
|
|
|
|
<p>You can change directory by typing it as if it was a command:</p>
|
|
|
|
<pre><code>~
|
|
> /tmp
|
|
|
|
/tmp
|
|
> print $DIR
|
|
/tmp
|
|
</code></pre>
|
|
|
|
<p>From now on we'll omit the directory line in most examples.</p>
|
|
|
|
<p>You can list the content of a directory with <code>list</code>:</p>
|
|
|
|
<pre><code>> list /tmp
|
|
5090 2023-04-17 06:25:54 alice.txt
|
|
82 2023-04-17 06:25:55 beep
|
|
324 2023-04-17 06:25:55 life
|
|
168 2023-04-17 06:25:55 lisp
|
|
649 2023-04-17 06:25:54 machines.txt
|
|
</code></pre>
|
|
|
|
<p>The command has some options to sort the results:</p>
|
|
|
|
<pre><code>> list --help
|
|
Usage: list <options> [<dir>]
|
|
|
|
Options:
|
|
-b, --binary-size Use binary size
|
|
-a, --all Show dot files
|
|
-n, --name Sort by name
|
|
-s, --size Sort by size
|
|
-t, --time Sort by time
|
|
</code></pre>
|
|
|
|
<p>You can write a directory in the disk with <code>write</code>:</p>
|
|
|
|
<pre><code>> write test/
|
|
|
|
> list
|
|
5090 2023-04-17 06:25:54 alice.txt
|
|
82 2023-04-17 06:25:55 beep
|
|
324 2023-04-17 06:25:55 life
|
|
168 2023-04-17 06:25:55 lisp
|
|
649 2023-04-17 06:25:54 machines.txt
|
|
0 2023-04-17 07:06:18 test
|
|
</code></pre>
|
|
|
|
<p>The slash <code>/</code> at the end of <code>test/</code> is there to tell the <code>write</code> command to
|
|
create a directory instead of a file.</p>
|
|
|
|
<h2>Files</h2>
|
|
|
|
<p>You can create a file by redirecting the output of a command with an arrow <code>=></code>
|
|
to the file:</p>
|
|
|
|
<pre><code>> print "Hello, World!" => hello.txt
|
|
</code></pre>
|
|
|
|
<p>The command <code>read</code> will read the content of the file:</p>
|
|
|
|
<pre><code>> read hello.txt
|
|
Hello, World!
|
|
</code></pre>
|
|
|
|
<p>You can edit a file with the <code>edit</code> command that will run the text editor.</p>
|
|
|
|
<p>Use <code>^W</code> (a key combination of <code>CTRL</code> and <code>W</code>) inside the editor to write the
|
|
content to the file and <code>^Q</code> to quit the editor and go back to the shell.</p>
|
|
|
|
<p>The <code>help</code> command has a subcommand <code>help edit</code> to list the editor commands:</p>
|
|
|
|
<pre><code>> help edit
|
|
MOROS text editor is a very simple editor inspired by Pico.
|
|
|
|
Commands:
|
|
^Q Quit editor
|
|
^W Write to file
|
|
^X Write to file and quit
|
|
^T Go to top of file
|
|
^B Go to bottom of file
|
|
^A Go to beginning of line
|
|
^E Go to end of line
|
|
^D Cut line
|
|
^Y Copy line
|
|
^P Paste line
|
|
</code></pre>
|
|
|
|
<h2>Time</h2>
|
|
|
|
<p>You can print the date with <code>date</code>:</p>
|
|
|
|
<pre><code>> date
|
|
2001-01-01 00:00:00 +0000
|
|
</code></pre>
|
|
|
|
<p>You can update the real time clock by writing the correct time to its device
|
|
file:</p>
|
|
|
|
<pre><code>> print "2023-03-21 10:00:00" => /dev/rtc
|
|
|
|
> date
|
|
2023-03-21 10:00:00 +0000
|
|
</code></pre>
|
|
|
|
<p>You can also set the <code>TZ</code> environment variable to use your preferred timezone:</p>
|
|
|
|
<pre><code>> calc "2 * 60 * 60"
|
|
7200
|
|
|
|
> env TZ 7200
|
|
|
|
> date
|
|
2023-03-21 12:00:00 +0200
|
|
</code></pre>
|
|
|
|
<p>Add <code>env TZ 7200</code> to <code>/ini/boot.sh</code> before <code>shell</code> to save the timezone:</p>
|
|
|
|
<pre><code>> read /ini/boot.sh
|
|
vga set font /ini/fonts/zap-light-8x16.psf
|
|
shell /ini/palettes/gruvbox-dark.sh
|
|
read /ini/banner.txt
|
|
user login
|
|
env TZ 7200
|
|
shell
|
|
</code></pre>
|
|
|
|
<p>There's a device file to get the number of seconds elapsed since Unix Epoch:</p>
|
|
|
|
<pre><code>> read /dev/clk/realtime
|
|
1682105344.624905
|
|
</code></pre>
|
|
|
|
<p>And another one since boot:</p>
|
|
|
|
<pre><code>> read /dev/clk/uptime
|
|
1169.384929
|
|
</code></pre>
|
|
|
|
<h2>Aliases</h2>
|
|
|
|
<p>You can add custom commands to the shell with the <code>alias</code> command.</p>
|
|
|
|
<p>For example you can define an <code>uptime</code> command that will read the device file
|
|
described above:</p>
|
|
|
|
<pre><code>> alias uptime "read /dev/clk/uptime"
|
|
|
|
> uptime
|
|
1406.304852
|
|
</code></pre>
|
|
|
|
<p>You can add that command to <code>/ini/shell.sh</code> to save it.</p>
|
|
|
|
<p>Some shortcuts have been defined in that file for the most frequent commands,
|
|
for example you can use <code>e</code> instead of <code>edit</code> to edit a file.</p>
|
|
|
|
<pre><code>> read /ini/shell.sh
|
|
# Command shortcuts
|
|
alias c copy
|
|
alias d delete
|
|
alias e edit
|
|
alias f find
|
|
alias h help
|
|
alias l list
|
|
alias m move
|
|
alias p print
|
|
alias q quit
|
|
alias r read
|
|
alias w write
|
|
|
|
alias sh shell
|
|
alias dsk disk
|
|
alias mem memory
|
|
alias kbd keyboard
|
|
</code></pre>
|
|
|
|
<h2>Network</h2>
|
|
|
|
<p>You can setup the <a href="network.html">network</a> manually with <code>net</code> or automatically
|
|
with <code>dhcp</code>:</p>
|
|
|
|
<pre><code>> dhcp
|
|
ip: 10.0.2.15/24
|
|
gw: 10.0.2.2
|
|
dns: 10.0.2.3
|
|
</code></pre>
|
|
|
|
<p>A few tools are available like the generalist <code>socket</code> command that be used to
|
|
send and receive TCP packets:</p>
|
|
|
|
<pre><code>> socket 10.0.2.2:1234
|
|
Hello, World!
|
|
</code></pre>
|
|
|
|
<p>Or the more specialized <code>http</code> command to request a document from a web server:</p>
|
|
|
|
<pre><code>> http moros.cc /test.html
|
|
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>MOROS</title>
|
|
<link rel="stylesheet" type="text/css" href="/moros.css">
|
|
</head>
|
|
<body>
|
|
<h1>MOROS</h1>
|
|
</body>
|
|
</html>
|
|
</code></pre>
|
|
|
|
<p>There is also a <code>ntp</code> script to synchronize the clock over the network:</p>
|
|
|
|
<pre><code>> ntp
|
|
2023-03-21 10:00:00
|
|
|
|
> ntp => /dev/rtc
|
|
</code></pre>
|
|
<footer><p><a href="/">MOROS</a></footer>
|
|
</body>
|
|
</html>
|