Skip to content

Commit 03eb905

Browse files
committed
split the family keyboard
1 parent 22b38c1 commit 03eb905

File tree

7 files changed

+188
-261
lines changed

7 files changed

+188
-261
lines changed

ares/fc/expansion/family-basic-keyboard/family-basic-keyboard.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ FamilyBasicKeyboard::FamilyBasicKeyboard(Node::Port parent) {
1010
key.f7 = node->append<Node::Input::Button>("F7");
1111
key.f8 = node->append<Node::Input::Button>("F8");
1212

13-
key.one = node->append<Node::Input::Button>("1");
14-
key.two = node->append<Node::Input::Button>("2");
15-
key.three = node->append<Node::Input::Button>("3");
16-
key.four = node->append<Node::Input::Button>("4");
17-
key.five = node->append<Node::Input::Button>("5");
18-
key.six = node->append<Node::Input::Button>("6");
19-
key.seven = node->append<Node::Input::Button>("7");
20-
key.eight = node->append<Node::Input::Button>("8");
21-
key.nine = node->append<Node::Input::Button>("9");
22-
key.zero = node->append<Node::Input::Button>("0");
13+
key.one = node->append<Node::Input::Button>("Num1");
14+
key.two = node->append<Node::Input::Button>("Num2");
15+
key.three = node->append<Node::Input::Button>("Num3");
16+
key.four = node->append<Node::Input::Button>("Num4");
17+
key.five = node->append<Node::Input::Button>("Num5");
18+
key.six = node->append<Node::Input::Button>("Num6");
19+
key.seven = node->append<Node::Input::Button>("Num7");
20+
key.eight = node->append<Node::Input::Button>("Num8");
21+
key.nine = node->append<Node::Input::Button>("Num9");
22+
key.zero = node->append<Node::Input::Button>("Num0");
2323
key.minus = node->append<Node::Input::Button>("Minus");
24-
key.power = node->append<Node::Input::Button>("^");
24+
key.power = node->append<Node::Input::Button>("Power");
2525
key.yen = node->append<Node::Input::Button>("Yen");
2626
key.stop = node->append<Node::Input::Button>("Stop");
2727

@@ -36,8 +36,8 @@ FamilyBasicKeyboard::FamilyBasicKeyboard(Node::Port parent) {
3636
key.i = node->append<Node::Input::Button>("I");
3737
key.o = node->append<Node::Input::Button>("O");
3838
key.p = node->append<Node::Input::Button>("P");
39-
key.at = node->append<Node::Input::Button>("@");
40-
key.lbrace = node->append<Node::Input::Button>("[");
39+
key.at = node->append<Node::Input::Button>("At");
40+
key.lbrace = node->append<Node::Input::Button>("Left Brace");
4141
key.enter = node->append<Node::Input::Button>("Return");
4242

4343
key.control = node->append<Node::Input::Button>("Control");
@@ -50,9 +50,9 @@ FamilyBasicKeyboard::FamilyBasicKeyboard(Node::Port parent) {
5050
key.j = node->append<Node::Input::Button>("J");
5151
key.k = node->append<Node::Input::Button>("K");
5252
key.l = node->append<Node::Input::Button>("L");
53-
key.semicolon = node->append<Node::Input::Button>(";");
54-
key.colon = node->append<Node::Input::Button>(":");
55-
key.rbrace = node->append<Node::Input::Button>("]");
53+
key.semicolon = node->append<Node::Input::Button>("Semicolon");
54+
key.colon = node->append<Node::Input::Button>("Colon");
55+
key.rbrace = node->append<Node::Input::Button>("Right Brace");
5656
key.kana = node->append<Node::Input::Button>("Kana");
5757

5858
key.lshift = node->append<Node::Input::Button>("Left Shift");
@@ -63,18 +63,18 @@ FamilyBasicKeyboard::FamilyBasicKeyboard(Node::Port parent) {
6363
key.b = node->append<Node::Input::Button>("B");
6464
key.n = node->append<Node::Input::Button>("N");
6565
key.m = node->append<Node::Input::Button>("M");
66-
key.comma = node->append<Node::Input::Button>(",");
67-
key.period = node->append<Node::Input::Button>(".");
68-
key.slash = node->append<Node::Input::Button>("/");
69-
key.underscore = node->append<Node::Input::Button>("_");
66+
key.comma = node->append<Node::Input::Button>("Comma");
67+
key.period = node->append<Node::Input::Button>("Period");
68+
key.slash = node->append<Node::Input::Button>("Slash");
69+
key.underscore = node->append<Node::Input::Button>("Underscore");
7070
key.rshift = node->append<Node::Input::Button>("Right Shift");
7171

7272
key.graph = node->append<Node::Input::Button>("Graph");
7373
key.spacebar = node->append<Node::Input::Button>("Spacebar");
7474

7575
key.home = node->append<Node::Input::Button>("Home");
7676
key.insert = node->append<Node::Input::Button>("Insert");
77-
key.backspace = node->append<Node::Input::Button>("Delete");
77+
key.backspace = node->append<Node::Input::Button>("Backspace");
7878

7979
key.up = node->append<Node::Input::Button>("Up");
8080
key.down = node->append<Node::Input::Button>("Down");

desktop-ui/emulator/emulator.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ auto Emulator::enumeratePorts(string name) -> vector<InputPort>& {
1414
InputPort port{string{"Controller Port ", 1 + id}};
1515
port.append(virtualPorts[id].pad);
1616
port.append(virtualPorts[id].mouse);
17-
port.append(virtualPorts[id].keyboard);
1817
ports.append(port);
1918
}
2019
}

desktop-ui/emulator/emulator.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ struct Emulator {
3636
virtual auto loadTape(ares::Node::Object node, string location) -> bool { return false; }
3737
virtual auto unloadTape(ares::Node::Object node) -> void {}
3838

39+
virtual auto loadSetting(Markup::Node *node) -> void {}
40+
virtual auto saveSetting(Markup::Node *node) -> void {}
41+
virtual auto bindInput() -> void {}
42+
3943
struct Firmware {
4044
string type;
4145
string region;

desktop-ui/emulator/famicom.cpp

Lines changed: 144 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,140 @@
1+
struct FamilyBasicKeyboard : InputDevice {
2+
FamilyBasicKeyboard();
3+
4+
auto loadSetting(Markup::Node *node) -> void;
5+
auto saveSetting(Markup::Node *node) -> void;
6+
7+
InputDigital f1, f2, f3, f4, f5, f6, f7, f8;
8+
InputDigital num1, num2, num3, num4, num5, num6, num7, num8, num9, num0, minus, power, yen, stop;
9+
InputDigital esc, q, w, e, r, t, y, u, i, o, p, at, lbrace, enter;
10+
InputDigital control, a, s, d, f, g, h, j, k, l, semicolon, colon, rbrace, kana;
11+
InputDigital lshift, z, x, c, v, b, n, m, comma, period, slash, underscore, rshift;
12+
InputDigital graph, spacebar;
13+
InputDigital home, insert, backspace;
14+
InputDigital up, down, left, right;
15+
};
16+
17+
FamilyBasicKeyboard::FamilyBasicKeyboard() : InputDevice("Family BASIC Keyboard") {
18+
InputDevice::digital("F1", f1);
19+
InputDevice::digital("F2", f2);
20+
InputDevice::digital("F3", f3);
21+
InputDevice::digital("F4", f4);
22+
InputDevice::digital("F5", f5);
23+
InputDevice::digital("F6", f6);
24+
InputDevice::digital("F7", f7);
25+
InputDevice::digital("F8", f8);
26+
27+
InputDevice::digital("Num1", num1);
28+
InputDevice::digital("Num2", num2);
29+
InputDevice::digital("Num3", num3);
30+
InputDevice::digital("Num4", num4);
31+
InputDevice::digital("Num5", num5);
32+
InputDevice::digital("Num6", num6);
33+
InputDevice::digital("Num7", num7);
34+
InputDevice::digital("Num8", num8);
35+
InputDevice::digital("Num9", num9);
36+
InputDevice::digital("Num0", num0);
37+
InputDevice::digital("Minus", minus);
38+
InputDevice::digital("Power", power);
39+
InputDevice::digital("Yen", yen);
40+
InputDevice::digital("Stop", stop);
41+
42+
InputDevice::digital("Escape", esc);
43+
InputDevice::digital("Q", q);
44+
InputDevice::digital("W", w);
45+
InputDevice::digital("E", e);
46+
InputDevice::digital("R", r);
47+
InputDevice::digital("T", t);
48+
InputDevice::digital("Y", y);
49+
InputDevice::digital("U", u);
50+
InputDevice::digital("I", i);
51+
InputDevice::digital("O", o);
52+
InputDevice::digital("P", p);
53+
InputDevice::digital("At", at);
54+
InputDevice::digital("Left Brace", lbrace);
55+
InputDevice::digital("Return", enter);
56+
57+
InputDevice::digital("Control", control);
58+
InputDevice::digital("A", a);
59+
InputDevice::digital("S", s);
60+
InputDevice::digital("D", d);
61+
InputDevice::digital("F", f);
62+
InputDevice::digital("G", g);
63+
InputDevice::digital("H", h);
64+
InputDevice::digital("J", j);
65+
InputDevice::digital("K", k);
66+
InputDevice::digital("L", l);
67+
InputDevice::digital("Semicolon", semicolon);
68+
InputDevice::digital("Colon", colon);
69+
InputDevice::digital("Right Brace", rbrace);
70+
InputDevice::digital("Kana", kana);
71+
72+
InputDevice::digital("Left Shift", lshift);
73+
InputDevice::digital("Z", z);
74+
InputDevice::digital("X", x);
75+
InputDevice::digital("C", c);
76+
InputDevice::digital("V", v);
77+
InputDevice::digital("B", b);
78+
InputDevice::digital("N", n);
79+
InputDevice::digital("M", m);
80+
InputDevice::digital("Comma", comma);
81+
InputDevice::digital("Period", period);
82+
InputDevice::digital("Slash", slash);
83+
InputDevice::digital("Underscore", underscore);
84+
InputDevice::digital("Right Shift", rshift);
85+
86+
InputDevice::digital("Graph", graph);
87+
InputDevice::digital("Spacebar", spacebar);
88+
89+
InputDevice::digital("Home", home);
90+
InputDevice::digital("Insert", insert);
91+
InputDevice::digital("Backspace", backspace);
92+
93+
InputDevice::digital("Up", up);
94+
InputDevice::digital("Down", down);
95+
InputDevice::digital("Left", left);
96+
InputDevice::digital("Right", right);
97+
}
98+
99+
auto FamilyBasicKeyboard::loadSetting(Markup::Node *node) -> void {
100+
for (auto& input : inputs) {
101+
string node_name = string{"Famicom/", name, "/", input.name}.replace(" ", ".");
102+
if (auto subnode = (*node)[node_name]) {
103+
string value = subnode.string();
104+
for (u32 binding : range(BindingLimit)) {
105+
input.mapping->assignments[binding] = value.split(";")(binding);
106+
}
107+
}
108+
}
109+
}
110+
111+
auto FamilyBasicKeyboard::saveSetting(Markup::Node *node) -> void {
112+
for (auto& input : inputs) {
113+
string node_name = string{"Famicom/", name, "/", input.name}.replace(" ", ".");
114+
string value;
115+
for (auto& assignment : input.mapping->assignments) {
116+
value.append(assignment, ";");
117+
}
118+
value.trimRight(";", 1L);
119+
120+
(*node)(node_name).setValue(value);
121+
}
122+
}
123+
1124
struct Famicom : Emulator {
2125
Famicom();
3126
auto load() -> LoadResult override;
4127
auto save() -> bool override;
5128
auto pak(ares::Node::Object) -> shared_pointer<vfs::directory> override;
129+
6130
auto loadTape(ares::Node::Object node, string location) -> bool override;
7131
auto unloadTape(ares::Node::Object node) -> void override;
8132

133+
auto loadSetting(Markup::Node *node) -> void override;
134+
auto saveSetting(Markup::Node *node) -> void override;
135+
auto bindInput() -> void override;
136+
137+
FamilyBasicKeyboard familyBasicKeyboard;
9138
shared_pointer<mia::Pak> familyBasicDataRecorder{};
10139
};
11140

@@ -39,88 +168,7 @@ Famicom::Famicom() {
39168

40169
{
41170
InputPort port{"Expansion Port"};
42-
{ InputDevice device{"Family BASIC Keyboard"};
43-
device.digital("F1", virtualPorts[2].keyboard.f1);
44-
device.digital("F2", virtualPorts[2].keyboard.f2);
45-
device.digital("F3", virtualPorts[2].keyboard.f3);
46-
device.digital("F4", virtualPorts[2].keyboard.f4);
47-
device.digital("F5", virtualPorts[2].keyboard.f5);
48-
device.digital("F6", virtualPorts[2].keyboard.f6);
49-
device.digital("F7", virtualPorts[2].keyboard.f7);
50-
device.digital("F8", virtualPorts[2].keyboard.f8);
51-
52-
device.digital("1", virtualPorts[2].keyboard.num1);
53-
device.digital("2", virtualPorts[2].keyboard.num2);
54-
device.digital("3", virtualPorts[2].keyboard.num3);
55-
device.digital("4", virtualPorts[2].keyboard.num4);
56-
device.digital("5", virtualPorts[2].keyboard.num5);
57-
device.digital("6", virtualPorts[2].keyboard.num6);
58-
device.digital("7", virtualPorts[2].keyboard.num7);
59-
device.digital("8", virtualPorts[2].keyboard.num8);
60-
device.digital("9", virtualPorts[2].keyboard.num9);
61-
device.digital("0", virtualPorts[2].keyboard.num0);
62-
device.digital("Minus", virtualPorts[2].keyboard.dash);
63-
device.digital("^", virtualPorts[2].keyboard.tilde);
64-
device.digital("Yen", virtualPorts[2].keyboard.equals);
65-
device.digital("Stop", virtualPorts[2].keyboard.backspace);
66-
67-
device.digital("Escape", virtualPorts[2].keyboard.esc);
68-
device.digital("Q", virtualPorts[2].keyboard.q);
69-
device.digital("W", virtualPorts[2].keyboard.w);
70-
device.digital("E", virtualPorts[2].keyboard.e);
71-
device.digital("R", virtualPorts[2].keyboard.r);
72-
device.digital("T", virtualPorts[2].keyboard.t);
73-
device.digital("Y", virtualPorts[2].keyboard.y);
74-
device.digital("U", virtualPorts[2].keyboard.u);
75-
device.digital("I", virtualPorts[2].keyboard.i);
76-
device.digital("O", virtualPorts[2].keyboard.o);
77-
device.digital("P", virtualPorts[2].keyboard.p);
78-
device.digital("@", virtualPorts[2].keyboard.lbracket);
79-
device.digital("Return", virtualPorts[2].keyboard.return_);
80-
81-
device.digital("Control", virtualPorts[2].keyboard.lctrl);
82-
device.digital("A", virtualPorts[2].keyboard.a);
83-
device.digital("S", virtualPorts[2].keyboard.s);
84-
device.digital("D", virtualPorts[2].keyboard.d);
85-
device.digital("F", virtualPorts[2].keyboard.f);
86-
device.digital("G", virtualPorts[2].keyboard.g);
87-
device.digital("H", virtualPorts[2].keyboard.h);
88-
device.digital("J", virtualPorts[2].keyboard.j);
89-
device.digital("K", virtualPorts[2].keyboard.k);
90-
device.digital("L", virtualPorts[2].keyboard.l);
91-
device.digital(";", virtualPorts[2].keyboard.semicolon);
92-
device.digital(":", virtualPorts[2].keyboard.apostrophe);
93-
device.digital("]", virtualPorts[2].keyboard.rbracket);
94-
device.digital("Kana", virtualPorts[2].keyboard.rctrl);
95-
96-
device.digital("Left Shift", virtualPorts[2].keyboard.lshift);
97-
device.digital("Z", virtualPorts[2].keyboard.z);
98-
device.digital("X", virtualPorts[2].keyboard.x);
99-
device.digital("C", virtualPorts[2].keyboard.c);
100-
device.digital("V", virtualPorts[2].keyboard.v);
101-
device.digital("B", virtualPorts[2].keyboard.b);
102-
device.digital("N", virtualPorts[2].keyboard.n);
103-
device.digital("M", virtualPorts[2].keyboard.m);
104-
device.digital(",", virtualPorts[2].keyboard.comma);
105-
device.digital(".", virtualPorts[2].keyboard.period);
106-
device.digital("/", virtualPorts[2].keyboard.slash);
107-
device.digital("_", virtualPorts[2].keyboard.ralt);
108-
device.digital("Right Shift", virtualPorts[2].keyboard.rshift);
109-
110-
device.digital("Graph", virtualPorts[2].keyboard.lalt);
111-
device.digital("Spacebar", virtualPorts[2].keyboard.spacebar);
112-
113-
device.digital("Home", virtualPorts[2].keyboard.home);
114-
device.digital("Insert", virtualPorts[2].keyboard.insert);
115-
device.digital("Delete", virtualPorts[2].keyboard.delete_);
116-
117-
device.digital("Up", virtualPorts[2].keyboard.up);
118-
device.digital("Down", virtualPorts[2].keyboard.down);
119-
device.digital("Left", virtualPorts[2].keyboard.left);
120-
device.digital("Right", virtualPorts[2].keyboard.right);
121-
122-
port.append(device); }
123-
171+
port.append(familyBasicKeyboard);
124172
ports.append(port);
125173
}
126174
}
@@ -218,4 +266,18 @@ auto Famicom::unloadTape(ares::Node::Object node) -> void {
218266
familyBasicDataRecorder->save(familyBasicDataRecorder->location);
219267
familyBasicDataRecorder.reset();
220268
}
269+
}
270+
271+
auto Famicom::loadSetting(Markup::Node *node) -> void {
272+
familyBasicKeyboard.loadSetting(node);
273+
}
274+
275+
auto Famicom::saveSetting(Markup::Node *node) -> void {
276+
familyBasicKeyboard.saveSetting(node);
277+
}
278+
279+
auto Famicom::bindInput() -> void {
280+
for (auto& input : familyBasicKeyboard.inputs) {
281+
input.mapping->bind();
282+
}
221283
}

0 commit comments

Comments
 (0)