summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Felipe CorrĂȘa da Silva Sanches <fsanches@metamaquina.com.br>2015-06-13 10:42:53 -0300
committer Felipe CorrĂȘa da Silva Sanches <fsanches@metamaquina.com.br>2015-06-16 15:17:20 -0300
commit9a27b57c07a23509f4f7fc3b93e3f5c2679e293c (patch)
tree7686f19cd4a8c1ddede96422b53ecb05c696ccb9 /src
parente3fdd3f0335fc6ba632b792c448d941f2bd514e9 (diff)
uzebox: adding sound emulation (It works but with terrible performance. Uzebox's DrMario song is recognizable even though the sound is choppy, full of noise).
When running with -wavwrite the resulting file plays nicely on a music player. The sound is much better, but still contains a high frequency noisy sort of hiss.
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/avr8/avr8.c37
-rw-r--r--src/emu/cpu/avr8/avr8.h1
-rw-r--r--src/mess/drivers/uzebox.c11
3 files changed, 30 insertions, 19 deletions
diff --git a/src/emu/cpu/avr8/avr8.c b/src/emu/cpu/avr8/avr8.c
index 976b2ff8856..4f45b51e0ea 100644
--- a/src/emu/cpu/avr8/avr8.c
+++ b/src/emu/cpu/avr8/avr8.c
@@ -869,6 +869,7 @@ void avr8_device::device_reset()
m_timer_prescale_count[t] = 0;
}
+ m_ocr2_not_reached_yet = true;
m_interrupt_pending = false;
m_elapsed_cycles = 0;
}
@@ -1553,22 +1554,26 @@ void avr8_device::timer2_tick()
switch(wgm2)
{
case WGM02_FAST_PWM:
- if(count == ocr2[reg])
- {
- if (reg == 0)
- {
- m_r[AVR8_REGIDX_TIFR2] |= AVR8_TIFR2_TOV2_MASK;
- count = 0;
- increment = 0;
- }
-
- m_r[AVR8_REGIDX_TIFR2] |= ocf2[reg];
- }
- else if(count == 0)
+ if (reg==0)
{
- if (reg == 0)
+ if (count >= m_r[AVR8_REGIDX_OCR2A])
{
- m_r[AVR8_REGIDX_TIFR2] &= ~AVR8_TIFR2_TOV2_MASK;
+ if (count >= 0xFF)
+ {
+ //Turn on
+ m_io->write_byte(AVR8_IO_PORTD, m_io->read_byte(AVR8_IO_PORTD) | (1 << 7));
+ m_r[AVR8_REGIDX_TCNT2] = 0;
+ m_ocr2_not_reached_yet = true;
+ }
+ else
+ {
+ if (m_ocr2_not_reached_yet)
+ {
+ //Turn off
+ m_io->write_byte(AVR8_IO_PORTD, m_io->read_byte(AVR8_IO_PORTD) & ~(1 << 7));
+ m_ocr2_not_reached_yet = false;
+ }
+ }
}
}
break;
@@ -1585,7 +1590,7 @@ void avr8_device::timer2_tick()
m_r[AVR8_REGIDX_TIFR2] |= ocf2[reg];
}
- else if(count == 0)
+ else if (count == 0)
{
if (reg == 0)
{
@@ -1616,7 +1621,7 @@ void avr8_device::timer2_tick()
*/
}
- m_r[AVR8_REGIDX_TCNT2] = count + increment;
+ m_r[AVR8_REGIDX_TCNT2] += increment;
update_interrupt(AVR8_INTIDX_OCF2A);
update_interrupt(AVR8_INTIDX_OCF2B);
diff --git a/src/emu/cpu/avr8/avr8.h b/src/emu/cpu/avr8/avr8.h
index 2384c585804..5708a571023 100644
--- a/src/emu/cpu/avr8/avr8.h
+++ b/src/emu/cpu/avr8/avr8.h
@@ -162,6 +162,7 @@ protected:
UINT8 m_timer_increment[6];
UINT16 m_timer_prescale[6];
UINT16 m_timer_prescale_count[6];
+ bool m_ocr2_not_reached_yet;
// SPI
bool m_spi_active;
diff --git a/src/mess/drivers/uzebox.c b/src/mess/drivers/uzebox.c
index a3b09b7621e..550f74bcafd 100644
--- a/src/mess/drivers/uzebox.c
+++ b/src/mess/drivers/uzebox.c
@@ -32,13 +32,15 @@ public:
m_maincpu(*this, "maincpu"),
m_cart(*this, "cartslot"),
m_ctrl1(*this, "ctrl1"),
- m_ctrl2(*this, "ctrl2")
+ m_ctrl2(*this, "ctrl2"),
+ m_dac(*this, "dac")
{ }
required_device<avr8_device> m_maincpu;
required_device<generic_slot_device> m_cart;
required_device<snes_control_port_device> m_ctrl1;
required_device<snes_control_port_device> m_ctrl2;
+ required_device<dac_device> m_dac;
DECLARE_READ8_MEMBER(port_a_r);
DECLARE_WRITE8_MEMBER(port_a_w);
@@ -168,7 +170,10 @@ WRITE8_MEMBER(uzebox_state::port_d_w)
// --x- x--- NC
// ---- -x-- power
// ---- --xx UART MIDI
-
+ if ((m_port_d ^ data) & 0x80)
+ {
+ m_dac->write_unsigned8((data & 0x80) ? 0x3F: 0);
+ }
m_port_d = data;
}
@@ -302,4 +307,4 @@ ROM_START( uzebox )
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-CONS(2010, uzebox, 0, 0, uzebox, uzebox, driver_device, 0, "Belogic", "Uzebox", GAME_NO_SOUND | GAME_NOT_WORKING)
+CONS(2010, uzebox, 0, 0, uzebox, uzebox, driver_device, 0, "Belogic", "Uzebox", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING)