1. A method for programming a phase change memory (PCM) cell, comprising: receiving a desired resistance range for the PCM cell, the PCM cell having a state with a resistance value; and looping to determine adjustments to the resistance value of the PCM cell, the looping comprising: reading the resistance value of the PCM cell; applying an annealing pulse in response to determining that the resistance value of the PCM cell is greater than the desired resistance range, the annealing pulse shaped responsive to the resistance value of the PCM cell and the desired resistance range; applying an adjustable reset pulse to reset the state of the PCM cell in response to determining that the resistance value of the PCM cell is less than the desired resistance range, the adjustable reset pulse shaped responsive to the desired resistance range; and repeating the looping until one or more termination criteria are met.