/* * HalfNES by Andrew Hoffman * Licensed under the GNU GPL Version 3. See LICENSE file */ package com.grapeshot.halfnes.ui; import java.util.HashMap; 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; /** * @author Andrew */ public class DummyController implements ControllerInterface { //i wrote this to test a bug in the menu of one game. //if using this again, maybe a parser and some RLE would be appropriate? //or just make it load FCEUX movie files? int outbyte = 0; int latchbyte = 0; char[] input = ("000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000SSSSSSSSSSSSSS00000000000000000000000" + "00000000000000000000000000000AAAAAAAAAAAAAA00000000000000000000000" + "00000000000000000000000000000AAAAAAAAAAAAAA00000000000000000000000" + "00000000000000000000000000000AAAAAAAAAAAAAA00000000000000000000000" + "00000000000000000000000000000AAAAAAAAAAAAAA00000000000000000000000" + "00000000000000000000000000000AAAAAAAAAAAAAA00000000000000000000000" + "00000000000000000000000000000AAAAAAAAAAAAAA00000000000000000000000" + "00000000000000000000000000000AAAAAAAAAAAAAA00000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "000000000000000000000000000000000000000000000000000000000000000000" + "00000000000000000000000000000SSSSSSSSSSSSSS00000000000000000000000").toCharArray(); HashMap<Character, Integer> m = new HashMap<>(); int frame = 0; public DummyController(int controllernum) { m.put('0', 0x00); // Null m.put('U', BIT4); // Up m.put('D', BIT5); // Down m.put('L', BIT6); // Left m.put('R', BIT7); // Right m.put('A', BIT0); // A m.put('B', BIT1); // B m.put('s', BIT2); // Select m.put('S', BIT3); // Start } @Override public void strobe() { //shifts a byte out outbyte = latchbyte & 1; latchbyte = ((latchbyte >> 1) | 0x100); } @Override public void output(final boolean state) { if (frame < input.length) { latchbyte = m.get(input[frame]); } else { latchbyte = 0; } ++frame; } @Override public int peekOutput() { return latchbyte; } @Override public int getbyte() { return outbyte; } }