summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/cpu/adsp2100/2100ops.hxx4
-rw-r--r--src/devices/imagedev/simh_tape_image.h4
-rw-r--r--src/devices/machine/smc91c9x.cpp3
-rw-r--r--src/emu/emucore.h2
-rw-r--r--src/lib/formats/dmk_dsk.cpp2
-rw-r--r--src/lib/formats/td0_dsk.cpp2
-rw-r--r--src/lib/util/multibyte.h280
-rw-r--r--src/lib/util/simh_tape_file.cpp174
-rw-r--r--src/lib/util/simh_tape_file.h62
-rw-r--r--src/lib/util/tape_file_interface.h40
-rw-r--r--src/osd/modules/render/drawbgfx.cpp58
-rw-r--r--src/tools/imgtool/modules/fat.cpp42
-rw-r--r--src/tools/imgtool/modules/os9.cpp10
-rw-r--r--src/tools/imgtool/modules/pc_flop.cpp8
14 files changed, 345 insertions, 346 deletions
diff --git a/src/devices/cpu/adsp2100/2100ops.hxx b/src/devices/cpu/adsp2100/2100ops.hxx
index bd2df9acce6..be8f4524a7a 100644
--- a/src/devices/cpu/adsp2100/2100ops.hxx
+++ b/src/devices/cpu/adsp2100/2100ops.hxx
@@ -2097,7 +2097,7 @@ void adsp21xx_device::shift_op(uint32_t op)
if (xop < 0)
{
SET_SS;
- res = count_leading_zeros_32(~xop) - 16 - 1;
+ res = count_leading_ones_32(xop) - 16 - 1;
}
else
{
@@ -2120,7 +2120,7 @@ void adsp21xx_device::shift_op(uint32_t op)
if (xop < 0)
{
SET_SS;
- res = count_leading_zeros_32(~xop) - 16 - 1;
+ res = count_leading_ones_32(xop) - 16 - 1;
}
else
{
diff --git a/src/devices/imagedev/simh_tape_image.h b/src/devices/imagedev/simh_tape_image.h
index 95f1c70b2e3..cb98056b837 100644
--- a/src/devices/imagedev/simh_tape_image.h
+++ b/src/devices/imagedev/simh_tape_image.h
@@ -30,8 +30,8 @@ public:
virtual void call_unload() override;
// miscellaneous
- inline void set_interface(const char *interface) { m_interface = interface; }
- inline simh_tape_file *get_file() const { return m_file.get(); }
+ void set_interface(const char *interface) { m_interface = interface; }
+ simh_tape_file *get_file() const { return m_file.get(); }
protected:
// construction
diff --git a/src/devices/machine/smc91c9x.cpp b/src/devices/machine/smc91c9x.cpp
index a27c1f7d281..e237d186b95 100644
--- a/src/devices/machine/smc91c9x.cpp
+++ b/src/devices/machine/smc91c9x.cpp
@@ -12,8 +12,9 @@
#include "smc91c9x.h"
#include "multibyte.h"
-#include <sstream>
+
#include <iomanip>
+#include <sstream>
/***************************************************************************
DEBUGGING
diff --git a/src/emu/emucore.h b/src/emu/emucore.h
index d87ea5ca3af..ca54f5208cd 100644
--- a/src/emu/emucore.h
+++ b/src/emu/emucore.h
@@ -228,6 +228,8 @@ class emu_exception : public std::exception { };
class emu_fatalerror : public emu_exception
{
public:
+ emu_fatalerror(emu_fatalerror const &) = default;
+ emu_fatalerror(emu_fatalerror &&) = default;
emu_fatalerror(util::format_argument_pack<char> const &args);
emu_fatalerror(int _exitcode, util::format_argument_pack<char> const &args);
diff --git a/src/lib/formats/dmk_dsk.cpp b/src/lib/formats/dmk_dsk.cpp
index 0af637076a0..6517ba9c273 100644
--- a/src/lib/formats/dmk_dsk.cpp
+++ b/src/lib/formats/dmk_dsk.cpp
@@ -15,8 +15,8 @@ TODO:
#include "dmk_dsk.h"
#include "coretmpl.h"
-#include "multibyte.h"
#include "ioprocs.h"
+#include "multibyte.h"
namespace {
diff --git a/src/lib/formats/td0_dsk.cpp b/src/lib/formats/td0_dsk.cpp
index 65dd42f47ca..079a1768c25 100644
--- a/src/lib/formats/td0_dsk.cpp
+++ b/src/lib/formats/td0_dsk.cpp
@@ -849,7 +849,7 @@ bool td0_format::load(util::random_read &io, uint32_t form_factor, const std::ve
uint64_t image_size;
if(io.length(image_size))
return false;
- if(io.read_at(12, &imagebuf[0], image_size - 12, actual) || actual != image_size - 12)
+ if(io.read_at(12, &imagebuf[0], image_size - 12, actual) || actual != (image_size - 12))
return false;
}
diff --git a/src/lib/util/multibyte.h b/src/lib/util/multibyte.h
index 706361d9df5..6af34de83ed 100644
--- a/src/lib/util/multibyte.h
+++ b/src/lib/util/multibyte.h
@@ -1,163 +1,153 @@
// license:BSD-3-Clause
// copyright-holders:Mietek Bak
-
-#ifndef MAME_LIB_UTIL_MULTIBYTE_H
-#define MAME_LIB_UTIL_MULTIBYTE_H
+#ifndef MAME_UTIL_MULTIBYTE_H
+#define MAME_UTIL_MULTIBYTE_H
#pragma once
#include "coretmpl.h"
#include "osdcomm.h"
-using osd::u8;
-using osd::u16;
-using osd::u32;
-using osd::u64;
-using osd::s8;
-using osd::s16;
-using osd::s32;
-using osd::s64;
-
//////////////////////////////////////////////////////////////////////////////
// unsigned big-endian
-inline constexpr u16 get_u16be(const u8 *const buf) noexcept
+constexpr osd::u16 get_u16be(osd::u8 const *buf) noexcept
{
- return ((const u16)buf[0] << 8)
- | ((const u16)buf[1] << 0);
+ return (osd::u16(buf[0]) << 8)
+ | (osd::u16(buf[1]) << 0);
}
-inline constexpr u32 get_u24be(const u8 *const buf) noexcept
+constexpr osd::u32 get_u24be(osd::u8 const *buf) noexcept
{
- return ((const u32)buf[0] << 16)
- | ((const u32)buf[1] << 8)
- | ((const u32)buf[2] << 0);
+ return (osd::u32(buf[0]) << 16)
+ | (osd::u32(buf[1]) << 8)
+ | (osd::u32(buf[2]) << 0);
}
-inline constexpr u32 get_u32be(const u8 *const buf) noexcept
+constexpr osd::u32 get_u32be(osd::u8 const *buf) noexcept
{
- return ((const u32)buf[0] << 24)
- | ((const u32)buf[1] << 16)
- | ((const u32)buf[2] << 8)
- | ((const u32)buf[3] << 0);
+ return (osd::u32(buf[0]) << 24)
+ | (osd::u32(buf[1]) << 16)
+ | (osd::u32(buf[2]) << 8)
+ | (osd::u32(buf[3]) << 0);
}
-inline constexpr u64 get_u48be(const u8 *const buf) noexcept
+constexpr osd::u64 get_u48be(osd::u8 const *buf) noexcept
{
- return ((const u64)buf[0] << 40)
- | ((const u64)buf[1] << 32)
- | ((const u64)buf[2] << 24)
- | ((const u64)buf[3] << 16)
- | ((const u64)buf[4] << 8)
- | ((const u64)buf[5] << 0);
+ return (osd::u64(buf[0]) << 40)
+ | (osd::u64(buf[1]) << 32)
+ | (osd::u64(buf[2]) << 24)
+ | (osd::u64(buf[3]) << 16)
+ | (osd::u64(buf[4]) << 8)
+ | (osd::u64(buf[5]) << 0);
}
-inline constexpr u64 get_u64be(const u8 *const buf) noexcept
+constexpr osd::u64 get_u64be(osd::u8 const *buf) noexcept
{
- return ((const u64)buf[0] << 56)
- | ((const u64)buf[1] << 48)
- | ((const u64)buf[2] << 40)
- | ((const u64)buf[3] << 32)
- | ((const u64)buf[4] << 24)
- | ((const u64)buf[5] << 16)
- | ((const u64)buf[6] << 8)
- | ((const u64)buf[7] << 0);
+ return (osd::u64(buf[0]) << 56)
+ | (osd::u64(buf[1]) << 48)
+ | (osd::u64(buf[2]) << 40)
+ | (osd::u64(buf[3]) << 32)
+ | (osd::u64(buf[4]) << 24)
+ | (osd::u64(buf[5]) << 16)
+ | (osd::u64(buf[6]) << 8)
+ | (osd::u64(buf[7]) << 0);
}
-inline void put_u16be(u8 *buf, const u16 data) noexcept
+inline void put_u16be(osd::u8 *buf, osd::u16 data) noexcept
{
- buf[0] = data >> 8;
- buf[1] = data >> 0;
+ buf[0] = osd::u8(data >> 8);
+ buf[1] = osd::u8(data >> 0);
}
-inline void put_u24be(u8 *buf, const u32 data) noexcept
+inline void put_u24be(osd::u8 *buf, osd::u32 data) noexcept
{
- buf[0] = data >> 16;
- buf[1] = data >> 8;
- buf[2] = data >> 0;
+ buf[0] = osd::u8(data >> 16);
+ buf[1] = osd::u8(data >> 8);
+ buf[2] = osd::u8(data >> 0);
}
-inline void put_u32be(u8 *buf, const u32 data) noexcept
+inline void put_u32be(osd::u8 *buf, osd::u32 data) noexcept
{
- buf[0] = data >> 24;
- buf[1] = data >> 16;
- buf[2] = data >> 8;
- buf[3] = data >> 0;
+ buf[0] = osd::u8(data >> 24);
+ buf[1] = osd::u8(data >> 16);
+ buf[2] = osd::u8(data >> 8);
+ buf[3] = osd::u8(data >> 0);
}
-inline void put_u48be(u8 *buf, const u64 data) noexcept
+inline void put_u48be(osd::u8 *buf, osd::u64 data) noexcept
{
- buf[0] = data >> 40;
- buf[1] = data >> 32;
- buf[2] = data >> 24;
- buf[3] = data >> 16;
- buf[4] = data >> 8;
- buf[5] = data >> 0;
+ buf[0] = osd::u8(data >> 40);
+ buf[1] = osd::u8(data >> 32);
+ buf[2] = osd::u8(data >> 24);
+ buf[3] = osd::u8(data >> 16);
+ buf[4] = osd::u8(data >> 8);
+ buf[5] = osd::u8(data >> 0);
}
-inline void put_u64be(u8 *buf, const u64 data) noexcept
+inline void put_u64be(osd::u8 *buf, osd::u64 data) noexcept
{
- buf[0] = data >> 56;
- buf[1] = data >> 48;
- buf[2] = data >> 40;
- buf[3] = data >> 32;
- buf[4] = data >> 24;
- buf[5] = data >> 16;
- buf[6] = data >> 8;
- buf[7] = data >> 0;
+ buf[0] = osd::u8(data >> 56);
+ buf[1] = osd::u8(data >> 48);
+ buf[2] = osd::u8(data >> 40);
+ buf[3] = osd::u8(data >> 32);
+ buf[4] = osd::u8(data >> 24);
+ buf[5] = osd::u8(data >> 16);
+ buf[6] = osd::u8(data >> 8);
+ buf[7] = osd::u8(data >> 0);
}
//////////////////////////////////////////////////////////////////////////////
// signed big-endian
-inline constexpr s16 get_s16be(const u8 *const buf) noexcept
+constexpr osd::s16 get_s16be(osd::u8 const *buf) noexcept
{
return get_u16be(buf);
}
-inline constexpr s32 get_s24be(const u8 *const buf) noexcept
+constexpr osd::s32 get_s24be(osd::u8 const *buf) noexcept
{
return util::sext(get_u24be(buf), 24);
}
-inline constexpr s32 get_s32be(const u8 *const buf) noexcept
+constexpr osd::s32 get_s32be(osd::u8 const *buf) noexcept
{
return get_u32be(buf);
}
-inline constexpr s64 get_s48be(const u8 *const buf) noexcept
+constexpr osd::s64 get_s48be(osd::u8 const *buf) noexcept
{
return util::sext(get_u48be(buf), 48);
}
-inline constexpr s64 get_s64be(const u8 *const buf) noexcept
+constexpr osd::s64 get_s64be(osd::u8 const *buf) noexcept
{
return get_u64be(buf);
}
-inline void put_s16be(u8 *buf, const s16 data) noexcept
+inline void put_s16be(osd::u8 *buf, osd::s16 data) noexcept
{
put_u16be(buf, data);
}
-inline void put_s24be(u8 *buf, const s32 data) noexcept
+inline void put_s24be(osd::u8 *buf, osd::s32 data) noexcept
{
put_u24be(buf, data);
}
-inline void put_s32be(u8 *buf, const s32 data) noexcept
+inline void put_s32be(osd::u8 *buf, osd::s32 data) noexcept
{
put_u32be(buf, data);
}
-inline void put_s48be(u8 *buf, const s64 data) noexcept
+inline void put_s48be(osd::u8 *buf, osd::s64 data) noexcept
{
put_u48be(buf, data);
}
-inline void put_s64be(u8 *buf, const s64 data) noexcept
+inline void put_s64be(osd::u8 *buf, osd::s64 data) noexcept
{
put_u64be(buf, data);
}
@@ -166,146 +156,146 @@ inline void put_s64be(u8 *buf, const s64 data) noexcept
// unsigned little-endian
-inline constexpr u16 get_u16le(const u8 *const buf) noexcept
+constexpr osd::u16 get_u16le(osd::u8 const *buf) noexcept
{
- return ((const u16)buf[0] << 0)
- | ((const u16)buf[1] << 8);
+ return (osd::u16(buf[0]) << 0)
+ | (osd::u16(buf[1]) << 8);
}
-inline constexpr u32 get_u24le(const u8 *const buf) noexcept
+constexpr osd::u32 get_u24le(osd::u8 const *buf) noexcept
{
- return ((const u32)buf[0] << 0)
- | ((const u32)buf[1] << 8)
- | ((const u32)buf[2] << 16);
+ return (osd::u32(buf[0]) << 0)
+ | (osd::u32(buf[1]) << 8)
+ | (osd::u32(buf[2]) << 16);
}
-inline constexpr u32 get_u32le(const u8 *const buf) noexcept
+constexpr osd::u32 get_u32le(osd::u8 const *buf) noexcept
{
- return ((const u32)buf[0] << 0)
- | ((const u32)buf[1] << 8)
- | ((const u32)buf[2] << 16)
- | ((const u32)buf[3] << 24);
+ return (osd::u32(buf[0]) << 0)
+ | (osd::u32(buf[1]) << 8)
+ | (osd::u32(buf[2]) << 16)
+ | (osd::u32(buf[3]) << 24);
}
-inline constexpr u64 get_u48le(const u8 *const buf) noexcept
+constexpr osd::u64 get_u48le(osd::u8 const *buf) noexcept
{
- return ((const u64)buf[0] << 0)
- | ((const u64)buf[1] << 8)
- | ((const u64)buf[2] << 16)
- | ((const u64)buf[3] << 24)
- | ((const u64)buf[4] << 32)
- | ((const u64)buf[5] << 40);
+ return (osd::u64(buf[0]) << 0)
+ | (osd::u64(buf[1]) << 8)
+ | (osd::u64(buf[2]) << 16)
+ | (osd::u64(buf[3]) << 24)
+ | (osd::u64(buf[4]) << 32)
+ | (osd::u64(buf[5]) << 40);
}
-inline constexpr u64 get_u64le(const u8 *const buf) noexcept
+constexpr osd::u64 get_u64le(osd::u8 const *buf) noexcept
{
- return ((const u64)buf[0] << 0)
- | ((const u64)buf[1] << 8)
- | ((const u64)buf[2] << 16)
- | ((const u64)buf[3] << 24)
- | ((const u64)buf[4] << 32)
- | ((const u64)buf[5] << 40)
- | ((const u64)buf[6] << 48)
- | ((const u64)buf[7] << 56);
+ return (osd::u64(buf[0]) << 0)
+ | (osd::u64(buf[1]) << 8)
+ | (osd::u64(buf[2]) << 16)
+ | (osd::u64(buf[3]) << 24)
+ | (osd::u64(buf[4]) << 32)
+ | (osd::u64(buf[5]) << 40)
+ | (osd::u64(buf[6]) << 48)
+ | (osd::u64(buf[7]) << 56);
}
-inline void put_u16le(u8 *buf, const u16 data) noexcept
+inline void put_u16le(osd::u8 *buf, osd::u16 data) noexcept
{
- buf[0] = data >> 0;
- buf[1] = data >> 8;
+ buf[0] = osd::u8(data >> 0);
+ buf[1] = osd::u8(data >> 8);
}
-inline void put_u24le(u8 *buf, const u32 data) noexcept
+inline void put_u24le(osd::u8 *buf, osd::u32 data) noexcept
{
- buf[0] = data >> 0;
- buf[1] = data >> 8;
- buf[2] = data >> 16;
+ buf[0] = osd::u8(data >> 0);
+ buf[1] = osd::u8(data >> 8);
+ buf[2] = osd::u8(data >> 16);
}
-inline void put_u32le(u8 *buf, const u32 data) noexcept
+inline void put_u32le(osd::u8 *buf, osd::u32 data) noexcept
{
- buf[0] = data >> 0;
- buf[1] = data >> 8;
- buf[2] = data >> 16;
- buf[3] = data >> 24;
+ buf[0] = osd::u8(data >> 0);
+ buf[1] = osd::u8(data >> 8);
+ buf[2] = osd::u8(data >> 16);
+ buf[3] = osd::u8(data >> 24);
}
-inline void put_u48le(u8 *buf, const u64 data) noexcept
+inline void put_u48le(osd::u8 *buf, osd::u64 data) noexcept
{
- buf[0] = data >> 0;
- buf[1] = data >> 8;
- buf[2] = data >> 16;
- buf[3] = data >> 24;
- buf[4] = data >> 32;
- buf[5] = data >> 40;
+ buf[0] = osd::u8(data >> 0);
+ buf[1] = osd::u8(data >> 8);
+ buf[2] = osd::u8(data >> 16);
+ buf[3] = osd::u8(data >> 24);
+ buf[4] = osd::u8(data >> 32);
+ buf[5] = osd::u8(data >> 40);
}
-inline void put_u64le(u8 *buf, const u64 data) noexcept
+inline void put_u64le(osd::u8 *buf, osd::u64 data) noexcept
{
- buf[0] = data >> 0;
- buf[1] = data >> 8;
- buf[2] = data >> 16;
- buf[3] = data >> 24;
- buf[4] = data >> 32;
- buf[5] = data >> 40;
- buf[6] = data >> 48;
- buf[7] = data >> 56;
+ buf[0] = osd::u8(data >> 0);
+ buf[1] = osd::u8(data >> 8);
+ buf[2] = osd::u8(data >> 16);
+ buf[3] = osd::u8(data >> 24);
+ buf[4] = osd::u8(data >> 32);
+ buf[5] = osd::u8(data >> 40);
+ buf[6] = osd::u8(data >> 48);
+ buf[7] = osd::u8(data >> 56);
}
//////////////////////////////////////////////////////////////////////////////
// signed little-endian
-inline constexpr s16 get_s16le(const u8 *const buf) noexcept
+constexpr osd::s16 get_s16le(osd::u8 const *buf) noexcept
{
return get_u16le(buf);
}
-inline constexpr s32 get_s24le(const u8 *const buf) noexcept
+constexpr osd::s32 get_s24le(osd::u8 const *buf) noexcept
{
return util::sext(get_u24le(buf), 24);
}
-inline constexpr s32 get_s32le(const u8 *const buf) noexcept
+constexpr osd::s32 get_s32le(osd::u8 const *buf) noexcept
{
return get_u32le(buf);
}
-inline constexpr s64 get_s48le(const u8 *const buf) noexcept
+constexpr osd::s64 get_s48le(osd::u8 const *buf) noexcept
{
return util::sext(get_u48le(buf), 48);
}
-inline constexpr s64 get_s64le(const u8 *const buf) noexcept
+constexpr osd::s64 get_s64le(osd::u8 const *buf) noexcept
{
return get_u64le(buf);
}
-inline void put_s16le(u8 *buf, const s16 data) noexcept
+inline void put_s16le(osd::u8 *buf, osd::s16 data) noexcept
{
put_u16le(buf, data);
}
-inline void put_s24le(u8 *buf, const s32 data) noexcept
+inline void put_s24le(osd::u8 *buf, osd::s32 data) noexcept
{
put_u24le(buf, data);
}
-inline void put_s32le(u8 *buf, const s32 data) noexcept
+inline void put_s32le(osd::u8 *buf, osd::s32 data) noexcept
{
put_u32le(buf, data);
}
-inline void put_s48le(u8 *buf, const s64 data) noexcept
+inline void put_s48le(osd::u8 *buf, osd::s64 data) noexcept
{
put_u48le(buf, data);
}
-inline void put_s64le(u8 *buf, const s64 data) noexcept
+inline void put_s64le(osd::u8 *buf, osd::s64 data) noexcept
{
put_u64le(buf, data);
}
//////////////////////////////////////////////////////////////////////////////
-#endif // MAME_LIB_UTIL_MULTIBYTE_H
+#endif // MAME_UTIL_MULTIBYTE_H
diff --git a/src/lib/util/simh_tape_file.cpp b/src/lib/util/simh_tape_file.cpp
index 24756b782ec..4fe1af5ae88 100644
--- a/src/lib/util/simh_tape_file.cpp
+++ b/src/lib/util/simh_tape_file.cpp
@@ -4,41 +4,41 @@
// best read together with SIMH magtape spec (rev 17 Jan 2022)
// http://simh.trailing-edge.com/docs/simh_magtape.pdf
-#include "multibyte.h"
#include "simh_tape_file.h"
#include "ioprocs.h"
+#include "multibyte.h"
#include <cassert>
+#include <cerrno>
#include <cstring>
#include <stdexcept>
-#include <errno.h>
#include <fcntl.h>
//////////////////////////////////////////////////////////////////////////////
// constants and helpers
-enum class simh_marker : u32 {
+enum class simh_marker : osd::u32 {
TAPE_MARK = 0x00000000, // filemark; TODO: SIMH doesn't define setmarks
ERASE_GAP = 0xfffffffe,
EOM = 0xffffffff
};
-inline const bool is_simh_marker_half_gap_forward(const simh_marker marker)
+inline bool is_simh_marker_half_gap_forward(const simh_marker marker)
{
// this function is used when we're reading normally (from BOM to EOM); returns true for erase gap markers that have been half overwritten
- return (const u32)marker == 0xfffeffff;
+ return osd::u32(marker) == 0xfffeffff;
}
-inline const bool is_simh_marker_half_gap_reverse(const simh_marker marker)
+inline bool is_simh_marker_half_gap_reverse(const simh_marker marker)
{
// this function is used when we're reading in reverse (from EOM to BOM); returns true for erase gap markers that have been half overwritten
- return (const u32)marker >= 0xffff0000 && (const u32)marker <= 0xfffffffd;
+ return osd::u32(marker) >= 0xffff0000 && osd::u32(marker) <= 0xfffffffd;
}
-inline const bool is_simh_marker_eod_forward(const simh_marker marker)
+inline bool is_simh_marker_eod_forward(const simh_marker marker)
{
// this function is used when we're reading normally (from BOM to EOM); returns true for markers that we consider EOD
return marker == simh_marker::ERASE_GAP
@@ -46,7 +46,7 @@ inline const bool is_simh_marker_eod_forward(const simh_marker marker)
|| marker == simh_marker::EOM; // logical EOM
}
-inline const bool is_simh_marker_eod_reverse(const simh_marker marker)
+inline bool is_simh_marker_eod_reverse(const simh_marker marker)
{
// this function is used when we're reading in reverse (from EOM to BOM); returns true for markers that we consider EOD
return marker == simh_marker::ERASE_GAP
@@ -54,7 +54,7 @@ inline const bool is_simh_marker_eod_reverse(const simh_marker marker)
|| marker == simh_marker::EOM; // logical EOM
}
-enum class simh_marker_class : u8 {
+enum class simh_marker_class : osd::u8 {
GOOD_DATA_RECORD = 0x0,
PRIVATE_DATA_RECORD_1 = 0x1,
PRIVATE_DATA_RECORD_2 = 0x2,
@@ -73,21 +73,21 @@ enum class simh_marker_class : u8 {
RESERVED_MARKER = 0xf
};
-inline const simh_marker_class get_simh_marker_class(const simh_marker marker)
+inline simh_marker_class get_simh_marker_class(const simh_marker marker)
{
- return (const simh_marker_class)((const u32)marker >> 28);
+ return simh_marker_class(osd::u32(marker) >> 28);
}
-inline const u32 get_simh_marker_value(const simh_marker marker)
+inline osd::u32 get_simh_marker_value(const simh_marker marker)
{
- return (const u32)marker & 0x0fffffff;
+ return osd::u32(marker) & 0x0fffffff;
}
//////////////////////////////////////////////////////////////////////////////
// construction
-simh_tape_file::simh_tape_file(util::random_read_write &file, const u64 file_size, const bool read_only, const bool create)
+simh_tape_file::simh_tape_file(util::random_read_write &file, osd::u64 file_size, bool read_only, bool create)
: m_file(file)
, m_file_size(file_size)
, m_read_only(read_only)
@@ -110,14 +110,14 @@ simh_tape_file::~simh_tape_file()
// internal operations
-void simh_tape_file::raw_seek(const u64 pos) const
+void simh_tape_file::raw_seek(const osd::u64 pos) const
{
std::error_condition err = m_file.seek(pos, SEEK_SET);
if (err) // error: we failed to seek to expected byte offset
throw std::runtime_error(std::string("failed seek: ") + err.message());
}
-void simh_tape_file::raw_read(u8 *const buf, const u32 len) const
+void simh_tape_file::raw_read(osd::u8 *const buf, const osd::u32 len) const
{
size_t actual_len;
std::error_condition err = m_file.read(buf, len, actual_len);
@@ -125,7 +125,7 @@ void simh_tape_file::raw_read(u8 *const buf, const u32 len) const
throw std::runtime_error(std::string("failed read: ") + (err ? err.message() : std::string("unexpected length")));
}
-void simh_tape_file::raw_write(const u8 *const buf, const u32 len) const
+void simh_tape_file::raw_write(const osd::u8 *const buf, const osd::u32 len) const
{
size_t actual_len;
std::error_condition err = m_file.write(buf, len, actual_len);
@@ -133,42 +133,42 @@ void simh_tape_file::raw_write(const u8 *const buf, const u32 len) const
throw std::runtime_error(std::string("failed write: ") + (err ? err.message() : std::string("unexpected length")));
}
-void simh_tape_file::read_bytes(const u64 pos, u8 *const buf, const u32 len) const
+void simh_tape_file::read_bytes(const osd::u64 pos, osd::u8 *const buf, const osd::u32 len) const
{
raw_seek(pos);
raw_read(buf, len);
}
-const u32 simh_tape_file::read_word(const u64 pos) const
+osd::u32 simh_tape_file::read_word(const osd::u64 pos) const
{
- const u32 tmp_len = 4;
- u8 tmp_buf[tmp_len];
+ const osd::u32 tmp_len = 4;
+ osd::u8 tmp_buf[tmp_len];
raw_seek(pos);
raw_read(tmp_buf, tmp_len);
return get_u32le(tmp_buf);
}
-void simh_tape_file::write_bytes(const u64 pos, const u8 *const buf, const u32 len) const
+void simh_tape_file::write_bytes(const osd::u64 pos, const osd::u8 *const buf, const osd::u32 len) const
{
raw_seek(pos);
raw_write(buf, len);
}
-void simh_tape_file::write_byte_repeat(const u64 pos, const u8 data, const u32 len) const
+void simh_tape_file::write_byte_repeat(const osd::u64 pos, const osd::u8 data, const osd::u32 len) const
{
- const u32 tmp_len = 4096;
- u8 tmp_buf[tmp_len];
+ const osd::u32 tmp_len = 4096;
+ osd::u8 tmp_buf[tmp_len];
memset(tmp_buf, data, std::min(len, tmp_len));
raw_seek(pos);
- for (u32 i = 0; i < len / tmp_len; i++)
+ for (osd::u32 i = 0; i < len / tmp_len; i++)
raw_write(tmp_buf, tmp_len);
raw_write(tmp_buf, len % tmp_len);
}
-void simh_tape_file::write_word(const u64 pos, const u32 data) const
+void simh_tape_file::write_word(const osd::u64 pos, const osd::u32 data) const
{
- const u32 tmp_len = 4;
- u8 tmp_buf[tmp_len];
+ const osd::u32 tmp_len = 4;
+ osd::u8 tmp_buf[tmp_len];
put_u32le(tmp_buf, data);
raw_seek(pos);
raw_write(tmp_buf, tmp_len);
@@ -178,7 +178,7 @@ void simh_tape_file::write_word(const u64 pos, const u32 data) const
// position-preserving operations
-const std::pair<const tape_status, const u32> simh_tape_file::read_position() const
+std::pair<tape_status, osd::u32> simh_tape_file::read_position() const
{
// this module only keeps track of current tape position, therefore this function scans from BOM to find and return current block address, taking linear time; TODO: this module could be rewritten to also keep track of current block address, therefore enabling this function to only take constant time
assert(m_pos <= m_file_size);
@@ -190,13 +190,13 @@ const std::pair<const tape_status, const u32> simh_tape_file::read_position() co
return std::pair(tape_status::EOM, 0);
// we need to count how many blocks are between BOM and us
- u32 blocks_num = 0;
- u64 tmp_pos = 0;
+ osd::u32 blocks_num = 0;
+ osd::u64 tmp_pos = 0;
while (tmp_pos < m_pos) {
if (tmp_pos + 4 > m_file_size) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(tmp_pos);
+ const simh_marker marker = simh_marker(read_word(tmp_pos));
if (marker == simh_marker::TAPE_MARK) { // we skip filemarks
tmp_pos += 4;
continue;
@@ -205,9 +205,9 @@ const std::pair<const tape_status, const u32> simh_tape_file::read_position() co
return std::pair(is_ew() ? tape_status::UNKNOWN_EW : tape_status::UNKNOWN, 0);
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -240,24 +240,24 @@ const std::pair<const tape_status, const u32> simh_tape_file::read_position() co
// non-destructive operations
-void simh_tape_file::rewind(const bool eom)
+void simh_tape_file::rewind(bool eom)
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
m_pos = eom ? m_file_size : 0;
}
-const tape_status simh_tape_file::locate_block(const u32 req_block_addr)
+tape_status simh_tape_file::locate_block(osd::u32 req_block_addr)
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
- u32 blocks_num = 0;
+ osd::u32 blocks_num = 0;
m_pos = 0;
while (m_pos < m_file_size) {
if (m_pos + 4 > m_file_size) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(m_pos);
+ const simh_marker marker = simh_marker(read_word(m_pos));
if (marker == simh_marker::TAPE_MARK) { // we skip filemarks
m_pos += 4;
continue;
@@ -266,9 +266,9 @@ const tape_status simh_tape_file::locate_block(const u32 req_block_addr)
return is_ew() ? tape_status::EOD_EW : tape_status::EOD;
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -296,7 +296,7 @@ const tape_status simh_tape_file::locate_block(const u32 req_block_addr)
return tape_status::EOM;
}
-const tape_status simh_tape_file::space_eod()
+tape_status simh_tape_file::space_eod()
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
@@ -304,7 +304,7 @@ const tape_status simh_tape_file::space_eod()
if (m_pos + 4 > m_file_size) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(m_pos);
+ const simh_marker marker = simh_marker(read_word(m_pos));
if (marker == simh_marker::TAPE_MARK) { // we skip filemarks
m_pos += 4;
continue;
@@ -313,9 +313,9 @@ const tape_status simh_tape_file::space_eod()
return tape_status::OK;
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -334,17 +334,17 @@ const tape_status simh_tape_file::space_eod()
return tape_status::EOM;
}
-const std::pair<const tape_status, const u32> simh_tape_file::space_blocks(const u32 req_blocks_num)
+std::pair<tape_status, osd::u32> simh_tape_file::space_blocks(osd::u32 req_blocks_num)
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
assert(req_blocks_num > 0);
- u32 blocks_num = 0;
+ osd::u32 blocks_num = 0;
while (m_pos < m_file_size) {
if (m_pos + 4 > m_file_size) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(m_pos);
+ const simh_marker marker = simh_marker(read_word(m_pos));
if (marker == simh_marker::TAPE_MARK) { // error: we reached filemark
m_pos += 4;
return std::pair(is_ew() ? tape_status::FILEMARK_EW : tape_status::FILEMARK, blocks_num);
@@ -353,9 +353,9 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_blocks(const
return std::pair(is_ew() ? tape_status::EOD_EW : tape_status::EOD, blocks_num);
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -383,19 +383,19 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_blocks(const
return std::pair(tape_status::EOM, blocks_num);
}
-const std::pair<const tape_status, const u32> simh_tape_file::space_filemarks(const u32 req_filemarks_num, const bool setmarks, const bool sequential)
+std::pair<tape_status, osd::u32> simh_tape_file::space_filemarks(osd::u32 req_filemarks_num, bool setmarks, bool sequential)
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
assert(req_filemarks_num > 0);
assert(!setmarks); // TODO: SIMH doesn't define setmarks
assert(!sequential); // TODO: support spacing over sequential filemarks, once we have good way to test it
- u32 filemarks_num = 0;
+ osd::u32 filemarks_num = 0;
while (m_pos < m_file_size) {
if (m_pos + 4 > m_file_size) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(m_pos);
+ const simh_marker marker = simh_marker(read_word(m_pos));
if (marker == simh_marker::TAPE_MARK) { // we count filemarks
m_pos += 4;
filemarks_num++;
@@ -408,9 +408,9 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_filemarks(co
return std::pair(is_ew() ? tape_status::EOD_EW : tape_status::EOD, filemarks_num);
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -429,17 +429,17 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_filemarks(co
return std::pair(tape_status::EOM, filemarks_num);
}
-const std::pair<const tape_status, const u32> simh_tape_file::space_blocks_reverse(const u32 req_blocks_num)
+std::pair<tape_status, osd::u32> simh_tape_file::space_blocks_reverse(osd::u32 req_blocks_num)
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
assert(req_blocks_num > 0);
- u32 blocks_num = 0;
+ osd::u32 blocks_num = 0;
while (m_pos > 0) {
if (m_pos - 4 < 0) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(m_pos - 4);
+ const simh_marker marker = simh_marker(read_word(m_pos - 4));
if (marker == simh_marker::TAPE_MARK) { // error: we reached filemark
m_pos -= 4;
return std::pair(is_ew() ? tape_status::FILEMARK_EW : tape_status::FILEMARK, blocks_num);
@@ -448,9 +448,9 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_blocks_rever
return std::pair(is_ew() ? tape_status::EOD_EW : tape_status::EOD, blocks_num);
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -478,19 +478,19 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_blocks_rever
return std::pair(tape_status::BOM, blocks_num);
}
-const std::pair<const tape_status, const u32> simh_tape_file::space_filemarks_reverse(const u32 req_filemarks_num, const bool setmarks, const bool sequential)
+std::pair<tape_status, osd::u32> simh_tape_file::space_filemarks_reverse(osd::u32 req_filemarks_num, bool setmarks, bool sequential)
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
assert(req_filemarks_num > 0);
assert(!setmarks); // TODO: SIMH doesn't define setmarks
assert(!sequential); // TODO: support spacing over sequential filemarks, once we have good way to test it
- u32 filemarks_num = 0;
+ osd::u32 filemarks_num = 0;
while (m_pos > 0) {
if (m_pos - 4 < 0) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(m_pos - 4);
+ const simh_marker marker = simh_marker(read_word(m_pos - 4));
if (marker == simh_marker::TAPE_MARK) { // we count filemarks
m_pos -= 4;
filemarks_num++;
@@ -503,9 +503,9 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_filemarks_re
return std::pair(is_ew() ? tape_status::EOD_EW : tape_status::EOD, filemarks_num);
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -524,7 +524,7 @@ const std::pair<const tape_status, const u32> simh_tape_file::space_filemarks_re
return std::pair(tape_status::BOM, filemarks_num);
}
-const std::pair<const tape_status, const u32> simh_tape_file::read_block(u8 *buf, const u32 buf_size)
+std::pair<tape_status, osd::u32> simh_tape_file::read_block(osd::u8 *buf, osd::u32 buf_size)
{
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
@@ -532,7 +532,7 @@ const std::pair<const tape_status, const u32> simh_tape_file::read_block(u8 *buf
if (m_pos + 4 > m_file_size) // error: truncated marker
throw std::runtime_error("truncated marker");
- const simh_marker marker = (const simh_marker)read_word(m_pos);
+ const simh_marker marker = simh_marker(read_word(m_pos));
if (marker == simh_marker::TAPE_MARK) { // error: we reached filemark
m_pos += 4;
return std::pair(is_ew() ? tape_status::FILEMARK_EW : tape_status::FILEMARK, 0);
@@ -541,9 +541,9 @@ const std::pair<const tape_status, const u32> simh_tape_file::read_block(u8 *buf
return std::pair(is_ew() ? tape_status::EOD_EW : tape_status::EOD, 0);
const simh_marker_class marker_class = get_simh_marker_class(marker);
- const u32 block_len = get_simh_marker_value(marker);
- const u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
- const u32 read_len = 4 + block_len + pad_len + 4;
+ const osd::u32 block_len = get_simh_marker_value(marker);
+ const osd::u32 pad_len = block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 read_len = 4 + block_len + pad_len + 4;
switch (marker_class) {
case simh_marker_class::PRIVATE_MARKER: // we skip other markers
case simh_marker_class::RESERVED_MARKER:
@@ -577,23 +577,23 @@ const std::pair<const tape_status, const u32> simh_tape_file::read_block(u8 *buf
// destructive operations
-void simh_tape_file::erase(const bool eom)
+void simh_tape_file::erase(bool eom)
{
assert(!m_read_only);
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
- const u32 write_len = m_file_size - m_pos; // we always erase entire remainder of tape
+ const osd::u32 write_len = m_file_size - m_pos; // we always erase entire remainder of tape
write_byte_repeat(m_pos, 0xff, write_len); // we assume simh_marker::EOM == 0xffffffff
m_pos += write_len;
}
-const tape_status simh_tape_file::write_block(const u8 *const buf, const u32 req_block_len)
+tape_status simh_tape_file::write_block(const osd::u8 *buf, osd::u32 req_block_len)
{
assert(!m_read_only);
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
- const u32 pad_len = req_block_len % 2; // pad odd-length blocks with 1 byte
- const u32 write_len = 4 + req_block_len + pad_len + 4;
+ const osd::u32 pad_len = req_block_len % 2; // pad odd-length blocks with 1 byte
+ const osd::u32 write_len = 4 + req_block_len + pad_len + 4;
if (m_pos + write_len >= m_file_size) // error: we reached physical EOM
return tape_status::EOM;
@@ -605,18 +605,18 @@ const tape_status simh_tape_file::write_block(const u8 *const buf, const u32 req
return is_ew() ? tape_status::EW : tape_status::OK; // success: we wrote another block
}
-const tape_status simh_tape_file::write_filemarks(const u32 req_filemarks_num, const bool setmarks)
+tape_status simh_tape_file::write_filemarks(osd::u32 req_filemarks_num, bool setmarks)
{
assert(!m_read_only);
assert(m_pos <= m_file_size);
assert(m_pos % 2 == 0);
assert(!setmarks); // TODO: SIMH doesn't define setmarks
- const u32 write_len = req_filemarks_num * 4;
+ const osd::u32 write_len = req_filemarks_num * 4;
if (m_pos + write_len >= m_file_size) // error: we reached physical EOM
return tape_status::EOM;
- for (u32 i = 0; i < write_len; i += 4)
- write_word(m_pos + i, (const u32)simh_marker::TAPE_MARK);
+ for (osd::u32 i = 0; i < write_len; i += 4)
+ write_word(m_pos + i, osd::u32(simh_marker::TAPE_MARK));
m_pos += write_len;
return is_ew() ? tape_status::EW : tape_status::OK; // success: we wrote all filemarks
}
diff --git a/src/lib/util/simh_tape_file.h b/src/lib/util/simh_tape_file.h
index 38edad71541..62c704a376b 100644
--- a/src/lib/util/simh_tape_file.h
+++ b/src/lib/util/simh_tape_file.h
@@ -1,15 +1,15 @@
// license:BSD-3-Clause
// copyright-holders:Mietek Bak
-
-#ifndef MAME_LIB_UTIL_SIMH_TAPE_FILE_H
-#define MAME_LIB_UTIL_SIMH_TAPE_FILE_H
+#ifndef MAME_UTIL_SIMH_TAPE_FILE_H
+#define MAME_UTIL_SIMH_TAPE_FILE_H
#pragma once
#include "tape_file_interface.h"
-
#include "utilfwd.h"
+#include "osdcomm.h"
+
#include <string>
//////////////////////////////////////////////////////////////////////////////
@@ -18,48 +18,48 @@ class simh_tape_file : public tape_file_interface
{
public:
// construction and destruction
- simh_tape_file(util::random_read_write &file, const u64 file_size, const bool read_only, const bool create = false);
+ simh_tape_file(util::random_read_write &file, osd::u64 file_size, bool read_only, bool create = false);
virtual ~simh_tape_file();
// position-preserving operations
- virtual const bool is_read_only() const override { return m_read_only; }
- virtual const bool is_ew() const override { return m_pos + 32768 >= m_file_size; } // 32KB from EOM; TODO: ANSI says EW should be 10ft from EOM regardless of density
- virtual const u8 get_density_code() const override { return 0; } // TODO: SIMH doesn't define density
- virtual const std::pair<const tape_status, const u32> read_position() const override;
+ virtual bool is_read_only() const override { return m_read_only; }
+ virtual bool is_ew() const override { return m_pos + 32768 >= m_file_size; } // 32KB from EOM; TODO: ANSI says EW should be 10ft from EOM regardless of density
+ virtual osd::u8 get_density_code() const override { return 0; } // TODO: SIMH doesn't define density
+ virtual std::pair<tape_status, osd::u32> read_position() const override;
// non-destructive operations
- virtual void rewind(const bool eom) override;
- virtual const tape_status locate_block(const u32 req_block_addr) override;
- virtual const tape_status space_eod() override;
- virtual const std::pair<const tape_status, const u32> space_blocks(const u32 req_blocks_num) override;
- virtual const std::pair<const tape_status, const u32> space_blocks_reverse(const u32 req_blocks_num) override;
- virtual const std::pair<const tape_status, const u32> space_filemarks(const u32 req_marks_num, const bool setmarks = false, const bool sequential = false) override;
- virtual const std::pair<const tape_status, const u32> space_filemarks_reverse(const u32 req_marks_num, const bool setmarks = false, const bool sequential = false) override;
- virtual const std::pair<const tape_status, const u32> read_block(u8 *const buf, const u32 buf_size) override;
+ virtual void rewind(bool eom) override;
+ virtual tape_status locate_block(osd::u32 req_block_addr) override;
+ virtual tape_status space_eod() override;
+ virtual std::pair<tape_status, osd::u32> space_blocks(osd::u32 req_blocks_num) override;
+ virtual std::pair<tape_status, osd::u32> space_blocks_reverse(osd::u32 req_blocks_num) override;
+ virtual std::pair<tape_status, osd::u32> space_filemarks(osd::u32 req_marks_num, bool setmarks = false, bool sequential = false) override;
+ virtual std::pair<tape_status, osd::u32> space_filemarks_reverse(osd::u32 req_marks_num, bool setmarks = false, bool sequential = false) override;
+ virtual std::pair<tape_status, osd::u32> read_block(osd::u8 *buf, osd::u32 buf_size) override;
// destructive operations
- virtual void erase(const bool eom) override;
- virtual const tape_status write_block(const u8 *const buf, const u32 len) override;
- virtual const tape_status write_filemarks(const u32 req_marks_num, const bool setmarks = false) override;
+ virtual void erase(bool eom) override;
+ virtual tape_status write_block(const osd::u8 *buf, osd::u32 len) override;
+ virtual tape_status write_filemarks(osd::u32 req_marks_num, bool setmarks = false) override;
protected:
// internal operations
- void raw_seek(const u64 pos) const;
- void raw_read(u8 *const buf, const u32 len) const;
- void raw_write(const u8 *const buf, const u32 len) const;
- void read_bytes(const u64 pos, u8 *const buf, const u32 len) const;
- const u32 read_word(const u64 pos) const;
- void write_bytes(const u64 pos, const u8 *const buf, const u32 len) const;
- void write_byte_repeat(const u64 pos, const u8 data, const u32 len) const;
- void write_word(const u64 pos, const u32 data) const;
+ void raw_seek(const osd::u64 pos) const;
+ void raw_read(osd::u8 *const buf, const osd::u32 len) const;
+ void raw_write(const osd::u8 *const buf, const osd::u32 len) const;
+ void read_bytes(const osd::u64 pos, osd::u8 *const buf, const osd::u32 len) const;
+ osd::u32 read_word(const osd::u64 pos) const;
+ void write_bytes(const osd::u64 pos, const osd::u8 *const buf, const osd::u32 len) const;
+ void write_byte_repeat(const osd::u64 pos, const osd::u8 data, const osd::u32 len) const;
+ void write_word(const osd::u64 pos, const osd::u32 data) const;
// state
util::random_read_write &m_file; // tape image file
- u64 m_file_size; // size of tape image file
+ osd::u64 m_file_size; // size of tape image file
bool m_read_only; // should we disallow destructive operations on tape image
- u64 m_pos; // tape position
+ osd::u64 m_pos; // tape position
};
//////////////////////////////////////////////////////////////////////////////
-#endif // MAME_LIB_UTIL_SIMH_TAPE_FILE_H
+#endif // MAME_UTIL_SIMH_TAPE_FILE_H
diff --git a/src/lib/util/tape_file_interface.h b/src/lib/util/tape_file_interface.h
index 13c3f559b66..8003c05777f 100644
--- a/src/lib/util/tape_file_interface.h
+++ b/src/lib/util/tape_file_interface.h
@@ -1,16 +1,16 @@
// license:BSD-3-Clause
// copyright-holders:Mietek Bak
-
-#ifndef MAME_LIB_UTIL_TAPE_FILE_INTERFACE_H
-#define MAME_LIB_UTIL_TAPE_FILE_INTERFACE_H
+#ifndef MAME_UTIL_TAPE_FILE_INTERFACE_H
+#define MAME_UTIL_TAPE_FILE_INTERFACE_H
#pragma once
+#include <cstdint>
#include <utility>
//////////////////////////////////////////////////////////////////////////////
-enum class tape_status : u8 {
+enum class tape_status : std::uint8_t {
OK, // oll korrekt
BOM, // beginning of medium
EW, // early warning
@@ -32,27 +32,27 @@ public:
virtual ~tape_file_interface() {}
// position-preserving operations
- virtual const bool is_read_only() const = 0;
- virtual const bool is_ew() const = 0;
- virtual const u8 get_density_code() const = 0;
- virtual const std::pair<const tape_status, const u32> read_position() const = 0;
+ virtual bool is_read_only() const = 0;
+ virtual bool is_ew() const = 0;
+ virtual std::uint8_t get_density_code() const = 0;
+ virtual std::pair<tape_status, std::uint32_t> read_position() const = 0;
// non-destructive operations
- virtual void rewind(const bool eom) = 0;
- virtual const tape_status locate_block(const u32 req_block_addr) = 0;
- virtual const tape_status space_eod() = 0;
- virtual const std::pair<const tape_status, const u32> space_blocks(const u32 req_blocks_num) = 0;
- virtual const std::pair<const tape_status, const u32> space_filemarks(const u32 req_marks_num, const bool setmarks = false, const bool sequential = false) = 0;
- virtual const std::pair<const tape_status, const u32> space_blocks_reverse(const u32 req_blocks_num) = 0;
- virtual const std::pair<const tape_status, const u32> space_filemarks_reverse(const u32 req_marks_num, const bool setmarks = false, const bool sequential = false) = 0;
- virtual const std::pair<const tape_status, const u32> read_block(u8 *const buf, const u32 buf_size) = 0;
+ virtual void rewind(bool eom) = 0;
+ virtual tape_status locate_block(std::uint32_t req_block_addr) = 0;
+ virtual tape_status space_eod() = 0;
+ virtual std::pair<tape_status, std::uint32_t> space_blocks(std::uint32_t req_blocks_num) = 0;
+ virtual std::pair<tape_status, std::uint32_t> space_filemarks(std::uint32_t req_marks_num, bool setmarks = false, bool sequential = false) = 0;
+ virtual std::pair<tape_status, std::uint32_t> space_blocks_reverse(std::uint32_t req_blocks_num) = 0;
+ virtual std::pair<tape_status, std::uint32_t> space_filemarks_reverse(std::uint32_t req_marks_num, bool setmarks = false, bool sequential = false) = 0;
+ virtual std::pair<tape_status, std::uint32_t> read_block(std::uint8_t *buf, std::uint32_t buf_size) = 0;
// destructive operations
- virtual void erase(const bool eom) = 0;
- virtual const tape_status write_block(const u8 *const buf, const u32 len) = 0;
- virtual const tape_status write_filemarks(const u32 req_marks_num, const bool setmarks = false) = 0;
+ virtual void erase(bool eom) = 0;
+ virtual tape_status write_block(const std::uint8_t *buf, std::uint32_t len) = 0;
+ virtual tape_status write_filemarks(std::uint32_t req_marks_num, bool setmarks = false) = 0;
};
//////////////////////////////////////////////////////////////////////////////
-#endif // MAME_LIB_UTIL_TAPE_FILE_INTERFACE_H
+#endif // MAME_UTIL_TAPE_FILE_INTERFACE_H
diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp
index 19da01898e1..36758914961 100644
--- a/src/osd/modules/render/drawbgfx.cpp
+++ b/src/osd/modules/render/drawbgfx.cpp
@@ -532,37 +532,40 @@ uint32_t renderer_bgfx::s_height[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
//============================================================
#ifdef OSD_SDL
-static void *sdlNativeWindowHandle(SDL_Window *window)
+static std::pair<void *, bool> sdlNativeWindowHandle(SDL_Window *window)
{
SDL_SysWMinfo wmi;
SDL_VERSION(&wmi.version);
if (!SDL_GetWindowWMInfo(window, &wmi))
- return nullptr;
+ return std::make_pair(nullptr, false);
switch (wmi.subsystem)
{
#if defined(SDL_VIDEO_DRIVER_WINDOWS)
case SDL_SYSWM_WINDOWS:
- return wmi.info.win.window;
+ return std::make_pair(wmi.info.win.window, true);
#endif
#if defined(SDL_VIDEO_DRIVER_X11)
case SDL_SYSWM_X11:
- return (void *)uintptr_t(wmi.info.x11.window);
+ return std::make_pair((void *)uintptr_t(wmi.info.x11.window), true);
#endif
#if defined(SDL_VIDEO_DRIVER_COCOA)
case SDL_SYSWM_COCOA:
- return wmi.info.cocoa.window;
+ return std::make_pair(wmi.info.cocoa.window, true);
#endif
#if defined(SDL_VIDEO_DRIVER_WAYLAND) && SDL_VERSION_ATLEAST(2, 0, 16) && defined(SDLMAME_USE_WAYLAND)
case SDL_SYSWM_WAYLAND:
- return osd::create_wl_egl_window(window, wmi.info.wl.surface);
+ {
+ void *const platform_window = osd::create_wl_egl_window(window, wmi.info.wl.surface);
+ return std::make_pair(platform_window, platform_window != nullptr);
+ }
#endif
#if defined(SDL_VIDEO_DRIVER_ANDROID)
case SDL_SYSWM_ANDROID:
- return wmi.info.android.window;
+ return std::make_pair(wmi.info.android.window, true);
#endif
default:
- return nullptr;
+ return std::make_pair(nullptr, false);
}
}
#endif // OSD_SDL
@@ -654,20 +657,6 @@ int renderer_bgfx::create()
m_textures = std::make_unique<texture_manager>();
m_targets = std::make_unique<target_manager>(*m_textures);
- m_shaders = std::make_unique<shader_manager>();
- m_effects = std::make_unique<effect_manager>(*m_shaders);
-
- // Create program from shaders.
- m_gui_effect[0] = m_effects->get_or_load_effect(m_module().options(), "gui_opaque");
- m_gui_effect[1] = m_effects->get_or_load_effect(m_module().options(), "gui_blend");
- m_gui_effect[2] = m_effects->get_or_load_effect(m_module().options(), "gui_multiply");
- m_gui_effect[3] = m_effects->get_or_load_effect(m_module().options(), "gui_add");
-
- m_screen_effect[0] = m_effects->get_or_load_effect(m_module().options(), "screen_opaque");
- m_screen_effect[1] = m_effects->get_or_load_effect(m_module().options(), "screen_blend");
- m_screen_effect[2] = m_effects->get_or_load_effect(m_module().options(), "screen_multiply");
- m_screen_effect[3] = m_effects->get_or_load_effect(m_module().options(), "screen_add");
-
if (window().index() != 0)
{
#ifdef OSD_WINDOWS
@@ -675,7 +664,14 @@ int renderer_bgfx::create()
#elif defined(OSD_MAC)
m_framebuffer = m_targets->create_backbuffer(GetOSWindow(dynamic_cast<mac_window_info &>(window()).platform_window()), s_width[window().index()], s_height[window().index()]);
#else
- m_framebuffer = m_targets->create_backbuffer(sdlNativeWindowHandle(dynamic_cast<sdl_window_info &>(window()).platform_window()), s_width[window().index()], s_height[window().index()]);
+ auto const [winhdl, success] = sdlNativeWindowHandle(dynamic_cast<sdl_window_info &>(window()).platform_window());
+ if (!success)
+ {
+ m_targets.reset();
+ m_textures.reset();
+ return -1;
+ }
+ m_framebuffer = m_targets->create_backbuffer(winhdl, s_width[window().index()], s_height[window().index()]);
#endif
bgfx::touch(window().index());
@@ -683,6 +679,20 @@ int renderer_bgfx::create()
m_ortho_view->set_backbuffer(m_framebuffer);
}
+ m_shaders = std::make_unique<shader_manager>();
+ m_effects = std::make_unique<effect_manager>(*m_shaders);
+
+ // Create program from shaders.
+ m_gui_effect[0] = m_effects->get_or_load_effect(m_module().options(), "gui_opaque");
+ m_gui_effect[1] = m_effects->get_or_load_effect(m_module().options(), "gui_blend");
+ m_gui_effect[2] = m_effects->get_or_load_effect(m_module().options(), "gui_multiply");
+ m_gui_effect[3] = m_effects->get_or_load_effect(m_module().options(), "gui_add");
+
+ m_screen_effect[0] = m_effects->get_or_load_effect(m_module().options(), "screen_opaque");
+ m_screen_effect[1] = m_effects->get_or_load_effect(m_module().options(), "screen_blend");
+ m_screen_effect[2] = m_effects->get_or_load_effect(m_module().options(), "screen_multiply");
+ m_screen_effect[3] = m_effects->get_or_load_effect(m_module().options(), "screen_add");
+
const uint32_t max_prescale_size = std::min(2u * std::max(wdim.width(), wdim.height()), m_module().max_texture_size());
m_chains = std::make_unique<chain_manager>(
window().machine(),
@@ -1355,7 +1365,7 @@ bool renderer_bgfx::update_dimensions()
#elif defined(OSD_MAC)
m_framebuffer = m_targets->create_backbuffer(GetOSWindow(dynamic_cast<mac_window_info &>(window()).platform_window()), width, height);
#else
- m_framebuffer = m_targets->create_backbuffer(sdlNativeWindowHandle(dynamic_cast<sdl_window_info &>(window()).platform_window()), width, height);
+ m_framebuffer = m_targets->create_backbuffer(sdlNativeWindowHandle(dynamic_cast<sdl_window_info &>(window()).platform_window()).first, width, height);
#endif
if (m_ortho_view)
{
diff --git a/src/tools/imgtool/modules/fat.cpp b/src/tools/imgtool/modules/fat.cpp
index ca7c8291a74..f61d073b5f8 100644
--- a/src/tools/imgtool/modules/fat.cpp
+++ b/src/tools/imgtool/modules/fat.cpp
@@ -423,7 +423,7 @@ static imgtoolerr_t fat_partition_open(imgtool::partition &partition, uint64_t f
if (info->sectors_per_cluster == 0)
return IMGTOOLERR_CORRUPTIMAGE;
- info->total_sectors = total_sectors_l + (((uint64_t) total_sectors_h) << 16);
+ info->total_sectors = total_sectors_l + (uint64_t(total_sectors_h) << 16);
available_sectors = info->total_sectors - info->reserved_sectors
- (info->sectors_per_fat * info->fat_count)
- (info->root_entries * FAT_DIRENT_SIZE + FAT_SECLEN - 1) / FAT_SECLEN;
@@ -526,13 +526,13 @@ static imgtoolerr_t fat_partition_create(imgtool::image &image, uint64_t first_b
header[14] = reserved_sectors;
header[16] = fat_count;
put_u16le(&header[17], root_dir_count);
- put_u16le(&header[19], (uint16_t) (block_count >> 0));
+ put_u16le(&header[19], uint16_t(block_count >> 0));
header[21] = media_descriptor;
put_u16le(&header[22], sectors_per_fat);
put_u16le(&header[24], sectors_per_track);
put_u16le(&header[26], heads);
put_u32le(&header[28], hidden_sectors);
- put_u32le(&header[32], (uint32_t) (block_count >> 16));
+ put_u32le(&header[32], uint32_t(block_count >> 16));
header[36] = 0xFF;
header[38] = 0x28;
header[39] = std::rand();
@@ -554,14 +554,14 @@ static imgtoolerr_t fat_partition_create(imgtool::image &image, uint64_t first_b
if (boot_sector_offset <= 129)
{
header[0] = 0xEB; /* JMP rel8 */
- header[1] = (uint8_t) (boot_sector_offset - 2); /* (offset) */
+ header[1] = uint8_t(boot_sector_offset - 2); /* (offset) */
header[2] = 0x90; /* NOP */
}
else
{
header[0] = 0xE9; /* JMP rel16 */
- header[1] = (uint8_t) ((boot_sector_offset - 2) >> 0); /* (offset) */
- header[2] = (uint8_t) ((boot_sector_offset - 2) >> 8); /* (offset) */
+ header[1] = uint8_t((boot_sector_offset - 2) >> 0); /* (offset) */
+ header[2] = uint8_t((boot_sector_offset - 2) >> 8); /* (offset) */
}
err = image.write_block(first_block, header);
@@ -579,9 +579,9 @@ static imgtoolerr_t fat_partition_create(imgtool::image &image, uint64_t first_b
// FIXME: this causes a corrupt PC floppy image since it doubles the FAT partition header - works without it though
#if 0
/* set first two FAT entries */
- first_fat_entries = ((uint64_t) media_descriptor) | 0xFFFFFF00;
- first_fat_entries &= (((uint64_t) 1) << fat_bits) - 1;
- first_fat_entries |= ((((uint64_t) 1) << fat_bits) - 1) << fat_bits;
+ first_fat_entries = uint64_t(media_descriptor) | 0xFFFFFF00;
+ first_fat_entries &= (uint64_t(1) << fat_bits) - 1;
+ first_fat_entries |= ((uint64_t(1) << fat_bits) - 1) << fat_bits;
first_fat_entries = little_endianize_int64(first_fat_entries);
for (i = 0; i < fat_count; i++)
@@ -707,8 +707,8 @@ static uint32_t fat_get_fat_entry(imgtool::partition &partition, const uint8_t *
entry &= bit_mask;
if (i == 0)
- last_entry = (uint32_t) entry;
- else if (last_entry != (uint32_t) entry)
+ last_entry = uint32_t(entry);
+ else if (last_entry != uint32_t(entry))
return 1; /* if the FATs disagree; mark this as reserved */
}
@@ -740,8 +740,8 @@ static void fat_set_fat_entry(imgtool::partition &partition, uint8_t *fat_table,
* disk_info->sectors_per_fat) + (bit_index / 8), sizeof(entry));
entry = little_endianize_int64(entry);
- entry &= (~((uint64_t) 0xFFFFFFFF >> (32 - disk_info->fat_bits)) << (bit_index % 8)) | ((1 << (bit_index % 8)) - 1);
- entry |= ((uint64_t) value) << (bit_index % 8);
+ entry &= (~(uint64_t(0xFFFFFFFF) >> (32 - disk_info->fat_bits)) << (bit_index % 8)) | ((1 << (bit_index % 8)) - 1);
+ entry |= uint64_t(value) << (bit_index % 8);
entry = little_endianize_int64(entry);
memcpy(fat_table + (i * FAT_SECLEN
@@ -1229,7 +1229,7 @@ static void fat_canonicalize_sfn(char *sfn, const uint8_t *sfn_bytes)
memcpy(sfn, sfn_bytes, 8);
rtrim(sfn);
if (sfn[0] == 0x05)
- sfn[0] = (char) 0xE5;
+ sfn[0] = char(0xE5);
if ((sfn_bytes[8] != ' ') || (sfn_bytes[9] != ' ') || (sfn_bytes[10] != ' '))
{
strcat(sfn, ".");
@@ -1452,13 +1452,13 @@ static imgtoolerr_t fat_construct_dirent(const char *filename, creation_policy_t
/* append to short filename, if possible */
if ((ch < 32) || (ch > 128))
short_char = '\0';
- else if (isalnum((char) ch))
- short_char = toupper((char) ch);
- else if (strchr(".!#$%^()-@^_`{}~", (char) ch))
- short_char = (char) ch;
+ else if (isalnum(char(ch)))
+ short_char = toupper(char(ch));
+ else if (strchr(".!#$%^()-@^_`{}~", char(ch)))
+ short_char = char(ch);
else
short_char = '\0'; /* illegal SFN char */
- canonical_short_char = fat_canonicalize_sfn_char((char) ch);
+ canonical_short_char = fat_canonicalize_sfn_char(char(ch));
if (!short_char || (short_char != canonical_short_char))
{
if (toupper(short_char) == toupper(canonical_short_char))
@@ -1606,7 +1606,7 @@ static void fat_bump_dirent(imgtool::partition &partition, uint8_t *entry, size_
sfn_entry = &entry[entry_len - FAT_DIRENT_SIZE];
digit_place = 1;
- for (pos = 7; (pos >= 0) && isdigit((char) sfn_entry[pos]); pos--)
+ for (pos = 7; (pos >= 0) && isdigit(char(sfn_entry[pos])); pos--)
{
val += (sfn_entry[pos] - '0') * digit_place;
digit_place *= 10;
@@ -1946,7 +1946,7 @@ static imgtoolerr_t fat_partition_writefile(imgtool::partition &partition, const
if (file.directory)
return IMGTOOLERR_FILENOTFOUND;
- bytes_left = (uint32_t) sourcef.size();
+ bytes_left = uint32_t(sourcef.size());
err = fat_set_file_size(partition, &file, bytes_left);
if (err)
diff --git a/src/tools/imgtool/modules/os9.cpp b/src/tools/imgtool/modules/os9.cpp
index 33c4210b18a..97fdcb9e209 100644
--- a/src/tools/imgtool/modules/os9.cpp
+++ b/src/tools/imgtool/modules/os9.cpp
@@ -99,17 +99,13 @@ static void pick_string(const void *ptr, size_t offset, size_t length, char *des
-static void place_string(void *ptr, size_t length, const char *s)
+static void place_string(uint8_t *bptr, size_t length, const char *s)
{
- size_t i;
- uint8_t b;
- uint8_t *bptr = (uint8_t *) ptr;
-
bptr[0] = 0x80;
- for (i = 0; s[i] && (i < length); i++)
+ for (size_t i = 0; s[i] && (i < length); i++)
{
- b = ((uint8_t) s[i]) & 0x7F;
+ uint8_t b = ((uint8_t) s[i]) & 0x7F;
if (s[i+1] == '\0')
b |= 0x80;
bptr[i] = b;
diff --git a/src/tools/imgtool/modules/pc_flop.cpp b/src/tools/imgtool/modules/pc_flop.cpp
index 423336c6744..6a242d16abf 100644
--- a/src/tools/imgtool/modules/pc_flop.cpp
+++ b/src/tools/imgtool/modules/pc_flop.cpp
@@ -36,8 +36,8 @@ static imgtoolerr_t fat_image_create(imgtool::image &image, imgtool::stream::ptr
memset(buffer, 0, sizeof(buffer));
put_u16le(&buffer[24], sectors);
put_u16le(&buffer[26], heads);
- put_u16le(&buffer[19], (uint16_t) (((uint64_t) tracks * heads * sectors) >> 0));
- put_u32le(&buffer[32], (uint16_t) (((uint64_t) tracks * heads * sectors) >> 16));
+ put_u16le(&buffer[19], uint16_t((uint64_t(tracks) * heads * sectors) >> 0));
+ put_u32le(&buffer[32], uint16_t((uint64_t(tracks) * heads * sectors) >> 16));
err = image.write_block(0, buffer);
if (err)
goto done;
@@ -47,7 +47,7 @@ static imgtoolerr_t fat_image_create(imgtool::image &image, imgtool::stream::ptr
imgtool_get_info_fct(&imgclass, IMGTOOLINFO_PTR_CREATE_PARTITION);
/* actually create the partition */
- err = fat_partition_create(image, 0, ((uint64_t) tracks) * heads * sectors);
+ err = fat_partition_create(image, 0, uint64_t(tracks) * heads * sectors);
if (err)
goto done;
@@ -68,7 +68,7 @@ static imgtoolerr_t fat_image_get_geometry(imgtool::image &image, uint32_t *trac
return err;
total_sectors = get_u16le(&buffer[19])
- | (uint64_t)(get_u32le(&buffer[32]) << 16);
+ | uint64_t(get_u32le(&buffer[32]) << 16);
*sectors = get_u16le(&buffer[24]);
*heads = get_u16le(&buffer[26]);