Sphinx‎ > ‎Documentation‎ > ‎Reference‎ > ‎

sphinx.bin

Sphinx.bin installs the Sphinx drivers for the keyboard, TV, and SD card. It also acts as a simple command-line shell.
A command line can take any of the following forms:
  • filename arg1 arg2 ... argn
  • run filename arg1 arg2 ... argn
  • c filename arg1 arg2 ... argn
  • cl filename arg1 arg2 ... argn
The first form loads and executes the file named filename. If filename ends with ".bin" or ".eep", sphinx.bin will execute the file of that name (if it exists, of course). Otherwise, sphinx.bin will attempt to execute filename.bin and, if that fails, filename.eep.
 
The second form, the run command, also loads and runs filename. The difference between these two forms of command is that the first one leaves the Sphinx device driver cogs running, while the second stops all cogs (it effectively resets the Propeller). Use the first form to execute Sphinx-aware programs; use the run command to execute regular programs.
 
The c command compiles filename.spn and generates filename.sob (assuming no errors). This command runs lex.bin and codegen.bin, passing any command-line arguments to both programs (see below).
 
The cl command compiles and links filename.spn, generating filename.sob and filename.bin (again, assuming no errors). This command runs lex.bin, codegen.bin, and link.bin, passing its command-line arguments to all three programs.
 
Sphinx.bin should be stored in EEPROM so that the Propeller boots into Sphinx. Sphinx.bin should also exist on the SD card so that Sphinx-aware programs can, once they've finished their work, load and execute sphinx.bin. 

Command-line arguments

Sphinx.bin stores arguments as ASCII strings in a file named "args.d8a". A program launched from Sphinx can read the argument strings from that file. The first byte of the file is the number of arguments; it is followed by that number of strings, each null-terminated.
 
As noted earlier, the c and cl commands run several programs and each program receives the same arguments. This is because they do not modify args.d8a before executing the next program in the sequence. Each program pays attention to the arguments it understands and ignores any that it does not.