Aquileo | Recent changes to wikihttps://sourceforge.net/p/nitros9/wiki/2017-05-20T20:15:05.122000ZRecent changes to wikiAquileo | Home modified by Tormod Volden2017-05-20T20:15:05.122000Z2017-05-20T20:15:05.122000ZTormod Voldenhttps://sourceforge.net/u/tormod/https://sourceforge.net71afec77e9602dcda6b17709cb24b6362324ee9f<div class="markdown_content"><pre>--- v3
+++ v4
@@ -1,3 +1,5 @@
+NitrOS-9 is a real-time, process-based, multitasking, multi-user, Unix-like operating system for Tandy CoCo, Dragon, and several other Motorola MC6809-based computers. The original OS-9 was created in 1979. NitrOS-9 is the modern equivalent of that OS, and includes advanced features like support for up to 2 MB RAM and 4 GB Hard drive partitions. It is still being developed, and support is available in many mailing lists and forums.
+
Please see the official [NitrOS-9 wiki](http://nitros9.sourceforge.net/wiki/index.php/Main_Page) for documentation.
* [Development site](https://sourceforge.net/projects/nitros9/)
</pre>
</div>Aquileo | Home modified by Tormod Volden2017-05-20T20:12:16.354000Z2017-05-20T20:12:16.354000ZTormod Voldenhttps://sourceforge.net/u/tormod/https://sourceforge.net76010fe51c4601efdc61c0260999e65ebbae957f<div class="markdown_content"><pre>--- v2
+++ v3
@@ -1 +1,6 @@
-Wiki home page is [Main_Page]
+Please see the official [NitrOS-9 wiki](http://nitros9.sourceforge.net/wiki/index.php/Main_Page) for documentation.
+
+* [Development site](https://sourceforge.net/projects/nitros9/)
+* [Bug tracker](https://sourceforge.net/p/nitros9/bugs/)
+* [Feature requests](https://sourceforge.net/p/nitros9/feature-requests/)
+* [Discussion](https://sourceforge.net/p/nitros9/discussion/)
</pre>
</div>Aquileo | The_NitrOS-9_Windowing_System modified by Greg2016-05-18T19:08:16.152000Z2016-05-18T19:08:16.152000ZGreghttps://sourceforge.net/u/glaw16/https://sourceforge.net71c51f0c081ecf8f989cbc6e9a9c0825ce48d8d6<div class="markdown_content"><pre>--- v18
+++ v19
@@ -44,25 +44,19 @@
To open a device window, follow these steps:
First, we must allocate memory for the window. Use NitrOS-9's iniz command to initialize window 7 in this example. Type:
-
-
+
iniz /w7 ENTER
-
Next, send an escape sequence to the window that tells it the parameters you want. These parameters include the screen type, size, and colors. For example:
-
-
+
wcreate /w7 -s=2 20 10 40 10 01 00 00 ENTER
-
OR
-
-
+
display 1b 20 02 1 4 0a 28 0a 01 00 00>/w7 ENTER
-
sends the
-
+
DWSet
command escape sequence to the /w7 window. The wcreate command insists that you use decimal numbers, while the display command can take both decimal and hexadecimal numbers.
</pre>
</div>Aquileo | Building_NitrOS9 modified by Tormod Volden2016-05-03T18:33:17.086000Z2016-05-03T18:33:17.086000ZTormod Voldenhttps://sourceforge.net/u/tormod/https://sourceforge.netebea9d2f058f0f692601a24f58689ad7e6fe0439<div class="markdown_content"><pre>--- v25
+++ v26
@@ -83,3 +83,8 @@
hg update
make dsk
+### Updating an old repo clone (2013 or earlier)
+At a point in development the "lwtools" branch was used, so if updating from a repo from that time, run this command once to change your current branch to the "default" branch:
+```
+hg update default
+```
</pre>
</div>Aquileo | Main_Page modified by Tormod Volden2015-11-16T18:43:05.031000Z2015-11-16T18:43:05.031000ZTormod Voldenhttps://sourceforge.net/u/tormod/https://sourceforge.net21b977db5d58b1faae9103593bc64509bd3a4e96<div class="markdown_content"><pre>--- v49
+++ v50
@@ -6,7 +6,7 @@
## How do I run it?
-The latest release can be found in the [release folder](https://sourceforge.net/projects/nitros9/files/releases/). Development snapshot builds are performed from time to time, and can be downloaded as [individual disk images](http://nitros9.sourceforge.net/latest/) or you can download the entire build [in one (large) ZIP file](http://nitros9.sourceforge.net/nitros9project.zip).
+The latest release can be found in the [release folder](https://sourceforge.net/projects/nitros9/files/releases/). Development snapshot builds are performed from time to time, and can be downloaded as [individual disk images](http://nitros9.sourceforge.net/snapshot/) or you can download the entire build [in one (large) ZIP file](http://nitros9.sourceforge.net/nitros9project.zip).
If you are using a CoCo or Dragon emulator, then these disk images will run just fine.
</pre>
</div>Aquileo | Building_NitrOS9 modified by Tormod Volden2015-11-07T10:10:09.986000Z2015-11-07T10:10:09.986000ZTormod Voldenhttps://sourceforge.net/u/tormod/https://sourceforge.netd8bbd6510eaf05827d5673bc2ebe25cf8ca460ca<div class="markdown_content"><pre>--- v24
+++ v25
@@ -1,3 +1,7 @@
+*Note: To build NitrOS-9 version 3.3.0 or older, use LWTOOLS 4.11. To build from hg repo use LWTOOLS 4.11 or 4.12.*
+
+
+
The [LWTOOLS](http://lwtools.projects.l-w.ca) and [ToolShed](http://toolshed.sourceforge.net/) utilities are used to build the NitrOS-9 operating system on Mac, Windows, or Linux based systems. If you would like to set up your system to build the project, please follow the instructions below.
</pre>
</div>Aquileo | NitrOS-9_Commands_Reference modified by Lothan2015-06-14T20:58:28.779000Z2015-06-14T20:58:28.779000ZLothanhttps://sourceforge.net/u/lothan/https://sourceforge.net4c4d5ce83925484410cb02c508cad72b90fe5a6c<div class="markdown_content"><pre>--- v12
+++ v13
@@ -2,984 +2,661 @@
## asm
-Syntax:
-asm _filename_ [option(s)] [#memsize] [>listing]
-
-Usage:
-
-
-Opts:
-
-
-
-C
-Conditionals on - displays conditional assembly statements in the listing. (C)
-
-
-D_num_
-Page Depth - sets the number of lines per listing page, including heading and blank line. (D66)
-
-
-E
-Error Message On - displays error messages in listing. When this option is off, an E appears in a statement's informational field if an error is present. (E)
-
-
-F
-Use Form Feed - uses a form feed for page eject instead of line feeds. (-F)
-
-
-G
-Generate All Constant Lines -- displays all lines of code generated by pseudo instructions. Otherwise, it displays only the first line. (-G)
-
-
-L
-Listings On - generates formatted assembly listing. If off, the assembler displays only error messages. (-L)
-
-
-M
-Mode On - turns on Motorola-compatible mode. (-M)
-
-
-N
-Narrow Listing - generates listing in a non-columnized, compressed format for better presentation on narrow display devices. (-N)
-
-
-O[=_filename_]
-Generates object object file. (-O)
-If you do not specify a file name, the assembler creates an object file having the same name as the input file in the current execution directory.
-If you specify a single name, assembler creates an object file having that name but still in the current execution directory.
-If you specify a full pathlist, the assembler uses it as the name specification of the device, directory, and file to create.
-
-
-S
-Generate Symbol Table -- displays the entire contents of the symbol table at the end of the assembly. Displays each name, its value, and a type code character:
-
-D = data variable (RMB definitions)
-E = equate label (EQU)
-L = program label
-S = set label
-U = undefined name.
-
-The table is displayed across the page in alphabetical order. (-S)
-
-
-W_num_
-Set Page Width -- defines the maximum length of each listing line. Lines are truncated if they exceed this number. The comment field starts at column 50; therefore, a number smaller than this may cause important parts of the listing to be lost. (W80)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">asm <i>filename</i> [option(s)] [#memsize] [>listing]</td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>C</td><td>Conditionals on - displays conditional assembly statements in the listing. (C)</td></tr><tr><td> </td><td>D<i>num</i></td><td>Page Depth - sets the number of lines per listing page, including heading and blank line. (D66)</td></tr><tr><td> </td><td>E</td><td>Error Message On - displays error messages in listing. When this option is off, an E appears in a statement's informational field if an error is present. (E)</td></tr><tr><td> </td><td>F</td><td>Use Form Feed - uses a form feed for page eject instead of line feeds. (-F)</td></tr><tr><td> </td><td>G</td><td>Generate All Constant Lines -- displays all lines of code generated by pseudo instructions. Otherwise, it displays only the first line. (-G)</td></tr><tr><td> </td><td>L</td><td>Listings On - generates formatted assembly listing. If off, the assembler displays only error messages. (-L)</td></tr><tr><td> </td><td>M</td><td>Mode On - turns on Motorola-compatible mode. (-M)</td></tr><tr><td> </td><td>N</td><td>Narrow Listing - generates listing in a non-columnized, compressed format for better presentation on narrow display devices. (-N)</td></tr><tr><td> </td><td>O[=<i>filename</i>]</td><td>Generates object object file. (-O)<br />
+If you do not specify a file name, the assembler creates an object file having the same name as the input file in the current execution directory.<br />
+If you specify a single name, assembler creates an object file having that name but still in the current execution directory.<br />
+If you specify a full pathlist, the assembler uses it as the name specification of the device, directory, and file to create.</td></tr><tr><td> </td><td>S</td><td>Generate Symbol Table -- displays the entire contents of the symbol table at the end of the assembly. Displays each name, its value, and a type code character:</td></tr><tr><td> </td><td> </td><td>D = data variable (RMB definitions)</td></tr><tr><td> </td><td> </td><td>E = equate label (EQU)</td></tr><tr><td> </td><td> </td><td>L = program label</td></tr><tr><td> </td><td> </td><td>S = set label</td></tr><tr><td> </td><td> </td><td>U = undefined name.</td></tr><tr><td> </td><td> </td><td>The table is displayed across the page in alphabetical order. (-S)</td></tr><tr><td> </td><td>W<i>num</i></td><td>Set Page Width -- defines the maximum length of each listing line. Lines are truncated if they exceed this number. The comment field starts at column 50; therefore, a number smaller than this may cause important parts of the listing to be lost. (W80)</td></tr></table>
## attr
-Syntax:
-attr filename [<opts>] [<perms>]
-
-Usage:
-Examine or change the security permissions of a file
-
-Opts:
-
-
--perm
-turn off specified permission
-
-perm
-turn on specified permission
-
--a
-inhibit printing of attrs after change
-
-Perms:
-
-
-d
-directory file
-
-s
-non-sharable file
-
-r
-read permit to owner
-
-w
-write permit to owner
-
-e
-execute permit to owner
-
-pr
-read permit to public
-
-pw
-write permit to public
-
-pe
-execute permit to public
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">attr filename [<opts>] [<perms>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Examine or change the security permissions of a file</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-perm</td><td>turn off specified permission</td></tr><tr><td> </td><td>perm</td><td>turn on specified permission</td></tr><tr><td> </td><td>-a</td><td>inhibit printing of attrs after change</td></tr><tr><td><b>Perms:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>d</td><td>directory file</td></tr><tr><td> </td><td>s</td><td>non-sharable file</td></tr><tr><td> </td><td>r</td><td>read permit to owner</td></tr><tr><td> </td><td>w</td><td>write permit to owner</td></tr><tr><td> </td><td>e</td><td>execute permit to owner</td></tr><tr><td> </td><td>pr</td><td>read permit to public</td></tr><tr><td> </td><td>pw</td><td>write permit to public</td></tr><tr><td> </td><td>pe</td><td>execute permit to public</td></tr></table>
## backup
-Syntax:
-backup [<opts>] [<srcdev>] [<destdev>]
-
-Usage:
-Copies all data from one device to another
-
-Opts:
-
-
-e
-exit if read error occurs
-
-s
-single disk backup
-
--v
-do not verify writes
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">backup [<opts>] [<srcdev>] [<destdev>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Copies all data from one device to another</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>e</td><td>exit if read error occurs</td></tr><tr><td> </td><td>s</td><td>single disk backup</td></tr><tr><td> </td><td>-v</td><td>do not verify writes</td></tr></table>
## binex
-Syntax:
-binex <path1> <path2>
-
-Usage:
-Convert binary to S-record format
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">binex <path1> <path2></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Convert binary to S-record format</td></tr></table>
## build
-Syntax:
-build <path>
-
-Usage:
-Builds short text files from standard input
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">build <path></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Builds short text files from standard input</td></tr></table>
## calldbg
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## cmp
-Syntax:
-cmp <path1> <path2>
-
-Usage:
-File comparison utility
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">cmp <path1> <path2></td></tr><tr><td><b>Usage:</b></td><td colspan="2">File comparison utility</td></tr></table>
## cobbler
-Syntax:
-cobbler <devname>
-
-Usage:
-Creates NitrOS-9 boostrap file from current boot
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">cobbler <devname></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Creates NitrOS-9 boostrap file from current boot</td></tr></table>
## copy
-Syntax:
-copy [<opts>] <srcpath> [<dstpath>] [<opts>]
-
-Usage:
-Copies files
-
-Opts:
-
-
--a
-abort on error
-
--p
-don't print files copied (use with -w)
-
--r
-rewrite destination
-
--s
-single drive copy
-
--v
-verify the copy
-
--w=<dir>
-copy to <dir>
-
--x
-copy from execution directory
+
+
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">copy [<opts>] <srcpath> [<dstpath>] [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Copies files</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-a</td><td>abort on error</td></tr><tr><td> </td><td>-p</td><td>don't print files copied (use with -w)</td></tr><tr><td> </td><td>-r</td><td>rewrite destination</td></tr><tr><td> </td><td>-s</td><td>single drive copy</td></tr><tr><td> </td><td>-v</td><td>verify the copy</td></tr><tr><td> </td><td>-w=<dir></td><td>copy to <dir></td></tr><tr><td> </td><td>-x</td><td>copy from execution directory</td></tr></table>
## cputype
-Syntax:
-cputype
-
-Usage:
-Displays type of CPU being used
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">cputype</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays type of CPU being used</td></tr></table>
## date
-Syntax:
-date [<opts>]
-
-Usage:
-Displays current system date
-
-Opts:
-
-
--t
-display time also
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">date [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays current system date</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-t</td><td>display time also</td></tr></table>
## dcheck
-Syntax:
-dcheck [<opts>] <devname>
-
-Usage:
-Check disk file structure
-
-Opts:
-
-
--w=<path>
-pathlist to directory for work files
-
--p
-print pathlists for questionable clusters
-
--m
-save allocation map work files
-
--b
-suppress listing of unused clusters
-
--s
-display count of files and directories only
-
--o
-print options for dcheck
+
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">dcheck [<opts>] <devname></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Check disk file structure</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-w=<path></td><td>pathlist to directory for work files</td></tr><tr><td> </td><td>-p</td><td>print pathlists for questionable clusters</td></tr><tr><td> </td><td>-m</td><td>save allocation map work files</td></tr><tr><td> </td><td>-b</td><td>suppress listing of unused clusters</td></tr><tr><td> </td><td>-s</td><td>display count of files and directories only</td></tr><tr><td> </td><td>-o</td><td>print options for dcheck</td></tr></table>
## debug
-Syntax:
-debug
-
-Usage:
-Interactive debugger
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">debug</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Interactive debugger</td></tr></table>
## ded
-Syntax:
-ded </device>
-
-Usage:
-Binary disk editor
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">ded </device></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Binary disk editor</td></tr></table>
## deiniz
-Syntax:
-deiniz <devname> {<devname>}
-
-Usage:
-Detach one more devices
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">deiniz <devname> {<devname>}</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Detach one more devices</td></tr></table>
## del
-Syntax:
-del [<opts>] <path> [<path>] [<opts>]
-
-Usage:
-Deletes one or more files
-
-Opts:
-
-
--x
-delete relative to execution directory
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">del [<opts>] <path> [<path>] [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Deletes one or more files</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-x</td><td>delete relative to execution directory</td></tr></table>
## deldir
-Syntax:
-deldir <path>
-
-Usage:
-Deletes entire directories
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">deldir <path></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Deletes entire directories</td></tr></table>
## devs
-Syntax:
-devs
-
-Usage:
-Displays IOMan's device table entries
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">devs</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays IOMan's device table entries</td></tr></table>
## dir
-Syntax:
-dir [<opts>] [<path>]
-
-Usage:
-Displays formatted list of the file names in a directory
-
-Opts:
-
-
--e
-extended directory listing
-
--x
-execution directory
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">dir [<opts>] [<path>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays formatted list of the file names in a directory</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-e</td><td>extended directory listing</td></tr><tr><td> </td><td>-x</td><td>execution directory</td></tr></table>
## dirsort
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## disasm
-Syntax:
-disasm [<opts>] [<pathlist>]
-
-Usage:
-6809/6309 disassembler
-
-Opts:
-
-
--m
-disassemble module in memory
-
--o
-display other information
-
--s$ssss$eeee
-indicate disassembly start and end addresses
-
--u
-don't convert U/DP offsets to labels
-
--x
-file is in execution directory
-
--z
-disassemble from standard input
+
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">disasm [<opts>] [<pathlist>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">6809/6309 disassembler</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-m</td><td>disassemble module in memory</td></tr><tr><td> </td><td>-o</td><td>display other information</td></tr><tr><td> </td><td>-s$ssss$eeee</td><td>indicate disassembly start and end addresses</td></tr><tr><td> </td><td>-u</td><td>don't convert U/DP offsets to labels</td></tr><tr><td> </td><td>-x</td><td>file is in execution directory</td></tr><tr><td> </td><td>-z</td><td>disassemble from standard input</td></tr></table>
## display
-Syntax:
-display <opts>
-
-Usage:
-Displays converted characters to standard output
-
-Opts:
-
-
-xx
-hexademical
-
-.xx
-decimal byte
-
-.Wxx
-decimal word
-
-/xx/
-string
-
-"xx"
-string
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">display <opts></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays converted characters to standard output</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>xx</td><td>hexademical</td></tr><tr><td> </td><td>.xx</td><td>decimal byte</td></tr><tr><td> </td><td>.Wxx</td><td>decimal word</td></tr><tr><td> </td><td>/xx/</td><td>string</td></tr><tr><td> </td><td>"xx"</td><td>string</td></tr></table>
## dmode
-Syntax:
-dmode <devname> [<opts>]
-
-Usage:
-Displays or changes the parameters of an RBF device
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">dmode <devname> [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays or changes the parameters of an RBF device</td></tr></table>
## dsave
-Syntax:
-dsave [<opts>] [<pathlist>]
-
-Usage:
-Generates procedure file to copy all files from the current directory to <pathlist>
-
-Opts:
-
-
--b
-make a system disk by using OS9Boot if present
-
--b=<path>
-make system disk using <path> as source
-
--i
-indent for directory levels
-
--l
-do not process below the current directory level
-
--m
-do not include makdir commands in procedure file
-
--r
-force rewrite of file on copy
-
--s<num>
-set copy size to <num>K
-
--v
-verify copies
+
+
+
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">dsave [<opts>] [<pathlist>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Generates procedure file to copy all files from the current directory to <pathlist></td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-b</td><td>make a system disk by using OS9Boot if present</td></tr><tr><td> </td><td>-b=<path></td><td>make system disk using <path> as source</td></tr><tr><td> </td><td>-i</td><td>indent for directory levels</td></tr><tr><td> </td><td>-l</td><td>do not process below the current directory level</td></tr><tr><td> </td><td>-m</td><td>do not include makdir commands in procedure file</td></tr><tr><td> </td><td>-r</td><td>force rewrite of file on copy</td></tr><tr><td> </td><td>-s<num></td><td>set copy size to <num>K</td></tr><tr><td> </td><td>-v</td><td>verify copies</td></tr></table>
## dump
-Syntax:
-dump [<opts>] [<path>] [<opts>]
-
-Usage:
-Formatted file dump in hexademical and ASCII
-
-Opts:
-
-
--h
-no header
-
--m
-module in memory
-
--x
-file in execution directory
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">dump [<opts>] [<path>] [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Formatted file dump in hexademical and ASCII</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-h</td><td>no header</td></tr><tr><td> </td><td>-m</td><td>module in memory</td></tr><tr><td> </td><td>-x</td><td>file in execution directory</td></tr></table>
## echo
-Syntax:
-echo <text>
-
-Usage:
-Echo entered text to standard output
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">echo <text></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Echo entered text to standard output</td></tr></table>
## edit
-Syntax:
-edit [<path>]
-
-Usage:
-Standard line-oriented text editor
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">edit [<path>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Standard line-oriented text editor</td></tr></table>
## error
-Syntax:
-error [<errno>] [<errno> [...]]
-
-Usage:
-Outputs text error messages for given error numbers
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">error [<errno>] [<errno> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Outputs text error messages for given error numbers</td></tr></table>
## exbin
-Syntax:
-exbin <path1> <path2>
-
-Usage:
-Converts S-Record format to binary
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">exbin <path1> <path2></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Converts S-Record format to binary</td></tr></table>
## format
-Syntax:
-format <devname> [<opts>]
-
-Usage:
-Initializes a NitrOS-9 diskette
-
-Opts:
-
-
-R
-Ready
-
-L
-Logical format only
-
-
-"disk name"
-
-1/2
-number of sides
-
-
-'No. of cylinders' (in decimal)
-
-
- :Interleave value: (in decimal)
-
-
-/Cluster size/ (in decimal)
+
+
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">format <devname> [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Initializes a NitrOS-9 diskette</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>R</td><td>Ready</td></tr><tr><td> </td><td>L</td><td>Logical format only</td></tr><tr><td> </td><td> </td><td>"disk name"</td></tr><tr><td> </td><td>1/2</td><td>number of sides</td></tr><tr><td> </td><td> </td><td>'No. of cylinders' (in decimal)</td></tr><tr><td> </td><td> </td><td> :Interleave value: (in decimal)</td></tr><tr><td> </td><td> </td><td>/Cluster size/ (in decimal)</td></tr></table>
## free
-Syntax:
-free [<devname>]
-
-Usage:
-Displays number of free sectors on device
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">free [<devname>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays number of free sectors on device</td></tr></table>
## grfdrv
-Syntax:
-none
-
-Usage:
-Graphics driver module that needs to be loaded to handle graphics/windowing commands
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">none</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Graphics driver module that needs to be loaded to handle graphics/windowing commands</td></tr></table>
## help
-Syntax:
-help [<subject>] [<opts>]
-
-Usage:
-Gives online help to user and prompts if no subjects given
+This heading is mucked up because Sourceforge automatically generates an id based on the header title, which causes this to use SourceForge's .help style.
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">help [<subject>] [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Gives online help to user and prompts if no subjects given</td></tr></table>
## ident
-Syntax:
-ident [<opts>] <path> [<opts>]
-
-Usage:
-Displays header information of NitrOS-9 memory modules
-
-Opts:
-
-
--m
-module in memory
-
--s
-short form
-
--v
-don't verify CRC
-
--x
-file in execution directory
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">ident [<opts>] <path> [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays header information of NitrOS-9 memory modules</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-m</td><td>module in memory</td></tr><tr><td> </td><td>-s</td><td>short form</td></tr><tr><td> </td><td>-v</td><td>don't verify CRC</td></tr><tr><td> </td><td>-x</td><td>file in execution directory</td></tr></table>
## iniz
-Syntax:
-iniz <devname> [<devname> [...]]
-
-Usage:
-Attaches one or more devices
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">iniz <devname> [<devname> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Attaches one or more devices</td></tr></table>
## irqs
-Syntax:
-irqs
-
-Usage:
-Displays interrupt table entries
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">irqs</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays interrupt table entries</td></tr></table>
## link
-Syntax:
-link <modname>
-
-Usage:
-Links to a memory module
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">link <modname></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Links to a memory module</td></tr></table>
## list
-Syntax:
-list <path> [<path> [...]]
-
-Usage:
-Lists the contents of text files
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">list <path> [<path> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Lists the contents of text files</td></tr></table>
## load
-Syntax:
-load <pathlist> [<pathlist> [...]]
-
-Usage:
-Loads modules into memory
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">load <pathlist> [<pathlist> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Loads modules into memory</td></tr></table>
## login
-Syntax:
-login
-
-Usage:
-Timesharing system login
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">login</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Timesharing system login</td></tr></table>
## makdir
-Syntax:
-makdir <pathlist>
-
-Usage:
-Creates a new directory file
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">makdir <pathlist></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Creates a new directory file</td></tr></table>
## megaread
-Syntax:
-megaread </dev>
-
-Usage:
-Measures disk performance
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">megaread </dev></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Measures disk performance</td></tr></table>
## mdir
-Syntax:
-mdir [<opts>]
-
-Usage:
-Displays the present memory module directory
-
-Opts:
-
-
--e
-prints extended module directory
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">mdir [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays the present memory module directory</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-e</td><td>prints extended module directory</td></tr></table>
## merge
-Syntax:
-merge <path> [<path> [...]]
-
-Usage:
-Copies multiple input files to standard output
-
-Opts:
-
-
--z
-gets list of files from standard input
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">merge <path> [<path> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Copies multiple input files to standard output</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-z</td><td>gets list of files from standard input</td></tr></table>
## mfree
-Syntax:
-mfree
-
-Usage:
-Displays the amount of free memory
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">mfree</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays the amount of free memory</td></tr></table>
## mpi
-Syntax:
-mpi
-
-Usage:
-Displays the presence of a Multi-Pak Interface
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">mpi</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays the presence of a Multi-Pak Interface</td></tr></table>
## os9gen
-Syntax:
-os9gen devnam [<opts>]
-
-Usage:
-Creates and links a NitrOS-9 bootstrap file
-
-Opts:
-
-
--s
-single drive option
-
--t=<boottrack>
-boot track file to use
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">os9gen devnam [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Creates and links a NitrOS-9 bootstrap file</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-s</td><td>single drive option</td></tr><tr><td> </td><td>-t=<boottrack></td><td>boot track file to use</td></tr></table>
## padrom
-Syntax:
-padrom <padsize> <pathlist> [<devname>] [<opts>]
-
-Usage:
-Pads a file to <padsize> bytes
-
-Opts:
-
-
--c=<char>
-character to pad the file with (in hexadecimal)
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">padrom <padsize> <pathlist> [<devname>] [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Pads a file to <padsize> bytes</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-c=<char></td><td>character to pad the file with (in hexadecimal)</td></tr></table>
## park
-Syntax:
-park <devname> [<devname> [...]]
-
-Usage:
-Parks the heads on a hard disk drive
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">park <devname> [<devname> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Parks the heads on a hard disk drive</td></tr></table>
## printerr
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## procs
-Syntax:
-procs [<opts>]
-
-Usage:
-Displays a list of processes running in the system
-
-Opts:
-
-
--e
-displays all processes in the system
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">procs [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays a list of processes running in the system</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-e</td><td>displays all processes in the system</td></tr></table>
## prompt
-Syntax:
-prompt <message>
-
-Usage:
-Prints <message> and waits for a key
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">prompt <message></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Prints <message> and waits for a key</td></tr></table>
## pwd
-Syntax:
-pwd
-
-Usage:
-Prints the path to the current working directory
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">pwd</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Prints the path to the current working directory</td></tr></table>
## pxd
-Syntax:
-pxd
-
-Usage:
-Prints the path to the current execution directory
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">pxd</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Prints the path to the current execution directory</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## rename
-Syntax:
-rename <pathlist> <filename>
-
-Usage:
-Gives the file or directory a new name
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">rename <pathlist> <filename></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Gives the file or directory a new name</td></tr></table>
## save
-Syntax:
-save <path> <modname> [<modname> [...]]
-
-Usage:
-Saves the memory module(s) to a file
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">save <path> <modname> [<modname> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Saves the memory module(s) to a file</td></tr></table>
## setime
-Syntax:
-setime [yyyy/mm/dd hh:mm:ss]
-
-Usage:
-Sets and activates the system clock
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">setime [yyyy/mm/dd hh:mm:ss]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Sets and activates the system clock</td></tr></table>
## shellplus
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## shell
-Syntax:
-shell [<arglist>]
-
-Usage:
-NitrOS-9 command interpreter
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">shell [<arglist>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">NitrOS-9 command interpreter</td></tr></table>
## sleep
-Syntax:
-sleep <ticks>
-
-Usage:
-Suspends the current process for a period of time
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">sleep <ticks></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Suspends the current process for a period of time</td></tr></table>
## tee
-Syntax:
-tee [<path>]
-
-Usage:
-Copy the standard input to multiple output paths
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">tee [<path>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Copy the standard input to multiple output paths</td></tr></table>
## tmode
-Syntax:
-tmode [<path>] [<opts>]
-
-Usage:
-Displays or changes the operating parameters of the terminal
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">tmode [<path>] [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays or changes the operating parameters of the terminal</td></tr></table>
## touch
-Syntax:
-touch [<opts>] <path> [<opts>]
-
-Usage:
-Updates the date of a file
-
-Opts:
-
-
--c
-don't create files
-
--q
-don't quit on error
-
--x
-search execution directory
-
--z
-get files from standard input
-
--z=<file>
-get files from <file>
+
+
+
+
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">touch [<opts>] <path> [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Updates the date of a file</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-c</td><td>don't create files</td></tr><tr><td> </td><td>-q</td><td>don't quit on error</td></tr><tr><td> </td><td>-x</td><td>search execution directory</td></tr><tr><td> </td><td>-z</td><td>get files from standard input</td></tr><tr><td> </td><td>-z=<file></td><td>get files from <file></td></tr></table>
## tsmon
-Syntax:
-tsmon [<pathlist>]
-
-Usage:
-Timesharing monitor
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">tsmon [<pathlist>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Timesharing monitor</td></tr></table>
## tuneport
-Syntax:
-tuneport <device> <value>
-
-Usage:
-Adjusts the baud value for the serial port
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">tuneport <device> <value></td></tr><tr><td><b>Usage:</b></td><td colspan="2">Adjusts the baud value for the serial port</td></tr></table>
## unlink
-Syntax:
-unlink <modname> [<modname> [...]]
-
-Usage:
-Unlinks one or more modules from memory
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">unlink <modname> [<modname> [...]]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Unlinks one or more modules from memory</td></tr></table>
## verify
-Syntax:
-verify [<opts>]
-
-Usage:
-Verifies or updates the module header and CRC
-
-Opts:
-
-
--u
-update the module CRC
+
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">verify [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Verifies or updates the module header and CRC</td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr><tr><td> </td><td>-u</td><td>update the module CRC</td></tr></table>
## xmode
-Syntax:
-xmode <devname> [<opts>]
-
-Usage:
-Displays or changes the parameters of an SCF device
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">xmode <devname> [<opts>]</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Displays or changes the parameters of an SCF device</td></tr></table>
## inetd
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## telnet
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## dw
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
## basic09
-Syntax:
-basic09
-
-Usage:
-Basic language interpreter
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">basic09</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Basic language interpreter</td></tr></table>
## runb
-Syntax:
-runb _ _
-
-Usage:
-Basic09 run-time package
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">runb _ _</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Basic09 run-time package</td></tr></table>
## gfx
-Syntax:
-RUN GFX(<func>,<args>)
-
-Usage:
-Graphics interface package for Basic09 to do compatible VDG graphics commands
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">RUN GFX(<func>,<args>)</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Graphics interface package for Basic09 to do compatible VDG graphics commands</td></tr></table>
## inkey
-Syntax:
-RUN INKEY([path], strvar)
-
-Usage:
-Basic09 subroutine to input a single keystroke
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2">RUN INKEY([path], strvar)</td></tr><tr><td><b>Usage:</b></td><td colspan="2">Basic09 subroutine to input a single keystroke</td></tr></table>
## syscall
-Syntax:
-
-
-Usage:
-
-
-Opts:
-
+
+
+
+
+<table><tr><td><b>Syntax:</b></td><td colspan="2"> </td></tr><tr><td><b>Usage:</b></td><td colspan="2"> </td></tr><tr><td><b>Opts:</b></td><td colspan="2"> </td></tr></table>
</pre>
</div>Aquileo | The_Kernel modified by Lothan2015-04-04T01:00:17.325000Z2015-04-04T01:00:17.325000ZLothanhttps://sourceforge.net/u/lothan/https://sourceforge.net8d45d68bd3a2ba1a94287102f0b43ef984e19452<div class="markdown_content"><pre>--- v5
+++ v6
@@ -393,6 +393,7 @@
The 5-byte packet is defined as follows:
**Name** | **Offset** | **Function**
+-------- | ---------- | ------------
Vi.Cnt | $0 | Actual counter
Vi.Rst | $2 | Reset value for counter
Vi.Stat | $4 | Status byte
</pre>
</div>Aquileo | The_Kernel modified by Lothan2015-04-04T00:59:03.129000Z2015-04-04T00:59:03.129000ZLothanhttps://sourceforge.net/u/lothan/https://sourceforge.netf0ba63b56ed055dbe2b1a8ea97cc82c2570980a5<div class="markdown_content"><pre>--- v4
+++ v5
@@ -282,6 +282,7 @@
A signal can convey status information in the form of a 1-byte numeric value. Some _signal codes_ (values) are predefined, but you can define most. Those already defined by NitrOS-9 are:
Signal | Mnemonic | Description
+------ | -------- | -----------
0 | S$Kill | Kill (terminates the process, is non-interceptable)
1 | S$Wake | Wakeup (wakes up a sleeping process)
2 | S$Abort | Keyboard terminate
</pre>
</div>Aquileo | The_Kernel modified by Lothan2015-04-04T00:57:51.058000Z2015-04-04T00:57:51.058000ZLothanhttps://sourceforge.net/u/lothan/https://sourceforge.net27d2b6e7d61c1f7fa9607a8a05a33ab49ea2ce23<div class="markdown_content"><pre>--- v3
+++ v4
@@ -27,11 +27,8 @@
1. Locating modules loaded into memory from the NitrOS-9 boot file.
2. Determining the amount of available RAM.
3. Loading any required modules that were not loaded from the NitrOS-9 boot file.
-NitrOS-9 also adds the ability to install new system calls through the
-
- [F$SSvc]
-
-system service call. Under NitrOS-9 Level 1, user state programs can directly call this system call. However, NitrOS-9 Level 2 user processes cannot call this system call directly because it is _privileged_. Instead, new system calls are added through special kernel extension modules, named **KrnP3**, **KrnP4**, **KrnP5**, etc. These kernel modules must be present in the OS9Boot file. The cold start routine in **KrnP2** performs a link to **KrnP3**, and if it exists in the boot file, it will be branched to. If **KrnP3** does not exist in the boot file, **KrnP2** continues with a normal cold start.
+
+NitrOS-9 also adds the ability to install new system calls through the F$SSvc system service call. Under NitrOS-9 Level 1, user state programs can directly call this system call. However, NitrOS-9 Level 2 user processes cannot call this system call directly because it is _privileged_. Instead, new system calls are added through special kernel extension modules, named **KrnP3**, **KrnP4**, **KrnP5**, etc. These kernel modules must be present in the OS9Boot file. The cold start routine in **KrnP2** performs a link to **KrnP3**, and if it exists in the boot file, it will be branched to. If **KrnP3** does not exist in the boot file, **KrnP2** continues with a normal cold start.
### System Call Processing
@@ -54,33 +51,13 @@
fcb I$Read
-The NitrOS-9 assembler macro
-
- OS9
-
-generates an
-
- SWI2
-
-instruction. The label
-
- [I$Read]
-
-is the label for the system call code $89.
+The NitrOS-9 assembler macro OS9 generates an SWI2 instruction. The label I$Read is the label for the system call code $89.
#### Types of System Calls
System calls are divided into two categories: _I/O calls_ and _function calls._
-I/O calls perform various input/output functions. The kernel passes calls of this type to the I/O manager for processing. The symbolic names for I/O calls begin with I$ instead of F$. For example, the Read system call is called
-
- [I$Read]
-
-. Function calls perform memory management, multi-programming and other functions, with most being processed by the kernel. The symbolic names for function calls begin with F$. For example, the Link function call is called
-
- [F$Link]
-
-.
+I/O calls perform various input/output functions. The kernel passes calls of this type to the I/O manager for processing. The symbolic names for I/O calls begin with I$ instead of F$. For example, the Read system call is called I$Read. Function calls perform memory management, multi-programming and other functions, with most being processed by the kernel. The symbolic names for function calls begin with F$. For example, the Link function call is called F$Link.
The function calls include _user calls_ and _privileged system mode calls._ (See Chapter 8, “System Calls,” for more information.)
@@ -137,11 +114,7 @@
The 512K address space is called the _physical address space_. The physical address space is subdivided into 8K _blocks_. The six high order address bits (A13-A18) define a _block number_.
-NitrOS-9 creates a _logical address space_ of up to 64K for each task by using the
-
- [F$Fork]
-
-system call. Even though the memory within a logical address space appears to be contiguous, it might not be—the MMU translates the physical addresses to access available memory. Address spaces can also contain blocks of memory that are common to more than one map.
+NitrOS-9 creates a _logical address space_ of up to 64K for each task by using the F$Fork system call. Even though the memory within a logical address space appears to be contiguous, it might not be—the MMU translates the physical addresses to access available memory. Address spaces can also contain blocks of memory that are common to more than one map.
The MMU consists of a multiplexer and a 16 by 6-bit RAM array. Each of the 6-bit elements in this array is an MMU task register. The computer uses these task registers to determine the proper 8-kilobyte memory segment to address.
@@ -149,21 +122,14 @@
The relation between the data in the task register and the generated addresses is as follows:
-**Bit**
-D5
-D4
-D3
-D2
-D1
-D0
-
-**Corresponding Memory Address**
-A18
-A17
-A16
-A15
-A14
-A13
+**Bit** | **Corresponding Memory Address**
+------- | --------------------------------
+D5 | A18
+D4 | A17
+D3 | A16
+D2 | A15
+D1 | A14
+D0 | A13
When the CPU accesses any memory outside the I/O and control range (XFF00-XFFFF), the CPU address lines (A13-A15) and the TR bit determine what segment of memory to address. This is done through the multiplexer when SELECT is low (See the following table.)
@@ -171,422 +137,78 @@
The system uses the data from the MMU registers to determine the block of memory to be accessed, according to the following table:
-**TR Bit**
-**A15**
-**A14**
-**A13**
-**Address Range**
-**MMU Address**
-
-0
-0
-0
-0
-X0000-X1FFFF
-FFA0
-
-0
-0
-0
-1
-X2000-X3FFF
-FFA1
-
-0
-0
-1
-0
-X4000-X5FFF
-FFA2
-
-0
-0
-1
-1
-X6000-X7FFF
-FFA3
-
-0
-1
-0
-0
-X8000-X9FFF
-FFA4
-
-0
-1
-0
-1
-XA000-XBFFF
-FFA5
-
-0
-1
-1
-0
-XC000-XDFFF
-FFA6
-
-0
-1
-1
-1
-XE000-XFFFF
-FFA7
-
-1
-0
-0
-0
-X0000-X1FFFF
-FFA8
-
-1
-0
-0
-1
-X2000-X3FFF
-FFA9
-
-1
-0
-1
-0
-X4000-X5FFF
-FFAA
-
-1
-0
-1
-1
-X6000-X7FFF
-FFAB
-
-1
-1
-0
-0
-X8000-X9FFF
-FFAC
-
-1
-1
-0
-1
-XA000-XBFFF
-FFAD
-
-1
-1
-1
-0
-XC000-XDFFF
-FFAE
-
-1
-1
-1
-1
-XE000-XFFFF
-FFAF
+**TR Bit** | **A15** | **A14** | **A13** | **Address Range** | **MMU Address**
+---------- | ------- | ------- | ------- | ----------------- | ---------------
+0 | 0 | 0 | 0 | X0000-X1FFFF | FFA0
+0 | 0 | 0 | 1 | X2000-X3FFF | FFA1
+0 | 0 | 1 | 0 | X4000-X5FFF | FFA2
+0 | 0 | 1 | 1 | X6000-X7FFF | FFA3
+0 | 1 | 0 | 0 | X8000-X9FFF | FFA4
+0 | 1 | 0 | 1 | XA000-XBFFF | FFA5
+0 | 1 | 1 | 0 | XC000-XDFFF | FFA6
+0 | 1 | 1 | 1 | XE000-XFFFF | FFA7
+1 | 0 | 0 | 0 | X0000-X1FFFF | FFA8
+1 | 0 | 0 | 1 | X2000-X3FFF | FFA9
+1 | 0 | 1 | 0 | X4000-X5FFF | FFAA
+1 | 0 | 1 | 1 | X6000-X7FFF | FFAB
+1 | 1 | 0 | 0 | X8000-X9FFF | FFAC
+1 | 1 | 0 | 1 | XA000-XBFFF | FFAD
+1 | 1 | 1 | 0 | XC000-XDFFF | FFAE
+1 | 1 | 1 | 1 | XE000-XFFFF | FFAF
The translation of physical addresses to 8K blocks is as follows:
-**Range**
-**Block
-Number**
-
-**Range**
-**Block
-Number**
-
-**From**
-**To**
-**From**
-**To**
-
-00000
-01FFF
-00
-40000
-41FFF
-20
-
-02000
-02FFF
-01
-42000
-43FFF
-21
-
-04000
-05FFF
-02
-44000
-45FFF
-22
-
-06000
-07FFF
-03
-46000
-47FFF
-23
-
-08000
-09FFF
-04
-48000
-49FFF
-24
-
-0A000
-0BFFF
-05
-4A000
-4BFFF
-25
-
-0C000
-0DFFF
-06
-4C000
-4DFFF
-26
-
-0E000
-0FFFF
-07
-4E000
-4FFFF
-27
-
-10000
-11FFF
-08
-50000
-51FFF
-28
-
-12000
-13FFF
-09
-52000
-53FFF
-29
-
-14000
-15FFF
-0A
-54000
-55FFF
-2A
-
-16000
-17FFF
-0B
-56000
-57FFF
-2B
-
-18000
-19FFF
-0C
-58000
-59FFF
-2C
-
-1A000
-1BFFF
-0D
-5A000
-5BFFF
-2D
-
-1C000
-1DFFF
-0E
-5C000
-5DFFF
-2E
-
-1E000
-1FFFF
-0F
-5E000
-5FFFF
-2F
-
-20000
-21FFF
-10
-60000
-61FFF
-30
-
-22000
-23FFF
-11
-62000
-63FFF
-31
-
-24000
-25FFF
-12
-64000
-65FFF
-32
-
-26000
-27FFF
-13
-66000
-67FFF
-33
-
-28000
-29FFF
-14
-68000
-69FFF
-34
-
-2A000
-2BFFF
-15
-6A000
-6BFFF
-35
-
-2C000
-2DFFF
-16
-6C000
-6DFFF
-36
-
-2E000
-2FFFF
-17
-6E000
-6FFFF
-37
-
-30000
-31FFF
-18
-70000
-71FFF
-38
-
-32000
-33FFF
-19
-72000
-73FFF
-39
-
-34000
-35FFF
-1A
-74000
-75FFF
-3A
-
-36000
-37FFF
-1B
-76000
-77FFF
-3B
-
-38000
-39FFF
-1C
-78000
-79FFF
-3C
-
-3A000
-3BFFF
-1D
-7A000
-7BFFF
-3D
-
-3C000
-3DFFF
-1E
-7C000
-7DFFF
-3E
-
-3E000
-3FFFF
-1F
-7E000
-7FFFF
-3F
+From | To | Block Number | From | To | Block Number
+----- | ----- | -- | ----- | ----- | --
+00000 | 01FFF | 00 | 40000 | 41FFF | 20
+02000 | 02FFF | 01 | 42000 | 43FFF | 21
+04000 | 05FFF | 02 | 44000 | 45FFF | 22
+06000 | 07FFF | 03 | 46000 | 47FFF | 23
+08000 | 09FFF | 04 | 48000 | 49FFF | 24
+0A000 | 0BFFF | 05 | 4A000 | 4BFFF | 25
+0C000 | 0DFFF | 06 | 4C000 | 4DFFF | 26
+0E000 | 0FFFF | 07 | 4E000 | 4FFFF | 27
+10000 | 11FFF | 08 | 50000 | 51FFF | 28
+12000 | 13FFF | 09 | 52000 | 53FFF | 29
+14000 | 15FFF | 0A | 54000 | 55FFF | 2A
+16000 | 17FFF | 0B | 56000 | 57FFF | 2B
+18000 | 19FFF | 0C | 58000 | 59FFF | 2C
+1A000 | 1BFFF | 0D | 5A000 | 5BFFF | 2D
+1C000 | 1DFFF | 0E | 5C000 | 5DFFF | 2E
+1E000 | 1FFFF | 0F | 5E000 | 5FFFF | 2F
+20000 | 21FFF | 10 | 60000 | 61FFF | 30
+22000 | 23FFF | 11 | 62000 | 63FFF | 31
+24000 | 25FFF | 12 | 64000 | 65FFF | 32
+26000 | 27FFF | 13 | 66000 | 67FFF | 33
+28000 | 29FFF | 14 | 68000 | 69FFF | 34
+2A000 | 2BFFF | 15 | 6A000 | 6BFFF | 35
+2C000 | 2DFFF | 16 | 6C000 | 6DFFF | 36
+2E000 | 2FFFF | 17 | 6E000 | 6FFFF | 37
+30000 | 31FFF | 18 | 70000 | 71FFF | 38
+32000 | 33FFF | 19 | 72000 | 73FFF | 39
+34000 | 35FFF | 1A | 74000 | 75FFF | 3A
+36000 | 37FFF | 1B | 76000 | 77FFF | 3B
+38000 | 39FFF | 1C | 78000 | 79FFF | 3C
+3A000 | 3BFFF | 1D | 7A000 | 7BFFF | 3D
+3C000 | 3DFFF | 1E | 7C000 | 7DFFF | 3E
+3E000 | 3FFFF | 1F | 7E000 | 7FFFF | 3F
In order for the MMU to function, the TR bit at $FF90 must be cleared and the MMU must be enabled. However, before doing this, the address data for each memory segment must be loaded into the designated set of task registers. For example, to select a standard 64K map in the top range of the Color Computer 3’s 512K RAM, with the TR bit set to 0, the following values must be preloaded into the MMU’s registers:
-**MMU Location
-Address**
-**Data
-(Hex)**
-**Data
-(Binary)**
-**Address
-Range**
-
-FFA0
-38
-111000
-70000-71FFF
-
-FFA1
-39
-111001
-72000-73FFF
-
-FFA2
-3A
-111010
-74000-75FFF
-
-FFA3
-3B
-111011
-76000-77FFF
-
-FFA4
-3C
-111100
-78000-79FFF
-
-FFA5
-3D
-111101
-7A000-7BFFF
-
-FFA6
-3E
-111110
-7C000-7DFFF
-
-FFA7
-3F
-111111
-7E000-7FFFF
+MMU Location Address | Data (Hex) | Data (Binary) | Address Range
+---- | -- | ------ | -----------
+FFA0 | 38 | 111000 | 70000-71FFF
+FFA1 | 39 | 111001 | 72000-73FFF
+FFA2 | 3A | 111010 | 74000-75FFF
+FFA3 | 3B | 111011 | 76000-77FFF
+FFA4 | 3C | 111100 | 78000-79FFF
+FFA5 | 3D | 111101 | 7A000-7BFFF
+FFA6 | 3E | 111110 | 7C000-7DFFF
+FFA7 | 3F | 111111 | 7E000-7FFFF
Although this table shows MMU data in the range $38 to $3F, any data between $00 and $3F can be loaded into the MMU registers to select memory addresses in the range 0 to $7FFFF.
-Normally, the blocks containing I/O devices are kept in the system map, but not in the user map. This is appropriate for timesharing applications, but not for process control. To directly access I/O devices, use the
-
- [F$MapBlk]
-
-system call. This call takes a starting block number and block count, and maps them into _unallocated_ spaces of the process’ address space. The system call returns the logical address at which the blocks were inserted.
+Normally, the blocks containing I/O devices are kept in the system map, but not in the user map. This is appropriate for timesharing applications, but not for process control. To directly access I/O devices, use the F$MapBlksystem call. This call takes a starting block number and block count, and maps them into _unallocated_ spaces of the process’ address space. The system call returns the logical address at which the blocks were inserted.
For example, suppose a display screen in your system is allocated at extended addresses $7A000-$7DFFF (blocks $3D and $3E). The following system call maps them into your address space:
@@ -599,15 +221,7 @@
On return, the U register contains the starting address at which the blocks were switched. For example, suppose that the call returned $4000. To access extended address $7A020, write to $4020.
-Other system calls that copy data to or from one task’s map to another are available, such as
-
- [F$STABX]
-
-and
-
- [F$Move]
-
-. Some of these calls are system mode privileged. You can unprotect them by changing the appropriate bit in the corresponding entry of the system service request table and then making a new system boot with the patched table.
+Other system calls that copy data to or from one task’s map to another are available, such as F$STABX and F$Move. Some of these calls are system mode privileged. You can unprotect them by changing the appropriate bit in the corresponding entry of the system service request table and then making a new system boot with the patched table.
### Multiprogramming
@@ -619,11 +233,7 @@
#### Process Creation
-A process is created when an existing process executes the
-
- [F$Fork]
-
-system call. This call’s main argument is the name of the program module that the new process is to execute first (the _primary module_).
+A process is created when an existing process executes the F$Fork system call. This call’s main argument is the name of the program module that the new process is to execute first (the _primary module_).
**Finding the Module.** NitrOS-9 first attempts to find the module in the module directory. If it does not find the module, NitrOS-9 usually attempts to load into a memory a mass-storage file in the execution directory, with the requested module name as a filename.
@@ -635,11 +245,7 @@
The process also has a _user ID_, which is used to identify all processes and files that belong to a particular user. The user ID is inherited from the parent process.
-**Process Termination.** A process terminates when it executes the
-
- F$Exit
-
-system call, or when it receives a _fatal_ signal. The termination closes any open paths, deallocates memory used by the process, and unlinks its primary module.
+**Process Termination.** A process terminates when it executes the F$Exit system call, or when it receives a _fatal_ signal. The termination closes any open paths, deallocates memory used by the process, and unlinks its primary module.
#### Process States
@@ -653,15 +259,7 @@
**The Active State.** Each active process is given a time slice for execution, according to its priority. The scheduler in the kernel ensures that all active processes, even those of low priority, get some CPU time.
-**The Wait State.** This state is entered when a process executes the
-
- [F$Wait]
-
-system call. The process remains suspended until one of its _child_ processes terminates or until it receives a _signal_. (See the “Signals” section later in this chapter.) **The Sleep State.** This state is entered when a process executes the
-
- F$Sleep
-
-system call, which expects the number of ticks for which the process is to remain in the sleep queue. The process will remain until the specified time has elapsed, or until it receives a wakeup signal.
+**The Wait State.** This state is entered when a process executes the F$Wait system call. The process remains suspended until one of its _child_ processes terminates or until it receives a _signal_. (See the “Signals” section later in this chapter.) **The Sleep State.** This state is entered when a process executes the F$Sleep system call, which expects the number of ticks for which the process is to remain in the sleep queue. The process will remain until the specified time has elapsed, or until it receives a wakeup signal.
#### Execution Scheduling
@@ -679,53 +277,23 @@
A _signal_ is an asynchronous control mechanism used for interprocess communication and control. It behaves like a software interrupt, and can cause a process to suspend a program, execute a specific routine, and then return to the interrupted program.
-Signals can be sent from one process to another by the
-
- F$Send
-
-system call. Or, they can be sent from NitrOS-9 service routines to a process.
+Signals can be sent from one process to another by the F$Send system call. Or, they can be sent from NitrOS-9 service routines to a process.
A signal can convey status information in the form of a 1-byte numeric value. Some _signal codes_ (values) are predefined, but you can define most. Those already defined by NitrOS-9 are:
-0
-S$Kill
-Kill (terminates the process, is non-interceptable)
-
-1
-S$Wake
-Wakeup (wakes up a sleeping process)
-
-2
-S$Abort
-Keyboard terminate
-
-3
-S$Intrpt
-Keyboard interrupt
-
-4
-S$Window
-Window change (CoWin/CoGrf)
-
-4
-S$HUP
-Hang-up (DriveWire 4)
-
-5
-S$Alarm
-Alarm
-
-128-255
-
-User defined
+Signal | Mnemonic | Description
+0 | S$Kill | Kill (terminates the process, is non-interceptable)
+1 | S$Wake | Wakeup (wakes up a sleeping process)
+2 | S$Abort | Keyboard terminate
+3 | S$Intrpt | Keyboard interrupt
+4 | S$Window | Window change (CoWin/CoGrf)
+4 | S$HUP | Hang-up (DriveWire 4)
+5 | S$Alarm | Alarm
+128-255 | | User defined
When a signal is sent to a process, the signal is saved in the process descriptor. If the process is in the sleeping or waiting state, it is changed to the active state. When the process gets its next time slice, the signal is processed.
-What happens next depends on whether or not the process has set up a _signal intercept trap_ (also known as a signal service routine) by executing the
-
- F$Icpt
-
-system call.
+What happens next depends on whether or not the process has set up a _signal intercept trap_ (also known as a signal service routine) by executing the F$Icpt system call.
If the process has set up a signal intercept trap, the process resumes execution at the address given in the system call. The signal code passes to this routine. Terminate the routine with an RTI instruction to resume normal execution of the process.
@@ -733,49 +301,23 @@
If it has not set up a signal intercept trap, the process is terminated immediately. It is also terminated if the signal code is zero. If the process is in the system mode, NitrOS-9 defers the termination. The process dies upon return to the user state.
-A process can have a signal pending (usually because the process has not been assigned a time slice since receiving the signal). If it does, and another process tries to send it another signal, the new signal is terminated, and the
-
- F$Send
-
-system call returns an error. To give the destination process time to process the pending signal, the sender needs to execute an
-
- F$Sleep
-
-system call for a few ticks before trying to send the signal again.
+A process can have a signal pending (usually because the process has not been assigned a time slice since receiving the signal). If it does, and another process tries to send it another signal, the new signal is terminated, and the F$Send system call returns an error. To give the destination process time to process the pending signal, the sender needs to execute an F$Sleep system call for a few ticks before trying to send the signal again.
### Interrupt Processing
_Interrupt processing_ is another important function of the kernel. OS-9 sends each hardware interrupt to a specific address. This address, in turn, specifies the address of the device service routine to be executed. This is called _ vectoring_ the interrupt. The address that points to the routine is called the _vector_. It has the same name as the interrupt.
-The SWI, SWI2, and SWI3 vectors point to routines that read the corresponding pseudo vector from the process’ descriptor and dispatch to it. This is why the
-
- [F$SSWI]
-
-system call is local to a process; it only changes a pseudo vector in the process descriptor.
-
-**Vector**
-**Address**
-
-SWI3
-$FFF2
-
-SWI2
-$FFF4
-
-FIRQ
-$FFF6
-
-IRQ
-$FFF8
-
-SWI
-$FFFA
-
-NMI
-$FFFC
-
-RESTART
-$FFFE
+The SWI, SWI2, and SWI3 vectors point to routines that read the corresponding pseudo vector from the process’ descriptor and dispatch to it. This is why the F$SSWI system call is local to a process; it only changes a pseudo vector in the process descriptor.
+
+**Vector** | **Address**
+---------- | ------------
+SWI3 | $FFF2
+SWI2 | $FFF4
+FIRQ | $FFF6
+IRQ | $FFF8
+SWI | $FFFA
+NMI | $FFFC
+RESTART | $FFFE
**FIRQ Interrupt.** The system uses the FIRQ interrupt. The FIRQ vector is not available to you. The FIRQ vector is reserved for future use. Only one FIRQ generating device can be in the system at a time.
@@ -815,49 +357,21 @@
NitrOS-9 reads the device memory address and service routine address from the table, and performs the interrupt service routine.
-**Note:** _If you are writing your own device driver, terminate the interrupt service routine with an
-
- RTS
-
-instruction, **not** an
-
- RTI
-
-instruction._ **Adding Entries to the Table.** You can make entries to the IRQ (interrupt request) polling table by using the
-
- F$IRQ
-
-system call. This call is a _privileged system call_, and can only be executed in system mode. NitrOS-9 is in system mode whenever it is running a device driver.
+**Note:** _If you are writing your own device driver, terminate the interrupt service routine with an RTS instruction, **not** an RTI instruction._ **Adding Entries to the Table.** You can make entries to the IRQ (interrupt request) polling table by using the F$IRQ system call. This call is a _privileged system call_, and can only be executed in system mode. NitrOS-9 is in system mode whenever it is running a device driver.
**Note:** _The code for the interrupt polling system is located in the I/O Manager module. The Krn and KrnP2 modules contain the physical interrupt processing routines._
### Virtual Interrupt Processing
-A virtual IRQ, or VIRQ, is useful with devices in Multi-Pak expansion slots. Because of the absence of an IRQ line from the Multi-Pak interface, these devices cannot initiate physical interrupts. VIRQ enables these devices to act as if they were interrupt driven. Use VIRQ only with device driver and pseudo device driver modules. VIRQ is handled in the **Clock** module, which handles the VIRQ polling table and installs the
-
- F$VIRQ
-
-system call. Since the
-
- F$VIRQ
-
-system call is dependent on clock initialization, the SysGo module forces the clock to start.
+A virtual IRQ, or VIRQ, is useful with devices in Multi-Pak expansion slots. Because of the absence of an IRQ line from the Multi-Pak interface, these devices cannot initiate physical interrupts. VIRQ enables these devices to act as if they were interrupt driven. Use VIRQ only with device driver and pseudo device driver modules. VIRQ is handled in the **Clock** module, which handles the VIRQ polling table and installs the F$VIRQ system call. Since the F$VIRQ system call is dependent on clock initialization, the SysGo module forces the clock to start.
The virtual interrupt is set up so that a device can be interrupted at a given number of clock ticks. The interrupt can occur one time, or can be repeated as long as the device is used.
-The
-
- [F$VIRQ]
-
-system call installs VIRQ in a table. This call requires specification of a 5-byte packet for use in the VIRQ table. This packet contains:
+The F$VIRQ system call installs VIRQ in a table. This call requires specification of a 5-byte packet for use in the VIRQ table. This packet contains:
* Bytes for an actual counter
* A reset value for the counter
- * A status byte that indicates whether a virtual interrupt has occurred and whether the VIRQ is to be reinstalled in the table after being issued
-
- [F$VIRQ]
-
-also specifies an initial tick count for the interrupt. The actual call is summarized here and is described in detail in Chapter 8.
+ * A status byte that indicates whether a virtual interrupt has occurred and whether the VIRQ is to be reinstalled in the table after being issued F$VIRQ also specifies an initial tick count for the interrupt. The actual call is summarized here and is described in detail in Chapter 8.
Call:
@@ -877,21 +391,10 @@
The 5-byte packet is defined as follows:
-**Name**
-**Offset**
-**Function**
-
-Vi.Cnt
-$0
-Actual counter
-
-Vi.Rst
-$2
-Reset value for counter
-
-Vi.Stat
-$4
-Status byte
+**Name** | **Offset** | **Function**
+Vi.Cnt | $0 | Actual counter
+Vi.Rst | $2 | Reset value for counter
+Vi.Stat | $4 | Status byte
Two of the bits in the status byte are used. These are:
@@ -899,11 +402,7 @@
Bit 7 – set if a count reset is required
-When making an
-
- [F$VIRQ]
-
-call, the packet might require initialization with a reset value. Bit 7 of the status byte must be either set or cleared to signify a reset of the counter or a one-time VIRQ call. The reset value does not need to be the same as the initial counter value. When NitrOS-9 processes the call, it writes the packet address into the VIRQ table.
+When making an F$VIRQ call, the packet might require initialization with a reset value. Bit 7 of the status byte must be either set or cleared to signify a reset of the counter or a one-time VIRQ call. The reset value does not need to be the same as the initial counter value. When NitrOS-9 processes the call, it writes the packet address into the VIRQ table.
At each clock tick, NitrOS-9 scans the VIRQ table and subtracts one from each timer value. When a timer count reaches zero, NitrOS-9 performs the following actions:
@@ -913,19 +412,7 @@
When a counter reaches zero and makes a virtual interrupt request, NitrOS-9 runs the standard interrupt polling routine and services the interrupt. Because of this, you must install entries on both the VIRQ and IRQ polling tables whenever you are using a VIRQ.
-Unless the device has an actual physical interrupt, install the device on the IRQ polling table via the
-
- [F$IRQ]
-
-system call before placing it on the VIRQ table. If the device has a physical interrupt, use the interrupt’s hardware register address as the polling address for the
-
- [F$IRQ]
-
-call. After setting the polling address, set the flip and mask bytes for the device and make the
-
- [F$IRQ]
-
-call.
+Unless the device has an actual physical interrupt, install the device on the IRQ polling table via the F$IRQ system call before placing it on the VIRQ table. If the device has a physical interrupt, use the interrupt’s hardware register address as the polling address for the F$IRQ call. After setting the polling address, set the flip and mask bytes for the device and make the F$IRQ call.
If the device is totally VIRQ-driven, and has no interrupts, use the status byte from the VIRQ packet as the status byte. Use a mask byte of %00000001, defined as Vi.IFlag in the os9defs file. Use a flip byte value of 0.
</pre>
</div>