mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-04 23:07:46 -04:00
sound: fix ym2612 freq latch
there is only a single register, as described in: http://www.mjsstuf.x10host.com/pages/vgmPlay/vgmPlay.htm
This commit is contained in:
parent
ca980e1b0a
commit
68e06234e3
2 changed files with 6 additions and 5 deletions
|
@ -1671,8 +1671,8 @@ static int OPNWriteReg(int r, int v)
|
||||||
switch( OPN_SLOT(r) ){
|
switch( OPN_SLOT(r) ){
|
||||||
case 0: /* 0xa0-0xa2 : FNUM1 | depends on fn_h (below) */
|
case 0: /* 0xa0-0xa2 : FNUM1 | depends on fn_h (below) */
|
||||||
{
|
{
|
||||||
UINT32 fn = (((UINT32)( (CH->fn_h)&7))<<8) + v;
|
UINT32 fn = ((UINT32)(ym2612.OPN.ST.fn_h & 7) << 8) | v;
|
||||||
UINT8 blk = CH->fn_h>>3;
|
UINT8 blk = ym2612.OPN.ST.fn_h >> 3;
|
||||||
/* keyscale code */
|
/* keyscale code */
|
||||||
CH->kcode = (blk<<2) | opn_fktable[fn >> 7];
|
CH->kcode = (blk<<2) | opn_fktable[fn >> 7];
|
||||||
/* phase increment counter */
|
/* phase increment counter */
|
||||||
|
@ -1685,7 +1685,7 @@ static int OPNWriteReg(int r, int v)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1: /* 0xa4-0xa6 : FNUM2,BLK */
|
case 1: /* 0xa4-0xa6 : FNUM2,BLK */
|
||||||
CH->fn_h = v&0x3f;
|
ym2612.OPN.ST.fn_h = v & 0x3f;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
case 2: /* 0xa8-0xaa : 3CH FNUM1 */
|
case 2: /* 0xa8-0xaa : 3CH FNUM1 */
|
||||||
|
|
|
@ -78,7 +78,7 @@ typedef struct
|
||||||
UINT8 ams; /* channel AMS */
|
UINT8 ams; /* channel AMS */
|
||||||
|
|
||||||
UINT8 kcode; /* +11 key code: */
|
UINT8 kcode; /* +11 key code: */
|
||||||
UINT8 fn_h; /* freq latch */
|
UINT8 pad2;
|
||||||
UINT8 upd_cnt; /* eg update counter */
|
UINT8 upd_cnt; /* eg update counter */
|
||||||
UINT32 fc; /* fnum,blk:adjusted to sample rate */
|
UINT32 fc; /* fnum,blk:adjusted to sample rate */
|
||||||
UINT32 block_fnum; /* current blk/fnum value for this slot (can be different betweeen slots of one channel in 3slot mode) */
|
UINT32 block_fnum; /* current blk/fnum value for this slot (can be different betweeen slots of one channel in 3slot mode) */
|
||||||
|
@ -101,7 +101,8 @@ typedef struct
|
||||||
int TAC; /* timer a maxval */
|
int TAC; /* timer a maxval */
|
||||||
int TAT; /* timer a ticker | need_save */
|
int TAT; /* timer a ticker | need_save */
|
||||||
UINT8 TB; /* timer b */
|
UINT8 TB; /* timer b */
|
||||||
UINT8 pad2[3];
|
UINT8 fn_h; /* freq latch */
|
||||||
|
UINT8 pad2[2];
|
||||||
int TBC; /* timer b maxval */
|
int TBC; /* timer b maxval */
|
||||||
int TBT; /* timer b ticker | need_save */
|
int TBT; /* timer b ticker | need_save */
|
||||||
/* local time tables */
|
/* local time tables */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue