mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-23 04:55:13 +00:00
OPL: YM3812-LLE, part 2
This commit is contained in:
parent
ea2f92ffe3
commit
817d066a57
3 changed files with 25 additions and 2 deletions
2
extern/YM3812-LLE/fmopl2.c
vendored
2
extern/YM3812-LLE/fmopl2.c
vendored
|
@ -1392,6 +1392,8 @@ void FMOPL2_Clock(fmopl2_t *chip)
|
||||||
int value = chip->fsm_out[8] ? 0 : chip->accm_value[1];
|
int value = chip->fsm_out[8] ? 0 : chip->accm_value[1];
|
||||||
value += add;
|
value += add;
|
||||||
|
|
||||||
|
chip->op_value_debug = add;
|
||||||
|
|
||||||
int sign = ((chip->accm_top & 64) != 0 && !chip->accm_clamplow) || chip->accm_clamphigh;
|
int sign = ((chip->accm_top & 64) != 0 && !chip->accm_clamplow) || chip->accm_clamphigh;
|
||||||
|
|
||||||
int top_unsigned = chip->accm_top & 63;
|
int top_unsigned = chip->accm_top & 63;
|
||||||
|
|
2
extern/YM3812-LLE/fmopl2.h
vendored
2
extern/YM3812-LLE/fmopl2.h
vendored
|
@ -268,6 +268,8 @@ typedef struct
|
||||||
int o_write1;
|
int o_write1;
|
||||||
int o_data_latch;
|
int o_data_latch;
|
||||||
|
|
||||||
|
int op_value_debug;
|
||||||
|
|
||||||
} fmopl2_t;
|
} fmopl2_t;
|
||||||
|
|
||||||
// modification
|
// modification
|
||||||
|
|
|
@ -506,7 +506,14 @@ void DivPlatformOPL::acquire_ymfm3(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) {
|
void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) {
|
||||||
|
int chOut[11];
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
|
int curCycle=-9;
|
||||||
|
unsigned char subCycle=0;
|
||||||
|
for (int i=0; i<11; i++) {
|
||||||
|
chOut[i]=0;
|
||||||
|
}
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
lastSH=fm_lle2.o_sh;
|
lastSH=fm_lle2.o_sh;
|
||||||
lastSY=fm_lle2.o_sy;
|
lastSY=fm_lle2.o_sy;
|
||||||
|
@ -529,6 +536,7 @@ void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) {
|
||||||
fm_lle2.input.address=1;
|
fm_lle2.input.address=1;
|
||||||
fm_lle2.input.data_i=w.val;
|
fm_lle2.input.data_i=w.val;
|
||||||
writes.pop();
|
writes.pop();
|
||||||
|
delay=84;
|
||||||
} else {
|
} else {
|
||||||
fm_lle2.input.cs=0;
|
fm_lle2.input.cs=0;
|
||||||
fm_lle2.input.rd=1;
|
fm_lle2.input.rd=1;
|
||||||
|
@ -536,10 +544,11 @@ void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) {
|
||||||
fm_lle2.input.address=0;
|
fm_lle2.input.address=0;
|
||||||
fm_lle2.input.data_i=w.addr;
|
fm_lle2.input.data_i=w.addr;
|
||||||
w.addrOrVal=true;
|
w.addrOrVal=true;
|
||||||
|
// weird. wasn't it 12?
|
||||||
|
delay=24;
|
||||||
}
|
}
|
||||||
|
|
||||||
waitingBusy=true;
|
waitingBusy=true;
|
||||||
delay=144;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -549,9 +558,14 @@ void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) {
|
||||||
FMOPL2_Clock(&fm_lle2);
|
FMOPL2_Clock(&fm_lle2);
|
||||||
|
|
||||||
if (waitingBusy) {
|
if (waitingBusy) {
|
||||||
if (--delay<=0) waitingBusy=false;
|
if (--delay<0) waitingBusy=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (curCycle>=0 && curCycle<9) {
|
||||||
|
// TODO: this
|
||||||
|
}
|
||||||
|
if (!(++subCycle&3)) curCycle++;
|
||||||
|
|
||||||
if (fm_lle2.o_sy && !lastSY) {
|
if (fm_lle2.o_sy && !lastSY) {
|
||||||
dacVal>>=1;
|
dacVal>>=1;
|
||||||
dacVal|=(fm_lle2.o_mo&1)<<17;
|
dacVal|=(fm_lle2.o_mo&1)<<17;
|
||||||
|
@ -570,6 +584,11 @@ void DivPlatformOPL::acquire_nukedLLE2(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
buf[0][h]=dacOut;
|
buf[0][h]=dacOut;
|
||||||
|
//buf[0][h]=((fm_lle2.op_value+0x1000)&0x1fff)-0x1000;
|
||||||
|
|
||||||
|
for (int i=0; i<11; i++) {
|
||||||
|
oscBuf[i]->data[oscBuf[i]->needle++]=chOut[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue