Merge branch 'progsig-sx' into jgrpp

This commit is contained in:
Jonathan G Rennison
2015-08-16 16:58:23 +01:00
2 changed files with 60 additions and 54 deletions

View File

@@ -355,6 +355,7 @@ public:
{ {
uint64 p1 = 0; uint64 p1 = 0;
while(true) { while(true) {
if(si == NULL) break;
switch(si->Opcode()) { switch(si->Opcode()) {
case PSO_SET_SIGNAL: { case PSO_SET_SIGNAL: {
SB(p1, 0, 3, this->track); SB(p1, 0, 3, this->track);
@@ -365,6 +366,7 @@ public:
this->RebuildInstructionList(); this->RebuildInstructionList();
si = ((SignalSet*)si)->next; si = ((SignalSet*)si)->next;
} break; } break;
case PSO_IF: { case PSO_IF: {
SB(p1, 0, 3, this->track); SB(p1, 0, 3, this->track);
SB(p1, 3, 16, next); SB(p1, 3, 16, next);
@@ -393,11 +395,15 @@ public:
si = ((SignalIf*)si)->after; si = ((SignalIf*)si)->after;
} break; } break;
case PSO_LAST:
case PSO_IF_ELSE:
case PSO_IF_ENDIF:
return;
default:
NOT_REACHED();
} }
if(si == NULL) break;
if(si->Opcode() == PSO_LAST) break;
if(si->Opcode() == PSO_IF_ELSE) break;
if(si->Opcode() == PSO_IF_ENDIF) break;
} }
} }

View File

@@ -23,30 +23,30 @@ typedef std::vector<byte> Buffer;
static void WriteVLI(Buffer &b, uint i) static void WriteVLI(Buffer &b, uint i)
{ {
uint lsmask = 0x7F; uint lsmask = 0x7F;
uint msmask = ~0x7F; uint msmask = ~0x7F;
while(i & msmask) { while(i & msmask) {
byte part = (i & lsmask) | 0x80; byte part = (i & lsmask) | 0x80;
b.push_back(part); b.push_back(part);
i >>= 7; i >>= 7;
} }
b.push_back((byte) i); b.push_back((byte) i);
} }
static uint ReadVLI() static uint ReadVLI()
{ {
uint shift = 0; uint shift = 0;
uint val = 0; uint val = 0;
byte b; byte b;
b = SlReadByte(); b = SlReadByte();
while(b & 0x80) { while(b & 0x80) {
val |= uint(b & 0x7F) << shift; val |= uint(b & 0x7F) << shift;
shift += 7; shift += 7;
b = SlReadByte(); b = SlReadByte();
} }
val |= uint(b) << shift; val |= uint(b) << shift;
return val; return val;
} }
static void WriteCondition(Buffer &b, SignalCondition *c) static void WriteCondition(Buffer &b, SignalCondition *c)
@@ -117,7 +117,6 @@ static void Save_SPRG()
WriteVLI(b, _signal_programs.size()); WriteVLI(b, _signal_programs.size());
for(ProgramList::iterator i = _signal_programs.begin(), e = _signal_programs.end(); for(ProgramList::iterator i = _signal_programs.begin(), e = _signal_programs.end();
i != e; ++i) { i != e; ++i) {
SignalReference ref = i->first;
SignalProgram *prog = i->second; SignalProgram *prog = i->second;
prog->DebugPrintProgram(); prog->DebugPrintProgram();
@@ -170,8 +169,9 @@ static void Save_SPRG()
uint size = b.size(); uint size = b.size();
SlSetLength(size); SlSetLength(size);
for(uint i = 0; i < size; i++) for(uint i = 0; i < size; i++) {
SlWriteByte(b[i]); // TODO Gotta be a better way SlWriteByte(b[i]); // TODO Gotta be a better way
}
} }
// We don't know the pointer values that need to be stored in various // We don't know the pointer values that need to be stored in various