A return undoes a call - it pops the saved address and resumes there. Today you implement 00EE and prove a full call-and-return round trip lands exactly where it should.
Implement 00EE so it pops the stack into PC, and confirm a call then return round-trips.
00EE returns from a subroutine, and it is the mirror image of 2NNN: pop the top address off the stack and set PC to it. Because the call pushed the address of the instruction after the call, the return lands exactly there, and execution continues as if the subroutine had been a single step. It shares the 0x0 high nibble with 00E0, so it lives in the same switch arm, matched on the full opcode.
This lesson is where the stack, call, and return finally close the loop, so the spec tests the round trip: call into 0x400, immediately return, and confirm PC is 0x202 with an empty stack. That round trip is the real proof - if either the push address or the pop is off by two, the program counter drifts and a real ROM full of nested subroutine calls would slowly wander into garbage. With this, the machine has full subroutine control flow.
// in the 0x0000 arm, alongside 00E0:if op == 0x00EE {v.pc = v.pop()return nil}