Amiga: better emulation, part 10
This commit is contained in:
parent
a9c703df3e
commit
5ebee2bb2b
|
|
@ -86,7 +86,9 @@ void DivPlatformAmiga::acquire(short** buf, size_t len) {
|
||||||
outL=0;
|
outL=0;
|
||||||
outR=0;
|
outR=0;
|
||||||
|
|
||||||
// NEW CODE
|
// TODO:
|
||||||
|
// - improve DMA overrun behavior
|
||||||
|
// - does V/P mod really work like that?
|
||||||
amiga.volPos=(amiga.volPos+1)&AMIGA_VPMASK;
|
amiga.volPos=(amiga.volPos+1)&AMIGA_VPMASK;
|
||||||
if (!bypassLimits) {
|
if (!bypassLimits) {
|
||||||
amiga.hPos+=AMIGA_DIVIDER;
|
amiga.hPos+=AMIGA_DIVIDER;
|
||||||
|
|
@ -475,6 +477,22 @@ void DivPlatformAmiga::tick(bool sysTick) {
|
||||||
updateWave(i);
|
updateWave(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (updateADKCon) {
|
||||||
|
updateADKCon=false;
|
||||||
|
rWrite(0x9e,0xff);
|
||||||
|
rWrite(0x9e,(
|
||||||
|
0x8000|
|
||||||
|
(chan[0].useV?1:0)|
|
||||||
|
(chan[1].useV?2:0)|
|
||||||
|
(chan[2].useV?4:0)|
|
||||||
|
(chan[3].useV?8:0)|
|
||||||
|
(chan[0].useP?16:0)|
|
||||||
|
(chan[1].useP?32:0)|
|
||||||
|
(chan[2].useP?64:0)|
|
||||||
|
(chan[3].useP?128:0)
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int DivPlatformAmiga::dispatch(DivCommand c) {
|
int DivPlatformAmiga::dispatch(DivCommand c) {
|
||||||
|
|
@ -618,9 +636,11 @@ int DivPlatformAmiga::dispatch(DivCommand c) {
|
||||||
break;
|
break;
|
||||||
case DIV_CMD_AMIGA_AM:
|
case DIV_CMD_AMIGA_AM:
|
||||||
chan[c.chan].useV=c.value;
|
chan[c.chan].useV=c.value;
|
||||||
|
updateADKCon=true;
|
||||||
break;
|
break;
|
||||||
case DIV_CMD_AMIGA_PM:
|
case DIV_CMD_AMIGA_PM:
|
||||||
chan[c.chan].useP=c.value;
|
chan[c.chan].useP=c.value;
|
||||||
|
updateADKCon=true;
|
||||||
break;
|
break;
|
||||||
case DIV_CMD_GET_VOLMAX:
|
case DIV_CMD_GET_VOLMAX:
|
||||||
return 64;
|
return 64;
|
||||||
|
|
@ -677,6 +697,7 @@ void DivPlatformAmiga::reset() {
|
||||||
}
|
}
|
||||||
filterOn=false;
|
filterOn=false;
|
||||||
filtConst=filterOn?filtConstOn:filtConstOff;
|
filtConst=filterOn?filtConstOn:filtConstOff;
|
||||||
|
updateADKCon=true;
|
||||||
|
|
||||||
amiga=Amiga();
|
amiga=Amiga();
|
||||||
// enable DMA
|
// enable DMA
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ class DivPlatformAmiga: public DivDispatch {
|
||||||
bool bypassLimits;
|
bool bypassLimits;
|
||||||
bool amigaModel;
|
bool amigaModel;
|
||||||
bool filterOn;
|
bool filterOn;
|
||||||
|
bool updateADKCon;
|
||||||
|
|
||||||
struct Amiga {
|
struct Amiga {
|
||||||
// register state
|
// register state
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue