package com.grapeshot.halfnes.ui; import static com.grapeshot.halfnes.utils.BIT0; import static com.grapeshot.halfnes.utils.BIT1; import static com.grapeshot.halfnes.utils.BIT2; import static com.grapeshot.halfnes.utils.BIT3; import static com.grapeshot.halfnes.utils.BIT4; import static com.grapeshot.halfnes.utils.BIT5; import static com.grapeshot.halfnes.utils.BIT6; import static com.grapeshot.halfnes.utils.BIT7; /** * Created by skaggsm on 12/5/15. */ public class PuppetController implements ControllerInterface { private int latchbyte = 0, controllerbyte = 0, outbyte = 0; @Override public void strobe() { //shifts a byte out outbyte = latchbyte & 1; latchbyte = ((latchbyte >> 1) | 0x100); } @Override public void output(boolean state) { latchbyte = controllerbyte; } @Override public int peekOutput() { return latchbyte; } @Override public int getbyte() { return outbyte; } public void resetButtons() { controllerbyte = 0; } public void releaseButton(Button button) { switch (button) { case UP: controllerbyte &= ~BIT4; break; case DOWN: controllerbyte &= ~BIT5; break; case LEFT: controllerbyte &= ~BIT6; break; case RIGHT: controllerbyte &= ~BIT7; break; case A: controllerbyte &= ~BIT0; break; case B: controllerbyte &= ~BIT1; break; case SELECT: controllerbyte &= ~BIT2; break; case START: controllerbyte &= ~BIT3; break; } } public void pressButton(Button button) { switch (button) { case UP: controllerbyte |= BIT4; break; case DOWN: controllerbyte |= BIT5; break; case LEFT: controllerbyte |= BIT6; break; case RIGHT: controllerbyte |= BIT7; break; case A: controllerbyte |= BIT0; break; case B: controllerbyte |= BIT1; break; case SELECT: controllerbyte |= BIT2; break; case START: controllerbyte |= BIT3; break; } } public enum Button { UP, DOWN, LEFT, RIGHT, A, B, SELECT, START } }