@@ -3,6 +3,7 @@ struct Famicom : Emulator {
33 auto load () -> LoadResult override ;
44 auto save () -> bool override ;
55 auto pak (ares::Node::Object) -> std::shared_ptr<vfs::directory> override ;
6+ auto input (ares::Node::Input::Input) -> void override ;
67};
78
89Famicom::Famicom () {
@@ -86,3 +87,96 @@ auto Famicom::pak(ares::Node::Object node) -> std::shared_ptr<vfs::directory> {
8687 if (node->name () == " Famicom Cartridge" ) return game->pak ;
8788 return {};
8889}
90+
91+ auto Famicom::input (ares::Node::Input::Input input) -> void {
92+ auto device = ares::Node::parent (input);
93+ if (!device) return ;
94+
95+ auto port = ares::Node::parent (device);
96+ if (!port) return ;
97+
98+ if (device->name () != " Family Keyboard" ) return Emulator::input (input);
99+
100+ if (!program.keyboardCaptured ) return ;
101+ auto button = input->cast <ares::Node::Input::Button>();
102+
103+ if (input->name () == " F1" ) return button->setValue (inputKeyboard (" F1" ));
104+ if (input->name () == " F2" ) return button->setValue (inputKeyboard (" F2" ));
105+ if (input->name () == " F3" ) return button->setValue (inputKeyboard (" F3" ));
106+ if (input->name () == " F4" ) return button->setValue (inputKeyboard (" F4" ));
107+ if (input->name () == " F5" ) return button->setValue (inputKeyboard (" F5" ));
108+ if (input->name () == " F6" ) return button->setValue (inputKeyboard (" F6" ));
109+ if (input->name () == " F7" ) return button->setValue (inputKeyboard (" F7" ));
110+ if (input->name () == " F8" ) return button->setValue (inputKeyboard (" F8" ));
111+
112+ if (input->name () == " 1" ) return button->setValue (inputKeyboard (" Num1" ));
113+ if (input->name () == " 2" ) return button->setValue (inputKeyboard (" Num2" ));
114+ if (input->name () == " 3" ) return button->setValue (inputKeyboard (" Num3" ));
115+ if (input->name () == " 4" ) return button->setValue (inputKeyboard (" Num4" ));
116+ if (input->name () == " 5" ) return button->setValue (inputKeyboard (" Num5" ));
117+ if (input->name () == " 6" ) return button->setValue (inputKeyboard (" Num6" ));
118+ if (input->name () == " 7" ) return button->setValue (inputKeyboard (" Num7" ));
119+ if (input->name () == " 8" ) return button->setValue (inputKeyboard (" Num8" ));
120+ if (input->name () == " 9" ) return button->setValue (inputKeyboard (" Num9" ));
121+ if (input->name () == " 0" ) return button->setValue (inputKeyboard (" Num0" ));
122+ if (input->name () == " Minus" ) return button->setValue (inputKeyboard (" Dash" ));
123+ if (input->name () == " ^" ) return button->setValue (inputKeyboard (" Tilde" ));
124+ if (input->name () == " Yen" ) return button->setValue (inputKeyboard (" Backslash" ));
125+ if (input->name () == " Stop" ) return button->setValue (inputKeyboard (" Delete" ));
126+
127+ if (input->name () == " Escape" ) return button->setValue (inputKeyboard (" Escape" ));
128+ if (input->name () == " Q" ) return button->setValue (inputKeyboard (" Q" ));
129+ if (input->name () == " W" ) return button->setValue (inputKeyboard (" W" ));
130+ if (input->name () == " E" ) return button->setValue (inputKeyboard (" E" ));
131+ if (input->name () == " R" ) return button->setValue (inputKeyboard (" R" ));
132+ if (input->name () == " T" ) return button->setValue (inputKeyboard (" T" ));
133+ if (input->name () == " Y" ) return button->setValue (inputKeyboard (" Y" ));
134+ if (input->name () == " U" ) return button->setValue (inputKeyboard (" U" ));
135+ if (input->name () == " I" ) return button->setValue (inputKeyboard (" I" ));
136+ if (input->name () == " O" ) return button->setValue (inputKeyboard (" O" ));
137+ if (input->name () == " P" ) return button->setValue (inputKeyboard (" P" ));
138+ if (input->name () == " @" ) return button->setValue (inputKeyboard (" F9" ));
139+ if (input->name () == " [" ) return button->setValue (inputKeyboard (" LeftBracket" ));
140+ if (input->name () == " Return" ) return button->setValue (inputKeyboard (" Return" ));
141+
142+ if (input->name () == " Control" ) return button->setValue (inputKeyboard (" LeftControl" ));
143+ if (input->name () == " A" ) return button->setValue (inputKeyboard (" A" ));
144+ if (input->name () == " S" ) return button->setValue (inputKeyboard (" S" ));
145+ if (input->name () == " D" ) return button->setValue (inputKeyboard (" D" ));
146+ if (input->name () == " F" ) return button->setValue (inputKeyboard (" F" ));
147+ if (input->name () == " G" ) return button->setValue (inputKeyboard (" G" ));
148+ if (input->name () == " H" ) return button->setValue (inputKeyboard (" H" ));
149+ if (input->name () == " J" ) return button->setValue (inputKeyboard (" J" ));
150+ if (input->name () == " K" ) return button->setValue (inputKeyboard (" K" ));
151+ if (input->name () == " L" ) return button->setValue (inputKeyboard (" L" ));
152+ if (input->name () == " ;" ) return button->setValue (inputKeyboard (" Semicolon" ));
153+ if (input->name () == " :" ) return button->setValue (inputKeyboard (" Apostrophe" ));
154+ if (input->name () == " ]" ) return button->setValue (inputKeyboard (" RightBracket" ));
155+ if (input->name () == " Kana" ) return button->setValue (inputKeyboard (" End" ));
156+
157+ if (input->name () == " Left Shift" ) return button->setValue (inputKeyboard (" LeftShift" ));
158+ if (input->name () == " Z" ) return button->setValue (inputKeyboard (" Z" ));
159+ if (input->name () == " X" ) return button->setValue (inputKeyboard (" X" ));
160+ if (input->name () == " C" ) return button->setValue (inputKeyboard (" C" ));
161+ if (input->name () == " V" ) return button->setValue (inputKeyboard (" V" ));
162+ if (input->name () == " B" ) return button->setValue (inputKeyboard (" B" ));
163+ if (input->name () == " N" ) return button->setValue (inputKeyboard (" N" ));
164+ if (input->name () == " M" ) return button->setValue (inputKeyboard (" M" ));
165+ if (input->name () == " ," ) return button->setValue (inputKeyboard (" Comma" ));
166+ if (input->name () == " ." ) return button->setValue (inputKeyboard (" Period" ));
167+ if (input->name () == " /" ) return button->setValue (inputKeyboard (" Slash" ));
168+ if (input->name () == " _" ) return button->setValue (inputKeyboard (" Equal" ));
169+ if (input->name () == " Right Shift" ) return button->setValue (inputKeyboard (" RightShift" ));
170+
171+ if (input->name () == " Graph" ) return button->setValue (inputKeyboard (" LeftAlt" ));
172+ if (input->name () == " Spacebar" ) return button->setValue (inputKeyboard (" Space" ));
173+
174+ if (input->name () == " Home" ) return button->setValue (inputKeyboard (" Home" ));
175+ if (input->name () == " Insert" ) return button->setValue (inputKeyboard (" Insert" ));
176+ if (input->name () == " Delete" ) return button->setValue (inputKeyboard (" Backspace" ));
177+
178+ if (input->name () == " Up" ) return button->setValue (inputKeyboard (" Up" ));
179+ if (input->name () == " Down" ) return button->setValue (inputKeyboard (" Down" ));
180+ if (input->name () == " Left" ) return button->setValue (inputKeyboard (" Left" ));
181+ if (input->name () == " Right" ) return button->setValue (inputKeyboard (" Right" ));
182+ }
0 commit comments