One observation from the loader routine. The stack is situated at 63796: the program loads from 16384 (#4000) and loads in 47416 bytes. This means all data in memory from 16384 to 63800 is overwritten....This has two consequences..
1) the code you are reading is overwritten by the loader. Thus the lines
jp nc, 0 jp 36864
will not exist when the program is loaded
2) the return address from the loader is pushed onto the stack. The stack is overwritten so after the program has loaded, it will not return to the routine that called it. The return address is written by the code that is loaded.
The above proved enough protection, that further duplication (MASTER TAPE) resorted to a snapshot loader