Also a ninja for me. So here's my explanation.
Ok, I'll break this down all the way.
bcall(_OP2ExOP5) is actually bcall($4216) which is actually
rst 28h
.dw $4216
my previous bcall(killCalculator) is actually bcall($0083) which is actually
rst 28h
.dw $0083
When the calculator encounters the rst 28h, it goes to $0028, which takes the next two bytes and parses them.
If the next two bytes are in the $4000 - $7FFF range: It looks on page $1B/$3B/$7B for the location data.
If the next two bytes are in the $0000 - $3FFF range: It looks on the first page of the app that is running for the location data.
The data that it is looking for is going to have this format:
.dw address
.db page
So when bcall(_OP2ExOP5) is executed. The OS is going to look on page $7B at $4216 for the data, which happens to be (in 2.53) $C8, $1D, $00. So the calculator is now going to call $1DC8 on page 0.
When bcall(killCalculator) is executed. The OS is going to look at the current app page ($69) at $4083 for the data. Which might be: $00, $40, $01. So the calculator is now going to call $4000 on app page 1, (which might be $68).