// Path: jbbvm/bbvm-core/src/main/java/me/wener/bbvm/dev/InputManager.java
// public interface InputManager {
// 
//     boolean isKeyPressed(int key);
// 
//     /**
//      * @return Wait any key or mouse click.
//      */
//     int waitKey();
// 
//     /**
//      * Test is there any key press or mouse click.
//      */
//     int inKey();
// 
//     String inKeyString();
// 
//     /**
//      * @return read a string, use Enter of confirm.
//      */
//     String readText();
// 
//     default int makeClickKey(int x, int y) {
//         return x | 0x80000000 | (y << 16);
//     }
// 
//     default int getX(int key) {
//         return key & 0xFFFF;
//     }
// 
//     default int getY(int key) {
//         return key >>> 16 ^ 0x8000;
//     }
// }
// 
// Path: jbbvm/bbvm-core/src/main/java/me/wener/bbvm/vm/Register.java
// public interface Register extends Value<Register> {
//     RegisterType getType();
// }


import me.wener.bbvm.dev.InputManager;
import me.wener.bbvm.vm.Register;
import me.wener.bbvm.vm.SystemInvoke;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;
package me.wener.bbvm.vm.invoke;



/**
 * @author wener
 * @since 15/12/20
 */
public class KeyInvoke {
    private final static Logger log = LoggerFactory.getLogger(KeyInvoke.class);
    private final Register r3;
    private final Register r2;
    private final Register r1;
    private final Register r0;
    private InputManager inputManager;

    @Inject
// Path: jbbvm/bbvm-core/src/main/java/me/wener/bbvm/dev/InputManager.java
// public interface InputManager {
// 
//     boolean isKeyPressed(int key);
// 
//     /**
//      * @return Wait any key or mouse click.
//      */
//     int waitKey();
// 
//     /**
//      * Test is there any key press or mouse click.
//      */
//     int inKey();
// 
//     String inKeyString();
// 
//     /**
//      * @return read a string, use Enter of confirm.
//      */
//     String readText();
// 
//     default int makeClickKey(int x, int y) {
//         return x | 0x80000000 | (y << 16);
//     }
// 
//     default int getX(int key) {
//         return key & 0xFFFF;
//     }
// 
//     default int getY(int key) {
//         return key >>> 16 ^ 0x8000;
//     }
// }
// 
// Path: jbbvm/bbvm-core/src/main/java/me/wener/bbvm/vm/Register.java
// public interface Register extends Value<Register> {
//     RegisterType getType();
// }


// Path: jbbvm/bbvm-core/src/main/java/me/wener/bbvm/vm/invoke/KeyInvoke.java
import me.wener.bbvm.dev.InputManager;
import me.wener.bbvm.vm.Register;
import me.wener.bbvm.vm.SystemInvoke;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.inject.Inject;
import javax.inject.Named;

package me.wener.bbvm.vm.invoke;



/**
 * @author wener
 * @since 15/12/20
 */
public class KeyInvoke {
    private final static Logger log = LoggerFactory.getLogger(KeyInvoke.class);
    private final Register r3;
    private final Register r2;
    private final Register r1;
    private final Register r0;
    private InputManager inputManager;

    @Inject
    public KeyInvoke(@Named("R3") Register r3, @Named("R2") Register r2, @Named("R1") Register r1, @Named("R0") Register r0, InputManager inputManager) {