private void execFormatTrackTask() { File file = this.ioFile; long pos = this.ioFilePos; int cnt = this.ioByteCnt; if ((file != null) && (pos >= 0) && (cnt > 0)) { boolean err = false; RandomAccessFile raf = null; try { raf = new RandomAccessFile(file, "rw"); raf.seek(pos); while (cnt > 0) { raf.write(0); --cnt; } raf.close(); raf = null; } catch (IOException ex) { err = true; if (!this.writeErrShown) { this.writeErrShown = true; EmuUtil.fireShowError(this.owner, null, ex); } } finally { EmuUtil.doClose(raf); } if (err) { this.errorReg = ERROR_UNCORRECTABLE_DATA; this.statusReg |= STATUS_ERROR; } fireInterrupt(); } }
private static HardDisk[] getHardDisks(Properties props, String propPrefix) { HardDisk[] rv = null; if (props != null) { for (int i = 0; i < 2; i++) { HardDisk disk = null; String prefix = String.format("%sharddisk.%d.", propPrefix, i + 1); String diskModel = EmuUtil.getProperty(props, prefix + "model"); String fileName = EmuUtil.getProperty(props, prefix + "file"); if (!diskModel.isEmpty() && !fileName.isEmpty()) { int c = EmuUtil.getIntProperty(props, prefix + "cylinders", 0); int h = EmuUtil.getIntProperty(props, prefix + "heads", 0); int n = EmuUtil.getIntProperty(props, prefix + "sectors_per_track", 0); if ((c > 0) && (h > 0) && (n > 0)) { disk = new HardDisk(diskModel, c, h, n, fileName); } } if (disk != null) { if (rv != null) { HardDisk[] a = new HardDisk[rv.length + 1]; System.arraycopy(rv, 0, a, 0, rv.length); rv = a; } else { rv = new HardDisk[1]; } rv[rv.length - 1] = disk; } } } return rv; }
private void execReadSectorsTask() { File file = this.ioFile; long pos = this.ioFilePos; if (this.debugLevel > 3) { System.out.printf("GIDE io task: read track, pos=%d", pos); } if ((file != null) && (pos >= 0)) { if (file.exists()) { RandomAccessFile raf = null; try { raf = new RandomAccessFile(file, "r"); raf.seek(pos); this.ioByteCnt = (int) raf.read(this.ioBuf, 0, this.ioByteCnt); if (this.debugLevel > 3) { System.out.printf("GIDE io task: read sector: %d read\n", this.ioByteCnt); } } catch (IOException ex) { if (this.debugLevel > 3) { System.out.println("GIDE io task: read sector: error"); } if (!this.readErrShown) { this.readErrShown = true; EmuUtil.fireShowError( this.owner, "Die Festplattenabbilddatei kann nicht gelesen" + " werden.\n" + "Gegen\u00FCber dem emulierten System" + " wird jedoch kein Fehler signalisiert.", ex); } } finally { EmuUtil.doClose(raf); } } else { EmuUtil.fireShowError( this.owner, "Die Festplattenabbilddatei existiert nicht und" + " kann deshalb auch nicht gelesen werden.\n" + "Gegen\u00FCber dem emulierten System" + " wird jedoch kein Fehler signalisiert.\n" + "Mit dem ersten Schreibzugriff auf das" + " emulierte Laufwerk wird die Abbilddatei" + " angelegt.", null); } this.ioBufPos = 0; this.statusReg |= STATUS_DATA_REQUEST; fireInterrupt(); } }
private void execWriteSectorsTask() { File file = this.ioFile; long pos = this.ioFilePos; if (this.debugLevel > 3) { System.out.printf("GIDE io task: write sector, pos=%d", pos); } if ((file != null) && (pos >= 0)) { boolean err = false; RandomAccessFile raf = null; try { raf = new RandomAccessFile(file, "rw"); raf.seek(pos); raf.write(this.ioBuf, 0, SECTOR_SIZE); raf.close(); raf = null; } catch (IOException ex) { err = true; if (!this.writeErrShown) { this.writeErrShown = true; EmuUtil.fireShowError(this.owner, null, ex); } } finally { EmuUtil.doClose(raf); } if (err) { this.errorReg = ERROR_UNCORRECTABLE_DATA; this.statusReg |= STATUS_ERROR; if (this.debugLevel > 3) { System.out.println("GIDE io task: write sector: error"); } } else { this.ioBufPos = 0; countSector(); if (this.sectorCnt > 0) { fireInterrupt(); } else { this.statusReg = STATUS_SEEK_COMPLETE | STATUS_DRIVE_READY; } if (this.debugLevel > 3) { System.out.println("GIDE io task: write sector: ok"); } } } }
private static boolean emulatesGIDE(Properties props, String propPrefix) { boolean rv = true; for (int i = 0; i < propKeys.length; i++) { if (EmuUtil.getProperty(props, propPrefix + "harddisk.1." + propKeys[i]).isEmpty()) { rv = false; break; } } return rv; }
@Override public void applyInput(Properties props, boolean selected) throws UserInputException { Component tab = null; try { tab = this.tabModel; String os = "3.1_64x32"; if (this.btnMon31_64x16.isSelected()) { os = "3.1_64x16"; } else if (this.btnMonSCCH80.isSelected()) { os = "SCCH8.0"; } else if (this.btnMonSCCH1088.isSelected()) { os = "SCCH10/88"; } else if (this.btnMon2010.isSelected()) { os = "2010"; } props.setProperty(this.propPrefix + "os.version", os); tab = this.tabRF; this.tabRF.applyInput(props, selected); tab = this.tabGIDE; this.tabGIDE.applyInput(props, selected); tab = this.tabSCCH; this.tabSCCH.applyInput(props, selected); tab = this.tab2010; this.fldAltPio2Rom2010.applyInput(props, selected); this.fldRomBank2010.applyInput(props, selected); tab = this.tabExt; EmuUtil.setProperty(props, this.propPrefix + "color", this.btnColor.isSelected()); EmuUtil.setProperty( props, this.propPrefix + "floppydisk.enabled", this.btnFloppyDisk.isSelected()); EmuUtil.setProperty(props, this.propPrefix + "kcnet.enabled", this.btnKCNet.isSelected()); EmuUtil.setProperty(props, this.propPrefix + "vdip.enabled", this.btnVDIP.isSelected()); EmuUtil.setProperty( props, this.propPrefix + "joystick.enabled", this.btnJoystick.isSelected()); tab = this.tabEtc; EmuUtil.setProperty(props, this.propPrefix + "paste.fast", this.btnPasteFast.isSelected()); this.fldAltOS.applyInput(props, selected); this.fldAltFont.applyInput(props, selected); } catch (UserInputException ex) { if (tab != null) { this.tabbedPane.setSelectedComponent(tab); } throw ex; } }
@Override public void updFields(Properties props) { String os = EmuUtil.getProperty(props, this.propPrefix + "os.version"); if (os.equals("3.1_64x16")) { this.btnMon31_64x16.setSelected(true); } else if (os.equals("3.1_64x32")) { this.btnMon31_64x32.setSelected(true); } else if (os.equals("SCCH8.0")) { this.btnMonSCCH80.setSelected(true); } else if (os.equals("2010")) { this.btnMon2010.setSelected(true); } else { this.btnMonSCCH1088.setSelected(true); } this.tabRF.updFields(props); this.tabGIDE.updFields(props); this.tabSCCH.updFields(props); this.fldAltPio2Rom2010.updFields(props); this.fldRomBank2010.updFields(props); this.btnColor.setSelected(EmuUtil.getBooleanProperty(props, this.propPrefix + "color", false)); this.btnFloppyDisk.setSelected( EmuUtil.getBooleanProperty(props, this.propPrefix + "floppydisk.enabled", false)); this.btnKCNet.setSelected( EmuUtil.getBooleanProperty(props, this.propPrefix + "kcnet.enabled", false)); this.btnVDIP.setSelected( EmuUtil.getBooleanProperty(props, this.propPrefix + "vdip.enabled", false)); this.btnJoystick.setSelected( EmuUtil.getBooleanProperty(props, this.propPrefix + "joystick.enabled", false)); this.btnPasteFast.setSelected( EmuUtil.getBooleanProperty(props, this.propPrefix + "paste.fast", false)); this.fldAltOS.updFields(props); this.fldAltFont.updFields(props); updSCCHFieldsEnabled(); upd2010FieldsEnabled(); }