From 2fb3e476642cf9db276b2ddd3895686626e9f105 Mon Sep 17 00:00:00 2001 From: angelosa Date: Sat, 4 Jan 2025 17:00:27 +0100 Subject: amiga/paula.cpp: clamp output to s16 --- hash/amigaocs_flop.xml | 52 +++++++++++++++++++++++++++++++++------------- src/mame/amiga/amiga_m.cpp | 6 ++++++ src/mame/amiga/amiga_v.cpp | 1 + src/mame/amiga/paula.cpp | 17 ++++++++------- 4 files changed, 54 insertions(+), 22 deletions(-) diff --git a/hash/amigaocs_flop.xml b/hash/amigaocs_flop.xml index be9a60a30fa..051a1b7c34c 100644 --- a/hash/amigaocs_flop.xml +++ b/hash/amigaocs_flop.xml @@ -3547,9 +3547,10 @@ ATK test: C:0 H:U Bad + - + @@ -3763,6 +3764,10 @@ ATK test: failed 1989 Mindware @@ -3789,7 +3794,7 @@ ATK test: C:0 H:U 1 Sector Bad - + Australo Piticus Mechanicus (Europe) @@ -3797,8 +3802,13 @@ ATK test: C:0 H:U 1 Sector Bad 1988 Timewarp + + + @@ -4202,7 +4212,7 @@ ATK test: OK ]]> - + @@ -4214,10 +4224,11 @@ ATK test: OK 1987 King Size - + + - + @@ -5591,7 +5602,8 @@ ATK test: OK 1989 Magic Bytes - + + @@ -10180,9 +10192,10 @@ ATK test: C:0 H:U Bad + - + @@ -10262,13 +10275,14 @@ ATK test: C:0 H:U Bad 1990 Ocean - + + @@ -17405,8 +17419,9 @@ ATK test: OK 1988 Grandslam - + + @@ -29547,7 +29562,7 @@ ATK test: OK 1990 Rainbow Arts - + @@ -29560,6 +29575,7 @@ ATK test: OK + @@ -36190,7 +36206,8 @@ ATK test: failed 1988 Ariolasoft - + + @@ -39081,7 +39098,8 @@ ATK test: OK 1988 MicroProse - + + @@ -43151,6 +43169,7 @@ ATK test: OK 1991 U.S. Gold @@ -44194,7 +44213,8 @@ ATK test: C:0 H:U Bad 1993 Accrosoft - + + @@ -47807,7 +47827,8 @@ ATK test: OK 1988 Logotron - + + @@ -57168,7 +57189,8 @@ ATK test: failed 1989 Ubi Soft - + + diff --git a/src/mame/amiga/amiga_m.cpp b/src/mame/amiga/amiga_m.cpp index c595489b5da..aeda9df1ba3 100644 --- a/src/mame/amiga/amiga_m.cpp +++ b/src/mame/amiga/amiga_m.cpp @@ -1421,6 +1421,12 @@ void amiga_state::custom_chip_w(offs_t offset, uint16_t data) popmessage("DSKDAT W %04x",data); break; + case REG_BPL1DAT: + // TODO: bpl1dat serial conversion (Team17 + some demos) + if (data) + popmessage("BPL1DAT W %04x", data); + break; + case REG_DSKSYNC: m_fdc->dsksync_w(data); break; diff --git a/src/mame/amiga/amiga_v.cpp b/src/mame/amiga/amiga_v.cpp index a61586312ee..d61c7746f6d 100644 --- a/src/mame/amiga/amiga_v.cpp +++ b/src/mame/amiga/amiga_v.cpp @@ -644,6 +644,7 @@ void amiga_state::render_scanline(bitmap_rgb32 &bitmap, int scanline) sprpix = get_sprite_pixel(x); bitplane_dma_enabled = (CUSTOM_REG(REG_DMACON) & (DMACON_BPLEN | DMACON_DMAEN)) == (DMACON_BPLEN | DMACON_DMAEN); + /* to render, we must have bitplane DMA enabled, at least 1 plane, and be within the */ /* vertical display window */ // TODO: bitplane DMA enabled applies to fetch_bitplane_data only diff --git a/src/mame/amiga/paula.cpp b/src/mame/amiga/paula.cpp index 6b8a38ca0ed..26b1e1df22b 100644 --- a/src/mame/amiga/paula.cpp +++ b/src/mame/amiga/paula.cpp @@ -9,11 +9,14 @@ DMA driven audio, the floppy controller, a serial receiver/transmitter, analog inputs and contains the interrupt controller. + References: + - https://www.amigarealm.com/computing/knowledge/hardref/ch5.htm + TODO: - Inherit FDC, serial and irq controller to here; - Move Agnus "location" logic out of here; - - low-pass filter; - - convert volume values to non-linear dB scale (cfr. ) + - low-pass filter control thru Amiga Power LED where available, technically + outside of Paula; - Verify ADKCON modulation; - Verify manual mode: \- AGA roadkill during gameplay, which also has very long period setups, @@ -298,13 +301,12 @@ void paula_device::sound_stream_update(sound_stream &stream, std::vectorvol : nextvol; - int period = (nextper == -1) ? chan->per : nextper; - s32 sample; + s16 volume = (nextvol == -1) ? chan->vol : nextvol; + s16 period = (nextper == -1) ? chan->per : nextper; + s16 sample; int i; // normalize the volume value - // FIXME: definitely not linear volume = (volume & 0x40) ? 64 : (volume & 0x3f); volume *= 4; @@ -333,7 +335,7 @@ void paula_device::sound_stream_update(sound_stream &stream, std::vectorcurticks -= ticks; @@ -341,6 +343,7 @@ void paula_device::sound_stream_update(sound_stream &stream, std::vectorcurticks = period; + // TODO: 123 for PAL machines, derive formula from clock() if (chan->curticks < 124) chan->curticks = 124; -- cgit v1.2.3