+
+ // Special case
+ if( mcm == 127 ) {
+ if( robAB == 3 ) { // This is very special 127 can stay only if two ROBs are selected
+ mcmList[0]=127; // broadcase to ALL
+ mcmList[1]=-1;
+ return 1;
+ }
+ cmA = cmB = 0x3FFFF;
+ } else if( (mcm & 0x40) != 0 ) { // If top bit is 1 but not 127, this is chip group.
+ if( (mcm & 0x01) != 0 ) { cmA |= 0x04444; cmB |= 0x04444; } // chip_cmrg
+ if( (mcm & 0x02) != 0 ) { cmA |= 0x10000; cmB |= 0x10000; } // chip_bmrg
+ if( (mcm & 0x04) != 0 && rocType == 0 ) { cmA |= 0x20000; cmB |= 0x20000; } // chip_hm3
+ if( (mcm & 0x08) != 0 && rocType == 1 ) { cmA |= 0x20000; cmB |= 0x20000; } // chip_hm4
+ if( (mcm & 0x10) != 0 ) { cmA |= 0x01111; cmB |= 0x08888; } // chip_edge
+ if( (mcm & 0x20) != 0 ) { cmA |= 0x0aaaa; cmB |= 0x03333; } // chip_norm
+ } else { // Otherwise, this is normal chip ID, turn on only one chip.
+ cmA = 1 << mcm;
+ cmB = 1 << mcm;
+ }
+
+ // Mask non-existing MCMs
+ cmA &= gkChipmaskDefLp[linkpair];
+ cmB &= gkChipmaskDefLp[linkpair];
+ // Remove if only one side is selected
+ if( robAB == 1 )
+ cmB = 0;
+ if( robAB == 2 )
+ cmA = 0;
+ if( robAB == 4 && linkpair != 2 )
+ cmA = cmB = 0; // Restrict to only T3A and T3B
+
+ // Finally convert chipmask to list of slaves
+ nmcm = ChipmaskToMCMlist( cmA, cmB, linkpair, mcmList, listSize);
+
+ return nmcm;