summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2024-07-25 06:51:43 +1000
committer Vas Crabb <vas@vastheman.com>2024-07-25 06:51:43 +1000
commitbf6d5d7a2deee1224bb845bcba4c30ec4e55e64f (patch)
tree63ce482fb8cdb6997e87d801b7e01db2268897e5
parent932108930d3e717778e53ebae75f1bff5da4a6b1 (diff)
Miscellaneous fixes:
igspgmcrypt.cpp: Fixed a recently-introduced Endianness issue. sega/dsbz80.cpp: Don't leak the MPEG audio decoder. sega/dsbz80.cpp: Don't initialise the sample buffer on construction - it happens on reset anyway. formats/fs_coco_os9.cpp: Use lowercase for hexadecimal literals.
-rw-r--r--src/lib/formats/fs_coco_os9.cpp48
-rw-r--r--src/mame/igs/pgmcrypt.cpp2
-rw-r--r--src/mame/sega/dsbz80.cpp24
-rw-r--r--src/mame/sega/dsbz80.h20
-rw-r--r--src/mame/skeleton/boo.cpp4
5 files changed, 56 insertions, 42 deletions
diff --git a/src/lib/formats/fs_coco_os9.cpp b/src/lib/formats/fs_coco_os9.cpp
index f8a14c7acdd..334bb9d5b79 100644
--- a/src/lib/formats/fs_coco_os9.cpp
+++ b/src/lib/formats/fs_coco_os9.cpp
@@ -364,7 +364,7 @@ std::pair<err_t, std::vector<u8>> coco_os9_impl::file_read(const std::vector<std
err_t coco_os9_impl::format(const meta_data &meta)
{
// for some reason, the OS-9 world favored filling with 0xE5
- m_blockdev.fill(0xE5);
+ m_blockdev.fill(0xe5);
// identify geometry info
u8 sectors = 18; // TODO - we need a definitive technique to get the floppy geometry
@@ -428,7 +428,7 @@ err_t coco_os9_impl::format(const meta_data &meta)
{
u32 pos = (i * sector_bytes + j) * 8;
if (pos + 8 < total_allocated_sectors)
- abblk_bytes[j] = 0xFF;
+ abblk_bytes[j] = 0xff;
else if (pos >= total_allocated_sectors)
abblk_bytes[j] = 0x00;
else
@@ -442,28 +442,28 @@ err_t coco_os9_impl::format(const meta_data &meta)
// root directory header
auto roothdr_blk = m_blockdev.get(1 + allocation_bitmap_lsns);
roothdr_blk.fill(0x00);
- roothdr_blk.w8(0x00, 0xBF);
+ roothdr_blk.w8(0x00, 0xbf);
roothdr_blk.w8(0x01, 0x00);
roothdr_blk.w8(0x02, 0x00);
roothdr_blk.w24b(0x03, creation_os9date);
roothdr_blk.w16b(0x06, creation_os9time);
roothdr_blk.w8(0x08, 0x01);
roothdr_blk.w8(0x09, 0x00);
- roothdr_blk.w8(0x0A, 0x00);
- roothdr_blk.w8(0x0B, 0x00);
- roothdr_blk.w8(0x0C, 0x40);
- roothdr_blk.w24b(0x0D, creation_os9date);
+ roothdr_blk.w8(0x0a, 0x00);
+ roothdr_blk.w8(0x0b, 0x00);
+ roothdr_blk.w8(0x0c, 0x40);
+ roothdr_blk.w24b(0x0d, creation_os9date);
roothdr_blk.w24b(0x10, 1 + allocation_bitmap_lsns + 1);
roothdr_blk.w16b(0x13, 8);
// root directory data
auto rootdata_blk = m_blockdev.get(1 + allocation_bitmap_lsns + 1);
rootdata_blk.fill(0x00);
- rootdata_blk.w8(0x00, 0x2E);
- rootdata_blk.w8(0x01, 0xAE);
- rootdata_blk.w8(0x1F, 1 + allocation_bitmap_lsns);
- rootdata_blk.w8(0x20, 0xAE);
- rootdata_blk.w8(0x3F, 1 + allocation_bitmap_lsns);
+ rootdata_blk.w8(0x00, 0x2e);
+ rootdata_blk.w8(0x01, 0xae);
+ rootdata_blk.w8(0x1f, 1 + allocation_bitmap_lsns);
+ rootdata_blk.w8(0x20, 0xae);
+ rootdata_blk.w8(0x3f, 1 + allocation_bitmap_lsns);
return ERR_OK;
}
@@ -580,7 +580,7 @@ std::string coco_os9_impl::pick_os9_string(std::string_view raw_string)
// and add the final character if we have to
if (iter < raw_string.end() && *iter & 0x80)
- result.append(1, *iter & 0x7F);
+ result.append(1, *iter & 0x7f);
return result;
}
@@ -595,7 +595,7 @@ std::string coco_os9_impl::to_os9_string(std::string_view s, size_t length)
std::string result(length, '\0');
for (auto i = 0; i < std::min(length, s.size()); i++)
{
- result[i] = (s[i] & 0x7F)
+ result[i] = (s[i] & 0x7f)
| (i == s.size() ? 0x80 : 0x00);
}
return result;
@@ -610,11 +610,11 @@ util::arbitrary_datetime coco_os9_impl::from_os9_date(u32 os9_date, u16 os9_time
{
util::arbitrary_datetime dt;
memset(&dt, 0, sizeof(dt));
- dt.year = ((os9_date >> 16) & 0xFF) + 1900;
- dt.month = (os9_date >> 8) & 0xFF;
- dt.day_of_month = (os9_date >> 0) & 0xFF;
- dt.hour = (os9_time >> 8) & 0xFF;
- dt.minute = (os9_time >> 0) & 0xFF;
+ dt.year = ((os9_date >> 16) & 0xff) + 1900;
+ dt.month = (os9_date >> 8) & 0xff;
+ dt.day_of_month = (os9_date >> 0) & 0xff;
+ dt.hour = (os9_time >> 8) & 0xff;
+ dt.minute = (os9_time >> 0) & 0xff;
return dt;
}
@@ -625,11 +625,11 @@ util::arbitrary_datetime coco_os9_impl::from_os9_date(u32 os9_date, u16 os9_time
std::tuple<u32, u16> coco_os9_impl::to_os9_date(const util::arbitrary_datetime &datetime)
{
- u32 os9_date = ((datetime.year - 1900) & 0xFF) << 16
- | (datetime.month & 0xFF) << 8
- | (datetime.day_of_month & 0xFF) << 0;
- u16 os9_time = (datetime.hour & 0xFF) << 8
- | (datetime.minute & 0xFF) << 0;
+ u32 os9_date = ((datetime.year - 1900) & 0xff) << 16
+ | (datetime.month & 0xff) << 8
+ | (datetime.day_of_month & 0xff) << 0;
+ u16 os9_time = (datetime.hour & 0xff) << 8
+ | (datetime.minute & 0xff) << 0;
return std::make_tuple(os9_date, os9_time);
}
diff --git a/src/mame/igs/pgmcrypt.cpp b/src/mame/igs/pgmcrypt.cpp
index 05fc751d77a..bf40b16c7bf 100644
--- a/src/mame/igs/pgmcrypt.cpp
+++ b/src/mame/igs/pgmcrypt.cpp
@@ -2161,7 +2161,7 @@ static const uint8_t icescape_tab[0x100] = {
void icescape_decrypt(running_machine &machine)
{
- auto const src = reinterpret_cast<u16 *>(machine.root_device().memregion("user1")->base());
+ auto const src = util::little_endian_cast<u16>(reinterpret_cast<u32 *>(machine.root_device().memregion("user1")->base()));
int const rom_size = 0x80000;
diff --git a/src/mame/sega/dsbz80.cpp b/src/mame/sega/dsbz80.cpp
index 77564109635..f6060d890cb 100644
--- a/src/mame/sega/dsbz80.cpp
+++ b/src/mame/sega/dsbz80.cpp
@@ -73,6 +73,7 @@ dsbz80_device::dsbz80_device(const machine_config &mconfig, const char *tag, dev
m_ourcpu(*this, "mpegcpu"),
m_uart(*this, "uart"),
m_mpeg_rom(*this, "mpeg"),
+ m_rxd_handler(*this),
m_mp_start(0),
m_mp_end(0),
m_mp_vol(0x7f),
@@ -84,10 +85,8 @@ dsbz80_device::dsbz80_device(const machine_config &mconfig, const char *tag, dev
m_end(0),
m_mp_pos(0),
m_audio_pos(0),
- m_audio_avail(0),
- m_rxd_handler(*this)
+ m_audio_avail(0)
{
- std::fill(std::begin(m_audio_buf), std::end(m_audio_buf), 0);
}
//-------------------------------------------------
@@ -96,7 +95,7 @@ dsbz80_device::dsbz80_device(const machine_config &mconfig, const char *tag, dev
void dsbz80_device::device_start()
{
- m_decoder = new mpeg_audio(&m_mpeg_rom[0], mpeg_audio::L2, false, 0);
+ m_decoder.reset(new mpeg_audio(&m_mpeg_rom[0], mpeg_audio::L2, false, 0));
stream_alloc(0, 2, 32000);
save_item(NAME(m_mp_start));
@@ -128,6 +127,15 @@ void dsbz80_device::device_reset()
m_uart->write_cts(0);
}
+//-------------------------------------------------
+// device_stop - device-specific cleanup
+//-------------------------------------------------
+
+void dsbz80_device::device_stop()
+{
+ m_decoder.reset();
+}
+
void dsbz80_device::write_txd(int state)
{
m_uart->write_rxd(state);
@@ -251,7 +259,7 @@ void dsbz80_device::mpeg_end_w(offs_t offset, uint8_t data)
void dsbz80_device::mpeg_volume_w(uint8_t data)
{
// TODO: MSB used but unknown purpose
- m_mp_vol = 0x7f - (data & 0x7f);
+ m_mp_vol = ~data & 0x7f;
}
void dsbz80_device::mpeg_stereo_w(uint8_t data)
@@ -268,7 +276,7 @@ void dsbz80_device::sound_stream_update(sound_stream &stream, std::vector<read_s
int sampindex = 0;
for (;;)
{
- while (samples && m_audio_pos < m_audio_avail)
+ while (samples && (m_audio_pos < m_audio_avail))
{
switch (m_mp_pan)
{
@@ -319,12 +327,12 @@ void dsbz80_device::sound_stream_update(sound_stream &stream, std::vector<read_s
{
if (m_mp_state == 2)
{
- if (m_mp_pos == m_lp_start*8)
+ if (m_mp_pos == m_lp_start * 8)
{
// We're looping on un-decodable crap, abort abort abort
m_mp_state = 0;
}
- m_mp_pos = m_lp_start*8;
+ m_mp_pos = m_lp_start * 8;
if (m_lp_end)
{
diff --git a/src/mame/sega/dsbz80.h b/src/mame/sega/dsbz80.h
index 4431e588859..e646bc79326 100644
--- a/src/mame/sega/dsbz80.h
+++ b/src/mame/sega/dsbz80.h
@@ -9,6 +9,9 @@
#include "machine/i8251.h"
#include "sound/mpeg_audio.h"
+#include <memory>
+
+
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -24,14 +27,14 @@ public:
void write_txd(int state);
- void dsbz80_map(address_map &map);
- void dsbz80io_map(address_map &map);
-
protected:
- // device-level overrides
+ // device_t implementation
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_stop() override;
virtual void device_add_mconfig(machine_config &config) override;
+
+ // device_sound_interface implementation
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
private:
@@ -39,13 +42,13 @@ private:
required_device<i8251_device> m_uart;
required_region_ptr<uint8_t> m_mpeg_rom;
- mpeg_audio *m_decoder;
+ devcb_write_line m_rxd_handler;
+
+ std::unique_ptr<mpeg_audio> m_decoder;
int16_t m_audio_buf[1152*2];
uint32_t m_mp_start, m_mp_end, m_mp_vol, m_mp_pan, m_mp_state, m_lp_start, m_lp_end, m_start, m_end;
int32_t m_mp_pos, m_audio_pos, m_audio_avail;
- devcb_write_line m_rxd_handler;
-
void output_txd(int state);
void mpeg_trigger_w(uint8_t data);
@@ -54,6 +57,9 @@ private:
void mpeg_volume_w(uint8_t data);
void mpeg_stereo_w(uint8_t data);
uint8_t mpeg_pos_r(offs_t offset);
+
+ void dsbz80_map(address_map &map);
+ void dsbz80io_map(address_map &map);
};
diff --git a/src/mame/skeleton/boo.cpp b/src/mame/skeleton/boo.cpp
index 75df476c7b0..ae595fe77e2 100644
--- a/src/mame/skeleton/boo.cpp
+++ b/src/mame/skeleton/boo.cpp
@@ -31,8 +31,8 @@ namespace {
class boo_state : public driver_device
{
public:
- boo_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ boo_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode")
{ }