From 365809459c30735dc4edde805b57513f14c00116 Mon Sep 17 00:00:00 2001 From: Seth Morabito Date: Thu, 11 Oct 2012 16:08:04 -0700 Subject: [PATCH] Finally handling key presses in the console! (Took long enough, huh?) Added a dead simple console echo example program in 6502 assembly, as well. --- samples/echo.asm | 36 ++++++++++ samples/echo.prg | Bin 0 -> 36 bytes src/assets/new_led_images.psd | Bin 0 -> 251305 bytes .../java/com/loomcom/symon/Simulator.java | 64 ++++++++++-------- .../java/com/loomcom/symon/devices/Acia.java | 4 ++ .../java/com/loomcom/symon/ui/Console.java | 24 ++++--- 6 files changed, 91 insertions(+), 37 deletions(-) create mode 100644 samples/echo.asm create mode 100644 samples/echo.prg create mode 100644 src/assets/new_led_images.psd diff --git a/samples/echo.asm b/samples/echo.asm new file mode 100644 index 0000000..759e27a --- /dev/null +++ b/samples/echo.asm @@ -0,0 +1,36 @@ +;; +;; Read input from the keyboard, and echo to console. +;; + + +.alias iobase $c000 +.alias iostatus [iobase + 1] +.alias iocmd [iobase + 2] +.alias ioctrl [iobase + 3] + +.org $0300 + +start: cli + lda #$09 + sta iocmd ; Set command status + lda #$16 + sta ioctrl ; 0 stop bits, 8 bit word, 300 baud + +;; Load a character from the keyboard and store it into +;; the accumulator + +getkey: lda iostatus ; Read the ACIA status + and #$08 ; Is the rx register empty? + beq getkey ; Yes, wait for it to fill + lda iobase ; Otherwise, read into accumulator + +;; Write the current char in the accumulator to the console + +write: pha ; Save accumulator + lda iostatus ; Read the ACIA status + and #$10 ; Is the tx register empty? + beq write ; No, wait for it to empty + pla ; Otherwise, load saved accumulator + sta iobase ; and write to output. + + jmp getkey ; Repeat diff --git a/samples/echo.prg b/samples/echo.prg new file mode 100644 index 0000000000000000000000000000000000000000..e0190cdbb7b206ae1a2a001acc33328e99775692 GIT binary patch literal 36 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 MAX_STEPS_BETWEEN_UPDATES) { SwingUtilities.invokeLater(new Runnable() { public void run() { - updateConsoleAndStatus(cpu); + // Now update the state + statusPane.updateState(cpu); } }); stepsSinceLastUpdate = 0; @@ -361,28 +383,12 @@ public class Simulator implements ActionListener, Observer { // Immediately update the UI. SwingUtilities.invokeLater(new Runnable() { public void run() { - updateConsoleAndStatus(cpu); + // Now update the state + statusPane.updateState(cpu); } }); } - /** - * Update the UI with the latest state of the simulator. - */ - private void updateConsoleAndStatus(Cpu cpu) { - // If we have accumulated any ACIA output in our temporary - // buffer since the last UI update, write it to the console, - // then clear the buffer. - if (aciaBuffer.length() > 0) { - console.print(aciaBuffer.toString()); - console.repaint(); - aciaBuffer.delete(0, aciaBuffer.length()); - } - - // Now update the state - statusPane.updateState(cpu); - } - public static void main(String args[]) { SwingUtilities.invokeLater(new Runnable() { public void run() { @@ -457,8 +463,8 @@ public class Simulator implements ActionListener, Observer { stepButton.setEnabled(true); loadMenuItem.setEnabled(true); runStopButton.setText("Run"); - // Update state. - updateConsoleAndStatus(cpu); + // Now update the state + statusPane.updateState(cpu); } }); diff --git a/src/main/java/com/loomcom/symon/devices/Acia.java b/src/main/java/com/loomcom/symon/devices/Acia.java index bf3fcb1..9cb0b32 100644 --- a/src/main/java/com/loomcom/symon/devices/Acia.java +++ b/src/main/java/com/loomcom/symon/devices/Acia.java @@ -32,6 +32,8 @@ public class Acia extends Device { private int commandRegister; private int controlRegister; + private boolean overrun = false; + /** * Read/Write buffers */ @@ -52,6 +54,8 @@ public class Acia extends Device { case DATA_REG: return rxRead(); case STAT_REG: + // TODO: Overrun, Parity Error, Framing Error, + // DTR, DSR, and Interrupt flags. return ((rxFull ? 0x08 : 0x00) | (txFull ? 0x00 : 0x10)); case CMND_REG: diff --git a/src/main/java/com/loomcom/symon/ui/Console.java b/src/main/java/com/loomcom/symon/ui/Console.java index 8e905e6..ce888a0 100644 --- a/src/main/java/com/loomcom/symon/ui/Console.java +++ b/src/main/java/com/loomcom/symon/ui/Console.java @@ -18,6 +18,9 @@ import javax.swing.border.Border; public class Console extends JTerminal implements KeyListener, MouseListener { + private boolean hasInput = false; + private char keyBuffer; + public Console() { super(); addKeyListener(this); @@ -33,6 +36,7 @@ public class Console extends JTerminal implements KeyListener, MouseListener { getModel().setCursorColumn(0); getModel().setCursorRow(0); repaint(); + this.hasInput = false; } public void keyTyped(KeyEvent keyEvent) { @@ -40,19 +44,23 @@ public class Console extends JTerminal implements KeyListener, MouseListener { } public void keyPressed(KeyEvent keyEvent) { - int keyCode = keyEvent.getKeyCode(); - int modifiersMask = keyEvent.getModifiers(); - int modifiersExMask = keyEvent.getModifiersEx(); + keyBuffer = keyEvent.getKeyChar(); + hasInput = true; - System.out.println("Key Pressed #" + keyEvent.getKeyCode() + " : " + - KeyEvent.getKeyText(keyCode) + " MASK : " + - modifiersMask + " EXT MASK : " + - modifiersExMask - ); + System.out.println("Key Pressed (0x" + Integer.toString((int)keyBuffer, 16) + ") : " + keyBuffer); keyEvent.consume(); } + public boolean hasInput() { + return hasInput; + } + + public char readInputChar() { + hasInput = false; + return this.keyBuffer; + } + public void keyReleased(KeyEvent keyEvent) { keyEvent.consume(); }