diff options
Diffstat (limited to 'src/devices/bus/nubus/nubus_image.cpp')
-rw-r--r-- | src/devices/bus/nubus/nubus_image.cpp | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/src/devices/bus/nubus/nubus_image.cpp b/src/devices/bus/nubus/nubus_image.cpp index bcf072338a6..3d17b2500a1 100644 --- a/src/devices/bus/nubus/nubus_image.cpp +++ b/src/devices/bus/nubus/nubus_image.cpp @@ -40,19 +40,16 @@ public: // construction/destruction messimg_disk_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // image-level overrides - virtual iodevice_t image_type() const noexcept override { return IO_QUICKLOAD; } - + // device_image_interface implementation virtual bool is_readable() const noexcept override { return true; } virtual bool is_writeable() const noexcept override { return true; } virtual bool is_creatable() const noexcept override { return false; } - virtual bool must_be_loaded() const noexcept override { return false; } virtual bool is_reset_on_load() const noexcept override { return false; } virtual const char *file_extensions() const noexcept override { return "img"; } - virtual const char *custom_instance_name() const noexcept override { return "disk"; } - virtual const char *custom_brief_instance_name() const noexcept override { return "disk"; } + virtual const char *image_type_name() const noexcept override { return "disk"; } + virtual const char *image_brief_type_name() const noexcept override { return "disk"; } - virtual image_init_result call_load() override; + virtual std::pair<std::error_condition, std::string> call_load() override; virtual void call_unload() override; protected: @@ -92,22 +89,24 @@ void nubus_image_device::messimg_disk_image_device::device_start() } } -image_init_result nubus_image_device::messimg_disk_image_device::call_load() +std::pair<std::error_condition, std::string> nubus_image_device::messimg_disk_image_device::call_load() { - fseek(0, SEEK_END); - m_size = uint32_t(ftell()); + m_size = length(); if (m_size > (256*1024*1024)) { - osd_printf_error("Mac image too large: must be 256MB or less!\n"); m_size = 0; - return image_init_result::FAIL; + return std::make_pair(image_error::INVALIDLENGTH, "Image file is too large (must be no more than 256MB)"); } + m_data.reset(new (std::nothrow) uint8_t [m_size]); + if (!m_data) + return std::make_pair(std::errc::not_enough_memory, "Error allocating memory for volume image"); + fseek(0, SEEK_SET); - fread(m_data, m_size); + fread(m_data.get(), m_size); m_ejected = false; - return image_init_result::PASS; + return std::make_pair(std::error_condition(), std::string()); } void nubus_image_device::messimg_disk_image_device::call_unload() @@ -186,7 +185,7 @@ void nubus_image_device::device_start() uint32_t slotspace; uint32_t superslotspace; - install_declaration_rom(this, IMAGE_ROM_REGION); + install_declaration_rom(IMAGE_ROM_REGION); slotspace = get_slotspace(); superslotspace = get_super_slotspace(); @@ -245,8 +244,8 @@ uint32_t nubus_image_device::image_r() void nubus_image_device::image_super_w(offs_t offset, uint32_t data, uint32_t mem_mask) { uint32_t *image = (uint32_t*)m_image->m_data.get(); - data = ((data & 0xff) << 24) | ((data & 0xff00) << 8) | ((data & 0xff0000) >> 8) | ((data & 0xff000000) >> 24); - mem_mask = ((mem_mask & 0xff) << 24) | ((mem_mask & 0xff00) << 8) | ((mem_mask & 0xff0000) >> 8) | ((mem_mask & 0xff000000) >> 24); + data = swapendian_int32(data); + mem_mask = swapendian_int32(mem_mask); COMBINE_DATA(&image[offset]); } @@ -254,13 +253,12 @@ void nubus_image_device::image_super_w(offs_t offset, uint32_t data, uint32_t me uint32_t nubus_image_device::image_super_r(offs_t offset, uint32_t mem_mask) { uint32_t *image = (uint32_t*)m_image->m_data.get(); - uint32_t data = image[offset]; - return ((data & 0xff) << 24) | ((data & 0xff00) << 8) | ((data & 0xff0000) >> 8) | ((data & 0xff000000) >> 24); + return swapendian_int32(image[offset]); } void nubus_image_device::file_cmd_w(uint32_t data) { -// data = ((data & 0xff) << 24) | ((data & 0xff00) << 8) | ((data & 0xff0000) >> 8) | ((data & 0xff000000) >> 24); +// data = swapendian_int32(data); filectx.curcmd = data; switch (data) { case kFileCmdGetDir: |