Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
1182 lines (1153 sloc) 26.7 KB
package io
import (
"log"
"time"
"github.com/djhworld/simple-computer/circuit"
"github.com/djhworld/simple-computer/components"
)
const BUS_WIDTH = 16
type KeyPress struct {
Value int
IsDown bool
}
// [cpu] <-------------> keyboard adapter <----------- keyboard <----------- [keyPressChannel]
// read/write write notify
type KeyboardAdapter struct {
KeyboardInBus *components.Bus
ioBus *components.IOBus
mainBus *components.Bus
memoryBit *components.Bit
keycodeRegister components.Register
andGate1 components.ANDGate8
notGatesForAndGate1 [4]circuit.NOTGate
andGate2 components.ANDGate3
andGate3 components.ANDGate3
notGatesForAndGate3 [2]circuit.NOTGate
andGate4 circuit.ANDGate
}
func NewKeyboardAdapter() *KeyboardAdapter {
k := new(KeyboardAdapter)
k.KeyboardInBus = components.NewBus(BUS_WIDTH)
return k
}
func (k *KeyboardAdapter) Connect(ioBus *components.IOBus, mainBus *components.Bus) {
k.ioBus = ioBus
k.mainBus = mainBus
k.memoryBit = components.NewBit()
k.memoryBit.Update(false, true)
k.memoryBit.Update(false, false)
k.andGate1 = *components.NewANDGate8()
k.andGate2 = *components.NewANDGate3()
k.andGate3 = *components.NewANDGate3()
k.andGate4 = *circuit.NewANDGate()
k.keycodeRegister = *components.NewRegister("KCR", k.KeyboardInBus, k.mainBus)
for i := range k.notGatesForAndGate1 {
k.notGatesForAndGate1[i] = *circuit.NewNOTGate()
}
for i := range k.notGatesForAndGate3 {
k.notGatesForAndGate3[i] = *circuit.NewNOTGate()
}
}
func (k *KeyboardAdapter) Update() {
k.updateKeycodeReg()
k.update()
}
func (k *KeyboardAdapter) update() {
k.notGatesForAndGate1[0].Update(k.mainBus.GetOutputWire(8))
k.notGatesForAndGate1[1].Update(k.mainBus.GetOutputWire(9))
k.notGatesForAndGate1[2].Update(k.mainBus.GetOutputWire(10))
k.notGatesForAndGate1[3].Update(k.mainBus.GetOutputWire(11))
k.andGate1.Update(
k.notGatesForAndGate1[0].Output(),
k.notGatesForAndGate1[1].Output(),
k.notGatesForAndGate1[2].Output(),
k.notGatesForAndGate1[3].Output(),
k.mainBus.GetOutputWire(12),
k.mainBus.GetOutputWire(13),
k.mainBus.GetOutputWire(14),
k.mainBus.GetOutputWire(15),
)
//TODO update these to use the helper methods
k.andGate2.Update(
k.ioBus.GetOutputWire(components.CLOCK_SET),
k.ioBus.GetOutputWire(components.DATA_OR_ADDRESS),
k.ioBus.GetOutputWire(components.MODE),
)
k.memoryBit.Update(k.andGate1.Output(), k.andGate2.Output())
k.notGatesForAndGate3[0].Update(k.ioBus.GetOutputWire(components.DATA_OR_ADDRESS))
k.notGatesForAndGate3[1].Update(k.ioBus.GetOutputWire(components.MODE))
k.andGate3.Update(
k.ioBus.GetOutputWire(components.CLOCK_ENABLE),
k.notGatesForAndGate3[0].Output(),
k.notGatesForAndGate3[1].Output(),
)
k.andGate4.Update(k.memoryBit.Get(), k.andGate3.Output())
}
func (k *KeyboardAdapter) updateKeycodeReg() {
if k.andGate4.Output() {
k.keycodeRegister.Set()
k.keycodeRegister.Enable()
k.keycodeRegister.Update()
k.keycodeRegister.Disable()
// clear the register once everything is out
k.KeyboardInBus.SetValue(0x00)
k.keycodeRegister.Update()
k.keycodeRegister.Unset()
k.keycodeRegister.Update()
}
}
type Keyboard struct {
outBus *components.Bus
keyPressChannel chan *KeyPress
quit chan bool
}
func NewKeyboard(keyPressChannel chan *KeyPress, quit chan bool) *Keyboard {
k := new(Keyboard)
k.keyPressChannel = keyPressChannel
k.quit = quit
return k
}
func (k *Keyboard) ConnectTo(bus *components.Bus) {
log.Println("Connecting keyboard to bus")
k.outBus = bus
}
func (k *Keyboard) Run() {
clock := time.Tick(33 * time.Millisecond)
for {
<-clock
select {
case <-k.quit:
log.Println("Stopping keyboard")
return
case key := <-k.keyPressChannel:
if key.IsDown {
k.outBus.SetValue(uint16(key.Value))
}
}
}
}
var up_key_presses = []KeyPress{
KeyPress{1, false},
KeyPress{2, false},
KeyPress{3, false},
KeyPress{4, false},
KeyPress{5, false},
KeyPress{6, false},
KeyPress{7, false},
KeyPress{8, false},
KeyPress{9, false},
KeyPress{10, false},
KeyPress{11, false},
KeyPress{12, false},
KeyPress{13, false},
KeyPress{14, false},
KeyPress{15, false},
KeyPress{16, false},
KeyPress{17, false},
KeyPress{18, false},
KeyPress{19, false},
KeyPress{20, false},
KeyPress{21, false},
KeyPress{22, false},
KeyPress{23, false},
KeyPress{24, false},
KeyPress{25, false},
KeyPress{26, false},
KeyPress{27, false},
KeyPress{28, false},
KeyPress{29, false},
KeyPress{30, false},
KeyPress{31, false},
KeyPress{32, false},
KeyPress{33, false},
KeyPress{34, false},
KeyPress{35, false},
KeyPress{36, false},
KeyPress{37, false},
KeyPress{38, false},
KeyPress{39, false},
KeyPress{40, false},
KeyPress{41, false},
KeyPress{42, false},
KeyPress{43, false},
KeyPress{44, false},
KeyPress{45, false},
KeyPress{46, false},
KeyPress{47, false},
KeyPress{48, false},
KeyPress{49, false},
KeyPress{50, false},
KeyPress{51, false},
KeyPress{52, false},
KeyPress{53, false},
KeyPress{54, false},
KeyPress{55, false},
KeyPress{56, false},
KeyPress{57, false},
KeyPress{58, false},
KeyPress{59, false},
KeyPress{60, false},
KeyPress{61, false},
KeyPress{62, false},
KeyPress{63, false},
KeyPress{64, false},
KeyPress{65, false},
KeyPress{66, false},
KeyPress{67, false},
KeyPress{68, false},
KeyPress{69, false},
KeyPress{70, false},
KeyPress{71, false},
KeyPress{72, false},
KeyPress{73, false},
KeyPress{74, false},
KeyPress{75, false},
KeyPress{76, false},
KeyPress{77, false},
KeyPress{78, false},
KeyPress{79, false},
KeyPress{80, false},
KeyPress{81, false},
KeyPress{82, false},
KeyPress{83, false},
KeyPress{84, false},
KeyPress{85, false},
KeyPress{86, false},
KeyPress{87, false},
KeyPress{88, false},
KeyPress{89, false},
KeyPress{90, false},
KeyPress{91, false},
KeyPress{92, false},
KeyPress{93, false},
KeyPress{94, false},
KeyPress{95, false},
KeyPress{96, false},
KeyPress{97, false},
KeyPress{98, false},
KeyPress{99, false},
KeyPress{100, false},
KeyPress{101, false},
KeyPress{102, false},
KeyPress{103, false},
KeyPress{104, false},
KeyPress{105, false},
KeyPress{106, false},
KeyPress{107, false},
KeyPress{108, false},
KeyPress{109, false},
KeyPress{110, false},
KeyPress{111, false},
KeyPress{112, false},
KeyPress{113, false},
KeyPress{114, false},
KeyPress{115, false},
KeyPress{116, false},
KeyPress{117, false},
KeyPress{118, false},
KeyPress{119, false},
KeyPress{120, false},
KeyPress{121, false},
KeyPress{122, false},
KeyPress{123, false},
KeyPress{124, false},
KeyPress{125, false},
KeyPress{126, false},
KeyPress{127, false},
KeyPress{128, false},
KeyPress{129, false},
KeyPress{130, false},
KeyPress{131, false},
KeyPress{132, false},
KeyPress{133, false},
KeyPress{134, false},
KeyPress{135, false},
KeyPress{136, false},
KeyPress{137, false},
KeyPress{138, false},
KeyPress{139, false},
KeyPress{140, false},
KeyPress{141, false},
KeyPress{142, false},
KeyPress{143, false},
KeyPress{144, false},
KeyPress{145, false},
KeyPress{146, false},
KeyPress{147, false},
KeyPress{148, false},
KeyPress{149, false},
KeyPress{150, false},
KeyPress{151, false},
KeyPress{152, false},
KeyPress{153, false},
KeyPress{154, false},
KeyPress{155, false},
KeyPress{156, false},
KeyPress{157, false},
KeyPress{158, false},
KeyPress{159, false},
KeyPress{160, false},
KeyPress{161, false},
KeyPress{162, false},
KeyPress{163, false},
KeyPress{164, false},
KeyPress{165, false},
KeyPress{166, false},
KeyPress{167, false},
KeyPress{168, false},
KeyPress{169, false},
KeyPress{170, false},
KeyPress{171, false},
KeyPress{172, false},
KeyPress{173, false},
KeyPress{174, false},
KeyPress{175, false},
KeyPress{176, false},
KeyPress{177, false},
KeyPress{178, false},
KeyPress{179, false},
KeyPress{180, false},
KeyPress{181, false},
KeyPress{182, false},
KeyPress{183, false},
KeyPress{184, false},
KeyPress{185, false},
KeyPress{186, false},
KeyPress{187, false},
KeyPress{188, false},
KeyPress{189, false},
KeyPress{190, false},
KeyPress{191, false},
KeyPress{192, false},
KeyPress{193, false},
KeyPress{194, false},
KeyPress{195, false},
KeyPress{196, false},
KeyPress{197, false},
KeyPress{198, false},
KeyPress{199, false},
KeyPress{200, false},
KeyPress{201, false},
KeyPress{202, false},
KeyPress{203, false},
KeyPress{204, false},
KeyPress{205, false},
KeyPress{206, false},
KeyPress{207, false},
KeyPress{208, false},
KeyPress{209, false},
KeyPress{210, false},
KeyPress{211, false},
KeyPress{212, false},
KeyPress{213, false},
KeyPress{214, false},
KeyPress{215, false},
KeyPress{216, false},
KeyPress{217, false},
KeyPress{218, false},
KeyPress{219, false},
KeyPress{220, false},
KeyPress{221, false},
KeyPress{222, false},
KeyPress{223, false},
KeyPress{224, false},
KeyPress{225, false},
KeyPress{226, false},
KeyPress{227, false},
KeyPress{228, false},
KeyPress{229, false},
KeyPress{230, false},
KeyPress{231, false},
KeyPress{232, false},
KeyPress{233, false},
KeyPress{234, false},
KeyPress{235, false},
KeyPress{236, false},
KeyPress{237, false},
KeyPress{238, false},
KeyPress{239, false},
KeyPress{240, false},
KeyPress{241, false},
KeyPress{242, false},
KeyPress{243, false},
KeyPress{244, false},
KeyPress{245, false},
KeyPress{246, false},
KeyPress{247, false},
KeyPress{248, false},
KeyPress{249, false},
KeyPress{250, false},
KeyPress{251, false},
KeyPress{252, false},
KeyPress{253, false},
KeyPress{254, false},
KeyPress{255, false},
KeyPress{256, false},
KeyPress{257, false},
KeyPress{258, false},
KeyPress{259, false},
KeyPress{260, false},
KeyPress{261, false},
KeyPress{262, false},
KeyPress{263, false},
KeyPress{264, false},
KeyPress{265, false},
KeyPress{266, false},
KeyPress{267, false},
KeyPress{268, false},
KeyPress{269, false},
KeyPress{270, false},
KeyPress{271, false},
KeyPress{272, false},
KeyPress{273, false},
KeyPress{274, false},
KeyPress{275, false},
KeyPress{276, false},
KeyPress{277, false},
KeyPress{278, false},
KeyPress{279, false},
KeyPress{280, false},
KeyPress{281, false},
KeyPress{282, false},
KeyPress{283, false},
KeyPress{284, false},
KeyPress{285, false},
KeyPress{286, false},
KeyPress{287, false},
KeyPress{288, false},
KeyPress{289, false},
KeyPress{290, false},
KeyPress{291, false},
KeyPress{292, false},
KeyPress{293, false},
KeyPress{294, false},
KeyPress{295, false},
KeyPress{296, false},
KeyPress{297, false},
KeyPress{298, false},
KeyPress{299, false},
KeyPress{300, false},
KeyPress{301, false},
KeyPress{302, false},
KeyPress{303, false},
KeyPress{304, false},
KeyPress{305, false},
KeyPress{306, false},
KeyPress{307, false},
KeyPress{308, false},
KeyPress{309, false},
KeyPress{310, false},
KeyPress{311, false},
KeyPress{312, false},
KeyPress{313, false},
KeyPress{314, false},
KeyPress{315, false},
KeyPress{316, false},
KeyPress{317, false},
KeyPress{318, false},
KeyPress{319, false},
KeyPress{320, false},
KeyPress{321, false},
KeyPress{322, false},
KeyPress{323, false},
KeyPress{324, false},
KeyPress{325, false},
KeyPress{326, false},
KeyPress{327, false},
KeyPress{328, false},
KeyPress{329, false},
KeyPress{330, false},
KeyPress{331, false},
KeyPress{332, false},
KeyPress{333, false},
KeyPress{334, false},
KeyPress{335, false},
KeyPress{336, false},
KeyPress{337, false},
KeyPress{338, false},
KeyPress{339, false},
KeyPress{340, false},
KeyPress{341, false},
KeyPress{342, false},
KeyPress{343, false},
KeyPress{344, false},
KeyPress{345, false},
KeyPress{346, false},
KeyPress{347, false},
KeyPress{348, false},
KeyPress{349, false},
KeyPress{350, false},
KeyPress{351, false},
KeyPress{352, false},
KeyPress{353, false},
KeyPress{354, false},
KeyPress{355, false},
KeyPress{356, false},
KeyPress{357, false},
KeyPress{358, false},
KeyPress{359, false},
KeyPress{360, false},
KeyPress{361, false},
KeyPress{362, false},
KeyPress{363, false},
KeyPress{364, false},
KeyPress{365, false},
KeyPress{366, false},
KeyPress{367, false},
KeyPress{368, false},
KeyPress{369, false},
KeyPress{370, false},
KeyPress{371, false},
KeyPress{372, false},
KeyPress{373, false},
KeyPress{374, false},
KeyPress{375, false},
KeyPress{376, false},
KeyPress{377, false},
KeyPress{378, false},
KeyPress{379, false},
KeyPress{380, false},
KeyPress{381, false},
KeyPress{382, false},
KeyPress{383, false},
KeyPress{384, false},
KeyPress{385, false},
KeyPress{386, false},
KeyPress{387, false},
KeyPress{388, false},
KeyPress{389, false},
KeyPress{390, false},
KeyPress{391, false},
KeyPress{392, false},
KeyPress{393, false},
KeyPress{394, false},
KeyPress{395, false},
KeyPress{396, false},
KeyPress{397, false},
KeyPress{398, false},
KeyPress{399, false},
KeyPress{400, false},
KeyPress{401, false},
KeyPress{402, false},
KeyPress{403, false},
KeyPress{404, false},
KeyPress{405, false},
KeyPress{406, false},
KeyPress{407, false},
KeyPress{408, false},
KeyPress{409, false},
KeyPress{410, false},
KeyPress{411, false},
KeyPress{412, false},
KeyPress{413, false},
KeyPress{414, false},
KeyPress{415, false},
KeyPress{416, false},
KeyPress{417, false},
KeyPress{418, false},
KeyPress{419, false},
KeyPress{420, false},
KeyPress{421, false},
KeyPress{422, false},
KeyPress{423, false},
KeyPress{424, false},
KeyPress{425, false},
KeyPress{426, false},
KeyPress{427, false},
KeyPress{428, false},
KeyPress{429, false},
KeyPress{430, false},
KeyPress{431, false},
KeyPress{432, false},
KeyPress{433, false},
KeyPress{434, false},
KeyPress{435, false},
KeyPress{436, false},
KeyPress{437, false},
KeyPress{438, false},
KeyPress{439, false},
KeyPress{440, false},
KeyPress{441, false},
KeyPress{442, false},
KeyPress{443, false},
KeyPress{444, false},
KeyPress{445, false},
KeyPress{446, false},
KeyPress{447, false},
KeyPress{448, false},
KeyPress{449, false},
KeyPress{450, false},
KeyPress{451, false},
KeyPress{452, false},
KeyPress{453, false},
KeyPress{454, false},
KeyPress{455, false},
KeyPress{456, false},
KeyPress{457, false},
KeyPress{458, false},
KeyPress{459, false},
KeyPress{460, false},
KeyPress{461, false},
KeyPress{462, false},
KeyPress{463, false},
KeyPress{464, false},
KeyPress{465, false},
KeyPress{466, false},
KeyPress{467, false},
KeyPress{468, false},
KeyPress{469, false},
KeyPress{470, false},
KeyPress{471, false},
KeyPress{472, false},
KeyPress{473, false},
KeyPress{474, false},
KeyPress{475, false},
KeyPress{476, false},
KeyPress{477, false},
KeyPress{478, false},
KeyPress{479, false},
KeyPress{480, false},
KeyPress{481, false},
KeyPress{482, false},
KeyPress{483, false},
KeyPress{484, false},
KeyPress{485, false},
KeyPress{486, false},
KeyPress{487, false},
KeyPress{488, false},
KeyPress{489, false},
KeyPress{490, false},
KeyPress{491, false},
KeyPress{492, false},
KeyPress{493, false},
KeyPress{494, false},
KeyPress{495, false},
KeyPress{496, false},
KeyPress{497, false},
KeyPress{498, false},
KeyPress{499, false},
KeyPress{500, false},
KeyPress{501, false},
KeyPress{502, false},
KeyPress{503, false},
KeyPress{504, false},
KeyPress{505, false},
KeyPress{506, false},
KeyPress{507, false},
KeyPress{508, false},
KeyPress{509, false},
KeyPress{510, false},
KeyPress{511, false},
KeyPress{512, false},
KeyPress{513, false},
KeyPress{514, false},
KeyPress{515, false},
KeyPress{516, false},
KeyPress{517, false},
KeyPress{518, false},
KeyPress{519, false},
KeyPress{520, false},
KeyPress{521, false},
KeyPress{522, false},
KeyPress{523, false},
KeyPress{524, false},
KeyPress{525, false},
KeyPress{526, false},
KeyPress{527, false},
KeyPress{528, false},
KeyPress{529, false},
KeyPress{530, false},
KeyPress{531, false},
KeyPress{532, false},
KeyPress{533, false},
KeyPress{534, false},
KeyPress{535, false},
KeyPress{536, false},
KeyPress{537, false},
KeyPress{538, false},
KeyPress{539, false},
KeyPress{540, false},
KeyPress{541, false},
KeyPress{542, false},
KeyPress{543, false},
KeyPress{544, false},
KeyPress{545, false},
KeyPress{546, false},
KeyPress{547, false},
KeyPress{548, false},
KeyPress{549, false},
KeyPress{550, false},
KeyPress{551, false},
KeyPress{552, false},
KeyPress{553, false},
KeyPress{554, false},
KeyPress{555, false},
KeyPress{556, false},
KeyPress{557, false},
KeyPress{558, false},
KeyPress{559, false},
KeyPress{560, false},
KeyPress{561, false},
KeyPress{562, false},
KeyPress{563, false},
KeyPress{564, false},
KeyPress{565, false},
KeyPress{566, false},
KeyPress{567, false},
KeyPress{568, false},
KeyPress{569, false},
KeyPress{570, false},
KeyPress{571, false},
KeyPress{572, false},
KeyPress{573, false},
KeyPress{574, false},
KeyPress{575, false},
KeyPress{576, false},
KeyPress{577, false},
KeyPress{578, false},
KeyPress{579, false},
KeyPress{580, false},
KeyPress{581, false},
KeyPress{582, false},
KeyPress{583, false},
KeyPress{584, false},
KeyPress{585, false},
KeyPress{586, false},
KeyPress{587, false},
KeyPress{588, false},
KeyPress{589, false},
KeyPress{590, false},
KeyPress{591, false},
KeyPress{592, false},
KeyPress{593, false},
KeyPress{594, false},
KeyPress{595, false},
KeyPress{596, false},
KeyPress{597, false},
KeyPress{598, false},
KeyPress{599, false},
KeyPress{600, false},
KeyPress{601, false},
KeyPress{602, false},
KeyPress{603, false},
KeyPress{604, false},
KeyPress{605, false},
KeyPress{606, false},
KeyPress{607, false},
KeyPress{608, false},
KeyPress{609, false},
KeyPress{610, false},
KeyPress{611, false},
KeyPress{612, false},
KeyPress{613, false},
KeyPress{614, false},
KeyPress{615, false},
KeyPress{616, false},
KeyPress{617, false},
KeyPress{618, false},
KeyPress{619, false},
KeyPress{620, false},
KeyPress{621, false},
KeyPress{622, false},
KeyPress{623, false},
KeyPress{624, false},
KeyPress{625, false},
KeyPress{626, false},
KeyPress{627, false},
KeyPress{628, false},
KeyPress{629, false},
KeyPress{630, false},
KeyPress{631, false},
KeyPress{632, false},
KeyPress{633, false},
KeyPress{634, false},
KeyPress{635, false},
KeyPress{636, false},
KeyPress{637, false},
KeyPress{638, false},
KeyPress{639, false},
KeyPress{640, false},
KeyPress{641, false},
KeyPress{642, false},
KeyPress{643, false},
KeyPress{644, false},
KeyPress{645, false},
KeyPress{646, false},
KeyPress{647, false},
KeyPress{648, false},
KeyPress{649, false},
KeyPress{650, false},
KeyPress{651, false},
KeyPress{652, false},
KeyPress{653, false},
KeyPress{654, false},
KeyPress{655, false},
KeyPress{656, false},
KeyPress{657, false},
KeyPress{658, false},
KeyPress{659, false},
KeyPress{660, false},
KeyPress{661, false},
KeyPress{662, false},
KeyPress{663, false},
KeyPress{664, false},
KeyPress{665, false},
KeyPress{666, false},
KeyPress{667, false},
KeyPress{668, false},
KeyPress{669, false},
KeyPress{670, false},
KeyPress{671, false},
KeyPress{672, false},
KeyPress{673, false},
KeyPress{674, false},
KeyPress{675, false},
KeyPress{676, false},
KeyPress{677, false},
KeyPress{678, false},
KeyPress{679, false},
KeyPress{680, false},
KeyPress{681, false},
KeyPress{682, false},
KeyPress{683, false},
KeyPress{684, false},
KeyPress{685, false},
KeyPress{686, false},
KeyPress{687, false},
KeyPress{688, false},
KeyPress{689, false},
KeyPress{690, false},
KeyPress{691, false},
KeyPress{692, false},
KeyPress{693, false},
KeyPress{694, false},
KeyPress{695, false},
KeyPress{696, false},
KeyPress{697, false},
KeyPress{698, false},
KeyPress{699, false},
KeyPress{700, false},
KeyPress{701, false},
KeyPress{702, false},
KeyPress{703, false},
KeyPress{704, false},
KeyPress{705, false},
KeyPress{706, false},
KeyPress{707, false},
KeyPress{708, false},
KeyPress{709, false},
KeyPress{710, false},
KeyPress{711, false},
KeyPress{712, false},
KeyPress{713, false},
KeyPress{714, false},
KeyPress{715, false},
KeyPress{716, false},
KeyPress{717, false},
KeyPress{718, false},
KeyPress{719, false},
KeyPress{720, false},
KeyPress{721, false},
KeyPress{722, false},
KeyPress{723, false},
KeyPress{724, false},
KeyPress{725, false},
KeyPress{726, false},
KeyPress{727, false},
KeyPress{728, false},
KeyPress{729, false},
KeyPress{730, false},
KeyPress{731, false},
KeyPress{732, false},
KeyPress{733, false},
KeyPress{734, false},
KeyPress{735, false},
KeyPress{736, false},
KeyPress{737, false},
KeyPress{738, false},
KeyPress{739, false},
KeyPress{740, false},
KeyPress{741, false},
KeyPress{742, false},
KeyPress{743, false},
KeyPress{744, false},
KeyPress{745, false},
KeyPress{746, false},
KeyPress{747, false},
KeyPress{748, false},
KeyPress{749, false},
KeyPress{750, false},
KeyPress{751, false},
KeyPress{752, false},
KeyPress{753, false},
KeyPress{754, false},
KeyPress{755, false},
KeyPress{756, false},
KeyPress{757, false},
KeyPress{758, false},
KeyPress{759, false},
KeyPress{760, false},
KeyPress{761, false},
KeyPress{762, false},
KeyPress{763, false},
KeyPress{764, false},
KeyPress{765, false},
KeyPress{766, false},
KeyPress{767, false},
KeyPress{768, false},
KeyPress{769, false},
KeyPress{770, false},
KeyPress{771, false},
KeyPress{772, false},
KeyPress{773, false},
KeyPress{774, false},
KeyPress{775, false},
KeyPress{776, false},
KeyPress{777, false},
KeyPress{778, false},
KeyPress{779, false},
KeyPress{780, false},
KeyPress{781, false},
KeyPress{782, false},
KeyPress{783, false},
KeyPress{784, false},
KeyPress{785, false},
KeyPress{786, false},
KeyPress{787, false},
KeyPress{788, false},
KeyPress{789, false},
KeyPress{790, false},
KeyPress{791, false},
KeyPress{792, false},
KeyPress{793, false},
KeyPress{794, false},
KeyPress{795, false},
KeyPress{796, false},
KeyPress{797, false},
KeyPress{798, false},
KeyPress{799, false},
KeyPress{800, false},
KeyPress{801, false},
KeyPress{802, false},
KeyPress{803, false},
KeyPress{804, false},
KeyPress{805, false},
KeyPress{806, false},
KeyPress{807, false},
KeyPress{808, false},
KeyPress{809, false},
KeyPress{810, false},
KeyPress{811, false},
KeyPress{812, false},
KeyPress{813, false},
KeyPress{814, false},
KeyPress{815, false},
KeyPress{816, false},
KeyPress{817, false},
KeyPress{818, false},
KeyPress{819, false},
KeyPress{820, false},
KeyPress{821, false},
KeyPress{822, false},
KeyPress{823, false},
KeyPress{824, false},
KeyPress{825, false},
KeyPress{826, false},
KeyPress{827, false},
KeyPress{828, false},
KeyPress{829, false},
KeyPress{830, false},
KeyPress{831, false},
KeyPress{832, false},
KeyPress{833, false},
KeyPress{834, false},
KeyPress{835, false},
KeyPress{836, false},
KeyPress{837, false},
KeyPress{838, false},
KeyPress{839, false},
KeyPress{840, false},
KeyPress{841, false},
KeyPress{842, false},
KeyPress{843, false},
KeyPress{844, false},
KeyPress{845, false},
KeyPress{846, false},
KeyPress{847, false},
KeyPress{848, false},
KeyPress{849, false},
KeyPress{850, false},
KeyPress{851, false},
KeyPress{852, false},
KeyPress{853, false},
KeyPress{854, false},
KeyPress{855, false},
KeyPress{856, false},
KeyPress{857, false},
KeyPress{858, false},
KeyPress{859, false},
KeyPress{860, false},
KeyPress{861, false},
KeyPress{862, false},
KeyPress{863, false},
KeyPress{864, false},
KeyPress{865, false},
KeyPress{866, false},
KeyPress{867, false},
KeyPress{868, false},
KeyPress{869, false},
KeyPress{870, false},
KeyPress{871, false},
KeyPress{872, false},
KeyPress{873, false},
KeyPress{874, false},
KeyPress{875, false},
KeyPress{876, false},
KeyPress{877, false},
KeyPress{878, false},
KeyPress{879, false},
KeyPress{880, false},
KeyPress{881, false},
KeyPress{882, false},
KeyPress{883, false},
KeyPress{884, false},
KeyPress{885, false},
KeyPress{886, false},
KeyPress{887, false},
KeyPress{888, false},
KeyPress{889, false},
KeyPress{890, false},
KeyPress{891, false},
KeyPress{892, false},
KeyPress{893, false},
KeyPress{894, false},
KeyPress{895, false},
KeyPress{896, false},
KeyPress{897, false},
KeyPress{898, false},
KeyPress{899, false},
KeyPress{900, false},
KeyPress{901, false},
KeyPress{902, false},
KeyPress{903, false},
KeyPress{904, false},
KeyPress{905, false},
KeyPress{906, false},
KeyPress{907, false},
KeyPress{908, false},
KeyPress{909, false},
KeyPress{910, false},
KeyPress{911, false},
KeyPress{912, false},
KeyPress{913, false},
KeyPress{914, false},
KeyPress{915, false},
KeyPress{916, false},
KeyPress{917, false},
KeyPress{918, false},
KeyPress{919, false},
KeyPress{920, false},
KeyPress{921, false},
KeyPress{922, false},
KeyPress{923, false},
KeyPress{924, false},
KeyPress{925, false},
KeyPress{926, false},
KeyPress{927, false},
KeyPress{928, false},
KeyPress{929, false},
KeyPress{930, false},
KeyPress{931, false},
KeyPress{932, false},
KeyPress{933, false},
KeyPress{934, false},
KeyPress{935, false},
KeyPress{936, false},
KeyPress{937, false},
KeyPress{938, false},
KeyPress{939, false},
KeyPress{940, false},
KeyPress{941, false},
KeyPress{942, false},
KeyPress{943, false},
KeyPress{944, false},
KeyPress{945, false},
KeyPress{946, false},
KeyPress{947, false},
KeyPress{948, false},
KeyPress{949, false},
KeyPress{950, false},
KeyPress{951, false},
KeyPress{952, false},
KeyPress{953, false},
KeyPress{954, false},
KeyPress{955, false},
KeyPress{956, false},
KeyPress{957, false},
KeyPress{958, false},
KeyPress{959, false},
KeyPress{960, false},
KeyPress{961, false},
KeyPress{962, false},
KeyPress{963, false},
KeyPress{964, false},
KeyPress{965, false},
KeyPress{966, false},
KeyPress{967, false},
KeyPress{968, false},
KeyPress{969, false},
KeyPress{970, false},
KeyPress{971, false},
KeyPress{972, false},
KeyPress{973, false},
KeyPress{974, false},
KeyPress{975, false},
KeyPress{976, false},
KeyPress{977, false},
KeyPress{978, false},
KeyPress{979, false},
KeyPress{980, false},
KeyPress{981, false},
KeyPress{982, false},
KeyPress{983, false},
KeyPress{984, false},
KeyPress{985, false},
KeyPress{986, false},
KeyPress{987, false},
KeyPress{988, false},
KeyPress{989, false},
KeyPress{990, false},
KeyPress{991, false},
KeyPress{992, false},
KeyPress{993, false},
KeyPress{994, false},
KeyPress{995, false},
KeyPress{996, false},
KeyPress{997, false},
KeyPress{998, false},
KeyPress{999, false},
KeyPress{1000, false},
KeyPress{1001, false},
KeyPress{1002, false},
KeyPress{1003, false},
KeyPress{1004, false},
KeyPress{1005, false},
KeyPress{1006, false},
KeyPress{1007, false},
KeyPress{1008, false},
KeyPress{1009, false},
KeyPress{1010, false},
KeyPress{1011, false},
KeyPress{1012, false},
KeyPress{1013, false},
KeyPress{1014, false},
KeyPress{1015, false},
KeyPress{1016, false},
KeyPress{1017, false},
KeyPress{1018, false},
KeyPress{1019, false},
KeyPress{1020, false},
KeyPress{1021, false},
KeyPress{1022, false},
KeyPress{1023, false},
}
You can’t perform that action at this time.