Ion Libraries
Ion has eight built-in library routines to make programs smaller and easier to write. The function names are included in ion.inc and you may call them or jump to them at any time in your program provided that your program does not alter the data directly following your program. If you need memory allocation, I recommend creating a temporary program and deleting it after your program is finished. You may also use _insertmem (and _deletemem). However, if you use _insertmem and _deletemem, the library vector table may be destroyed thereby making it impossible to call a library function in your program. It is possible to restore the vector table, but this would require some effort. See the Ion source code if you need to see how the vector table works.
Library Functions
ionVersion
ionVersion:
Returns version and compatibility numbers.
Input: nothing
Output: hl=Ion version number (e.g 256=1.0)
a=Ion compatibility number
d=Library compatibility number
e=number of library routines
Destroys: a de hl
ionRandom
ionRandom:
Generates an eight-bit random number.
Input: b=upper bound
Output: a=answer (between 0 and b-1)
b=0
Destroys af b
ionPutSprite
ionPutSprite:
Draw a sprite to the graph buffer (XOR).
Input: b=sprite height
a=x coordinate
l=y coordinate
ix->sprite
Output: Sprite is XORed to the graph buffer.
ix->next sprite
Destroys: af bc de hl ix
ionLargeSprite
ionLargeSprite:
Draw a variable width sprite to the graph buffer (XOR).
Input: ix->sprite
a=x coordinate
l=y coordinate
b=sprite height
c=sprite width (in bytes, so divide by 8)
Output: sprite is XORed to the graph buffer
ix->next sprite
Destroys: af bc de hl ix af'
ionGetPixel
ionGetPixel:
Get pixel offset and mask.
Input: a=x coordinate
e=y coordinate
Output: a=pixel mask
hl->offset (in the graph buffer)
Destroys: af bc de hl
ionFastCopy
ionFastCopy: Copy the graph buffer to the screen, FAST! Input: nothing Output: graph buffer is copied to the screen Destroys: af bc de hl
ionDetect
ionDetect:
Find a file in the VAT.
Input: hl=place to begin search
ix->detection string (zero terminated)
Output: de=place stopped + 1
hl->program data (after detection string)
z=0 for success, z=1 if failed
Destroys: af bc de hl
ionDecompress
ionDecompress:
Decompress data.
Input: hl->compressed data
de->place to load uncompressed data
b=length of compressed data
c=compression factor {1,3,15}
Output: data is decompressed
hl->next byte of compressed data
Destroys: af bc de hl
History
- Version 1.0 (libCompatibility 0)
- First Release
- Eight routines
- Version 1.1 (libCompatibility 0)
- The ionDetect routine should work properly on the TI-83 Plus now.
- I slowed down the ionFastCopy routine so that it would no cause the screen to become distored, which happened on some calculators.
- Version 1.2 (libCompatibility 0)
- No changes.
- Version 1.3 (libCompatibility 0)
- Improved ionDetect.
- Version 1.4 (libCompatibility 0)
- No changes.
- Version 1.5 (libCompatibility 0)
- TI-83 Plus: ionDetect can now detect programs in Flash ROM. Note that any data written to an external file stored in Flash will be lost next time the file is detected.
- Version 1.6 (libCompatibility 0)
- TI-83 Plus: Fixed a bug in ionDetect that caused some programs to crash (due to the v1.5 change).
- A few minor optimizations.