private void preprocessMaps() {
		itemOffs = new ArrayList<Integer>();

		int mhOffset = romEntry.getValue("MapHeaders");
		int mgCount = 26;
		int mLastGroup = 11;
		int mhBank = bankOf(mhOffset);
		mapNames = new String[mgCount + 1][100];

		int[] groupOffsets = new int[mgCount];
		for (int i = 0; i < mgCount; i++) {
			groupOffsets[i] = calculateOffset(mhBank,
					readWord(mhOffset + i * 2));
		}

		// Read maps
		for (int mg = 0; mg < mgCount; mg++) {
			int offset = groupOffsets[mg];
			int maxOffset = (mg == mgCount - 1) ? (mhBank + 1) * 0x4000
					: groupOffsets[mg + 1];
			int map = 0;
			int maxMap = (mg == mgCount - 1) ? mLastGroup : 999;
			while (offset < maxOffset && map < maxMap) {
				processMapAt(offset, mg + 1, map + 1);
				offset += 9;
				map++;
			}
		}
	}