Version 1.0.3 - changes by Nick

- fixed paddle values for scaled display window
- added "digital" joystick support via numeric keypad arrows
- added Left-Alt and Right-Alt keys for Open-Apple and Closed-Apple
- changed reset key from Home to Ctrl-F12 and Ctrl-Pause/Break
This commit is contained in:
sicklittlemonkey 2015-08-01 19:21:54 +12:00
parent bd8ca74c1e
commit 84c9d44b32
2 changed files with 152 additions and 19 deletions

View File

@ -3,11 +3,17 @@
* AppleIIGo
* The Java Apple II Emulator
* (C) 2006 by Marc S. Ressl (ressl@lonetree.com)
* (C) 2008 by Nick Westgate (Nick.Westgate@gmail.com)
* (C) 2009 by Nick Westgate (Nick.Westgate@gmail.com)
* Released under the GPL
*
* Change list:
*
* Version 1.0.3 - changes by Nick:
* - fixed paddle values for scaled display window
* - added "digital" joystick support via numeric keypad arrows
* - added Left-Alt and Right-Alt keys for Open-Apple and Closed-Apple
* - changed reset key from Home to Ctrl-F12 and Ctrl-Pause/Break
*
* Version 1.0.2 - changes by Nick:
* - improved sound sync by moving AppleSpeaker into the main thread
* - added version (F1)
@ -42,7 +48,7 @@ import java.util.zip.ZipInputStream;
public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
MouseListener, MouseMotionListener {
final String version = "1.0.2";
final String version = "1.0.3";
final String versionString = "AppleIIGo Version " + version;
// Class instances
@ -354,24 +360,64 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_ALT:
if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT)
{
apple.paddle.setButton(0, true);
}
else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_RIGHT)
{
apple.paddle.setButton(1, true);
}
break;
case KeyEvent.VK_BACK_SPACE:
case KeyEvent.VK_LEFT:
apple.setKeyLatch(8);
if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD)
{
handleKeypadLeft();
}
else
{
apple.setKeyLatch(8);
}
break;
case KeyEvent.VK_RIGHT:
apple.setKeyLatch(21);
if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD)
{
handleKeypadRight();
}
else
{
apple.setKeyLatch(21);
}
break;
case KeyEvent.VK_UP:
if (e.isControlDown())
apple.speaker.setVolume(apple.speaker.getVolume() + 1);
{
apple.speaker.setVolume(apple.speaker.getVolume() + 1);
}
else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD)
{
handleKeypadUp();
}
else
{
apple.setKeyLatch(11);
}
break;
case KeyEvent.VK_DOWN:
if (e.isControlDown())
apple.speaker.setVolume(apple.speaker.getVolume() - 1);
{
apple.speaker.setVolume(apple.speaker.getVolume() - 1);
}
else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD)
{
handleKeypadDown();
}
else
{
apple.setKeyLatch(10);
}
break;
case KeyEvent.VK_ESCAPE:
apple.setKeyLatch(27);
@ -381,9 +427,7 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
break;
case KeyEvent.VK_HOME:
if (e.isControlDown())
apple.restart();
else
apple.reset();
apple.restart();
break;
case KeyEvent.VK_F1:
showStatus("AppleIIGo Version " + version);
@ -422,12 +466,99 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
apple.stepInstructions(128);
}
break;
case KeyEvent.VK_CANCEL: // Ctrl-Pause/Break sends this (N/A on Mac)
case KeyEvent.VK_F12:
if (e.isControlDown())
apple.reset();
break;
case KeyEvent.VK_KP_LEFT:
handleKeypadLeft();
break;
case KeyEvent.VK_KP_RIGHT:
handleKeypadRight();
break;
case KeyEvent.VK_KP_UP:
handleKeypadUp();
break;
case KeyEvent.VK_KP_DOWN:
handleKeypadDown();
break;
}
}
public void keyReleased(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_ALT:
if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_LEFT)
{
apple.paddle.setButton(0, false);
}
else if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_RIGHT)
{
apple.paddle.setButton(1, false);
}
break;
case KeyEvent.VK_LEFT:
case KeyEvent.VK_RIGHT:
if (e.getKeyLocation() != KeyEvent.KEY_LOCATION_NUMPAD)
break;
// else fall through
case KeyEvent.VK_KP_LEFT:
case KeyEvent.VK_KP_RIGHT:
if (isPaddleInverted) {
apple.paddle.setPaddlePos(1, 127);
} else {
apple.paddle.setPaddlePos(0, 127);
}
break;
case KeyEvent.VK_UP:
case KeyEvent.VK_DOWN:
if (e.getKeyLocation() != KeyEvent.KEY_LOCATION_NUMPAD)
break;
// else fall through
case KeyEvent.VK_KP_UP:
case KeyEvent.VK_KP_DOWN:
if (isPaddleInverted) {
apple.paddle.setPaddlePos(0, 127);
} else {
apple.paddle.setPaddlePos(1, 127);
}
break;
}
}
private void handleKeypadLeft() {
if (isPaddleInverted) {
apple.paddle.setPaddlePos(1, 255);
} else {
apple.paddle.setPaddlePos(0, 0);
}
}
private void handleKeypadRight() {
if (isPaddleInverted) {
apple.paddle.setPaddlePos(1, 0);
} else {
apple.paddle.setPaddlePos(0, 255);
}
}
private void handleKeypadUp() {
if (isPaddleInverted) {
apple.paddle.setPaddlePos(0, 255);
} else {
apple.paddle.setPaddlePos(1, 0);
}
}
private void handleKeypadDown() {
if (isPaddleInverted) {
apple.paddle.setPaddlePos(0, 0);
} else {
apple.paddle.setPaddlePos(1, 255);
}
}
/**
* ComponentListener event handling
*/
@ -490,12 +621,13 @@ public class AppleIIGo extends Applet implements KeyListener, ComponentListener,
}
public void mouseMoved(MouseEvent e) {
float scale = display.getScale();
if (isPaddleInverted) {
apple.paddle.setPaddlePos(0, (int) (display.getScale() * (255 - e.getY() * 256 / 192)));
apple.paddle.setPaddlePos(1, (int) (display.getScale() * (255 - e.getX() * 256 / 280)));
apple.paddle.setPaddlePos(0, (int) (255 - e.getY() * 256 / (192 * scale)));
apple.paddle.setPaddlePos(1, (int) (255 - e.getX() * 256 / (280 * scale)));
} else {
apple.paddle.setPaddlePos(0, (int) (e.getX() * display.getScale() * 256 / 280));
apple.paddle.setPaddlePos(1, (int) (e.getY() * display.getScale() * 256 / 192));
apple.paddle.setPaddlePos(0, (int) (e.getX() * 256 / (280 * scale)));
apple.paddle.setPaddlePos(1, (int) (e.getY() * 256 / (192 * scale)));
}
}

View File

@ -1567,13 +1567,14 @@ public class Em6502 {
if ((exceptionRegister & SIG_6502_RESET) != 0) {
onReset();
A = X = Y = 0;
P = 0x20;
setFC(getC());
setFNZ(getN(), getZ());
S = 0xff;
PC = memoryRead(0xfffc);
PC |= (memoryRead(0xfffd) << 8);
S = (S - 3) & 0xff;
setI(true);
setD(false); // not on NMOS 6502
setFC(getC());
setFNZ(getN(), getZ());
clock += 7;
exceptionRegister &= ~SIG_6502_RESET;
}