Hi Justine, AGAin =)
I looked through your code and found some errors.
I would like to draw your attention for a command line buffer is not always ends as space (20) code (for example commands without parameters), so I added check zero code for end of buffer.
At label "parse_start" I added "ld a,(de)". You increase DE but never had rereading value to the A.
At line where you is checked "@" - wrong JP. I replaced "jp no_match" on the "jp z,no_match".
You store "PUSH AF" but forgot remove it from stack!
I added "pop af" at line with label "forward" and "no_match".
You did not properly invoke the command "JP (HL)"
First we need to read a value into the register pair HL, and then make a jump to the address.
So... now i think, code right a bit and work correctly. In the archive you will find source code and snapshot for emulator.
I compiled with the help of sjasmplus, so you may need to replace hex values of numbers, for example #20 to the h'20