Global System Tables


System information block
IO port owners table
Interrupt receivers table
Message receivers table
Message queue blocks
User Connection Table

System information block

This information contains current information about the system. It's main purpose is for quick access from applications and drivers.
Address Size (bytes) Use
 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   -
 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   -
 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   -
 0x00A60  32   -
 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   -
 0x00AA0  32   -
 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   -
 0x00BF8  4   Last secure local keypress
 0x00BFC  4   Last secure local keypress number

IO port owners table

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.

Interrupt receiver table

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

Message receiver table

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

Message queue blocks

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

Each entry has this format:
Offset Size Use
 000  4  Sender ID 
 004  4  Data1
 008  4  Data2
 00C  4  Function

User Connection Table

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
Copyright 1998, Brendan Trotter