SM010 Programmer’s Reference

SSSR Labs SM010 Matrixarchate
Firmware v. 1.2 and later
Programmer's reference

I2C control specification (Teletype mode)
-------------------------

I2C Addresses
0xB8 (Unit 1, Default)
0xB9 (Unit 2)
0xBA (Unit 3)

Bit fields legend
x - ignored bits
ccc = column address (left to right)
rrrr = row address (top to bottom)
t = Current program if 1
ppppppp - program number (63 = setup)
llllllll - low data byte
hhhhhhhh - high data byte

Bit order for row is from left to right (Low 0..7)
-------------------------------------------
| BITS    | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| COLUMNS | H | G | F | E | D | C | B | A |
-------------------------------------------
 
Bit order for column is from top to bottom (Low 0..7, High 0..7)
-------------------------------------------------------------------------------------------
| BYTES   |                   1                   |                   2                   |
| BITS    |  7 |  6 |  5 |  4 |  3 |  2 |  1 |  0 |  7 |  6 |  5 |  4 |  3 |  2 |  1 |  0 |
| ROWS    |  8 |  7 |  6 |  5 |  4 |  3 |  2 |  1 | 16 | 15 | 14 | 13 | 12 | 11 | 10 |  9 |
-------------------------------------------------------------------------------------------

I²C command codes
-----------------
Perform Sequencer Step:
  Code
  11111000 (0xF8)
  
  Example:
  00-->B8: F8
  (Go to the next step in the sequence)


Sequencer Reset:
  Code
  11111101 (0xFD)
  
  Example:
  00-->B8: FD
  (Go to the first step in the sequence)


Program Change:
  Code     Program
  11000000 XXnnnnnn (0xC0 ..)
  
  Example:
  00-->B8: C0 0A
  (Switch to program 11. Visually numbered 01-60 or 1A-8D, logically 00-59)


Switch Off:
  Code     Address  program 
  10000000 0rrrrccc tppppppp (0x80 .. ..)
  
  Example:
  00-->B8: 80 14 FF
  (Switch off crosspoint "03E" in current program. Visually numbered 01A-16H, logically 0-127)


Switch On:
  Code     Address  program 
  10010000 0rrrrccc tppppppp (0x90 .. ..)
  
  Example:
  00-->B8: 90 08 FF
  (Switch on crosspoint "02A" in current program. Visually numbered 01A-16H, logically 0-127)
  

Update column:
  Code     Address  program  data_low data_high
  10110000 0xxxxccc tppppppp llllllll hhhhhhhh (B0 .. .. .. ..)
  
  Example:
  00-->B8: B0 03 00 0F C0
  (Update program 01, column D, turn switches 1, 2, 3, 4, 9, 11 ON, all others OFF.
  

Update row:
  Code     Address  program  data_low data_high
  10110000 1xxxrrrr tppppppp llllllll xxxxxxxx (B0 .. .. .. ..)
  
  Example:
  00-->B8: B0 83 10 5C 00
  (Update program 17, row 4, turn switches B, D, E, G ON, all others OFF.


Request memory location:
  Code     Addr_L   Addr_H
  10100000 LLLLLLLL HHHHHHHH (A0 .. ..)
  (returns 1-byte data)
  
  Example:
  00-->B8: A0 FF 03
  00<--B8: 02 (Request settings byte (0x03ff), return value 0x02)


Update memory location:
 Code Addr_L Addr_H Data 11010000 LLLLLLLL HHHHHHHH DDDDDDDD (D0 .. .. ..)

 Example: 00-->B8: A0 FE 03 08
 (Set brightness (0x03FE) to medium (0x08)


Request column
  Code     Address  program
  11110101 0xxxxccc tppppppp (F5 .. ..)
  (returns 2-byte data)
  
  Example:
  00-->B8: F5 00 FF
  00<--B8: 40 02
  (Request column A of the current program with only Switches 07A and 10A enabled)


Request row
  Code Address program 11110101 1xxxrrrr tppppppp (F5 .. ..)
  (returns 2-byte data)

  Example:
  00-->B8: F5 8F FF
  00<--B8: FF 00
  (Request row 16 of the current program with All switches A-H enabled)


Memory allocation
----------------
0x000: Patch memory block, Program 01 (16 bytes)
0x010: Patch memory block, Program 02 (16 bytes)
...
0x3B0: Patch memory block, Program 60 (16 bytes)
0x3C0: Reserved (48 bytes)
...
0x3F0: Sequencer memory block (8 bytes)
...
0x3F8: Reserved
0x3F9: Reserved
0x3FA: Reserved
0x3FB: Reserved
0x3FC: Reserved
0x3FD: Reserved
0x3FE: Brightness Byte
0x3FF: Settings Byte
------ END OF EEPROM ------


Logical switch addresses (as shown on the matrix)
-------------------------------------------------
| A01 | B01 | C01 | D01 | E01 | F01 | G01 | H01 |
-------------------------------------------------
| A02 | B02 | C02 | D02 | E02 | F02 | G02 | H02 |
-------------------------------------------------
| A03 | B03 | C03 | D03 | E03 | F03 | G03 | H03 |
-------------------------------------------------
| A04 | B04 | C04 | D04 | E04 | F04 | G04 | H04 |
-------------------------------------------------
| A05 | B05 | C05 | D05 | E05 | F05 | G05 | H05 |
-------------------------------------------------
| A06 | B06 | C06 | D06 | E06 | F06 | G06 | H06 |
-------------------------------------------------
| A07 | B07 | C07 | D07 | E07 | F07 | G07 | H07 |
-------------------------------------------------
| A08 | B08 | C08 | D08 | E08 | F08 | G08 | H08 |
=================================================
| A09 | B09 | C09 | D09 | E09 | F09 | G09 | H09 |
-------------------------------------------------
| A10 | B10 | C10 | D10 | E10 | F10 | G10 | H10 |
-------------------------------------------------
| A11 | B11 | C11 | D11 | E11 | F11 | G11 | H11 |
-------------------------------------------------
| A12 | B12 | C12 | D12 | E12 | F12 | G12 | H12 |
-------------------------------------------------
| A13 | B13 | C13 | D13 | E13 | F13 | G13 | H13 |
-------------------------------------------------
| A14 | B14 | C14 | D14 | E14 | F14 | G14 | H14 |
-------------------------------------------------
| A15 | B15 | C15 | D15 | E15 | F15 | G15 | H15 |
-------------------------------------------------
| A16 | B16 | C16 | D16 | E16 | F16 | G16 | H16 |
-------------------------------------------------


Switch addresses allocation in a patch memory block
--------------------------------------------------------
| OFFS.|                    Bits:                      |
--------------------------------------------------------
|      |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
--------------------------------------------------------
| 0x00 | A08 | A07 | A06 | A05 | A04 | A03 | A02 | A01 |
--------------------------------------------------------
| 0x01 | B08 | B07 | B06 | B05 | B04 | B03 | B02 | B01 |
--------------------------------------------------------
| 0x02 | C08 | C07 | C06 | C05 | C04 | C03 | C02 | C01 |
--------------------------------------------------------
| 0x03 | D08 | D07 | D06 | D05 | D04 | D03 | D02 | D01 |
--------------------------------------------------------
| 0x04 | E08 | E07 | E06 | E05 | E04 | E03 | E02 | E01 |
--------------------------------------------------------
| 0x05 | F08 | F07 | F06 | F05 | F04 | F03 | F02 | F01 |
--------------------------------------------------------
| 0x06 | G08 | G07 | G06 | G05 | G04 | G03 | G02 | G01 |
--------------------------------------------------------
| 0x07 | H08 | H07 | H06 | H05 | H04 | H03 | H02 | H01 |
========================================================
| 0x08 | A16 | A15 | A14 | A13 | A12 | A11 | A10 | A09 |
--------------------------------------------------------
| 0x09 | B16 | B15 | B14 | B13 | B12 | B11 | B10 | B09 |
--------------------------------------------------------
| 0x0A | C16 | C15 | C14 | C13 | C12 | C11 | C10 | C09 |
--------------------------------------------------------
| 0x0B | D16 | D15 | D14 | D13 | D12 | D11 | D10 | D09 |
--------------------------------------------------------
| 0x0C | E16 | E15 | E14 | E13 | E12 | E11 | E10 | E09 |
--------------------------------------------------------
| 0x0D | F16 | F15 | F14 | F13 | F12 | F11 | F10 | F09 |
--------------------------------------------------------
| 0x0E | G16 | G15 | G14 | G13 | G12 | G11 | G10 | G09 |
--------------------------------------------------------
| 0x0F | H16 | H15 | H14 | H13 | H12 | H11 | H10 | H09 |
--------------------------------------------------------


Visual sequencer steps allocation
-----------------------------------------
| 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 |
-----------------------------------------
| 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
-----------------------------------------
| 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
-----------------------------------------
| 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
-----------------------------------------
| 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
-----------------------------------------
| 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
-----------------------------------------
| 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
-----------------------------------------
| 57 | 58 | 59 | 60 | -- | -- | -- | -- |
-----------------------------------------


Sequencer steps allocation in the settings memory block
---------------------------------------------------------
| ADDR  |                    Bits:                      |
---------------------------------------------------------
|       |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
---------------------------------------------------------
| 0X3F0 | 57  | 49  | 41  | 33  | 25  | 17  | 09  | 01  |
| 0x3F1 | 58  | 50  | 42  | 34  | 26  | 18  | 10  | 02  |
| 0x3F2 | 59  | 51  | 43  | 35  | 27  | 19  | 11  | 03  |
| 0x3F3 | 60  | 52  | 44  | 36  | 28  | 20  | 12  | 04  |
| 0x3F4 | xx  | 53  | 45  | 37  | 29  | 21  | 13  | 05  |
| 0x3F5 | xx  | 54  | 46  | 38  | 30  | 22  | 14  | 06  |
| 0x3F6 | xx  | 55  | 47  | 39  | 31  | 23  | 15  | 07  |
| 0x3F7 | xx  | 56  | 48  | 40  | 32  | 24  | 16  | 08  |
---------------------------------------------------------


Brightness byte (0x3fe)
----------------
Allowed brightness value: 1..15


Settings byte (0x3ff)
---------------------------------
| X | X | t | t | p | d | s | s |
---------------------------------
ss: sequencer direction
00 - Forward
01 - Backward
10 - Pendulum
11 - Random

d: display mode
0 - Normal
1 - Graphically assisted

p: program display mode
0 - Decimal
1 - Octal

tt: I2C address for Monome Teletype
00: 0x8B
01: 0x8C
10: 0x8D
11: 0x8B