1
0

Implement XON/XOFF

This commit is contained in:
otya128
2016-12-09 18:24:33 +09:00
parent 0306a215b0
commit 463556954a
3 changed files with 60 additions and 0 deletions

View File

@@ -2011,3 +2011,18 @@ class PushVarExpression : Code
vm.push(vm.currentSlot.global[vmv.index]); vm.push(vm.currentSlot.global[vmv.index]);
} }
} }
class SetX : Code
{
wstring func;
bool value;
this(wstring f, bool value)
{
this.func = f;
this.value = value;
}
override void execute(VM vm)
{
vm.petitcomputer.setX(func, value);
}
}

View File

@@ -908,6 +908,14 @@ class Compiler
compilePushReference(swap.item1, sc); compilePushReference(swap.item1, sc);
genCode(new SwapCode()); genCode(new SwapCode());
} }
void compileXOn(XOn x, Scope sc)
{
genCode(new SetX(x.func, true));
}
void compileXOff(XOff x, Scope sc)
{
genCode(new SetX(x.func, false));
}
void compileStatement(Statement i, Scope s) void compileStatement(Statement i, Scope s)
{ {
switch(i.type) switch(i.type)
@@ -1170,6 +1178,12 @@ class Compiler
case NodeType.Swap: case NodeType.Swap:
compileSwap(cast(Swap)i, s); compileSwap(cast(Swap)i, s);
break; break;
case NodeType.XOn:
compileXOn(cast(XOn)i, s);
break;
case NodeType.XOff:
compileXOff(cast(XOff)i, s);
break;
default: default:
stderr.writeln("Compile:NotImpl ", i.type); stderr.writeln("Compile:NotImpl ", i.type);
} }

View File

@@ -1236,6 +1236,37 @@ class PetitComputer
{ {
return page >= 0 && page < 6; return page >= 0 && page < 6;
} }
struct X
{
bool motion;
bool expad;
bool mic;
bool wiiU;
}
X x;
public void setX(wstring func, bool value)
{
if (func == "WIIU")
{
x.wiiU = value;
}
else if (func == "MIC")
{
x.mic = value;
}
else if (func == "EXPAD")
{
x.expad = value;
}
else if (func == "MOTION")
{
x.motion = value;
}
else
{
std.stdio.stderr.writefln("Unknown %s %s", value ? "XON" : "XOFF", func);
}
}
//プチコン内部表現はRGB5_A1 //プチコン内部表現はRGB5_A1
static uint toGLColor(GLenum format, ubyte r, ubyte g, ubyte b, ubyte a) static uint toGLColor(GLenum format, ubyte r, ubyte g, ubyte b, ubyte a)
{ {