<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://smartbox.benryves.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=SmartBox_JobList</id>
	<title>SmartBox JobList - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://smartbox.benryves.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=SmartBox_JobList"/>
	<link rel="alternate" type="text/html" href="https://smartbox.benryves.com/mediawiki/index.php?title=SmartBox_JobList&amp;action=history"/>
	<updated>2026-11-14T23:50:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://smartbox.benryves.com/mediawiki/index.php?title=SmartBox_JobList&amp;diff=277&amp;oldid=prev</id>
		<title>Benryves: /* OS_CALLOS */ Converted plaintext documentation to markdown</title>
		<link rel="alternate" type="text/html" href="https://smartbox.benryves.com/mediawiki/index.php?title=SmartBox_JobList&amp;diff=277&amp;oldid=prev"/>
		<updated>2023-11-11T23:52:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;OS_CALLOS: &lt;/span&gt; Converted plaintext documentation to markdown&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;//smartbox.benryves.com/mediawiki/index.php?title=SmartBox_JobList&amp;amp;diff=277&amp;amp;oldid=257&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Benryves</name></author>
	</entry>
	<entry>
		<id>https://smartbox.benryves.com/mediawiki/index.php?title=SmartBox_JobList&amp;diff=257&amp;oldid=prev</id>
		<title>Benryves: Created page with &quot; &lt;nowiki&gt;OS 4 - 14.02.00   0		Blank 		Does nothing Send		Byte 0 = 0 Returns		Nothing  1		Version 		Read the operating system version number Send		Byte 0 = 1 Returns		Byte 0 = version number - low byte 		Byte 1 = version number - high byte Comments	Divide by 1000 to get the version number, eg. version 1.023 		would be returned as 1023  2		Reset 		Reset Smart Box Send		Byte 0 = 2 		Byte 1 = 254 or 255 Returns		Nothing Comments	Reset SmartBox from the host micro. Sending a...&quot;</title>
		<link rel="alternate" type="text/html" href="https://smartbox.benryves.com/mediawiki/index.php?title=SmartBox_JobList&amp;diff=257&amp;oldid=prev"/>
		<updated>2023-11-01T04:37:53Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; &amp;lt;nowiki&amp;gt;OS 4 - 14.02.00   0		Blank 		Does nothing Send		Byte 0 = 0 Returns		Nothing  1		Version 		Read the operating system version number Send		Byte 0 = 1 Returns		Byte 0 = version number - low byte 		Byte 1 = version number - high byte Comments	Divide by 1000 to get the version number, eg. version 1.023 		would be returned as 1023  2		Reset 		Reset Smart Box Send		Byte 0 = 2 		Byte 1 = 254 or 255 Returns		Nothing Comments	Reset SmartBox from the host micro. Sending a...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &amp;lt;nowiki&amp;gt;OS 4 - 14.02.00&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0		Blank&lt;br /&gt;
		Does nothing&lt;br /&gt;
Send		Byte 0 = 0&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
&lt;br /&gt;
1		Version&lt;br /&gt;
		Read the operating system version number&lt;br /&gt;
Send		Byte 0 = 1&lt;br /&gt;
Returns		Byte 0 = version number - low byte&lt;br /&gt;
		Byte 1 = version number - high byte&lt;br /&gt;
Comments	Divide by 1000 to get the version number, eg. version 1.023&lt;br /&gt;
		would be returned as 1023&lt;br /&gt;
&lt;br /&gt;
2		Reset&lt;br /&gt;
		Reset Smart Box&lt;br /&gt;
Send		Byte 0 = 2&lt;br /&gt;
		Byte 1 = 254 or 255&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	Reset SmartBox from the host micro. Sending a 254 performs&lt;br /&gt;
		a soft reset (same as pressing reset), sending 255 does a&lt;br /&gt;
		hard reset (clears battery back RAM). Before sending&lt;br /&gt;
		anymore codes create a small delay while SmartBox resets&lt;br /&gt;
		various parts of hardware&lt;br /&gt;
&lt;br /&gt;
3		NameCode&lt;br /&gt;
		To obtain the operating system call number where the name&lt;br /&gt;
		is known&lt;br /&gt;
Send		Byte 0 = 3&lt;br /&gt;
		Byte 1 - n = ASCII characters of OS call name&lt;br /&gt;
		Byte n+1 = 13&lt;br /&gt;
Returns		Byte 0 = Operating system call number&lt;br /&gt;
&lt;br /&gt;
4		CodeName&lt;br /&gt;
		To obtain the name associated with an operating system&lt;br /&gt;
		call&lt;br /&gt;
Send		Byte 0 = 4&lt;br /&gt;
		Byte 1 = OS call number&lt;br /&gt;
Returns		StringCR = OS call name&lt;br /&gt;
&lt;br /&gt;
5		MultipleSetup&lt;br /&gt;
		To set the values that will be returned by MultipleRead&lt;br /&gt;
Send		Byte 0 = 5&lt;br /&gt;
		Byte 1 = Analogue channel 1&lt;br /&gt;
		Byte 2 = Analogue channel 2&lt;br /&gt;
		Byte 3 = Analogue channel 3&lt;br /&gt;
		Byte 4 = Analogue channel 4&lt;br /&gt;
		Byte 5 = Digitial inputs&lt;br /&gt;
		Byte 6 = Digital outputs&lt;br /&gt;
		Byte 7 = Motor outputs&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	This sets up the readings which will be returned when the&lt;br /&gt;
		call MultipleRead is made. If a byte = 1 the corresponding&lt;br /&gt;
		port will be returned, 0 = value not returned&lt;br /&gt;
&lt;br /&gt;
6		MultipleRead&lt;br /&gt;
		Returns multiple readings as defined using MultipleSetup&lt;br /&gt;
Send		Byte 0 = 6&lt;br /&gt;
Returns		Bytes as defined by MultipleSetup&lt;br /&gt;
Comments	This call returns readings from a number of ports as&lt;br /&gt;
		defined by MultipleSetup&lt;br /&gt;
&lt;br /&gt;
7		MultipleServer&lt;br /&gt;
		Constantly returns multiple readings as defined using&lt;br /&gt;
		MultipleSetup&lt;br /&gt;
Send		Byte 0 = 7&lt;br /&gt;
Returns		Bytes as defined by MultipleSetup&lt;br /&gt;
Comments	This call is similar to MultipleRead but continues to&lt;br /&gt;
		return readings until SmartBox receives the byte 123&lt;br /&gt;
&lt;br /&gt;
8		IdentSystem&lt;br /&gt;
		Read System Information&lt;br /&gt;
Send		Nothing&lt;br /&gt;
Returns		Byte 0 = table length&lt;br /&gt;
		Word = VIA&lt;br /&gt;
		Word = ACIA&lt;br /&gt;
		Word = ADC&lt;br /&gt;
		Word = AUX.PORT&lt;br /&gt;
		Word = jobs.status&lt;br /&gt;
		Word = jobin.buf&lt;br /&gt;
		Word = jobout.buf&lt;br /&gt;
		Byte = Processor ident&lt;br /&gt;
		Word = OS version number&lt;br /&gt;
		Byte = Hardware version number&lt;br /&gt;
		String10 = Name, padded to 10 chars&lt;br /&gt;
		Byte = Number of inputs&lt;br /&gt;
		Byte = Number of outputs&lt;br /&gt;
		Byte = Number of motors&lt;br /&gt;
		Byte = Number of analogues&lt;br /&gt;
		Byte = BBR support&lt;br /&gt;
		Byte = Short support&lt;br /&gt;
		Byte = Printer support&lt;br /&gt;
		Byte = Keypad support&lt;br /&gt;
		Byte = LCD x dim/support&lt;br /&gt;
		Byte = LCD y dim&lt;br /&gt;
OS Release	3,4&lt;br /&gt;
&lt;br /&gt;
9		Credits&lt;br /&gt;
		Returns the copyright string&lt;br /&gt;
Send		Byte 0 = 9&lt;br /&gt;
Returns		StringNUL = Copyright string&lt;br /&gt;
Comments	This call returns the copyright message and OS details&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10		WriteMotors&lt;br /&gt;
		Writes a byte to the motor drivers&lt;br /&gt;
Send		Byte 0 = 10&lt;br /&gt;
		Byte 1 = value to write&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	Each of the four motor outputs has two bits encoded into&lt;br /&gt;
		this value, bits 0 and 1 are for motor a, bytes 2 and 3 are&lt;br /&gt;
		for motor b, bits 4 and 5 are for motor c and bits 6 and 7&lt;br /&gt;
		are for motor d, setting both bits to 0 will stop the&lt;br /&gt;
		motor, setting the low bit high and high bit low will make&lt;br /&gt;
		the motor go forward and setting the high bit high and the&lt;br /&gt;
		low bit low will make it go backwards. Using this call&lt;br /&gt;
		automatically stops all pulsing of motors&lt;br /&gt;
&lt;br /&gt;
11		ReadMotors&lt;br /&gt;
		Read the state of the motor drivers&lt;br /&gt;
Send		Byte 0 = 11&lt;br /&gt;
Returns		Byte 0 = value read from the motor drivers&lt;br /&gt;
Comments	The value returned is the same value as what would be sent&lt;br /&gt;
		to WriteMotors&lt;br /&gt;
&lt;br /&gt;
12		MotorForward&lt;br /&gt;
		Switch a motor on&lt;br /&gt;
Send		Byte 0 = 12&lt;br /&gt;
		Byte 1 = motor number (1 to 4)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	This makes the appropiate motor go forward. Using this call&lt;br /&gt;
		automatically cancels the pulsing for the appropiate motor&lt;br /&gt;
&lt;br /&gt;
13		MotorReverse&lt;br /&gt;
		Switch a motor on with reverse polarity&lt;br /&gt;
Send		Byte 0 = 13&lt;br /&gt;
		Byte 1 = motor number (1 to 4)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	This makes the appropiate motor go backward. Using this&lt;br /&gt;
		call automatically cancels the pulsing for the appropiate&lt;br /&gt;
		motor&lt;br /&gt;
&lt;br /&gt;
14		MotorHalt&lt;br /&gt;
		Switch a motor off&lt;br /&gt;
Send		Byte 0 = 14&lt;br /&gt;
		Byte 1 = motor number (1 to 4)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	This makes the appropiate motor stop. Using this call&lt;br /&gt;
		automatically cancels the pulsing for the appropiate motor&lt;br /&gt;
&lt;br /&gt;
15		MotorPower&lt;br /&gt;
		Pulse a motor outputs to vary speed&lt;br /&gt;
Send		Byte 0 = 15&lt;br /&gt;
		Byte 1 = motor number (1 to 4)&lt;br /&gt;
		Byte 2 = on time&lt;br /&gt;
		Byte 3 = off time&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	This pulses the appropiate motor at a rate determined by&lt;br /&gt;
		the on/off time (in centiseconds) specified, alternating&lt;br /&gt;
		the motor between the state at which it was last defined&lt;br /&gt;
		(Forward or Reverse) and Halt&lt;br /&gt;
&lt;br /&gt;
16		PatchMF&lt;br /&gt;
		Same as MotorForward&lt;br /&gt;
OS Release	3,4&lt;br /&gt;
&lt;br /&gt;
17		MotorVoltage&lt;br /&gt;
		Set voltage for motor outputs&lt;br /&gt;
Send		Byte 0 = voltage (0 to 3)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Notes		Voltage values are 0 (0v), 1 (6v), 2 (9v), 3 (12v).&lt;br /&gt;
		*Setting a voltage of 0 will also switch *outputs* to 0v*&lt;br /&gt;
Comments	This sets the actual voltage supplied to the motor outputs&lt;br /&gt;
OS Release	4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
20		WriteOutputs&lt;br /&gt;
		Write a 8 bit value to the digital output port&lt;br /&gt;
Send		Byte 0 = 20&lt;br /&gt;
		Byte 1 = byte to be written to the port&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	Using this call automatically cancels all pulsing on the&lt;br /&gt;
		output port&lt;br /&gt;
&lt;br /&gt;
21		OutputPower&lt;br /&gt;
		Vary the power by pulsing individual output lines&lt;br /&gt;
Send		Byte 0 = 21&lt;br /&gt;
		Byte 1 = bit number (0 to 7)&lt;br /&gt;
		Byte 2 = on time&lt;br /&gt;
		Byte 3 = off time&lt;br /&gt;
Comments	This pulses the appropiate output line at a rate determined&lt;br /&gt;
		by the on/off time (in centiseconds) specified, alternating&lt;br /&gt;
		the output line	between on and off&lt;br /&gt;
&lt;br /&gt;
22		GetSensors&lt;br /&gt;
		To read the type of sensors connected to the analogue&lt;br /&gt;
		sensors&lt;br /&gt;
Send		Byte 0 = 22&lt;br /&gt;
Returns		Byte 1 = type of sensor connected to sensor A&lt;br /&gt;
		Byte 2 = type of sensor connected to sensor B&lt;br /&gt;
		Byte 3 = type of sensor connected to sensor C&lt;br /&gt;
		Byte 4 = type of sensor connected to sensor D&lt;br /&gt;
Comments	This returns the sensor types connected to the analogue&lt;br /&gt;
		sensors	that were returned from the last time they were&lt;br /&gt;
		checked. A sensor type of 0 means no sensor&lt;br /&gt;
&lt;br /&gt;
23		CheckSensors&lt;br /&gt;
		To check the type of sensors connected to the analogue&lt;br /&gt;
		sensors&lt;br /&gt;
Send		Byte 0 = 23&lt;br /&gt;
Returns		Byte 1 = type of sensor connected to sensor A&lt;br /&gt;
		Byte 2 = type of sensor connected to sensor B&lt;br /&gt;
		Byte 3 = type of sensor connected to sensor C&lt;br /&gt;
		Byte 4 = type of sensor connected to sensor D&lt;br /&gt;
Comments	This does an immediate check of the sensor types connected&lt;br /&gt;
		to the analogue sensors. A sensor type of 0 means no&lt;br /&gt;
		sensor&lt;br /&gt;
&lt;br /&gt;
24		WriteSensorTable&lt;br /&gt;
		Write sensor table entry&lt;br /&gt;
Notes		* Not Implemented *&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
25		ReadSensorTable&lt;br /&gt;
		Read sensor table entry&lt;br /&gt;
Send		Byte 0 = entry to read&lt;br /&gt;
Returns		Byte 0 = sensor number&lt;br /&gt;
		Byte 1 = number of decimal points to display&lt;br /&gt;
		Byte 2 = max adc reading&lt;br /&gt;
		Byte 3 = reading offset (LSB)&lt;br /&gt;
		Byte 4 = reading offset (MSB)&lt;br /&gt;
		Byte 5 = multiplication factor (LSB)&lt;br /&gt;
		Byte 6 = multiplication factor (MSB)&lt;br /&gt;
		Byte 7 = division factor (LSB)&lt;br /&gt;
		Byte 8 = division factor (LSB)&lt;br /&gt;
		String = full sensor title&lt;br /&gt;
		String = abbreviated sensor label&lt;br /&gt;
		String = sensor label&lt;br /&gt;
		String = sensor units&lt;br /&gt;
Notes		If byte 0 is &amp;amp;FF then sensor is unknown&lt;br /&gt;
OS Release	3,4&lt;br /&gt;
&lt;br /&gt;
28		SetBitHigh&lt;br /&gt;
		Set individual output line(s) high&lt;br /&gt;
Send		Byte 0 = 28&lt;br /&gt;
		Byte 1 = byte determining which lines will be set&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	A bit set in the byte sent will set the corresponding&lt;br /&gt;
		output line high&lt;br /&gt;
&lt;br /&gt;
29		SetBitLow&lt;br /&gt;
		Set individual output line(s) low&lt;br /&gt;
Send		Byte 0 = 29&lt;br /&gt;
		Byte 1 = byte determining which lines will be unset&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	A bit set in the byte sent will set the corresponding&lt;br /&gt;
		output line low&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
30		ReadADCReg&lt;br /&gt;
		To read a ADC register&lt;br /&gt;
Send		Byte 0 = 30&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
Returns		Byte 0 = value of register&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
31		WriteADCReg&lt;br /&gt;
		To write to a ADC register&lt;br /&gt;
Send		Byte 0 = 31&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
		Byte 2 = value to write&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
32		ReadACIAReg&lt;br /&gt;
		To read a ACIA register&lt;br /&gt;
Send		Byte 0 = 32&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
Returns		Byte 0 = value of register&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
33		WriteACIAReg&lt;br /&gt;
		To write to a ACIA register&lt;br /&gt;
Send		Byte 0 = 33&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
		Byte 2 = value to write&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
34		ReadVIAReg&lt;br /&gt;
		To read a VIA register&lt;br /&gt;
Send		Byte 0 = 34&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
Returns		Byte 0 = value of register&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
35		WriteVIAReg&lt;br /&gt;
		To write to a VIA register&lt;br /&gt;
Send		Byte 0 = 35&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
		Byte 2 = value to write&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
36		SetVIAHigh&lt;br /&gt;
		To set bits in a VIA register&lt;br /&gt;
Send		Byte 0 = 36&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
		Byte 2 = mask&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
37		SetVIALow&lt;br /&gt;
		To unset bits in a VIA register&lt;br /&gt;
Send		Byte 0 = 37&lt;br /&gt;
		Byte 1 = register number (0 to 15)&lt;br /&gt;
		Byte 2 = mask&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
40		ReadADC&lt;br /&gt;
		Take a reading from a specific ADC channel&lt;br /&gt;
Send		Byte 0 = 40&lt;br /&gt;
		Byte 1 = channel number (1 to 4)&lt;br /&gt;
Returns		For an 8 bit reading:&lt;br /&gt;
			Byte 0 = reading from ADC&lt;br /&gt;
		For a 16 bit reading:&lt;br /&gt;
			Byte 0 = low byte of reading&lt;br /&gt;
			Byte 1 = high byte of reading&lt;br /&gt;
Comments	The value returned will be at the resolution specified by&lt;br /&gt;
		OS calls HighResADC and LowResADC&lt;br /&gt;
&lt;br /&gt;
41		ReadADCs&lt;br /&gt;
		Read all the ADC channels&lt;br /&gt;
Send		Byte 0 = 41&lt;br /&gt;
Returns		For 8 bit readings:&lt;br /&gt;
			Byte 0 = reading from channel 1&lt;br /&gt;
			Byte 1 = reading from channel 2&lt;br /&gt;
			Byte 2 = reading from channel 3&lt;br /&gt;
			Byte 3 = reading from channel 4&lt;br /&gt;
		For 16 bit readings&lt;br /&gt;
			Byte 0 = reading from channel 1 (low byte)&lt;br /&gt;
			Byte 1 = reading from channel 1 (high byte)&lt;br /&gt;
			Byte 2 = reading from channel 2 (low byte)&lt;br /&gt;
			Byte 3 = reading from channel 2 (high byte)&lt;br /&gt;
			Byte 4 = reading from channel 3 (low byte)&lt;br /&gt;
			Byte 5 = reading from channel 3 (high byte)&lt;br /&gt;
			Byte 6 = reading from channel 4 (low byte)&lt;br /&gt;
			Byte 7 = reading from channel 4 (high byte)&lt;br /&gt;
&lt;br /&gt;
42		ForcedADCRead&lt;br /&gt;
		Force the A to D convertor to make a conversion and return&lt;br /&gt;
		the result&lt;br /&gt;
Send		Byte 0 = 42&lt;br /&gt;
		Byte 1 = channel number (1 to 4)&lt;br /&gt;
Returns		For an 8 bit reading:&lt;br /&gt;
			Byte 0 = reading from ADC&lt;br /&gt;
		For a 16 bit reading&lt;br /&gt;
			Byte 0 = reading from ADC (low byte)&lt;br /&gt;
			Byte 1 = reading from ADC (high byte)&lt;br /&gt;
&lt;br /&gt;
44		HighResADC&lt;br /&gt;
		Sets the resolution of ADC readings to 16 bit&lt;br /&gt;
		Subsequent readings will return 2 byte values&lt;br /&gt;
Send		Byte 0 = 44&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	For OS 2 readings returned will be only accurate to&lt;br /&gt;
		10 bits. OS 3,4 provides support for 16 bit readings,&lt;br /&gt;
		but only to an accuracy of 8 bits.&lt;br /&gt;
&lt;br /&gt;
45		LowResADC&lt;br /&gt;
		Sets the resolution of ADC readings to 8 bit&lt;br /&gt;
		Subsequent readings will return single byte values&lt;br /&gt;
Send		Byte 0 = 45&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
&lt;br /&gt;
47		ReadResolution&lt;br /&gt;
		Reads the current ADC resolution setting&lt;br /&gt;
Send		Byte 0 = 47&lt;br /&gt;
Returns		Byte 0 = resolution setting, where:&lt;br /&gt;
			0 = 8 bit&lt;br /&gt;
			1 = 16 bit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
50		DownloadData (OS 2), DownloadData740 (OS 3),&lt;br /&gt;
		DownloadData375 (OS 4)&lt;br /&gt;
		Download data into the SmartBox's memory&lt;br /&gt;
Send		Byte 0 = 50&lt;br /&gt;
		Byte 1 = start address to write (low byte)&lt;br /&gt;
		Byte 2 = start address to write (high byte)&lt;br /&gt;
		Byte 3 = length of data (low byte)&lt;br /&gt;
		Byte 4 = length of data (high byte)&lt;br /&gt;
		Bytes 5 - n = data&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
&lt;br /&gt;
52		UploadData (OS 2), UploadData740 (OS 3),&lt;br /&gt;
		UploadData (OS 4)&lt;br /&gt;
		Upload data from the SmartBox's memory&lt;br /&gt;
Send		Byte 0 = 52&lt;br /&gt;
		Byte 1 = start address to read (low byte)&lt;br /&gt;
		Byte 2 = start address to read (high byte)&lt;br /&gt;
		Byte 3 = length of data (low byte)&lt;br /&gt;
		Byte 4 = length of data (high byte)&lt;br /&gt;
Returns		Byte 0 - n = data&lt;br /&gt;
&lt;br /&gt;
54		ExecuteCode (OS 2), ExecuteCode740 (OS 3),&lt;br /&gt;
		ExecuteCode375 (OS 4)&lt;br /&gt;
		Execute machine code held at a specified address&lt;br /&gt;
Send		Byte 0 = 54&lt;br /&gt;
		Byte 1 = execution address (low byte)&lt;br /&gt;
		Byte 2 = execution address (high byte)&lt;br /&gt;
		Byte 3 = contents of the A register on entry to the code&lt;br /&gt;
		Byte 4 = contents of the X register on entry to the code&lt;br /&gt;
		Byte 5 = contents of the Y register on entry to the code&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
&lt;br /&gt;
55		StoreByte (OS 2), StoreByte740 (OS 3),&lt;br /&gt;
		StoreByte375 (OS 4)&lt;br /&gt;
		Store a byte in the SmartBox's RAM&lt;br /&gt;
Send		Byte 0 = 55&lt;br /&gt;
		Byte 1 = address to write (low byte)&lt;br /&gt;
		Byte 2 = address to write (high byte)&lt;br /&gt;
		Byte 3 = byte to be stored&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
&lt;br /&gt;
56		ReadByte (OS 2), ReadByte740 (OS 3),&lt;br /&gt;
		ReadByte (OS 4)&lt;br /&gt;
		Read a byte from the SmartBox's RAM&lt;br /&gt;
Send		Byte 0 = 56&lt;br /&gt;
		Byte 1 = address to read (low byte)&lt;br /&gt;
		Byte 2 = address to read (high byte)&lt;br /&gt;
Returns		Byte 0 = byte read&lt;br /&gt;
&lt;br /&gt;
57		ReadRAMSize&lt;br /&gt;
		Read the amount of RAM with which the SmartBox is fitted&lt;br /&gt;
Send		Byte 0 = 57&lt;br /&gt;
Returns		Byte 0 = RAM size (low byte)&lt;br /&gt;
		Byte 1 = RAM size (high byte)&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
59		ExtendCall&lt;br /&gt;
		Call the extended call vector&lt;br /&gt;
Send		Byte 0 = 59&lt;br /&gt;
Returns		Byte 0 = extension value&lt;br /&gt;
Comments	This call provides the user with the possibility of adding&lt;br /&gt;
		extra calls to SmartBox easily&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
60		SetClock&lt;br /&gt;
		Set the internal clock in SmartBox. This clock only runs&lt;br /&gt;
		while the power in maintained&lt;br /&gt;
Send		Byte 0 = 60&lt;br /&gt;
		Byte 1 = 1/10 seconds (0 to 9)&lt;br /&gt;
		Byte 2 = seconds (0 to 59)&lt;br /&gt;
		Byte 3 = minutes (0 to 59)&lt;br /&gt;
		Byte 4 = hours (0 to 23)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Comments	The day value is set to 0&lt;br /&gt;
&lt;br /&gt;
61		ReadClock&lt;br /&gt;
		Read the internal clock. On reset the clock will be set to&lt;br /&gt;
		zero&lt;br /&gt;
Send		Byte 0 = 61&lt;br /&gt;
Returns		Byte 0 = 1/10 seconds&lt;br /&gt;
		Byte 1 = seconds&lt;br /&gt;
		Byte 2 = minutes&lt;br /&gt;
		Byte 3 = hours&lt;br /&gt;
		Byte 4 = days&lt;br /&gt;
&lt;br /&gt;
62		ReadTopmem&lt;br /&gt;
		Read the current value of TOPMEM&lt;br /&gt;
Send		Byte 0 = 62&lt;br /&gt;
Returns		Byte 0 = value of TOPMEM (low byte)&lt;br /&gt;
		Byte 1 = value of TOPMEM (high byte)&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
63		WriteTopmem&lt;br /&gt;
		Write the value of TOPMEM&lt;br /&gt;
Send		Byte 0 = 63&lt;br /&gt;
		Byte 1 = value of TOPMEM (low byte)&lt;br /&gt;
		Byte 2 = value of TOPMEM (high byte)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
64		ReadLomem&lt;br /&gt;
		Read the current value of LOMEM&lt;br /&gt;
Send		Byte 0 = 64&lt;br /&gt;
Returns		Byte 0 = value of LOMEM (low byte)&lt;br /&gt;
		Byte 1 = value of LOMEM (high byte)&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
65		WriteLomem&lt;br /&gt;
		Write the value of LOMEM&lt;br /&gt;
Send		Byte 0 = 65&lt;br /&gt;
		Byte 1 = value of LOMEM (low byte)&lt;br /&gt;
		Byte 2 = value of LOMEM (high byte)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
66		ReadHimem&lt;br /&gt;
		Read the current value of HIMEM&lt;br /&gt;
Send		Byte 0 = 66&lt;br /&gt;
Returns		Byte 0 = value of HIMEM (low byte)&lt;br /&gt;
		Byte 1 = value of HIMEM (high byte)&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
67		WriteHimem&lt;br /&gt;
		Write the value of HIMEM&lt;br /&gt;
Send		Byte 0 = 67&lt;br /&gt;
		Byte 1 = value of HIMEM (low byte)&lt;br /&gt;
		Byte 2 = value of HIMEM (high byte)&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	2,3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
70		WritePrinter&lt;br /&gt;
		Write printer port (no handshaking)&lt;br /&gt;
Send		Byte 0 = byte to write&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
71		ReadPrinter&lt;br /&gt;
		Read printer port&lt;br /&gt;
Send		Nothing&lt;br /&gt;
Returns		Byte 0 = printer port value&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
72		PrintChar&lt;br /&gt;
		Send a character to printer port&lt;br /&gt;
Send		Byte 0 = char&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
73		PrintStreamZ&lt;br /&gt;
		Send a stream of characters to the printer port&lt;br /&gt;
Send		StringNUL = string to print&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
74		PrintStream&lt;br /&gt;
		Send a stream of characters to the printer port&lt;br /&gt;
Send		Byte 0 = number of bytes to send (LSB)&lt;br /&gt;
		Byte 1 = number of bytes to send (MSB)&lt;br /&gt;
		Bytes = stream of characters to print&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
75		PrintServer&lt;br /&gt;
		Echo all characters to printer port&lt;br /&gt;
Notes		No exit		&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
80		WriteRTCReg&lt;br /&gt;
		Write a RTC register&lt;br /&gt;
Send		Byte 0 = register&lt;br /&gt;
		Byte 1 = value&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
81		ReadRTCReg&lt;br /&gt;
		Read a RTC register&lt;br /&gt;
Send		Byte 0 = register&lt;br /&gt;
Returns		Byte 0 = value&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
82		WriteRTC&lt;br /&gt;
		Writes RTC as a string&lt;br /&gt;
Send		StringCR = RTC time&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Notes		* Not currently implemented *&lt;br /&gt;
		Time is represented as DDD,dd mmm yyyy.hh:mm:ss&lt;br /&gt;
		DDD is 3 character day (Mon, Tue, Wed, Thu, Fri, Sat, Sun)&lt;br /&gt;
		dd is day of month&lt;br /&gt;
		mmm is month&lt;br /&gt;
		yyyy is year&lt;br /&gt;
		hh is hours&lt;br /&gt;
		mm is minutes&lt;br /&gt;
		ss is seconds&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
83		ReadRTC&lt;br /&gt;
		Reads RTC as a string&lt;br /&gt;
Send		Nothing&lt;br /&gt;
Returns		StringCR = RTC time&lt;br /&gt;
Notes		Time is represented as DDD,dd mmm yyyy.hh:mm:ss&lt;br /&gt;
		DDD is 3 character day (Mon, Tue, Wed, Thu, Fri, Sat, Sun)&lt;br /&gt;
		dd is day of month&lt;br /&gt;
		mmm is month&lt;br /&gt;
		yyyy is year&lt;br /&gt;
		hh is hours&lt;br /&gt;
		mm is minutes&lt;br /&gt;
		ss is seconds&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
84		WriteRTCbcd&lt;br /&gt;
		Writes all 7 RTC time registers&lt;br /&gt;
Send		Byte 0 = seconds&lt;br /&gt;
		Byte 1 = minutes&lt;br /&gt;
		Byte 2 = hours&lt;br /&gt;
		Byte 3 = date&lt;br /&gt;
		Byte 4 = month&lt;br /&gt;
		Byte 5 = day&lt;br /&gt;
		Byte 6 = year&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
Notes		All values are represented in BCD&lt;br /&gt;
		Years below 80 (&amp;amp;80 in BCD) signify 20xx&lt;br /&gt;
		Day starts (0) from Monday&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
85		ReadRTCbcd&lt;br /&gt;
		Reads all 7 RTC time registers&lt;br /&gt;
Send		Nothing&lt;br /&gt;
Returns		Byte 0 = seconds&lt;br /&gt;
		Byte 1 = minutes&lt;br /&gt;
		Byte 2 = hours&lt;br /&gt;
		Byte 3 = date&lt;br /&gt;
		Byte 4 = month&lt;br /&gt;
		Byte 5 = day&lt;br /&gt;
		Byte 6 = year&lt;br /&gt;
Notes		All values are represented in BCD&lt;br /&gt;
		Years below 80 (&amp;amp;80 in BCD) signify 20xx&lt;br /&gt;
		Day starts (0) from Monday&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
90		ReadInputs&lt;br /&gt;
		Reads a byte from the digital inputs port&lt;br /&gt;
Send		Byte 0 = 90&lt;br /&gt;
Returns		Byte 0 = byte read from the digital inputs port&lt;br /&gt;
&lt;br /&gt;
91		ReadBit&lt;br /&gt;
		Reads a bit from the digital inputs port&lt;br /&gt;
Send		Byte 0 = 91&lt;br /&gt;
		Byte 1 = byte to read (0 to 7)&lt;br /&gt;
Returns		Byte 0 = bit read from the digital inputs port&lt;br /&gt;
Comments	Reads an individual sensor from the digital inputs port&lt;br /&gt;
&lt;br /&gt;
92		ReadOutputs&lt;br /&gt;
		Reads a byte from the digital outputs port&lt;br /&gt;
Send		Byte 0 = 92&lt;br /&gt;
Returns		Byte 0 = byte read from the digital outputs port&lt;br /&gt;
Notes		This reads the soft copy of the last written byte&lt;br /&gt;
OS Release	3,4&lt;br /&gt;
&lt;br /&gt;
93		CountReset&lt;br /&gt;
		Resets input port counter(s)&lt;br /&gt;
Send		Byte 0 = 93&lt;br /&gt;
		Byte 1 = bit masks for counters to reset&lt;br /&gt;
OS Release	4&lt;br /&gt;
&lt;br /&gt;
94		CountRead&lt;br /&gt;
		Reads input port counter(s)&lt;br /&gt;
Send		Byte 0 = 94&lt;br /&gt;
		Byte 1 = counter to read (0 to 7) or 255 for all&lt;br /&gt;
Returns		Byte 0 = value of counter (LSB)&lt;br /&gt;
		Byte 1 = value of counter (MSB)&lt;br /&gt;
		Byte n = value of counter (LSB)&lt;br /&gt;
		Byte n+1 = value of counter (MSB)&lt;br /&gt;
Notes		Counter values return 65535 (-1) from box reset, or max count&lt;br /&gt;
OS Release	4&lt;br /&gt;
&lt;br /&gt;
98		InsightDriver&lt;br /&gt;
		Starts the internal Insight software&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
99		DataApp&lt;br /&gt;
		Starts the internal DataApp software&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
100		WriteLCDReg&lt;br /&gt;
		Write LCD Register&lt;br /&gt;
Send		Byte 0 = register number&lt;br /&gt;
		Byte 1 = register value&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
101		ReadLCDReg&lt;br /&gt;
		Read LCD Register&lt;br /&gt;
Send		Byte 0 = register number&lt;br /&gt;
Returns		Byte 0 = register value&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
102		LCDChar&lt;br /&gt;
		Send a character to the LCD display driver&lt;br /&gt;
Send		Byte 0 = char&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
103		LCDStreamZ&lt;br /&gt;
		Send a stream of characters to the LCD display driver&lt;br /&gt;
Send		StringNUL = string to display&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
104		LCDStream&lt;br /&gt;
		Send a stream of characters to the LCD display driver&lt;br /&gt;
Send		Byte 0 = number of bytes to send (LSB)&lt;br /&gt;
		Byte 1 = number of bytes to send (MSB)&lt;br /&gt;
		Bytes = stream of characters to display&lt;br /&gt;
Returns		Nothing&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
110		ReadKeypad&lt;br /&gt;
		Reads the raw state of the keypad&lt;br /&gt;
Send		Nothing&lt;br /&gt;
Returns		Byte 0 = current keypad reading bitstate&lt;br /&gt;
OS Release	3&lt;br /&gt;
&lt;br /&gt;
111		ReadKeypadPress&lt;br /&gt;
		Reads the processed state of the keypad&lt;br /&gt;
Send		Nothing&lt;br /&gt;
Returns		Byte 0 = current keypad press bitstate&lt;br /&gt;
OS Release	3&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benryves</name></author>
	</entry>
</feed>