private MemoryBlockDB createMappedBlock(byte type, String name, Address startAddress,
			long length, Address mappedAddress, int flags, int mappingScheme)
			throws IOException, AddressOverflowException {
		updateAddressMapForAllAddresses(startAddress, length);

		List<SubMemoryBlock> subBlocks = new ArrayList<>();
		DBRecord blockRecord = createMemoryBlockRecord(name, startAddress, length, flags);
		long key = blockRecord.getKey();

		long encoded = addrMap.getKey(mappedAddress, true);
		DBRecord subRecord = createSubBlockRecord(key, 0, length, type, mappingScheme, encoded);
		subBlocks.add(createSubBlock(subRecord));

		memBlockTable.putRecord(blockRecord);
		MemoryBlockDB newBlock = new MemoryBlockDB(this, blockRecord, subBlocks);
		cacheNewBlock(newBlock);
		return newBlock;
	}
MemoryMap adapter for version 3.
This version introduces the concept of sub memory blocks and FileBytes
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/database/mem/MemoryMapDBAdapterV3.java