- link lowlevel cdrom support with the hdimage plugin instead of harddrv and usb_common. This fixes
duplicate log prefixes on Windows if both IDE and USB cdroms are used in plugin mode. Windows also requires the cdrom base class and the init_cdrom() method to link and work correctly.
This commit is contained in:
parent
b44d756943
commit
5014eed268
@ -137,11 +137,8 @@ libbx_%.la: %.lo
|
|||||||
$(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH)
|
$(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH)
|
||||||
|
|
||||||
# special link rules for plugins that require more than one object file
|
# special link rules for plugins that require more than one object file
|
||||||
libbx_harddrv.la: harddrv.lo $(CDROM_OBJS:.o=.lo)
|
libbx_hdimage.la: hdimage.lo vmware3.lo vmware4.lo vvfat.lo $(CDROM_OBJS:.o=.lo)
|
||||||
$(LIBTOOL) --mode=link $(CXX) -module harddrv.lo $(CDROM_OBJS:.o=.lo) -o libbx_harddrv.la -rpath $(PLUGIN_PATH)
|
$(LIBTOOL) --mode=link $(CXX) -module hdimage.lo vmware3.lo vmware4.lo vvfat.lo $(CDROM_OBJS:.o=.lo) -o libbx_hdimage.la -rpath $(PLUGIN_PATH)
|
||||||
|
|
||||||
libbx_hdimage.la: hdimage.lo vmware3.lo vmware4.lo vvfat.lo
|
|
||||||
$(LIBTOOL) --mode=link $(CXX) -module hdimage.lo vmware3.lo vmware4.lo vvfat.lo -o libbx_hdimage.la -rpath $(PLUGIN_PATH)
|
|
||||||
|
|
||||||
libbx_keyboard.la: keyboard.lo scancodes.lo
|
libbx_keyboard.la: keyboard.lo scancodes.lo
|
||||||
$(LIBTOOL) --mode=link $(CXX) -module keyboard.lo scancodes.lo -o libbx_keyboard.la -rpath $(PLUGIN_PATH)
|
$(LIBTOOL) --mode=link $(CXX) -module keyboard.lo scancodes.lo -o libbx_keyboard.la -rpath $(PLUGIN_PATH)
|
||||||
@ -164,19 +161,16 @@ libbx_serial.la: serial.lo serial_raw.lo
|
|||||||
libbx_vga.la: vga.lo svga_cirrus.lo
|
libbx_vga.la: vga.lo svga_cirrus.lo
|
||||||
$(LIBTOOL) --mode=link $(CXX) -module vga.lo svga_cirrus.lo -o libbx_vga.la -rpath $(PLUGIN_PATH)
|
$(LIBTOOL) --mode=link $(CXX) -module vga.lo svga_cirrus.lo -o libbx_vga.la -rpath $(PLUGIN_PATH)
|
||||||
|
|
||||||
libbx_usb_common.la: usb_common.lo $(USBDEV_OBJS:.o=.lo) scsi_device.lo $(CDROM_OBJS:.o=.lo)
|
libbx_usb_common.la: usb_common.lo $(USBDEV_OBJS:.o=.lo) scsi_device.lo
|
||||||
$(LIBTOOL) --mode=link $(CXX) -module usb_common.lo $(USBDEV_OBJS:.o=.lo) scsi_device.lo $(CDROM_OBJS:.o=.lo) -o libbx_usb_common.la -rpath $(PLUGIN_PATH)
|
$(LIBTOOL) --mode=link $(CXX) -module usb_common.lo $(USBDEV_OBJS:.o=.lo) scsi_device.lo -o libbx_usb_common.la -rpath $(PLUGIN_PATH)
|
||||||
|
|
||||||
#### building DLLs for win32 (tested on cygwin only)
|
#### building DLLs for win32 (tested on cygwin only)
|
||||||
bx_%.dll: %.o
|
bx_%.dll: %.o
|
||||||
$(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY)
|
$(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY)
|
||||||
|
|
||||||
# special link rules for plugins that require more than one object file
|
# special link rules for plugins that require more than one object file
|
||||||
bx_harddrv.dll: harddrv.o $(CDROM_OBJS)
|
bx_hdimage.dll: hdimage.o vmware3.o vmware4.o vvfat.o $(CDROM_OBJS)
|
||||||
$(CXX) $(CXXFLAGS) -shared -o bx_harddrv.dll harddrv.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY)
|
$(CXX) $(CXXFLAGS) -shared -o bx_hdimage.dll hdimage.o vmware3.o vmware4.o vvfat.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY)
|
||||||
|
|
||||||
bx_hdimage.dll: hdimage.o vmware3.o vmware4.o vvfat.o
|
|
||||||
$(CXX) $(CXXFLAGS) -shared -o bx_hdimage.dll hdimage.o vmware3.o vmware4.o vvfat.o $(WIN32_DLL_IMPORT_LIBRARY)
|
|
||||||
|
|
||||||
bx_keyboard.dll: keyboard.o scancodes.o
|
bx_keyboard.dll: keyboard.o scancodes.o
|
||||||
$(CXX) $(CXXFLAGS) -shared -o bx_keyboard.dll keyboard.o scancodes.o $(WIN32_DLL_IMPORT_LIBRARY)
|
$(CXX) $(CXXFLAGS) -shared -o bx_keyboard.dll keyboard.o scancodes.o $(WIN32_DLL_IMPORT_LIBRARY)
|
||||||
@ -202,8 +196,8 @@ bx_serial.dll: serial.o serial_raw.o
|
|||||||
bx_vga.dll: vga.o svga_cirrus.o
|
bx_vga.dll: vga.o svga_cirrus.o
|
||||||
$(CXX) $(CXXFLAGS) -shared -o bx_vga.dll vga.o svga_cirrus.o $(WIN32_DLL_IMPORT_LIBRARY)
|
$(CXX) $(CXXFLAGS) -shared -o bx_vga.dll vga.o svga_cirrus.o $(WIN32_DLL_IMPORT_LIBRARY)
|
||||||
|
|
||||||
bx_usb_common.dll: usb_common.o $(USBDEV_OBJS) scsi_device.o $(CDROM_OBJS)
|
bx_usb_common.dll: usb_common.o $(USBDEV_OBJS) scsi_device.o
|
||||||
$(CXX) $(CXXFLAGS) -shared -o bx_usb_common.dll usb_common.o $(USBDEV_OBJS) scsi_device.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY)
|
$(CXX) $(CXXFLAGS) -shared -o bx_usb_common.dll usb_common.o $(USBDEV_OBJS) scsi_device.o $(WIN32_DLL_IMPORT_LIBRARY)
|
||||||
|
|
||||||
##### end DLL section
|
##### end DLL section
|
||||||
|
|
||||||
|
@ -514,12 +514,6 @@ cdrom_interface::cdrom_interface(const char *dev)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void cdrom_interface::init(void)
|
|
||||||
{
|
|
||||||
BX_DEBUG(("Init $Id$"));
|
|
||||||
BX_INFO(("file = '%s'",path));
|
|
||||||
}
|
|
||||||
|
|
||||||
cdrom_interface::~cdrom_interface(void)
|
cdrom_interface::~cdrom_interface(void)
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
|
@ -22,31 +22,43 @@
|
|||||||
// Header file for low-level OS specific CDROM emulation
|
// Header file for low-level OS specific CDROM emulation
|
||||||
|
|
||||||
|
|
||||||
class cdrom_interface : public logfunctions {
|
class cdrom_base_c : public logfunctions {
|
||||||
|
public:
|
||||||
|
virtual ~cdrom_base_c(void) {}
|
||||||
|
|
||||||
|
// Load CD-ROM. Returns 0 if CD is not ready.
|
||||||
|
virtual bx_bool insert_cdrom(const char *dev = NULL) = 0;
|
||||||
|
|
||||||
|
// Logically eject the CD.
|
||||||
|
virtual void eject_cdrom() = 0;
|
||||||
|
|
||||||
|
// Read CD TOC. Returns 0 if start track is out of bounds.
|
||||||
|
virtual bx_bool read_toc(Bit8u* buf, int* length, bx_bool msf, int start_track, int format) = 0;
|
||||||
|
|
||||||
|
// Return CD-ROM capacity (in 2048 byte frames)
|
||||||
|
virtual Bit32u capacity() = 0;
|
||||||
|
|
||||||
|
// Read a single block from the CD. Returns 0 on failure.
|
||||||
|
virtual bx_bool read_block(Bit8u* buf, Bit32u lba, int blocksize) BX_CPP_AttrRegparmN(3) = 0;
|
||||||
|
|
||||||
|
// Start (spin up) the CD.
|
||||||
|
virtual bx_bool start_cdrom() = 0;
|
||||||
|
|
||||||
|
// Seek for new block address.
|
||||||
|
virtual void seek(Bit32u lba) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class cdrom_interface : public cdrom_base_c {
|
||||||
public:
|
public:
|
||||||
cdrom_interface(const char *dev);
|
cdrom_interface(const char *dev);
|
||||||
virtual ~cdrom_interface(void);
|
virtual ~cdrom_interface(void);
|
||||||
void init(void);
|
|
||||||
|
|
||||||
// Load CD-ROM. Returns 0 if CD is not ready.
|
|
||||||
bx_bool insert_cdrom(const char *dev = NULL);
|
bx_bool insert_cdrom(const char *dev = NULL);
|
||||||
|
|
||||||
// Logically eject the CD.
|
|
||||||
void eject_cdrom();
|
void eject_cdrom();
|
||||||
|
|
||||||
// Read CD TOC. Returns 0 if start track is out of bounds.
|
|
||||||
bx_bool read_toc(Bit8u* buf, int* length, bx_bool msf, int start_track, int format);
|
bx_bool read_toc(Bit8u* buf, int* length, bx_bool msf, int start_track, int format);
|
||||||
|
|
||||||
// Return CD-ROM capacity (in 2048 byte frames)
|
|
||||||
Bit32u capacity();
|
Bit32u capacity();
|
||||||
|
|
||||||
// Read a single block from the CD. Returns 0 on failure.
|
|
||||||
bx_bool read_block(Bit8u* buf, Bit32u lba, int blocksize) BX_CPP_AttrRegparmN(3);
|
bx_bool read_block(Bit8u* buf, Bit32u lba, int blocksize) BX_CPP_AttrRegparmN(3);
|
||||||
|
|
||||||
// Start (spin up) the CD.
|
|
||||||
bx_bool start_cdrom();
|
bx_bool start_cdrom();
|
||||||
|
|
||||||
// Seek for new block address.
|
|
||||||
void seek(Bit32u lba);
|
void seek(Bit32u lba);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -61,5 +73,5 @@ private:
|
|||||||
int tid;
|
int tid;
|
||||||
int lun;
|
int lun;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -397,7 +397,7 @@ void bx_hard_drive_c::init(void)
|
|||||||
|
|
||||||
// allocate low level driver
|
// allocate low level driver
|
||||||
#ifdef LOWLEVEL_CDROM
|
#ifdef LOWLEVEL_CDROM
|
||||||
BX_HD_THIS channels[channel].drives[device].cdrom.cd = new LOWLEVEL_CDROM(SIM->get_param_string("path", base)->getptr());
|
BX_HD_THIS channels[channel].drives[device].cdrom.cd = DEV_hdimage_init_cdrom(SIM->get_param_string("path", base)->getptr());
|
||||||
BX_INFO(("CD on ata%d-%d: '%s'",channel, device, SIM->get_param_string("path", base)->getptr()));
|
BX_INFO(("CD on ata%d-%d: '%s'",channel, device, SIM->get_param_string("path", base)->getptr()));
|
||||||
|
|
||||||
if (SIM->get_param_bool("status", base)->get()) {
|
if (SIM->get_param_bool("status", base)->get()) {
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#define BX_PLUGGABLE
|
#define BX_PLUGGABLE
|
||||||
|
|
||||||
#include "iodev.h"
|
#include "iodev.h"
|
||||||
|
#include "cdrom.h"
|
||||||
#include "hdimage.h"
|
#include "hdimage.h"
|
||||||
#include "vmware3.h"
|
#include "vmware3.h"
|
||||||
#include "vmware4.h"
|
#include "vmware4.h"
|
||||||
@ -133,6 +134,13 @@ device_image_t* bx_hdimage_ctl_c::init_image(Bit8u image_mode, Bit64u disk_size,
|
|||||||
return hdimage;
|
return hdimage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LOWLEVEL_CDROM
|
||||||
|
LOWLEVEL_CDROM* bx_hdimage_ctl_c::init_cdrom(const char *dev)
|
||||||
|
{
|
||||||
|
return new LOWLEVEL_CDROM(dev);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*** base class device_image_t ***/
|
/*** base class device_image_t ***/
|
||||||
|
|
||||||
device_image_t::device_image_t()
|
device_image_t::device_image_t()
|
||||||
|
@ -582,6 +582,9 @@ public:
|
|||||||
bx_hdimage_ctl_c();
|
bx_hdimage_ctl_c();
|
||||||
virtual ~bx_hdimage_ctl_c() {}
|
virtual ~bx_hdimage_ctl_c() {}
|
||||||
virtual device_image_t *init_image(Bit8u image_mode, Bit64u disk_size, const char *journal);
|
virtual device_image_t *init_image(Bit8u image_mode, Bit64u disk_size, const char *journal);
|
||||||
|
#ifdef LOWLEVEL_CDROM
|
||||||
|
virtual LOWLEVEL_CDROM* init_cdrom(const char *dev);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,6 +77,7 @@ class BOCHSAPI bx_devmodel_c : public logfunctions {
|
|||||||
|
|
||||||
class bx_list_c;
|
class bx_list_c;
|
||||||
class device_image_t;
|
class device_image_t;
|
||||||
|
class LOWLEVEL_CDROM;
|
||||||
|
|
||||||
// the best should be deriving of bx_pci_device_stub_c from bx_devmodel_c
|
// the best should be deriving of bx_pci_device_stub_c from bx_devmodel_c
|
||||||
// but it make serious problems for cirrus_svga device
|
// but it make serious problems for cirrus_svga device
|
||||||
@ -370,6 +371,11 @@ public:
|
|||||||
virtual device_image_t* init_image(Bit8u image_mode, Bit64u disk_size, const char *journal) {
|
virtual device_image_t* init_image(Bit8u image_mode, Bit64u disk_size, const char *journal) {
|
||||||
STUBFUNC(hdimage_ctl, init_image); return NULL;
|
STUBFUNC(hdimage_ctl, init_image); return NULL;
|
||||||
}
|
}
|
||||||
|
#ifdef LOWLEVEL_CDROM
|
||||||
|
virtual LOWLEVEL_CDROM* init_cdrom(const char *dev) {
|
||||||
|
STUBFUNC(hdimage_ctl, init_cdrom); return NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#if BX_SUPPORT_SOUNDLOW
|
#if BX_SUPPORT_SOUNDLOW
|
||||||
|
@ -228,7 +228,7 @@ bx_bool usb_msd_device_c::init()
|
|||||||
sprintf(s.info_txt, "USB HD: path='%s', mode='%s'", s.fname, hdimage_mode_names[s.image_mode]);
|
sprintf(s.info_txt, "USB HD: path='%s', mode='%s'", s.fname, hdimage_mode_names[s.image_mode]);
|
||||||
} else if (d.type == USB_DEV_TYPE_CDROM) {
|
} else if (d.type == USB_DEV_TYPE_CDROM) {
|
||||||
#ifdef LOWLEVEL_CDROM
|
#ifdef LOWLEVEL_CDROM
|
||||||
s.cdrom = new LOWLEVEL_CDROM(s.fname);
|
s.cdrom = DEV_hdimage_init_cdrom(s.fname);
|
||||||
if (!s.cdrom->insert_cdrom()) {
|
if (!s.cdrom->insert_cdrom()) {
|
||||||
BX_ERROR(("could not open cdrom image file '%s'", s.fname));
|
BX_ERROR(("could not open cdrom image file '%s'", s.fname));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -173,6 +173,7 @@ extern "C" {
|
|||||||
#define DEV_hd_bmdma_write_sector(a,b) bx_devices.pluginHardDrive->bmdma_write_sector(a,b)
|
#define DEV_hd_bmdma_write_sector(a,b) bx_devices.pluginHardDrive->bmdma_write_sector(a,b)
|
||||||
#define DEV_hd_bmdma_complete(a) bx_devices.pluginHardDrive->bmdma_complete(a)
|
#define DEV_hd_bmdma_complete(a) bx_devices.pluginHardDrive->bmdma_complete(a)
|
||||||
#define DEV_hdimage_init_image(a,b,c) bx_devices.pluginHDImageCtl->init_image(a,b,c)
|
#define DEV_hdimage_init_image(a,b,c) bx_devices.pluginHDImageCtl->init_image(a,b,c)
|
||||||
|
#define DEV_hdimage_init_cdrom(a) bx_devices.pluginHDImageCtl->init_cdrom(a)
|
||||||
|
|
||||||
#define DEV_bulk_io_quantum_requested() (bx_devices.bulkIOQuantumsRequested)
|
#define DEV_bulk_io_quantum_requested() (bx_devices.bulkIOQuantumsRequested)
|
||||||
#define DEV_bulk_io_quantum_transferred() (bx_devices.bulkIOQuantumsTransferred)
|
#define DEV_bulk_io_quantum_transferred() (bx_devices.bulkIOQuantumsTransferred)
|
||||||
|
Loading…
Reference in New Issue
Block a user