Global System Tables |
Contents:
System information block
IO port owners table
Interrupt receivers table
Message receivers table
Message queue blocks
User Connection Table
This information contains current information about the system. It's
main purpose is for quick access from applications and drivers.
Address | Size (bytes) | Use |
Memory | ||
0x00A00 | 4 | Number of pages of RAM installed |
0x00A04 | 4 | Number of pages free |
0x00A08 | 4 | Address of system page directory |
0x00A0C | 4 | Address of PAM |
0x00A10 | 16 | - |
System | ||
0x00A20 | 4 | Address of IO port owner table |
0x00A24 | 4 | Number of pages in IO port owner table |
0x00A28 | 4 | Address of interrupt receiver table |
0x00A30 | 4 | Used for temporary storage |
0x00A34 | 16 | - |
Time | ||
0x00A40 | 4 | Timer tick low (fractions of a millisecond) |
0x00A44 | 4 | Timer tick high (milliseconds since boot) |
0x00A48 | 4 | Timer rollover counter (every 49.71 days) |
0x00A4C | 2 | Current task |
0x00A4E | 1 | Current thread |
0x00A4F | 1 | Scheduler status flags |
0x00A50 | 4 | Value of timer tick high last task switch (0 for none) |
0x00A54 | 4 | Task info table address |
0x00A58 | 4 | Current number of tasks |
0x00A5C | 2 | Lowest valid task ID |
0x00A5E | 2 | - |
Network | ||
0x00A60 | 32 | - |
Message | ||
0x00A80 | 4 | Address of receiver table |
0x00A84 | 2 | Receiver table size (in pages) |
0x00A86 | 2 | Highest Receiver ID |
0x00A88 | 4 | Number of valid message receivers |
0x00A8C | 20 | - |
File | ||
0x00AA0 | 32 | - |
User | ||
0x00AC0 | 4 | Address of user connection table |
0x00AC4 | 4 | Current active user connection entry number |
0x00AC8 | 4 | Address of active user connection |
0x00ACC | 4 | Current number of user connections |
0x00AD0 | 16 | - |
Miscellaneous | ||
0x00BF8 | 4 | Last secure local keypress |
0x00BFC | 4 | Last secure local keypress number |
This table contains 65536 entries, 1 word for each port containing the
owners code segment number. The lower 2 bits of this word are undefined
and may be used for anything.
This page keeps track of which code to call for each cpu generated interrupt. Each of the 32 interrupts has a table made up of 16 entries (8 bytes each). Each interrupt takes up 256 bytes, so offset 0x200 within the page would be the start of the first entry in the table for the third interrupt.
Each entry in each table has this format:
Offset | Size | Use |
0 | 4 | Offset for far call |
4 | 2 | Code ID of owner (it's CS) |
6 | 1 | Reserved |
7 | 1 | Flags
Bit Meaning when set 0 Entry in use 1-7 Reserved |
Each message queue has an associated receiver ID. For each receiver
ID this table has a 8 byte entry with this format:
Offset | Size | Use |
00 | 4 | address of queue or offset |
04 | 2 | code ID |
06 | 1 | reserved |
07 | 1 | Port flags
Bit Meaning when '1' 0 Entry in use 1 Entry has queue |
Each message queue block starts with this header:
Offset | Size | Use |
00 | 4 | Number of allocated pages for queue |
04 | 4 | Offset for last entry |
08 | 4 | Offset for head entry |
0C | 4 | Offset for tail entry |
10 | Start of entries |
Offset | Size | Use |
000 | 4 | Sender ID |
004 | 4 | Data1 |
008 | 4 | Data2 |
00C | 4 | Function |
This is actually a page containing 2 tables. The page is broken up like
this:
Offset | Size | Use |
0000 | 128 | Device connection entries |
0080 | 3968 | User connection entries |
Each device type has a device
connection entry in this format:
Offset | Size | Use |
000 | 4 | Message port ID (0 for none) |
004 | 4 | Connection ID currently connected to |
Each user connection to the local
user interface has an ID. For each ID there is an entry in this table corresponding
to the message port ID for the owner of that connection. The format of
each entry is:
Offset | Size | Use |
000 | 4 | Owners message port |
004 | 2 | Connection flags
Bit Meaning when '1' 0 Connected to keyboard 1 Connected to video 2 Connected to mouse 3 Connected to sound 4 Connected to joystick |
006 | 1 | - |
007 | 1 | General Flags
Bit Meaning when '1' 0 Entry in use/valid |
Home Index |