Immediately after CPU stacks its registers and jumps to your AccesViolation ISR (before any function prolog, before allocating variables on stack etc), CPU12X stack frame looks as follows:
PC @ SP+8 , 16bit CPU return address,
Y @ SP+6
X @ SP+4
B:A @ SP+2
CCRH:CCRL @ SP
No page registers (GPAGE, PPAGE, etc ) are stacked when servicing interrupts. You can read GPAGE directly from GPAGE register.
The rest depends on your compiler and version of your compiler. Compiler can allocate 3 bytes on stack for your char and int variables, it may also decide to allocate some temporary variables on stack, above your vars or below. So we can only guess what is offset to PC return address on stack. Try disassembling you code and see what is that offset. For example it could be something like that:
AccessViolation_InterruptHandler:
leas -3,sp ; allocating pc_t and gpage_t on stack
; if offset is really +3, then
movw 8+3,SP, pc_t
movb GPAGE, gpage_t