Version 1.0.6 - changes by Nick

- exposed F3/F4 disk swapping method: cycleDisk(int driveNumber)
- exposed reset() method
- exposed setSpeed(int value) method
This commit is contained in:
sicklittlemonkey 2015-08-01 19:42:08 +12:00
parent d8b391a80c
commit 912d6c3dbc
1 changed files with 58 additions and 32 deletions

View File

@ -8,6 +8,12 @@
* *
* Change list: * Change list:
* *
* Version 1.0.6 - changes by Nick:
*
* - exposed F3/F4 disk swapping method: cycleDisk(int driveNumber)
* - exposed reset() method
* - exposed setSpeed(int value) method
*
* Version 1.0.5 - changes by Nick: * Version 1.0.5 - changes by Nick:
* *
* - added support for .NIB (nibble) disk images (also inside ZIP archives) * - added support for .NIB (nibble) disk images (also inside ZIP archives)
@ -28,7 +34,7 @@
* Version 1.0.2 - changes by Nick: * Version 1.0.2 - changes by Nick:
* - improved sound sync by moving AppleSpeaker into the main thread * - improved sound sync by moving AppleSpeaker into the main thread
* - added version (F1) * - added version (F1)
* - added multiple disks & switching (F3, F4) * - added multiple disks & swapping (F3, F4)
* - added ZIP archive support * - added ZIP archive support
* - fixed HTTP disk image access bug * - fixed HTTP disk image access bug
*/ */
@ -60,7 +66,7 @@ import java.util.zip.ZipInputStream;
public class AppleIIGo extends Applet implements KeyListener, ComponentListener, public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
MouseListener, MouseMotionListener { MouseListener, MouseMotionListener {
final String version = "1.0.5"; final String version = "1.0.6";
final String versionString = "AppleIIGo Version " + version; final String versionString = "AppleIIGo Version " + version;
// Class instances // Class instances
@ -78,13 +84,11 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
// Paddle variables // Paddle variables
private boolean isPaddleInverted; private boolean isPaddleInverted;
// Disk variables // Disk variables - TODO: refactor into a class
private String diskDriveResource[] = new String[2]; private String diskDriveResource[] = new String[2];
private boolean diskWritable; private boolean diskWritable;
private String[] disks0; private String[][] diskImageNames = {{}, {}};
private String[] disks1; private int diskImageNumber[] = {0, 0};
private int disk0;
private int disk1;
/** /**
* Debug * Debug
@ -146,12 +150,12 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
// Initialize disk drives // Initialize disk drives
diskWritable = getAppletParameter("diskWritable", "false").equals("true"); diskWritable = getAppletParameter("diskWritable", "false").equals("true");
disks0 = getAppletParameter("diskDrive1", "").split("[|]"); diskImageNames[0] = getAppletParameter("diskDrive1", "").split("[|]");
disk0 = 0; diskImageNumber[0] = 0;
disks1 = getAppletParameter("diskDrive2", "").split("[|]"); diskImageNames[1] = getAppletParameter("diskDrive2", "").split("[|]");
disk1 = 0; diskImageNumber[1] = 0;
mountDisk(0, disks0[disk0]); mountDisk(0, diskImageNames[0][diskImageNumber[0]]);
mountDisk(1, disks1[disk1]); mountDisk(1, diskImageNames[1][diskImageNumber[1]]);
// Start CPU // Start CPU
if (!isCpuPaused) if (!isCpuPaused)
@ -200,9 +204,9 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
public void pause() { public void pause() {
debug("pause()"); debug("pause()");
isCpuPaused = true; isCpuPaused = true;
apple.setPaused(isCpuPaused); apple.setPaused(true);
display.setPaused(isCpuPaused); display.setPaused(true);
apple.speaker.setPaused(isCpuPaused); apple.speaker.setPaused(true);
} }
/** /**
@ -211,9 +215,9 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
public void resume() { public void resume() {
debug("resume()"); debug("resume()");
isCpuPaused = false; isCpuPaused = false;
apple.speaker.setPaused(isCpuPaused); apple.speaker.setPaused(false);
display.setPaused(isCpuPaused); display.setPaused(false);
apple.setPaused(isCpuPaused); apple.setPaused(false);
} }
/** /**
@ -223,6 +227,35 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
debug("restart()"); debug("restart()");
apple.restart(); apple.restart();
} }
public void reset() {
debug("reset()");
apple.reset();
}
public void setSpeed(int value) {
debug("setSpeed(" + value + ")");
try
{
pause();
this.wait(1000);
}
catch (Throwable e)
{
}
apple.setCpuSpeed(value);
resume();
}
public void cycleDisk(int driveNumber)
{
debug("cycleDisk(" + driveNumber + ")");
if (diskImageNames[driveNumber].length > 1) {
diskImageNumber[driveNumber] = ++diskImageNumber[driveNumber] % diskImageNames[driveNumber].length;
mountDisk(driveNumber, diskImageNames[driveNumber][diskImageNumber[driveNumber]]);
}
}
/** /**
* Open input stream * Open input stream
@ -318,7 +351,7 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
debug("mountDisk(drive: " + drive + ", resource: " + resource + ")"); debug("mountDisk(drive: " + drive + ", resource: " + resource + ")");
boolean success = false; boolean success = false;
if ((drive < 0) || (drive > 2)) if ((drive < 0) || (drive > 1))
return success; return success;
try { try {
@ -331,6 +364,7 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
success = disk.readDisk(drive, is, diskname.toString(), false); success = disk.readDisk(drive, is, diskname.toString(), false);
is.close(); is.close();
showStatus("Drive " + (drive + 1) + ": " + resource);
} catch (Exception e) { } catch (Exception e) {
debug("Exeption: " + e.getLocalizedMessage()); debug("Exeption: " + e.getLocalizedMessage());
} }
@ -463,7 +497,7 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
break; break;
case KeyEvent.VK_HOME: case KeyEvent.VK_HOME:
if (e.isControlDown()) if (e.isControlDown())
apple.restart(); restart();
else else
apple.paddle.setButton(0, true); apple.paddle.setButton(0, true);
break; break;
@ -474,18 +508,10 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
showStatus("AppleIIGo Version " + version); showStatus("AppleIIGo Version " + version);
break; break;
case KeyEvent.VK_F3: case KeyEvent.VK_F3:
if (disks0.length > 1) { cycleDisk(0);
disk0 = ++disk0 % disks0.length;
mountDisk(0, disks0[disk0]);
showStatus("Disk 1: " + disks0[disk0]);
}
break; break;
case KeyEvent.VK_F4: case KeyEvent.VK_F4:
if (disks1.length > 1) { cycleDisk(1);
disk1 = ++disk1 % disks1.length;
mountDisk(1, disks1[disk1]);
showStatus("Disk 2: " + disks1[disk1]);
}
break; break;
case KeyEvent.VK_F5: case KeyEvent.VK_F5:
if (isCpuDebugEnabled) if (isCpuDebugEnabled)
@ -510,7 +536,7 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
case KeyEvent.VK_CANCEL: // Ctrl-Pause/Break sends this (N/A on Mac) case KeyEvent.VK_CANCEL: // Ctrl-Pause/Break sends this (N/A on Mac)
case KeyEvent.VK_F12: case KeyEvent.VK_F12:
if (e.isControlDown()) if (e.isControlDown())
apple.reset(); reset();
break; break;
case KeyEvent.VK_KP_LEFT: case KeyEvent.VK_KP_LEFT:
handleKeypadLeft(); handleKeypadLeft();