A Machine-Independent Approach to Microprogram Synthesis