Monday, May 2, 2016

Retro Machine: TIS-100

If you have not yet gotten your hands on a TIS-100, I highly recommend it.  It is a bit of a vintage item, but in many ways I believe it was way ahead of its time (much like the Amiga, which came out a decade later).  The name TIS-100 also harkens back to my first computer, the TS-1000 (known as ZX81 in the UK) with its 2K RAM. In any case, TIS-100 is a fun little machine to use to solve coding problems.  I haven't seen many on eBay, but there is a decent emulator available from Zachtronics.

And here's a handy quick reference guide to get you started:

TIS-100 (Tessellated Intelligence System) Quick Reference Guide

Basic Execution Node Instruction Set

NOP              NO OPERATION
MOV <SRC> <DST>  MOVE <SRC> TO <DST>
SWP SWAP ACC AND BAK
SAV SAVE ACC TO BAK
ADD <SRC> ADD <SRC> TO ACC
SUB <SRC> SUBTRACT <SRC> FROM ACC
NEG NEGATE ACC (NEG 0 = 0)
JMP <LABEL> JUMP TO <LABEL>
JEZ <LABEL> JUMP TO <LABEL> IF ACC = 0
JNZ <LABEL> JUMP TO <LABEL> IF ACC != 0
JGZ <LABEL> JUMP TO <LABEL> IF ACC > 0
JLZ <LABEL> JUMP TO <LABEL> IF ACC < 0
JRO <SRC> JUMP TO RELATIVE OFFSET <SRC>
                 (A value of 0 causes an infinite loop. Both
                 positive and negative jumps are bounded by the
                 node's first and last instructions.)
HCF HALT & CATCH FIRE
                 (Undocumented; resets the TIS-100.)


<SRC>            Refers to ACC, UP, DOWN, LEFT, RIGHT, ANY, LAST,
                 NIL, literal (-999...999)
<DST> Refers to ACC, UP, DOWN, LEFT, RIGHT, ANY, LAST, 
                 NIL
<LABEL> Refers to location marked by alphanumeric 
                 label '<LABEL>:'


# Indicates a comment in source.

## Indicates program title to the debugger.
! Triggers a breakpoint when using the debugger.


Registers

All registers and ports can store an integer in the range of -999 to 999.

ACC      The primary storage and computational register in

                 each node.

BAK              BAK cannot be directly addressed (see SWP, SAV).


UP, DOWN, Each output port holds its value until read,

 LEFT, RIGHT thereby behaving like an additional register. 

ANY              Reads to or writes from the next available port 
                 (UP, RIGHT, DOWN, or LEFT) that is receiving or 
                 sending a value.  

LAST             Maps to the last port selected by ANY. LAST maps to
                 NIL if ANY has not been used.

NIL              As a source, NIL maps to 0. As a destination, it 

                 has no effect.


Nodes
Up to 12 nodes are available per program. 
There are two types of nodes available on the TIS-100, Basic Execution and Stack Memory. Note that a defective or damaged node is automatically disabled.

Basic Execution Node (T21)

- Each node can run a subprogram with up to 15 instructions.  Labels
  are not considered instructions.
- When the last instruction in a node is run, execution continues 
  with the first. Note that this wraparound does not cost any 
  cycles.

Stack Memory Node (T30)
- Can hold up to 15 values.
- Supports push/pop from any connected port.
- Pop from an empty stack node will stall.
- Push to a full stack node will stall.
- Note that push/pop stalls can be recovered if another port is used
  to remove/add a value from the stack.

Cycles

- Writes take 2 cycles. Other operations require only one cycle 
  assuming data is available.
- The first "step" in a run does not count as a cycle.
- A cycle is needed to write out the last output port.


List of Sample Programs Included*


TIS-100 SEGMENT MAP


00150 SELF-TEST DIAGNOSTIC

10981 SIGNAL AMPLIFIER
20176 DIFFERENTIAL CONVERTER
21340 SIGNAL COMPARATOR
22280 SIGNAL MULTIPLEXER
30647 SEQUENCE GENERATOR
31904 SEQUENCE COUNTER
32050 SIGNAL EDGE DETECTOR
33762 INTERRUPT HANDLER
40196 SIGNAL PATTERN DETECTOR
41427 SEQUENCE PEAK DETECTOR
42656 SEQUENCE REVERSER
43786 SIGNAL MULTIPLIER
50370 IMAGE TEST PATTERN 1
51781 IMAGE TEST PATTERN 2
52544 EXPOSURE MASK VIEWER
53897 HISTOGRAM VIEWER
60099 SIGNAL WINDOW FILTER
61212 SIGNAL DIVIDER
62711 SEQUENCE INDEXER
63534 SEQUENCE SORTER
70601 STORED IMAGE DECODER

TIS-NET DIRECTORY


NEXUS 00.526.6   SEQUENCE MERGER

NEXUS 01.874.8   INTERNER SERIES CALCULATOR
NEXUS 02.981.2   SEQUENCE RANGE LIMITER
NEXUS 03.176.9   SIGNAL ERROR CORRECTOR
NEXUS 04.340.5   SUBSEQUENCE EXTRACTOR
NEXUS 05.647.1   SIGNAL PRESCALER
NEXUS 06.786.0   SIGNAL AVERAGER
NEXUS 07.050.0   SUBMAXIMUM SELECTOR
NEXUS 08.633.9   DECIMAL DECOMPOSER
NEXUS 09.904.9   SEQUENCE MODE CALCULATOR
NEXUS 10.656.5   SEQUENCE NORMALIZER
NEXUS 11.711.2   IMAGE TEST PATTERN 3
NEXUS 12.534.4   IMAGE TEST PATTERN 4
NEXUS 13.370.9   SPATIAL PATH VIEWER
NEXUS 14.781.3   CHARACTER TERMINAL
NEXUS 15.897.9   BACK-REFERENCE REIFIER
NEXUS 16.212.8   DYNAMIC PATTERN DETECTOR
NEXUS 17.135.0   SEQUENCE GAP INTERPOLATOR
NEXUS 18.427.7   DECIMAL TO OCTAL CONVERTER
NEXUS 19.762.9   PROLONGED SEQUENCE SORTER
NEXUS 20.433.1   PRIME FACTOR CALCULATOR
NEXUS 21.601.6   SIGNAL EXPONENTIATOR
NEXUS 22.280.8   T20 NODE EMULATOR
NEXUS 23.727.9   T32 NODE EMULATOR
NEXUS 24.511.7   WAVE COLLAPSE SUPERVISOR

*My machine appears to have had memory damage, as most of the sample programs listed in the directories were either corrupted or erased. I've reprogramed some of them, with varying degrees of efficiency. I have included some for reference:


Back-Reference Reifer (661/9/42)
Sequence Gap Interpolator (790/5/58)



Prime Factor Calculator (10884/4/49)


Signal Exponentiator (4259/6/34)














Histogram Viewer (2173/9/59)
Exposure Mask Viewer (808/7/50)









Signal Multiplier (638/4/31)
Sequence Merger (475/6/34)

No comments:

Post a Comment