Difference between revisions of "Foenix Kernel Documentation"

From C256 Foenix Wiki
Jump to navigation Jump to search
(Kernel Essentials)
(Kernel Calls)
Line 9: Line 9:
  
 
== Kernel Calls ==
 
== Kernel Calls ==
 +
 +
{| class="wikitable"
 +
|-
 +
! Name !! Address !! Description
 +
|-
 +
| BOOT || $00:1000 || Cold boot routine
 +
|-
 +
| PUTC || $00:1018 || Print a character to the currently selected channel
 +
{| class="wikitable"
 +
|-
 +
! Register !! Width !! Contents
 +
|-
 +
| A || 8 || ASCII code of the character to print
 +
|}
 +
|-
 +
| PUTS || $00:101C || Print a null-terminated ASCII string to the currently selected channel
 +
{| class="wikitable"
 +
|-
 +
! Register !! Width !! Contents
 +
|-
 +
| B || 8 || Bank containing the data to print
 +
|-
 +
| X || 16 || Address within that bank of the first character to print
 +
|}
 +
|-
 +
| SETIN || $00:1038 || Set the current input channel used by the GET subroutines
 +
{| class="wikitable"
 +
|-
 +
! Register !! Width !! Contents
 +
|-
 +
| A || 8 || Input channel to use
 +
* 0 = Keyboard
 +
* 1 = COM1 (external serial)
 +
* 2 = COM2 (internal serial)
 +
|}
 +
|-
 +
| SETOUT || $00:103C || Set the current output channel used by the PUT subroutines
 +
{| class="wikitable"
 +
|-
 +
! Register !! Width !! Contents
 +
|-
 +
| A || 8 || Input channel to use
 +
* 0 = Screen
 +
* 1 = COM1 (external serial)
 +
* 2 = COM2 (internal serial)
 +
|}
 +
|-
 +
| GETCHW || $00:104C || Get a character from the input channel. Waits until data received. A=0 and Carry=1 if no data is waiting
 +
|-
 +
| GETCHE || $00:1050 || Get a character from the input channel and echo to the screen. Wait if data is not ready.
 +
|-
 +
| PRINTCR || $00:106C || Print Carriage Return
 +
|-
 +
| PRINTH || $00:1078 || Print hex value in memory.
 +
{| class="wikitable"
 +
|-
 +
! Register !! Width !! Contents
 +
|-
 +
| B || 8 || Bank containing the data to print
 +
|-
 +
| X || 16 || Address within that bank of the last byte to print
 +
|-
 +
| Y || 16 || Number of bytes to print
 +
|}
 +
|-
 +
| PRINTAH || $00:1080 || Prints hex value in A. Printed value is 2 wide if M flag is 1, 4 wide if M||0
 +
|-
 +
| LOCATE || $00:1084 || Move the cursor to a new position on the screen.
 +
{| class="wikitable"
 +
|-
 +
! Register !! Width !! Contents
 +
|-
 +
| X || 16 || The column for the cursor
 +
|-
 +
| Y || 16 || The row for the cursor
 +
|}
 +
|-
 +
| CSRRIGHT || $00:1090 || Move the cursor one position to the right
 +
|-
 +
| CSRLEFT || $00:1094 || Move the cursor one position to the left
 +
|-
 +
| CSRUP || $00:1098 || Move the cursor up one row
 +
|-
 +
| CSRDOWN || $00:109C || Move the cursor down one row
 +
|-
 +
| CSRHOME || $00:10A0 || Move the cursor to the upper-left corner
 +
|-
 +
| SCROLLUP || $00:10A4 || Scroll the screen up one line. Creates an empty line at the bottom.
 +
|-
 +
| CLRSCREEN || $00:10B0 || Clear the screen
 +
|-
 +
| INITCHLUT || $00:10B4 || Init character look-up table
 +
|-
 +
| INITSUPERIO || $00:10B8 || Init Super-IO chip
 +
|-
 +
| INITKEYBOARD || $00:10BC || Init keyboard
 +
|-
 +
| INITRTC || $00:10C0 || Init Real-Time Clock
 +
|-
 +
| INITCURSOR || $00:10C4 || Init the Cursors registers
 +
|-
 +
| INITFONTSET || $00:10C8 || Init the Internal FONT Memory
 +
|-
 +
| INITGAMMATABLE || $00:10CC || Init the RGB GAMMA Look Up Table
 +
|-
 +
| INITALLLUT || $00:10D0 || Init the Graphic Engine (Bitmap/Tile/Sprites) LUT
 +
|-
 +
| INITVKYTXTMODE || $00:10D4 || Init the Text Mode @ Reset Time
 +
|-
 +
| INITVKYGRPMODE || $00:10D8 || Init the Basic Registers for the Graphic Mode
 +
|}
  
 
== Console Special Characters ==
 
== Console Special Characters ==

Revision as of 13:29, 15 February 2020

Foenix Kernel Documentation

Kernel Essentials

On the FMX, the Foenix Kernel resides in bank $39 of the system RAM. It provides for the initialization of the hardware and a certain minimalist level of access to the hardware. Kernel routines are called through a kernel jump table that starts at $00:1000. All kernel routines must be called using the JSL instruction (long, or 24-bit subroutine call), since they all terminate with an RTL. This allows the kernel routines to be called from anywhere in system memory.

Kernel Calls

Name Address Description
BOOT $00:1000 Cold boot routine
PUTC $00:1018 Print a character to the currently selected channel
Register Width Contents
A 8 ASCII code of the character to print
PUTS $00:101C Print a null-terminated ASCII string to the currently selected channel
Register Width Contents
B 8 Bank containing the data to print
X 16 Address within that bank of the first character to print
SETIN $00:1038 Set the current input channel used by the GET subroutines
Register Width Contents
A 8 Input channel to use
  • 0 = Keyboard
  • 1 = COM1 (external serial)
  • 2 = COM2 (internal serial)
SETOUT $00:103C Set the current output channel used by the PUT subroutines
Register Width Contents
A 8 Input channel to use
  • 0 = Screen
  • 1 = COM1 (external serial)
  • 2 = COM2 (internal serial)
GETCHW $00:104C Get a character from the input channel. Waits until data received. A=0 and Carry=1 if no data is waiting
GETCHE $00:1050 Get a character from the input channel and echo to the screen. Wait if data is not ready.
PRINTCR $00:106C Print Carriage Return
PRINTH $00:1078 Print hex value in memory.
Register Width Contents
B 8 Bank containing the data to print
X 16 Address within that bank of the last byte to print
Y 16 Number of bytes to print
PRINTAH $00:1080 Prints hex value in A. Printed value is 2 wide if M flag is 1, 4 wide if M 0
LOCATE $00:1084 Move the cursor to a new position on the screen.
Register Width Contents
X 16 The column for the cursor
Y 16 The row for the cursor
CSRRIGHT $00:1090 Move the cursor one position to the right
CSRLEFT $00:1094 Move the cursor one position to the left
CSRUP $00:1098 Move the cursor up one row
CSRDOWN $00:109C Move the cursor down one row
CSRHOME $00:10A0 Move the cursor to the upper-left corner
SCROLLUP $00:10A4 Scroll the screen up one line. Creates an empty line at the bottom.
CLRSCREEN $00:10B0 Clear the screen
INITCHLUT $00:10B4 Init character look-up table
INITSUPERIO $00:10B8 Init Super-IO chip
INITKEYBOARD $00:10BC Init keyboard
INITRTC $00:10C0 Init Real-Time Clock
INITCURSOR $00:10C4 Init the Cursors registers
INITFONTSET $00:10C8 Init the Internal FONT Memory
INITGAMMATABLE $00:10CC Init the RGB GAMMA Look Up Table
INITALLLUT $00:10D0 Init the Graphic Engine (Bitmap/Tile/Sprites) LUT
INITVKYTXTMODE $00:10D4 Init the Text Mode @ Reset Time
INITVKYGRPMODE $00:10D8 Init the Basic Registers for the Graphic Mode

Console Special Characters