Machine Level Interface
We have grouped here a number of routines that you can use to access your machine at a low-level.
With this low-level machine interface you can read and write to memory.
You can also set up your own machine language routines and call them.
Some of the routines listed below are unsafe, in the sense that Phix cannot protect you if you use them incorrectly. You could crash your program or even your system.
Under Windows, the operating system will usually pop up a termination box giving a diagnostic message plus register information.
Under Linux you will typically get a segmentation violation.
Note there is no such thing as safe.e for Phix, that is Euphoria-only.
These machine-level-interface routines are important because they allow access to low-level features of the hardware and operating system.
For some applications this is essential.
Machine code routines can be written by hand, or taken from the disassembled output of a compiler for C or some other language.
There are many examples of inline assembly needed for the Phix runtime, perhaps the simplest of which is builtins\VM\pLen.e which implements the length() function (but only when the compiler does not inline it, as per the technicalia dropdown on that link).
Only int_to_bytes() and bytes_to_int() are supported by pwa/p2js.
With this low-level machine interface you can read and write to memory.
You can also set up your own machine language routines and call them.
Some of the routines listed below are unsafe, in the sense that Phix cannot protect you if you use them incorrectly. You could crash your program or even your system.
Under Windows, the operating system will usually pop up a termination box giving a diagnostic message plus register information.
Under Linux you will typically get a segmentation violation.
Note there is no such thing as safe.e for Phix, that is Euphoria-only.
These machine-level-interface routines are important because they allow access to low-level features of the hardware and operating system.
For some applications this is essential.
Machine code routines can be written by hand, or taken from the disassembled output of a compiler for C or some other language.
There are many examples of inline assembly needed for the Phix runtime, perhaps the simplest of which is builtins\VM\pLen.e which implements the length() function (but only when the compiler does not inline it, as per the technicalia dropdown on that link).
Only int_to_bytes() and bytes_to_int() are supported by pwa/p2js.
peek | - | read one or more bytes from memory |
poke | - | write one or more bytes to memory |
mem_copy | - | copy a block of memory |
mem_set | - | set a block of memory to a value |
call | - | call a machine language routine |
allocate | - | allocate a block of memory |
free | - | deallocate a block of memory |
allocate_string | - | allocate a string of characters with 0 terminator |
int_to_bytes | - | convert an integer to a sequence of bytes |
bytes_to_int | - | convert a sequence of bytes to an integer |
int_to_bits | - | convert an integer to a sequence of bits |
bits_to_int | - | convert a sequence of bits to an integer |
atom_to_floatNN | - | convert an atom to a sequence of 4/8/10 bytes in IEEE 32/64/80-bit floating-point format |
floatNN_to_atom | - | convert a sequence of 4/8/10 bytes in IEEE 32/64/80-bit floating-point format, to an atom |