mirror of
https://github.com/86Box/86Box.git
synced 2026-02-25 12:55:32 -07:00
Merge branch 'master' into pc98x1
This commit is contained in:
@@ -1076,6 +1076,7 @@ read_toc_normal(cdrom_t *dev, unsigned char *b, unsigned char start_track, int m
|
||||
|
||||
for (i = first_track; i <= last_track; i++) {
|
||||
cdrom_log(" tracks(%i) = %02X, %02X, %i:%02i.%02i\n", i, ti.attr, ti.number, ti.m, ti.s, ti.f);
|
||||
pclog(" tracks(%i) = %02X, %02X, %i:%02i.%02i\n", i, ti.attr, ti.number, ti.m, ti.s, ti.f);
|
||||
dev->ops->get_track_info(dev, i + 1, 0, &ti);
|
||||
|
||||
b[len++] = 0; /* reserved */
|
||||
@@ -1173,6 +1174,7 @@ read_toc_raw(cdrom_t *dev, unsigned char *b)
|
||||
int last_track;
|
||||
|
||||
cdrom_log("read_toc_raw(%08X, %08X)\n", dev, b);
|
||||
pclog("read_toc_raw(%08X, %08X)\n", dev, b);
|
||||
|
||||
dev->ops->get_tracks(dev, &first_track, &last_track);
|
||||
|
||||
@@ -1183,6 +1185,7 @@ read_toc_raw(cdrom_t *dev, unsigned char *b)
|
||||
dev->ops->get_track_info(dev, i + 1, 0, &ti);
|
||||
|
||||
cdrom_log(" tracks(%i) = %02X, %02X, %i:%02i.%02i\n", i, ti.attr, ti.number, ti.m, ti.s, ti.f);
|
||||
pclog(" tracks(%i) = %02X, %02X, %i:%02i.%02i\n", i, ti.attr, ti.number, ti.m, ti.s, ti.f);
|
||||
|
||||
b[len++] = 1; /* Session number */
|
||||
b[len++] = ti.attr; /* Track ADR and Control */
|
||||
@@ -2016,6 +2019,27 @@ cdrom_insert(uint8_t id)
|
||||
dev->insert(dev->priv);
|
||||
}
|
||||
|
||||
void
|
||||
cdrom_exit(uint8_t id)
|
||||
{
|
||||
cdrom_t *dev = &cdrom[id];
|
||||
|
||||
strcpy(dev->prev_image_path, dev->image_path);
|
||||
|
||||
if (dev->ops) {
|
||||
if (dev->ops->exit)
|
||||
dev->ops->exit(dev);
|
||||
|
||||
dev->ops = NULL;
|
||||
}
|
||||
|
||||
memset(dev->image_path, 0, sizeof(dev->image_path));
|
||||
|
||||
cdrom_insert(id);
|
||||
|
||||
pclog("CD-ROM exited\n");
|
||||
}
|
||||
|
||||
/* The mechanics of ejecting a CD-ROM from a drive. */
|
||||
void
|
||||
cdrom_eject(uint8_t id)
|
||||
@@ -2028,13 +2052,7 @@ cdrom_eject(uint8_t id)
|
||||
return;
|
||||
}
|
||||
|
||||
strcpy(dev->prev_image_path, dev->image_path);
|
||||
|
||||
dev->ops->exit(dev);
|
||||
dev->ops = NULL;
|
||||
memset(dev->image_path, 0, sizeof(dev->image_path));
|
||||
|
||||
cdrom_insert(id);
|
||||
cdrom_exit(id);
|
||||
|
||||
plat_cdrom_ui_update(id, 0);
|
||||
|
||||
|
||||
@@ -372,7 +372,9 @@ esdi_callback(void *priv)
|
||||
if (dev->in_reset) {
|
||||
esdi_mca_log("ESDI reset.\n");
|
||||
dev->in_reset = 0;
|
||||
dev->status = STATUS_IRQ;
|
||||
dev->status = STATUS_IRQ | STATUS_TRANSFER_REQ | STATUS_STATUS_OUT_FULL;
|
||||
dev->status_len = 1; /*ToDo: better implementation for Xenix?*/
|
||||
dev->status_data[0] = STATUS_LEN(1) | ATTN_HOST_ADAPTER;
|
||||
dev->irq_status = IRQ_HOST_ADAPTER | IRQ_RESET_COMPLETE;
|
||||
return;
|
||||
}
|
||||
@@ -1055,8 +1057,10 @@ esdi_readw(uint16_t port, void *priv)
|
||||
|
||||
switch (port & 7) {
|
||||
case 0: /*Status Interface Register*/
|
||||
if (dev->status_pos >= dev->status_len)
|
||||
if (dev->status_pos >= dev->status_len) {
|
||||
esdi_mca_log("esdi_readw port=%04x, ret=0000 (pos=%d, len=%d).\n", port, dev->status_pos, dev->status_len);
|
||||
return 0;
|
||||
}
|
||||
ret = dev->status_data[dev->status_pos++];
|
||||
if (dev->status_pos >= dev->status_len) {
|
||||
dev->status &= ~STATUS_STATUS_OUT_FULL;
|
||||
@@ -1068,6 +1072,7 @@ esdi_readw(uint16_t port, void *priv)
|
||||
fatal("esdi_readw port=%04x\n", port);
|
||||
}
|
||||
|
||||
esdi_mca_log("esdi_readw port=%04x, ret=%04x.\n", port, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1250,7 +1255,7 @@ esdi_init(UNUSED(const device_t *info))
|
||||
drive->spt = hdd[i].spt;
|
||||
drive->hpc = hdd[i].hpc;
|
||||
drive->tracks = hdd[i].tracks;
|
||||
drive->sectors = hdd_image_get_last_sector(i) + 1;
|
||||
drive->sectors = hdd_image_get_last_sector(i);
|
||||
drive->hdd_num = i;
|
||||
|
||||
/* Mark drive as present. */
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#define CD_STATUS_PLAYING_COMPLETED 5
|
||||
|
||||
/* Medium changed flag. */
|
||||
#define CD_STATUS_TRANSITION 0x40
|
||||
#define CD_STATUS_MEDIUM_CHANGED 0x80
|
||||
|
||||
#define CD_TRACK_AUDIO 0x08
|
||||
@@ -298,6 +299,7 @@ extern void cdrom_seek(cdrom_t *dev, uint32_t pos, uint8_t vendor_type);
|
||||
|
||||
extern void cdrom_close_handler(uint8_t id);
|
||||
extern void cdrom_insert(uint8_t id);
|
||||
extern void cdrom_exit(uint8_t id);
|
||||
extern void cdrom_eject(uint8_t id);
|
||||
extern void cdrom_reload(uint8_t id);
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ extern uint64_t tsc;
|
||||
|
||||
extern MainWindow *main_window;
|
||||
|
||||
static bool sbar_initialized = false;
|
||||
|
||||
namespace {
|
||||
struct PixmapSetActive {
|
||||
QPixmap normal;
|
||||
@@ -380,6 +382,31 @@ hdd_count(int bus)
|
||||
return c;
|
||||
}
|
||||
|
||||
void
|
||||
MachineStatus::refreshEmptyIcons()
|
||||
{
|
||||
/* Check if icons are initialized. */
|
||||
if (!sbar_initialized)
|
||||
return;
|
||||
|
||||
for (size_t i = 0; i < FDD_NUM; ++i)
|
||||
d->fdd[i].setEmpty(machine_status.fdd[i].empty);
|
||||
for (size_t i = 0; i < CDROM_NUM; ++i)
|
||||
d->cdrom[i].setEmpty(machine_status.cdrom[i].empty);
|
||||
for (size_t i = 0; i < ZIP_NUM; i++)
|
||||
d->zip[i].setEmpty(machine_status.zip[i].empty);
|
||||
for (size_t i = 0; i < MO_NUM; i++)
|
||||
d->mo[i].setEmpty(machine_status.mo[i].empty);
|
||||
|
||||
d->cassette.setEmpty(machine_status.cassette.empty);
|
||||
|
||||
for (size_t i = 0; i < NET_CARD_MAX; i++)
|
||||
d->net[i].setEmpty(machine_status.net[i].empty);
|
||||
|
||||
for (int i = 0; i < 2; ++i)
|
||||
d->cartridge[i].setEmpty(machine_status.cartridge[i].empty);
|
||||
}
|
||||
|
||||
void
|
||||
MachineStatus::refreshIcons()
|
||||
{
|
||||
@@ -387,48 +414,32 @@ MachineStatus::refreshIcons()
|
||||
if (!update_icons)
|
||||
return;
|
||||
|
||||
for (size_t i = 0; i < FDD_NUM; ++i) {
|
||||
for (size_t i = 0; i < FDD_NUM; ++i)
|
||||
d->fdd[i].setActive(machine_status.fdd[i].active);
|
||||
d->fdd[i].setEmpty(machine_status.fdd[i].empty);
|
||||
}
|
||||
for (size_t i = 0; i < CDROM_NUM; ++i) {
|
||||
d->cdrom[i].setActive(machine_status.cdrom[i].active);
|
||||
if (machine_status.cdrom[i].active)
|
||||
ui_sb_update_icon(SB_CDROM | i, 0);
|
||||
|
||||
d->cdrom[i].setEmpty(machine_status.cdrom[i].empty);
|
||||
}
|
||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
||||
d->zip[i].setActive(machine_status.zip[i].active);
|
||||
if (machine_status.zip[i].active)
|
||||
ui_sb_update_icon(SB_ZIP | i, 0);
|
||||
|
||||
d->zip[i].setEmpty(machine_status.zip[i].empty);
|
||||
}
|
||||
for (size_t i = 0; i < MO_NUM; i++) {
|
||||
d->mo[i].setActive(machine_status.mo[i].active);
|
||||
if (machine_status.mo[i].active)
|
||||
ui_sb_update_icon(SB_MO | i, 0);
|
||||
|
||||
d->mo[i].setEmpty(machine_status.mo[i].empty);
|
||||
}
|
||||
|
||||
d->cassette.setEmpty(machine_status.cassette.empty);
|
||||
|
||||
for (size_t i = 0; i < HDD_BUS_USB; i++) {
|
||||
d->hdds[i].setActive(machine_status.hdd[i].active);
|
||||
if (machine_status.hdd[i].active)
|
||||
ui_sb_update_icon(SB_HDD | i, 0);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < NET_CARD_MAX; i++) {
|
||||
for (size_t i = 0; i < NET_CARD_MAX; i++)
|
||||
d->net[i].setActive(machine_status.net[i].active);
|
||||
d->net[i].setEmpty(machine_status.net[i].empty);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
d->cartridge[i].setEmpty(machine_status.cartridge[i].empty);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -664,6 +675,10 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
sbar->addWidget(d->sound.get());
|
||||
d->text = std::make_unique<QLabel>();
|
||||
sbar->addWidget(d->text.get());
|
||||
|
||||
sbar_initialized = true;
|
||||
|
||||
refreshEmptyIcons();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -719,4 +734,6 @@ MachineStatus::updateTip(int tag)
|
||||
case SB_TEXT:
|
||||
break;
|
||||
}
|
||||
|
||||
refreshEmptyIcons();
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ public slots:
|
||||
void refresh(QStatusBar *sbar);
|
||||
void message(const QString &msg);
|
||||
void updateTip(int tag);
|
||||
void refreshEmptyIcons();
|
||||
void refreshIcons();
|
||||
|
||||
private:
|
||||
|
||||
@@ -1904,6 +1904,13 @@ MainWindow::updateUiPauseState()
|
||||
ui->actionPause->setToolTip(tooltip_text);
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::updateStatusEmptyIcons()
|
||||
{
|
||||
if (status != nullptr)
|
||||
status->refreshEmptyIcons();
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::on_actionPreferences_triggered()
|
||||
{
|
||||
|
||||
@@ -63,6 +63,7 @@ public slots:
|
||||
void togglePause();
|
||||
void initRendererMonitorSlot(int monitor_index);
|
||||
void destroyRendererMonitorSlot(int monitor_index);
|
||||
void updateStatusEmptyIcons();
|
||||
void updateUiPauseState();
|
||||
private slots:
|
||||
void on_actionFullscreen_triggered();
|
||||
|
||||
@@ -526,11 +526,8 @@ MediaMenu::cdromMount(int i, const QString &filename)
|
||||
{
|
||||
QByteArray fn = filename.toUtf8().data();
|
||||
|
||||
strcpy(cdrom[i].prev_image_path, cdrom[i].image_path);
|
||||
if (cdrom[i].ops && cdrom[i].ops->exit)
|
||||
cdrom[i].ops->exit(&(cdrom[i]));
|
||||
cdrom_exit(i);
|
||||
|
||||
cdrom[i].ops = nullptr;
|
||||
memset(cdrom[i].image_path, 0, sizeof(cdrom[i].image_path));
|
||||
#ifdef Q_OS_WINDOWS
|
||||
if ((fn.data() != nullptr) && (strlen(fn.data()) >= 1) && (fn.data()[strlen(fn.data()) - 1] == '/'))
|
||||
@@ -543,6 +540,7 @@ MediaMenu::cdromMount(int i, const QString &filename)
|
||||
cdrom_ioctl_open(&(cdrom[i]), fn.data());
|
||||
else
|
||||
cdrom_image_open(&(cdrom[i]), fn.data());
|
||||
|
||||
/* Signal media change to the emulated machine. */
|
||||
if (cdrom[i].insert)
|
||||
cdrom[i].insert(cdrom[i].priv);
|
||||
|
||||
@@ -256,6 +256,9 @@ ui_sb_update_icon_state(int tag, int state)
|
||||
case SB_TEXT:
|
||||
break;
|
||||
}
|
||||
|
||||
if (main_window != nullptr)
|
||||
main_window->updateStatusEmptyIcons();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -539,7 +539,7 @@ mach64_recalctimings(svga_t *svga)
|
||||
break;
|
||||
case BPP_8:
|
||||
if (mach64->type != MACH64_GX)
|
||||
svga->render = svga_render_8bpp_highres;
|
||||
svga->render = svga_render_8bpp_clone_highres;
|
||||
svga->hdisp <<= 3;
|
||||
svga->rowoffset >>= 1;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user