diff --git a/.vscode/arduino.json b/.vscode/arduino.json
new file mode 100644
index 0000000..23de594
--- /dev/null
+++ b/.vscode/arduino.json
@@ -0,0 +1,5 @@
+{
+ "board": "arduino:avr:uno",
+ "programmer": "arduino:avrispmkii",
+ "sketch": "SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino"
+}
\ No newline at end of file
diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..5c64436
--- /dev/null
+++ b/.vscode/c_cpp_properties.json
@@ -0,0 +1,538 @@
+{
+ "version": 4,
+ "configurations": [
+ {
+ "name": "Arduino",
+ "compilerPath": "/Users/graeme/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/bin/avr-g++",
+ "compilerArgs": [
+ "-w",
+ "-std=gnu++11",
+ "-fpermissive",
+ "-fno-exceptions",
+ "-ffunction-sections",
+ "-fdata-sections",
+ "-fno-threadsafe-statics",
+ "-Wno-error=narrowing"
+ ],
+ "intelliSenseMode": "gcc-x64",
+ "includePath": [
+ "/Users/graeme/Library/Arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino",
+ "/Users/graeme/Library/Arduino15/packages/arduino/hardware/avr/1.8.4/variants/standard",
+ "/Users/graeme/Projects/libraries/PS2KeyAdvanced/src",
+ "/Users/graeme/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/lib/gcc/avr/7.3.0/include",
+ "/Users/graeme/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/lib/gcc/avr/7.3.0/include-fixed",
+ "/Users/graeme/Library/Arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include"
+ ],
+ "forcedInclude": [
+ "/Users/graeme/Library/Arduino15/packages/arduino/hardware/avr/1.8.4/cores/arduino/Arduino.h"
+ ],
+ "cStandard": "c11",
+ "cppStandard": "c++11",
+ "defines": [
+ "F_CPU=16000000L",
+ "ARDUINO=10815",
+ "ARDUINO_AVR_UNO",
+ "ARDUINO_ARCH_AVR",
+ "__DBL_MIN_EXP__=(-125)",
+ "__HQ_FBIT__=15",
+ "__cpp_attributes=200809",
+ "__UINT_LEAST16_MAX__=0xffffU",
+ "__ATOMIC_ACQUIRE=2",
+ "__SFRACT_IBIT__=0",
+ "__FLT_MIN__=1.17549435e-38F",
+ "__GCC_IEC_559_COMPLEX=0",
+ "__BUILTIN_AVR_SLEEP=1",
+ "__BUILTIN_AVR_COUNTLSULLK=1",
+ "__cpp_aggregate_nsdmi=201304",
+ "__BUILTIN_AVR_COUNTLSULLR=1",
+ "__UFRACT_MAX__=0XFFFFP-16UR",
+ "__UINT_LEAST8_TYPE__=unsigned char",
+ "__DQ_FBIT__=63",
+ "__INTMAX_C(c)=c ## LL",
+ "__ULFRACT_FBIT__=32",
+ "__SACCUM_EPSILON__=0x1P-7HK",
+ "__CHAR_BIT__=8",
+ "__USQ_IBIT__=0",
+ "__UINT8_MAX__=0xff",
+ "__ACCUM_FBIT__=15",
+ "__WINT_MAX__=0x7fff",
+ "__FLT32_MIN_EXP__=(-125)",
+ "__cpp_static_assert=200410",
+ "__USFRACT_FBIT__=8",
+ "__ORDER_LITTLE_ENDIAN__=1234",
+ "__SIZE_MAX__=0xffffU",
+ "__WCHAR_MAX__=0x7fff",
+ "__LACCUM_IBIT__=32",
+ "__DBL_DENORM_MIN__=double(1.40129846e-45L)",
+ "__GCC_ATOMIC_CHAR_LOCK_FREE=1",
+ "__GCC_IEC_559=0",
+ "__FLT_EVAL_METHOD__=0",
+ "__BUILTIN_AVR_LLKBITS=1",
+ "__cpp_binary_literals=201304",
+ "__LLACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-47LLK",
+ "__GCC_ATOMIC_CHAR32_T_LOCK_FREE=1",
+ "__BUILTIN_AVR_HKBITS=1",
+ "__BUILTIN_AVR_BITSLLK=1",
+ "__FRACT_FBIT__=15",
+ "__BUILTIN_AVR_BITSLLR=1",
+ "__cpp_variadic_templates=200704",
+ "__UINT_FAST64_MAX__=0xffffffffffffffffULL",
+ "__SIG_ATOMIC_TYPE__=char",
+ "__BUILTIN_AVR_UHKBITS=1",
+ "__UACCUM_FBIT__=16",
+ "__DBL_MIN_10_EXP__=(-37)",
+ "__FINITE_MATH_ONLY__=0",
+ "__cpp_variable_templates=201304",
+ "__LFRACT_IBIT__=0",
+ "__GNUC_PATCHLEVEL__=0",
+ "__FLT32_HAS_DENORM__=1",
+ "__LFRACT_MAX__=0X7FFFFFFFP-31LR",
+ "__UINT_FAST8_MAX__=0xff",
+ "__has_include(STR)=__has_include__(STR)",
+ "__DEC64_MAX_EXP__=385",
+ "__INT8_C(c)=c",
+ "__INT_LEAST8_WIDTH__=8",
+ "__UINT_LEAST64_MAX__=0xffffffffffffffffULL",
+ "__SA_FBIT__=15",
+ "__SHRT_MAX__=0x7fff",
+ "__LDBL_MAX__=3.40282347e+38L",
+ "__FRACT_MAX__=0X7FFFP-15R",
+ "__UFRACT_FBIT__=16",
+ "__UFRACT_MIN__=0.0UR",
+ "__UINT_LEAST8_MAX__=0xff",
+ "__GCC_ATOMIC_BOOL_LOCK_FREE=1",
+ "__UINTMAX_TYPE__=long long unsigned int",
+ "__LLFRACT_EPSILON__=0x1P-63LLR",
+ "__BUILTIN_AVR_DELAY_CYCLES=1",
+ "__DEC32_EPSILON__=1E-6DF",
+ "__FLT_EVAL_METHOD_TS_18661_3__=0",
+ "__UINT32_MAX__=0xffffffffUL",
+ "__GXX_EXPERIMENTAL_CXX0X__=1",
+ "__ULFRACT_MAX__=0XFFFFFFFFP-32ULR",
+ "__TA_IBIT__=16",
+ "__LDBL_MAX_EXP__=128",
+ "__WINT_MIN__=(-__WINT_MAX__ - 1)",
+ "__INT_LEAST16_WIDTH__=16",
+ "__ULLFRACT_MIN__=0.0ULLR",
+ "__SCHAR_MAX__=0x7f",
+ "__WCHAR_MIN__=(-__WCHAR_MAX__ - 1)",
+ "__INT64_C(c)=c ## LL",
+ "__DBL_DIG__=6",
+ "__GCC_ATOMIC_POINTER_LOCK_FREE=1",
+ "__AVR_HAVE_SPH__=1",
+ "__LLACCUM_MIN__=(-0X1P15LLK-0X1P15LLK)",
+ "__BUILTIN_AVR_KBITS=1",
+ "__BUILTIN_AVR_ABSK=1",
+ "__BUILTIN_AVR_ABSR=1",
+ "__SIZEOF_INT__=2",
+ "__SIZEOF_POINTER__=2",
+ "__GCC_ATOMIC_CHAR16_T_LOCK_FREE=1",
+ "__USACCUM_IBIT__=8",
+ "__USER_LABEL_PREFIX__",
+ "__STDC_HOSTED__=1",
+ "__LDBL_HAS_INFINITY__=1",
+ "__LFRACT_MIN__=(-0.5LR-0.5LR)",
+ "__HA_IBIT__=8",
+ "__FLT32_DIG__=6",
+ "__TQ_IBIT__=0",
+ "__FLT_EPSILON__=1.19209290e-7F",
+ "__GXX_WEAK__=1",
+ "__SHRT_WIDTH__=16",
+ "__USFRACT_IBIT__=0",
+ "__LDBL_MIN__=1.17549435e-38L",
+ "__FRACT_MIN__=(-0.5R-0.5R)",
+ "__AVR_SFR_OFFSET__=0x20",
+ "__DEC32_MAX__=9.999999E96DF",
+ "__cpp_threadsafe_static_init=200806",
+ "__DA_IBIT__=32",
+ "__INT32_MAX__=0x7fffffffL",
+ "__UQQ_FBIT__=8",
+ "__INT_WIDTH__=16",
+ "__SIZEOF_LONG__=4",
+ "__UACCUM_MAX__=0XFFFFFFFFP-16UK",
+ "__UINT16_C(c)=c ## U",
+ "__PTRDIFF_WIDTH__=16",
+ "__DECIMAL_DIG__=9",
+ "__LFRACT_EPSILON__=0x1P-31LR",
+ "__AVR_2_BYTE_PC__=1",
+ "__ULFRACT_MIN__=0.0ULR",
+ "__INTMAX_WIDTH__=64",
+ "__has_include_next(STR)=__has_include_next__(STR)",
+ "__BUILTIN_AVR_ULLRBITS=1",
+ "__LDBL_HAS_QUIET_NAN__=1",
+ "__ULACCUM_IBIT__=32",
+ "__UACCUM_EPSILON__=0x1P-16UK",
+ "__BUILTIN_AVR_SEI=1",
+ "__GNUC__=7",
+ "__ULLACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-48ULLK",
+ "__cpp_delegating_constructors=200604",
+ "__HQ_IBIT__=0",
+ "__BUILTIN_AVR_SWAP=1",
+ "__FLT_HAS_DENORM__=1",
+ "__SIZEOF_LONG_DOUBLE__=4",
+ "__BIGGEST_ALIGNMENT__=1",
+ "__STDC_UTF_16__=1",
+ "__UINT24_MAX__=16777215UL",
+ "__BUILTIN_AVR_NOP=1",
+ "__GNUC_STDC_INLINE__=1",
+ "__DQ_IBIT__=0",
+ "__FLT32_HAS_INFINITY__=1",
+ "__DBL_MAX__=double(3.40282347e+38L)",
+ "__ULFRACT_IBIT__=0",
+ "__cpp_raw_strings=200710",
+ "__INT_FAST32_MAX__=0x7fffffffL",
+ "__DBL_HAS_INFINITY__=1",
+ "__INT64_MAX__=0x7fffffffffffffffLL",
+ "__ACCUM_IBIT__=16",
+ "__DEC32_MIN_EXP__=(-94)",
+ "__BUILTIN_AVR_UKBITS=1",
+ "__INTPTR_WIDTH__=16",
+ "__BUILTIN_AVR_FMULSU=1",
+ "__LACCUM_MAX__=0X7FFFFFFFFFFFFFFFP-31LK",
+ "__INT_FAST16_TYPE__=int",
+ "__LDBL_HAS_DENORM__=1",
+ "__BUILTIN_AVR_BITSK=1",
+ "__BUILTIN_AVR_BITSR=1",
+ "__cplusplus=201402L",
+ "__cpp_ref_qualifiers=200710",
+ "__DEC128_MAX__=9.999999999999999999999999999999999E6144DL",
+ "__INT_LEAST32_MAX__=0x7fffffffL",
+ "__USING_SJLJ_EXCEPTIONS__=1",
+ "__DEC32_MIN__=1E-95DF",
+ "__ACCUM_MAX__=0X7FFFFFFFP-15K",
+ "__DEPRECATED=1",
+ "__cpp_rvalue_references=200610",
+ "__DBL_MAX_EXP__=128",
+ "__USACCUM_EPSILON__=0x1P-8UHK",
+ "__WCHAR_WIDTH__=16",
+ "__FLT32_MAX__=3.40282347e+38F32",
+ "__DEC128_EPSILON__=1E-33DL",
+ "__SFRACT_MAX__=0X7FP-7HR",
+ "__FRACT_IBIT__=0",
+ "__PTRDIFF_MAX__=0x7fff",
+ "__UACCUM_MIN__=0.0UK",
+ "__UACCUM_IBIT__=16",
+ "__BUILTIN_AVR_NOPS=1",
+ "__BUILTIN_AVR_WDR=1",
+ "__FLT32_HAS_QUIET_NAN__=1",
+ "__GNUG__=7",
+ "__LONG_LONG_MAX__=0x7fffffffffffffffLL",
+ "__SIZEOF_SIZE_T__=2",
+ "__ULACCUM_MAX__=0XFFFFFFFFFFFFFFFFP-32ULK",
+ "__cpp_rvalue_reference=200610",
+ "__cpp_nsdmi=200809",
+ "__SIZEOF_WINT_T__=2",
+ "__LONG_LONG_WIDTH__=64",
+ "__cpp_initializer_lists=200806",
+ "__FLT32_MAX_EXP__=128",
+ "__SA_IBIT__=16",
+ "__ULLACCUM_MIN__=0.0ULLK",
+ "__BUILTIN_AVR_ROUNDUHK=1",
+ "__BUILTIN_AVR_ROUNDUHR=1",
+ "__cpp_hex_float=201603",
+ "__GXX_ABI_VERSION=1011",
+ "__INT24_MAX__=8388607L",
+ "__UTA_FBIT__=48",
+ "__FLT_MIN_EXP__=(-125)",
+ "__USFRACT_MAX__=0XFFP-8UHR",
+ "__UFRACT_IBIT__=0",
+ "__BUILTIN_AVR_ROUNDFX=1",
+ "__BUILTIN_AVR_ROUNDULK=1",
+ "__BUILTIN_AVR_ROUNDULR=1",
+ "__cpp_lambdas=200907",
+ "__BUILTIN_AVR_COUNTLSLLK=1",
+ "__BUILTIN_AVR_COUNTLSLLR=1",
+ "__BUILTIN_AVR_ROUNDHK=1",
+ "__INT_FAST64_TYPE__=long long int",
+ "__BUILTIN_AVR_ROUNDHR=1",
+ "__DBL_MIN__=double(1.17549435e-38L)",
+ "__BUILTIN_AVR_COUNTLSK=1",
+ "__BUILTIN_AVR_ROUNDLK=1",
+ "__BUILTIN_AVR_COUNTLSR=1",
+ "__BUILTIN_AVR_ROUNDLR=1",
+ "__LACCUM_MIN__=(-0X1P31LK-0X1P31LK)",
+ "__ULLACCUM_FBIT__=48",
+ "__BUILTIN_AVR_LKBITS=1",
+ "__ULLFRACT_EPSILON__=0x1P-64ULLR",
+ "__DEC128_MIN__=1E-6143DL",
+ "__REGISTER_PREFIX__",
+ "__UINT16_MAX__=0xffffU",
+ "__DBL_HAS_DENORM__=1",
+ "__BUILTIN_AVR_ULKBITS=1",
+ "__ACCUM_MIN__=(-0X1P15K-0X1P15K)",
+ "__AVR_ARCH__=2",
+ "__SQ_IBIT__=0",
+ "__FLT32_MIN__=1.17549435e-38F32",
+ "__UINT8_TYPE__=unsigned char",
+ "__BUILTIN_AVR_ROUNDUK=1",
+ "__BUILTIN_AVR_ROUNDUR=1",
+ "__UHA_FBIT__=8",
+ "__NO_INLINE__=1",
+ "__SFRACT_MIN__=(-0.5HR-0.5HR)",
+ "__UTQ_FBIT__=128",
+ "__FLT_MANT_DIG__=24",
+ "__LDBL_DECIMAL_DIG__=9",
+ "__VERSION__=\"7.3.0\"",
+ "__UINT64_C(c)=c ## ULL",
+ "__ULLFRACT_FBIT__=64",
+ "__cpp_unicode_characters=200704",
+ "__FRACT_EPSILON__=0x1P-15R",
+ "__ULACCUM_MIN__=0.0ULK",
+ "__UDA_FBIT__=32",
+ "__cpp_decltype_auto=201304",
+ "__LLACCUM_EPSILON__=0x1P-47LLK",
+ "__GCC_ATOMIC_INT_LOCK_FREE=1",
+ "__FLT32_MANT_DIG__=24",
+ "__BUILTIN_AVR_BITSUHK=1",
+ "__BUILTIN_AVR_BITSUHR=1",
+ "__FLOAT_WORD_ORDER__=__ORDER_LITTLE_ENDIAN__",
+ "__USFRACT_MIN__=0.0UHR",
+ "__BUILTIN_AVR_BITSULK=1",
+ "__ULLACCUM_IBIT__=16",
+ "__BUILTIN_AVR_BITSULR=1",
+ "__UQQ_IBIT__=0",
+ "__BUILTIN_AVR_LLRBITS=1",
+ "__SCHAR_WIDTH__=8",
+ "__BUILTIN_AVR_BITSULLK=1",
+ "__BUILTIN_AVR_BITSULLR=1",
+ "__INT32_C(c)=c ## L",
+ "__DEC64_EPSILON__=1E-15DD",
+ "__ORDER_PDP_ENDIAN__=3412",
+ "__DEC128_MIN_EXP__=(-6142)",
+ "__UHQ_FBIT__=16",
+ "__LLACCUM_FBIT__=47",
+ "__FLT32_MAX_10_EXP__=38",
+ "__BUILTIN_AVR_ROUNDULLK=1",
+ "__BUILTIN_AVR_ROUNDULLR=1",
+ "__INT_FAST32_TYPE__=long int",
+ "__BUILTIN_AVR_HRBITS=1",
+ "__UINT_LEAST16_TYPE__=unsigned int",
+ "__BUILTIN_AVR_UHRBITS=1",
+ "__INT16_MAX__=0x7fff",
+ "__SIZE_TYPE__=unsigned int",
+ "__UINT64_MAX__=0xffffffffffffffffULL",
+ "__UDQ_FBIT__=64",
+ "__INT8_TYPE__=signed char",
+ "__cpp_digit_separators=201309",
+ "__ELF__=1",
+ "__ULFRACT_EPSILON__=0x1P-32ULR",
+ "__LLFRACT_FBIT__=63",
+ "__FLT_RADIX__=2",
+ "__INT_LEAST16_TYPE__=int",
+ "__BUILTIN_AVR_ABSFX=1",
+ "__LDBL_EPSILON__=1.19209290e-7L",
+ "__UINTMAX_C(c)=c ## ULL",
+ "__INT24_MIN__=(-__INT24_MAX__-1)",
+ "__SACCUM_MAX__=0X7FFFP-7HK",
+ "__BUILTIN_AVR_ABSHR=1",
+ "__SIG_ATOMIC_MAX__=0x7f",
+ "__GCC_ATOMIC_WCHAR_T_LOCK_FREE=1",
+ "__cpp_sized_deallocation=201309",
+ "__SIZEOF_PTRDIFF_T__=2",
+ "__AVR=1",
+ "__BUILTIN_AVR_ABSLK=1",
+ "__BUILTIN_AVR_ABSLR=1",
+ "__LACCUM_EPSILON__=0x1P-31LK",
+ "__DEC32_SUBNORMAL_MIN__=0.000001E-95DF",
+ "__INT_FAST16_MAX__=0x7fff",
+ "__UINT_FAST32_MAX__=0xffffffffUL",
+ "__UINT_LEAST64_TYPE__=long long unsigned int",
+ "__USACCUM_MAX__=0XFFFFP-8UHK",
+ "__SFRACT_EPSILON__=0x1P-7HR",
+ "__FLT_HAS_QUIET_NAN__=1",
+ "__FLT_MAX_10_EXP__=38",
+ "__LONG_MAX__=0x7fffffffL",
+ "__DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL",
+ "__FLT_HAS_INFINITY__=1",
+ "__cpp_unicode_literals=200710",
+ "__USA_FBIT__=16",
+ "__UINT_FAST16_TYPE__=unsigned int",
+ "__DEC64_MAX__=9.999999999999999E384DD",
+ "__INT_FAST32_WIDTH__=32",
+ "__BUILTIN_AVR_RBITS=1",
+ "__CHAR16_TYPE__=unsigned int",
+ "__PRAGMA_REDEFINE_EXTNAME=1",
+ "__SIZE_WIDTH__=16",
+ "__INT_LEAST16_MAX__=0x7fff",
+ "__DEC64_MANT_DIG__=16",
+ "__UINT_LEAST32_MAX__=0xffffffffUL",
+ "__SACCUM_FBIT__=7",
+ "__FLT32_DENORM_MIN__=1.40129846e-45F32",
+ "__GCC_ATOMIC_LONG_LOCK_FREE=1",
+ "__SIG_ATOMIC_WIDTH__=8",
+ "__INT_LEAST64_TYPE__=long long int",
+ "__INT16_TYPE__=int",
+ "__INT_LEAST8_TYPE__=signed char",
+ "__SQ_FBIT__=31",
+ "__DEC32_MAX_EXP__=97",
+ "__INT_FAST8_MAX__=0x7f",
+ "__INTPTR_MAX__=0x7fff",
+ "__QQ_FBIT__=7",
+ "__cpp_range_based_for=200907",
+ "__UTA_IBIT__=16",
+ "__AVR_ERRATA_SKIP__=1",
+ "__FLT32_MIN_10_EXP__=(-37)",
+ "__LDBL_MANT_DIG__=24",
+ "__SFRACT_FBIT__=7",
+ "__SACCUM_MIN__=(-0X1P7HK-0X1P7HK)",
+ "__DBL_HAS_QUIET_NAN__=1",
+ "__SIG_ATOMIC_MIN__=(-__SIG_ATOMIC_MAX__ - 1)",
+ "AVR=1",
+ "__BUILTIN_AVR_FMULS=1",
+ "__cpp_return_type_deduction=201304",
+ "__INTPTR_TYPE__=int",
+ "__UINT16_TYPE__=unsigned int",
+ "__WCHAR_TYPE__=int",
+ "__SIZEOF_FLOAT__=4",
+ "__AVR__=1",
+ "__BUILTIN_AVR_INSERT_BITS=1",
+ "__USQ_FBIT__=32",
+ "__UINTPTR_MAX__=0xffffU",
+ "__INT_FAST64_WIDTH__=64",
+ "__DEC64_MIN_EXP__=(-382)",
+ "__cpp_decltype=200707",
+ "__FLT32_DECIMAL_DIG__=9",
+ "__INT_FAST64_MAX__=0x7fffffffffffffffLL",
+ "__GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1",
+ "__FLT_DIG__=6",
+ "__UINT_FAST64_TYPE__=long long unsigned int",
+ "__BUILTIN_AVR_BITSHK=1",
+ "__BUILTIN_AVR_BITSHR=1",
+ "__INT_MAX__=0x7fff",
+ "__LACCUM_FBIT__=31",
+ "__USACCUM_MIN__=0.0UHK",
+ "__UHA_IBIT__=8",
+ "__INT64_TYPE__=long long int",
+ "__BUILTIN_AVR_BITSLK=1",
+ "__BUILTIN_AVR_BITSLR=1",
+ "__FLT_MAX_EXP__=128",
+ "__UTQ_IBIT__=0",
+ "__DBL_MANT_DIG__=24",
+ "__cpp_inheriting_constructors=201511",
+ "__BUILTIN_AVR_ULLKBITS=1",
+ "__INT_LEAST64_MAX__=0x7fffffffffffffffLL",
+ "__DEC64_MIN__=1E-383DD",
+ "__WINT_TYPE__=int",
+ "__UINT_LEAST32_TYPE__=long unsigned int",
+ "__SIZEOF_SHORT__=2",
+ "__ULLFRACT_IBIT__=0",
+ "__LDBL_MIN_EXP__=(-125)",
+ "__UDA_IBIT__=32",
+ "__WINT_WIDTH__=16",
+ "__INT_LEAST8_MAX__=0x7f",
+ "__LFRACT_FBIT__=31",
+ "__LDBL_MAX_10_EXP__=38",
+ "__ATOMIC_RELAXED=0",
+ "__DBL_EPSILON__=double(1.19209290e-7L)",
+ "__BUILTIN_AVR_BITSUK=1",
+ "__BUILTIN_AVR_BITSUR=1",
+ "__UINT8_C(c)=c",
+ "__INT_LEAST32_TYPE__=long int",
+ "__BUILTIN_AVR_URBITS=1",
+ "__SIZEOF_WCHAR_T__=2",
+ "__LLFRACT_MAX__=0X7FFFFFFFFFFFFFFFP-63LLR",
+ "__TQ_FBIT__=127",
+ "__INT_FAST8_TYPE__=signed char",
+ "__ULLACCUM_EPSILON__=0x1P-48ULLK",
+ "__BUILTIN_AVR_ROUNDK=1",
+ "__BUILTIN_AVR_ROUNDR=1",
+ "__UHQ_IBIT__=0",
+ "__LLACCUM_IBIT__=16",
+ "__FLT32_EPSILON__=1.19209290e-7F32",
+ "__DBL_DECIMAL_DIG__=9",
+ "__STDC_UTF_32__=1",
+ "__INT_FAST8_WIDTH__=8",
+ "__DEC_EVAL_METHOD__=2",
+ "__TA_FBIT__=47",
+ "__UDQ_IBIT__=0",
+ "__ORDER_BIG_ENDIAN__=4321",
+ "__cpp_runtime_arrays=198712",
+ "__WITH_AVRLIBC__=1",
+ "__UINT64_TYPE__=long long unsigned int",
+ "__ACCUM_EPSILON__=0x1P-15K",
+ "__UINT32_C(c)=c ## UL",
+ "__BUILTIN_AVR_COUNTLSUHK=1",
+ "__INTMAX_MAX__=0x7fffffffffffffffLL",
+ "__cpp_alias_templates=200704",
+ "__BUILTIN_AVR_COUNTLSUHR=1",
+ "__BYTE_ORDER__=__ORDER_LITTLE_ENDIAN__",
+ "__FLT_DENORM_MIN__=1.40129846e-45F",
+ "__LLFRACT_IBIT__=0",
+ "__INT8_MAX__=0x7f",
+ "__LONG_WIDTH__=32",
+ "__UINT_FAST32_TYPE__=long unsigned int",
+ "__CHAR32_TYPE__=long unsigned int",
+ "__BUILTIN_AVR_COUNTLSULK=1",
+ "__BUILTIN_AVR_COUNTLSULR=1",
+ "__FLT_MAX__=3.40282347e+38F",
+ "__cpp_constexpr=201304",
+ "__USACCUM_FBIT__=8",
+ "__BUILTIN_AVR_COUNTLSFX=1",
+ "__INT32_TYPE__=long int",
+ "__SIZEOF_DOUBLE__=4",
+ "__FLT_MIN_10_EXP__=(-37)",
+ "__UFRACT_EPSILON__=0x1P-16UR",
+ "__INT_LEAST32_WIDTH__=32",
+ "__BUILTIN_AVR_COUNTLSHK=1",
+ "__BUILTIN_AVR_COUNTLSHR=1",
+ "__INTMAX_TYPE__=long long int",
+ "__BUILTIN_AVR_ABSLLK=1",
+ "__BUILTIN_AVR_ABSLLR=1",
+ "__DEC128_MAX_EXP__=6145",
+ "__AVR_HAVE_16BIT_SP__=1",
+ "__ATOMIC_CONSUME=1",
+ "__GNUC_MINOR__=3",
+ "__INT_FAST16_WIDTH__=16",
+ "__UINTMAX_MAX__=0xffffffffffffffffULL",
+ "__DEC32_MANT_DIG__=7",
+ "__HA_FBIT__=7",
+ "__BUILTIN_AVR_COUNTLSLK=1",
+ "__BUILTIN_AVR_COUNTLSLR=1",
+ "__BUILTIN_AVR_CLI=1",
+ "__DBL_MAX_10_EXP__=38",
+ "__LDBL_DENORM_MIN__=1.40129846e-45L",
+ "__INT16_C(c)=c",
+ "__cpp_generic_lambdas=201304",
+ "__STDC__=1",
+ "__PTRDIFF_TYPE__=int",
+ "__LLFRACT_MIN__=(-0.5LLR-0.5LLR)",
+ "__BUILTIN_AVR_LRBITS=1",
+ "__ATOMIC_SEQ_CST=5",
+ "__DA_FBIT__=31",
+ "__UINT32_TYPE__=long unsigned int",
+ "__BUILTIN_AVR_ROUNDLLK=1",
+ "__UINTPTR_TYPE__=unsigned int",
+ "__BUILTIN_AVR_ROUNDLLR=1",
+ "__USA_IBIT__=16",
+ "__BUILTIN_AVR_ULRBITS=1",
+ "__DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD",
+ "__DEC128_MANT_DIG__=34",
+ "__LDBL_MIN_10_EXP__=(-37)",
+ "__BUILTIN_AVR_COUNTLSUK=1",
+ "__BUILTIN_AVR_COUNTLSUR=1",
+ "__SIZEOF_LONG_LONG__=8",
+ "__ULACCUM_EPSILON__=0x1P-32ULK",
+ "__cpp_user_defined_literals=200809",
+ "__SACCUM_IBIT__=8",
+ "__GCC_ATOMIC_LLONG_LOCK_FREE=1",
+ "__LDBL_DIG__=6",
+ "__FLT_DECIMAL_DIG__=9",
+ "__UINT_FAST16_MAX__=0xffffU",
+ "__GCC_ATOMIC_SHORT_LOCK_FREE=1",
+ "__BUILTIN_AVR_ABSHK=1",
+ "__BUILTIN_AVR_FLASH_SEGMENT=1",
+ "__INT_LEAST64_WIDTH__=64",
+ "__ULLFRACT_MAX__=0XFFFFFFFFFFFFFFFFP-64ULLR",
+ "__UINT_FAST8_TYPE__=unsigned char",
+ "__USFRACT_EPSILON__=0x1P-8UHR",
+ "__ULACCUM_FBIT__=32",
+ "__QQ_IBIT__=0",
+ "__cpp_init_captures=201304",
+ "__ATOMIC_ACQ_REL=4",
+ "__ATOMIC_RELEASE=3",
+ "__BUILTIN_AVR_FMUL=1",
+ "USBCON"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino b/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino
index 7408ab3..c606eb6 100644
--- a/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino
+++ b/SmartyKit 1 basic drivers/SmartyKit1_KeyboardDriverBasic/SmartyKit1_KeyboardDriverBasic.ino
@@ -15,7 +15,7 @@
along with this program. If not, see .
*/
-#include "PS2Keyboard.h"
+#include
// Keyboard Driver pins connections:
// D0 & D1 – reserved for Serial connection
@@ -27,40 +27,41 @@
// A4 -> Low-rate clock output for CPU CLK input
// A5 -> Low-rate clock output for indicating LED connection
-const int PS2Socket_Data = 2;
-const int CPUreadsKeyboardPin = 3;
-const int PS2Socket_Clk = 4;
+#define PS2KEYBOARDCLOCK_PIN 2
+#define CPU_READSKEYBOARD_PIN 3
+#define PS2KEYBOARD_DATA_PIN 4
+#define KEYBOARD_BIT7_PIN 5
-
-const int KeyboardBIT7pin = 5; //
-const int DataBus[8] = {6, 7, 8, 9, 10, 11, 12, 13};
+const int KeyboardPort[8] = {6, 7, 8, 9, 10, 11, 12, 13};
static boolean BIT7flag = false;
-static boolean autoMode = true; //run pre-set command or wait for user input from PS/2 keyboard
+static boolean autoMode = false; //run pre-set command or wait for user input from PS/2 keyboard
static boolean autoCommandSent = false; // run pre-set command only once after reboot of Keyboard controller
//low-rate clock for tests on A4-A5
-#define CLOCK A4
-#define LED A5
-int lowRateClockPeriod = 10; //10 milliseconds = 100 times per second (100 Hz)
+#define LORATE_CLOCK_PIN A4
+#define LORATE_CLOCK_LED_PIN A5
+
+//10 milliseconds = 100 times per second (100 Hz)
+#define LORATE_CLOCK_PERIOD_MILLIS 10
//#define _WITH_SERIAL_
#define _WITH_PS2_
#ifdef _WITH_PS2_
-PS2Keyboard keyboard;
+PS2KeyAdvanced keyboard;
#endif
void setup()
{
- pinMode(CLOCK, OUTPUT);
- pinMode(LED, OUTPUT);
+ pinMode(LORATE_CLOCK_PIN, OUTPUT);
+ pinMode(LORATE_CLOCK_LED_PIN, OUTPUT);
- pinMode(CPUreadsKeyboardPin, INPUT_PULLUP);
+ pinMode(CPU_READSKEYBOARD_PIN, INPUT_PULLUP);
- for (int count = 1; count <= 8; count++) {
- pinMode(DataBus[count-1], OUTPUT);
+ for (int bit = 0; bit < 8; bit++) {
+ pinMode(KeyboardPort[bit], OUTPUT);
};
- pinMode(KeyboardBIT7pin, OUTPUT);
+ pinMode(KEYBOARD_BIT7_PIN, OUTPUT);
KeyboardBIT7_Disable();
if (autoMode)
@@ -69,7 +70,8 @@ void setup()
delay(500);
#ifdef _WITH_PS2_
- keyboard.begin(PS2Socket_Clk, PS2Socket_Data);
+ keyboard.begin(PS2KEYBOARD_DATA_PIN, PS2KEYBOARDCLOCK_PIN);
+ keyboard.echo();
#endif
attachInterrupt(1, cpuReadsKeyboard, FALLING);
@@ -86,12 +88,13 @@ void cpuReadsKeyboard(void)
void KeyboardBIT7_Enable()
{
- digitalWrite(KeyboardBIT7pin, HIGH);
+ digitalWrite(KEYBOARD_BIT7_PIN, HIGH);
BIT7flag = true;
}
+
void KeyboardBIT7_Disable()
{
- digitalWrite(KeyboardBIT7pin, LOW);
+ digitalWrite(KEYBOARD_BIT7_PIN, LOW);
BIT7flag = false;
}
@@ -100,14 +103,14 @@ void sendCharToKeyboardPort(char c)
while(BIT7flag == true) //wait untill the previous char is read by CPU
delay(5);
- for (int count = 1; count <= 8 ; count++)
+ for (int bit = 0; bit < 8 ; bit++)
{
- if (c & (1 << (count-1)))
- digitalWrite(DataBus[count-1], HIGH);
+ if (c & (1 << (bit)))
+ digitalWrite(KeyboardPort[bit], HIGH);
else
- digitalWrite(DataBus[count-1], LOW);
+ digitalWrite(KeyboardPort[bit], LOW);
}
- digitalWrite(DataBus[7], HIGH);
+ digitalWrite(KeyboardPort[7], HIGH);
KeyboardBIT7_Enable();
}
@@ -124,26 +127,24 @@ void loop() {
#ifdef _WITH_PS2_
//check PS2 input
if (keyboard.available()) {
- char c = keyboard.read();
+ uint16_t scan_code = keyboard.read();
+ char c = scan_code & 0xff;
- if (c == PS2_TAB)
+ if (c == PS2_KEY_TAB)
runCommand();
//process Backspace, Left Arrow, Delete as Apple I backspace '_'
- if (c == PS2_BACKSPACE) {
+ if (c == PS2_KEY_BACK) {
c = '_';
- } else if (c == PS2_LEFTARROW) {
+ } else if (c == PS2_KEY_L_ARROW) {
c = '_';
- } else if (c == PS2_DELETE) {
+ } else if (c == PS2_KEY_DELETE) {
c = '_';
}
- int scan_code = (int)c;
//make all symbols uppercase (from 'a' (ASCII code 0x61) to 'z' (ASCII code 0x7A))
//as in original Apple-1
- if (scan_code >= 0x61 && scan_code <= 0x7A)
- scan_code -= 0x20;
- c = (char) scan_code;
+ c = toupper(c);
//print c to Keyboard Port to be read by CPU
sendCharToKeyboardPort(c);
#ifdef _WITH_SERIAL_
@@ -155,12 +156,12 @@ void loop() {
#endif
//low-rate clock
- digitalWrite(CLOCK, HIGH);
- digitalWrite(LED, HIGH);
- delay(lowRateClockPeriod); // wait for a lowRateClockPeriod
- digitalWrite(CLOCK, LOW);
- digitalWrite(LED, LOW);
- delay(lowRateClockPeriod); // wait for a lowRateClockPeriod
+ digitalWrite(LORATE_CLOCK_PIN, HIGH);
+ digitalWrite(LORATE_CLOCK_LED_PIN, HIGH);
+ delay(LORATE_CLOCK_PERIOD_MILLIS); // wait for a LORATE_CLOCK_PERIOD_MILLIS
+ digitalWrite(LORATE_CLOCK_PIN, LOW);
+ digitalWrite(LORATE_CLOCK_LED_PIN, LOW);
+ delay(LORATE_CLOCK_PERIOD_MILLIS); // wait for a LORATE_CLOCK_PERIOD_MILLIS
}
//running pre-set Woz OS command for auto mode