private int handleJumpBankRelative(int address, int jumpAddress, CPUState s, int jumpType, boolean reachable) {
    if(jumpAddress < 0x4000)             // home bank jump
      return handleJumpFull(address,jumpAddress,s, jumpType, reachable);
    else if(jumpAddress >= 0x8000)       // non-ROM jump
      System.out.println("jump to non-ROM address "+Integer.toHexString(jumpAddress)+" at "+Integer.toHexString(address));
    else {
      int bank = address / 0x4000;    // test for intra-bank jump
      if(s.loadedBank != -1) {
        if(bank > 0 && bank != s.loadedBank)
          System.err.println("ERROR: loadedBank "+Integer.toHexString(s.loadedBank)+" does not match address bank "+Integer.toHexString(bank)+" at "+Integer.toHexString(address));
        else
          bank = s.loadedBank;
      }
      if(bank > 0)
        return handleJumpFull(address, jumpAddress+(bank-1)*0x4000, s, jumpType, reachable);
      else
        System.out.println("cannot determine ROM bank for jump address "+Integer.toHexString(jumpAddress)+" at "+Integer.toHexString(address));
    }
    return -1;
  }