public class MachineLaunchConfigType extends LaunchConfigurationDelegate
{
- public static final String PROJECT_ATTR = MograsimActivator.PLUGIN_ID + "project";
- public static final String MPM_FILE_ATTR = MograsimActivator.PLUGIN_ID + "mpm";
+ public static final String PROJECT_ATTR = MograsimActivator.PLUGIN_ID + ".project";
+ public static final String MPM_FILE_ATTR = MograsimActivator.PLUGIN_ID + ".mpm";
+ public static final String INITIAL_RAM_FILE_ATTR = MograsimActivator.PLUGIN_ID + ".initialram";
private final IResourceChangeListener resChangedListener;
throw new CoreException(new Status(IStatus.ERROR, MograsimActivator.PLUGIN_ID, "Unexpected IO exception reading MPM file", e));
}
+ // TODO parse RAM
+
return super.preLaunchCheck(configuration, mode, monitor);
}
throw new CoreException(new Status(IStatus.ERROR, MograsimActivator.PLUGIN_ID, "Unexpected IO exception reading MPM file", e));
}
+ // TODO parse RAM
+
MachineDebugTarget debugTarget = new MachineDebugTarget(new MachineProcess(launch, machineDefinition));
debugTarget.setExecutionSpeed(1);
Machine machine = debugTarget.getMachine();
machine.getMicroInstructionMemory().bind(mpm);
+ // TODO bind RAM
machine.reset();
}
{
private Text projSelText;
private Text mpmFileSelText;
+ private Text initialRAMFileSelText;
@Override
public void createControl(Composite parent)
this.mpmFileSelText = createResourceSelectorGroup(innerParent, "&MPM:", this::chooseMPMFile);
- // TODO RAM selector
+ this.initialRAMFileSelText = createResourceSelectorGroup(innerParent, "Initial &RAM (optional):", this::chooseInitialRAMFile);
}
private Text createResourceSelectorGroup(Composite innerParent, String groupName, Supplier<String> chooser)
}
};
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), renderer, new WorkbenchContentProvider());
+ dialog.setTitle("MPM Selection");
+ dialog.setMessage("Select a MPM file");
dialog.setInput(getSelectedProject());
dialog.addFilter(new FileExtensionViewerFilter("mpm"));
return null;
}
+ private String chooseInitialRAMFile()
+ {
+ WorkbenchLabelProvider renderer = new WorkbenchLabelProvider()
+ {
+ @Override
+ protected ImageDescriptor decorateImage(ImageDescriptor input, Object element)
+ {
+ return new ImageDescriptorWithMargins(input, new Point(22, 16));
+ }
+ };
+ ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), renderer, new WorkbenchContentProvider());
+ dialog.setTitle("Initial RAM Selection");
+ dialog.setMessage("Select a RAM file");
+ dialog.setInput(getSelectedProject());
+ dialog.addFilter(new FileExtensionViewerFilter("mem"));
+
+ if (dialog.open() == Window.OK)
+ return ((IResource) dialog.getResult()[0]).getProjectRelativePath().toPortableString();
+ return null;
+ }
+
private IProject getSelectedProject()
{
String projName = projSelText.getText().trim();
{
projSelText.setText(getStringAttribSafe(configuration, MachineLaunchConfigType.PROJECT_ATTR, ""));
mpmFileSelText.setText(getStringAttribSafe(configuration, MachineLaunchConfigType.MPM_FILE_ATTR, ""));
+ initialRAMFileSelText.setText(getStringAttribSafe(configuration, MachineLaunchConfigType.INITIAL_RAM_FILE_ATTR, ""));
}
private String getStringAttribSafe(ILaunchConfiguration configuration, String attrib, String defaultValue)
{
String projName = projSelText.getText().trim();
String mpmFileName = mpmFileSelText.getText().trim();
+ String initialRAMFileName = initialRAMFileSelText.getText().trim();
Set<IResource> associatedResources = new HashSet<>();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
{
if (project != null && project.isAccessible() && project.hasNature(MograsimNature.NATURE_ID))
{
+ associatedResources.add(project);
+
IResource mpmFile = project.findMember(mpmFileName);
if (mpmFile != null && mpmFile.exists() && mpmFile.getType() == IResource.FILE)
associatedResources.add(mpmFile);
- else
- associatedResources.add(project);
+
+ IResource ramFile = project.findMember(initialRAMFileName);
+ if (ramFile != null && ramFile.exists() && ramFile.getType() == IResource.FILE)
+ associatedResources.add(ramFile);
}
}
catch (CoreException e)
configuration.setMappedResources(associatedResources.toArray(IResource[]::new));
configuration.setAttribute(MachineLaunchConfigType.PROJECT_ATTR, projName);
configuration.setAttribute(MachineLaunchConfigType.MPM_FILE_ATTR, mpmFileName);
+ configuration.setAttribute(MachineLaunchConfigType.INITIAL_RAM_FILE_ATTR, initialRAMFileName);
}
@Override
if (mpmResource.getType() != IResource.FILE)
return setErrorAndReturnFalse("MPM file {0} is not a file", mpmFileName);
+ String initialRAMFileName = initialRAMFileSelText.getText().trim();
+ if (initialRAMFileName.length() > 0)
+ {
+ IResource initialRAMResource = project.findMember(initialRAMFileName);
+ if (initialRAMResource == null || !initialRAMResource.exists())
+ return setErrorAndReturnFalse("Initial RAM file {0} does not exist", initialRAMFileName);
+ if (initialRAMResource.getType() != IResource.FILE)
+ return setErrorAndReturnFalse("Initial RAM file {0} is not a file", initialRAMFileName);
+ }
+
return true;
}