The Titan One device is capable to understand many formats of protocols found in game controllers. In its core there is a protocol converter that accepts messages in any compatible input protocol, interprets them, and delivers the same message in one of the supported output protocol format, which can be the same or a different format than the input protocol. The input and output protocol format are defined by the game controller and console in use. The messages conversion can occur in both directions: from game controller to the console, as well as from console to the game controller. The crossover feature of Titan One device provides a simple, transparent and straightforward way to use game controllers on systems that are not compliant with the device's protocol.
Guide for Titan One firmware version 2.5x
The messages contains data representing the current state of the game controller, such as buttons, sensors, LEDs, etc. These states are represented by numerical values that are usually not compatible between different protocols. Normalization means adjusting values on different scales to a notionally common scale, thus allowing underlying characteristics of different data sets to be compared. After normalization process all values are then represented in its percentage form, meaning the state of a button can vary from 0%, when it is not being pressed, up to 100% when it is fully pressed. Some entries, such of analog stick, can range from -100% to 100%, where 0% is the resting position. The normalization aims to make the values more intuitive and easy to read, and to facilitate the conversion between different protocols of game controllers.
The Titan One virtual machine, called GVM, was design and build to run small programs, called G Bytecodes. The G Bytecodes are a sequence of binary data that represents a sequence of operations which the GVM should execute. This provides a programmable layer (the GVM), which defines a group of instructions designed especially to manipulate and/or change the normalized data. The data manipulation are defined by the G Bytecode that is being running in the GVM. The GVM is a stack machine, which means that most instructions take their operands from the stack memory, and place results back on the stack. Thus, the "add" instruction replaces the two top most elements of the stack memory with their sum. A few instructions take an immediate argument. The GVM is strongly typed, supporting only int type (signed 16 bits integer number) natively. More data types can be supported in the future.
The GPC Scripting Language is a programming language whose the main purpose is to create (or generate) programs that can be executed into GVM. A GPC script is the source code which is interpreted by the GPC Compiler and converted to a G Bytecode. The GVM is based on a bytecode-compiled system; as such any GPC Script must be translated, by GPC Compiler, to an intermediate representation, known as bytecode, before it can be executed. It is possible create a program using only the base instructions of the GVM, i.e. its opcodes, but this is not intuitive and far from be productive. The GPC is a high-level programming language to abstracts most of complexities of programming the bytecode directly.
The GPC compiler translates a complex high-level language (GPC Scripting Language) into a set instructions (G bytecode) that can be interpreted the GVM (virtual machine). The compiler uses a series of sequential stages to transform the input (GPC Script – the source code) into the bytecode. Each of these stages is decoupled from the rest of the process, expecting only a particular input form and sending its output to the next stage. As a result, the GPC compilation process is quite configurable.