@Override
	public void propagate(boolean force) {
		if (!force && !isReady())
			return;
		// memory logic is here
		int index = 0;
		for (int i = 0; i < in_addr.length; i++) {
			if (in_addr[i].out(0))
				index += 1<<i;
		}
		if (in_mode.out(0)) {
			// write mode
			storage[index] = 0;
			for (int i = 0; i < in_data.length; i++) {
				if (in_data[i].out(0))
					storage[index] += 1<<i;
			}
		}
		// do read anyway
		for (int i = 0; i < out_data.length; i++) {
			out_data[i].in(i, ((storage[index]>>i) & 1)!=0);
		}
		super.propagate(true);
	}