public void createBlock(Program program) throws LockException, MemoryConflictException,
			AddressOverflowException, InvalidAddressException {
		if (blockName == null || addressString == null || length <= 0) {
			return;
		}

		Memory mem = program.getMemory();
		Address addr = parseAddress(addressString, program, "block address");

		MemoryBlock block;
		if (bitMappedAddress != null) {
			Address mappedAddr = parseAddress(bitMappedAddress, program, "bit-mapped address");
			block = mem.createBitMappedBlock(blockName, addr, mappedAddr, length, overlay);
		}
		else if (byteMappedAddress != null) {
			Address mappedAddr = parseAddress(byteMappedAddress, program, "byte-mapped address");
			block = mem.createByteMappedBlock(blockName, addr, mappedAddr, length,
				byteMappingScheme, overlay);
		}
		else if (initialized) {
			try {
				block =
					mem.createInitializedBlock(blockName, addr, length, (byte) 0,
						TaskMonitor.DUMMY, overlay);
			}
			catch (CancelledException e) {
				throw new AssertException(e); // unexpected
			}
		}
		else {
			block = mem.createUninitializedBlock(blockName, addr, length, overlay);
		}
		block.setRead(readPermission);
		block.setWrite(writePermission);
		block.setExecute(executePermission);
		block.setVolatile(isVolatile);
	}
Create memory block within specified program based upon this block specification.
@param program target program
@throws LockException if program does not have exclusive access required when adding memory blocks.
@throws MemoryConflictException if this specification conflicts with an existing memory block in program
@throws AddressOverflowException if memory space constraints are violated by block specification
@throws InvalidAddressException if address defined by this block specification is invalid
for the specified program.  May also indicate an improperly formatted address attribute.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/processors/generic/MemoryBlockDefinition.java