Date |
Version |
Notes |
1/20/2003 |
0.1 |
Initial Bios Release
|
2/19/2004 |
0.2 |
Added cold boot routine, stack call, and stack return |
|
3/23/2004 |
0.3 |
Added terminal baud, 8-bit multiply, 16-bit divide,
Changed register assignments to standards |
|
3/23/2004 |
0.3.1 |
Fixed error in floppy boot routine. Thanks Richard for finding that! |
3/29/2004 |
0.4 |
Added support for IDE read/write and reset |
|
4/07/2004 |
0.5 |
Major restructuring of bios call convention. BIOS calls are now called
with SCALL and SRET method |
4/21/2004 |
0.6 |
Added f_hexin,f_hexout2,f_hexout4,f_initcall,f_bootide
|
6/07/2004 |
0.7 |
Added f_minimon,f_atoi,f_intout,f_uintout |
7/21/2004 |
0.8 |
Replaced serial routines, now allows up to 2400 baud with 1.7mhz clock |
10/11/2004 |
0.9 |
SCALL and SRET now set X=2
f_inmsg added for outputting inline messages
f_input has been modified to allow up to 256 bytes on entry
f_inputl has been added to allow for specified limited buffer input
<CTRL><C> will terminate terminal input and set DF
Fixed remainder bug in f_div16
|
1/25/2005 |
1.0 |
Removed Floppy Disk routines
Added: f_isnum, f_isalpha, f_ishex, f_isalnum, f_findtkn, f_idnum, f_isterm
|
3/1/2005 |
1.0.4 |
Added: f_getdev
Added support for STG Elf 2000 IDE/UART/RTC board
|
11/6/2017 |
1.0.6 |
Merged in changes from Robert Armstrong for Elf2k expansions
|
Function |
Name |
Version |
Notes |
0FF00h |
f_boot |
0.5 |
Cold boot from ide
|
0FF03h |
f_type |
0.5 |
Type charcter to terminal
0Ch is translated to <ESC>[2J
Input: |
D - Character to type
RE.1 - Baud Constant |
Output: |
None |
|
0FF06h |
f_read |
0.5 |
Read charcter from terminal
Input: |
RE.1 - Baud Constant |
Output: |
D - Read character |
|
0FF09h |
f_msg |
0.5 |
Type message to terminal
Input: |
RF - pointer to asciiz string
RE.1 - Baud Constant |
Output: |
None |
|
0FF0Fh |
f_input |
0.5 |
Read string from terminal (fixed buffer length of 256)
Input: |
RF - pointer to input buffer
RE.1 - Baud Constant |
Output: |
DF=0 - Input finished with <ENTER>
DF=1 - Input finished with <CTRL><C> |
|
0FF12h |
f_strcmp |
0.5 |
Compare strings
Input: |
RF = pointer to string_1
RD = pointer to string_2 |
Output: |
string_1 = string_2 D=00
string_1 < string_2 D=FF
string_1 > string_2 D=01 |
|
0FF15h |
f_ltrim |
0.5 |
Left trim string
Input: |
RF = pointer to string |
Output: |
RF points to first non-whitespace character |
|
0FF18h |
f_strcpy |
0.5 |
String copy
Input: |
RF = pointer to source string,0 terminated
RD = pointer to destination string |
Output: |
None |
|
0FF1Bh |
f_memcpy |
0.5 |
Memory copy
Input: |
RF = pointer to source string
RD = pointer to destination string
RC = count of bytes to copy |
Output: |
None |
|
0FF1Eh |
f_wrtsec |
0.5 |
Write sector to disk (current drive, track)
Function removed in version 1.0
Input: |
RF = pointer to data
RC.0 = Sector to write |
Output: |
D - Result from FDC |
|
0FF21h |
f_rdsec |
0.5 |
Read sector from disk (current drive, track)
Function removed in version 1.0
Input: |
RF = pointer to buffer
RC.0 = Sector to read |
Output: |
D - Result from FDC |
|
0FF24h |
f_seek0 |
0.5 |
Seek to track 0 (current drive)
Function removed in version 1.0
Input: |
None |
Output: |
D - Result from FDC |
|
0FF27h |
f_seek |
0.5 |
Seek to track (current drive)
Function removed in version 1.0
Input: |
RC.0 = Track |
Output: |
D - Result from FDC |
|
0FF2Ah |
f_drive |
0.5 |
Select drive
Function removed in version 1.0
Input: |
RC.0 = Drive (1=drive 1,2=drive 2,4=drive 3,8=drive 4) |
Output: |
None |
|
0FF2Dh |
f_setbd |
0.5 |
Determine terminal baud rate
Input: |
Needs <CR> or <LF> type at console
<CR> - Use full duplex mode
<LF> - Use half duplex mode |
Output: |
RE.1 = Baud Constant |
|
0FF30h |
f_mul16 |
0.5 |
Multiply 16-bit by 16-bit
Input: |
RF = First number
RD = Second number |
Output: |
RB = Low word of 32-bit result
RC = High word of 32-bit result |
|
0FF33h |
f_div16 |
0.5 |
Divide 16-bit by 16-bit
Input: |
RF = First number
RD = Second number |
Output: |
RB = 16-bit result
RF = 16-bit remainder |
|
0FF36h |
f_idereset |
0.5 |
Reset IDE subsystem
|
0FF39h |
f_idewrite |
0.5 |
Write IDE Sector
Input: |
RF = Pointer to disk transfer buffer
R7.0 = value for Sector Start Register
R7.1 = value for Cylinder Lo Register
R8.0 = value for Cylinder Hi Register
R8.1 = value for Head/Device Register
R2 = Valid stack |
Output: |
D = Controller Status Register |
|
0FF3Ch |
f_ideread |
0.5 |
Read IDE Sector
Input: |
RF = Pointer to disk transfer buffer
R7.0 = value for Sector Start Register
R7.1 = value for Cylinder Lo Register
R8.0 = value for Cylinder Hi Register
R8.1 = value for Head/Device Register
R2 = must point to suitable stack |
Output: |
D = Controller Status Register |
|
0FF3Fh |
f_initcall |
0.6 |
Initiallize SCALL and SRET
This routine is invoked with LBR not scall.
Input: |
R6 - Return address |
Output: |
R4 - Call vector for SCALL
R5 - Call vector for SRET |
|
0FF42h |
f_bootide |
0.6 |
Boot IDE device
|
0FF45h |
f_hexin |
0.6 |
Convert ascii hex to binary
Input: |
RF = Buffer pointer to characters string |
Output: |
RD - Binary representation of number
RF - Pointing at first non-alphanumeric character |
|
0FF48h |
f_hexout2 |
0.6 |
Convert binary byte to ascii string
Input: |
RD.0 = Number to convert
RF = Buffer pointer |
Output: |
RD - Consumed
RF - Pointing to first byte after conversion |
|
0FF4Bh |
f_hexout4 |
0.6 |
Convert binary word to ascii string
Input: |
RD = Number to convert
RF = Buffer pointer |
Output: |
RD - Consumed
RF - Pointing to first byte after conversion |
|
0FF4Eh |
f_tty |
0.6 |
Type charcter to terminal, no translations
Input: |
D - Character to type
RE.1 - Baud Constant |
Output: |
None |
|
0FF54h |
f_minimon |
0.7 |
Jump to mini-monitor
|
0FF57h |
f_freemem |
0.7 |
Get memory size
Input: |
none |
Output: |
RF - Last writable address |
|
0FF5DH |
f_atoi |
0.7 |
Convert ASCII to integer
Input: |
RF - Pointer to ascii string |
Output: |
RD - Converted number |
RF - First non-numeric character |
DF=1 - First characters was non-numeric |
|
0FF60h |
f_uintout |
0.7 |
Convert unsigned integer to ASCII
Input: |
RD - Number to convert |
RF - Buffer to store ascii number |
Output: |
RF - Last position + 1 |
|
0FF63h |
f_intout |
0.7 |
Convert signed integer to ASCII
Input: |
RD - Number to convert |
RF - Buffer to store ascii number |
Output: |
RF - Last position + 1 |
|
0FF66h |
f_inmsg |
0.9 |
Type inline message to terminal
Input: |
Bytes following call are output
RE.1 - Baud Constant |
Output: |
None |
|
0FF69h |
f_inputl |
0.9 |
Read string from terminal (variable buffer length)
Input: |
RF - pointer to input buffer
RC - Maximum allowed input characters
RE.1 - Baud Constant |
Output: |
DF=0 - Input finished with <ENTER>
DF=1 - Input finished with <CTRL><C> |
|
0FF6Ch |
f_brktest |
0.9.1 |
Check for serial break
Input: |
none |
Output: |
DF=0 - Break no asserted
DF=1 - Break asserted |
|
0FF5Ah |
f_isnum |
1.0 |
Check for numeric character (0-9)
Input: |
D - Character to check |
Output: |
DF=0 - Character is non-numeric
DF=1 - Character is numeric |
|
0FF72h |
f_isalpha |
1.0 |
Check for alpha character (A-Z,a-z)
Input: |
D - Character to check |
Output: |
DF=0 - Character is non-alpha
DF=1 - Character is alpha |
|
0FF75h |
f_ishex |
1.0 |
Check for hex character (0-9,A-F,a-f)
Input: |
D - Character to check |
Output: |
DF=0 - Character is non-hex
DF=1 - Character is hex |
|
0FF78h |
f_isalnum |
1.0 |
Check for alphanumeric character (0-9,A-Z,a-z)
Input: |
D - Character to check |
Output: |
DF=0 - Character is non-alphanumeric
DF=1 - Character is alphanumeric |
|
0FF7Eh |
f_isterm |
1.0 |
Check for terminating character (any characer that is not f_alnum)
Input: |
D - Character to check |
Output: |
DF=0 - Character is non-terminator
DF=1 - Character is terminator |
|
0FF6Fh |
f_findtkn |
1.0 |
Find token within a token table
Input: |
RF - Pointer to ascii symbol to search for
R7 - Pointer to symbol table |
Output: |
RD - Entry number
DF=0 - Entry was not found
DF=1 - Entry is valid |
|
0FF7Bh |
f_idnum |
1.0 |
Identify symbol type
Input: |
RF - Pointer to ascii symbol |
Output: |
D=0 - Symbol is a decimal number
D=1 - Symbol is a hex number
DF=0 - Symbol is a valid number
DF=1 - Symbol is an invalid number |
|
0FF81h |
f_getdev |
1.0.4 |
Get supported deivces
Input: |
None |
Output: |
RF - Supported device map
Bit |
Device |
0 |
IDE |
1 |
Floppy |
2 |
Bit-banged serial |
3 |
UART |
4 |
RTC |
5 |
NVR |
6 |
1861 Video |
7 |
9118 Video |
|
|
Function |
Name |
Version |
Notes |
0F800h |
f_bread |
1.0.4 |
Read charcter from bit-banged serial port
Input: |
RE.1 - Baud Constant |
Output: |
D - Read character |
|
0F803h |
f_btype |
1.0.4 |
Type charcter to bit-banged serial port
0Ch is translated to <ESC>[2J
Input: |
D - Character to type
RE.1 - Baud Constant |
Output: |
None |
|
0F80Ch |
f_btest |
1.0.4 |
Check for serial break on bit-banged serial port
Input: |
none |
Output: |
DF=0 - Break no asserted
DF=1 - Break asserted |
|
0F809h |
f_utype |
1.0.4 |
Type charcter to UART serial port
0Ch is translated to <ESC>[2J
Input: |
D - Character to type
RE.1 - Baud Constant |
Output: |
None |
|
0F80Ch |
f_uread |
1.0.4 |
Read charcter from UART serial port
Input: |
RE.1 - Baud Constant |
Output: |
D - Read character |
|
0F812h |
f_usetbd |
1.0.4 |
Set communication parameters on UART serial port
Input: |
D - Baud Constant
Bit(s) |
Value |
Meaning |
2-0 |
0 0 0 |
300 Baud |
|
0 0 1 |
1200 Baud |
|
0 1 0 |
2400 Baud |
|
0 1 1 |
4800 Baud |
|
1 0 0 |
9600 Baud |
|
1 0 1 |
19200 Baud |
|
1 1 0 |
38400 Baud |
|
1 1 1 |
76800 Baud |
3 |
|
Reserved |
5-4 |
0 0 |
5 bit words |
|
0 1 |
6 bit words |
|
1 0 |
7 bit words |
|
1 1 |
8 bit words |
6 |
0 |
No parity |
|
1 |
Parity enabled |
7 |
0 |
Odd parity |
|
1 |
Even parity |
|
Output: |
DF=1 - UART not installed
DF=0 - Success |
|
0F815h |
f_gettod |
1.0.4 |
Get Time Of Day
Input: |
RF - Buffer to receive TOD information |
Output: |
DF=0 - Success
DF=1 - Error
D=0 - No RTC
D=1 - Invalid Time
|
|
0F818h |
f_settod |
1.0.4 |
Set Time Of Day
Input: |
RF - Buffer to date/time data |
Output: |
DF=0 - Success
DF=1 - No RTC
|
|
0F81Bh |
f_rdnvr |
1.0.4 |
Read bytes from NVR
Input: |
RF.0 - Relative address to begin reading
RD - Destination for bytes
RC.0 - Count of bytes to read |
Output: |
DF=0 - Success
DF=1 - No NVR
|
|
0F81Eh |
f_wrnvr |
1.0.4 |
Write bytes to NVR
Input: |
RF.0 - Relative address to begin reading
RD - Source for bytes
RC.0 - Count of bytes to read |
Output: |
DF=0 - Success
DF=1 - No NVR
|
|
0F821h |
f_idesize |
1.0.4 |
Get size in MB of IDE hard disk
Input: |
RD.0=0 - Master drive
RD.0-1 - Slave drive |
Output: |
RF - Size of drive in MB, 0=no drive |
|
0F824h |
f_ideid |
1.0.4 |
Get IDE identification data
Input: |
RF - Pointer to buffer to receive data
RD.0=0 - Master drive
RD.0-1 - Slave drive |
Output: |
DF=0 - Success
DF=1 - Drive error |
|
0F827h |
f_dttoas |
1.0.4 |
Convert date to ASCII
Input: |
RD - Pointer to binary date
RF - Pointer to destination buffer |
Output: |
RD - Points to time portion of binary date |
|
0F82Ah |
f_tmtoas |
1.0.4 |
Convert time to ASCII
Input: |
RD - Pointer to binary time
RF - Pointer to destination buffer |
Output: |
None |
|
0F827h |
f_dttoas |
1.0.4 |
Convert date to ASCII
Input: |
RD - Pointer to binary date
RF - Pointer to destination buffer |
Output: |
RD - Points to time portion of binary date |
|
0F82Dh |
f_rtctest |
1.0.4 |
Test for existance of RTC
Input: |
None |
Output: |
DF=1 RTC is present
DF=0 RTC is not present
D - Size of NVR in RTC
|
|
0F830h |
f_astodt |
1.0.4 |
Convert ASCII date to binary
Input: |
RF - Pointer to ASCII date
RD - Pointer to destination buffer |
Output: |
None |
|
0F833h |
f_astotm |
1.0.4 |
Convert ASCII time to binary
Input: |
RF - Pointer to ASCII time
RD - Pointer to destination buffer |
Output: |
None |
|