Difference between revisions of "Foenix Kernel Documentation"
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
Contents
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
| ||||||||||||
| PUTS | $00:101C | Print a null-terminated ASCII string to the currently selected channel
| ||||||||||||
| SETIN | $00:1038 | Set the current input channel used by the GET subroutines
| ||||||||||||
| SETOUT | $00:103C | Set the current output channel used by the PUT subroutines
| ||||||||||||
| 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.
| ||||||||||||
| 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.
| ||||||||||||
| 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 |