@Override
	protected SubMemoryBlock split(long memBlockOffset) throws IOException {

		// NOTE - GUI does not support any split of any byte-mapped blocks although API does.  
		//        Not sure we really need to support it for byte-mapped block.

		if (!byteMappingScheme.isOneToOneMapping()) {
			// byte-mapping scheme alignment restrictions would apply to split 
			// boundary if we were to support
			throw new UnsupportedOperationException(
				"split not supported for byte-mapped block with " + byteMappingScheme);
		}

		// convert from offset in block to offset in this sub block
		int offset = (int) (memBlockOffset - subBlockOffset);
		long newLength = subBlockLength - offset;
		subBlockLength = offset;
		record.setLongValue(MemoryMapDBAdapter.SUB_LENGTH_COL, subBlockLength);
		adapter.updateSubBlockRecord(record);

		Address newAddr = mappedAddress.add(offset);
		AddressMapDB addressMap = adapter.getMemoryMap().getAddressMap();
		long encodedAddr = addressMap.getKey(newAddr, true);

		DBRecord newSubRecord = adapter.createSubBlockRecord(0, 0, newLength,
			MemoryMapDBAdapter.SUB_TYPE_BYTE_MAPPED, 0, encodedAddr);

		return new ByteMappedSubMemoryBlock(adapter, newSubRecord);
	}
Class for handling byte mapped memory sub blocks
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/ByteMappedSubMemoryBlock.java