#endif
}
+#if defined(USE_FD1) || defined(USE_FD2) || defined(USE_FD3) || defined(USE_FD4) || \
+ defined(USE_FD5) || defined(USE_FD6) || defined(USE_FD7) || defined(USE_FD8)
+
+void EmuThreadClass::do_close_disk(int drv)
+{
+ p_emu->close_disk(drv);
+ p_emu->d88_file[drv].bank_num = 0;
+ p_emu->d88_file[drv].cur_bank = -1;
+}
+
+void EmuThreadClass::do_open_disk(int drv, QString path, int bank)
+{
+
+
+ _TCHAR path_shadow[_MAX_PATH];
+
+ //strncpy(path_shadow, path, _MAX_PATH - 1);
+ strncpy(path_shadow, path.toUtf8().constData(), _MAX_PATH - 1);
+ p_emu->d88_file[drv].bank_num = 0;
+ p_emu->d88_file[drv].cur_bank = -1;
+// p_emu->d88_file[drv].bank[0].offset = 0;
+
+ if(check_file_extension(path.toUtf8().constData(), ".d88") || check_file_extension(path.toUtf8().constData(), ".d77")) {
+
+ FILEIO *fio = new FILEIO();
+ if(fio->Fopen(path.toUtf8().constData(), FILEIO_READ_BINARY)) {
+ try {
+ fio->Fseek(0, FILEIO_SEEK_END);
+ int file_size = fio->Ftell(), file_offset = 0;
+ while(file_offset + 0x2b0 <= file_size && p_emu->d88_file[drv].bank_num < MAX_D88_BANKS) {
+ fio->Fseek(file_offset, FILEIO_SEEK_SET);
+ char tmp[18];
+ memset(tmp, 0x00, sizeof(tmp));
+ fio->Fread(tmp, 17, 1);
+ memset(p_emu->d88_file[drv].disk_name[p_emu->d88_file[drv].bank_num], 0x00, 128);
+ if(strlen(tmp) > 0) Convert_CP932_to_UTF8(p_emu->d88_file[drv].disk_name[p_emu->d88_file[drv].bank_num], tmp, 127, 17);
+
+ fio->Fseek(file_offset + 0x1c, FILEIO_SEEK_SET);
+ file_offset += fio->FgetUint32_LE();
+ p_emu->d88_file[drv].bank_num++;
+ }
+ strcpy(p_emu->d88_file[drv].path, path.toUtf8().constData());
+ if(bank >= p_emu->d88_file[drv].bank_num) bank = p_emu->d88_file[drv].bank_num - 1;
+ if(bank < 0) bank = 0;
+ p_emu->d88_file[drv].cur_bank = bank;
+ }
+ catch(...) {
+ bank = 0;
+ p_emu->d88_file[drv].bank_num = 0;
+ }
+ fio->Fclose();
+ }
+ delete fio;
+ } else {
+ bank = 0;
+ }
+ p_emu->open_disk(drv, path.toUtf8().constData(), bank);
+ emit sig_update_recent_disk(drv);
+}
+
+#endif
+
+
+
void EmuThreadClass::print_framerate(int frames)
{
if(frames >= 0) draw_frames += frames;
void DrawThreadClass::doDraw(void)
{
+ QImage *p;
p_emu->LockVM();
draw_frames = p_emu->draw_screen();
- p_emu->update_screen();// Okay?
+ p = p_emu->getPseudoVramClass();
p_emu->UnlockVM();
+ emit sig_update_screen(p);
emit sig_draw_frames(draw_frames);
}
connect(this, SIGNAL(sig_vm_loadstate()), hRunEmu, SLOT(doLoadState()));
connect(this, SIGNAL(sig_vm_savestate()), hRunEmu, SLOT(doSaveState()));
+#if defined(USE_FD1) || defined(USE_FD2) || defined(USE_FD3) || defined(USE_FD4) || \
+ defined(USE_FD5) || defined(USE_FD6) || defined(USE_FD7) || defined(USE_FD8)
+ connect(this, SIGNAL(sig_open_disk(int, QString, int)), hRunEmu, SLOT(do_open_disk(int, QString, int)));
+ connect(this, SIGNAL(sig_close_disk(int)), hRunEmu, SLOT(do_close_disk(int)));
+ connect(hRunEmu, SIGNAL(sig_update_recent_disk(int)), this, SLOT(do_update_recent_disk(int)));
+#endif
+
connect(this, SIGNAL(quit_emu_thread()), hRunEmu, SLOT(doExit()));
connect(hRunEmu, SIGNAL(sig_mouse_enable(bool)),
this, SLOT(do_set_mouse_enable(bool)));
AGAR_DebugLog(AGAR_LOG_DEBUG, "DrawThread : Start.");
connect(hDrawEmu, SIGNAL(sig_draw_frames(int)), hRunEmu, SLOT(print_framerate(int)));
connect(hDrawEmu, SIGNAL(message_changed(QString)), this, SLOT(message_status_bar(QString)));
+ connect(hDrawEmu, SIGNAL(sig_update_screen(QImage *)), glv, SLOT(update_screen(QImage *)), Qt::QueuedConnection);
+
connect(hRunEmu, SIGNAL(sig_draw_thread()), hDrawEmu, SLOT(doDraw()));
connect(hRunEmu, SIGNAL(quit_draw_thread()), hDrawEmu, SLOT(doExit()));
#ifdef USE_FD1
int Ui_MainWindow::set_d88_slot(int drive, int num)
{
+ QString path;
+
if((num < 0) || (num >= MAX_D88_BANKS)) return -1;
+ path = QString::fromUtf8(emu->d88_file[drive].path);
if(emu && emu->d88_file[drive].cur_bank != num) {
- // emu->open_disk(drive, emu->d88_file[drive].path, emu->d88_file[drive].bank[num].offset);
- emu->open_disk(drive, emu->d88_file[drive].path, num);
+ //emu->open_disk(drive, emu->d88_file[drive].path, num);
+ emit sig_open_disk(drive, path, num);
if(emu->get_disk_protected(drive)) {
actionProtection_ON_FD[drive]->setChecked(true);
} else {
actionProtection_OFF_FD[drive]->setChecked(true);
}
action_D88_ListImage_FD[drive][num]->setChecked(true);
- emu->d88_file[drive].cur_bank = num;
+ //emu->d88_file[drive].cur_bank = num;
}
return 0;
}
+void Ui_MainWindow::do_update_recent_disk(int drv)
+{
+ int i;
+ if(emu == NULL) return;
+ if((actionGroup_D88_Image_FD[drv] != NULL) && (emu != NULL)){
+ for(i = 0; i < emu->d88_file[drv].bank_num; i++) {
+ if(action_D88_ListImage_FD[drv][i] != NULL) {
+ action_D88_ListImage_FD[drv][i]->setText(QString::fromUtf8(emu->d88_file[drv].disk_name[i]));
+ action_D88_ListImage_FD[drv][i]->setVisible(true);
+ if(i == 0) action_D88_ListImage_FD[drv][i]->setChecked(true);
+ }
+ }
+ for(; i < MAX_D88_BANKS; i++) {
+ if(action_D88_ListImage_FD[drv][i] != NULL) {
+ action_D88_ListImage_FD[drv][i]->setVisible(false);
+ //emit action_D88_ListImage_FD[drv][i]->changed();
+ }
+ }
+ //actionSelect_D88_Image_FD[drv][0].setChecked(true);
+ }
+ for(i = 0; i < MAX_HISTORY; i++) {
+ if(action_Recent_List_FD[drv][i] != NULL) {
+ action_Recent_List_FD[drv][i]->setText(QString::fromUtf8(config.recent_disk_path[drv][i]));
+ //actiont_Recent_List_FD[drv][i]->changed();
+ }
+ }
+ if(emu->d88_file[drv].cur_bank < emu->d88_file[drv].bank_num) action_D88_ListImage_FD[drv][emu->d88_file[drv].cur_bank]->setChecked(true);
+# if defined(USE_DISK_WRITE_PROTECT)
+ //emu->LockVM();
+ if(emu->get_disk_protected(drv)) {
+ actionProtection_ON_FD[drv]->setChecked(true);
+ } else {
+ actionProtection_OFF_FD[drv]->setChecked(true);
+ }
+ //emu->UnlockVM();
+# endif
+}
+
+
int Ui_MainWindow::set_recent_disk(int drv, int num)
{
QString s_path;
strncpy(path_shadow, s_path.toUtf8().constData(), PATH_MAX);
if(emu) {
- close_disk(drv);
- emu->LockVM();
- open_disk(drv, path_shadow, 0);
- if((actionGroup_D88_Image_FD[drv] != NULL) && (emu != NULL)){
- for(i = 0; i < emu->d88_file[drv].bank_num; i++) {
- if(action_D88_ListImage_FD[drv][i] != NULL) {
- action_D88_ListImage_FD[drv][i]->setText(QString::fromUtf8(emu->d88_file[drv].disk_name[i]));
- action_D88_ListImage_FD[drv][i]->setVisible(true);
- if(i == 0) action_D88_ListImage_FD[drv][i]->setChecked(true);
- //emit action_D88_ListImage_FD[drv][i]->changed();
- }
- }
- for(; i < MAX_D88_BANKS; i++) {
- if(action_D88_ListImage_FD[drv][i] != NULL) {
- action_D88_ListImage_FD[drv][i]->setVisible(false);
- //emit action_D88_ListImage_FD[drv][i]->changed();
- }
- }
- //actionSelect_D88_Image_FD[drv][0].setChecked(true);
- }
- for(i = 0; i < MAX_HISTORY; i++) {
- if(action_Recent_List_FD[drv][i] != NULL) {
- action_Recent_List_FD[drv][i]->setText(QString::fromUtf8(config.recent_disk_path[drv][i]));
- //actiont_Recent_List_FD[drv][i]->changed();
- }
- }
- emu->UnlockVM();
-# if defined(USE_DISK_WRITE_PROTECT)
- emu->LockVM();
- if(emu->get_disk_protected(drv)) {
- actionProtection_ON_FD[drv]->setChecked(true);
- } else {
- actionProtection_OFF_FD[drv]->setChecked(true);
- }
- emu->UnlockVM();
-# endif
+ emit sig_close_disk(drv);
+ //emu->LockVM();
+ //open_disk(drv, path_shadow, 0);
+ emit sig_open_disk(drv, s_path, 0);
+ //emu->UnlockVM();
# ifdef USE_FD2
strncpy(path_shadow, s_path.toUtf8().constData(), PATH_MAX);
if(check_file_extension(path_shadow, ".d88") || check_file_extension(path_shadow, ".d77")) {
if(((drv & 1) == 0) && (drv + 1 < MAX_FD) && (1 < emu->d88_file[drv].bank_num)) {
int drv2 = drv + 1;
- close_disk(drv2);
- emu->LockVM();
- open_disk(drv2, path_shadow, 1);
+ emit sig_close_disk(drv2);
+ //emu->LockVM();
+ emit sig_open_disk(drv2, s_path, 1);
- if((actionGroup_D88_Image_FD[drv2] != NULL) && (emu != NULL)){
- for(i = 0; i < emu->d88_file[drv2].bank_num; i++) {
- if(action_D88_ListImage_FD[drv2][i] != NULL) {
- action_D88_ListImage_FD[drv2][i]->setText(QString::fromUtf8(emu->d88_file[drv2].disk_name[i]));
- if(i == 1) action_D88_ListImage_FD[drv2][i]->setChecked(true);
- action_D88_ListImage_FD[drv2][i]->setVisible(true);
- }
- }
- for(; i < MAX_D88_BANKS; i++) {
- if(action_D88_ListImage_FD[drv2][i] != NULL) {
- action_D88_ListImage_FD[drv2][i]->setVisible(false);
- }
- }
- //if(emu->d88_file[drv2].bank_num > 0) actionSelect_D88_Image_FD[drv2][1].setChecked(true);
- }
- emu->UnlockVM();
-# if defined(USE_DISK_WRITE_PROTECT)
- emu->LockVM();
- if(emu->get_disk_protected(drv2)) {
- actionProtection_ON_FD[drv2]->setChecked(true);
- } else {
- actionProtection_OFF_FD[drv2]->setChecked(true);
- }
-# endif
- emu->UnlockVM();
+ //emu->UnlockVM();
}
}
# endif
// Update List
strncpy(path_shadow, fname.toUtf8().constData(), PATH_MAX);
if(emu) {
- close_disk(drv);
- emu->LockVM();
- open_disk(drv, path_shadow, 0);
- if((actionGroup_D88_Image_FD[drv] != NULL) && (emu != NULL)){
- for(i = 0; i < emu->d88_file[drv].bank_num; i++) {
- if(action_D88_ListImage_FD[drv][i] != NULL) {
- action_D88_ListImage_FD[drv][i]->setText(QString::fromUtf8(emu->d88_file[drv].disk_name[i]));
- if(i == 0) action_D88_ListImage_FD[drv][i]->setChecked(true);
- action_D88_ListImage_FD[drv][i]->setVisible(true);
- //emit action_D88_ListImage_FD[drv][i]->changed();
- }
- }
- for(; i < MAX_D88_BANKS; i++) {
- if(action_D88_ListImage_FD[drv][i] != NULL) {
- //actionSelect_D88_Image_FD[drv][i]->setText(emu->d88_file[drv].bank[i].name);
- action_D88_ListImage_FD[drv][i]->setVisible(false);
- //emit action_D88_ListImage_FD[drv][i]->changed();
- }
- }
- }
- for(i = 0; i < MAX_HISTORY; i++) {
- if(action_Recent_List_FD[drv][i] != NULL) {
- action_Recent_List_FD[drv][i]->setText(QString::fromUtf8(config.recent_disk_path[drv][i]));
- //actiont_Recent_List_FD[drv][i]->changed();
- }
- }
- emu->UnlockVM();
-# if defined(USE_DISK_WRITE_PROTECT)
- emu->LockVM();
- if(emu->get_disk_protected(drv)) {
- actionProtection_ON_FD[drv]->setChecked(true);
- } else {
- actionProtection_OFF_FD[drv]->setChecked(true);
- }
-# endif
- emu->UnlockVM();
+ emit sig_close_disk(drv);
+ //emu->LockVM();
+ emit sig_open_disk(drv, fname, 0);
}
# ifdef USE_FD2
if(check_file_extension(path_shadow, ".d88") || check_file_extension(path_shadow, ".d77")) {
if(((drv & 1) == 0) && (drv + 1 < MAX_FD) && (1 < emu->d88_file[drv].bank_num)) {
int drv2 = drv + 1;
- close_disk(drv2);
- emu->LockVM();
+ emit sig_close_disk(drv2);
+ //emu->LockVM();
strncpy(path_shadow, fname.toUtf8().constData(), PATH_MAX);
- open_disk(drv2, path_shadow, 1);
-
- if((actionGroup_D88_Image_FD[drv2] != NULL) && (emu != NULL)){
- for(i = 0; i < emu->d88_file[drv2].bank_num; i++) {
- if(action_D88_ListImage_FD[drv2][i] != NULL) {
- action_D88_ListImage_FD[drv2][i]->setText(QString::fromUtf8(emu->d88_file[drv2].disk_name[i]));
- if(i == 1) action_D88_ListImage_FD[drv2][i]->setChecked(true);
- action_D88_ListImage_FD[drv2][i]->setVisible(true);
- }
- }
- for(; i < MAX_D88_BANKS; i++) {
- if(action_D88_ListImage_FD[drv2][i] != NULL) {
- action_D88_ListImage_FD[drv2][i]->setVisible(false);
- }
- }
- }
- emu->UnlockVM();
-# if defined(USE_DISK_WRITE_PROTECT)
- emu->LockVM();
- if(emu->get_disk_protected(drv2)) {
- actionProtection_ON_FD[drv2]->setChecked(true);
- } else {
- actionProtection_OFF_FD[drv2]->setChecked(true);
- }
-# endif
- emu->UnlockVM();
+ emit sig_open_disk(drv2, fname, 1);
}
}
# endif
#ifdef USE_FD1
if(emu) {
// emu->LockVM();
- close_disk(drv);
+ emit sig_close_disk(drv);
for(i = 0; i < MAX_D88_BANKS; i++) {
if(action_D88_ListImage_FD[drv][i] != NULL) {
action_D88_ListImage_FD[drv][i]->setVisible(false);