mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-21 14:07:29 -04:00
JASSeqParser 99%
This commit is contained in:
@@ -14,7 +14,7 @@ namespace JASystem {
|
||||
|
||||
void getAddress(int) const {}
|
||||
void getBendSense() const {}
|
||||
void getFlag() const {}
|
||||
u16 getFlag() const { return field_0x0[3]; }
|
||||
void getPanPowerBank() const {}
|
||||
void getPanPowerExt() const {}
|
||||
void getPanPowerOsc() const {}
|
||||
@@ -22,7 +22,7 @@ namespace JASystem {
|
||||
void getPanPowerTrack() const {}
|
||||
void getPriority() const {}
|
||||
void setAddress(int, u32) {}
|
||||
void setFlag(u16) {}
|
||||
void setFlag(u16 flag) { field_0x0[3] = flag; }
|
||||
void setPanPower(int i, u16 power) { mPanPower[i] = power; }
|
||||
|
||||
/* 0x00 */ u16 field_0x0[6];
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace JASystem {
|
||||
u16 get16(u32) const;
|
||||
u32 get24(u32) const;
|
||||
u32 get32(u32) const;
|
||||
u32 read16();
|
||||
u16 read16();
|
||||
u32 read24();
|
||||
|
||||
/* 0x00 */ u8* mRawFilePtr;
|
||||
|
||||
@@ -7,6 +7,8 @@ namespace JASystem {
|
||||
class TTrack;
|
||||
class TSeqParser {
|
||||
public:
|
||||
typedef int (TSeqParser::*CmdFunc)(JASystem::TTrack*, u32*);
|
||||
|
||||
int cmdOpenTrack(TTrack*, u32*);
|
||||
int cmdOpenTrackBros(TTrack*, u32*);
|
||||
int cmdCall(TTrack*, u32*);
|
||||
@@ -71,7 +73,11 @@ namespace JASystem {
|
||||
static int (TSeqParser::*sCmdPList[])(TTrack*, u32*);
|
||||
};
|
||||
|
||||
extern const u16 Arglist[0x40][2];
|
||||
struct Arg_s { // Fake name
|
||||
u16 m00;
|
||||
u16 m02;
|
||||
};
|
||||
extern const Arg_s Arglist[0x40];
|
||||
}
|
||||
|
||||
#endif /* JASSEQPARSER_H */
|
||||
|
||||
@@ -143,6 +143,14 @@ namespace JASystem {
|
||||
|
||||
class TNoteMgr {
|
||||
public:
|
||||
void setBaseTime(u32 time) { mBaseTime = time; }
|
||||
u8 getConnectCase() const { return mConnectCase; }
|
||||
void setConnectCase(u8 val) { mConnectCase = val; }
|
||||
u8 getLastNote() const { return mLastNote; }
|
||||
void setLastNote(u8 note) { mLastNote = note; }
|
||||
bool checkBeforeTieMode() const { return mBeforeTieMode; }
|
||||
void setBeforeTieMode(bool mode) { mBeforeTieMode = mode; }
|
||||
|
||||
void init();
|
||||
void endProcess();
|
||||
void setChannel(int, TChannel*);
|
||||
@@ -151,10 +159,10 @@ namespace JASystem {
|
||||
|
||||
/* 0x00 */ TChannel* field_0x0[8];
|
||||
/* 0x20 */ u16 field_0x20[8];
|
||||
/* 0x30 */ int field_0x30;
|
||||
/* 0x34 */ u8 field_0x34;
|
||||
/* 0x35 */ u8 field_0x35;
|
||||
/* 0x36 */ u8 field_0x36;
|
||||
/* 0x30 */ int mBaseTime;
|
||||
/* 0x34 */ u8 mConnectCase;
|
||||
/* 0x35 */ u8 mLastNote;
|
||||
/* 0x36 */ u8 mBeforeTieMode;
|
||||
};
|
||||
|
||||
static const int MAX_CHILDREN = 16;
|
||||
@@ -227,26 +235,26 @@ namespace JASystem {
|
||||
|
||||
TOuterParam* getOuterParam() { return mOuterParam; }
|
||||
|
||||
bool checkImport(int i) const { return mTrackPort.checkImport(i); }
|
||||
bool checkExport(int i) const { return mTrackPort.checkExport(i); }
|
||||
u8 checkImport(int i) const { return mTrackPort.checkImport(i); }
|
||||
u8 checkExport(int i) const { return mTrackPort.checkExport(i); }
|
||||
void getActivity() const {}
|
||||
void getRoute() const {}
|
||||
TSeqCtrl* getSeq() { return &mSeqCtrl; }
|
||||
// void operator delete(void*, u32) {}
|
||||
// void* operator new(size_t) {}
|
||||
void pauseTrackAll() {}
|
||||
void pauseTrackAll() { pause(true, true); }
|
||||
void unPauseTrackAll() { pause(false, true); }
|
||||
void setPanPower(int i, u16 power) { mRegisterParam.setPanPower(i, power); }
|
||||
void setPauseStatus(u8) {}
|
||||
void setPauseStatus(u8 status) { mPauseStatus = status; }
|
||||
void setTranspose(s32 transpose) { field_0x37a = transpose; }
|
||||
void setVolumeMode(u8 mode) { mVolumeMode = mode; }
|
||||
void unPauseTrackAll() {}
|
||||
|
||||
/* 0x000 */ union {
|
||||
TSeqCtrl mSeqCtrl;
|
||||
TTrack* next;
|
||||
};
|
||||
/* 0x048 */ TTrackPort mTrackPort;
|
||||
/* 0x088 */ TIntrMgr field_0x88;
|
||||
/* 0x088 */ TIntrMgr mIntrMgr;
|
||||
/* 0x0B4 */ TNoteMgr mNoteMgr;
|
||||
/* 0x0EC */ TVibrate mVibrate;
|
||||
/* 0x0F8 */ TChannelMgr mChannelUpdater;
|
||||
|
||||
@@ -6,6 +6,14 @@
|
||||
namespace JASystem {
|
||||
class TIntrMgr {
|
||||
public:
|
||||
void disable() { field_0x0 = 0; }
|
||||
void enable() { field_0x0 = 1; }
|
||||
void setTimer(u32 param_1, u32 param_2) {
|
||||
field_0x3 = param_1;
|
||||
field_0x4 = param_2;
|
||||
field_0x8 = param_2;
|
||||
}
|
||||
|
||||
void init();
|
||||
void request(u32);
|
||||
void setIntr(u32, void*);
|
||||
|
||||
@@ -14,8 +14,8 @@ namespace JASystem {
|
||||
void writeImport(int, u16);
|
||||
void writeExport(int, u16);
|
||||
|
||||
bool checkImport(int i) const { return mImportFlag[i] != 0; }
|
||||
bool checkExport(int i) const { return mExportFlag[i] != 0; }
|
||||
u8 checkImport(int i) const { return mImportFlag[i]; }
|
||||
u8 checkExport(int i) const { return mExportFlag[i]; }
|
||||
u16 get(u32 i) { return mValue[i]; }
|
||||
|
||||
/* 0x00 */ u8 mImportFlag[TRACKPORT_MAX];
|
||||
|
||||
@@ -548,7 +548,7 @@ void JAISound::setPauseMode(u8 param_1, u8 param_2) {
|
||||
break;
|
||||
case 2:
|
||||
JASystem::TTrack* track = getSeqParameter()->getRootTrackPointer();
|
||||
track->pause(true, true);
|
||||
track->pauseTrackAll();
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@@ -559,7 +559,7 @@ void JAISound::setPauseMode(u8 param_1, u8 param_2) {
|
||||
break;
|
||||
case 2:
|
||||
JASystem::TTrack* track = getSeqParameter()->getRootTrackPointer();
|
||||
track->pause(false, true);
|
||||
track->unPauseTrackAll();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,10 +11,10 @@ static const int MULTI_MAX = 8;
|
||||
|
||||
/* 8027DD54-8027DD94 .text init__Q38JASystem6TTrack8TNoteMgrFv */
|
||||
void JASystem::TTrack::TNoteMgr::init() {
|
||||
field_0x30 = 0;
|
||||
field_0x34 = 0;
|
||||
field_0x35 = 0;
|
||||
field_0x36 = 0;
|
||||
mBaseTime = 0;
|
||||
mConnectCase = 0;
|
||||
mLastNote = 0;
|
||||
mBeforeTieMode = 0;
|
||||
for (int i = 0; i < MULTI_MAX; i++) {
|
||||
field_0x0[i] = NULL;
|
||||
field_0x20[i] = 0;
|
||||
@@ -23,10 +23,10 @@ void JASystem::TTrack::TNoteMgr::init() {
|
||||
|
||||
/* 8027DD94-8027DDBC .text endProcess__Q38JASystem6TTrack8TNoteMgrFv */
|
||||
void JASystem::TTrack::TNoteMgr::endProcess() {
|
||||
if (field_0x30 == 0xffffffff) {
|
||||
if (mBaseTime == 0xffffffff) {
|
||||
return;
|
||||
}
|
||||
if (field_0x34 != 0) {
|
||||
if (mConnectCase != 0) {
|
||||
return;
|
||||
}
|
||||
field_0x0[0] = NULL;
|
||||
|
||||
@@ -108,8 +108,8 @@ u32 JASystem::TSeqCtrl::get32(u32 param_1) const {
|
||||
}
|
||||
|
||||
/* 8027E614-8027E63C .text read16__Q28JASystem8TSeqCtrlFv */
|
||||
u32 JASystem::TSeqCtrl::read16() {
|
||||
u32 result = readByte() << 8;
|
||||
u16 JASystem::TSeqCtrl::read16() {
|
||||
u16 result = readByte() << 8;
|
||||
result |= readByte();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "JSystem/JSupport/JSupport.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
|
||||
int (JASystem::TSeqParser::*JASystem::TSeqParser::sCmdPList[64])(JASystem::TTrack*, u32*) = {
|
||||
JASystem::TSeqParser::CmdFunc JASystem::TSeqParser::sCmdPList[64] = {
|
||||
NULL,
|
||||
&JASystem::TSeqParser::cmdOpenTrack,
|
||||
&JASystem::TSeqParser::cmdOpenTrackBros,
|
||||
@@ -77,7 +77,7 @@ int (JASystem::TSeqParser::*JASystem::TSeqParser::sCmdPList[64])(JASystem::TTrac
|
||||
&JASystem::TSeqParser::cmdFinish,
|
||||
};
|
||||
|
||||
const u16 JASystem::Arglist[0x40][2] = {
|
||||
const JASystem::Arg_s JASystem::Arglist[0x40] = {
|
||||
{0x0000, 0x0000},
|
||||
{0x0002, 0x0008},
|
||||
{0x0002, 0x0008},
|
||||
@@ -313,13 +313,13 @@ int JASystem::TSeqParser::cmdChildWritePort(TTrack* track, u32* args) {
|
||||
|
||||
/* 8027ED80-8027ED98 .text cmdCheckPortImport__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdCheckPortImport(TTrack* track, u32* args) {
|
||||
track->mRegisterParam.field_0x0[3] = track->mTrackPort.mImportFlag[args[0]];
|
||||
track->mRegisterParam.setFlag(track->checkImport(args[0]));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 8027ED98-8027EDB0 .text cmdCheckPortExport__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdCheckPortExport(TTrack* track, u32* args) {
|
||||
track->mRegisterParam.field_0x0[3] = track->mTrackPort.mExportFlag[args[0]];
|
||||
track->mRegisterParam.setFlag(track->checkExport(args[0]));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -335,7 +335,7 @@ int JASystem::TSeqParser::cmdSetLastNote(TTrack* track, u32* args) {
|
||||
u32 key = args[0];
|
||||
key += track->getTranspose();
|
||||
JUT_ASSERT(506, key < 256);
|
||||
track->mNoteMgr.field_0x35 = key;
|
||||
track->mNoteMgr.setLastNote(key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -412,8 +412,7 @@ int JASystem::TSeqParser::cmdBusConnect(TTrack* track, u32* args) {
|
||||
|
||||
/* 8027F088-8027F098 .text cmdPauseStatus__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdPauseStatus(TTrack* track, u32* args) {
|
||||
/* Nonmatching */
|
||||
track->mPauseStatus = args[0];
|
||||
track->setPauseStatus(args[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -425,32 +424,32 @@ int JASystem::TSeqParser::cmdVolumeMode(TTrack* track, u32* args) {
|
||||
|
||||
/* 8027F0A8-8027F0E0 .text cmdSetInterrupt__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdSetInterrupt(TTrack* track, u32* args) {
|
||||
track->field_0x88.setIntr(args[0], track->getSeq()->getBase() + args[1]);
|
||||
track->mIntrMgr.setIntr(args[0], track->getSeq()->getBase() + args[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 8027F0E0-8027F10C .text cmdDisInterrupt__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdDisInterrupt(TTrack* track, u32* args) {
|
||||
track->field_0x88.resetInter(args[0]);
|
||||
track->mIntrMgr.resetInter(args[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 8027F10C-8027F124 .text cmdClrI__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdClrI(TTrack* track, u32* args) {
|
||||
track->field_0x88.field_0x0 = 1;
|
||||
track->mIntrMgr.enable();
|
||||
track->getSeq()->clrIntr();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 8027F124-8027F134 .text cmdSetI__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdSetI(TTrack* track, u32* args) {
|
||||
track->field_0x88.field_0x0 = 0;
|
||||
track->mIntrMgr.disable();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 8027F134-8027F178 .text cmdRetI__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdRetI(TTrack* track, u32* args) {
|
||||
track->field_0x88.field_0x0 = 1;
|
||||
track->mIntrMgr.enable();
|
||||
track->getSeq()->retIntr();
|
||||
track->tryInterrupt();
|
||||
return 0;
|
||||
@@ -458,10 +457,7 @@ int JASystem::TSeqParser::cmdRetI(TTrack* track, u32* args) {
|
||||
|
||||
/* 8027F178-8027F194 .text cmdIntTimer__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdIntTimer(TTrack* track, u32* args) {
|
||||
u32 param2 = args[1];
|
||||
track->field_0x88.field_0x3 = args[0];
|
||||
track->field_0x88.field_0x4 = param2;
|
||||
track->field_0x88.field_0x8 = param2;
|
||||
track->mIntrMgr.setTimer(args[0], args[1]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -471,7 +467,7 @@ int JASystem::TSeqParser::cmdSyncCPU(TTrack* track, u32* args) {
|
||||
if (TTrack::sCallBackFunc) {
|
||||
var1 = TTrack::sCallBackFunc(track, args[0]);
|
||||
}
|
||||
track->mRegisterParam.field_0x0[3] = var1;
|
||||
track->mRegisterParam.setFlag(var1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -619,19 +615,19 @@ int JASystem::TSeqParser::cmdOscFull(TTrack* track, u32* args) {
|
||||
|
||||
/* 8027F698-8027F6A8 .text cmdCheckWave__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdCheckWave(TTrack* track, u32* args) {
|
||||
track->mRegisterParam.field_0x0[3] = 0;
|
||||
track->mRegisterParam.setFlag(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 8027F6A8-8027F8F4 .text cmdPrintf__Q28JASystem10TSeqParserFPQ28JASystem6TTrackPUl */
|
||||
int JASystem::TSeqParser::cmdPrintf(TTrack* track, u32* args) {
|
||||
/* Nonmatching */
|
||||
char buf[128];
|
||||
u8 byteArray[4];
|
||||
int registers[4];
|
||||
u32 count = 0;
|
||||
|
||||
for (u32 i = 0; i < 128; i++) {
|
||||
u32 i;
|
||||
for (i = 0; i < 128; i++) {
|
||||
buf[i] = track->getSeq()->readByte();
|
||||
if (!buf[i]) {
|
||||
break;
|
||||
@@ -642,19 +638,21 @@ int JASystem::TSeqParser::cmdPrintf(TTrack* track, u32* args) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (buf[i] != 'n') {
|
||||
continue;
|
||||
} else {
|
||||
buf[i] = '\r';
|
||||
continue;
|
||||
}
|
||||
switch (buf[i]) {
|
||||
case 'n':
|
||||
buf[i] = '\r';
|
||||
continue;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (buf[i] != '%') {
|
||||
continue;
|
||||
}
|
||||
|
||||
buf[++i] = track->getSeq()->readByte();
|
||||
i++;
|
||||
buf[i] = track->getSeq()->readByte();
|
||||
if (!buf[i]) {
|
||||
break;
|
||||
}
|
||||
@@ -685,7 +683,7 @@ int JASystem::TSeqParser::cmdPrintf(TTrack* track, u32* args) {
|
||||
count++;
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < count; i++) {
|
||||
for (i = 0; i < count; i++) {
|
||||
registers[i] = track->getSeq()->readByte();
|
||||
if (byteArray[i] == 2) {
|
||||
registers[i] = (int)track->getSeq()->getAddr(registers[i]);
|
||||
@@ -702,8 +700,36 @@ int JASystem::TSeqParser::cmdPrintf(TTrack* track, u32* args) {
|
||||
}
|
||||
|
||||
/* 8027F8F4-8027FA48 .text Cmd_Process__Q28JASystem10TSeqParserFPQ28JASystem6TTrackUcUs */
|
||||
int JASystem::TSeqParser::Cmd_Process(TTrack* track, u8, u16) {
|
||||
/* Nonmatching */
|
||||
int JASystem::TSeqParser::Cmd_Process(TTrack* track, u8 r5, u16 r6) {
|
||||
JASystem::Arg_s sp08 = Arglist[r5-0xC0];
|
||||
u16 r29 = sp08.m02;
|
||||
r29 |= r6;
|
||||
u32 sp18[10];
|
||||
for (int i = 0 ; i < sp08.m00; i++) {
|
||||
u32 r3 = 0;
|
||||
switch (r29 & 0x3) {
|
||||
case 0:
|
||||
r3 = track->getSeq()->readByte();
|
||||
break;
|
||||
case 1:
|
||||
r3 = track->getSeq()->read16();
|
||||
break;
|
||||
case 2:
|
||||
r3 = track->getSeq()->read24();
|
||||
break;
|
||||
case 3:
|
||||
r3 = track->exchangeRegisterValue(track->getSeq()->readByte());
|
||||
break;
|
||||
}
|
||||
sp18[i] = r3;
|
||||
r29 >>= 2;
|
||||
}
|
||||
|
||||
JASystem::TSeqParser::CmdFunc cmdFunc = sCmdPList[r5-0xC0];
|
||||
if (cmdFunc == NULL) {
|
||||
return 0;
|
||||
}
|
||||
(this->*cmdFunc)(track, sp18);
|
||||
}
|
||||
|
||||
/* 8027FA48-8027FB08 .text RegCmd_Process__Q28JASystem10TSeqParserFPQ28JASystem6TTrackii */
|
||||
@@ -729,7 +755,6 @@ int JASystem::TSeqParser::RegCmd_Process(TTrack* track, int r30, int r31) {
|
||||
|
||||
/* 8027FB08-8027FC98 .text cmdSetParam__Q28JASystem10TSeqParserFPQ28JASystem6TTrackUc */
|
||||
int JASystem::TSeqParser::cmdSetParam(TTrack* track, u8 param_2) {
|
||||
/* Nonmatching */
|
||||
u8 flag = track->getSeq()->readByte();
|
||||
|
||||
s16 data;
|
||||
@@ -765,7 +790,7 @@ int JASystem::TSeqParser::cmdSetParam(TTrack* track, u8 param_2) {
|
||||
val = track->getSeq()->readByte();
|
||||
break;
|
||||
case 3:
|
||||
val = track->getSeq()->read16() & 0xFFFF;
|
||||
val = track->getSeq()->read16();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -791,19 +816,17 @@ int JASystem::TSeqParser::cmdWait(TTrack* track, u8 flag) {
|
||||
|
||||
/* 8027FCE4-8027FE08 .text cmdNoteOff__Q28JASystem10TSeqParserFPQ28JASystem6TTrackUc */
|
||||
int JASystem::TSeqParser::cmdNoteOff(TTrack* track, u8 flag) {
|
||||
/* Nonmatching */
|
||||
if (flag == 0xF9) {
|
||||
u32 r30 = track->getSeq()->readByte();
|
||||
u32 rdata2 = (track->exchangeRegisterValue(r30 & 0x7) & 0xFF);
|
||||
JUT_ASSERT(0x496, rdata2 >= 1);
|
||||
JUT_ASSERT(0x497, rdata2 <= 7);
|
||||
|
||||
// flag = rdata2 + 0x80;
|
||||
// if (r30 & 0x80) {
|
||||
// flag |= 0x08;
|
||||
// }
|
||||
|
||||
flag = r30 & 0x80 ? (rdata2 + 0x80) | 0x08 : (rdata2 + 0x80);
|
||||
flag = rdata2;
|
||||
flag += 0x80;
|
||||
if (r30 & 0x80) {
|
||||
flag |= 0x08;
|
||||
}
|
||||
}
|
||||
|
||||
int r6 = 0;
|
||||
@@ -820,112 +843,114 @@ int JASystem::TSeqParser::cmdNoteOff(TTrack* track, u8 flag) {
|
||||
/* 8027FE08-80280148 .text cmdNoteOn__Q28JASystem10TSeqParserFPQ28JASystem6TTrackUc */
|
||||
int JASystem::TSeqParser::cmdNoteOn(TTrack* track, u8 note) {
|
||||
/* Nonmatching */
|
||||
s32 flag = *track->mSeqCtrl.mCurrentFilePtr++;
|
||||
if (flag & 0x80) {
|
||||
u32 r27 = track->getSeq()->readByte();
|
||||
if (r27 & 0x80) {
|
||||
note = track->exchangeRegisterValue(note);
|
||||
}
|
||||
|
||||
note += track->getTranspose();
|
||||
|
||||
int val28 = (flag >> 5) & 0x3;
|
||||
u8 val27;
|
||||
if ((flag >> 5) & 0x2) {
|
||||
val27 = note;
|
||||
note = track->mNoteMgr.field_0x35;
|
||||
u8 r26 = (r27 >> 5) & 0x3;
|
||||
u8 r25;
|
||||
u32 r24;
|
||||
u8 r31;
|
||||
if ((r27 >> 5) & 0x2) {
|
||||
r31 = note;
|
||||
note = track->mNoteMgr.getLastNote();
|
||||
}
|
||||
|
||||
u8 val26 = *track->mSeqCtrl.mCurrentFilePtr++;
|
||||
if (val26 & 0x80) {
|
||||
val26 = track->exchangeRegisterValue(val26 & 0x7F);
|
||||
r25 = track->getSeq()->readByte();
|
||||
if (r25 & 0x80) {
|
||||
r25 = track->exchangeRegisterValue(r25 & 0x7F);
|
||||
}
|
||||
u8 val25;
|
||||
u8 noteid = flag & 0x7;
|
||||
int val23 = 0;
|
||||
u8 r23;
|
||||
u8 noteid = r27 & 0x7;
|
||||
int r22 = 0;
|
||||
if (!noteid) {
|
||||
val25 = *track->mSeqCtrl.mCurrentFilePtr++;
|
||||
if (val25 & 0x80) {
|
||||
val25 = track->exchangeRegisterValue(val25 & 0x7F);
|
||||
r23 = track->getSeq()->readByte();
|
||||
if (r23 & 0x80) {
|
||||
r23 = track->exchangeRegisterValue(r23 & 0x7F);
|
||||
}
|
||||
int count = (flag >> 3) & 0x3;
|
||||
flag = 0;
|
||||
r24 = 0;
|
||||
int count = (r27 >> 3) & 0x3;
|
||||
for (int i = 0; i < count; i++) {
|
||||
flag <<= 8;
|
||||
flag |= *track->mSeqCtrl.mCurrentFilePtr++;
|
||||
r24 <<= 8;
|
||||
r24 |= track->getSeq()->readByte();
|
||||
}
|
||||
|
||||
if ((u32)count == 1 && flag & 0x80) {
|
||||
flag = track->exchangeRegisterValue(flag & 0x7F);
|
||||
if ((u32)count == 1 && r24 & 0x80) {
|
||||
r24 = track->exchangeRegisterValue(r24 & 0x7F);
|
||||
}
|
||||
} else {
|
||||
if ((flag >> 3) & 0x3) {
|
||||
if ((r27 >> 3) & 0x3) {
|
||||
noteid = track->exchangeRegisterValue(noteid - 1);
|
||||
JUT_ASSERT(0x4FE, noteid < 8);
|
||||
}
|
||||
JUT_ASSERT(0x4FE, noteid < 8);
|
||||
if (val28 & 1) {
|
||||
val23 = track->exchangeRegisterValue(*track->mSeqCtrl.mCurrentFilePtr++);
|
||||
val28 = (val28 ^ 1) & 0xFF;
|
||||
if (r26 & 1) {
|
||||
r22 = track->exchangeRegisterValue(track->getSeq()->readByte());
|
||||
r26 ^= 1;
|
||||
}
|
||||
|
||||
flag = -1;
|
||||
val25 = 100;
|
||||
r24 = -1;
|
||||
r23 = 100;
|
||||
}
|
||||
|
||||
track->mNoteMgr.field_0x34 = val28;
|
||||
s32 time = flag;
|
||||
if (track->mNoteMgr.field_0x36) {
|
||||
if (track->mNoteMgr.field_0x34 & 1) {
|
||||
track->mNoteMgr.setConnectCase(r26);
|
||||
r27 = r24;
|
||||
s32 time = r24;
|
||||
if (track->mNoteMgr.checkBeforeTieMode()) {
|
||||
if (track->mNoteMgr.getConnectCase() & 1) {
|
||||
time = -1;
|
||||
}
|
||||
if (time != -1) {
|
||||
time = track->seqTimeToDspTime(time, val25);
|
||||
time = track->seqTimeToDspTime(time, r23);
|
||||
}
|
||||
|
||||
if (!track->mIsPaused || !(track->mPauseStatus & 0x10)) {
|
||||
track->gateOn(noteid, note, val26, time);
|
||||
track->gateOn(noteid, note, r25, time);
|
||||
}
|
||||
} else {
|
||||
if (flag != -1) {
|
||||
time = track->seqTimeToDspTime(flag, val25);
|
||||
if ((s32)r24 != -1) {
|
||||
time = track->seqTimeToDspTime(r24, r23);
|
||||
}
|
||||
if (track->mNoteMgr.field_0x34 & 1) {
|
||||
if (track->mNoteMgr.getConnectCase() & 1) {
|
||||
time = -1;
|
||||
}
|
||||
|
||||
if (!track->mIsPaused || !(track->mPauseStatus & 0x10)) {
|
||||
track->noteOn(noteid, note, val26, time, val23);
|
||||
track->noteOn(noteid, note, r25, time, r22);
|
||||
}
|
||||
}
|
||||
|
||||
track->mNoteMgr.field_0x30 = flag;
|
||||
track->mNoteMgr.field_0x36 = track->mNoteMgr.field_0x34 & 1;
|
||||
if (track->mNoteMgr.field_0x34 & 0x2) {
|
||||
track->mNoteMgr.setBaseTime(r24);
|
||||
track->mNoteMgr.setBeforeTieMode(track->mNoteMgr.getConnectCase() & 1);
|
||||
if (track->mNoteMgr.getConnectCase() & 0x2) {
|
||||
s32 val = time;
|
||||
if (time == -1) {
|
||||
val = track->seqTimeToDspTime(flag, val25);
|
||||
val = track->seqTimeToDspTime(r27, r23);
|
||||
}
|
||||
|
||||
JASystem::TChannel* channel = track->mNoteMgr.getChannel(0);
|
||||
if (channel) {
|
||||
channel->setKeySweepTarget(val27 + track->getTranspose(), val);
|
||||
channel->setKeySweepTarget((u8)r31 + track->getTranspose(), val);
|
||||
}
|
||||
|
||||
note = val27;
|
||||
note = r31;
|
||||
}
|
||||
|
||||
track->mNoteMgr.field_0x35 = note;
|
||||
if (flag == 0xFFFFFFFF) {
|
||||
track->mNoteMgr.setLastNote(note);
|
||||
if (r24 == 0xFFFFFFFF) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
track->mSeqCtrl.mWaitTimer = ((u32)flag) ? flag : -1;
|
||||
track->getSeq()->wait(r24 ? r27 : -1);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* 80280148-8028024C .text conditionCheck__Q28JASystem10TSeqParserFPQ28JASystem6TTrackUc */
|
||||
bool JASystem::TSeqParser::conditionCheck(TTrack* track, u8 param_2) {
|
||||
/* Nonmatching */
|
||||
u16 val = (u32)track->mRegisterParam.field_0x0[3];
|
||||
u16 val = (u32)track->mRegisterParam.getFlag();
|
||||
switch (param_2 & 0xF) {
|
||||
case 0:
|
||||
return true;
|
||||
|
||||
@@ -48,7 +48,7 @@ JASystem::TTrack::TimedParam_::TimedParam_() {}
|
||||
void JASystem::TTrack::init() {
|
||||
mSeqCtrl.init();
|
||||
mTrackPort.init();
|
||||
field_0x88.init();
|
||||
mIntrMgr.init();
|
||||
mNoteMgr.init();
|
||||
mChannelUpdater.initAllocChannel(0);
|
||||
initTimed();
|
||||
@@ -141,8 +141,8 @@ s8 JASystem::TTrack::mainProc() {
|
||||
mParent->mChannelUpdater.field_0x0++;
|
||||
}
|
||||
}
|
||||
field_0x88.request(7);
|
||||
field_0x88.timerProcess();
|
||||
mIntrMgr.request(7);
|
||||
mIntrMgr.timerProcess();
|
||||
tryInterrupt();
|
||||
if (mIsPaused == 0 && (mPauseStatus & 2) == 0) {
|
||||
// TODO:
|
||||
@@ -166,7 +166,7 @@ s8 JASystem::TTrack::mainProc() {
|
||||
|
||||
/* 80280F80-80280FA8 .text setInterrupt__Q28JASystem6TTrackFUs */
|
||||
void JASystem::TTrack::setInterrupt(u16 param_1) {
|
||||
field_0x88.request(param_1);
|
||||
mIntrMgr.request(param_1);
|
||||
}
|
||||
|
||||
/* 80280FA8-80281004 .text tryInterrupt__Q28JASystem6TTrackFv */
|
||||
@@ -174,7 +174,7 @@ bool JASystem::TTrack::tryInterrupt() {
|
||||
if (mSeqCtrl.mPreviousFilePtr) {
|
||||
return false;
|
||||
}
|
||||
void* var1 = field_0x88.checkIntr();
|
||||
void* var1 = mIntrMgr.checkIntr();
|
||||
if (var1 == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user