The index register needs to move through memory, and FX1E advances it by a register. Today you implement it, noting that unlike the arithmetic opcodes it leaves VF alone.
Implement FX1E so it adds VX to the index register I without affecting VF.
FX1E adds VX to the index register I. It is the tool for stepping I through a table or an array in memory: point I at the start with ANNN, then bump it along with FX1E. Because I is 16 bits wide, the sum has plenty of room - adding to an I near the top of normal program memory just produces a larger 16-bit value, it does not wrap at the 12-bit address edge.
The one thing to pin is what it does not do: FX1E leaves VF unchanged. It sits in the arithmetic-looking 0xF family and adds two values, so it is tempting to give it a carry flag like 8XY4 - but standard CHIP-8 does not, and a program may keep meaningful data in VF across it. The spec deliberately sets VF = 1 beforehand and checks it survives, the same discipline you applied to 7XNN.
// in the 0xF000 arm:case 0x1E:v.i += uint16(v.V[x]) // no flag effect on standard CHIP-8return nil