The DUO Tiny is a very small computer utilizing the ATTiny84 8-bit microcontroller. The system interprets its own proprietary programming language to run all applications. This language is called DUO Tiny Programming Language, or DTPL.
Software is stored in EEPROM (AT24C1024B-PU25) and loaded through a serial interface. The computer is equipped with 4 buttons and a 102 by 64 pixel LCD display (EA DOGS102W-6).
A 3 pin port is available on the DUO Tiny board. This port may be used to inspect and modify the contents of EEPROM.
Commands conform to the following syntax:
[command name][arg][arg?][arg?][arg?].
Every command name contains exactly 2 letters.
Each argument may either be a 2 letter variable name or a 3 digit number (between 0 and 255). Variable names represent sequential base 26 memory locations from from AA to DU. The first character is the most significant. Arrays and text span many variables. The programmer must be careful that arrays and text do not overlap.
If a string of characters is enclosed in quotation marks, each character byte fills an argument value. Strings in memory should end with the value 255 to mark the point of termination.
Example program:
The program will clear the display, display a message, then loop indefinitely.
NW[dest][num]: Store value.
NS[dest][num]: Convert number to string.
AL[dest][num][num][num]...: Store array.
AR[dest][source][index]: Read value from array.
AW[dest][index][num]: Write value to array.
AD[dest][num][source][num]: Duplicate array with offset.
AE[source][source][num]: Load array to EEPROM.
SL[dest][source]: Get string length.
SD[dest][num][source]: Duplicate string with offset.
SS[dest][source][index][index]: Read substring.
SC[dest][source]: Concatenate strings.
SN[dest][source]: Convert string to number.
SE[source][source]: Load string to EEPROM.
MA[dest][num][num]: Add values.
MS[dest][num][num]: Subtract values.
MM[dest][num][num]: Multiply values.
MD[dest][num][num]: Divide values.
MR[dest][num][num]: Find remainder (modulus).
CE[dest][num][num]: Compare equal.
CG[dest][num][num]: Compare greater than.
BN[dest][num]: Bitwise NOT.
BO[dest][num][num]: Bitwise OR.
BA[dest][num][num]: Bitwise AND.
BI[dest][num]: Boolean invert.
FR[dest]: Store current command address.
FJ[source]: Go to command address.
FI[num]: If branch.
FW[num]: While loop.
FE: End branch or loop.
FB: Reset branch stack to bottom.
ER[dest][source]: Read EEPROM. Source points to a 2 byte EEPROM address.
EA[dest][source][num]: Read EEPROM into array.
ES[dest][source]: Read EEPROM string.
EW[source][num]: Write EEPROM.
KR[dest]: Read keys.
TR[dest]: Read time.
TC[num]: Calibrate time. The default factor is 100.
TA[dest][source][source]: Add time value.
TS[dest][source][source]: Subtract time.
TD[dest][source][num]: Divide time.
TT[dest][source][num]: Multiply time.
TM[dest][source][num]: Remainder of time.
DC: Clear display.
DP[num][num][num]: Draw pixels.
DA[num][num][source][num]: Draw array of pixels.
DT[num][num][source]: Draw text.
DB[num][num][source]: Draw big text.
PT[dest]: Prompt text.
PS[dest][source]: Prompt selection. Source points to a string of comma separated entries.
PK[dest]: Wait for any key to be pressed.
PN[dest]: Prompt number.