Program Counter (PC)

Since you predefined that there would be 6 - 4k blocks allocated why not just establish the the first or 31st (or whatever) byte of the program is the entry point and then have those addresses hardcoded into your custom loader/scheduler. You would have to have some type of flag configured so you could keep track of whether a given segment has code loaded, or preload each segment with a subroutine return and not worry about it.

your loader would have something like this

call block1
call block2
call block3
call block4
call block5
call block6

block1:
ret

block2:
ret

etc.

loaded code would overwrite teh return and the code would execute.
you could also put conditionals before the calls and only call if the bit has been set.