1
0

Fix XON/XOFF

This commit is contained in:
otya128
2016-12-09 18:45:34 +09:00
parent 463556954a
commit a04536335b
3 changed files with 49 additions and 13 deletions

View File

@@ -2023,6 +2023,9 @@ class SetX : Code
} }
override void execute(VM vm) override void execute(VM vm)
{ {
vm.petitcomputer.setX(func, value); if (value)
vm.petitcomputer.xon(func);
else
vm.petitcomputer.xoff(func);
} }
} }

View File

@@ -893,7 +893,7 @@ class Parser
return null; return null;
} }
auto arg = std.uni.toUpper(token.value.stringValue); auto arg = std.uni.toUpper(token.value.stringValue);
if (arg != "MOTION" && arg != "EXPAD" && arg != "MIC" && arg != "WIIU") if (arg != "MOTION" && arg != "EXPAD" && arg != "MIC" && (uname == "XOFF" || (arg != "WIIU" && arg != "3DS" && arg != "COMPAT")))
{ {
syntaxError(); syntaxError();
return null; return null;

View File

@@ -1236,35 +1236,68 @@ class PetitComputer
{ {
return page >= 0 && page < 6; return page >= 0 && page < 6;
} }
enum XMode
{
_3DS,
COMPAT,
WIIU,
}
struct X struct X
{ {
bool motion; bool motion;
bool expad; bool expad;
bool mic; bool mic;
bool wiiU; XMode mode;
} }
X x; X x;
public void setX(wstring func, bool value) public void xoff(wstring func)
{ {
if (func == "WIIU") if (func == "MIC")
{ {
x.wiiU = value; x.mic = false;
}
else if (func == "MIC")
{
x.mic = value;
} }
else if (func == "EXPAD") else if (func == "EXPAD")
{ {
x.expad = value; x.expad = false;
} }
else if (func == "MOTION") else if (func == "MOTION")
{ {
x.motion = value; x.motion = false;
} }
else else
{ {
std.stdio.stderr.writefln("Unknown %s %s", value ? "XON" : "XOFF", func); std.stdio.stderr.writefln("Unknown XOFF %s", func);
}
}
public void xon(wstring func)
{
if (func == "WIIU")
{
x.mode = XMode.WIIU;
}
else if (func == "3DS")
{
x.mode = XMode._3DS;
}
else if (func == "COMPAT")
{
x.mode = XMode.COMPAT;
}
else if (func == "MIC")
{
x.mic = true;
}
else if (func == "EXPAD")
{
x.expad = true;
}
else if (func == "MOTION")
{
x.motion = true;
}
else
{
std.stdio.stderr.writefln("Unknown XON %s", func);
} }
} }
//プチコン内部表現はRGB5_A1 //プチコン内部表現はRGB5_A1