mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
ks0164: Fix registers on nonloop so that the voice is freed correctly. Bonus usage debug output, to be removed at some point
This commit is contained in:
parent
2d318f541a
commit
29f91ef4ec
@ -608,7 +608,7 @@ void ks0164_cpu_device::execute_run()
|
||||
|
||||
case 1: {
|
||||
// Neg/not
|
||||
// 1101 .rrr Ssss .101
|
||||
// 1101 .rrr S... .101
|
||||
|
||||
u16 v = m_r[(opcode >> 8) & 7];
|
||||
if(opcode & 0x0080)
|
||||
|
@ -463,12 +463,31 @@ void ks0164_device::cpu_map(address_map &map)
|
||||
|
||||
void ks0164_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
static std::string rrx = "";
|
||||
for(int sample = 0; sample != outputs[0].samples(); sample++) {
|
||||
s32 suml = 0, sumr = 0;
|
||||
std::string rrr = "";
|
||||
for(int voice = 0; voice < 0x20; voice++) {
|
||||
{
|
||||
int adr = 0xe000 + 0x8e * voice;
|
||||
u16 org = m_cpu->space(AS_PROGRAM).read_word(adr + 4);
|
||||
if(org == 0x0000)
|
||||
rrr += '?';
|
||||
else if(org == 0xf1de)
|
||||
rrr += '.';
|
||||
else if(org == 0xf1e2)
|
||||
rrr += '#';
|
||||
else if(org == 0xf1ea)
|
||||
rrr += '3';
|
||||
else if(org == 0xf1e6)
|
||||
rrr += '4';
|
||||
else {
|
||||
logerror("%04x\n", org);
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
u16 *regs = m_sregs[voice];
|
||||
if(regs[0] & 0x0001) {
|
||||
|
||||
u64 current = (u64(regs[1]) << 32) | (u64(regs[2]) << 16) | regs[3];
|
||||
u32 adr = current >> 16;
|
||||
s16 samp0, samp1;
|
||||
@ -504,6 +523,8 @@ void ks0164_device::sound_stream_update(sound_stream &stream, std::vector<read_s
|
||||
current = current - end + loop;
|
||||
} else {
|
||||
regs[0] = ~1;
|
||||
regs[0xc] = 0;
|
||||
regs[0x10] = regs[0x12] = regs[0x14] = regs[0x16] = 0;
|
||||
}
|
||||
}
|
||||
regs[1] = current >> 32;
|
||||
@ -522,6 +543,10 @@ void ks0164_device::sound_stream_update(sound_stream &stream, std::vector<read_s
|
||||
}
|
||||
}
|
||||
}
|
||||
if(rrr != rrx) {
|
||||
logerror("inuse %s\n", rrr);
|
||||
rrx = rrr;
|
||||
}
|
||||
outputs[0].put_int(sample, suml, 32768 * 32);
|
||||
outputs[1].put_int(sample, sumr, 32768 * 32);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user