assert tile != null;
    private void asm(RawTile fire, HashMap previous, HashMap next)     {	//generate the sends	if (!switchSchedules.containsKey(fire))	    switchSchedules.put(fire, new StringBuffer());	StringBuffer buf = (StringBuffer)switchSchedules.get(fire);	Iterator it = ((HashSet)next.get(fire)).iterator();	buf.append("route ");	while (it.hasNext()) {	    RawTile dest = (RawTile)it.next();	    buf.append("$csto->" + "$c" + 		       rawChip.getDirection(fire, dest) + 		       "o,");	}	//erase the trailing ,	buf.setCharAt(buf.length() - 1, '\n');		//generate all the other 	Iterator tiles = next.keySet().iterator();	while (tiles.hasNext()) {	    RawTile tile = (RawTile)tiles.next();	    if (tile == fire) 		continue;	    if (!switchSchedules.containsKey(tile))		switchSchedules.put(tile, new StringBuffer());	    buf = (StringBuffer)switchSchedules.get(tile);	    RawTile prevTile = (RawTile)previous.get(tile);	    buf.append("route ");	    Iterator nexts = ((HashSet)next.get(tile)).iterator();	    while(nexts.hasNext()) {		RawTile nextTile = (RawTile)nexts.next();		if (!nextTile.equals(tile))		    buf.append("$c" + rawChip.getDirection(tile, prevTile) + "i->$c" +			       rawChip.getDirection(tile, nextTile) + "o,");		else 		    buf.append("$c" + rawChip.getDirection(tile, prevTile) + "i->$c" +			       rawChip.getDirection(tile, nextTile) + "i,");	    }	    buf.setCharAt(buf.length() - 1, '\n');	}    }