From c511b80cd41f9594b86bcbfd5b271ec168e7e8ce Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 11 Aug 2025 01:10:36 +0600 Subject: [PATCH 01/29] Fix warnings on Clang --- src/utils/log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/log.c b/src/utils/log.c index 8d966988d..8f914aa6b 100644 --- a/src/utils/log.c +++ b/src/utils/log.c @@ -291,7 +291,7 @@ log_fatal(void *priv, const char *fmt, ...) va_start(ap, fmt); vsprintf(temp, fmt2, ap); va_end(ap); - fatal(temp); + fatal("%s", temp); exit(-1); } From 89e42fcece0e8bf601745c30344ea5a819c0f031 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 11 Aug 2025 01:12:39 +0600 Subject: [PATCH 02/29] And also an oversight --- src/utils/log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/log.c b/src/utils/log.c index 8f914aa6b..f0eb6aa3c 100644 --- a/src/utils/log.c +++ b/src/utils/log.c @@ -317,7 +317,7 @@ log_warning(void *priv, const char *fmt, ...) va_start(ap, fmt); vsprintf(temp, fmt2, ap); va_end(ap); - warning(temp, ap); + warning("%s", temp); } static void * From 8eefb0fe95940c16fbea0af8398e399577a46de6 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 10 Aug 2025 22:42:39 +0200 Subject: [PATCH 03/29] GLSL Parser: Fix a warning. --- src/qt/qt_glsl_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_glsl_parser.cpp b/src/qt/qt_glsl_parser.cpp index 934dd2052..0bd35ca25 100644 --- a/src/qt/qt_glsl_parser.cpp +++ b/src/qt/qt_glsl_parser.cpp @@ -237,7 +237,7 @@ glslp_t *glslp_parse(const char *f) { int j; int len; int sublen; - char s[513], t[513], z[540]; + char s[2049], t[2049], z[2076]; memset(s, 0, sizeof(s)); if (endswith(f, ".glsl")) From 84d50733d106b28df1ec30eb2bdb50399d7bd2d0 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 10 Aug 2025 22:50:20 +0200 Subject: [PATCH 04/29] Config: Low the maximum size being checked for, to see if this fixes the warning. --- src/config.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/config.c b/src/config.c index 77b796117..9858f22bd 100644 --- a/src/config.c +++ b/src/config.c @@ -856,12 +856,12 @@ load_image_file(char *dest, char *p, uint8_t *ui_wp) prefix = "wp://"; if (path_abs(p)) { - if ((strlen(prefix) + strlen(p)) > (MAX_IMAGE_PATH_LEN - 1)) + if ((strlen(prefix) + strlen(p)) > (MAX_IMAGE_PATH_LEN - 11)) ret = 1; else snprintf(dest, MAX_IMAGE_PATH_LEN, "%s%s", prefix, p); } else { - if ((strlen(prefix) + strlen(usr_path) + strlen(path_get_slash(usr_path)) + strlen(p)) > (MAX_IMAGE_PATH_LEN - 1)) + if ((strlen(prefix) + strlen(usr_path) + strlen(path_get_slash(usr_path)) + strlen(p)) > (MAX_IMAGE_PATH_LEN - 11)) ret = 1; else snprintf(dest, MAX_IMAGE_PATH_LEN, "%s%s%s%s", prefix, usr_path, path_get_slash(usr_path), p); From ce01c08d8c03e404ab4f6f0b0ddd873d82da5ab3 Mon Sep 17 00:00:00 2001 From: OBattler Date: Sun, 10 Aug 2025 22:52:22 +0200 Subject: [PATCH 05/29] Media history manager: Attempt to do the same. --- src/qt/qt_mediahistorymanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mediahistorymanager.cpp b/src/qt/qt_mediahistorymanager.cpp index 724616d1c..47ff7b4b5 100644 --- a/src/qt/qt_mediahistorymanager.cpp +++ b/src/qt/qt_mediahistorymanager.cpp @@ -350,7 +350,7 @@ MediaHistoryManager::removeMissingImages(device_index_list_t &device_history) char temp[MAX_IMAGE_PATH_LEN * 2] = { 0 }; if (checked_path.left(8) == "ioctl://") { - strncpy(temp, checked_path.toUtf8().data(), sizeof(temp)); + strncpy(temp, checked_path.toUtf8().data(), sizeof(temp) - 10); temp[sizeof(temp) - 1] = '\0'; } else { QString path_only; From b9f4543fed0800398e3fb09a4dd05e9a01631c1d Mon Sep 17 00:00:00 2001 From: Nelson Kerber Hennemann Filho <87081197+nelsonhef@users.noreply.github.com> Date: Sun, 10 Aug 2025 19:38:43 -0300 Subject: [PATCH 06/29] Update 86box.pot Add msgids for VM Manager and Update Checker --- src/qt/languages/86box.pot | 408 +++++++++++++++++++++++++++++++++++++ 1 file changed, 408 insertions(+) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 96a9502aa..775d21f29 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -27,6 +27,9 @@ msgstr "" msgid "&Pause" msgstr "" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "" msgid "&Settings..." msgstr "" +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "" @@ -357,6 +363,9 @@ msgstr "" msgid "Configure" msgstr "" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "" @@ -417,15 +426,27 @@ msgstr "" msgid "XGA Graphics" msgstr "" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "" @@ -456,6 +477,9 @@ msgstr "" msgid "MIDI In Device:" msgstr "" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "" @@ -615,6 +639,12 @@ msgstr "" msgid "MO drives:" msgstr "" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "" msgid "Ports (COM & LPT)" msgstr "" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "" msgid "Hard disks" msgstr "" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "" @@ -756,6 +804,9 @@ msgstr "" msgid "Other peripherals" msgstr "" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "" @@ -900,6 +951,12 @@ msgstr "" msgid "Internal device" msgstr "" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + msgid "Exit" msgstr "" @@ -996,6 +1053,9 @@ msgstr "" msgid "Pause execution" msgstr "" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "" @@ -1005,6 +1065,267 @@ msgstr "" msgid "Hard reset" msgstr "" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "" @@ -1347,6 +1668,9 @@ msgstr "" msgid "Null Driver" msgstr "" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "" @@ -1416,6 +1740,9 @@ msgstr "" msgid "MiB" msgstr "" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "" @@ -2223,6 +2550,9 @@ msgstr "" msgid "3Dfx Voodoo Graphics" msgstr "" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "" @@ -2489,3 +2819,81 @@ msgstr "" msgid "Hostname:" msgstr "" + +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" From 4b34ba2b84a0cc051cbbc87c2b549107ca287967 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 11 Aug 2025 13:11:48 +0200 Subject: [PATCH 07/29] AT Keyboard: Give the 101+-key keyboards keyboard ID's, so BIOS'es enable support for keys such as AltGr, fixes #5928. --- src/device/keyboard_at.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/device/keyboard_at.c b/src/device/keyboard_at.c index 9696956b1..d6fdaf4b7 100644 --- a/src/device/keyboard_at.c +++ b/src/device/keyboard_at.c @@ -36,11 +36,11 @@ const uint8_t id_bytes[24][4] = { { 0x00, 0x00, 0x00, 0x00 }, /* XT 83-key */ { 0x00, 0x00, 0x00, 0x00 }, /* AT 84-key */ - { 0x00, 0x00, 0x00, 0x00 }, /* XT/AT 101/102/106-key */ - { 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00 }, /* AT KSC */ - { 0x00, 0x00, 0x00, 0x00 }, /* AT ABNT2 */ + { 0xab, 0x83, 0x00, 0x00 }, /* XT/AT 101-key */ + { 0xab, 0x83, 0x00, 0x00 }, /* XT/AT 101-key */ + { 0xab, 0x90, 0x00, 0x00 }, /* XT/AT 106-key JIS */ + { 0xab, 0x90, 0x00, 0x00 }, /* AT KSC */ + { 0xab, 0x83, 0x00, 0x00 }, /* AT ABNT2 */ { 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00 }, /* FLAG_AX = 0x08 */ { 0x00, 0x00, 0x00, 0x00 }, From 0dfac122e75051e51dc517359a62a9ff1f116454 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 11 Aug 2025 17:13:13 +0600 Subject: [PATCH 08/29] Add display for refresh rates in status bars --- src/include/86box/video.h | 2 ++ src/qt/qt_mainwindow.cpp | 10 ++++++++++ src/qt/qt_rendererstack.cpp | 13 +++++++++++++ src/video/vid_table.c | 17 +++++++++++++++++ src/video/video.c | 1 + 5 files changed, 43 insertions(+) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 62fea0b9a..b991fa767 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -130,6 +130,8 @@ typedef struct monitor_t { int mon_force_resize; int mon_fullchange; int mon_changeframecount; + int mon_renderedframes; + atomic_int mon_actualrenderedframes; atomic_int mon_screenshots; uint32_t *mon_pal_lookup; int *mon_cga_palette; diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index e7a90e0c3..c39ef7cbc 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -220,6 +220,16 @@ MainWindow::MainWindow(QWidget *parent) kana_label->setToolTip(QShortcut::tr("Kana Lock")); statusBar()->addPermanentWidget(kana_label); + auto hertz_label = new QLabel; + QTimer* frameRateTimer = new QTimer(this); + frameRateTimer->setInterval(1000); + frameRateTimer->setSingleShot(false); + connect(frameRateTimer, &QTimer::timeout, [this, hertz_label] { + hertz_label->setText(QString("%1 Hz").arg(monitors[0].mon_actualrenderedframes)); + }); + statusBar()->addPermanentWidget(hertz_label); + frameRateTimer->start(1000); + QTimer* ledKeyboardTimer = new QTimer(this); ledKeyboardTimer->setTimerType(Qt::CoarseTimer); ledKeyboardTimer->setInterval(1); diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 821b4c741..73cf75396 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -45,6 +45,8 @@ #include #include +#include + #include #include #include @@ -96,6 +98,17 @@ RendererStack::RendererStack(QWidget *parent, int monitor_index) ui->setupUi(this); m_monitor_index = monitor_index; + + + if (monitor_index >= 1) { + QTimer* frameRateTimer = new QTimer(this); + frameRateTimer->setSingleShot(false); + frameRateTimer->setInterval(1000); + connect(frameRateTimer, &QTimer::timeout, [this] { + this->setWindowTitle(QObject::tr("86Box Monitor #") + QString::number(m_monitor_index + 1) + QString(" - %1 Hz").arg(monitors[m_monitor_index].mon_actualrenderedframes)); + }); + frameRateTimer->start(1000); + } #if defined __unix__ && !defined __HAIKU__ memset(auto_mouse_type, 0, sizeof (auto_mouse_type)); mousedata.mouse_type = getenv("EMU86BOX_MOUSE"); diff --git a/src/video/vid_table.c b/src/video/vid_table.c index e8e945ab8..17ed64bdd 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -283,6 +283,22 @@ vid_table_log(const char *fmt, ...) # define vid_table_log(fmt, ...) #endif +static pc_timer_t framerate_timer; + +void +video_update_framerates(void* priv) +{ + (void)priv; + int i = 0; + + for (i = 0; i < GFXCARD_MAX; i++) { + monitors[i].mon_actualrenderedframes = monitors[i].mon_renderedframes; + monitors[i].mon_renderedframes = 0; + } + + timer_on_auto(&framerate_timer, 1000 * 1000); +} + void video_reset_close(void) { @@ -358,6 +374,7 @@ video_reset(int card) device_add(video_cards[card].device); } + timer_add(&framerate_timer, video_update_framerates, NULL, 1); was_reset = 1; } diff --git a/src/video/video.c b/src/video/video.c index c8dc137c5..e2f2801d3 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -476,6 +476,7 @@ video_blit_memtoscreen_monitor(int x, int y, int w, int h, int monitor_index) monitors[monitor_index].mon_blit_data_ptr->y = y; monitors[monitor_index].mon_blit_data_ptr->w = w; monitors[monitor_index].mon_blit_data_ptr->h = h; + monitors[monitor_index].mon_renderedframes++; thread_set_event(monitors[monitor_index].mon_blit_data_ptr->wake_blit_thread); MTR_END("video", "video_blit_memtoscreen"); From 42fa1dbe541bf1344dd358b91e1cc8f8da848cb0 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 11 Aug 2025 13:34:58 +0200 Subject: [PATCH 09/29] S3 Cards: Fix timings in some modes to account for double-clocking. --- src/video/vid_s3.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 0cd1caea3..7b1535878 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -3719,6 +3719,8 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; + break; default: break; } @@ -3749,6 +3751,8 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; + break; default: break; } @@ -3804,6 +3808,7 @@ s3_recalctimings(svga_t *svga) /*SPEA specific drivers + its VBE RAM BIOS...*/ svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; } break; default: @@ -3867,6 +3872,7 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; break; default: break; @@ -3883,6 +3889,7 @@ s3_recalctimings(svga_t *svga) case S3_NUMBER9_9FX_531: svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; default: @@ -3901,6 +3908,7 @@ s3_recalctimings(svga_t *svga) case S3_SPEA_MERCURY_P64V: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; /* TODO: Is this still needed? */ if (svga->hdisp == 832) svga->hdisp -= 32; @@ -3912,6 +3920,7 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; break; default: break; @@ -4045,6 +4054,7 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; break; default: break; @@ -4067,6 +4077,7 @@ s3_recalctimings(svga_t *svga) case S3_SPEA_MERCURY_P64V: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; /* TODO: Is this still needed? */ if (svga->hdisp == 832) svga->hdisp -= 32; @@ -4078,6 +4089,7 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; break; default: break; @@ -4153,6 +4165,7 @@ s3_recalctimings(svga_t *svga) case S3_VISION864: svga->hdisp = (svga->hdisp << 1) / 3; svga->dots_per_clock = (svga->dots_per_clock << 1) / 3; + svga->clock /= (2.0 / 3.0); break; case S3_VISION968: @@ -4160,6 +4173,7 @@ s3_recalctimings(svga_t *svga) case S3_MIROVIDEO40SV_ERGO_968: svga->hdisp = (svga->hdisp / 3) << 2; svga->dots_per_clock = (svga->hdisp / 3) << 2; + svga->clock /= (2.0 / 3.0); break; default: break; @@ -4190,6 +4204,7 @@ s3_recalctimings(svga_t *svga) case S3_NUMBER9_9FX_531: svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; default: break; @@ -4203,6 +4218,7 @@ s3_recalctimings(svga_t *svga) case 1024: svga->hdisp >>= 1; svga->dots_per_clock >>= 1; + svga->clock /= 2.0; break; default: break; @@ -4214,6 +4230,7 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; break; default: break; @@ -4235,6 +4252,7 @@ s3_recalctimings(svga_t *svga) case S3_SPEA_MERCURY_P64V: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; /* TODO: Is this still needed? */ if (svga->hdisp == 832) svga->hdisp -= 32; @@ -4246,6 +4264,7 @@ s3_recalctimings(svga_t *svga) case 1600: svga->hdisp <<= 1; svga->dots_per_clock <<= 1; + svga->clock /= 2.0; break; default: break; From f7ab5bb31f7c8c16d30b4b4d26ff101fda4141c3 Mon Sep 17 00:00:00 2001 From: Nelson Kerber Hennemann Filho <87081197+nelsonhef@users.noreply.github.com> Date: Mon, 11 Aug 2025 09:23:00 -0300 Subject: [PATCH 10/29] Update 86box.pot Add one missing msgid and a minor fix --- src/qt/languages/86box.pot | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 775d21f29..4dc411f09 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -957,6 +957,9 @@ msgstr "" msgid "&New machine..." msgstr "" +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "" @@ -1275,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" From e70379857d704c6f1bfc352fc604e53b68fc3e0a Mon Sep 17 00:00:00 2001 From: nelsonhef Date: Mon, 11 Aug 2025 09:45:35 -0300 Subject: [PATCH 11/29] Fix untranslated strings --- src/qt/qt_updatedetails.cpp | 2 +- src/qt/qt_vmmanager_addmachine.cpp | 2 +- src/qt/qt_vmmanager_preferences.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qt/qt_updatedetails.cpp b/src/qt/qt_updatedetails.cpp index f043c9504..32be0aa1e 100644 --- a/src/qt/qt_updatedetails.cpp +++ b/src/qt/qt_updatedetails.cpp @@ -26,7 +26,7 @@ UpdateDetails:: UpdateDetails(const UpdateCheck::UpdateResult &updateResult, QWidget *parent) : QDialog(parent), ui(new Ui::UpdateDetails) { ui->setupUi(this); - ui->updateTitle->setText("An update to 86Box is available!"); + ui->updateTitle->setText(tr(("An update to 86Box is available!")); QString currentVersionText; QString releaseType = updateResult.channel == UpdateCheck::UpdateChannel::Stable ? tr("version") : tr("build"); if(!updateResult.currentVersion.isEmpty()) { diff --git a/src/qt/qt_vmmanager_addmachine.cpp b/src/qt/qt_vmmanager_addmachine.cpp index b73afb022..997a5cdc2 100644 --- a/src/qt/qt_vmmanager_addmachine.cpp +++ b/src/qt/qt_vmmanager_addmachine.cpp @@ -346,7 +346,7 @@ NameAndLocationPage::isComplete() const } else if (const auto dir = QDir(systemLocation->text()); !dir.exists()) { systemLocationValidation->setText(tr("Directory does not exist")); } else { - systemLocationValidation->setText("A new directory for the system will be created in the selected directory above"); + systemLocationValidation->setText(tr("A new directory for the system will be created in the selected directory above")); locationValid = true; } diff --git a/src/qt/qt_vmmanager_preferences.cpp b/src/qt/qt_vmmanager_preferences.cpp index 57f67c9b8..4880900aa 100644 --- a/src/qt/qt_vmmanager_preferences.cpp +++ b/src/qt/qt_vmmanager_preferences.cpp @@ -65,7 +65,7 @@ void VMManagerPreferences::chooseDirectoryLocation() { // TODO: FIXME: This is pulling in the CLI directory! Needs to be set properly elsewhere - const auto directory = QFileDialog::getExistingDirectory(this, "Choose directory", QDir(vmm_path).path()); + const auto directory = QFileDialog::getExistingDirectory(this, tr("Choose directory"), QDir(vmm_path).path()); ui->systemDirectory->setText(QDir::toNativeSeparators(directory)); } From 7bc51118cf27d53c7d83d7d11f31aa6d1f44f9e1 Mon Sep 17 00:00:00 2001 From: nelsonhef Date: Mon, 11 Aug 2025 10:12:32 -0300 Subject: [PATCH 12/29] Merge the updated POT with the PO files --- src/qt/languages/ca-ES.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/cs-CZ.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/de-DE.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/es-ES.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/fi-FI.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/fr-FR.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/hr-HR.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/hu-HU.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/it-IT.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/ja-JP.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/ko-KR.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/nl-NL.po | 413 +++++++++++++++++++++++++++++++++++++- src/qt/languages/pl-PL.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/pt-BR.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/pt-PT.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/ru-RU.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/sk-SK.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/sl-SI.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/sv-SE.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/tr-TR.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/uk-UA.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/vi-VN.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/zh-CN.po | 411 +++++++++++++++++++++++++++++++++++++ src/qt/languages/zh-TW.po | 411 +++++++++++++++++++++++++++++++++++++ 24 files changed, 9865 insertions(+), 1 deletion(-) diff --git a/src/qt/languages/ca-ES.po b/src/qt/languages/ca-ES.po index 46575015c..8f43fb946 100644 --- a/src/qt/languages/ca-ES.po +++ b/src/qt/languages/ca-ES.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Eines" msgid "&Settings..." msgstr "&Ajustaments ..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Actualitzar icones a la barra d'estat" @@ -357,6 +363,9 @@ msgstr "Màquina:" msgid "Configure" msgstr "Configurar" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Tipus de CPU:" @@ -417,15 +426,27 @@ msgstr "Gràfics IBM 8514/A" msgid "XGA Graphics" msgstr "Gràfics XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Ratolí:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1 ..." @@ -456,6 +477,9 @@ msgstr "Dispositiu de sortida MIDI:" msgid "MIDI In Device:" msgstr "Dispositiu d'entrada MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 autònom" @@ -615,6 +639,12 @@ msgstr "Unitats de CD-ROM:" msgid "MO drives:" msgstr "Unitats MO:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Xarxa" msgid "Ports (COM & LPT)" msgstr "Ports (COM i LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Controladors d'emmagatzematge" msgid "Hard disks" msgstr "Discs durs" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Unitats de disquet i CD-ROM" @@ -756,6 +804,9 @@ msgstr "Altres dispositius extraïbles" msgid "Other peripherals" msgstr "Altres perifèrics" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Feu clic per capturar el ratolí" @@ -900,6 +951,15 @@ msgstr "Benvingut a 86Box!" msgid "Internal device" msgstr "Dispositiu intern" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Sortir" @@ -996,6 +1056,9 @@ msgstr "Reprendre l'execució" msgid "Pause execution" msgstr "Pausar l'execució" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Pulsar Ctrl+Alt+Supr" @@ -1005,6 +1068,267 @@ msgstr "Pulsar Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Reinicialització completa" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Apagada ACPI" @@ -1347,6 +1671,9 @@ msgstr "Bus desconegut" msgid "Null Driver" msgstr "Controlador nul" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "No s'han trobat dispositius MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Targeta de xarxa 1" @@ -2223,6 +2553,9 @@ msgstr "Color no interlat" msgid "3Dfx Voodoo Graphics" msgstr "Gràfics 3dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 unitats TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Controlador de HD:" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 276193ffc..48ae6df56 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "P&ozastavit" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Nástroje" msgid "&Settings..." msgstr "&Nastavení..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Aktualizovat ikony stavového řádku" @@ -357,6 +363,9 @@ msgstr "Počítač:" msgid "Configure" msgstr "Nastavit" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Procesor:" @@ -417,15 +426,27 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Myš:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "MIDI výstup:" msgid "MIDI In Device:" msgstr "MIDI vstup:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Samostatný MPU-401" @@ -615,6 +639,12 @@ msgstr "Mechaniky CD-ROM:" msgid "MO drives:" msgstr "Magnetooptické mechaniky:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Síť" msgid "Ports (COM & LPT)" msgstr "COM a LPT porty" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Řadiče úložiště" msgid "Hard disks" msgstr "Pevné disky" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Disketové a CD-ROM mechaniky" @@ -756,6 +804,9 @@ msgstr "Další vyměnitelná zařízení" msgid "Other peripherals" msgstr "Jiné příslušenství" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Klikněte pro zabraní myši" @@ -900,6 +951,15 @@ msgstr "Vítejte v programu 86Box!" msgid "Internal device" msgstr "Vestavěné zařízení" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Ukončit" @@ -996,6 +1056,9 @@ msgstr "Obnovit" msgid "Pause execution" msgstr "Pozastavit" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Stisknout Ctrl+Alt+Delete" @@ -1005,6 +1068,267 @@ msgstr "Stisknout Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Resetovat" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Vypnout skrze rozhraní ACPI" @@ -1347,6 +1671,9 @@ msgstr "Neznámá sběrnice" msgid "Null Driver" msgstr "Nulový ovladač" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Žádné zařízení MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Síťová karta 1" @@ -2223,6 +2553,9 @@ msgstr "Barevný bez prokládání" msgid "3Dfx Voodoo Graphics" msgstr "Grafický akcelerátor 3dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 jednotky TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Řadič disku:" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 47a3ed609..4b37d9666 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -27,6 +27,9 @@ msgstr "Strg+Alt+&Esc" msgid "&Pause" msgstr "&Pause" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "&Fortsetzen" @@ -192,6 +195,9 @@ msgstr "&Werkzeuge" msgid "&Settings..." msgstr "&Optionen..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Statusleistenicons aktualisieren" @@ -357,6 +363,9 @@ msgstr "System:" msgid "Configure" msgstr "Konfigurieren" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "CPU-Typ:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A-Grafik" msgid "XGA Graphics" msgstr "XGA-Grafik" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "Tastatur:" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Maus:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "MIDI Ausgabegerät:" msgid "MIDI In Device:" msgstr "MIDI Eingabegerät:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Eigenständiges-MPU-401-Gerät" @@ -615,6 +639,12 @@ msgstr "CD-ROM-Laufwerke:" msgid "MO drives:" msgstr "MO-Laufwerke:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "Wechseldatenträger:" @@ -741,12 +771,30 @@ msgstr "Netzwerk" msgid "Ports (COM & LPT)" msgstr "Anschlüsse (COM + LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Speichercontroller" msgid "Hard disks" msgstr "Festplatten" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Disketten- + CD-ROM-Laufwerke" @@ -756,6 +804,9 @@ msgstr "Andere Wechsellaufwerke" msgid "Other peripherals" msgstr "Andere Peripheriegeräte" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Klicken zum Einfangen des Mauszeigers" @@ -900,6 +951,15 @@ msgstr "Willkommen bei 86Box!" msgid "Internal device" msgstr "Interne Gerät" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Beenden" @@ -996,6 +1056,9 @@ msgstr "Fortsetzen" msgid "Pause execution" msgstr "Pausieren" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Strg+Alt+Entf drücken" @@ -1005,6 +1068,267 @@ msgstr "Strg+Alt+Esc drücken" msgid "Hard reset" msgstr "Kaltstart" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Über ACPI herunterfahren" @@ -1347,6 +1671,9 @@ msgstr "Unbekannter Bus" msgid "Null Driver" msgstr "Nulltreiber" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Keine MCA-Geräte." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Netzwerkkarte 1" @@ -2223,6 +2553,9 @@ msgstr "Farbe (Kein Zeilensprungverfahren)" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo Grafik" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMUs)" @@ -2490,6 +2823,84 @@ msgstr "Hub-Modus" msgid "Hostname:" msgstr "Hostname:" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "HDD-Controller:" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index fdeae28e7..ca65b3695 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Herramientas" msgid "&Settings..." msgstr "&Configuraciones..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Actualizar iconos en barra de estado" @@ -357,6 +363,9 @@ msgstr "Máquina:" msgid "Configure" msgstr "Configurar" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Tipo de CPU:" @@ -417,15 +426,27 @@ msgstr "Gráficos IBM 8514/A" msgid "XGA Graphics" msgstr "Gráficos XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Ratón:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Mando:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Mando 1..." @@ -456,6 +477,9 @@ msgstr "Dispositivo MIDI de salida:" msgid "MIDI In Device:" msgstr "Dispositivo MIDI de entrada:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 independiente" @@ -615,6 +639,12 @@ msgstr "Unidades de CD-ROM:" msgid "MO drives:" msgstr "Unidades MO:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Red" msgid "Ports (COM & LPT)" msgstr "Puertos (COM y LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Controladoras de Almacenamiento" msgid "Hard disks" msgstr "Discos Duros" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Disquetes y unidades de CD-ROM" @@ -756,6 +804,9 @@ msgstr "Otros dispositivos extraíbles" msgid "Other peripherals" msgstr "Otros periféricos" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Haga click para capturar el ratón" @@ -900,6 +951,15 @@ msgstr "¡Bienvenido a 86Box!" msgid "Internal device" msgstr "Dispositivo interno" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Salir" @@ -996,6 +1056,9 @@ msgstr "Retomar la ejecución" msgid "Pause execution" msgstr "Pausar la ejecución" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Pulsar Ctrl+Alt+Supr" @@ -1005,6 +1068,267 @@ msgstr "Pulsar Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Hard reset" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Parada ACPI" @@ -1347,6 +1671,9 @@ msgstr "Bus desconocido" msgid "Null Driver" msgstr "Controlador nulo" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "No hay dispositovos MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Tarjeta de red 1" @@ -2223,6 +2553,9 @@ msgstr "Color no entrelazado" msgid "3Dfx Voodoo Graphics" msgstr "Gráficos 3dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 unidades TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Controladora HD:" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 2e2784903..01ccac09e 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Tauko" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "Työ&kalut" msgid "&Settings..." msgstr "&Kokoonpano..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Päivitä tilapalkin kuvakkeita" @@ -357,6 +363,9 @@ msgstr "Tietokone:" msgid "Configure" msgstr "Määritys" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Suorittimen tyyppi:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A-grafiikkasuoritin" msgid "XGA Graphics" msgstr "XGA-grafiikkasuoritin" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Hiiri:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Peliohjain:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Peliohjain 1..." @@ -456,6 +477,9 @@ msgstr "MIDI-ulostulo:" msgid "MIDI In Device:" msgstr "MIDI-sisääntulo:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Erillinen MPU-401" @@ -615,6 +639,12 @@ msgstr "CD-ROM-asemat:" msgid "MO drives:" msgstr "Magneettisoptiset asemat (MO):" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Verkko" msgid "Ports (COM & LPT)" msgstr "Portit (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Tallennusohjaimet" msgid "Hard disks" msgstr "Kiintolevyt" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Levyke ja CD-ROM" @@ -756,6 +804,9 @@ msgstr "Muut tallennuslaitteet" msgid "Other peripherals" msgstr "Muut oheislaitteet" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Kaappaa hiiri klikkaamalla" @@ -900,6 +951,15 @@ msgstr "Tervetuloa 86Boxiin!" msgid "Internal device" msgstr "Sisäinen laite" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Poistu" @@ -996,6 +1056,9 @@ msgstr "Jatka suoritusta" msgid "Pause execution" msgstr "Pysäytä suoritus" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Paina Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Paina Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Kylmä uudelleenkäynnistys" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI-sammutus" @@ -1347,6 +1671,9 @@ msgstr "Tuntematon väylä" msgid "Null Driver" msgstr "Nolla-ajuri" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Ei MCA-laitteita." msgid "MiB" msgstr "Mit" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Verkkokortti 1" @@ -2223,6 +2553,9 @@ msgstr "Väri ei-välitetyt" msgid "3Dfx Voodoo Graphics" msgstr "3dfx Voodoo-grafiikkasuoritin" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU:ta)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Kiintolevyohjain:" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 9c4097aa3..04a9c1c10 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pause" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "Ou&tils" msgid "&Settings..." msgstr "&Réglages..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "Mettre à jour la barre de stat&us" @@ -357,6 +363,9 @@ msgstr "Machine:" msgid "Configure" msgstr "Configurer" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Type de processeur:" @@ -417,15 +426,27 @@ msgstr "Graphique IBM 8514/A" msgid "XGA Graphics" msgstr "Graphique XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Souris:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Manette:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Manette 1..." @@ -456,6 +477,9 @@ msgstr "Sortie MIDI:" msgid "MIDI In Device:" msgstr "Entrée MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 autonome" @@ -615,6 +639,12 @@ msgstr "Lecteurs CD-ROM:" msgid "MO drives:" msgstr "Lecteurs magnéto-optiques:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Réseau" msgid "Ports (COM & LPT)" msgstr "Ports (COM et LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Contrôleurs de stockage" msgid "Hard disks" msgstr "Disques durs" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Lecteurs de disquette et CD-ROM" @@ -756,6 +804,9 @@ msgstr "Autres dispositifs amovibles" msgid "Other peripherals" msgstr "Autres périphériques" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Cliquer pour capturer la souris" @@ -900,6 +951,15 @@ msgstr "Bienvenue dans 86Box !" msgid "Internal device" msgstr "Dispositif interne" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Sortir" @@ -996,6 +1056,9 @@ msgstr "Reprendre l'exécution" msgid "Pause execution" msgstr "Pause de l'exécution" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Appuyer sur Ctrl+Alt+Suppr" @@ -1005,6 +1068,267 @@ msgstr "Appuyer sur Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Hard reset" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Arrêt ACPI" @@ -1347,6 +1671,9 @@ msgstr "Bus inconnu" msgid "Null Driver" msgstr "Pilote NULL" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Pas de dispositifs MCA." msgid "MiB" msgstr "Mio" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Carte réseau 1" @@ -2223,6 +2553,9 @@ msgstr "Couleur non entrelacée" msgid "3Dfx Voodoo Graphics" msgstr "Graphique 3dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 unités TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Contrôleur HD:" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 6727fc4e6..b783a9ab5 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pauza" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Alati" msgid "&Settings..." msgstr "&Opcije..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Ažuriraj ikone statusnog redka" @@ -357,6 +363,9 @@ msgstr "Sistem:" msgid "Configure" msgstr "Namjesti" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Tip procesora:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A grafika" msgid "XGA Graphics" msgstr "XGA grafika" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Miš:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Palica za igru:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Palica za igru 1..." @@ -456,6 +477,9 @@ msgstr "Izlazni uređaj MIDI:" msgid "MIDI In Device:" msgstr "Ulazni uređaj MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Samostalni MPU-401" @@ -615,6 +639,12 @@ msgstr "CD-ROM pogoni:" msgid "MO drives:" msgstr "MO pogoni:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Mreža" msgid "Ports (COM & LPT)" msgstr "Vrata (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Kontroleri za diskove" msgid "Hard disks" msgstr "Tvrdi diskovi" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Floppy & CD-ROM pogoni" @@ -756,6 +804,9 @@ msgstr "Ostali uklonjivi uređaji" msgid "Other peripherals" msgstr "Ostali periferni uređaji" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Kliknite da uhvatite miš" @@ -900,6 +951,15 @@ msgstr "Dobrodošli u 86Box!" msgid "Internal device" msgstr "Uunutarnji uređaj" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Izlazi" @@ -996,6 +1056,9 @@ msgstr "Nastavi" msgid "Pause execution" msgstr "Pauziraj" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Stisni Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Stisni Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Ponovno pokretanje" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI bazirano gašenje" @@ -1347,6 +1671,9 @@ msgstr "Nepoznata sabirnica" msgid "Null Driver" msgstr "Nulti upravljački program" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Nema uređaja MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Mrežna kartica 1" @@ -2223,6 +2553,9 @@ msgstr "Bojni bez preplitanja" msgid "3Dfx Voodoo Graphics" msgstr "3dfx Voodoo grafika" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 jednote TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Kontroler tvrdog diska:" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index 7eee581bb..7e2260029 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Szüneteltetés" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Eszközök" msgid "&Settings..." msgstr "&Konfigurálás..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "Állapotsori ikonok &frissítése" @@ -357,6 +363,9 @@ msgstr "Számítógép:" msgid "Configure" msgstr "Beállítások..." +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Processzor:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A-gyorsítókártya" msgid "XGA Graphics" msgstr "XGA-gyorsítókártya" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Egér:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Játékvezérlő:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Játékvez. 1..." @@ -456,6 +477,9 @@ msgstr "MIDI-kimenet:" msgid "MIDI In Device:" msgstr "MIDI-bemenet:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Különálló MPU-401" @@ -615,6 +639,12 @@ msgstr "CD-ROM meghajtók:" msgid "MO drives:" msgstr "MO-meghajtók:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Hálózat" msgid "Ports (COM & LPT)" msgstr "Portok (COM és LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Tárolóvezérlők" msgid "Hard disks" msgstr "Merevlemezek" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Floppy és CD-ROM meghajtók" @@ -756,6 +804,9 @@ msgstr "Egyéb cserélhető tárolók" msgid "Other peripherals" msgstr "Egyéb perifériák" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Kattintson az egér elfogásához" @@ -900,6 +951,15 @@ msgstr "Üdvözli önt az 86Box!" msgid "Internal device" msgstr "Integrált eszköz" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Kilépés" @@ -996,6 +1056,9 @@ msgstr "Folytassa a végrehajtást" msgid "Pause execution" msgstr "Kivitelezés szüneteltetése" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Nyomja meg a Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Nyomja meg a Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Hardveres újraindítás" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI leállítás" @@ -1347,6 +1671,9 @@ msgstr "Ismeretlen busz" msgid "Null Driver" msgstr "Null Driver" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Nincsenek MCA eszközök." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Hálózati kártya 1" @@ -2223,6 +2553,9 @@ msgstr "Színes nem átlapolt" msgid "3Dfx Voodoo Graphics" msgstr "3dfx Voodoo-gyorsítókártya" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Merevl.-vezérlő:" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index 16cf8a556..d5cbf918e 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "&Riprendi" @@ -192,6 +195,9 @@ msgstr "&Strumenti" msgid "&Settings..." msgstr "&Impostazioni..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Aggiorna icone della barra di stato" @@ -357,6 +363,9 @@ msgstr "Scheda madre:" msgid "Configure" msgstr "Configura" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Tipo di CPU:" @@ -417,15 +426,27 @@ msgstr "Grafica IBM 8514/A" msgid "XGA Graphics" msgstr "Grafica XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "Tastiera:" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Mouse:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "Uscita MIDI:" msgid "MIDI In Device:" msgstr "Entrata MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 autonomo" @@ -615,6 +639,12 @@ msgstr "Unità CD-ROM:" msgid "MO drives:" msgstr "Unità magneto-ottiche:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "Unità disco rimovibili:" @@ -741,12 +771,30 @@ msgstr "Rete" msgid "Ports (COM & LPT)" msgstr "Porte (COM e LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Controller di archiviazione" msgid "Hard disks" msgstr "Dischi rigidi" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Unità CD-ROM e Floppy" @@ -756,6 +804,9 @@ msgstr "Altri dispositivi rimovibili" msgid "Other peripherals" msgstr "Altre periferiche" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Fare clic per catturare il mouse" @@ -900,6 +951,15 @@ msgstr "Benvenuti in 86Box!" msgid "Internal device" msgstr "Dispositivo integrato" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Esci" @@ -996,6 +1056,9 @@ msgstr "Riprendi l'esecuzione" msgid "Pause execution" msgstr "Sospendi l'esecuzione" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Premere Ctrl+Alt+Canc" @@ -1005,6 +1068,267 @@ msgstr "Premere Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Riavvia" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Arresto ACPI" @@ -1347,6 +1671,9 @@ msgstr "Bus sconosciuto" msgid "Null Driver" msgstr "Driver Null" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Nessun dispositivo MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Scheda di rete #1" @@ -2223,6 +2553,9 @@ msgstr "A colori non interlacciato" msgid "3Dfx Voodoo Graphics" msgstr "Grafica 3Dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU)" @@ -2490,6 +2823,84 @@ msgstr "Modalità Hub" msgid "Hostname:" msgstr "Nome host:" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Controller HD:" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 626fd5fdf..259e134be 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "一時停止(&P)" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "ツール(&T)" msgid "&Settings..." msgstr "設定(&S)..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "ステータスバーのアイコンを更新(&U)" @@ -357,6 +363,9 @@ msgstr "マシン:" msgid "Configure" msgstr "設定" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "CPUタイプ:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/Aグラフィック" msgid "XGA Graphics" msgstr "XGAグラフィック" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "マウス:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "ジョイスティック:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "ジョイスティック1..." @@ -456,6 +477,9 @@ msgstr "MIDI出力デバイス:" msgid "MIDI In Device:" msgstr "MIDI入力デバイス:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "独立型MPU-401" @@ -615,6 +639,12 @@ msgstr "CD-ROMドライブ:" msgid "MO drives:" msgstr "光磁気ドライブ:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "ネットワーク" msgid "Ports (COM & LPT)" msgstr "ポート (COM/LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "ストレージコントローラ" msgid "Hard disks" msgstr "ハードディスク" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "フロッピー/CD-ROMドライブ" @@ -756,6 +804,9 @@ msgstr "他のリムーバブルデバイス" msgid "Other peripherals" msgstr "他の周辺デバイス" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "左クリックでマウスをキャプチャします" @@ -900,6 +951,15 @@ msgstr "86Boxへようこそ!" msgid "Internal device" msgstr "内蔵デバイス" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "終了" @@ -996,6 +1056,9 @@ msgstr "実行を再開" msgid "Pause execution" msgstr "実行を一時停止" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Ctrl+Alt+DELを押す" @@ -1005,6 +1068,267 @@ msgstr "Ctrl+Alt+Escを押す" msgid "Hard reset" msgstr "ハードリセット" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPIシャットダウン" @@ -1347,6 +1671,9 @@ msgstr "不明なバス" msgid "Null Driver" msgstr "ヌル・ドライバー" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "MCAデバイスはない。" msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "ネットワークカード 1" @@ -2223,6 +2553,9 @@ msgstr "カラー・ノンインターレース" msgid "3Dfx Voodoo Graphics" msgstr "3dfx Voodooグラフィック" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst(2 TMU単位)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "HDDコントローラー:" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 45a378f18..457f89d0e 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "일시정지(&P)" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "도구(&T)" msgid "&Settings..." msgstr "설정(&S)..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "상태 바 아이콘 갱신하기(&U)" @@ -357,6 +363,9 @@ msgstr "기종:" msgid "Configure" msgstr "설정" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "CPU 종류:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A 그래픽" msgid "XGA Graphics" msgstr "XGA 그래픽" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "마우스:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "조이스틱:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "조이스틱 1..." @@ -456,6 +477,9 @@ msgstr "MIDI 출력 장치:" msgid "MIDI In Device:" msgstr "MIDI 입력 장치:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 단독 사용" @@ -615,6 +639,12 @@ msgstr "CD-ROM 드라이브:" msgid "MO drives:" msgstr "광자기 드라이브:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "네트워크" msgid "Ports (COM & LPT)" msgstr "포트 (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "장치 컨트롤러" msgid "Hard disks" msgstr "하드 디스크" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "플로피 / CD-ROM" @@ -756,6 +804,9 @@ msgstr "기타 이동식 저장장치" msgid "Other peripherals" msgstr "기타 주변기기" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "이 창을 클릭하면 마우스를 사용합니다" @@ -900,6 +951,15 @@ msgstr "86Box에 어서오세요!" msgid "Internal device" msgstr "내부 장치" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "끝내기" @@ -996,6 +1056,9 @@ msgstr "실행 재개" msgid "Pause execution" msgstr "실행 일시 중지" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Ctrl+Alt+Esc" msgid "Hard reset" msgstr "재시작" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI 종료" @@ -1347,6 +1671,9 @@ msgstr "알 수 없는 버스" msgid "Null Driver" msgstr "Null 드라이버" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "MCA 장치가 없습니다." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "네트워크 카드 1" @@ -2223,6 +2553,9 @@ msgstr "비인터레이스 컬러" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx 부두 그래픽" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "옵시디언 SB50 + 자수정(TMU 2개)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "HD 컨트롤러:" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 454ec123b..378427d85 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pauze" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "He&rvatten" @@ -192,6 +195,9 @@ msgstr "&Tools" msgid "&Settings..." msgstr "&Instellingen..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Statusbalkpictogrammen bijwerken" @@ -357,6 +363,9 @@ msgstr "Machine:" msgid "Configure" msgstr "Configureren" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "CPU type:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A-graphics" msgid "XGA Graphics" msgstr "XGA Graphics" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "Toetsenbord" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Muis:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "MIDI Out-apparaat:" msgid "MIDI In Device:" msgstr "MIDI In-apparaat:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Standalone MPU-401" @@ -615,6 +639,12 @@ msgstr "CD-ROM-stations:" msgid "MO drives:" msgstr "MO-schijven:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "Verwisselbare schijfstations" @@ -741,12 +771,30 @@ msgstr "Netwerk" msgid "Ports (COM & LPT)" msgstr "Poorten (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Opslagcontrollers" msgid "Hard disks" msgstr "Harde schijven" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Floppy- en CD-ROM-stations" @@ -756,6 +804,9 @@ msgstr "Andere verwijderbare apparaten" msgid "Other peripherals" msgstr "Andere randapparatuur" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Klik om muis vast te leggen" @@ -900,6 +951,15 @@ msgstr "Welkom bij 86Box!" msgid "Internal device" msgstr "Intern apparaat" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "&Afsluiten" @@ -996,6 +1056,9 @@ msgstr "Hervat executie" msgid "Pause execution" msgstr "Pauze executie" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Druk op Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Druk op Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Harde reset" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI uitschakeling" @@ -1347,6 +1671,9 @@ msgstr "Onbekende bus" msgid "Null Driver" msgstr "Null Driver" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Geen MCA-apparaten." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Netwerkkaart #1" @@ -1510,7 +1840,7 @@ msgid "3M MicroTouch (Serial)" msgstr "3M MicroTouch (serieel)" msgid "Default Baud rate" -msgstr "Standaard baudrate" +msgstr "Standaard baudrate" msgid "[COM] Standard Hayes-compliant Modem" msgstr "COM] Standaard Hayes-compatibele modem " @@ -2223,6 +2553,9 @@ msgstr "Kleur niet geïnterlaced" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo Graphics" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU's)" @@ -2490,6 +2823,84 @@ msgstr "Hub-modus" msgid "Hostname:" msgstr "Hostname" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "HD-controller:" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 78b2aee84..cf80e50dd 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pauza" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "&Wznów" @@ -192,6 +195,9 @@ msgstr "&Narzędzia" msgid "&Settings..." msgstr "&Ustawienia..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Aktualizuj ikony na pasku statusu" @@ -357,6 +363,9 @@ msgstr "Maszyna:" msgid "Configure" msgstr "Konfiguruj" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Rodzaj procesora:" @@ -417,15 +426,27 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "Klawiatura:" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Mysz:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "Urządzenie wyjściowe MIDI:" msgid "MIDI In Device:" msgstr "Urządzenie wejściowe MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Samodzielne urządzenie MPU-401" @@ -615,6 +639,12 @@ msgstr "Napędy CD-ROM:" msgid "MO drives:" msgstr "Napędy MO:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "Stacje dysków wymiennych:" @@ -741,12 +771,30 @@ msgstr "Sieć" msgid "Ports (COM & LPT)" msgstr "Porty (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Kontrolery pamięci masowej" msgid "Hard disks" msgstr "Dyski twarde" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Napędy dyskietek i CD-ROM" @@ -756,6 +804,9 @@ msgstr "Inne urządzenia wymienne" msgid "Other peripherals" msgstr "Inne urządzenia peryferyjne" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Kliknij, by przechwycić mysz" @@ -900,6 +951,15 @@ msgstr "Witamy w 86Boxie!" msgid "Internal device" msgstr "Urządzenie wewnętrzne" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Zakończ" @@ -996,6 +1056,9 @@ msgstr "Wznów wykonywanie" msgid "Pause execution" msgstr "Zatrzymaj wykonywanie" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Naciśnij Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Naciśnij Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Twardy reset" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Wyłączenie ACPI" @@ -1347,6 +1671,9 @@ msgstr "Nieznana magistrala" msgid "Null Driver" msgstr "Null Driver" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Brak urządzeń MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Karta sieciowa nr 1" @@ -2223,6 +2553,9 @@ msgstr "Kolor bez przeplotu" msgid "3Dfx Voodoo Graphics" msgstr "Grafika 3Dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 jednostki TMU)" @@ -2489,3 +2822,81 @@ msgstr "" msgid "Hostname:" msgstr "" + +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 11c6b3ce4..876a927b8 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausar" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "&Continuar" @@ -192,6 +195,9 @@ msgstr "&Ferramentas" msgid "&Settings..." msgstr "&Configurações..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Atualizar ícones da barra de status" @@ -357,6 +363,9 @@ msgstr "Máquina:" msgid "Configure" msgstr "Configurar" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Tipo de CPU:" @@ -417,15 +426,27 @@ msgstr "Gráficos IBM 8514/A" msgid "XGA Graphics" msgstr "Gráficos XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "Teclado:" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Mouse:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "Disp. de saída MIDI:" msgid "MIDI In Device:" msgstr "Disp. de entrada MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 independente" @@ -615,6 +639,12 @@ msgstr "Unidades de CD-ROM:" msgid "MO drives:" msgstr "Unidades magneto-ópticas:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "Unidades de disco removível:" @@ -741,12 +771,30 @@ msgstr "Rede" msgid "Ports (COM & LPT)" msgstr "Portas (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Controladores de armaz." msgid "Hard disks" msgstr "Discos rígidos" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Disquete & CD-ROM" @@ -756,6 +804,9 @@ msgstr "Dispos. removíveis" msgid "Other peripherals" msgstr "Outros periféricos" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Clique para capturar o mouse" @@ -900,6 +951,15 @@ msgstr "Bem-vindo ao 86Box!" msgid "Internal device" msgstr "Dispositivo interno" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Sair" @@ -996,6 +1056,9 @@ msgstr "Continuar a execução" msgid "Pause execution" msgstr "Pausar a execução" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Pressionar Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Pressionar Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Reinicialização completa" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Desligamento por ACPI" @@ -1347,6 +1671,9 @@ msgstr "Barramento desconhecido" msgid "Null Driver" msgstr "Driver nulo" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Nenhum dispositivo MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Placa de rede 1" @@ -2223,6 +2553,9 @@ msgstr "Colorido não entrelaçado" msgid "3Dfx Voodoo Graphics" msgstr "Gráficos 3Dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 unidades TMU)" @@ -2489,3 +2822,81 @@ msgstr "Modo Hub" msgid "Hostname:" msgstr "Nome do Host:" + +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 782821d15..5bf32c78f 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Ferramentas" msgid "&Settings..." msgstr "&Definições..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Atualizar ícones da barra de estado" @@ -357,6 +363,9 @@ msgstr "Máquina:" msgid "Configure" msgstr "Configurar" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Tipo do CPU:" @@ -417,15 +426,27 @@ msgstr "Gráficos IBM 8514/A" msgid "XGA Graphics" msgstr "Gráficos XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Rato:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "Disp. saída MIDI:" msgid "MIDI In Device:" msgstr "Disp. entrada MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 autónomo" @@ -615,6 +639,12 @@ msgstr "Unidades CD-ROM:" msgid "MO drives:" msgstr "Unidades magneto-ópticas:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Rede" msgid "Ports (COM & LPT)" msgstr "Portas (COM e LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Dispositivos de armazenamento" msgid "Hard disks" msgstr "Discos rígidos" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Unidades de disquete e CD-ROM" @@ -756,6 +804,9 @@ msgstr "Outros dispostivos removíveis" msgid "Other peripherals" msgstr "Outros dispositivos" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Clique para capturar o rato" @@ -900,6 +951,15 @@ msgstr "Bem-vindos ao 86Box!" msgid "Internal device" msgstr "Dispositivo integrado" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Sair" @@ -996,6 +1056,9 @@ msgstr "Retomar execução" msgid "Pause execution" msgstr "Pausar execução" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Reinicialização completa" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Encerramento ACPI" @@ -1347,6 +1671,9 @@ msgstr "Autocarro desconhecido" msgid "Null Driver" msgstr "Condutor nulo" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Não há dispositivos MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Placa de rede 1" @@ -2223,6 +2553,9 @@ msgstr "Cor não entrelaçado" msgid "3Dfx Voodoo Graphics" msgstr "Gráficos 3Dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 unidades TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Controlador HD:" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 6f4a3de0a..91eedb053 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Пауза" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "В&озобновить" @@ -192,6 +195,9 @@ msgstr "&Инструменты" msgid "&Settings..." msgstr "&Настройки машины..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Обновление значков строки состояния" @@ -357,6 +363,9 @@ msgstr "Системная плата:" msgid "Configure" msgstr "Настройка" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Тип ЦП:" @@ -417,15 +426,27 @@ msgstr "Ускоритель IBM 8514/A" msgid "XGA Graphics" msgstr "Ускоритель XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "Клавиатура:" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Мышь:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Джойстик:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Джойстик 1..." @@ -456,6 +477,9 @@ msgstr "Устройство вывода MIDI:" msgid "MIDI In Device:" msgstr "Устройство ввода MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Отдельный MPU-401" @@ -615,6 +639,12 @@ msgstr "Дисководы CD-ROM:" msgid "MO drives:" msgstr "Магнитооптические дисководы:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "Дисководы съёмных дисков:" @@ -741,12 +771,30 @@ msgstr "Сеть" msgid "Ports (COM & LPT)" msgstr "Порты (COM и LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Контроллеры дисков" msgid "Hard disks" msgstr "Жёсткие диски" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Гибкие диски и CD-ROM" @@ -756,6 +804,9 @@ msgstr "Другие съёмные устройства" msgid "Other peripherals" msgstr "Другая периферия" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Щёлкните мышью для захвата курсора" @@ -900,6 +951,15 @@ msgstr "Добро пожаловать в 86Box!" msgid "Internal device" msgstr "Встроенное устройство" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Выход" @@ -996,6 +1056,9 @@ msgstr "Возобновить выполнение" msgid "Pause execution" msgstr "Приостановить выполнение" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Нажать Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Нажать Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Холодная перезагрузка" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Сигнал завершения ACPI" @@ -1347,6 +1671,9 @@ msgstr "Неизвестная шина" msgid "Null Driver" msgstr "Нулевой драйвер" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Нет устройств MCA." msgid "MiB" msgstr "МиБ" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Сетевая карта 1" @@ -2223,6 +2553,9 @@ msgstr "Цветной без чересстрочной развёртки" msgid "3Dfx Voodoo Graphics" msgstr "Ускоритель 3Dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU)" @@ -2490,6 +2823,84 @@ msgstr "Режим концентратора" msgid "Hostname:" msgstr "Имя хоста:" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Контроллер HD:" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 68446c202..367c5f06a 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "P&ozastaviť" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Nástroje" msgid "&Settings..." msgstr "&Nastavenia..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Aktualizovať ikony na stavovom riadku" @@ -357,6 +363,9 @@ msgstr "Počítač:" msgid "Configure" msgstr "Nastaviť" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Procesor:" @@ -417,15 +426,27 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Myš:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Joystick:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Joystick 1..." @@ -456,6 +477,9 @@ msgstr "MIDI výstup:" msgid "MIDI In Device:" msgstr "MIDI vstup:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Samostatný MPU-401" @@ -615,6 +639,12 @@ msgstr "Mechaniky CD-ROM:" msgid "MO drives:" msgstr "Magnetooptické mechaniky:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Sieť" msgid "Ports (COM & LPT)" msgstr "COM a LPT porty" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Radiče úložiska" msgid "Hard disks" msgstr "Pevné disky" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Disketové a CD-ROM mechaniky" @@ -756,6 +804,9 @@ msgstr "Ďalšie vymeniteľné zariadenia" msgid "Other peripherals" msgstr "Iné príslušenstvo" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Kliknite pre zabráni myši" @@ -900,6 +951,15 @@ msgstr "Vitajte v programe 86Box!" msgid "Internal device" msgstr "Vstavané zariadenie" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Ukončiť" @@ -996,6 +1056,9 @@ msgstr "Obnoviť" msgid "Pause execution" msgstr "Pozastaviť" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Stlačiť Ctrl+Alt+Delete" @@ -1005,6 +1068,267 @@ msgstr "Stlačiť Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Resetovať" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Vypnúť cez rozhranie ACPI" @@ -1347,6 +1671,9 @@ msgstr "Neznáma zbernica" msgid "Null Driver" msgstr "Nulový ovládač" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Žiadne zariadenia MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Sieťová karta 1" @@ -2223,6 +2553,9 @@ msgstr "Farba bez prelínania" msgid "3Dfx Voodoo Graphics" msgstr "Grafický akcelerátor 3dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 zariadenia TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Radič disku:" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 6b3c39246..3e1f1c977 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Premor" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Orodja" msgid "&Settings..." msgstr "&Nastavitve..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Posodabljaj ikone statusne vrstice" @@ -357,6 +363,9 @@ msgstr "Sistem:" msgid "Configure" msgstr "Nastavi" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Vrsta procesorja:" @@ -417,15 +426,27 @@ msgstr "Grafika IBM 8514/A" msgid "XGA Graphics" msgstr "Grafika XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Miška:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Igralna palica:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Igralna palica 1..." @@ -456,6 +477,9 @@ msgstr "Izhodna naprava MIDI:" msgid "MIDI In Device:" msgstr "Vhodna naprava MIDI:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Samostojen MPU-401" @@ -615,6 +639,12 @@ msgstr "Pogoni CD-ROM:" msgid "MO drives:" msgstr "Magnetno-optični pogoni:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Omrežje" msgid "Ports (COM & LPT)" msgstr "Vrata (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Krmilniki shrambe" msgid "Hard disks" msgstr "Trdi diski" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Disketni in CD-ROM pogoni" @@ -756,6 +804,9 @@ msgstr "Druge odstranljive naprave" msgid "Other peripherals" msgstr "Druga periferija" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Kliknite za zajem miške" @@ -900,6 +951,15 @@ msgstr "Dobrodošli v 86Box!" msgid "Internal device" msgstr "Vgrajena naprava" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Izhod" @@ -996,6 +1056,9 @@ msgstr "Nadaljuj izvajanje" msgid "Pause execution" msgstr "Prekini izvajanje" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Pritisni Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Pritisni Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Ponovni zagon" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Zaustavitev ACPI" @@ -1347,6 +1671,9 @@ msgstr "Neznano vodilo" msgid "Null Driver" msgstr "Ničelni gonilnik" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Ni naprav MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Omrežna kartica 1" @@ -2223,6 +2553,9 @@ msgstr "Barvni brez prepletanja" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo Graphics" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 enoti TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Krmilnik trdega diska:" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index d727c659f..a311d9947 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Pausa" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Verktyg" msgid "&Settings..." msgstr "&Inställningar..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Uppdatera statusfältets ikoner" @@ -357,6 +363,9 @@ msgstr "Maskin:" msgid "Configure" msgstr "Konfigurera" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Processortyp:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A-grafik" msgid "XGA Graphics" msgstr "XGA-grafik" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Mus:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Styrspak:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Styrspak 1..." @@ -456,6 +477,9 @@ msgstr "Enhet för MIDI-utdata:" msgid "MIDI In Device:" msgstr "Enhet för MIDI-indata:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Fristående MPU-401" @@ -615,6 +639,12 @@ msgstr "CD-ROM-enheter:" msgid "MO drives:" msgstr "MO-enheter:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Nätverk" msgid "Ports (COM & LPT)" msgstr "Portar (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Styrenheter för lagring" msgid "Hard disks" msgstr "Hårddiskar" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Diskett- och CD-ROM-enheter" @@ -756,6 +804,9 @@ msgstr "Andra flyttbara enheter" msgid "Other peripherals" msgstr "Andra tillbehör" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Klicka för att fånga upp musen" @@ -900,6 +951,15 @@ msgstr "Välkommen till 86Box!" msgid "Internal device" msgstr "Intern enhet" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Avsluta" @@ -996,6 +1056,9 @@ msgstr "Fortsätt exekvering" msgid "Pause execution" msgstr "Pausa exekvering" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Tryck på Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Tryck på Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Hård omstart" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI-avstängning" @@ -1347,6 +1671,9 @@ msgstr "Okänd buss" msgid "Null Driver" msgstr "Tom drivrutin" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Inga MCA-enheter." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Nätverkskort #1" @@ -2223,6 +2553,9 @@ msgstr "Ej sammanflätad färg" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo-grafik" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMUs)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Styrenhet för hårddisk:" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index d616c3423..110637acb 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -27,6 +27,9 @@ msgstr "Ctrl+&Alt+Esc" msgid "&Pause" msgstr "&Duraklat" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Araçlar" msgid "&Settings..." msgstr "&Ayarlar..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "Durum &çubuğu simgelerini güncelle" @@ -357,6 +363,9 @@ msgstr "Makine:" msgid "Configure" msgstr "Ayarla" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "İşlemci türü:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A Grafikleri" msgid "XGA Graphics" msgstr "XGA Grafikleri" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Fare:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Oyun Kolu:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "1. Oyun Kolu..." @@ -456,6 +477,9 @@ msgstr "MIDI Çıkış Cihazı:" msgid "MIDI In Device:" msgstr "MIDI Giriş Cihazı:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Bağımsız MPU-401" @@ -615,6 +639,12 @@ msgstr "CD-ROM sürücüleri:" msgid "MO drives:" msgstr "MO sürücüleri:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Ağ" msgid "Ports (COM & LPT)" msgstr "Portlar (COM & LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Depolama denetleyicileri" msgid "Hard disks" msgstr "Hard diskler" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Disket & CD-ROM sürücüleri" @@ -756,6 +804,9 @@ msgstr "Diğer kaldırılabilir cihazlar" msgid "Other peripherals" msgstr "Diğer cihazlar" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Farenin yakalanması için tıklayın" @@ -900,6 +951,15 @@ msgstr "86Box'a hoşgeldiniz!" msgid "Internal device" msgstr "Dahili cihaz" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Çıkış yap" @@ -996,6 +1056,9 @@ msgstr "Çalıştırmayı sürdür" msgid "Pause execution" msgstr "Çalıştırmayı duraklat" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Ctrl+Alt+Del tuşlarına bas" @@ -1005,6 +1068,267 @@ msgstr "Ctrl+Alt+Esc tuşlarına bas" msgid "Hard reset" msgstr "Makineyi yeniden başlat" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Makineyi ACPI kullanarak kapat" @@ -1347,6 +1671,9 @@ msgstr "Bilinmeyen veri yolu" msgid "Null Driver" msgstr "Null sürücü" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "MCA cihazı yok." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "1. Ağ Kartı" @@ -2223,6 +2553,9 @@ msgstr "Çok Renkli (Geçiş Taramasız)" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo Grafikleri" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Hard Disk Denetleyicisi:" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index f2b705ec8..6caa65ca8 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "&Пауза" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Інструменти" msgid "&Settings..." msgstr "&Налаштування машини..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "&Обновлення значків рядка стану" @@ -357,6 +363,9 @@ msgstr "Системна плата:" msgid "Configure" msgstr "Налаштування" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Тип ЦП:" @@ -417,15 +426,27 @@ msgstr "Прискорювач IBM 8514/A" msgid "XGA Graphics" msgstr "Прискорювач XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Миша:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Джойстик:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Джойстик 1..." @@ -456,6 +477,9 @@ msgstr "MIDI Out при-ій:" msgid "MIDI In Device:" msgstr "MIDI In при-ій:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "Окремий MPU-401" @@ -615,6 +639,12 @@ msgstr "Дисководи CD-ROM:" msgid "MO drives:" msgstr "Магнітооптичні дисководи:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Мережа" msgid "Ports (COM & LPT)" msgstr "Порти (COM и LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Контролери дисків" msgid "Hard disks" msgstr "Жорсткі диски" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Гнучкі диски і CD-ROM" @@ -756,6 +804,9 @@ msgstr "Інші знімні при-ої" msgid "Other peripherals" msgstr "Інша периферія" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Клацніть мишею для захвату курсора" @@ -900,6 +951,15 @@ msgstr "Ласкаво просимо в 86Box!" msgid "Internal device" msgstr "Вбудований пристрій" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Вихід" @@ -996,6 +1056,9 @@ msgstr "Відновити виконання" msgid "Pause execution" msgstr "Призупинити виконання" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Натиснути Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Натиснути Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Холодне перезавантаження" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Сигнал завершення ACPI" @@ -1350,6 +1674,9 @@ msgstr "Невідома шина" msgid "Null Driver" msgstr "Нульовий драйвер" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1419,6 +1746,9 @@ msgstr "Ніяких пристроїв MCA." msgid "MiB" msgstr "МіБ" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Мережева карта 1" @@ -2226,6 +2556,9 @@ msgstr "Кольоровий неінтерлейсний" msgid "3Dfx Voodoo Graphics" msgstr "Прискорювач 3Dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU)" @@ -2493,6 +2826,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Контролер HD:" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index ab464d01f..b823f8530 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+&Esc" msgid "&Pause" msgstr "Tạm &dừng" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "&Công cụ" msgid "&Settings..." msgstr "&Cài đặt..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "Cậ&p nhật biểu tượng thanh trạng thái" @@ -357,6 +363,9 @@ msgstr "Mẫu máy:" msgid "Configure" msgstr "Tinh chỉnh" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "Loại CPU:" @@ -417,15 +426,27 @@ msgstr "Đồ họa IBM 8514/A" msgid "XGA Graphics" msgstr "Đồ họa XGA" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "Chuột:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "Cần điều khiển:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "Cần điều khiển 1..." @@ -456,6 +477,9 @@ msgstr "Thiết bị MIDI out:" msgid "MIDI In Device:" msgstr "Thiết bị MIDI in:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "MPU-401 độc lập" @@ -615,6 +639,12 @@ msgstr "Ổ đĩa CD-ROM:" msgid "MO drives:" msgstr "Ổ đĩa MO:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "Nối mạng" msgid "Ports (COM & LPT)" msgstr "Cổng (COM và LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "Vi điều khiển bộ nhớ ổ cứng" msgid "Hard disks" msgstr "Ổ cứng" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "Ổ (đĩa) mềm và CD-ROM" @@ -756,6 +804,9 @@ msgstr "Thiết bị tháo rời được khác" msgid "Other peripherals" msgstr "Thiết bị ngoại vi khác" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "Nhấp vào khung hình để 'nhốt' chuột vào" @@ -900,6 +951,15 @@ msgstr "Chào mừng đến 86Box!" msgid "Internal device" msgstr "Thiết bị nội bộ" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "Thoát" @@ -996,6 +1056,9 @@ msgstr "Tiếp tục chạy thực thi" msgid "Pause execution" msgstr "Tạm dừng thực thi" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "Nhấn Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "Nhấn Ctrl+Alt+Esc" msgid "Hard reset" msgstr "Buộc khởi động lại" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "Tắt máy theo ACPI" @@ -1347,6 +1671,9 @@ msgstr "Bus không xác định" msgid "Null Driver" msgstr "Trình điều khiển NULL" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "Không có thiết bị MCA." msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "Thẻ mạng 1" @@ -2223,6 +2553,9 @@ msgstr "Màu sắc không xen kẽ" msgid "3Dfx Voodoo Graphics" msgstr "Đồ họa 3Dfx Voodoo" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "Bộ điều khiển ổ cứng:" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index fd52a585c..6b79358ab 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "暂停(&P)" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "工具(&T)" msgid "&Settings..." msgstr "设置(&S)..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "更新状态栏图标(&U)" @@ -357,6 +363,9 @@ msgstr "机型:" msgid "Configure" msgstr "配置" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "CPU 类型:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A 图形" msgid "XGA Graphics" msgstr "XGA 图形" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "鼠标:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "操纵杆:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "操纵杆 1..." @@ -456,6 +477,9 @@ msgstr "MIDI 输出设备:" msgid "MIDI In Device:" msgstr "MIDI 输入设备:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "独立 MPU-401" @@ -615,6 +639,12 @@ msgstr "光盘驱动器:" msgid "MO drives:" msgstr "磁光盘驱动器:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "网络" msgid "Ports (COM & LPT)" msgstr "端口 (COM 和 LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "存储控制器" msgid "Hard disks" msgstr "硬盘" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "软盘/光盘驱动器" @@ -756,6 +804,9 @@ msgstr "其他可移动设备" msgid "Other peripherals" msgstr "其他外围设备" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "单击窗口捕捉鼠标" @@ -900,6 +951,15 @@ msgstr "欢迎使用 86Box!" msgid "Internal device" msgstr "内部设备" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "退出" @@ -996,6 +1056,9 @@ msgstr "恢复执行" msgid "Pause execution" msgstr "暂停执行" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "按下 Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "按下 Ctrl+Alt+Esc" msgid "Hard reset" msgstr "硬重置" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI 关机" @@ -1347,6 +1671,9 @@ msgstr "未知总线" msgid "Null Driver" msgstr "空驱动程序" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "无 MCA 设备。" msgid "MiB" msgstr "兆字节" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "网卡 1" @@ -2223,6 +2553,9 @@ msgstr "彩色非隔行扫描" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo 图形" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst(2 个 TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "硬盘控制器:" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index c0af7dc80..c55a7d34f 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -27,6 +27,9 @@ msgstr "Ctrl+Alt+Esc(&E)" msgid "&Pause" msgstr "暫停(&P)" +msgid "Pause" +msgstr "" + msgid "Re&sume" msgstr "" @@ -192,6 +195,9 @@ msgstr "工具(&T)" msgid "&Settings..." msgstr "設定(&S)..." +msgid "Settings..." +msgstr "" + msgid "&Update status bar icons" msgstr "更新狀態列圖示(&U)" @@ -357,6 +363,9 @@ msgstr "機型:" msgid "Configure" msgstr "設定" +msgid "CPU:" +msgstr "" + msgid "CPU type:" msgstr "CPU 類型:" @@ -417,15 +426,27 @@ msgstr "IBM 8514/A Graphics" msgid "XGA Graphics" msgstr "XGA Graphics" +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "" + msgid "Keyboard:" msgstr "" +msgid "Keyboard" +msgstr "" + msgid "Mouse:" msgstr "滑鼠:" +msgid "Mouse" +msgstr "" + msgid "Joystick:" msgstr "搖桿:" +msgid "Joystick" +msgstr "" + msgid "Joystick 1..." msgstr "搖桿 1..." @@ -456,6 +477,9 @@ msgstr "MIDI 輸出裝置:" msgid "MIDI In Device:" msgstr "MIDI 輸入裝置:" +msgid "MIDI Out:" +msgstr "" + msgid "Standalone MPU-401" msgstr "獨立 MPU-401" @@ -615,6 +639,12 @@ msgstr "光碟機:" msgid "MO drives:" msgstr "磁光碟機:" +msgid "MO:" +msgstr "" + +msgid "Removable disks:" +msgstr "" + msgid "Removable disk drives:" msgstr "" @@ -741,12 +771,30 @@ msgstr "網路" msgid "Ports (COM & LPT)" msgstr "連接埠 (COM 和 LPT)" +msgid "Ports" +msgstr "" + +msgid "Serial ports" +msgstr "" + +msgid "Parallel ports" +msgstr "" + msgid "Storage controllers" msgstr "存儲控制器" msgid "Hard disks" msgstr "硬碟" +msgid "Disks:" +msgstr "" + +msgid "Floppy:" +msgstr "" + +msgid "Controllers:" +msgstr "" + msgid "Floppy & CD-ROM drives" msgstr "軟碟/光碟機" @@ -756,6 +804,9 @@ msgstr "其他卸除式裝置" msgid "Other peripherals" msgstr "其他周邊裝置" +msgid "Other devices" +msgstr "" + msgid "Click to capture mouse" msgstr "點擊視窗捕捉滑鼠" @@ -900,6 +951,15 @@ msgstr "歡迎使用 86Box!" msgid "Internal device" msgstr "內部裝置" +msgid "&File" +msgstr "" + +msgid "&New machine..." +msgstr "" + +msgid "&Check for updates..." +msgstr "" + msgid "Exit" msgstr "退出" @@ -996,6 +1056,9 @@ msgstr "恢復執行" msgid "Pause execution" msgstr "暫停執行" +msgid "Ctrl+Alt+Del" +msgstr "" + msgid "Press Ctrl+Alt+Del" msgstr "按下 Ctrl+Alt+Del" @@ -1005,6 +1068,267 @@ msgstr "按下 Ctrl+Alt+Esc" msgid "Hard reset" msgstr "硬重設" +msgid "Force shutdown" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "Not running" +msgstr "" + +msgid "Running" +msgstr "" + +msgid "Paused" +msgstr "" + +msgid "Paused (Waiting)" +msgstr "" + +msgid "Powered Off" +msgstr "" + +msgid "waiting" +msgstr "" + +msgid "total" +msgstr "" + +msgid "System Directory:" +msgstr "" + +msgid "Choose directory" +msgstr "" + +msgid "Choose configuration file" +msgstr "" + +msgid "86Box configuration files (86box.cfg)" +msgstr "" + +msgid "Configuration read failed" +msgstr "" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "" + +msgid "Use regular expressions in search box" +msgstr "" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "" + +msgid "Add new system wizard" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "This will help you add a new system to 86Box." +msgstr "" + +msgid "New configuration" +msgstr "" + +msgid "Complete" +msgstr "" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "" + +msgid "Use existing configuration" +msgstr "" + +msgid "Type some notes here" +msgstr "" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "" + +msgid "Load configuration from file" +msgstr "" + +msgid "System Name" +msgstr "" + +msgid "System name" +msgstr "" + +msgid "System name:" +msgstr "" + +msgid "System name cannot contain certain characters" +msgstr "" + +msgid "System name already exists" +msgstr "" + +msgid "Please enter a directory for the system" +msgstr "" + +msgid "Directory does not exist" +msgstr "" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "" + +msgid "System location:" +msgstr "" + +msgid "System Location" +msgstr "" + +msgid "System name and location" +msgstr "" + +msgid "Enter the name of the system and choose the location" +msgstr "" + +msgid "Enter the name of the system" +msgstr "" + +msgid "Please enter a system name" +msgstr "" + +msgid "Display Name (optional)" +msgstr "" + +msgid "Display name:" +msgstr "" + +msgid "Set display name" +msgstr "" + +msgid "Enter the new display name (blank to reset)" +msgstr "" + +msgid "Change &display name..." +msgstr "" + +msgid "Context Menu" +msgstr "" + +msgid "&Open folder..." +msgstr "" + +msgid "Open &printer tray..." +msgstr "" + +msgid "Set &icon..." +msgstr "" + +msgid "Select an icon" +msgstr "" + +msgid "C&lone..." +msgstr "" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "" + +msgid "Directory %1 already exists" +msgstr "" + +msgid "You cannot use the following characters in the name: %1" +msgstr "" + +msgid "Clone" +msgstr "" + +msgid "Failed to create directory for cloned VM" +msgstr "" + +msgid "Failed to clone VM." +msgstr "" + +msgid "Directory in use" +msgstr "" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "" + +msgid "Create directory failed" +msgstr "" + +msgid "Unable to create the directory for the new system" +msgstr "" + +msgid "Configuration write failed" +msgstr "" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "" + +msgid "Error adding system" +msgstr "" + +msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." +msgstr "" + +msgid "Remove directory failed" +msgstr "" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "" + +msgid "Build" +msgstr "" + +msgid "Version" +msgstr "" + +msgid "An update to 86Box is available!" +msgstr "" + +msgid "Warning" +msgstr "" + +msgid "&Kill" +msgstr "" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "" + +msgid "&Delete" +msgstr "" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "" + +msgid "Show &config file" +msgstr "" + +msgid "No screenshot" +msgstr "" + +msgid "Search" +msgstr "" + +msgid "Searching for VMs..." +msgstr "" + +msgid "Found %1" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Storage" +msgstr "" + +msgid "Disk %1: " +msgstr "" + +msgid "No disks" +msgstr "" + +msgid "Audio" +msgstr "" + +msgid "Audio:" +msgstr "" + msgid "ACPI shutdown" msgstr "ACPI 關機" @@ -1347,6 +1671,9 @@ msgstr "未知匯流排" msgid "Null Driver" msgstr "空驅動程式" +msgid "NIC:" +msgstr "" + msgid "NIC %1 (%2) %3" msgstr "網路卡 %1 (%2) %3" @@ -1416,6 +1743,9 @@ msgstr "沒有 MCA 裝置。" msgid "MiB" msgstr "MiB" +msgid "GiB" +msgstr "" + msgid "Network Card #1" msgstr "網路卡 1" @@ -2223,6 +2553,9 @@ msgstr "彩色非隔行掃描" msgid "3Dfx Voodoo Graphics" msgstr "3Dfx Voodoo 圖形" +msgid "3Dfx Voodoo 2" +msgstr "" + msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 TMU)" @@ -2490,6 +2823,84 @@ msgstr "" msgid "Hostname:" msgstr "" +msgid "ISA RTC" +msgstr "" + +msgid "ISA RAM" +msgstr "" + +msgid "ISA ROM" +msgstr "" + +msgid "&Wipe NVRAM" +msgstr "" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "" + +msgid "Success" +msgstr "" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "" + +msgid "%1 VM Manager" +msgstr "" + +msgid "%n disk(s)" +msgstr "" + +msgid "Unknown Status" +msgstr "" + +msgid "No Machines Found!" +msgstr "" + +msgid "Check for updates on startup" +msgstr "" + +msgid "Unable to determine release information" +msgstr "" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "" + +msgid "Update check complete" +msgstr "" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "" + +msgid "version" +msgstr "" + +msgid "build" +msgstr "" + +msgid "You are currently running %1 %2. " +msgstr "" + +msgid "%1 %2 is now available. %3Would you like to visit the download page?" +msgstr "" + +msgid "Visit download page" +msgstr "" + +msgid "Update check" +msgstr "" + +msgid "Checking for updates.." +msgstr "" + +msgid "86Box Update" +msgstr "" + +msgid "Release notes:" +msgstr "" + #~ msgid "HD Controller:" #~ msgstr "硬碟控制器:" From ec72fa6c64ad548bcbd623dfec20ee7a055afc6f Mon Sep 17 00:00:00 2001 From: nelsonhef Date: Mon, 11 Aug 2025 10:18:00 -0300 Subject: [PATCH 13/29] Added Portuguese-Brazilian translations for VM Manager and Update checker. --- src/qt/languages/pt-BR.po | 274 +++++++++++++++++++------------------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index 876a927b8..ed2c13f72 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -28,7 +28,7 @@ msgid "&Pause" msgstr "&Pausar" msgid "Pause" -msgstr "" +msgstr "Pausa" msgid "Re&sume" msgstr "&Continuar" @@ -196,7 +196,7 @@ msgid "&Settings..." msgstr "&Configurações..." msgid "Settings..." -msgstr "" +msgstr "Configurações..." msgid "&Update status bar icons" msgstr "&Atualizar ícones da barra de status" @@ -364,7 +364,7 @@ msgid "Configure" msgstr "Configurar" msgid "CPU:" -msgstr "" +msgstr "Processador:" msgid "CPU type:" msgstr "Tipo de CPU:" @@ -427,25 +427,25 @@ msgid "XGA Graphics" msgstr "Gráficos XGA" msgid "IBM PS/55 Display Adapter Graphics" -msgstr "" +msgstr "IBM PS/55 Display Adapter Graphics" msgid "Keyboard:" msgstr "Teclado:" msgid "Keyboard" -msgstr "" +msgstr "Teclado" msgid "Mouse:" msgstr "Mouse:" msgid "Mouse" -msgstr "" +msgstr "Mouse" msgid "Joystick:" msgstr "Joystick:" msgid "Joystick" -msgstr "" +msgstr "Joystick" msgid "Joystick 1..." msgstr "Joystick 1..." @@ -478,7 +478,7 @@ msgid "MIDI In Device:" msgstr "Disp. de entrada MIDI:" msgid "MIDI Out:" -msgstr "" +msgstr "Saída MIDI:" msgid "Standalone MPU-401" msgstr "MPU-401 independente" @@ -640,10 +640,10 @@ msgid "MO drives:" msgstr "Unidades magneto-ópticas:" msgid "MO:" -msgstr "" +msgstr "Magneto-ópticas:" msgid "Removable disks:" -msgstr "" +msgstr "Discos removíveis:" msgid "Removable disk drives:" msgstr "Unidades de disco removível:" @@ -772,13 +772,13 @@ msgid "Ports (COM & LPT)" msgstr "Portas (COM & LPT)" msgid "Ports" -msgstr "" +msgstr "Portas" msgid "Serial ports" -msgstr "" +msgstr "Portas seriais" msgid "Parallel ports" -msgstr "" +msgstr "Portas Paralelas" msgid "Storage controllers" msgstr "Controladores de armaz." @@ -787,13 +787,13 @@ msgid "Hard disks" msgstr "Discos rígidos" msgid "Disks:" -msgstr "" +msgstr "Discos:" msgid "Floppy:" -msgstr "" +msgstr "Disquete:" msgid "Controllers:" -msgstr "" +msgstr "Controladores:" msgid "Floppy & CD-ROM drives" msgstr "Disquete & CD-ROM" @@ -805,7 +805,7 @@ msgid "Other peripherals" msgstr "Outros periféricos" msgid "Other devices" -msgstr "" +msgstr "Outros dispositivos" msgid "Click to capture mouse" msgstr "Clique para capturar o mouse" @@ -952,13 +952,13 @@ msgid "Internal device" msgstr "Dispositivo interno" msgid "&File" -msgstr "" +msgstr "&Arquivo" msgid "&New machine..." -msgstr "" +msgstr "&Nova máquina..." msgid "&Check for updates..." -msgstr "" +msgstr "&Verificar por atualizações..." msgid "Exit" msgstr "Sair" @@ -1057,7 +1057,7 @@ msgid "Pause execution" msgstr "Pausar a execução" msgid "Ctrl+Alt+Del" -msgstr "" +msgstr "Ctrl+Alt+Del" msgid "Press Ctrl+Alt+Del" msgstr "Pressionar Ctrl+Alt+Del" @@ -1069,265 +1069,265 @@ msgid "Hard reset" msgstr "Reinicialização completa" msgid "Force shutdown" -msgstr "" +msgstr "Forçar desligamento" msgid "Start" -msgstr "" +msgstr "Iniciar" msgid "Not running" -msgstr "" +msgstr "Parado" msgid "Running" -msgstr "" +msgstr "Rodando" msgid "Paused" -msgstr "" +msgstr "Pausado" msgid "Paused (Waiting)" -msgstr "" +msgstr "Pausado (Esperando)" msgid "Powered Off" -msgstr "" +msgstr "Desligado" msgid "waiting" -msgstr "" +msgstr "esperando" msgid "total" -msgstr "" +msgstr "total" msgid "System Directory:" -msgstr "" +msgstr "Diretório do Sistema:" msgid "Choose directory" -msgstr "" +msgstr "Escolha o diretório" msgid "Choose configuration file" -msgstr "" +msgstr "Escolha o arquivo de configuração" msgid "86Box configuration files (86box.cfg)" -msgstr "" +msgstr "Arquivos de configuração 86Box (86Box.cfg)" msgid "Configuration read failed" -msgstr "" +msgstr "Falha ao ler a configuração" msgid "Unable to open the selected configuration file for reading: %1" -msgstr "" +msgstr "Impossível abrir o arquivo de configuração selecionado para leitura: %1" msgid "Use regular expressions in search box" -msgstr "" +msgstr "Usar expressões regulares na caixa de pesquisa" msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" -msgstr "" +msgstr "%1 máquina(s) estão ativas atualmente. Tem certeza que deseja encerrar o gerenciador de VM mesmo?" msgid "Add new system wizard" -msgstr "" +msgstr "Assistente para novo sistema" msgid "Introduction" -msgstr "" +msgstr "Introdução" msgid "This will help you add a new system to 86Box." -msgstr "" +msgstr "Isso irá ajudá-lo a adicionar um novo sistema ao 86Box." msgid "New configuration" -msgstr "" +msgstr "Nova configuração" msgid "Complete" -msgstr "" +msgstr "Completado" msgid "The wizard will now launch the configuration for the new system." -msgstr "" +msgstr "O assistente vai iniciar a configuração para o novo sistema." msgid "Use existing configuration" -msgstr "" +msgstr "Usar configuração existente" msgid "Type some notes here" -msgstr "" +msgstr "Digite algumas notas aqui" msgid "Paste the contents of the existing configuration file into the box below." -msgstr "" +msgstr "Cole o conteúdo de uma configuração existente na caixa abaixo." msgid "Load configuration from file" -msgstr "" +msgstr "Carregar configuração do arquivo" msgid "System Name" -msgstr "" +msgstr "Nome do Sistema" msgid "System name" -msgstr "" +msgstr "Nome do sistema" msgid "System name:" -msgstr "" +msgstr "Nome do sistema:" msgid "System name cannot contain certain characters" -msgstr "" +msgstr "O nome do sistema não pode conter certos caracteres" msgid "System name already exists" -msgstr "" +msgstr "O nome do sistema já existe" msgid "Please enter a directory for the system" -msgstr "" +msgstr "Por favor digite um diretório para o sistema" msgid "Directory does not exist" -msgstr "" +msgstr "O diretório não existe" msgid "A new directory for the system will be created in the selected directory above" -msgstr "" +msgstr "Um novo diretório para o sistema será criado no diretório acima" msgid "System location:" -msgstr "" +msgstr "Local do sistema:" msgid "System Location" -msgstr "" +msgstr "Local do Sistema" msgid "System name and location" -msgstr "" +msgstr "Nome do sistema e local" msgid "Enter the name of the system and choose the location" -msgstr "" +msgstr "Digite o nome do sistema e escolha o local" msgid "Enter the name of the system" -msgstr "" +msgstr "Digite o nome do sistema" msgid "Please enter a system name" -msgstr "" +msgstr "Por favor digite um nome de sistema" msgid "Display Name (optional)" -msgstr "" +msgstr "Nome de exibição (opcional)" msgid "Display name:" -msgstr "" +msgstr "Nome de exibição:" msgid "Set display name" -msgstr "" +msgstr "Defina o nome de exibição" msgid "Enter the new display name (blank to reset)" -msgstr "" +msgstr "Digite o novo nome de exibição (em branco para restaurar)" msgid "Change &display name..." -msgstr "" +msgstr "Mudar o &nome de exibição..." msgid "Context Menu" -msgstr "" +msgstr "Menu de contexto" msgid "&Open folder..." -msgstr "" +msgstr "Abrir &pasta..." msgid "Open &printer tray..." -msgstr "" +msgstr "Abrir fila da &impressora..." msgid "Set &icon..." -msgstr "" +msgstr "&Definir ícone..." msgid "Select an icon" -msgstr "" +msgstr "Selecione um ícone" msgid "C&lone..." -msgstr "" +msgstr "&Clonar..." msgid "Virtual machine \"%1\" (%2) will be cloned into:" -msgstr "" +msgstr "A máquina virtual \"%1\" (%2) será clonada em:" msgid "Directory %1 already exists" -msgstr "" +msgstr "O diretório %1 já existe" msgid "You cannot use the following characters in the name: %1" -msgstr "" +msgstr "Você não pode usar os seguintes caracteres no nome: %1" msgid "Clone" -msgstr "" +msgstr "Clonar" msgid "Failed to create directory for cloned VM" -msgstr "" +msgstr "Falha ao criar o diretório para a VM clonada" msgid "Failed to clone VM." -msgstr "" +msgstr "Falha ao clonar VM." msgid "Directory in use" -msgstr "" +msgstr "Diretório em uso" msgid "The selected directory is already in use. Please select a different directory." -msgstr "" +msgstr "O diretório selecionado já está em uso. Por favor escolha um diretório diferente." msgid "Create directory failed" -msgstr "" +msgstr "Falha ao criar diretório" msgid "Unable to create the directory for the new system" -msgstr "" +msgstr "Impossível criar o diretório para o novo sistema" msgid "Configuration write failed" -msgstr "" +msgstr "Falha ao gravar a configuração" msgid "Unable to open the configuration file at %1 for writing" -msgstr "" +msgstr "Impossível abrir o arquivo de configuração %1 para escrita" msgid "Error adding system" -msgstr "" +msgstr "Erro adicionando sistema" msgid "Abnormal program termination while creating new system: exit code %1, exit status %2.\n\nThe system will not be added." -msgstr "" +msgstr "Término anormal do programa ao criar novo sistema: código de saída %1, estado de saída %2.\n\nO sistema não será adicionado." msgid "Remove directory failed" -msgstr "" +msgstr "Falha ao remover diretório" msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." -msgstr "" +msgstr "Alguns arquivos no diretório da máquina não puderam ser apagados. Por favor apágue-os manualmente." msgid "Build" -msgstr "" +msgstr "Build" msgid "Version" -msgstr "" +msgstr "Versão" msgid "An update to 86Box is available!" -msgstr "" +msgstr "Uma atualização do 86Box está disponível!" msgid "Warning" -msgstr "" +msgstr "Aviso" msgid "&Kill" -msgstr "" +msgstr "&Matar" msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" -msgstr "" +msgstr "Matar uma máquina virtual pode causar perda de dados. Só faça isso se o processo do 86Box travar.\n\nTem certeza que deseja matar a máquina virtual \"%1\"?" msgid "&Delete" -msgstr "" +msgstr "&Apagar" msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" -msgstr "" +msgstr "Deseja realmente apagar a máquina virtual \"%1\" e todos os seus arquivos? Essa ação não pode ser desfeita!" msgid "Show &config file" -msgstr "" +msgstr "Mostrar arquivo de &configuração" msgid "No screenshot" -msgstr "" +msgstr "Sem captura" msgid "Search" -msgstr "" +msgstr "Procurar" msgid "Searching for VMs..." -msgstr "" +msgstr "Procurando por VMs..." msgid "Found %1" -msgstr "" +msgstr "Encontrado %1" msgid "System" -msgstr "" +msgstr "Sistema" msgid "Storage" -msgstr "" +msgstr "Armazenamento" msgid "Disk %1: " -msgstr "" +msgstr "Disco %1: " msgid "No disks" -msgstr "" +msgstr "Sem discos" msgid "Audio" -msgstr "" +msgstr "Som" msgid "Audio:" -msgstr "" +msgstr "Som:" msgid "ACPI shutdown" msgstr "Desligamento por ACPI" @@ -1672,7 +1672,7 @@ msgid "Null Driver" msgstr "Driver nulo" msgid "NIC:" -msgstr "" +msgstr "Placa de Rede:" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1744,7 +1744,7 @@ msgid "MiB" msgstr "MiB" msgid "GiB" -msgstr "" +msgstr "GiB" msgid "Network Card #1" msgstr "Placa de rede 1" @@ -2554,7 +2554,7 @@ msgid "3Dfx Voodoo Graphics" msgstr "Gráficos 3Dfx Voodoo" msgid "3Dfx Voodoo 2" -msgstr "" +msgstr "3Dfx Voodoo 2" msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 unidades TMU)" @@ -2824,79 +2824,79 @@ msgid "Hostname:" msgstr "Nome do Host:" msgid "ISA RTC" -msgstr "" +msgstr "RTC ISA" msgid "ISA RAM" -msgstr "" +msgstr "RAM ISA" msgid "ISA ROM" -msgstr "" +msgstr "ROM ISA" msgid "&Wipe NVRAM" -msgstr "" +msgstr "&Limpar NVRAM" msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" -msgstr "" +msgstr "Isso irá apagar todos os arquivos NVRAM (e relacionados) da máquina virtual localizada no subdiretório \"nvr\". Você terá que reconfigurar as configurações do BIOS (e possívelmente outros dispositivos dentro da VM) novamente se aplicável.\n\nTem certeza que quer apagar todo o conteúdo NVRAM da máquina virtual \"%1\"?" msgid "Success" -msgstr "" +msgstr "Sucesso" msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" -msgstr "" +msgstr "Conteúdo NVRAM da máquina virtual \"%1\" apagado com sucesso" msgid "An error occured trying to wipe the NVRAM contents of the virtual machine \"%1\"" -msgstr "" +msgstr "Um erro ocorreu ao tentar apagar o conteúdo NVRAM da máquina virtual \"%1\"" msgid "%1 VM Manager" -msgstr "" +msgstr "%1 Gerenciador de VM" msgid "%n disk(s)" -msgstr "" +msgstr "%1 disco(s)" msgid "Unknown Status" -msgstr "" +msgstr "Estado desconhecido" msgid "No Machines Found!" -msgstr "" +msgstr "Nenhuma Máquina Encontrada!" msgid "Check for updates on startup" -msgstr "" +msgstr "Verificar atualizações ao iniciar" msgid "Unable to determine release information" -msgstr "" +msgstr "Impossível determinar informações do lançamento" msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." -msgstr "" +msgstr "Ocorreu um erro ao verificar por atualizações:\n\n%1\n\nPor favor tente mais tarde." msgid "Update check complete" -msgstr "" +msgstr "Verificação de atualização completada" msgid "You are running the latest %1 version of 86Box: %2" -msgstr "" +msgstr "Você está executando a última %1 versão do 86Box: %2" msgid "version" -msgstr "" +msgstr "versão" msgid "build" -msgstr "" +msgstr "build" msgid "You are currently running %1 %2. " -msgstr "" +msgstr "Você está executando atualmente %1 %2. " msgid "%1 %2 is now available. %3Would you like to visit the download page?" -msgstr "" +msgstr "%1 %2 está disponível. %3Gostaria de visitar a página de download?" msgid "Visit download page" -msgstr "" +msgstr "Visitar página de download" msgid "Update check" -msgstr "" +msgstr "Verificação de atualização" msgid "Checking for updates.." -msgstr "" +msgstr "Verificando por atualizações.." msgid "86Box Update" -msgstr "" +msgstr "Atualização do 86Box" msgid "Release notes:" -msgstr "" +msgstr "Notas de lançamento:" From 8a83c94e41c6e79771c8adbb9285e8e258bed66f Mon Sep 17 00:00:00 2001 From: Nelson Kerber Hennemann Filho <87081197+nelsonhef@users.noreply.github.com> Date: Mon, 11 Aug 2025 10:27:15 -0300 Subject: [PATCH 14/29] Update qt_updatedetails.cpp Syntax fix --- src/qt/qt_updatedetails.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_updatedetails.cpp b/src/qt/qt_updatedetails.cpp index 32be0aa1e..393d82617 100644 --- a/src/qt/qt_updatedetails.cpp +++ b/src/qt/qt_updatedetails.cpp @@ -26,7 +26,7 @@ UpdateDetails:: UpdateDetails(const UpdateCheck::UpdateResult &updateResult, QWidget *parent) : QDialog(parent), ui(new Ui::UpdateDetails) { ui->setupUi(this); - ui->updateTitle->setText(tr(("An update to 86Box is available!")); + ui->updateTitle->setText(tr("An update to 86Box is available!")); QString currentVersionText; QString releaseType = updateResult.channel == UpdateCheck::UpdateChannel::Stable ? tr("version") : tr("build"); if(!updateResult.currentVersion.isEmpty()) { From d75700d5178e454973f4f4a41daeca7a03acbfd4 Mon Sep 17 00:00:00 2001 From: Nelson Kerber Hennemann Filho <87081197+nelsonhef@users.noreply.github.com> Date: Mon, 11 Aug 2025 11:06:42 -0300 Subject: [PATCH 15/29] Update 86box.pot Fix missing tags --- src/qt/languages/86box.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/languages/86box.pot b/src/qt/languages/86box.pot index 4dc411f09..54a6bb204 100644 --- a/src/qt/languages/86box.pot +++ b/src/qt/languages/86box.pot @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" From 6b8680c5a0aeffc7dcd6a56aa485ab8361232c8c Mon Sep 17 00:00:00 2001 From: nelsonhef Date: Mon, 11 Aug 2025 11:18:58 -0300 Subject: [PATCH 16/29] Merge updated POT to PO files --- src/qt/languages/ca-ES.po | 2 +- src/qt/languages/cs-CZ.po | 2 +- src/qt/languages/de-DE.po | 2 +- src/qt/languages/es-ES.po | 2 +- src/qt/languages/fi-FI.po | 2 +- src/qt/languages/fr-FR.po | 2 +- src/qt/languages/hr-HR.po | 2 +- src/qt/languages/hu-HU.po | 2 +- src/qt/languages/it-IT.po | 2 +- src/qt/languages/ja-JP.po | 2 +- src/qt/languages/ko-KR.po | 2 +- src/qt/languages/nl-NL.po | 2 +- src/qt/languages/pl-PL.po | 2 +- src/qt/languages/pt-BR.po | 4 ++-- src/qt/languages/pt-PT.po | 2 +- src/qt/languages/ru-RU.po | 2 +- src/qt/languages/sk-SK.po | 2 +- src/qt/languages/sl-SI.po | 2 +- src/qt/languages/sv-SE.po | 2 +- src/qt/languages/tr-TR.po | 2 +- src/qt/languages/uk-UA.po | 2 +- src/qt/languages/vi-VN.po | 2 +- src/qt/languages/zh-CN.po | 2 +- src/qt/languages/zh-TW.po | 2 +- 24 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/qt/languages/ca-ES.po b/src/qt/languages/ca-ES.po index 8f43fb946..08f17e20b 100644 --- a/src/qt/languages/ca-ES.po +++ b/src/qt/languages/ca-ES.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index 48ae6df56..b8184562f 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 4b37d9666..e88d5c8af 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index ca65b3695..b99d96819 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index 01ccac09e..ab630dcc0 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 04a9c1c10..bf8f59237 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index b783a9ab5..694c61ad2 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index 7e2260029..84889a336 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index d5cbf918e..2ce8571a8 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 259e134be..47731d6c9 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 457f89d0e..29b19f683 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/nl-NL.po b/src/qt/languages/nl-NL.po index 378427d85..b24895bf2 100644 --- a/src/qt/languages/nl-NL.po +++ b/src/qt/languages/nl-NL.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index cf80e50dd..9e6cac667 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index ed2c13f72..94fde8f9e 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -1278,8 +1278,8 @@ msgstr "Build" msgid "Version" msgstr "Versão" -msgid "An update to 86Box is available!" -msgstr "Uma atualização do 86Box está disponível!" +msgid "An update to 86Box is available!" +msgstr "Uma atualização do 86Box está disponível!" msgid "Warning" msgstr "Aviso" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 5bf32c78f..df927a72e 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 91eedb053..305b99068 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/sk-SK.po b/src/qt/languages/sk-SK.po index 367c5f06a..5aa01a455 100644 --- a/src/qt/languages/sk-SK.po +++ b/src/qt/languages/sk-SK.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 3e1f1c977..593198ae8 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/sv-SE.po b/src/qt/languages/sv-SE.po index a311d9947..c423558d6 100644 --- a/src/qt/languages/sv-SE.po +++ b/src/qt/languages/sv-SE.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 110637acb..986689463 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index 6caa65ca8..799fa07b7 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/vi-VN.po b/src/qt/languages/vi-VN.po index b823f8530..c603fa8fe 100644 --- a/src/qt/languages/vi-VN.po +++ b/src/qt/languages/vi-VN.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 6b79358ab..74001fe1e 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index c55a7d34f..a57f8f30b 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -1278,7 +1278,7 @@ msgstr "" msgid "Version" msgstr "" -msgid "An update to 86Box is available!" +msgid "An update to 86Box is available!" msgstr "" msgid "Warning" From dbd748636efdead1c4afc816d1c6bbfa307395fe Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 11 Aug 2025 16:36:30 +0200 Subject: [PATCH 17/29] Hook up Bidirectional LPT, EPP, and ECP to all Super I/O chips (missing is vendor-specific Configuration Register B behavior but that's next on my list), fixed Super I/O chip mistakes for a number of machines, split 286/386SX/M6117D machines into three separate files and reordered them as well. --- src/chipset/wd76c10.c | 106 +- src/device/lpt.c | 136 +- src/device/serial.c | 6 + src/include/86box/lpt.h | 9 +- src/include/86box/machine.h | 192 ++- src/include/86box/serial.h | 2 +- src/include/86box/sio.h | 190 ++- src/machine/CMakeLists.txt | 4 +- src/machine/m_at_286.c | 609 ++++++++ src/machine/m_at_386dx_486.c | 148 +- .../{m_at_286_386sx.c => m_at_386sx.c} | 1037 +++---------- src/machine/m_at_m6117.c | 88 ++ src/machine/m_at_misc.c | 3 +- src/machine/m_at_slot1.c | 49 +- src/machine/m_at_slot2.c | 6 +- src/machine/m_at_socket370.c | 34 +- src/machine/m_at_socket4.c | 22 +- src/machine/m_at_socket5.c | 30 +- src/machine/m_at_socket7.c | 109 +- src/machine/m_at_socket7_3v.c | 129 +- src/machine/m_at_socket8.c | 14 +- src/machine/m_at_sockets7.c | 8 +- src/machine/m_ps2_isa.c | 1 + src/machine/m_ps2_mca.c | 2 + src/machine/machine_table.c | 259 ++-- src/sio/CMakeLists.txt | 19 +- src/sio/sio_82091aa.c | 90 +- src/sio/sio_fdc37c669.c | 106 +- src/sio/sio_fdc37c67x.c | 1 - src/sio/sio_fdc37c6xx.c | 224 +-- src/sio/sio_fdc37c93x.c | 15 +- src/sio/sio_fdc37m60x.c | 1 - src/sio/sio_gm82c803ab.c | 372 +++++ src/sio/sio_gm82c803c.c | 382 +++++ src/sio/sio_it86x1f.c | 19 + src/sio/sio_pc87306.c | 10 +- src/sio/sio_pc87307.c | 52 +- src/sio/sio_pc87309.c | 52 +- src/sio/sio_pc87310.c | 23 +- src/sio/sio_pc87311.c | 319 ---- src/sio/{sio_pc87332.c => sio_pc873xx.c} | 230 ++- src/sio/sio_prime3b.c | 312 ---- src/sio/sio_prime3c.c | 358 ----- src/sio/sio_um8669f.c | 43 +- src/sio/{sio_um8663f.c => sio_um866x.c} | 249 +-- src/sio/sio_vt82c686.c | 21 +- src/sio/sio_w83787f.c | 539 ------- src/sio/sio_w837x7.c | 475 ++++++ src/sio/{sio_w83877f.c => sio_w83877.c} | 400 ++--- src/sio/sio_w83977.c | 1340 +++++++++++++++++ src/sio/sio_w83977f.c | 680 --------- 51 files changed, 5062 insertions(+), 4463 deletions(-) create mode 100644 src/machine/m_at_286.c rename src/machine/{m_at_286_386sx.c => m_at_386sx.c} (54%) create mode 100644 src/machine/m_at_m6117.c create mode 100644 src/sio/sio_gm82c803ab.c create mode 100644 src/sio/sio_gm82c803c.c delete mode 100644 src/sio/sio_pc87311.c rename src/sio/{sio_pc87332.c => sio_pc873xx.c} (63%) delete mode 100644 src/sio/sio_prime3b.c delete mode 100644 src/sio/sio_prime3c.c rename src/sio/{sio_um8663f.c => sio_um866x.c} (51%) delete mode 100644 src/sio/sio_w83787f.c create mode 100644 src/sio/sio_w837x7.c rename src/sio/{sio_w83877f.c => sio_w83877.c} (50%) create mode 100644 src/sio/sio_w83977.c delete mode 100644 src/sio/sio_w83977f.c diff --git a/src/chipset/wd76c10.c b/src/chipset/wd76c10.c index d11330c85..ddde7626e 100644 --- a/src/chipset/wd76c10.c +++ b/src/chipset/wd76c10.c @@ -81,7 +81,9 @@ typedef struct { typedef struct { uint8_t ep, p92; + uint8_t addr_sel; + uint8_t addr_regs[8]; uint8_t vbios_states[4]; uint8_t bios_states[8]; uint8_t high_bios_states[8]; @@ -100,6 +102,7 @@ typedef struct }; uint16_t ems_page_regs[40]; + uint16_t lpt_base; int locked; @@ -873,6 +876,92 @@ wd76c10_low_pages_recalc(wd76c10_t *dev) } } +static void +wd73c30_reset(wd76c10_t *dev) +{ + dev->addr_sel = 0x00; + + dev->addr_regs[0x00] = 0x00; + dev->addr_regs[0x01] = 0x00; + dev->addr_regs[0x05] = 0x00; + + serial_set_type(dev->uart[0], SERIAL_16450); + serial_set_type(dev->uart[1], SERIAL_16450); + + serial_set_clock_src(dev->uart[1], 1843200.0); + serial_set_clock_src(dev->uart[0], 1843200.0); + + lpt_set_ext(dev->lpt, 0); +} + +static void +wd76c30_write(uint16_t port, uint8_t val, void *priv) +{ + wd76c10_t *dev = (wd76c10_t *) priv; + + switch (port & 0x0007) { + case 0x0003: + dev->addr_sel = val; + switch (val & 0x60) { + case 0x00: + serial_set_clock_src(dev->uart[1], 1843200.0); + break; + case 0x20: + serial_set_clock_src(dev->uart[1], 3072000.0); + break; + case 0x40: + serial_set_clock_src(dev->uart[1], 6000000.0); /* What is MSTRX1? */ + break; + case 0x60: + serial_set_clock_src(dev->uart[1], 8000000.0); + break; + } + switch (val & 0x18) { + case 0x00: + serial_set_clock_src(dev->uart[0], 1843200.0); + break; + case 0x08: + serial_set_clock_src(dev->uart[0], 3072000.0); + break; + case 0x10: + serial_set_clock_src(dev->uart[0], 6000000.0); /* What is MSTRX1? */ + break; + case 0x18: + serial_set_clock_src(dev->uart[0], 8000000.0); + break; + } + break; + case 0x0007: + dev->addr_regs[dev->addr_sel & 0x07] = val; + switch (dev->addr_sel & 0x07) { + case 0x05: + lpt_set_ext(dev->lpt, !!(val & 0x02)); + serial_set_type(dev->uart[0], (val & 0x01) ? SERIAL_16550 : SERIAL_16450); + serial_set_type(dev->uart[1], (val & 0x01) ? SERIAL_16550 : SERIAL_16450); + break; + } + break; + } +} + +static uint8_t +wd76c30_read(uint16_t port, void *priv) +{ + wd76c10_t *dev = (wd76c10_t *) priv; + uint8_t ret = 0xff; + + switch (port & 0x0007) { + case 0x0003: + ret = dev->addr_sel; + break; + case 0x0007: + ret = dev->addr_regs[dev->addr_sel & 0x07]; + break; + } + + return ret; +} + static void wd76c10_ser_par_cs_recalc(wd76c10_t *dev) { @@ -912,20 +1001,23 @@ wd76c10_ser_par_cs_recalc(wd76c10_t *dev) /* LPT */ lpt_port_remove(dev->lpt); + if (dev->lpt_base != 0x0000) + io_removehandler(dev->lpt_base, 0x0008, wd76c30_read, NULL, NULL, wd76c30_write, NULL, NULL, dev); + dev->lpt_base = 0x0000; switch ((dev->ser_par_cs >> 9) & 0x03) { case 1: - lpt_port_setup(dev->lpt, LPT_MDA_ADDR); - lpt_port_irq(dev->lpt, LPT1_IRQ); + dev->lpt_base = LPT_MDA_ADDR; break; case 2: - lpt_port_setup(dev->lpt, LPT1_ADDR); - lpt_port_irq(dev->lpt, LPT1_IRQ); + dev->lpt_base = LPT1_ADDR; break; case 3: - lpt_port_setup(dev->lpt, LPT2_ADDR); - lpt_port_irq(dev->lpt, LPT1_IRQ); + dev->lpt_base = LPT2_ADDR; break; } + io_sethandler(dev->lpt_base, 0x0008, wd76c30_read, NULL, NULL, wd76c30_write, NULL, NULL, dev); + lpt_port_setup(dev->lpt, dev->lpt_base); + lpt_port_irq(dev->lpt, LPT1_IRQ); } static void @@ -1239,6 +1331,8 @@ wd76c10_reset(void *priv) nvr_lock_set(0x38, 0x08, 0x00, dev->nvr); + wd73c30_reset(dev); + wd76c10_banks_recalc(dev); wd76c10_split_recalc(dev); wd76c10_dis_mem_recalc(dev); diff --git a/src/device/lpt.c b/src/device/lpt.c index c54345856..209ea33f8 100644 --- a/src/device/lpt.c +++ b/src/device/lpt.c @@ -23,6 +23,7 @@ #include <86box/device.h> #include <86box/machine.h> #include <86box/network.h> +#include <86box/plat_fallthrough.h> static int next_inst = 0; int lpt_3bc_used = 0; @@ -378,7 +379,35 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv) } break; - case 0x0400: case 0x0404: + case 0x0404: + if (dev->cfg_regs_enabled) { + switch (dev->eir) { + case 0x00: + dev->ext_regs[0x00] = val & 0x31; + break; + case 0x02: + dev->ext_regs[0x02] = val & 0xd0; + if (dev->ext_regs[0x02] & 0x80) + dev->ecr = dev->ret_ecr; + else switch (dev->ret_ecr & 0xe0) { + case 0x00: case 0x20: + case 0x80: + dev->ecr = (dev->ret_ecr & 0x1f) | 0x60; + break; + } + break; + case 0x04: + dev->ext_regs[0x00] = val & 0x37; + break; + case 0x05: + dev->ext_regs[0x00] = val; + dev->cnfga_readout = (val & 0x80) ? 0x1c : 0x14; + break; + } + break; + } else + fallthrough; + case 0x0400: switch (dev->ecr >> 5) { default: break; @@ -424,10 +453,23 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv) dev->state = LPT_STATE_IDLE; } - dev->ecr = val; + if (dev->ext_regs[0x02] & 0x80) + dev->ecr = val; + else switch (val & 0xe0) { + case 0x00: case 0x20: + case 0x80: + dev->ecr = (val & 0x1f) | 0x60; + break; + } + dev->ret_ecr = val; lpt_ecp_update_irq(dev); break; + case 0x0403: case 0x0407: + if (dev->cfg_regs_enabled) + dev->eir = val & 0x07; + break; + default: break; } @@ -519,6 +561,12 @@ lpt_read_status(lpt_t *dev) return ret; } +uint8_t +lpt_read_ecp_mode(lpt_t *dev) +{ + return ((dev->ret_ecr & 0xe0) == 0x60) ? 0x60 : 0x00; +} + uint8_t lpt_read(const uint16_t port, void *priv) { @@ -567,7 +615,21 @@ lpt_read(const uint16_t port, void *priv) } break; - case 0x0400: case 0x0404: + case 0x0404: + if (dev->cfg_regs_enabled) { + switch (dev->eir) { + default: + ret = 0xff; + break; + case 0x00: case 0x02: + case 0x04: case 0x05: + ret = dev->ext_regs[dev->eir]; + break; + } + break; + } else + fallthrough; + case 0x0400: switch (dev->ecr >> 5) { default: break; @@ -587,7 +649,13 @@ lpt_read(const uint16_t port, void *priv) } break; - case 0x0401: case 0x0405: + case 0x0405: + if (dev->cfg_regs_enabled) { + ret = 0x00; + break; + } else + fallthrough; + case 0x0401: if ((dev->ecr & 0xe0) == 0xe0) { /* CNFGB */ ret = 0x08; @@ -599,11 +667,16 @@ lpt_read(const uint16_t port, void *priv) break; case 0x0402: case 0x0406: - ret = dev->ecr | dev->fifo_stat | (dev->dma_stat & 0x04); + ret = dev->ret_ecr | dev->fifo_stat | (dev->dma_stat & 0x04); ret |= (fifo_get_full(dev->fifo) ? 0x02 : 0x00); ret |= (fifo_get_empty(dev->fifo) ? 0x01 : 0x00); break; + case 0x0403: case 0x0407: + if (dev->cfg_regs_enabled) + ret = dev->eir; + break; + default: break; } @@ -688,6 +761,13 @@ lpt_set_fifo_threshold(lpt_t *dev, const int threshold) fifo_set_trigger_len(dev->fifo, threshold); } +void +lpt_set_cfg_regs_enabled(lpt_t *dev, const uint8_t cfg_regs_enabled) +{ + if (lpt_ports[dev->id].enabled) + dev->cfg_regs_enabled = cfg_regs_enabled; +} + void lpt_set_cnfga_readout(lpt_t *dev, const uint8_t cnfga_readout) { @@ -834,14 +914,21 @@ lpt_reset(void *priv) } } - dev->enable_irq = 0x00; - dev->ext = !!(machine_has_bus(machine, MACHINE_BUS_MCA)); - dev->epp = 0; - dev->ecp = 0; - dev->ecr = 0x15; - dev->dat = 0xff; - dev->fifo_stat = 0x00; - dev->dma_stat = 0x00; + dev->enable_irq = 0x00; + dev->cfg_regs_enabled = 0; + dev->ext = !!(machine_has_bus(machine, MACHINE_BUS_MCA)); + dev->epp = 0; + dev->ecp = 0; + dev->ecr = 0x15; + dev->ret_ecr = 0x15; + dev->dat = 0xff; + dev->fifo_stat = 0x00; + dev->dma_stat = 0x00; + + memset(dev->ext_regs, 0x00, 8); + dev->ext_regs[0x02] = 0x80; + dev->ext_regs[0x04] = 0x07; + dev->cnfga_readout &= 0xf7; } } @@ -869,15 +956,20 @@ lpt_init(const device_t *info) lpt_port_zero(dev); - dev->addr = 0xffff; - dev->irq = 0xff; - dev->dma = 0xff; - dev->enable_irq = 0x00; - dev->ext = 0; - dev->epp = 0; - dev->ecp = 0; - dev->ecr = 0x15; - dev->cnfga_readout = 0x14; + dev->addr = 0xffff; + dev->irq = 0xff; + dev->dma = 0xff; + dev->enable_irq = 0x00; + dev->cfg_regs_enabled = 0; + dev->ext = 0; + dev->epp = 0; + dev->ecp = 0; + dev->ecr = 0x15; + dev->ret_ecr = 0x15; + dev->cnfga_readout = 0x10; + + memset(dev->ext_regs, 0x00, 8); + dev->ext_regs[0x02] = 0x80; if (lpt_ports[dev->id].enabled) { if (info->local & 0xfff00000) { diff --git a/src/device/serial.c b/src/device/serial.c index 8e2071064..ad9abfe5d 100644 --- a/src/device/serial.c +++ b/src/device/serial.c @@ -475,6 +475,12 @@ serial_set_clock_src(serial_t *dev, double clock_src) serial_update_speed(dev); } +void +serial_set_type(serial_t *dev, uint8_t type) +{ + dev->type = type; +} + void serial_write(uint16_t addr, uint8_t val, void *priv) { diff --git a/src/include/86box/lpt.h b/src/include/86box/lpt.h index 4e3adf406..fdf869953 100644 --- a/src/include/86box/lpt.h +++ b/src/include/86box/lpt.h @@ -53,6 +53,7 @@ typedef struct lpt_t { uint8_t epp; uint8_t ecp; uint8_t ecr; + uint8_t ret_ecr; uint8_t in_dat; uint8_t fifo_stat; uint8_t dma_stat; @@ -61,8 +62,11 @@ typedef struct lpt_t { uint8_t strobe; uint8_t lv2; uint8_t cnfga_readout; + uint8_t cfg_regs_enabled; uint8_t inst; - uint8_t pad[5]; + uint8_t eir; + uint8_t pad[2]; + uint8_t ext_regs[8]; uint16_t addr; uint16_t id; uint16_t pad0[2]; @@ -101,6 +105,8 @@ extern uint8_t lpt_read(uint16_t port, void *priv); extern uint8_t lpt_read_port(lpt_t *dev, uint16_t reg); extern uint8_t lpt_read_status(lpt_t *dev); +extern uint8_t lpt_read_ecp_mode(lpt_t *dev); + extern void lpt_irq(void *priv, int raise); extern int lpt_device_get_from_internal_name(const char *str); @@ -125,6 +131,7 @@ extern void lpt_set_ext(lpt_t *dev, uint8_t ext); extern void lpt_set_ecp(lpt_t *dev, uint8_t ecp); extern void lpt_set_epp(lpt_t *dev, uint8_t epp); extern void lpt_set_lv2(lpt_t *dev, uint8_t lv2); +extern void lpt_set_cfg_regs_enabled(lpt_t *dev, uint8_t cfg_regs_enabled); extern void lpt_set_fifo_threshold(lpt_t *dev, int threshold); extern void lpt_set_cnfga_readout(lpt_t *dev, const uint8_t cnfga_readout); extern void lpt_port_setup(lpt_t *dev, uint16_t port); diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 9e14f0656..1eb51bbba 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -164,31 +164,32 @@ enum { MACHINE_TYPE_NONE = 0, - MACHINE_TYPE_8088 = 1, - MACHINE_TYPE_8086 = 2, - MACHINE_TYPE_286 = 3, - MACHINE_TYPE_386SX = 4, - MACHINE_TYPE_486SLC = 5, - MACHINE_TYPE_386DX = 6, - MACHINE_TYPE_386DX_486 = 7, - MACHINE_TYPE_486 = 8, - MACHINE_TYPE_486_S2 = 9, - MACHINE_TYPE_486_S3 = 10, - MACHINE_TYPE_486_S3_PCI = 11, - MACHINE_TYPE_486_MISC = 12, - MACHINE_TYPE_SOCKET4 = 13, - MACHINE_TYPE_SOCKET5 = 14, - MACHINE_TYPE_SOCKET7_3V = 15, - MACHINE_TYPE_SOCKET7 = 16, - MACHINE_TYPE_SOCKETS7 = 17, - MACHINE_TYPE_SOCKET8 = 18, - MACHINE_TYPE_SLOT1 = 19, - MACHINE_TYPE_SLOT1_2 = 20, - MACHINE_TYPE_SLOT1_370 = 21, - MACHINE_TYPE_SLOT2 = 22, - MACHINE_TYPE_SOCKET370 = 23, - MACHINE_TYPE_MISC = 24, - MACHINE_TYPE_MAX = 25 + MACHINE_TYPE_8088, + MACHINE_TYPE_8086, + MACHINE_TYPE_286, + MACHINE_TYPE_386SX, + MACHINE_TYPE_M6117, + MACHINE_TYPE_486SLC, + MACHINE_TYPE_386DX, + MACHINE_TYPE_386DX_486, + MACHINE_TYPE_486, + MACHINE_TYPE_486_S2, + MACHINE_TYPE_486_S3, + MACHINE_TYPE_486_S3_PCI, + MACHINE_TYPE_486_MISC, + MACHINE_TYPE_SOCKET4, + MACHINE_TYPE_SOCKET5, + MACHINE_TYPE_SOCKET7_3V, + MACHINE_TYPE_SOCKET7, + MACHINE_TYPE_SOCKETS7, + MACHINE_TYPE_SOCKET8, + MACHINE_TYPE_SLOT1, + MACHINE_TYPE_SLOT1_2, + MACHINE_TYPE_SLOT1_370, + MACHINE_TYPE_SLOT2, + MACHINE_TYPE_SOCKET370, + MACHINE_TYPE_MISC, + MACHINE_TYPE_MAX }; enum { @@ -440,78 +441,107 @@ extern void machine_at_ibm_common_ide_init(const machine_t *); extern void machine_at_ide_init(const machine_t *); extern void machine_at_ps2_ide_init(const machine_t *); -extern int machine_at_ibm_init(const machine_t *); +extern int machine_at_ibm_init(const machine_t *); // IBM AT with custom BIOS -extern int machine_at_ibmatami_init(const machine_t *); // IBM AT with AMI BIOS -extern int machine_at_ibmatpx_init(const machine_t *); // IBM AT with Phoenix BIOS -extern int machine_at_ibmatquadtel_init(const machine_t *); // IBM AT with Quadtel BIOS +extern int machine_at_ibmatami_init(const machine_t *); // IBM AT with AMI BIOS +extern int machine_at_ibmatpx_init(const machine_t *); // IBM AT with Phoenix BIOS +extern int machine_at_ibmatquadtel_init(const machine_t *); // IBM AT with Quadtel BIOS -extern int machine_at_ibmxt286_init(const machine_t *); +extern int machine_at_ibmxt286_init(const machine_t *); -extern int machine_at_pb286_init(const machine_t *); +extern int machine_at_pb286_init(const machine_t *); -extern int machine_at_siemens_init(const machine_t *); // Siemens PCD-2L. N82330 discrete machine. It segfaults in some places +extern int machine_at_siemens_init(const machine_t *); // Siemens PCD-2L. N82330 discrete machine. It segfaults in some places -extern int machine_at_wellamerastar_init(const machine_t *); // Wells American A*Star with custom award BIOS +/* m_at_286.c */ +/* ISA */ +extern int machine_at_mr286_init(const machine_t *); +extern int machine_at_pc8_init(const machine_t *); +extern int machine_at_m290_init(const machine_t *); -/* m_at_286_386sx.c */ -extern int machine_at_tg286m_init(const machine_t *); -extern int machine_at_ama932j_init(const machine_t *); -extern int machine_at_px286_init(const machine_t *); -extern int machine_at_quadt286_init(const machine_t *); -extern int machine_at_mr286_init(const machine_t *); +/* C&T PC/AT */ +extern int machine_at_dells200_init(const machine_t *); +extern int machine_at_super286c_init(const machine_t *); +extern int machine_at_at122_init(const machine_t *); +extern int machine_at_tuliptc7_init(const machine_t *); -extern int machine_at_pbl300sx_init(const machine_t *); -extern int machine_at_neat_init(const machine_t *); -extern int machine_at_neat_ami_init(const machine_t *); -extern int machine_at_ataripc4_init(const machine_t *); +/* GC103 */ +extern int machine_at_quadt286_init(const machine_t *); +extern void machine_at_headland_common_init(const machine_t *model, int type); +extern int machine_at_tg286m_init(const machine_t *); +/* Wells American A*Star with custom award BIOS. */ +extern int machine_at_wellamerastar_init(const machine_t *); -extern int machine_at_quadt386sx_init(const machine_t *); +/* NEAT */ +extern int machine_at_ataripc4_init(const machine_t *); +extern int machine_at_neat_ami_init(const machine_t *); +extern int machine_at_3302_init(const machine_t *); +extern int machine_at_px286_init(const machine_t *); -extern int machine_at_award286_init(const machine_t *); -extern int machine_at_gdc212m_init(const machine_t *); -extern int machine_at_gw286ct_init(const machine_t *); -extern int machine_at_drsm35286_init(const machine_t *); -extern int machine_at_senor_scat286_init(const machine_t *); -extern int machine_at_super286c_init(const machine_t *); -extern int machine_at_super286tr_init(const machine_t *); -extern int machine_at_spc4200p_init(const machine_t *); -extern int machine_at_spc4216p_init(const machine_t *); -extern int machine_at_spc4620p_init(const machine_t *); -extern int machine_at_kmxc02_init(const machine_t *); -extern int machine_at_deskmaster286_init(const machine_t *); +/* SCAT */ +extern int machine_at_gw286ct_init(const machine_t *); +extern int machine_at_gdc212m_init(const machine_t *); +extern int machine_at_award286_init(const machine_t *); +extern int machine_at_super286tr_init(const machine_t *); +extern int machine_at_drsm35286_init(const machine_t *); +extern int machine_at_deskmaster286_init(const machine_t *); +extern int machine_at_spc4200p_init(const machine_t *); +extern int machine_at_spc4216p_init(const machine_t *); +extern int machine_at_spc4620p_init(const machine_t *); +extern int machine_at_senor_scat286_init(const machine_t *); -extern int machine_at_dells200_init(const machine_t *); -extern int machine_at_at122_init(const machine_t *); -extern int machine_at_tuliptc7_init(const machine_t *); +/* m_at_386sx.c */ +/* ISA */ +extern int machine_at_pc916sx_init(const machine_t *); +extern int machine_at_quadt386sx_init(const machine_t *); -extern int machine_at_pc8_init(const machine_t *); -extern int machine_at_3302_init(const machine_t *); +/* ACC 2036 */ +extern int machine_at_pbl300sx_init(const machine_t *); -extern int machine_at_m290_init(const machine_t *); +/* ALi M1217 */ +extern int machine_at_arb1374_init(const machine_t *); +extern int machine_at_sbc350a_init(const machine_t *); +extern int machine_at_flytech386_init(const machine_t *); +extern int machine_at_325ax_init(const machine_t *); +extern int machine_at_mr1217_init(const machine_t *); -extern int machine_at_shuttle386sx_init(const machine_t *); -extern int machine_at_adi386sx_init(const machine_t *); -extern int machine_at_cmdsl386sx16_init(const machine_t *); -extern int machine_at_cmdsl386sx25_init(const machine_t *); -extern int machine_at_dataexpert386sx_init(const machine_t *); -extern int machine_at_dells333sl_init(const machine_t *); -extern int machine_at_if386sx_init(const machine_t *); -extern int machine_at_spc6033p_init(const machine_t *); -extern int machine_at_wd76c10_init(const machine_t *); -extern int machine_at_arb1374_init(const machine_t *); -extern int machine_at_sbc350a_init(const machine_t *); -extern int machine_at_flytech386_init(const machine_t *); -extern int machine_at_325ax_init(const machine_t *); -extern int machine_at_mr1217_init(const machine_t *); -extern int machine_at_pja511m_init(const machine_t *); -extern int machine_at_prox1332_init(const machine_t *); -extern int machine_at_acer100t_init(const machine_t *); +/* ALi M1409 */ +extern int machine_at_acer100t_init(const machine_t *); -extern int machine_at_awardsx_init(const machine_t *); +/* HT18 */ +extern int machine_at_ama932j_init(const machine_t *); -extern int machine_at_pc916sx_init(const machine_t *); +/* Intel 82335 */ +extern int machine_at_adi386sx_init(const machine_t *); +extern int machine_at_shuttle386sx_init(const machine_t *); + +/* NEAT */ +extern int machine_at_cmdsl386sx16_init(const machine_t *); +extern int machine_at_neat_init(const machine_t *); + +/* NEATsx */ +extern int machine_at_if386sx_init(const machine_t *); + +/* OPTi 291 */ +extern int machine_at_awardsx_init(const machine_t *); + +/* SCAMP */ +extern int machine_at_cmdsl386sx25_init(const machine_t *); +extern int machine_at_dataexpert386sx_init(const machine_t *); +extern int machine_at_dells333sl_init(const machine_t *); +extern int machine_at_spc6033p_init(const machine_t *); + +/* SCATsx */ +extern int machine_at_kmxc02_init(const machine_t *); + +/* WD76C10 */ +extern int machine_at_wd76c10_init(const machine_t *); + +/* m_at_m6117.c */ +/* ALi M6117D */ +extern int machine_at_pja511m_init(const machine_t *); +extern int machine_at_prox1332_init(const machine_t *); /* m_at_386dx_486.c */ /* Note to jriwanek: When merging this into my branch, please make diff --git a/src/include/86box/serial.h b/src/include/86box/serial.h index f35c7e36e..c6389a262 100644 --- a/src/include/86box/serial.h +++ b/src/include/86box/serial.h @@ -135,7 +135,6 @@ extern serial_t *serial_attach_ex_2(int port, serial_attach_ex(port, rcr_callback, dev_write, NULL, NULL, priv); extern void serial_remove(serial_t *dev); -extern void serial_set_type(serial_t *dev, int type); extern void serial_setup(serial_t *dev, uint16_t addr, uint8_t irq); extern void serial_irq(serial_t *dev, uint8_t irq); extern void serial_clear_fifo(serial_t *dev); @@ -143,6 +142,7 @@ extern void serial_write_fifo(serial_t *dev, uint8_t dat); extern void serial_set_next_inst(int ni); extern void serial_standalone_init(void); extern void serial_set_clock_src(serial_t *dev, double clock_src); +extern void serial_set_type(serial_t *dev, uint8_t type); extern void serial_reset_port(serial_t *dev); extern uint8_t serial_read(uint16_t addr, void *priv); extern void serial_device_timeout(void *priv); diff --git a/src/include/86box/sio.h b/src/include/86box/sio.h index 941604ddb..b86124273 100644 --- a/src/include/86box/sio.h +++ b/src/include/86box/sio.h @@ -29,36 +29,35 @@ extern const device_t f82c710_device; extern const device_t f82c710_pc5086_device; /* SM(S)C */ -extern const device_t fdc37c651_device; -extern const device_t fdc37c651_ide_device; -extern const device_t fdc37c661_device; -extern const device_t fdc37c661_ide_device; -extern const device_t fdc37c661_ide_sec_device; -extern const device_t fdc37c663_device; -extern const device_t fdc37c663_ide_device; -extern const device_t fdc37c665_device; -extern const device_t fdc37c665_ide_device; -extern const device_t fdc37c665_ide_pri_device; -extern const device_t fdc37c665_ide_sec_device; -extern const device_t fdc37c666_device; +#define FDC37C651 0x00051 +#define FDC37C661 0x00061 +#define FDC37C663 0x00063 +#define FDC37C665 0x00065 +#define FDC37C666 0x00066 + +#define FDC37C6XX_IDE_PRI 0x00100 +#define FDC37C6XX_IDE_SEC 0x00200 + +#define FDC37C6XX_370 0x00400 + +extern const device_t fdc37c6xx_device; extern const device_t fdc37c669_device; -extern const device_t fdc37c669_370_device; -#define FDC37C93X_NORMAL 0x0002 -#define FDC37C93X_FR 0x0003 -#define FDC37C93X_APM 0x0030 -#define FDC37C93X_CHIP_ID 0x00ff +#define FDC37C93X_NORMAL 0x00002 +#define FDC37C93X_FR 0x00003 +#define FDC37C93X_APM 0x00030 +#define FDC37C93X_CHIP_ID 0x000ff -#define FDC37XXX1 0x0100 /* Compaq KBC firmware and configuration registers on GPIO ports. */ -#define FDC37XXX2 0x0200 /* AMI '5' Megakey KBC firmware. */ -#define FDC37XXX3 0x0300 /* IBM KBC firmware. */ -#define FDC37XXX5 0x0500 /* Phoenix Multikey/42 1.38 KBC firmware. */ -#define FDC37XXX7 0x0700 /* Phoenix Multikey/42i 4.16 KBC firmware. */ -#define FDC37XXXX_KBC 0x0f00 +#define FDC37XXX1 0x00100 /* Compaq KBC firmware and configuration registers on GPIO ports. */ +#define FDC37XXX2 0x00200 /* AMI '5' Megakey KBC firmware. */ +#define FDC37XXX3 0x00300 /* IBM KBC firmware. */ +#define FDC37XXX5 0x00500 /* Phoenix Multikey/42 1.38 KBC firmware. */ +#define FDC37XXX7 0x00700 /* Phoenix Multikey/42i 4.16 KBC firmware. */ +#define FDC37XXXX_KBC 0x00f00 -#define FDC37C93X_NO_NVR 0x1000 -#define FDC37XXXX_370 0x2000 +#define FDC37C93X_NO_NVR 0x01000 +#define FDC37XXXX_370 0x02000 extern const device_t fdc37c93x_device; @@ -71,42 +70,52 @@ extern const device_t it8661f_device; extern const device_t it8671f_device; /* Intel */ +#define I82091AA_022 0x00000 /* Default. */ +#define I82091AA_024 0x00008 +#define I82091AA_26E 0x00100 +#define I82091AA_398 0x00108 + +#define I82091AA_IDE_PRI 0x00200 +#define I82091AA_IDE_SEC 0x00400 + extern const device_t i82091aa_device; -extern const device_t i82091aa_26e_device; -extern const device_t i82091aa_398_device; -extern const device_t i82091aa_ide_pri_device; -extern const device_t i82091aa_ide_device; /* National Semiconductors PC87310 / ALi M5105 */ -#define PC87310_IDE 0x0001 -#define PC87310_ALI 0x0002 +#define PCX73XX_IDE 0x00001 + +#define PCX73XX_IDE_PRI PCX73XX_IDE +#define PCX73XX_IDE_SEC 0x00002 + +#define PCX73XX_FDC_ON 0x10000 + +#define PC87310_ALI 0x00004 +#define PC87332 PC87310_ALI extern const device_t pc87310_device; /* National Semiconductors */ -#define PCX7307_PC87307 0x00c0 -#define PCX7307_PC97307 0x00cf +#define PCX7307_PC87307 0x000c0 +#define PCX7307_PC97307 0x000cf -#define PC87309_PC87309 0x00e0 +#define PC87309_PC87309 0x000e0 -#define PCX730X_CHIP_ID 0x00ff +#define PCX730X_CHIP_ID 0x000ff -#define PCX730X_AMI 0x0200 /* AMI '5' Megakey KBC firmware. */ -#define PCX730X_PHOENIX_42 0x0500 /* Phoenix Multikey/42 1.37 KBC firmware. */ -#define PCX730X_PHOENIX_42I 0x0700 /* Phoenix Multikey/42i 4.16 KBC firmware. */ -#define PCX730X_KBC 0x0f00 +#define PCX730X_AMI 0x00200 /* AMI '5' Megakey KBC firmware. */ +#define PCX730X_PHOENIX_42 0x00500 /* Phoenix Multikey/42 1.37 KBC firmware. */ +#define PCX730X_PHOENIX_42I 0x00700 /* Phoenix Multikey/42i 4.16 KBC firmware. */ +#define PCX730X_KBC 0x00f00 -#define PCX730X_15C 0x2000 +#define PCX730X_398 0x00000 +#define PCX730X_26E 0x01000 +#define PCX730X_15C 0x02000 +#define PCX730X_02E 0x03000 +#define PCX730X_BADDR 0x03000 +#define PCX730X_BADDR_SHIFT 12 extern const device_t pc87306_device; -extern const device_t pc87311_device; -extern const device_t pc87311_ide_device; -extern const device_t pc87332_device; -extern const device_t pc87332_398_device; -extern const device_t pc87332_398_ide_device; -extern const device_t pc87332_398_ide_sec_device; -extern const device_t pc87332_398_ide_fdcon_device; +extern const device_t pc873xx_device; /* National Semiconductors PC87307 / PC87309 */ extern const device_t pc87307_device; @@ -114,10 +123,15 @@ extern const device_t pc87307_device; extern const device_t pc87309_device; /* LG Prime */ -extern const device_t prime3b_device; -extern const device_t prime3b_ide_device; -extern const device_t prime3c_device; -extern const device_t prime3c_ide_device; +#define GM82C803A 0x00000 +#define GM82C803B 0x00001 + +#define GM82C803_IDE_PRI 0x00100 +#define GM82C803_IDE_SEC 0x00200 + +extern const device_t gm82c803ab_device; + +extern const device_t gm82c803c_device; /* IBM PS/1 */ extern const device_t ps1_m2133_sio; @@ -128,20 +142,17 @@ extern const device_t sio_detect_device; #endif /* USE_SIO_DETECT */ /* UMC */ -extern const device_t um82c862f_device; -extern const device_t um82c862f_ide_device; -extern const device_t um82c863f_device; -extern const device_t um82c863f_ide_device; -extern const device_t um8663af_device; -extern const device_t um8663af_ide_device; -extern const device_t um8663af_sec_device; -extern const device_t um8663bf_device; -extern const device_t um8663bf_ide_device; -extern const device_t um8663bf_sec_device; +#define UM82C862F 0x00000 +#define UM82C863F 0x0c100 +#define UM8663AF 0x0c300 +#define UM8663BF 0x0c400 + +#define UM866X_IDE_PRI 0x00001 +#define UM866X_IDE_SEC 0x00002 + +extern const device_t um866x_device; extern const device_t um8669f_device; -extern const device_t um8669f_ide_device; -extern const device_t um8669f_ide_sec_device; /* VIA */ extern void vt82c686_sio_write(uint8_t addr, uint8_t val, void *priv); @@ -152,26 +163,43 @@ extern const device_t via_vt82c686_sio_device; extern const device_t vl82c113_device; /* Winbond */ -extern const device_t w83787f_88h_device; -extern const device_t w83787f_device; -extern const device_t w83787f_ide_device; -extern const device_t w83787f_ide_en_device; -extern const device_t w83787f_ide_sec_device; +#define W83777F 0x00007 +#define W83787F 0x00008 +#define W83787IF 0x00009 -extern const device_t w83877f_device; -extern const device_t w83877f_president_device; -extern const device_t w83877tf_device; -extern const device_t w83877tf_acorp_device; +#define W837X7_KEY_88 0x00000 +#define W837X7_KEY_89 0x00020 -#define TYPE_W83977EF 0x52F0 -#define TYPE_W83977F 0x9771 -#define TYPE_W83977TF 0x9773 -#define TYPE_W83977ATF 0x9774 +#define W837X7_IDE_START 0x00040 -extern const device_t w83977f_device; -extern const device_t w83977f_370_device; -extern const device_t w83977tf_device; -extern const device_t w83977ef_device; -extern const device_t w83977ef_370_device; +#define W83XX7_IDE_PRI 0x10000 +#define W83XX7_IDE_SEC 0x20000 + +extern const device_t w837x7_device; + +#define W83877F 0x00a00 +#define W83877TF 0x00c00 +#define W83877_3F0 0x00005 +#define W83877_250 0x00004 + +extern const device_t w83877_device; + +#define W83977F 0x977100 +#define W83977TF 0x977300 +#define W83977EF 0x52f000 +#define W83977_TYPE 0xffff00 +#define W83977_TYPE_SHIFT 8 + +#define W83977_3F0 0x00000 +#define W83977_370 0x00001 + +#define W83977_NO_NVR 0x00002 + +#define W83977_AMI 0x00010 /* AMI 'H' KBC firmware. */ +#define W83977_PHOENIX 0x00020 /* Unknown Phoenix Multikey KBC firmware. */ + +#define W83977_KBC 0x000f0 + +extern const device_t w83977_device; #endif /*EMU_SIO_H*/ diff --git a/src/machine/CMakeLists.txt b/src/machine/CMakeLists.txt index 63f9baf61..ae9d2a1a9 100644 --- a/src/machine/CMakeLists.txt +++ b/src/machine/CMakeLists.txt @@ -42,7 +42,9 @@ add_library(mch OBJECT m_ps2_isa.c m_ps2_mca.c m_at_compaq.c - m_at_286_386sx.c + m_at_286.c + m_at_386sx.c + m_at_m6117.c m_at_386dx_486.c m_at_socket4.c m_at_socket5.c diff --git a/src/machine/m_at_286.c b/src/machine/m_at_286.c new file mode 100644 index 000000000..e13b81853 --- /dev/null +++ b/src/machine/m_at_286.c @@ -0,0 +1,609 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Implementation of 286 machines. + * + * Authors: Miran Grca, + * EngiNerd + * + * Copyright 2016-2025 Miran Grca. + * Copyright 2020-2025 EngiNerd. + */ +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include "cpu.h" +#include <86box/timer.h> +#include <86box/io.h> +#include <86box/device.h> +#include <86box/chipset.h> +#include <86box/keyboard.h> +#include <86box/mem.h> +#include <86box/rom.h> +#include <86box/fdd.h> +#include <86box/fdc.h> +#include <86box/fdc_ext.h> +#include <86box/hdc.h> +#include <86box/nvr.h> +#include <86box/port_6x.h> +#define USE_SIO_DETECT +#include <86box/sio.h> +#include <86box/serial.h> +#include <86box/video.h> +#include <86box/vid_cga.h> +#include <86box/flash.h> +#include <86box/machine.h> + +/* ISA */ +int +machine_at_mr286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/mr286/V000B200-1", + "roms/machines/mr286/V000B200-2", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_ide_init(model); + device_add(&kbc_at_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + return ret; +} + +/* + * Current bugs: + * - ctrl-alt-del produces an 8042 error + */ +int +machine_at_pc8_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/pc8/ncr_35117_u127_vers.4-2.bin", + "roms/machines/pc8/ncr_35116_u113_vers.4-2.bin", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + device_add(&kbc_at_ncr_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + return ret; +} + +int +machine_at_m290_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/m290/m290_pep3_1.25.bin", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 6); + device_add(&amstrad_megapc_nvr_device); + + device_add(&olivetti_eva_device); + device_add(&port_6x_olivetti_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&kbc_at_olivetti_device); + + return ret; +} + +/* C&T PC/AT */ +static void +machine_at_ctat_common_init(const machine_t *model) +{ + machine_at_common_init(model); + + device_add(&cs8220_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&kbc_at_phoenix_device); +} + +int +machine_at_dells200_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/dells200/dellL200256_LO_@DIP28.BIN", + "roms/machines/dells200/Dell200256_HI_@DIP28.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_ctat_common_init(model); + + return ret; +} + +int +machine_at_super286c_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/super286c/hyundai_award286.bin", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + device_add(&kbc_at_ami_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&cs8220_device); + + return ret; +} + +int +machine_at_at122_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/at122/FINAL.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_ctat_common_init(model); + + return ret; +} + +int +machine_at_tuliptc7_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleavedr("roms/machines/tuliptc7/tc7be.bin", + "roms/machines/tuliptc7/tc7bo.bin", + 0x000f8000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_ctat_common_init(model); + + return ret; +} + +int +machine_at_wellamerastar_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/wellamerastar/W_3.031_L.BIN", + "roms/machines/wellamerastar/W_3.031_H.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_ctat_common_init(model); + + return ret; +} + +/* GC103 */ +int +machine_at_quadt286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/quadt286/QUADT89L.ROM", + "roms/machines/quadt286/QUADT89H.ROM", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + device_add(&kbc_at_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&headland_gc10x_device); + + return ret; +} + +void +machine_at_headland_common_init(const machine_t *model, int type) +{ + device_add(&kbc_at_ami_device); + + if ((type != 2) && (fdc_current[0] == FDC_INTERNAL)) + device_add(&fdc_at_device); + + if (type == 2) + device_add(&headland_ht18b_device); + else if (type == 1) + device_add(&headland_gc113_device); + else + device_add(&headland_gc10x_device); +} + +int +machine_at_tg286m_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/tg286m/ami.bin", + 0x000f0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_ide_init(model); + + machine_at_headland_common_init(model, 1); + + return ret; +} + +// TODO +// Onboard Paradise PVGA1A-JK VGA Graphics +// Data Technology Corporation DTC7187 RLL Controller (Optional) +int +machine_at_ataripc4_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/ataripc4/AMI_PC4X_1.7_EVEN.BIN", + "roms/machines/ataripc4/AMI_PC4X_1.7_ODD.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + device_add(&neat_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&kbc_at_ami_device); + + return ret; +} + +int +machine_at_neat_ami_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/ami286/AMIC206.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + device_add(&neat_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&kbc_at_ami_device); + + return ret; +} + +int +machine_at_3302_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/3302/f000-flex_drive_test.bin", + 0x000f0000, 65536, 0); + + if (ret) { + ret &= bios_load_aux_linear("roms/machines/3302/f800-setup_ncr3.5-013190.bin", + 0x000f8000, 32768, 0); + } + + if (bios_only || !ret) + return ret; + + machine_at_common_ide_init(model); + device_add(&neat_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + + device_add(&kbc_at_ncr_device); + + return ret; +} + +int +machine_at_px286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/px286/KENITEC.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + device_add(&kbc_at_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&neat_device); + + return ret; +} + +/* SCAT */ +static void +machine_at_scat_init(const machine_t *model, int is_v4, int is_ami) +{ + machine_at_common_init(model); + + if (machines[machine].bus_flags & MACHINE_BUS_PS2) { + if (is_ami) + device_add(&kbc_ps2_ami_device); + else + device_add(&kbc_ps2_device); + } else { + if (is_ami) + device_add(&kbc_at_ami_device); + else + device_add(&kbc_at_device); + } + + if (is_v4) + device_add(&scat_4_device); + else + device_add(&scat_device); +} + +int +machine_at_gw286ct_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/gw286ct/2ctc001.bin", + 0x000f0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + device_add(&f82c710_device); + + machine_at_scat_init(model, 1, 0); + + device_add(&ide_isa_device); + + return ret; +} + +int +machine_at_gdc212m_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/gdc212m/gdc212m_72h.bin", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scat_init(model, 0, 1); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&ide_isa_device); + + return ret; +} + +int +machine_at_award286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/award286/award.bin", + 0x000f0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scat_init(model, 0, 1); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&ide_isa_device); + + return ret; +} + +int +machine_at_super286tr_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/super286tr/hyundai_award286.bin", + 0x000f0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scat_init(model, 0, 1); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + return ret; +} + +int +machine_at_drsm35286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/drsm35286/syab04-665821fb81363428830424.bin", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + device_add(&ide_isa_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI)); + + machine_at_scat_init(model, 1, 0); + + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); + + return ret; +} + +int +machine_at_deskmaster286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/deskmaster286/SAMSUNG-DESKMASTER-28612-ROM.BIN", + 0x000f0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scat_init(model, 0, 1); + + device_add(&f82c710_device); + + device_add(&ide_isa_device); + + return ret; +} + +int +machine_at_spc4200p_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/spc4200p/u8.01", + 0x000f0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scat_init(model, 0, 1); + + device_add(&f82c710_device); + + device_add(&ide_isa_device); + + return ret; +} + +int +machine_at_spc4216p_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/spc4216p/7101.U8", + "roms/machines/spc4216p/AC64.U10", + 0x000f0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scat_init(model, 1, 1); + + device_add(&f82c710_device); + + return ret; +} + +int +machine_at_spc4620p_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/spc4620p/31005h.u8", + "roms/machines/spc4620p/31005h.u10", + 0x000f0000, 131072, 0x8000); + + if (bios_only || !ret) + return ret; + + if (gfxcard[0] == VID_INTERNAL) + device_add(&ati28800k_spc4620p_device); + + machine_at_scat_init(model, 1, 1); + + device_add(&f82c710_device); + + device_add(&ide_isa_device); + + return ret; +} + +int +machine_at_senor_scat286_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/senor286/AMI-DSC2-1115-061390-K8.rom", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scat_init(model, 0, 1); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + return ret; +} diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 0fcce36b3..880bb2218 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -423,7 +423,7 @@ machine_at_vect486vl_init(const machine_t *model) // has HDC problems device_add(&vl82c113_device); device_add(&ide_isa_device); - device_add(&fdc37c651_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI)); return ret; } @@ -453,7 +453,7 @@ machine_at_d824_init(const machine_t *model) device_add(&vl82c113_device); device_add(&ide_isa_device); - device_add(&fdc37c651_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C651); return ret; } @@ -477,7 +477,7 @@ machine_at_tuliptc38_init(const machine_t *model) device_add(&vl82c113_device); device_add(&ide_isa_device); - device_add(&fdc37c651_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI)); if (gfxcard[0] == VID_INTERNAL) { bios_load_aux_linear("roms/machines/tuliptc38/VBIOS.BIN", @@ -510,7 +510,7 @@ machine_at_martin_init(const machine_t *model) device_add(&vl82c113_device); device_add(&ide_vlb_device); - device_add(&fdc37c651_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI)); device_add(&intel_flash_bxt_device); @@ -586,7 +586,7 @@ machine_at_decpclpv_init(const machine_t *model) device_add(&kbc_ps2_phoenix_pci_device); device_add(&ide_isa_2ch_device); - device_add(&fdc37c663_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C663 | FDC37C6XX_IDE_PRI)); return ret; } @@ -617,7 +617,7 @@ machine_at_dell466np_init(const machine_t *model) device_add(&kbc_ps2_phoenix_pci_device); device_add(&ide_isa_device); - device_add(&fdc37c661_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C661 | FDC37C6XX_IDE_PRI)); return ret; } @@ -759,7 +759,7 @@ machine_at_c747_init(const machine_t *model) desired behavior: command A9 does absolutely nothing. */ device_add(&kbc_at_siemens_device); - device_add(&um82c862f_ide_device); + device_add_params(&um866x_device, (void *) (UM82C862F | UM866X_IDE_PRI)); return ret; } @@ -921,8 +921,8 @@ machine_at_pb450_init(const machine_t *model) device_add(&opti602_device); device_add(&opti822_device); device_add(&kbc_ps2_phoenix_device); - device_add(&fdc37c665_ide_device); - device_add(&ide_opti611_vlb_sec_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); + device_add(&ide_opti611_vlb_device); device_add(&intel_flash_bxt_device); device_add(&phoenix_486_jumper_pci_device); @@ -952,7 +952,7 @@ machine_at_pc330_6573_common_init(const machine_t *model) device_add(&opti802g_device); device_add(&opti822_device); device_add(&kbc_ps2_ami_device); - device_add(&fdc37c665_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&ide_opti611_vlb_device); device_add(&intel_flash_bxt_device); } @@ -1005,7 +1005,9 @@ machine_at_mvi486_init(const machine_t *model) device_add(&opti498_device); device_add(&kbc_at_device); - device_add(&pc87311_ide_device); + + device_add(&ide_isa_device); + device_add_params(&pc873xx_device, (void *) (PCX73XX_IDE_PRI | PCX730X_398)); return ret; } @@ -1056,7 +1058,7 @@ machine_at_advantage40xxd_init(const machine_t *model) device_add(machine_get_vid_device(machine)); device_add(&kbc_ps2_phoenix_device); - device_add(&um82c863f_ide_device); + device_add_params(&um866x_device, (void *) (UM82C863F | UM866X_IDE_PRI)); device_add(&intel_flash_bxt_device); @@ -1262,7 +1264,7 @@ machine_at_r418_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_pci_device); return ret; @@ -1288,7 +1290,7 @@ machine_at_m4li_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_pci_device); return ret; @@ -1314,7 +1316,7 @@ machine_at_ls486e_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_ami_pci_device); return ret; @@ -1340,7 +1342,7 @@ machine_at_4dps_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787IF | W837X7_KEY_89)); device_add(&kbc_ps2_ami_device); device_add(&intel_flash_bxt_device); @@ -1367,7 +1369,7 @@ machine_at_ms4144_init(const machine_t *model) pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&kbc_at_ami_device); device_add(&sst_flash_29ee010_device); @@ -1396,11 +1398,11 @@ machine_at_acerp3_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); - device_add(&fdc37c665_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); device_add(&kbc_ps2_acer_pci_device); - device_add(&ide_cmd640_pci_legacy_only_device); - - if (gfxcard[0] == VID_INTERNAL) + device_add(&ide_cmd640_pci_legacy_only_device); + + if (gfxcard[0] == VID_INTERNAL) device_add(&gd5434_onboard_pci_device); device_add(&intel_flash_bxt_device); @@ -1427,7 +1429,7 @@ machine_at_486sp3c_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_ami_pci_device); device_add(&intel_flash_bxt_device); @@ -1455,7 +1457,7 @@ machine_at_4saw2_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83777F | W837X7_KEY_89)); device_add(&kbc_ps2_pci_device); device_add(&intel_flash_bxt_device); @@ -1488,7 +1490,7 @@ machine_at_alfredo_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&kbc_ps2_phoenix_device); device_add(&sio_device); - device_add(&fdc37c663_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C663); device_add(&intel_flash_bxt_ami_device); device_add(&i420tx_device); @@ -1519,7 +1521,7 @@ machine_at_ninja_init(const machine_t *model) device_add(&intel_flash_bxt_ami_device); device_add(&i420ex_device); - device_add(&i82091aa_device); + device_add_params(&i82091aa_device, (void *) I82091AA_022); return ret; } @@ -1548,7 +1550,7 @@ machine_at_bat4ip3e_init(const machine_t *model) device_add(&kbc_ps2_pci_device); device_add(&i420ex_device); device_add(&ide_cmd640_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); return ret; } @@ -1573,7 +1575,7 @@ machine_at_486pi_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 1, 2); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&i420ex_device); return ret; @@ -1598,7 +1600,7 @@ machine_at_sb486p_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 2, 1); device_add(&kbc_ps2_ami_pci_device); - device_add(&i82091aa_device); + device_add_params(&i82091aa_device, (void *) I82091AA_022); device_add(&i420ex_device); return ret; @@ -1628,7 +1630,7 @@ machine_at_486sp3_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&kbc_at_ami_device); /* Uses the AMIKEY KBC */ device_add(&sio_device); - device_add(&fdc37c663_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C663 | FDC37C6XX_IDE_PRI)); device_add(&sst_flash_29ee010_device); device_add(&i420tx_device); @@ -1657,7 +1659,7 @@ machine_at_amis76_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&kbc_ps2_ami_pci_device); device_add(&sio_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_ami_device); device_add(&i420tx_device); @@ -1750,7 +1752,7 @@ machine_at_486sp3g_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&kbc_ps2_ami_pci_device); /* Uses the AMIKEY KBC */ device_add(&sio_zb_device); - device_add(&pc87332_398_ide_device); + device_add_params(&pc873xx_device, (void *) (PC87332 | PCX73XX_IDE_PRI | PCX730X_398)); device_add(&sst_flash_29ee010_device); device_add(&i420zx_device); @@ -1829,7 +1831,7 @@ machine_at_sb486pv_init(const machine_t *model) device_add(&kbc_ps2_ami_pci_device); device_add(&sio_zb_device); device_add(&ide_rz1000_pci_single_channel_device); - device_add(&i82091aa_26e_device); + device_add_params(&i82091aa_device, (void *) I82091AA_26E); if (!strcmp(fn, "roms/machines/sb486pv/amiboot.rom")) device_add(&intel_flash_bxt_device); else @@ -1892,7 +1894,7 @@ machine_at_g486vpa_init(const machine_t *model) device_add(&via_vt82c49x_pci_ide_device); device_add(&via_vt82c505_device); - device_add(&pc87332_398_ide_sec_device); + device_add_params(&pc873xx_device, (void *) (PC87332 | PCX73XX_IDE_SEC | PCX730X_398)); device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_29ee010_device); @@ -1921,7 +1923,7 @@ machine_at_486vipio2_init(const machine_t *model) device_add(&via_vt82c49x_pci_ide_device); device_add(&via_vt82c505_device); - device_add(&w83787f_ide_sec_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_29ee010_device); @@ -1948,7 +1950,7 @@ machine_at_abpb4_init(const machine_t *model) pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1489_device); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&kbc_at_device); #if 0 device_add(&intel_flash_bxt_device); @@ -1978,7 +1980,7 @@ machine_at_win486pci_init(const machine_t *model) pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&ali1489_device); - device_add(&prime3b_device); + device_add_params(&gm82c803ab_device, (void *) GM82C803B); device_add(&kbc_at_ami_device); return ret; @@ -2005,7 +2007,7 @@ machine_at_ms4145_init(const machine_t *model) pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&ali1489_device); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&kbc_at_ami_device); device_add(&sst_flash_29ee010_device); @@ -2037,7 +2039,7 @@ machine_at_sbc490_init(const machine_t *model) device_add(machine_get_vid_device(machine)); device_add(&ali1489_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_ami_device); device_add(&sst_flash_29ee010_device); @@ -2062,8 +2064,8 @@ machine_at_tf486_init(const machine_t *model) pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&ali1489_device); - device_add(&w83977ef_device); - device_add(&kbc_at_device); + device_add(&kbc_at_phoenix_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_NO_NVR)); device_add(&sst_flash_29ee010_device); return ret; @@ -2085,7 +2087,7 @@ machine_at_arb1476_init(const machine_t *model) pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); device_add(&ali1489_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&kbc_ps2_device); device_add(&sst_flash_29ee010_device); @@ -2103,14 +2105,13 @@ machine_at_itoxstar_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init(model); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 2, 3, 4); - device_add(&w83977f_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_client_device); device_add(&sst_flash_29ee020_device); device_add(&w83781d_device); /* fans: Chassis, CPU, unused; temperatures: Chassis, CPU, unused */ @@ -2132,7 +2133,7 @@ machine_at_arb1423c_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init(model); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -2140,8 +2141,7 @@ machine_at_arb1423c_init(const machine_t *model) pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 0, 0, 0); pci_register_slot(0x1E, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x1D, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&w83977f_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_consumer2_device); device_add(&winbond_flash_w29c020_device); @@ -2159,7 +2159,7 @@ machine_at_arb1479_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init(model); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -2167,8 +2167,7 @@ machine_at_arb1479_init(const machine_t *model) pci_register_slot(0x1F, PCI_CARD_NORMAL, 1, 0, 0, 0); pci_register_slot(0x1E, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x1D, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&w83977f_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_consumer2_device); device_add(&winbond_flash_w29c020_device); @@ -2186,13 +2185,12 @@ machine_at_iach488_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init(model); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); pci_register_slot(0x0C, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&w83977f_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI)); device_add(&stpc_consumer2_device); device_add(&sst_flash_29ee020_device); @@ -2210,7 +2208,7 @@ machine_at_pcm9340_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init(model); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -2218,9 +2216,8 @@ machine_at_pcm9340_init(const machine_t *model) pci_register_slot(0x1D, PCI_CARD_NORMAL, 4, 1, 2, 3); pci_register_slot(0x1E, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x1F, PCI_CARD_NORMAL, 2, 3, 4, 1); - device_add_inst(&w83977f_device, 1); - device_add_inst(&w83977f_device, 2); - device_add(&kbc_ps2_ami_pci_device); + device_add_inst_params(&w83977_device, 1, (void *) (W83977F | W83977_AMI)); + device_add_inst_params(&w83977_device, 2, (void *) W83977F); device_add(&stpc_elite_device); device_add(&sst_flash_29ee020_device); @@ -2238,7 +2235,7 @@ machine_at_pcm5330_init(const machine_t *model) if (bios_only || !ret) return ret; - machine_at_common_init(model); + machine_at_common_init_ex(model, 2); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x0B, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -2247,8 +2244,7 @@ machine_at_pcm5330_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_SOUTHBRIDGE_USB, 1, 2, 3, 4); pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&stpc_serial_device); - device_add(&w83977f_370_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977F | W83977_370 | W83977_AMI)); device_add(&stpc_atlas_device); device_add(&sst_flash_29ee020_device); @@ -2279,7 +2275,7 @@ machine_at_ecs486_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886f_device); device_add(&ide_cmd640_pci_legacy_only_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); device_add(&kbc_ps2_ami_device); @@ -2358,9 +2354,9 @@ machine_at_hot433a_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886bf_device); if (is_award) - device_add(&um8663af_device); + device_add_params(&um866x_device, (void *) UM8663AF); else - device_add(&um8669f_device); + device_add_params(&um8669f_device, (void *) 0); device_add(&winbond_flash_w29c010_device); if (is_award) device_add(&kbc_ps2_ami_device); @@ -2394,7 +2390,7 @@ machine_at_84xxuuda_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886bf_device); - device_add(&um8663bf_device); + device_add_params(&um866x_device, (void *) UM8663BF); device_add(&winbond_flash_w29c010_device); device_add(&kbc_ps2_ami_device); @@ -2425,7 +2421,7 @@ machine_at_pl4600c_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886af_device); - device_add(&um8663af_device); + device_add_params(&um866x_device, (void *) UM8663AF); device_add(&sst_flash_29ee010_device); device_add(&kbc_ps2_ami_pci_device); @@ -2496,7 +2492,7 @@ machine_at_actionpc2600_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886bf_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); device_add(&kbc_ps2_tg_ami_device); @@ -2528,7 +2524,7 @@ machine_at_actiontower8400_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886f_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&ide_cmd640_pci_device); device_add(&intel_flash_bxt_device); // The ActionPC 2600 has this so I'm gonna assume this does too. device_add(&kbc_ps2_ami_pci_device); @@ -2560,7 +2556,7 @@ machine_at_m919_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886af_device); /* AF is correct - the BIOS does IDE writes to ports 108h and 109h. */ - device_add(&um8663bf_device); + device_add_params(&um866x_device, (void *) UM8663BF); device_add(&sst_flash_29ee010_device); device_add(&kbc_at_ami_device); @@ -2589,7 +2585,7 @@ machine_at_spc7700plw_init(const machine_t *model) device_add(&umc_hb4_device); device_add(&umc_8886af_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); device_add(&kbc_ps2_ami_device); @@ -2611,7 +2607,7 @@ machine_at_ms4134_init(const machine_t *model) device_add(&ali1429g_device); - device_add(&fdc37c665_ide_pri_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); pci_init(FLAG_MECHANISM_1 | FLAG_MECHANISM_2 | PCI_ALWAYS_EXPOSE_DEV0); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -2645,7 +2641,7 @@ machine_at_tg486gp_init(const machine_t *model) device_add(&ali1429g_device); - device_add(&fdc37c665_ide_pri_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); pci_init(FLAG_MECHANISM_1 | FLAG_MECHANISM_2 | PCI_ALWAYS_EXPOSE_DEV0); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); @@ -2678,7 +2674,7 @@ machine_at_tg486g_init(const machine_t *model) device_add(&amstrad_megapc_nvr_device); device_add(&sis_85c471_device); device_add(&ide_isa_device); - device_add(&fdc37c651_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI)); device_add(&kbc_ps2_tg_ami_pci_device); if (gfxcard[0] != VID_INTERNAL) { @@ -2705,7 +2701,7 @@ machine_at_dvent4xx_init(const machine_t *model) machine_at_common_init(model); device_add(&sis_85c471_device); device_add(&ide_cmd640_vlb_pri_device); - device_add(&fdc37c665_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&kbc_ps2_phoenix_device); if (gfxcard[0] == VID_INTERNAL) @@ -2753,7 +2749,7 @@ machine_at_ap4100aa_init(const machine_t *model) device_add(&ali1429g_device); device_add(&kbc_ps2_ami_pci_device); device_add(&ide_vlb_device); - device_add(&um8663bf_device); + device_add_params(&um866x_device, (void *) UM8663BF); return ret; } @@ -2886,7 +2882,7 @@ machine_at_cobalt_init(const machine_t *model) device_add(&opti499_device); device_add(&ide_opti611_vlb_device); device_add(&ide_isa_sec_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_ami_device); @@ -2911,7 +2907,7 @@ machine_at_cougar_init(const machine_t *model) device_add(&ide_vlb_device); device_add(&opti499_device); - device_add(&fdc37c665_ide_pri_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); device_add(&kbc_at_ami_device); diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_386sx.c similarity index 54% rename from src/machine/m_at_286_386sx.c rename to src/machine/m_at_386sx.c index 8f2c9215f..d52cd6611 100644 --- a/src/machine/m_at_286_386sx.c +++ b/src/machine/m_at_386sx.c @@ -6,15 +6,13 @@ * * This file is part of the 86Box distribution. * - * Implementation of 286 and 386SX machines. - * - * + * Implementation of 386SX machines. * * Authors: Miran Grca, * EngiNerd * - * Copyright 2016-2019 Miran Grca. - * Copyright 2020 EngiNerd. + * Copyright 2016-2025 Miran Grca. + * Copyright 2020-2025 EngiNerd. */ #include #include @@ -45,104 +43,31 @@ #include <86box/flash.h> #include <86box/machine.h> +/* ISA */ +/* + * Current bugs: + * - soft-reboot after saving CMOS settings/pressing ctrl-alt-del produces an 8042 error + */ int -machine_at_mr286_init(const machine_t *model) +machine_at_pc916sx_init(const machine_t *model) { int ret; - ret = bios_load_interleaved("roms/machines/mr286/V000B200-1", - "roms/machines/mr286/V000B200-2", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_ide_init(model); - device_add(&kbc_at_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -static void -machine_at_headland_common_init(const machine_t *model, int type) -{ - device_add(&kbc_at_ami_device); - - if ((type != 2) && (fdc_current[0] == FDC_INTERNAL)) - device_add(&fdc_at_device); - - if (type == 2) - device_add(&headland_ht18b_device); - else if (type == 1) - device_add(&headland_gc113_device); - else - device_add(&headland_gc10x_device); -} - -int -machine_at_tg286m_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/tg286m/ami.bin", - 0x000f0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_ide_init(model); - - machine_at_headland_common_init(model, 1); - - return ret; -} - -int -machine_at_ama932j_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/ama932j/ami.bin", - 0x000f0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_ide_init(model); - - if (gfxcard[0] == VID_INTERNAL) - device_add(&oti067_ama932j_device); - - machine_at_headland_common_init(model, 2); - - device_add_params(&pc87310_device, (void *) (PC87310_ALI)); - - return ret; -} - -int -machine_at_quadt286_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/quadt286/QUADT89L.ROM", - "roms/machines/quadt286/QUADT89H.ROM", + ret = bios_load_interleaved("roms/machines/pc916sx/ncr_386sx_u46-17_7.3.bin", + "roms/machines/pc916sx/ncr_386sx_u12-19_7.3.bin", 0x000f0000, 65536, 0); if (bios_only || !ret) return ret; machine_at_common_init(model); - device_add(&kbc_at_device); + + device_add(&kbc_at_ncr_device); + mem_remap_top(384); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&headland_gc10x_device); - return ret; } @@ -169,6 +94,7 @@ machine_at_quadt386sx_init(const machine_t *model) return ret; } +/* ACC2036 */ static const device_config_t pbl300sx_config[] = { // clang-format off { @@ -227,7 +153,7 @@ machine_at_pbl300sx_init(const machine_t *model) device_add(&acc2036_device); device_add(&kbc_ps2_phoenix_device); - device_add(&um82c862f_ide_device); + device_add_params(&um866x_device, (void *) (UM82C862F | UM866X_IDE_PRI)); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -235,33 +161,13 @@ machine_at_pbl300sx_init(const machine_t *model) return ret; } +/* ALi M1217 */ int -machine_at_neat_init(const machine_t *model) +machine_at_arb1374_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/dtk386/3cto001.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_init(model); - - device_add(&neat_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -int -machine_at_neat_ami_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/ami286/AMIC206.BIN", + ret = bios_load_linear("roms/machines/arb1374/1374s.rom", 0x000f0000, 65536, 0); if (bios_only || !ret) @@ -269,290 +175,20 @@ machine_at_neat_ami_init(const machine_t *model) machine_at_common_init(model); - device_add(&neat_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&kbc_at_ami_device); - - return ret; -} - -// TODO -// Onboard Paradise PVGA1A-JK VGA Graphics -// Data Technology Corporation DTC7187 RLL Controller (Optional) -int -machine_at_ataripc4_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/ataripc4/AMI_PC4X_1.7_EVEN.BIN", - "roms/machines/ataripc4/AMI_PC4X_1.7_ODD.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&neat_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&kbc_at_ami_device); - - return ret; -} - -int -machine_at_px286_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/px286/KENITEC.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - device_add(&kbc_at_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&neat_device); - - return ret; -} - -static void -machine_at_ctat_common_init(const machine_t *model) -{ - machine_at_common_init(model); - - device_add(&cs8220_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&kbc_at_phoenix_device); -} - -int -machine_at_dells200_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/dells200/dellL200256_LO_@DIP28.BIN", - "roms/machines/dells200/Dell200256_HI_@DIP28.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_ctat_common_init(model); - - return ret; -} - -int -machine_at_at122_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/at122/FINAL.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_ctat_common_init(model); - - return ret; -} - -int -machine_at_tuliptc7_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleavedr("roms/machines/tuliptc7/tc7be.bin", - "roms/machines/tuliptc7/tc7bo.bin", - 0x000f8000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_ctat_common_init(model); - - return ret; -} - -int -machine_at_wellamerastar_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/wellamerastar/W_3.031_L.BIN", - "roms/machines/wellamerastar/W_3.031_H.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_ctat_common_init(model); - - return ret; -} - -static void -machine_at_scat_init(const machine_t *model, int is_v4, int is_ami) -{ - machine_at_common_init(model); - - if (machines[machine].bus_flags & MACHINE_BUS_PS2) { - if (is_ami) - device_add(&kbc_ps2_ami_device); - else - device_add(&kbc_ps2_device); - } else { - if (is_ami) - device_add(&kbc_at_ami_device); - else - device_add(&kbc_at_device); - } - - if (is_v4) - device_add(&scat_4_device); - else - device_add(&scat_device); -} - -static void -machine_at_scatsx_init(const machine_t *model) -{ - machine_at_common_init(model); - - device_add(&kbc_at_ami_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&scat_sx_device); -} - -int -machine_at_award286_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/award286/award.bin", - 0x000f0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_scat_init(model, 0, 1); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - + device_add(&ali1217_device); device_add(&ide_isa_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0 | W83XX7_IDE_PRI)); + device_add(&kbc_ps2_ami_device); return ret; } int -machine_at_gdc212m_init(const machine_t *model) +machine_at_sbc350a_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/gdc212m/gdc212m_72h.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_scat_init(model, 0, 1); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&ide_isa_device); - - return ret; -} - -int -machine_at_gw286ct_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/gw286ct/2ctc001.bin", - 0x000f0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - device_add(&f82c710_device); - - machine_at_scat_init(model, 1, 0); - - device_add(&ide_isa_device); - - return ret; -} - -int -machine_at_drsm35286_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/drsm35286/syab04-665821fb81363428830424.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - device_add(&ide_isa_device); - device_add(&fdc37c651_ide_device); - - machine_at_scat_init(model, 1, 0); - - if (gfxcard[0] == VID_INTERNAL) - device_add(machine_get_vid_device(machine)); - - return ret; -} - -int -machine_at_senor_scat286_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/senor286/AMI-DSC2-1115-061390-K8.rom", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_scat_init(model, 0, 1); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -int -machine_at_super286c_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/super286c/hyundai_award286.bin", + ret = bios_load_linear("roms/machines/sbc350a/350a.rom", 0x000f0000, 65536, 0); if (bios_only || !ret) @@ -560,130 +196,147 @@ machine_at_super286c_init(const machine_t *model) machine_at_common_init(model); - device_add(&kbc_at_ami_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&cs8220_device); - - return ret; -} - -int -machine_at_super286tr_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/super286tr/hyundai_award286.bin", - 0x000f0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_scat_init(model, 0, 1); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -int -machine_at_spc4200p_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/spc4200p/u8.01", - 0x000f0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_scat_init(model, 0, 1); - - device_add(&f82c710_device); - + device_add(&ali1217_device); device_add(&ide_isa_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); + device_add(&kbc_ps2_ami_device); return ret; } int -machine_at_spc4216p_init(const machine_t *model) +machine_at_flytech386_init(const machine_t *model) { int ret; - ret = bios_load_interleaved("roms/machines/spc4216p/7101.U8", - "roms/machines/spc4216p/AC64.U10", - 0x000f0000, 131072, 0); + ret = bios_load_linear("roms/machines/flytech386/FLYTECH.BIO", + 0x000f0000, 65536, 0); if (bios_only || !ret) return ret; - machine_at_scat_init(model, 1, 1); + machine_at_common_init(model); - device_add(&f82c710_device); - - return ret; -} - -int -machine_at_spc4620p_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/spc4620p/31005h.u8", - "roms/machines/spc4620p/31005h.u10", - 0x000f0000, 131072, 0x8000); - - if (bios_only || !ret) - return ret; + device_add(&ali1217_device); + device_add(&ide_isa_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89 | W83XX7_IDE_PRI | W837X7_IDE_START)); if (gfxcard[0] == VID_INTERNAL) - device_add(&ati28800k_spc4620p_device); + device_add(&tvga8900d_device); - machine_at_scat_init(model, 1, 1); - - device_add(&f82c710_device); - - device_add(&ide_isa_device); + device_add(&kbc_at_ami_device); return ret; } int -machine_at_kmxc02_init(const machine_t *model) +machine_at_325ax_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/kmxc02/3ctm005.bin", - 0x000f0000, 131072, 0); + ret = bios_load_linear("roms/machines/325ax/M27C512.BIN", + 0x000f0000, 65536, 0); if (bios_only || !ret) return ret; - machine_at_scatsx_init(model); + machine_at_common_init(model); + + device_add(&ali1217_device); + device_add(&fdc_at_device); + device_add(&kbc_at_ami_device); return ret; } int -machine_at_deskmaster286_init(const machine_t *model) +machine_at_mr1217_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/deskmaster286/SAMSUNG-DESKMASTER-28612-ROM.BIN", + ret = bios_load_linear("roms/machines/mr1217/mrbios.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + device_add(&ali1217_device); + device_add(&fdc_at_device); + device_add(&kbc_at_ami_device); + + return ret; +} + +/* ALi M1409 */ +int +machine_at_acer100t_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/acer100t/acer386.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_ps2_ide_init(model); + + device_add(&ali1409_device); + if (gfxcard[0] == VID_INTERNAL) + device_add(&oti077_acer100t_device); + + device_add_params(&pc87310_device, (void *) (PC87310_ALI)); + + return ret; +} + +/* HT18 */ +int +machine_at_ama932j_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/ama932j/ami.bin", 0x000f0000, 131072, 0); if (bios_only || !ret) return ret; - machine_at_scat_init(model, 0, 1); + machine_at_common_ide_init(model); - device_add(&f82c710_device); - - device_add(&ide_isa_device); + if (gfxcard[0] == VID_INTERNAL) + device_add(&oti067_ama932j_device); + + machine_at_headland_common_init(model, 2); + + device_add_params(&pc87310_device, (void *) (PC87310_ALI)); + + return ret; +} + +/* Intel 82335 */ +int +machine_at_adi386sx_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/adi386sx/3iip001l.bin", + "roms/machines/adi386sx/3iip001h.bin", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); + device_add(&amstrad_megapc_nvr_device); /* NVR that is initialized to all 0x00's. */ + + device_add(&intel_82335_device); + device_add(&kbc_at_ami_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); return ret; } @@ -711,54 +364,7 @@ machine_at_shuttle386sx_init(const machine_t *model) return ret; } -int -machine_at_adi386sx_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/adi386sx/3iip001l.bin", - "roms/machines/adi386sx/3iip001h.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init_ex(model, 2); - device_add(&amstrad_megapc_nvr_device); /* NVR that is initialized to all 0x00's. */ - - device_add(&intel_82335_device); - device_add(&kbc_at_ami_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -int -machine_at_wd76c10_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/megapc/41651-bios lo.u18", - "roms/machines/megapc/211253-bios hi.u19", - 0x000f0000, 65536, 0x08000); - - if (bios_only || !ret) - return ret; - - machine_at_common_init_ex(model, 2); - - if (gfxcard[0] == VID_INTERNAL) - device_add(¶dise_wd90c11_megapc_device); - - device_add(&kbc_ps2_quadtel_device); - - device_add(&wd76c10_device); - - return ret; -} - +/* NEAT */ int machine_at_cmdsl386sx16_init(const machine_t *model) { @@ -786,6 +392,28 @@ machine_at_cmdsl386sx16_init(const machine_t *model) return ret; } +int +machine_at_neat_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/dtk386/3cto001.bin", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_init(model); + + device_add(&neat_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + return ret; +} + +/* NEATsx */ int machine_at_if386sx_init(const machine_t *model) { @@ -819,22 +447,29 @@ machine_at_if386sx_init(const machine_t *model) return ret; } -static void -machine_at_scamp_common_init(const machine_t *model, int is_ps2) +/* OPTi 291 */ +int +machine_at_awardsx_init(const machine_t *model) { - machine_at_common_ide_init(model); + int ret; - if (is_ps2) - device_add(&kbc_ps2_ami_device); - else - device_add(&kbc_at_ami_device); + ret = bios_load_linear("roms/machines/awardsx/Unknown 386SX OPTi291 - Award (original).BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_init(model); + + device_add(&opti291_device); if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - device_add(&vlsi_scamp_device); + return ret; } +/* SCAMP */ int machine_at_cmdsl386sx25_init(const machine_t *model) { @@ -861,6 +496,38 @@ machine_at_cmdsl386sx25_init(const machine_t *model) return ret; } +static void +machine_at_scamp_common_init(const machine_t *model, int is_ps2) +{ + machine_at_common_ide_init(model); + + if (is_ps2) + device_add(&kbc_ps2_ami_device); + else + device_add(&kbc_at_ami_device); + + if (fdc_current[0] == FDC_INTERNAL) + device_add(&fdc_at_device); + + device_add(&vlsi_scamp_device); +} + +int +machine_at_dataexpert386sx_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/dataexpert386sx/5e9f20e5ef967717086346.BIN", + 0x000f0000, 65536, 0); + + if (bios_only || !ret) + return ret; + + machine_at_scamp_common_init(model, 0); + + return ret; +} + static const device_config_t dells333sl_config[] = { // clang-format off { @@ -922,7 +589,7 @@ machine_at_dells333sl_init(const machine_t *model) device_add(&ide_isa_device); - device_add(&pc87311_device); + device_add_params(&pc873xx_device, (void *) (PCX73XX_IDE_PRI | PCX730X_26E)); device_add(&vl82c113_device); /* The keyboard controller is part of the VL82c113. */ device_add(&vlsi_scamp_device); @@ -930,22 +597,6 @@ machine_at_dells333sl_init(const machine_t *model) return ret; } -int -machine_at_dataexpert386sx_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/dataexpert386sx/5e9f20e5ef967717086346.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_scamp_common_init(model, 0); - - return ret; -} - int machine_at_spc6033p_init(const machine_t *model) { @@ -965,301 +616,57 @@ machine_at_spc6033p_init(const machine_t *model) return ret; } -int -machine_at_awardsx_init(const machine_t *model) +/* SCATsx */ +static void +machine_at_scatsx_init(const machine_t *model) { - int ret; - - ret = bios_load_linear("roms/machines/awardsx/Unknown 386SX OPTi291 - Award (original).BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_init(model); - - device_add(&opti291_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -int -machine_at_acer100t_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/acer100t/acer386.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_ps2_ide_init(model); - - device_add(&ali1409_device); - if (gfxcard[0] == VID_INTERNAL) - device_add(&oti077_acer100t_device); - - device_add_params(&pc87310_device, (void *) (PC87310_ALI)); - - return ret; -} - - -int -machine_at_arb1374_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/arb1374/1374s.rom", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - machine_at_common_init(model); - device_add(&ali1217_device); - device_add(&w83787f_ide_en_device); - device_add(&kbc_ps2_ami_device); - - return ret; -} - -int -machine_at_sbc350a_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/sbc350a/350a.rom", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&ali1217_device); - device_add(&ide_isa_device); - device_add(&fdc37c665_ide_pri_device); - device_add(&kbc_ps2_ami_device); - - return ret; -} - -int -machine_at_flytech386_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/flytech386/FLYTECH.BIO", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&ali1217_device); - device_add(&w83787f_ide_en_device); - - if (gfxcard[0] == VID_INTERNAL) - device_add(&tvga8900d_device); - device_add(&kbc_at_ami_device); - return ret; -} - -int -machine_at_325ax_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/325ax/M27C512.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&ali1217_device); - device_add(&fdc_at_device); - device_add(&kbc_at_ami_device); - - return ret; -} - -int -machine_at_mr1217_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/mr1217/mrbios.BIN", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&ali1217_device); - device_add(&fdc_at_device); - device_add(&kbc_at_ami_device); - - return ret; -} - -int -machine_at_pja511m_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/pja511m/2006915102435734.rom", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add_inst(&fdc37c669_device, 1); - device_add_inst(&fdc37c669_device, 2); - device_add(&kbc_ps2_ami_pci_device); - device_add(&ali6117d_device); - device_add(&sst_flash_29ee010_device); - - return ret; -} - -int -machine_at_prox1332_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/prox1332/D30B3AC1.BIN", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&fdc37c669_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&ali6117d_device); - device_add(&sst_flash_29ee010_device); - - return ret; -} - -/* - * Current bugs: - * - ctrl-alt-del produces an 8042 error - */ -int -machine_at_pc8_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/pc8/ncr_35117_u127_vers.4-2.bin", - "roms/machines/pc8/ncr_35116_u113_vers.4-2.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - device_add(&kbc_at_ncr_device); - if (fdc_current[0] == FDC_INTERNAL) device_add(&fdc_at_device); - return ret; + device_add(&scat_sx_device); } int -machine_at_3302_init(const machine_t *model) +machine_at_kmxc02_init(const machine_t *model) { int ret; - ret = bios_load_linear("roms/machines/3302/f000-flex_drive_test.bin", - 0x000f0000, 65536, 0); - - if (ret) { - ret &= bios_load_aux_linear("roms/machines/3302/f800-setup_ncr3.5-013190.bin", - 0x000f8000, 32768, 0); - } + ret = bios_load_linear("roms/machines/kmxc02/3ctm005.bin", + 0x000f0000, 131072, 0); if (bios_only || !ret) return ret; - machine_at_common_ide_init(model); - device_add(&neat_device); + machine_at_scatsx_init(model); - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); + return ret; +} + +/* WD76C10 */ +int +machine_at_wd76c10_init(const machine_t *model) +{ + int ret; + + ret = bios_load_interleaved("roms/machines/megapc/41651-bios lo.u18", + "roms/machines/megapc/211253-bios hi.u19", + 0x000f0000, 65536, 0x08000); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); if (gfxcard[0] == VID_INTERNAL) - device_add(machine_get_vid_device(machine)); + device_add(¶dise_wd90c11_megapc_device); - device_add(&kbc_at_ncr_device); - - return ret; -} - -/* - * Current bugs: - * - soft-reboot after saving CMOS settings/pressing ctrl-alt-del produces an 8042 error - */ -int -machine_at_pc916sx_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/pc916sx/ncr_386sx_u46-17_7.3.bin", - "roms/machines/pc916sx/ncr_386sx_u12-19_7.3.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&kbc_at_ncr_device); - mem_remap_top(384); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -int -machine_at_m290_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/m290/m290_pep3_1.25.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init_ex(model, 6); - device_add(&amstrad_megapc_nvr_device); - - device_add(&olivetti_eva_device); - device_add(&port_6x_olivetti_device); - - if (fdc_current[0] == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&kbc_at_olivetti_device); + device_add(&kbc_ps2_quadtel_device); + + device_add(&wd76c10_device); return ret; } diff --git a/src/machine/m_at_m6117.c b/src/machine/m_at_m6117.c new file mode 100644 index 000000000..9558dacf3 --- /dev/null +++ b/src/machine/m_at_m6117.c @@ -0,0 +1,88 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Implementation of 386SX machines. + * + * Authors: Miran Grca, + * EngiNerd + * + * Copyright 2016-2025 Miran Grca. + * Copyright 2020-2025 EngiNerd. + */ +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include "cpu.h" +#include <86box/timer.h> +#include <86box/io.h> +#include <86box/device.h> +#include <86box/chipset.h> +#include <86box/keyboard.h> +#include <86box/mem.h> +#include <86box/rom.h> +#include <86box/fdd.h> +#include <86box/fdc.h> +#include <86box/fdc_ext.h> +#include <86box/hdc.h> +#include <86box/nvr.h> +#include <86box/port_6x.h> +#define USE_SIO_DETECT +#include <86box/sio.h> +#include <86box/serial.h> +#include <86box/video.h> +#include <86box/vid_cga.h> +#include <86box/flash.h> +#include <86box/machine.h> + +/* ALi M6117D */ +int +machine_at_pja511m_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/pja511m/2006915102435734.rom", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + device_add_inst_params(&fdc37c669_device, 1, (void *) FDC37C6XX_IDE_PRI); + device_add_inst_params(&fdc37c669_device, 2, (void *) 0); + device_add(&kbc_ps2_ami_pci_device); + device_add(&ali6117d_device); + device_add(&sst_flash_29ee010_device); + + return ret; +} + +int +machine_at_prox1332_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/prox1332/D30B3AC1.BIN", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + device_add_params(&fdc37c669_device, (void *) FDC37C6XX_370); + device_add(&kbc_ps2_ami_pci_device); + device_add(&ali6117d_device); + device_add(&sst_flash_29ee010_device); + + return ret; +} diff --git a/src/machine/m_at_misc.c b/src/machine/m_at_misc.c index b6d16246c..ad26f56e5 100644 --- a/src/machine/m_at_misc.c +++ b/src/machine/m_at_misc.c @@ -65,8 +65,7 @@ machine_at_vpc2007_init(const machine_t *model) pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i440bx_no_agp_device); device_add(&piix4e_device); - device_add(&w83977f_370_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977F | W83977_370 | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); /* real VPC provides invalid SPD data */ diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 0bbadca0c..9c4875094 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -110,7 +110,7 @@ machine_at_kn97_init(const machine_t *model) device_add(&i440fx_device); device_add(&piix3_device); device_add(&kbc_ps2_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&intel_flash_bxt_device); device_add(&lm78_device); /* fans: Chassis, CPU, Power; temperature: MB */ for (uint8_t i = 0; i < 3; i++) @@ -142,8 +142,7 @@ machine_at_lx6_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440lx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977tf_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -272,8 +271,7 @@ machine_at_p6i440e2_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440ex_device); device_add(&piix4_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977tf_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x03, 256); device_add(&w83781d_device); /* fans: CPU, CHS, PS; temperatures: unused, CPU, System */ @@ -308,8 +306,7 @@ machine_at_p2bls_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); #if 0 device_add(ics9xxx_get(ICS9150_08)); /* setting proper speeds requires some interaction with the AS97127F ASIC */ #endif @@ -345,8 +342,7 @@ machine_at_lgibmx7g_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977tf_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&winbond_flash_w29c020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -378,8 +374,7 @@ machine_at_p3bf_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(ics9xxx_get(ICS9250_08)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -415,8 +410,7 @@ machine_at_bf6_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -446,8 +440,7 @@ machine_at_bx6_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_pci_device); - device_add(&w83977f_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -478,8 +471,7 @@ machine_at_ax6bc_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977tf_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_29ee020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&gl518sm_2d_device); /* fans: System, CPU; temperature: CPU; no reporting in BIOS */ @@ -510,8 +502,7 @@ machine_at_atc6310bxii_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&slc90e66_device); - device_add(&kbc_ps2_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -541,8 +532,7 @@ machine_at_686bx_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977tf_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); device_add(&w83781d_device); /* fans: CPU, unused, unused; temperatures: unused, CPU, unused */ @@ -580,8 +570,7 @@ machine_at_p6sba_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&w83977tf_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&w83781d_device); /* fans: CPU1, CPU2, Thermal Control; temperatures: unused, CPU1, CPU2? */ @@ -653,7 +642,7 @@ machine_at_ficka6130_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro_device); device_add(&via_vt82c596a_device); - device_add(&w83877tf_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_29ee020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -686,8 +675,7 @@ machine_at_p3v133_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro133_device); device_add(&via_vt82c596b_device); - device_add(&w83977ef_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(ics9xxx_get(ICS9248_39)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); @@ -723,8 +711,7 @@ machine_at_p3v4x_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro133a_device); device_add(&via_vt82c596b_device); - device_add(&w83977ef_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(ics9xxx_get(ICS9250_18)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); @@ -756,8 +743,7 @@ machine_at_gt694va_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro133a_device); device_add(&via_vt82c596b_device); - device_add(&w83977ef_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 1024); device_add(&w83782d_device); /* fans: CPU, unused, unused; temperatures: System, CPU1, unused */ @@ -821,12 +807,11 @@ machine_at_ms6168_common_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440zx_device); device_add(&piix4e_device); - device_add(&w83977ef_device); if (gfxcard[0] == VID_INTERNAL) device_add(&voodoo_3_2000_agp_onboard_8m_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); diff --git a/src/machine/m_at_slot2.c b/src/machine/m_at_slot2.c index b9c556206..461ad925a 100644 --- a/src/machine/m_at_slot2.c +++ b/src/machine/m_at_slot2.c @@ -65,8 +65,7 @@ machine_at_6gxu_init(const machine_t *model) device_add(&i440gx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); device_add(&w83782d_device); /* fans: CPU, Power, System; temperatures: System, CPU, unused */ @@ -102,8 +101,7 @@ machine_at_s2dge_init(const machine_t *model) device_add(&i440gx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977tf_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0xF, 512); device_add(&w83781d_device); /* fans: CPU1, CPU2, Thermal Control; temperatures: unused, CPU1, CPU2? */ diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index fe87564e7..de07d8c41 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -63,8 +63,7 @@ machine_at_s370slm_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440lx_device); device_add(&piix4e_device); - device_add(&w83977tf_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&w83781d_device); /* fans: CPU, Fan 2, Chassis; temperatures: unused, CPU, unused */ @@ -98,8 +97,7 @@ machine_at_prosignias31x_bx_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&w83977ef_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&winbond_flash_w29c020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&gl520sm_2d_device); /* fans: CPU, Chassis; temperature: System */ @@ -139,8 +137,7 @@ machine_at_s1857_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -176,8 +173,7 @@ machine_at_p6bap_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro133a_device); /* Rebranded as ET82C693A */ device_add(&via_vt82c596b_device); /* Rebranded as ET82C696B */ - device_add(&w83977ef_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -211,8 +207,7 @@ machine_at_p6bat_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro133_device); device_add(&via_vt82c596b_device); - device_add(&w83977ef_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -248,8 +243,7 @@ machine_at_cubx_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&ide_cmd648_ter_qua_onboard_device); device_add(ics9xxx_get(ICS9250_08)); device_add(&sst_flash_39sf020_device); @@ -283,8 +277,7 @@ machine_at_atc7020bxii_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&slc90e66_device); - device_add(&kbc_ps2_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0xF, 256); @@ -355,8 +348,7 @@ machine_at_ambx133_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add(&w83977ef_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); device_add(&gl518sm_2d_device); /* fans: CPUFAN1, CPUFAN2; temperature: CPU */ @@ -391,9 +383,8 @@ machine_at_awo671r_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440bx_device); device_add(&piix4e_device); - device_add_inst(&w83977ef_device, 1); - device_add_inst(&w83977ef_device, 2); - device_add(&kbc_ps2_pci_device); + device_add_inst_params(&w83977_device, 1, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); + device_add_inst_params(&w83977_device, 2, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&sst_flash_39sf020_device); if (gfxcard[0] == VID_INTERNAL) device_add(machine_get_vid_device(machine)); @@ -426,8 +417,7 @@ machine_at_63a1_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&i440zx_device); device_add(&piix4e_device); - device_add(&w83977tf_device); - device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -457,7 +447,7 @@ machine_at_apas3_init(const machine_t *model) pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); device_add(&via_apro_device); device_add(&via_vt82c586b_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&kbc_ps2_ami_pci_device); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); diff --git a/src/machine/m_at_socket4.c b/src/machine/m_at_socket4.c index 402489d89..6fd66bae6 100644 --- a/src/machine/m_at_socket4.c +++ b/src/machine/m_at_socket4.c @@ -130,7 +130,7 @@ machine_at_premiere_common_init(const machine_t *model, int pci_switch) device_add(&kbc_ps2_phoenix_device); device_add(&sio_zb_device); device_add(&ide_rz1000_pci_single_channel_device); - device_add(&fdc37c665_ide_sec_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&intel_flash_bxt_ami_device); } @@ -153,7 +153,7 @@ machine_at_sp4_common_init(const machine_t *model) device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); } @@ -177,7 +177,7 @@ machine_at_excaliburpci_init(const machine_t *model) pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0D, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_ami_pci_device); device_add(&ide_cmd640_pci_legacy_only_device); @@ -245,7 +245,7 @@ machine_at_dellxp60_init(const machine_t *model) device_add(&i430lx_device); device_add(&kbc_ps2_phoenix_device); device_add(&sio_zb_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_ami_device); return ret; @@ -276,7 +276,7 @@ machine_at_opti560l_init(const machine_t *model) device_add(&i430lx_device); device_add(&kbc_ps2_phoenix_device); device_add(&sio_zb_device); - device_add(&i82091aa_device); + device_add_params(&i82091aa_device, (void *) I82091AA_022); device_add(&intel_flash_bxt_ami_device); return ret; @@ -308,7 +308,7 @@ machine_at_ambradp60_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&kbc_ps2_phoenix_device); device_add(&sio_zb_device); - device_add(&fdc37c665_ide_pri_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); device_add(&intel_flash_bxt_ami_device); device_add(&i430lx_device); @@ -341,7 +341,7 @@ machine_at_valuepointp60_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&kbc_ps2_ps1_pci_device); device_add(&sio_device); - device_add(&fdc37c665_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); device_add(&intel_flash_bxt_ami_device); device_add(&i430lx_device); @@ -441,7 +441,7 @@ machine_at_pb520r_init(const machine_t *model) device_add(&kbc_ps2_pci_device); device_add(&sio_zb_device); - device_add(&i82091aa_ide_device); + device_add_params(&i82091aa_device, (void *) (I82091AA_022 | I82091AA_IDE_PRI)); device_add(&intel_flash_bxt_ami_device); return ret; @@ -471,7 +471,7 @@ machine_at_m5pi_init(const machine_t *model) device_add(&sio_zb_device); device_add(&kbc_ps2_phoenix_device); device_add(&ide_w83769f_pci_single_channel_device); - device_add(&fdc37c665_ide_sec_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&intel_flash_bxt_ami_device); return ret; @@ -523,7 +523,7 @@ machine_at_excalibur_init(const machine_t *model) device_add(&opti5x7_device); device_add(&ide_opti611_vlb_device); - device_add(&fdc37c661_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C661); device_add(&kbc_ps2_intel_ami_pci_device); return ret; @@ -583,7 +583,7 @@ machine_at_excaliburpci2_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x0C, PCI_CARD_NORMAL, 3, 4, 1, 2); pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&kbc_ps2_ami_pci_device); device_add(&ide_cmd640_pci_legacy_only_device); diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index 0088bc188..01812ffe7 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -109,7 +109,7 @@ machine_at_d842_init(const machine_t *model) device_add(&kbc_ps2_pci_device); device_add(&i430nx_device); device_add(&sio_zb_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); return ret; @@ -202,7 +202,7 @@ machine_at_p54np4_init(const machine_t *model) device_add(&i430nx_device); device_add(&sio_zb_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c665_ide_pri_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); device_add(&intel_flash_bxt_device); return ret; @@ -250,7 +250,7 @@ machine_at_tek932_init(const machine_t *model) device_add(&i430nx_device); device_add(&sio_zb_device); device_add(&ide_vlb_device); - device_add(&fdc37c665_ide_pri_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_PRI)); device_add(&intel_flash_bxt_ami_device); return ret; @@ -279,7 +279,7 @@ machine_at_acerv30_init(const machine_t *model) device_add(&i430fx_device); device_add(&piix_device); device_add(&kbc_ps2_acer_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&sst_flash_29ee010_device); @@ -310,7 +310,7 @@ machine_at_apollo_init(const machine_t *model) device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); - device_add(&pc87332_398_device); + device_add_params(&pc873xx_device, (void *) (PC87332 | PCX730X_398)); device_add(&intel_flash_bxt_device); return ret; @@ -346,7 +346,7 @@ machine_at_optiplexgxl_init(const machine_t *model) device_add(&kbc_ps2_phoenix_pci_device); device_add(&i430fx_device); device_add(&piix_device); - device_add(&pc87332_device); + device_add_params(&pc873xx_device, (void *) (PC87332 | PCX730X_02E)); device_add(&dell_jumper_device); device_add(&intel_flash_bxt_device); @@ -437,7 +437,7 @@ machine_at_powermatev_init(const machine_t *model) device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); return ret; @@ -466,7 +466,7 @@ machine_at_hawk_init(const machine_t *model) device_add(&kbc_ps2_tg_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); return ret; @@ -497,7 +497,7 @@ machine_at_pt2000_init(const machine_t *model) device_add(&kbc_ps2_holtek_device); device_add(&i430fx_device); device_add(&piix_device); - device_add(&pc87332_398_device); + device_add_params(&pc873xx_device, (void *) (PC87332 | PCX730X_398)); device_add(&intel_flash_bxt_device); return ret; @@ -579,7 +579,7 @@ machine_at_ncselp90_init(const machine_t *model) device_add(&sst_flash_29ee010_device); device_add(&kbc_ps2_ami_pci_device); device_add(&ide_opti611_vlb_device); - device_add(&fdc37c665_ide_sec_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&ide_vlb_2ch_device); return ret; @@ -626,7 +626,7 @@ machine_at_sq588_init(const machine_t *model) device_add(&sis_85c50x_device); device_add(&ide_cmd640_pci_single_channel_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c665_ide_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C665 | FDC37C6XX_IDE_SEC)); device_add(&sst_flash_29ee010_device); return ret; @@ -655,7 +655,7 @@ machine_at_p54sps_init(const machine_t *model) device_add(&sis_85c50x_device); device_add(&ide_pci_2ch_device); device_add(&kbc_at_ami_device); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&sst_flash_29ee010_device); return ret; @@ -686,7 +686,7 @@ machine_at_ms5109_init(const machine_t *model) device_add(&sis_550x_85c503_device); device_add(&ide_w83769f_pci_device); device_add(&kbc_ps2_ami_device); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&sst_flash_29ee010_device); return ret; @@ -720,7 +720,7 @@ machine_at_torino_init(const machine_t *model) device_add(&sis_550x_85c503_device); device_add(&ide_um8673f_device); device_add(&kbc_ps2_tg_ami_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_ami_device); return ret; @@ -752,7 +752,7 @@ machine_at_hot539_init(const machine_t *model) device_add(&umc_8886af_device); device_add(&sst_flash_29ee010_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&um8663af_device); + device_add_params(&um866x_device, (void *) UM8663AF); return ret; } diff --git a/src/machine/m_at_socket7.c b/src/machine/m_at_socket7.c index d5fdc7e0f..18ef41711 100644 --- a/src/machine/m_at_socket7.c +++ b/src/machine/m_at_socket7.c @@ -112,7 +112,7 @@ machine_at_ap5vm_init(const machine_t *model) device_add(&i430vx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&ncr53c810_onboard_pci_device); device_add(&intel_flash_bxt_device); @@ -142,7 +142,7 @@ machine_at_p55t2p4_init(const machine_t *model) device_add(&i430hx_device); device_add(&piix3_device); device_add(&kbc_ps2_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&intel_flash_bxt_device); return ret; @@ -384,6 +384,34 @@ machine_at_equium5200_init(const machine_t *model) return ret; } +int +machine_at_p55t2s_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/p55t2s/s6y08t.rom", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&i430hx_device); + device_add(&piix3_device); + device_add_params(&pc87306_device, (void *) PCX730X_AMI); + device_add(&intel_flash_bxt_device); + + return ret; +} + int machine_at_pcv90_init(const machine_t *model) { @@ -458,7 +486,7 @@ machine_at_epc2102_init(const machine_t *model) device_add(&i430hx_device); device_add(&piix3_device); device_add(&kbc_ps2_intel_ami_pci_device); - device_add(&i82091aa_device); + device_add_params(&i82091aa_device, (void *) I82091AA_022); device_add(&sst_flash_39sf010_device); return ret; @@ -487,7 +515,7 @@ machine_at_p55tvp4_init(const machine_t *model) device_add(&i430vx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); // It uses the AMIKEY KBC - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&intel_flash_bxt_device); return ret; @@ -514,8 +542,8 @@ machine_at_5ivg_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); device_add(&i430vx_device); device_add(&piix3_device); - device_add(&kbc_ps2_pci_device); - device_add(&prime3c_device); + device_add(&kbc_ps2_ami_pci_device); + device_add_params(&gm82c803c_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; @@ -544,7 +572,7 @@ machine_at_8500tvxa_init(const machine_t *model) device_add(&i430vx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&um8669f_device); + device_add_params(&um8669f_device, (void *) 0); device_add(&sst_flash_29ee010_device); return ret; @@ -643,6 +671,35 @@ machine_at_dellhannibalp_init(const machine_t *model) return ret; } +int +machine_at_p5vxb_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/p5vxb/P5VXB10.BIN", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); + device_add(&i430vx_device); + device_add(&piix3_device); + device_add(&kbc_ps2_ami_pci_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); + device_add(&sst_flash_29ee010_device); + + return ret; +} + int machine_at_p55va_init(const machine_t *model) { @@ -790,7 +847,7 @@ machine_at_mb520n_init(const machine_t *model) device_add(&i430vx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; @@ -819,7 +876,7 @@ machine_at_i430vx_init(const machine_t *model) device_add(&i430vx_device); device_add(&piix3_device); device_add(&kbc_ps2_pci_device); - device_add(&um8669f_device); + device_add_params(&um8669f_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; @@ -920,8 +977,7 @@ machine_at_nupro592_init(const machine_t *model) device_add(&i430tx_device); device_add(&piix4_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977ef_device); + device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); device_add(&w83781d_device); /* fans: CPU1, unused, unused; temperatures: System, CPU1, unused */ @@ -958,7 +1014,7 @@ machine_at_tx97_init(const machine_t *model) device_add(&i430tx_device); device_add(&piix4_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877tf_acorp_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */ @@ -1073,8 +1129,7 @@ machine_at_ym430tx_init(const machine_t *model) pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&i430tx_device); device_add(&piix4_device); - device_add(&kbc_ps2_pci_device); - device_add(&w83977tf_device); + device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1104,7 +1159,7 @@ machine_at_mb540n_init(const machine_t *model) device_add(&i430tx_device); device_add(&piix4_device); device_add(&kbc_ps2_pci_device); - device_add(&um8669f_device); + device_add_params(&um8669f_device, (void *) 0); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1135,7 +1190,7 @@ machine_at_56a5_init(const machine_t *model) device_add(&i430tx_device); device_add(&piix4_device); device_add(&kbc_ps2_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); @@ -1164,8 +1219,8 @@ machine_at_p5mms98_init(const machine_t *model) pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&i430tx_device); device_add(&piix4_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83977tf_device); + /* This actually has the Winbond W83967AF, for which I can not find any datasheet at all. */ + device_add_params(&w83977_device, (void *) (W83977F | W83977_AMI | W83977_NO_NVR)); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 128); device_add(&lm78_device); /* fans: Thermal, CPU, Chassis; temperature: unused */ @@ -1270,7 +1325,7 @@ machine_at_ficva502_init(const machine_t *model) device_add(&via_vpx_device); device_add(&via_vt82c586b_device); device_add(&kbc_ps2_pci_device); - device_add(&fdc37c669_370_device); + device_add_params(&fdc37c669_device, (void *) FDC37C6XX_370); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -1302,7 +1357,7 @@ machine_at_ficpa2012_init(const machine_t *model) device_add(&via_vp3_device); device_add(&via_vt82c586b_device); device_add(&kbc_ps2_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&sst_flash_29ee010_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); @@ -1334,7 +1389,7 @@ machine_at_via809ds_init(const machine_t *model) device_add(&via_vp3_device); device_add(&via_vt82c586b_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 512); @@ -1364,7 +1419,7 @@ machine_at_r534f_init(const machine_t *model) device_add(&sis_5571_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&sst_flash_29ee010_device); return ret; @@ -1393,7 +1448,7 @@ machine_at_ms5146_init(const machine_t *model) device_add(&sis_5571_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&sst_flash_29ee010_device); return ret; @@ -1422,7 +1477,7 @@ machine_at_cb52xsi_init(const machine_t *model) device_add(&sis_5571_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c669_370_device); + device_add_params(&fdc37c669_device, (void *) FDC37C6XX_370); device_add(&sst_flash_29ee010_device); return ret; @@ -1451,7 +1506,7 @@ machine_at_sp97xv_init(const machine_t *model) pci_register_slot(0x13, PCI_CARD_VIDEO, 1, 2, 3, 4); /* On-chip SiS graphics, absent here. */ device_add(&sis_5581_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&sst_flash_29ee010_device); return ret; @@ -1478,7 +1533,7 @@ machine_at_sq578_init(const machine_t *model) pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 4); device_add(&sis_5581_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877tf_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&sst_flash_29ee010_device); return ret; @@ -1506,7 +1561,7 @@ machine_at_ms5172_init(const machine_t *model) pci_register_slot(0x0B, PCI_CARD_NORMAL, 3, 4, 1, 2); device_add(&sis_5591_1997_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877tf_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&sst_flash_29ee010_device); return ret; diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 706608748..d9933cc08 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -127,7 +127,7 @@ machine_at_p54tp4xe_common_init(const machine_t *model) device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); } @@ -186,7 +186,7 @@ machine_at_exp8551_init(const machine_t *model) device_add(&kbc_ps2_ami_pci_device); device_add(&i430fx_device); device_add(&piix_device); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&sst_flash_29ee010_device); return ret; @@ -389,7 +389,7 @@ machine_at_ms5119_init(const machine_t *model) device_add(&i430fx_device); device_add(&piix_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&sst_flash_29ee010_device); return ret; @@ -484,7 +484,7 @@ machine_at_mb500n_init(const machine_t *model) device_add(&kbc_ps2_pci_device); device_add(&i430fx_device); device_add(&piix_no_mirq_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); return ret; @@ -514,7 +514,7 @@ machine_at_fmb_init(const machine_t *model) device_add(&i430fx_device); device_add(&piix_no_mirq_device); device_add(&kbc_at_ami_device); - device_add(&w83787f_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&intel_flash_bxt_device); return ret; @@ -574,7 +574,7 @@ machine_at_ap53_init(const machine_t *model) device_add(&i430hx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; @@ -603,54 +603,12 @@ machine_at_8500tuc_init(const machine_t *model) device_add(&i430hx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&um8669f_device); + device_add_params(&um8669f_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; } -int -machine_at_d943_init(const machine_t *model) - -{ - int ret = 0; - const char* fn; - - /* No ROMs available */ - if (!device_available(model->device)) - return ret; - - device_context(model->device); - fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); - ret = bios_load_linear(fn, 0x000e0000, 131072, 0); - device_context_restore(); - - machine_at_common_init_ex(model, 2); - device_add(&amstrad_megapc_nvr_device); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 2, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 3, 2, 4); - device_add(&i430hx_device); - device_add(&piix3_device); - device_add(&kbc_ps2_pci_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_device); - spd_register(SPD_TYPE_EDO, 0x7, 256); - - if (gfxcard[0] == VID_INTERNAL) - device_add(machine_get_vid_device(machine)); - - if (sound_card_current[0] == SOUND_INTERNAL) - machine_snd = device_add(machine_get_snd_device(machine)); - - return ret; -} - static const device_config_t d943_config[] = { // clang-format off { @@ -677,8 +635,6 @@ static const device_config_t d943_config[] = { // clang-format on }; - - const device_t d943_device = { .name = "Siemens-Nixdorf D943", .internal_name = "d943_device", @@ -694,58 +650,43 @@ const device_t d943_device = { }; int -machine_at_p55t2s_init(const machine_t *model) +machine_at_d943_init(const machine_t *model) + { - int ret; + int ret = 0; + const char* fn; - ret = bios_load_linear("roms/machines/p55t2s/s6y08t.rom", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) + /* No ROMs available */ + if (!device_available(model->device)) return ret; + device_context(model->device); + fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0); + ret = bios_load_linear(fn, 0x000e0000, 131072, 0); + device_context_restore(); + machine_at_common_init_ex(model, 2); + device_add(&amstrad_megapc_nvr_device); pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); + pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 2, 4, 1); + pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 1, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 1, 3, 2, 4); device_add(&i430hx_device); device_add(&piix3_device); - device_add_params(&pc87306_device, (void *) PCX730X_AMI); + device_add(&kbc_ps2_pci_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); + spd_register(SPD_TYPE_EDO, 0x7, 256); - return ret; -} + if (gfxcard[0] == VID_INTERNAL) + device_add(machine_get_vid_device(machine)); -int -machine_at_p5vxb_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/p5vxb/P5VXB10.BIN", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 4); - device_add(&i430vx_device); - device_add(&piix3_device); - device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877f_device); - device_add(&sst_flash_29ee010_device); + if (sound_card_current[0] == SOUND_INTERNAL) + machine_snd = device_add(machine_get_snd_device(machine)); return ret; } @@ -851,7 +792,7 @@ machine_at_ap5s_init(const machine_t *model) device_add(&sis_5511_device); device_add(&kbc_ps2_ami_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&sst_flash_29ee010_device); return ret; @@ -880,7 +821,7 @@ machine_at_ms5124_init(const machine_t *model) device_add(&sis_5511_device); device_add(&kbc_ps2_ami_device); - device_add(&w83787f_88h_device); + device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_88)); device_add(&sst_flash_29ee010_device); return ret; @@ -909,7 +850,7 @@ machine_at_amis727_init(const machine_t *model) device_add(&sis_5511_device); device_add(&kbc_ps2_intel_ami_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); return ret; @@ -1014,7 +955,7 @@ machine_at_5sbm2_init(const machine_t *model) device_add(&kbc_at_ami_device); device_add(&sis_550x_device); - device_add(&um8663af_device); + device_add_params(&um866x_device, (void *) UM8663AF); device_add(&sst_flash_29ee010_device); return ret; @@ -1045,7 +986,7 @@ machine_at_pc140_6260_init(const machine_t *model) device_add(&sis_5511_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&sst_flash_29ee010_device); return ret; diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c index e06356c2c..d9d35b161 100644 --- a/src/machine/m_at_socket8.c +++ b/src/machine/m_at_socket8.c @@ -66,7 +66,7 @@ machine_at_ap61_init(const machine_t *model) device_add(&sio_zb_device); device_add(&ide_cmd646_device); device_add(&kbc_ps2_acer_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&sst_flash_29ee010_device); // device_add(&intel_flash_bxt_device); @@ -101,7 +101,7 @@ machine_at_p6rp4_init(const machine_t *model) device_add(&ide_cmd646_device); /* Input port bit 2 must be 1 or CMOS Setup is disabled. */ device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c665_device); + device_add_params(&fdc37c6xx_device, (void *) FDC37C665); device_add(&intel_flash_bxt_device); return ret; @@ -130,7 +130,7 @@ machine_at_686nx_init(const machine_t *model) device_add(&i440fx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); // Uses the AMIKEY keyboard controller - device_add(&um8669f_device); + device_add_params(&um8669f_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; @@ -159,7 +159,7 @@ machine_at_mb600n_init(const machine_t *model) device_add(&i440fx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; @@ -218,7 +218,7 @@ machine_at_lgibmx61_init(const machine_t *model) device_add(&i440fx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_device); - device_add(&w83877f_president_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_250)); device_add(&sst_flash_29ee010_device); return ret; @@ -393,7 +393,7 @@ machine_at_8600ttc_init(const machine_t *model) device_add(&i440fx_device); device_add(&piix3_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&fdc37c669_device); + device_add_params(&fdc37c669_device, (void *) 0); device_add(&intel_flash_bxt_device); return ret; @@ -443,7 +443,7 @@ machine_at_p65up5_common_init(const machine_t *model, const device_t *northbridg device_add(northbridge); device_add(&piix3_ioapic_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877f_device); + device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0)); device_add(&sst_flash_29ee010_device); device_add(&ioapic_device); } diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 6a867f8f0..28d3033fb 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -232,7 +232,7 @@ machine_at_ax59pro_init(const machine_t *model) device_add(&via_mvp3_device); device_add(&via_vt82c586b_device); device_add(&kbc_ps2_pci_device); - device_add(&w83877tf_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_250)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); @@ -263,7 +263,7 @@ machine_at_mvp3_init(const machine_t *model) device_add(&via_mvp3_device); device_add(&via_vt82c586b_device); device_add(&kbc_ps2_pci_device); - device_add(&w83877tf_acorp_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&sst_flash_39sf010_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -365,7 +365,7 @@ machine_at_delhi3_init(const machine_t *model) device_add(&via_mvp3_device); device_add(&via_vt82c596a_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877tf_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_250)); device_add(&sst_flash_39sf020_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); @@ -398,7 +398,7 @@ machine_at_5sg100_init(const machine_t *model) pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0); device_add(&sis_5591_1997_device); device_add(&kbc_ps2_ami_pci_device); - device_add(&w83877tf_device); + device_add_params(&w83877_device, (void *) (W83877TF | W83877_3F0)); device_add(&sst_flash_29ee010_device); return ret; diff --git a/src/machine/m_ps2_isa.c b/src/machine/m_ps2_isa.c index d7fd2d753..b8114622b 100644 --- a/src/machine/m_ps2_isa.c +++ b/src/machine/m_ps2_isa.c @@ -168,6 +168,7 @@ ps2_isa_setup(int model, int cpu_type) ps2->uart = device_add_inst(&ns16450_device, 1); ps2->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_ext(ps2->lpt, 1); lpt_port_remove(ps2->lpt); lpt_port_setup(ps2->lpt, LPT_MDA_ADDR); diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index cdb833fd6..42fe64cf8 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -1601,7 +1601,9 @@ machine_ps2_common_init(const machine_t *model) nmi_mask = 0x80; ps2.uart = device_add_inst(&ns16550_device, 1); + ps2.lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_ext(ps2.lpt, 1); ps2.has_e0000_hole = 0; } diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 110787c04..cf39c7d54 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -81,6 +81,7 @@ const machine_filter_t machine_types[] = { { "[1978] 8086", MACHINE_TYPE_8086 }, { "[1982] 80286", MACHINE_TYPE_286 }, { "[1988] i386SX", MACHINE_TYPE_386SX }, + { "[1988] ALi M6117", MACHINE_TYPE_M6117 }, { "[1992] 486SLC", MACHINE_TYPE_486SLC }, { "[1985] i386DX", MACHINE_TYPE_386DX }, { "[1989] i386DX/i486", MACHINE_TYPE_386DX_486 }, @@ -4158,6 +4159,47 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has IBM AT KBC firmware. */ + { + .name = "[SCAT] Samsung Deskmaster 286", + .internal_name = "deskmaster286", + .type = MACHINE_TYPE_286, + .chipset = MACHINE_CHIPSET_SCAT, + .init = machine_at_deskmaster286_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_286, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_PS2, + .flags = MACHINE_IDE, /* Has internal video: C&T VGA 411 */ + .ram = { + .min = 512, + .max = 8192, + .step = 128 + }, + .nvrmask = 127, + .kbc_device = NULL, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has IBM PS/2 Type 1 KBC firmware. */ { .name = "[SCAT] Samsung SPC-4200P", @@ -4281,47 +4323,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has IBM AT KBC firmware. */ - { - .name = "[SCAT] Samsung Deskmaster 286", - .internal_name = "deskmaster286", - .type = MACHINE_TYPE_286, - .chipset = MACHINE_CHIPSET_SCAT, - .init = machine_at_deskmaster286_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_286, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, /* Has internal video: C&T VGA 411 */ - .ram = { - .min = 512, - .max = 8192, - .step = 128 - }, - .nvrmask = 127, - .kbc_device = NULL, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, { .name = "[SCAT] Senor Science Co. SCAT-286-003", .internal_name = "senorscat286", @@ -4817,7 +4818,7 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - { + { .name = "[ALi M1409] Acer 100T", .internal_name = "acer100t", .type = MACHINE_TYPE_386SX, @@ -4858,88 +4859,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has IBM PS/2 Type 1 KBC firmware. */ - { - .name = "[ALi M6117] Acrosser PJ-A511M", - .internal_name = "pja511m", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M6117, - .init = machine_at_pja511m_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_M6117, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 32768, - .step = 1024 - }, - .nvrmask = 127, - .kbc_device = NULL, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, - /* Has IBM PS/2 Type 1 KBC firmware. */ - { - .name = "[ALi M6117] Protech ProX-1332", - .internal_name = "prox1332", - .type = MACHINE_TYPE_386SX, - .chipset = MACHINE_CHIPSET_ALI_M6117, - .init = machine_at_prox1332_init, - .p1_handler = NULL, - .gpio_handler = NULL, - .available_flag = MACHINE_AVAILABLE, - .gpio_acpi_handler = NULL, - .cpu = { - .package = CPU_PKG_M6117, - .block = CPU_BLOCK_NONE, - .min_bus = 0, - .max_bus = 0, - .min_voltage = 0, - .max_voltage = 0, - .min_multi = 0, - .max_multi = 0 - }, - .bus_flags = MACHINE_PS2, - .flags = MACHINE_IDE, - .ram = { - .min = 1024, - .max = 32768, - .step = 1024 - }, - .nvrmask = 127, - .kbc_device = NULL, - .kbc_p1 = 0xff, - .gpio = 0xffffffff, - .gpio_acpi = 0xffffffff, - .device = NULL, - .kbd_device = NULL, - .fdc_device = NULL, - .sio_device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Has an AMI KBC firmware, the only photo of this is too low resolution for me to read what's on the KBC chip, so I'm going to assume AMI 'F' based on the other known HT18 AMI BIOS strings. */ @@ -5566,6 +5485,90 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + + /* ALi M6117 machines */ + /* Has IBM PS/2 Type 1 KBC firmware. */ + { + .name = "[ALi M6117] Acrosser PJ-A511M", + .internal_name = "pja511m", + .type = MACHINE_TYPE_M6117, + .chipset = MACHINE_CHIPSET_ALI_M6117, + .init = machine_at_pja511m_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_M6117, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_PS2, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 32768, + .step = 1024 + }, + .nvrmask = 127, + .kbc_device = NULL, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, + /* Has IBM PS/2 Type 1 KBC firmware. */ + { + .name = "[ALi M6117] Protech ProX-1332", + .internal_name = "prox1332", + .type = MACHINE_TYPE_M6117, + .chipset = MACHINE_CHIPSET_ALI_M6117, + .init = machine_at_prox1332_init, + .p1_handler = NULL, + .gpio_handler = NULL, + .available_flag = MACHINE_AVAILABLE, + .gpio_acpi_handler = NULL, + .cpu = { + .package = CPU_PKG_M6117, + .block = CPU_BLOCK_NONE, + .min_bus = 0, + .max_bus = 0, + .min_voltage = 0, + .max_voltage = 0, + .min_multi = 0, + .max_multi = 0 + }, + .bus_flags = MACHINE_PS2, + .flags = MACHINE_IDE, + .ram = { + .min = 1024, + .max = 32768, + .step = 1024 + }, + .nvrmask = 127, + .kbc_device = NULL, + .kbc_p1 = 0xff, + .gpio = 0xffffffff, + .gpio_acpi = 0xffffffff, + .device = NULL, + .kbd_device = NULL, + .fdc_device = NULL, + .sio_device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* 486SLC machines */ /* 486SLC machines with just the ISA slot */ @@ -16496,10 +16499,9 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC + /* Has a Winbond W83977TF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware. */ - -{ + { .name = "[i440BX] ABIT BX6", .internal_name = "bx6", .type = MACHINE_TYPE_SLOT1, @@ -16539,7 +16541,8 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - + /* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC + firmware. */ { .name = "[i440BX] ABIT BF6", .internal_name = "bf6", diff --git a/src/sio/CMakeLists.txt b/src/sio/CMakeLists.txt index dd4106fbd..c6e90d320 100644 --- a/src/sio/CMakeLists.txt +++ b/src/sio/CMakeLists.txt @@ -16,29 +16,28 @@ # add_library(sio OBJECT + sio_82091aa.c sio_acc3221.c sio_ali5123.c + sio_gm82c803ab.c + sio_gm82c803c.c sio_f82c606.c sio_f82c710.c - sio_82091aa.c sio_fdc37c6xx.c sio_fdc37c67x.c sio_fdc37c669.c sio_fdc37c93x.c sio_fdc37m60x.c sio_it86x1f.c + sio_pc87310.c + sio_pc873xx.c sio_pc87306.c sio_pc87307.c sio_pc87309.c - sio_pc87310.c - sio_pc87311.c - sio_pc87332.c - sio_prime3b.c - sio_prime3c.c - sio_w83787f.c - sio_w83877f.c - sio_w83977f.c - sio_um8663f.c + sio_w837x7.c + sio_w83877.c + sio_w83977.c + sio_um866x.c sio_um8669f.c sio_vl82c113.c sio_vt82c686.c diff --git a/src/sio/sio_82091aa.c b/src/sio/sio_82091aa.c index 5ef60d20f..283febada 100644 --- a/src/sio/sio_82091aa.c +++ b/src/sio/sio_82091aa.c @@ -57,9 +57,34 @@ static void lpt_handler(i82091aa_t *dev) { uint16_t lpt_port = LPT1_ADDR; + int enable = (dev->regs[0x20] & 0x01); lpt_port_remove(dev->lpt); + lpt_set_fifo_threshold(dev->lpt, (dev->regs[0x20] & 0x80) ? 15 : 8); + + switch (dev->regs[0x20] & 0x60) { + default: + case 0x00: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + case 0x20: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 1); + break; + case 0x40: + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + case 0x60: + enable = 0; + break; + } + switch ((dev->regs[0x20] >> 1) & 0x03) { case 0x00: lpt_port = LPT1_ADDR; @@ -78,7 +103,7 @@ lpt_handler(i82091aa_t *dev) break; } - if ((dev->regs[0x20] & 0x01) && lpt_port) + if (enable && lpt_port) lpt_port_setup(dev->lpt, lpt_port); lpt_port_irq(dev->lpt, (dev->regs[0x20] & 0x08) ? LPT1_IRQ : LPT2_IRQ); @@ -176,7 +201,7 @@ i82091aa_write(uint16_t port, uint8_t val, void *priv) break; case 0x20: *reg = (val & 0xef); - if (valxor & 0x07) + if (valxor & 0xe8) lpt_handler(dev); break; case 0x21: @@ -218,6 +243,8 @@ i82091aa_read(uint16_t port, void *priv) if (index) ret = dev->cur_reg; + else if (dev->cur_reg == 0x20) + ret = dev->regs[dev->cur_reg] | lpt_read_ecp_mode(dev->lpt); else if (dev->cur_reg < 0x51) ret = dev->regs[dev->cur_reg]; @@ -266,6 +293,7 @@ i82091aa_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfga_readout(dev->lpt, 0x90); dev->has_ide = (info->local >> 9) & 0x03; @@ -288,63 +316,7 @@ const device_t i82091aa_device = { .name = "Intel 82091AA Super I/O", .internal_name = "i82091aa", .flags = 0, - .local = 0x40, - .init = i82091aa_init, - .close = i82091aa_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t i82091aa_26e_device = { - .name = "Intel 82091AA Super I/O (Port 26Eh)", - .internal_name = "i82091aa_26e", - .flags = 0, - .local = 0x140, - .init = i82091aa_init, - .close = i82091aa_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t i82091aa_398_device = { - .name = "Intel 82091AA Super I/O (Port 398h)", - .internal_name = "i82091aa_398", - .flags = 0, - .local = 0x148, - .init = i82091aa_init, - .close = i82091aa_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t i82091aa_ide_pri_device = { - .name = "Intel 82091AA Super I/O (With Primary IDE)", - .internal_name = "i82091aa_ide", - .flags = 0, - .local = 0x240, - .init = i82091aa_init, - .close = i82091aa_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t i82091aa_ide_device = { - .name = "Intel 82091AA Super I/O (With IDE)", - .internal_name = "i82091aa_ide", - .flags = 0, - .local = 0x440, + .local = 0, .init = i82091aa_init, .close = i82091aa_close, .reset = NULL, diff --git a/src/sio/sio_fdc37c669.c b/src/sio/sio_fdc37c669.c index 0f563afa0..d49dd9d30 100644 --- a/src/sio/sio_fdc37c669.c +++ b/src/sio/sio_fdc37c669.c @@ -37,7 +37,10 @@ typedef struct fdc37c669_t { uint8_t id; uint8_t tries; - uint8_t regs[42]; + uint8_t has_ide; + uint8_t dma_map[4]; + uint8_t irq_map[10]; + uint8_t regs[256]; int locked; int rw_locked; int cur_reg; @@ -70,6 +73,7 @@ static void fdc37c669_fdc_handler(fdc37c669_t *dev) { fdc_remove(dev->fdc); + if (dev->regs[0x20] & 0xc0) fdc_set_base(dev->fdc, ((uint16_t) dev->regs[0x20]) << 2); } @@ -82,6 +86,7 @@ fdc37c669_uart_handler(fdc37c669_t *dev, uint8_t uart) uint8_t uart_shift = ((uart ^ 1) << 2); serial_remove(dev->uart[uart]); + if ((dev->regs[0x02] & pwrdn_mask) && (dev->regs[uart_reg] & 0xc0)) serial_setup(dev->uart[0], ((uint16_t) dev->regs[0x24]) << 2, (dev->regs[0x28] >> uart_shift) & 0x0f); @@ -107,10 +112,41 @@ fdc37c669_lpt_handler(fdc37c669_t *dev) uint8_t mask = ~(dev->regs[0x04] & 0x01); lpt_port_remove(dev->lpt); + + if (dev->regs[0x01] & 0x08) { + lpt_set_ext(dev->lpt, 0); + + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + } else { + lpt_set_ext(dev->lpt, 1); + + lpt_set_epp(dev->lpt, dev->regs[0x04] & 0x01); + lpt_set_ecp(dev->lpt, dev->regs[0x04] & 0x02); + } + + lpt_set_fifo_threshold(dev->lpt, dev->regs[0x0a] & 0x0f); + if ((dev->regs[0x01] & 0x04) && (dev->regs[0x23] >= 0x40)) lpt_port_setup(dev->lpt, ((uint16_t) (dev->regs[0x23] & mask)) << 2); } +static void +ide_handler(fdc37c669_t *dev) +{ + if (dev->has_ide > 0) { + int ide_id = dev->has_ide - 1; + + ide_handlers(ide_id, 0); + + ide_set_base_addr(ide_id, 0, ((uint16_t) (dev->regs[0x21] & 0xfc)) << 2); + ide_set_base_addr(ide_id, 1, (((uint16_t) (dev->regs[0x22] & 0xfc)) << 2) | 0x0006); + + if ((dev->regs[0x00] & 0x03) == 0x02) + ide_handlers(ide_id, 1); + } +} + static void fdc37c669_write(uint16_t port, uint8_t val, void *priv) { @@ -139,12 +175,14 @@ fdc37c669_write(uint16_t port, uint8_t val, void *priv) } else if (!dev->rw_locked || (dev->cur_reg > 0x0f)) switch (dev->cur_reg) { case 0x00: dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0x74) | (val & 0x8b); - if (!dev->id && (valxor & 8)) + if (!dev->id && (valxor & 0x08)) fdc_set_power_down(dev->fdc, !(val & 0x08)); + if (!dev->id && (valxor & 0x03)) + ide_handler(dev); break; case 0x01: dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0x73) | (val & 0x8c); - if (valxor & 0x04) + if (valxor & 0x0c) fdc37c669_lpt_handler(dev); if (valxor & 0x80) dev->rw_locked = !(val & 0x80); @@ -158,6 +196,17 @@ fdc37c669_write(uint16_t port, uint8_t val, void *priv) break; case 0x03: dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0x08) | (val & 0xf7); + if ((valxor & 0x60) && (dev->fdc != NULL)) { + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); + switch (val & 0x0c) { + case 0x00: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2); + break; + case 0x20: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2_MCA); + break; + } + } if (!dev->id && (valxor & 0x02)) fdc_update_enh_mode(dev->fdc, !!(val & 0x02)); break; @@ -191,6 +240,8 @@ fdc37c669_write(uint16_t port, uint8_t val, void *priv) break; case 0x0a: dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0xf0) | (val & 0x0f); + if (valxor & 0x0f) + fdc37c669_lpt_handler(dev); break; case 0x0b: dev->regs[dev->cur_reg] = val; @@ -223,9 +274,13 @@ fdc37c669_write(uint16_t port, uint8_t val, void *priv) break; case 0x21: dev->regs[dev->cur_reg] = val & 0xfc; + if (!dev->id && (valxor & 0xfc)) + ide_handler(dev); break; case 0x22: dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0x03) | (val & 0xfc); + if (!dev->id && (valxor & 0xfc)) + ide_handler(dev); break; case 0x23: dev->regs[dev->cur_reg] = val; @@ -246,6 +301,8 @@ fdc37c669_write(uint16_t port, uint8_t val, void *priv) dev->regs[dev->cur_reg] = val; if (valxor & 0xf0) fdc_set_dma_ch(dev->fdc, val >> 4); + if (valxor & 0x0f) + lpt_port_dma(dev->lpt, val & 0x0f); break; case 0x27: dev->regs[dev->cur_reg] = val; @@ -306,9 +363,13 @@ fdc37c669_reset(void *priv) dev->regs[0x21] = 0x3c; dev->regs[0x22] = 0x3d; - if (dev->id != 1) { + if (!dev->id) { fdc_reset(dev->fdc); + fdc37c669_fdc_handler(dev); + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); + + ide_handler(dev); } fdc37c669_uart_handler(dev, 0); @@ -340,17 +401,34 @@ fdc37c669_init(const device_t *info) dev->id = next_id; - if (next_id != 1) - dev->fdc = device_add(&fdc_at_smc_device); + if (next_id != 1) { + dev->fdc = device_add(&fdc_at_smc_device); + dev->has_ide = (info->local >> 8) & 0xff; + } dev->uart[0] = device_add_inst(&ns16550_device, (next_id << 1) + 1); dev->uart[1] = device_add_inst(&ns16550_device, (next_id << 1) + 2); dev->lpt = device_add_inst(&lpt_port_device, next_id + 1); - io_sethandler(info->local ? FDC_SECONDARY_ADDR : (next_id ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR), + io_sethandler((info->local & FDC37C6XX_370) ? FDC_SECONDARY_ADDR : (next_id ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR), 0x0002, fdc37c669_read, NULL, NULL, fdc37c669_write, NULL, NULL, dev); + dev->dma_map[0] = 4; + for (int i = 1; i < 4; i++) + dev->dma_map[i] = i; + + memset(dev->irq_map, 0xff, 16); + dev->irq_map[0] = 0xff; + for (int i = 1; i < 7; i++) + dev->irq_map[i] = i; + dev->irq_map[1] = 5; + dev->irq_map[5] = 7; + dev->irq_map[7] = 0xff; /* Reserved. */ + dev->irq_map[8] = 10; + dev->irq_map[9] = 9; /* This is used by the Acrosser PJ-A511M for IRQ 9. */ + dev->irq_map[11] = 11; /* This is used by the Acrosser PJ-A511M for IRQ 11. */ + fdc37c669_reset(dev); next_id++; @@ -371,17 +449,3 @@ const device_t fdc37c669_device = { .force_redraw = NULL, .config = NULL }; - -const device_t fdc37c669_370_device = { - .name = "SMC FDC37C669 Super I/O (Port 370h)", - .internal_name = "fdc37c669_370", - .flags = 0, - .local = 1, - .init = fdc37c669_init, - .close = fdc37c669_close, - .reset = fdc37c669_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; diff --git a/src/sio/sio_fdc37c67x.c b/src/sio/sio_fdc37c67x.c index c9d0bd149..97e423b17 100644 --- a/src/sio/sio_fdc37c67x.c +++ b/src/sio/sio_fdc37c67x.c @@ -437,7 +437,6 @@ fdc37c67x_write(uint16_t port, uint8_t val, void *priv) fdc_set_flags(dev->fdc, FDC_FLAG_PS2_MCA); break; } - fdc_update_enh_mode(dev->fdc, val & 0x01); } if (valxor & 0x10) fdc_set_swap(dev->fdc, (val & 0x10) >> 4); diff --git a/src/sio/sio_fdc37c6xx.c b/src/sio/sio_fdc37c6xx.c index 3b2a8b942..5d48a73a6 100644 --- a/src/sio/sio_fdc37c6xx.c +++ b/src/sio/sio_fdc37c6xx.c @@ -9,11 +9,9 @@ * Implementation of the SMC FDC37C663 and FDC37C665 Super * I/O Chips. * - * - * * Authors: Miran Grca, * - * Copyright 2016-2020 Miran Grca. + * Copyright 2016-2025 Miran Grca. */ #include #include @@ -113,8 +111,6 @@ lpt_handler(fdc37c6xx_t *dev) uint16_t mask = 0xfffc; uint8_t local_enable = 1; uint8_t lpt_irq = LPT1_IRQ; - /* DMA is guesswork - what channel do boards actually use? */ - uint8_t lpt_dma = 3; uint8_t lpt_ext = !(dev->regs[1] & 0x08); uint8_t lpt_mode = (dev->chip_id >= 0x65) ? (dev->regs[4] & 0x03) : 0x00; @@ -140,9 +136,6 @@ lpt_handler(fdc37c6xx_t *dev) if (lpt_irq > 15) lpt_irq = 0xff; - if (lpt_dma >= 4) - lpt_dma = 0xff; - lpt_port_remove(dev->lpt); lpt_set_fifo_threshold(dev->lpt, dev->regs[0x0a] & 0x0f); if (lpt_ext) switch (lpt_mode) { @@ -192,19 +185,16 @@ fdc_handler(fdc37c6xx_t *dev) static void ide_handler(fdc37c6xx_t *dev) { - /* TODO: Make an ide_disable(channel) and ide_enable(channel) so we can simplify this. */ - if (dev->has_ide == 2) { - ide_sec_disable(); - ide_set_base(1, (dev->regs[0x05] & 0x02) ? 0x170 : 0x1f0); - ide_set_side(1, (dev->regs[0x05] & 0x02) ? 0x376 : 0x3f6); + if (dev->has_ide > 0) { + int ide_id = dev->has_ide - 1; + + ide_handlers(ide_id, 0); + + ide_set_base_addr(ide_id, 0, (dev->regs[0x05] & 0x02) ? 0x0170 : 0x01f0); + ide_set_base_addr(ide_id, 1, (dev->regs[0x05] & 0x02) ? 0x0376 : 0x03f6); + if (dev->regs[0x00] & 0x01) - ide_sec_enable(); - } else if (dev->has_ide == 1) { - ide_pri_disable(); - ide_set_base(0, (dev->regs[0x05] & 0x02) ? 0x170 : 0x1f0); - ide_set_side(0, (dev->regs[0x05] & 0x02) ? 0x376 : 0x3f6); - if (dev->regs[0x00] & 0x01) - ide_pri_enable(); + ide_handlers(ide_id, 1); } } @@ -228,14 +218,14 @@ fdc37c6xx_write(uint16_t port, uint8_t val, void *priv) dev->regs[dev->cur_reg] = val; switch (dev->cur_reg) { - case 0: + case 0x00: if (dev->has_ide && (valxor & 0x01)) ide_handler(dev); if (valxor & 0x10) fdc_handler(dev); break; - case 1: - if (valxor & 3) + case 0x01: + if (valxor & 0x03) lpt_handler(dev); if (valxor & 0x60) { set_com34_addr(dev); @@ -243,23 +233,23 @@ fdc37c6xx_write(uint16_t port, uint8_t val, void *priv) set_serial_addr(dev, 1); } break; - case 2: - if (valxor & 7) + case 0x02: + if (valxor & 0x07) set_serial_addr(dev, 0); if (valxor & 0x70) set_serial_addr(dev, 1); break; - case 3: - if (valxor & 2) - fdc_update_enh_mode(dev->fdc, (dev->regs[3] & 2) ? 1 : 0); + case 0x03: + if (valxor & 0x02) + fdc_update_enh_mode(dev->fdc, !!(dev->regs[0x03] & 0x02)); break; - case 4: + case 0x04: if (valxor & 0x10) set_serial_addr(dev, 0); if (valxor & 0x20) set_serial_addr(dev, 1); break; - case 5: + case 0x05: if (valxor & 0x01) fdc_handler(dev); if (dev->has_ide && (valxor & 0x02)) @@ -285,7 +275,7 @@ fdc37c6xx_read(uint16_t port, void *priv) uint8_t ret = 0xff; if (dev->tries == 2) { - if ((port == 0x3f1) && (dev->cur_reg <= dev->max_reg)) + if ((port == 0x03f1) && (dev->cur_reg <= dev->max_reg)) ret = dev->regs[dev->cur_reg]; } @@ -385,175 +375,23 @@ fdc37c6xx_init(const device_t *info) dev->lpt = device_add_inst(&lpt_port_device, 1); - io_sethandler(FDC_PRIMARY_ADDR, 0x0002, - fdc37c6xx_read, NULL, NULL, fdc37c6xx_write, NULL, NULL, dev); + if (info->local & FDC37C6XX_370) + io_sethandler(FDC_SECONDARY_ADDR, 0x0002, + fdc37c6xx_read, NULL, NULL, fdc37c6xx_write, NULL, NULL, dev); + else + io_sethandler(FDC_PRIMARY_ADDR, 0x0002, + fdc37c6xx_read, NULL, NULL, fdc37c6xx_write, NULL, NULL, dev); fdc37c6xx_reset(dev); return dev; } -/* The three appear to differ only in the chip ID, if I - understood their datasheets correctly. */ -const device_t fdc37c651_device = { - .name = "SMC FDC37C651 Super I/O", - .internal_name = "fdc37c651", +const device_t fdc37c6xx_device = { + .name = "SMC FDC37C6xx Super I/O", + .internal_name = "fdc37c6xx", .flags = 0, - .local = 0x51, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c651_ide_device = { - .name = "SMC FDC37C651 Super I/O (With IDE)", - .internal_name = "fdc37c651_ide", - .flags = 0, - .local = 0x151, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c661_device = { - .name = "SMC FDC37C661 Super I/O", - .internal_name = "fdc37c661", - .flags = 0, - .local = 0x61, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c661_ide_device = { - .name = "SMC FDC37C661 Super I/O (With IDE)", - .internal_name = "fdc37c661_ide", - .flags = 0, - .local = 0x161, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c661_ide_sec_device = { - .name = "SMC FDC37C661 Super I/O (With Secondary IDE)", - .internal_name = "fdc37c661_ide_sec", - .flags = 0, - .local = 0x261, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c663_device = { - .name = "SMC FDC37C663 Super I/O", - .internal_name = "fdc37c663", - .flags = 0, - .local = 0x63, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c663_ide_device = { - .name = "SMC FDC37C663 Super I/O (With IDE)", - .internal_name = "fdc37c663_ide", - .flags = 0, - .local = 0x163, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c665_device = { - .name = "SMC FDC37C665 Super I/O", - .internal_name = "fdc37c665", - .flags = 0, - .local = 0x65, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c665_ide_device = { - .name = "SMC FDC37C665 Super I/O (With IDE)", - .internal_name = "fdc37c665_ide", - .flags = 0, - .local = 0x265, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c665_ide_pri_device = { - .name = "SMC FDC37C665 Super I/O (With Primary IDE)", - .internal_name = "fdc37c665_ide_pri", - .flags = 0, - .local = 0x165, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c665_ide_sec_device = { - .name = "SMC FDC37C665 Super I/O (With Secondary IDE)", - .internal_name = "fdc37c665_ide_sec", - .flags = 0, - .local = 0x265, - .init = fdc37c6xx_init, - .close = fdc37c6xx_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t fdc37c666_device = { - .name = "SMC FDC37C666 Super I/O", - .internal_name = "fdc37c666", - .flags = 0, - .local = 0x66, + .local = 0, .init = fdc37c6xx_init, .close = fdc37c6xx_close, .reset = NULL, diff --git a/src/sio/sio_fdc37c93x.c b/src/sio/sio_fdc37c93x.c index 9d0acfae2..85e029fad 100644 --- a/src/sio/sio_fdc37c93x.c +++ b/src/sio/sio_fdc37c93x.c @@ -906,9 +906,11 @@ fdc37c93x_nvr_pri_handler(const fdc37c93x_t *dev) if (dev->chip_id != 0x02) local_enable &= ((dev->ld_regs[6][0xf0] & 0x90) != 0x80); - nvr_at_handler(0, 0x70, dev->nvr); - if (local_enable) - nvr_at_handler(1, 0x70, dev->nvr); + if (dev->has_nvr) { + nvr_at_handler(0, 0x70, dev->nvr); + if (local_enable) + nvr_at_handler(1, 0x70, dev->nvr); + } } static void @@ -926,12 +928,12 @@ fdc37c93x_nvr_sec_handler(fdc37c93x_t *dev) dev->nvr_sec_base = make_port_sec(dev, 6) & 0xfffe; if (dev->nvr_sec_base != old_base) { - if ((old_base > 0x0000) && (old_base <= 0x0ffe)) + if (dev->has_nvr && (old_base > 0x0000) && (old_base <= 0x0ffe)) nvr_at_sec_handler(0, dev->nvr_sec_base, dev->nvr); /* Datasheet erratum: First it says minimum address is 0x0100, but later implies that it's 0x0000 and that default is 0x0070, same as (unrelocatable) primary NVR. */ - if ((dev->nvr_sec_base > 0x0000) && (dev->nvr_sec_base <= 0x0ffe)) + if (dev->has_nvr && (dev->nvr_sec_base > 0x0000) && (dev->nvr_sec_base <= 0x0ffe)) nvr_at_sec_handler(1, dev->nvr_sec_base, dev->nvr); } } @@ -1181,7 +1183,6 @@ fdc37c93x_write(uint16_t port, uint8_t val, void *priv) fdc_set_flags(dev->fdc, FDC_FLAG_PS2_MCA); break; } - fdc_update_enh_mode(dev->fdc, val & 0x01); } if (valxor & 0x10) fdc_set_swap(dev->fdc, (val & 0x10) >> 4); @@ -1365,7 +1366,7 @@ fdc37c93x_write(uint16_t port, uint8_t val, void *priv) else dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x8f; - if (valxor) { + if (dev->has_nvr && valxor) { nvr_lock_set(0x80, 0x20, !!(dev->ld_regs[6][dev->cur_reg] & 0x01), dev->nvr); nvr_lock_set(0xa0, 0x20, !!(dev->ld_regs[6][dev->cur_reg] & 0x02), dev->nvr); nvr_lock_set(0xc0, 0x20, !!(dev->ld_regs[6][dev->cur_reg] & 0x04), dev->nvr); diff --git a/src/sio/sio_fdc37m60x.c b/src/sio/sio_fdc37m60x.c index 8d18a1192..164db5eac 100644 --- a/src/sio/sio_fdc37m60x.c +++ b/src/sio/sio_fdc37m60x.c @@ -347,7 +347,6 @@ fdc37m60x_write(uint16_t port, uint8_t val, void *priv) fdc_set_flags(dev->fdc, FDC_FLAG_PS2_MCA); break; } - fdc_update_enh_mode(dev->fdc, val & 0x01); } if (valxor & 0x10) fdc_set_swap(dev->fdc, (val & 0x10) >> 4); diff --git a/src/sio/sio_gm82c803ab.c b/src/sio/sio_gm82c803ab.c new file mode 100644 index 000000000..8dca4ae6c --- /dev/null +++ b/src/sio/sio_gm82c803ab.c @@ -0,0 +1,372 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Implementation of the GoldStar GM82C803 A andB Super I/O + * Chips. + * + * Authors: Miran Grca, + * + * Copyright 2025 Miran Grca. + */ +#include +#include +#include +#include +#include +#include <86box/86box.h> +#include <86box/io.h> +#include <86box/timer.h> +#include <86box/device.h> +#include <86box/pci.h> +#include <86box/lpt.h> +#include <86box/serial.h> +#include <86box/hdc.h> +#include <86box/hdc_ide.h> +#include <86box/fdd.h> +#include <86box/fdc.h> +#include <86box/sio.h> + +typedef struct gm82c803ab_t { + uint8_t type; + uint8_t tries; + uint8_t has_ide; + uint8_t regs[16]; + int cur_reg; + int com3_addr; + int com4_addr; + fdc_t *fdc; + serial_t *uart[2]; + lpt_t *lpt; +} gm82c803ab_t; + +#ifdef ENABLE_GM82C803AB_LOG +int gm82c803ab_do_log = ENABLE_GM82C803AB_LOG; + +static void +gm82c803ab_log(const char *fmt, ...) +{ + va_list ap; + + if (gm82c803ab_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define gm82c803ab_log(fmt, ...) +#endif + +static void +ide_handler(gm82c803ab_t *dev) +{ + if (dev->has_ide > 0) { + int ide_id = dev->has_ide - 1; + + ide_handlers(ide_id, 0); + + ide_set_base_addr(ide_id, 0, (dev->regs[0xa1] & 0x80) ? 0x0170 : 0x01f0); + ide_set_base_addr(ide_id, 1, (dev->regs[0xa1] & 0x80) ? 0x0376 : 0x03f6); + + if (dev->regs[0xa0] & 0x20) + ide_handlers(ide_id, 1); + } +} + +static void +fdc_handler(gm82c803ab_t *dev) +{ + fdc_remove(dev->fdc); + if (dev->regs[0xa0] & 0x10) + fdc_set_base(dev->fdc, (dev->regs[0xa1] & 0x40) ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR); +} + +static void +set_com34_addr(gm82c803ab_t *dev) +{ + switch (dev->regs[0xa4] & 0xc0) { + case 0x00: + dev->com3_addr = COM3_ADDR; + dev->com4_addr = COM4_ADDR; + break; + case 0x40: + dev->com3_addr = 0x338; + dev->com4_addr = 0x238; + break; + case 0x80: + dev->com3_addr = COM3_ADDR; + dev->com4_addr = 0x2e0; + break; + case 0xc0: + dev->com3_addr = 0x220; + dev->com4_addr = 0x228; + break; + + default: + break; + } +} + +static void +set_serial_addr(gm82c803ab_t *dev, int port) +{ + uint8_t shift = 2 + (port << 1); + double clock_src = 24000000.0 / 13.0; + + if (dev->regs[0xa4] & (1 << (4 + port))) + clock_src = 24000000.0 / 12.0; + + serial_remove(dev->uart[port]); + if (dev->regs[0xa0] & (0x04 << port)) { + switch ((dev->regs[0xa1] >> shift) & 0x03) { + case 0x00: + serial_setup(dev->uart[port], COM1_ADDR, COM1_IRQ); + break; + case 0x01: + serial_setup(dev->uart[port], COM2_ADDR, COM2_IRQ); + break; + case 0x02: + serial_setup(dev->uart[port], dev->com3_addr, COM3_IRQ); + break; + case 0x03: + serial_setup(dev->uart[port], dev->com4_addr, COM4_IRQ); + break; + + default: + break; + } + } + + serial_set_clock_src(dev->uart[port], clock_src); +} + +static void +lpt_handler(gm82c803ab_t *dev) +{ + uint16_t lpt_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t local_enable = 1; + uint8_t lpt_irq = LPT1_IRQ; + uint8_t lpt_mode = (dev->regs[0xa0] & 0x03); + + switch (lpt_mode) { + default: + local_enable = 0; + break; + case 0x00: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 1); + break; + case 0x01: + if (dev->type == GM82C803B) { + lpt_set_epp(dev->lpt, !!(dev->regs[0xa5] & 0x20)); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + } else + local_enable = 0; + break; + case 0x02: + if (dev->type == GM82C803B) { + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, !!(dev->regs[0xa5] & 0x20)); + lpt_set_ext(dev->lpt, 0); + } else + local_enable = 0; + break; + } + + switch (dev->regs[0xa1] & 0x03) { + default: + lpt_port = LPT_MDA_ADDR; + lpt_irq = LPT_MDA_IRQ; + break; + case 0x00: + lpt_port = LPT1_ADDR; + lpt_irq = LPT1_IRQ /*LPT2_IRQ*/; + break; + case 0x01: + lpt_port = LPT2_ADDR; + lpt_irq = LPT1_IRQ /*LPT2_IRQ*/; + break; + } + + if (lpt_irq > 15) + lpt_irq = 0xff; + + lpt_port_remove(dev->lpt); + lpt_set_fifo_threshold(dev->lpt, dev->regs[0x0a] & 0x0f); + + if (local_enable && (lpt_port >= 0x0100) && (lpt_port <= (0x0ffc & mask))) + lpt_port_setup(dev->lpt, lpt_port); + + lpt_port_irq(dev->lpt, lpt_irq); +} + +static void +gm82c803ab_write(uint16_t port, uint8_t val, void *priv) +{ + gm82c803ab_t *dev = (gm82c803ab_t *) priv; + uint8_t valxor = 0; + + if (dev->tries == 2) { + if (port == 0x0398) { + if (val == 0xcc) + dev->tries = 0; + else + dev->cur_reg = val; + } else { + if ((dev->cur_reg < 0xa0) || (dev->cur_reg > 0xa5)) + return; + + valxor = val ^ dev->regs[dev->cur_reg]; + dev->regs[dev->cur_reg] = val; + + switch (dev->cur_reg) { + default: + break; + case 0xa0: /* Function Selection Register (FSR) */ + if (valxor & 0x20) + ide_handler(dev); + if (valxor & 0x10) + fdc_handler(dev); + if (valxor & 0x08) + set_serial_addr(dev, 1); + if (valxor & 0x04) + set_serial_addr(dev, 0); + if (valxor & 0x03) + lpt_handler(dev); + break; + case 0xa1: /* Address Selection Register (ASR) */ + if (valxor & 0x80) + ide_handler(dev); + if (valxor & 0x40) + fdc_handler(dev); + if (valxor & 0x30) + set_serial_addr(dev, 1); + if (valxor & 0x0c) + set_serial_addr(dev, 0); + if (valxor & 0x03) + lpt_handler(dev); + break; + case 0xa4: /* Miscellaneous Function Register */ + if (valxor & 0xc0) { + set_com34_addr(dev); + set_serial_addr(dev, 0); + set_serial_addr(dev, 1); + } + if (valxor & 0x20) + set_serial_addr(dev, 1); + if (valxor & 0x10) + set_serial_addr(dev, 0); + if (valxor & 0x01) + fdc_set_swap(dev->fdc, val & 0x01); + break; + case 0xa5: /* ECP Register */ + if (valxor & 0x20) + lpt_handler(dev); + break; + } + } + } else if ((port == 0x0398) && (val == 0x33)) + dev->tries++; +} + +static uint8_t +gm82c803ab_read(uint16_t port, void *priv) +{ + const gm82c803ab_t *dev = (gm82c803ab_t *) priv; + uint8_t ret = 0xff; + + if (dev->tries == 2) { + if ((port == 0x0399) && (dev->cur_reg >= 0xa0) && (dev->cur_reg <= 0xa1)) + ret = dev->regs[dev->cur_reg]; + } + + return ret; +} + +static void +gm82c803ab_reset(gm82c803ab_t *dev) +{ + dev->com3_addr = 0x338; + dev->com4_addr = 0x238; + + serial_remove(dev->uart[0]); + serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ); + + serial_remove(dev->uart[1]); + serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ); + + lpt_port_remove(dev->lpt); + lpt_port_setup(dev->lpt, LPT1_ADDR); + + fdc_reset(dev->fdc); + fdc_remove(dev->fdc); + + dev->tries = 0; + memset(dev->regs, 0, 256); + + dev->regs[0xa0] = 0xff; + + set_serial_addr(dev, 0); + set_serial_addr(dev, 1); + + lpt_handler(dev); + + fdc_handler(dev); + + if (dev->has_ide) + ide_handler(dev); +} + +static void +gm82c803ab_close(void *priv) +{ + gm82c803ab_t *dev = (gm82c803ab_t *) priv; + + free(dev); +} + +static void * +gm82c803ab_init(const device_t *info) +{ + gm82c803ab_t *dev = (gm82c803ab_t *) calloc(1, sizeof(gm82c803ab_t)); + + dev->fdc = device_add(&fdc_at_smc_device); + + dev->type = info->local & 0xff; + dev->has_ide = (info->local >> 8) & 0xff; + + dev->uart[0] = device_add_inst(&ns16550_device, 1); + dev->uart[1] = device_add_inst(&ns16550_device, 2); + + dev->lpt = device_add_inst(&lpt_port_device, 1); + + io_sethandler(0x0398, 0x0002, + gm82c803ab_read, NULL, NULL, gm82c803ab_write, NULL, NULL, dev); + + gm82c803ab_reset(dev); + + return dev; +} + +const device_t gm82c803ab_device = { + .name = "Goldstar GMC82C803A/B", + .internal_name = "gm82c803ab", + .flags = 0, + .local = 0, + .init = gm82c803ab_init, + .close = gm82c803ab_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/sio/sio_gm82c803c.c b/src/sio/sio_gm82c803c.c new file mode 100644 index 000000000..eb54b6661 --- /dev/null +++ b/src/sio/sio_gm82c803c.c @@ -0,0 +1,382 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Implementation of the GoldStar GM82C803C Super I/O Chip. + * + * Authors: Miran Grca, + * + * Copyright 2025 Miran Grca. + */ +#include +#include +#include +#include +#include +#include <86box/86box.h> +#include <86box/io.h> +#include <86box/timer.h> +#include <86box/device.h> +#include <86box/pci.h> +#include <86box/lpt.h> +#include <86box/serial.h> +#include <86box/hdc.h> +#include <86box/hdc_ide.h> +#include <86box/fdd.h> +#include <86box/fdc.h> +#include <86box/sio.h> + +typedef struct gm82c803c_t { + uint8_t tries; + uint8_t has_ide; + uint8_t dma_map[4]; + uint8_t irq_map[10]; + uint8_t regs[16]; + int cur_reg; + fdc_t *fdc; + serial_t *uart[2]; + lpt_t *lpt; +} gm82c803c_t; + +#ifdef ENABLE_GM82C803C_LOG +int gm82c803c_do_log = ENABLE_GM82C803C_LOG; + +static void +gm82c803c_log(const char *fmt, ...) +{ + va_list ap; + + if (gm82c803c_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define gm82c803c_log(fmt, ...) +#endif + +static void +ide_handler(gm82c803c_t *dev) +{ + uint16_t ide_port = 0x0000; + + if (dev->has_ide > 0) { + int ide_id = dev->has_ide - 1; + + ide_handlers(ide_id, 0); + + ide_port = (dev->regs[0xc4] << 2) & 0xfff0; + ide_set_base_addr(ide_id, 0, ide_port); + + ide_port = ((dev->regs[0xc5] << 2) & 0xfff0) | 0x0006; + ide_set_base_addr(ide_id, 1, ide_port); + + if (dev->regs[0xc2] & 0x20) + ide_handlers(ide_id, 1); + } +} + +static void +fdc_handler(gm82c803c_t *dev) +{ + uint16_t fdc_port = 0x0000; + uint8_t fdc_irq = 6; + uint8_t fdc_dma = 2; + + fdc_port = (dev->regs[0xc3] << 2) & 0xfff0; + + fdc_irq = dev->irq_map[dev->regs[0xca] >> 4]; + fdc_dma = dev->dma_map[(dev->regs[0xc9] >> 4) & 0x03]; + + fdc_set_irq(dev->fdc, fdc_irq); + fdc_set_dma_ch(dev->fdc, fdc_dma); + + fdc_remove(dev->fdc); + if (dev->regs[0xc2] & 0x10) + fdc_set_base(dev->fdc, fdc_port); +} + +static void +set_serial_addr(gm82c803c_t *dev, int port) +{ + uint16_t serial_port = 0x0000; + uint8_t serial_irq = COM1_IRQ; + double clock_src = 24000000.0 / 13.0; + + if (dev->regs[0xce] & (1 << (6 + port))) + clock_src = 24000000.0 / 3.0; + else if (dev->regs[0xd1] & (1 << port)) + clock_src = 24000000.0 / 12.0; + + serial_remove(dev->uart[port]); + if (dev->regs[0xc2] & (0x04 << port)) { + serial_port = (dev->regs[0xc7 + port] << 2) & 0xfff8; + serial_irq = dev->irq_map[dev->regs[0xcb] >> ((port ^ 1) * 0xff)]; + + serial_setup(dev->uart[port], serial_port, serial_irq); + } + + serial_set_clock_src(dev->uart[port], clock_src); +} + +static void +lpt_handler(gm82c803c_t *dev) +{ + uint16_t lpt_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t local_enable = 1; + uint8_t lpt_irq = LPT1_IRQ; + uint8_t lpt_dma = 3; + uint8_t lpt_mode = (dev->regs[0xc2] & 0x03); + + switch (lpt_mode) { + default: + local_enable = 0; + break; + case 0x00: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 1); + break; + case 0x01: + lpt_set_epp(dev->lpt, !!(dev->regs[0xd0] & 0x20)); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + case 0x02: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, !!(dev->regs[0xd0] & 0x20)); + lpt_set_ext(dev->lpt, 0); + break; + } + + lpt_port = ((dev->regs[0xc6] << 2) & 0xfffc) & mask; + + lpt_irq = dev->irq_map[dev->regs[0xca] & 0x0f]; + lpt_dma = dev->dma_map[dev->regs[0xc9] & 0x03]; + + if (lpt_irq > 15) + lpt_irq = 0xff; + + lpt_port_remove(dev->lpt); + lpt_set_fifo_threshold(dev->lpt, dev->regs[0x0a] & 0x0f); + + if (local_enable && (lpt_port >= 0x0100) && (lpt_port <= (0x0ffc & mask))) + lpt_port_setup(dev->lpt, lpt_port); + + lpt_port_irq(dev->lpt, lpt_irq); + lpt_port_dma(dev->lpt, lpt_dma); +} + +static void +gm82c803c_write(uint16_t port, uint8_t val, void *priv) +{ + gm82c803c_t *dev = (gm82c803c_t *) priv; + uint8_t valxor = 0; + + if (dev->tries == 2) { + if (port == 0x0398) { + if (val == 0xcc) + dev->tries = 0; + else + dev->cur_reg = val; + } else { + if ((dev->cur_reg < 0xc2) || (dev->cur_reg > 0xd8)) + return; + + valxor = val ^ dev->regs[dev->cur_reg]; + dev->regs[dev->cur_reg] = val; + + switch (dev->cur_reg) { + default: + break; + case 0xc2: + if (valxor & 0x20) + ide_handler(dev); + if (valxor & 0x10) + fdc_handler(dev); + if (valxor & 0x08) + set_serial_addr(dev, 1); + if (valxor & 0x04) + set_serial_addr(dev, 0); + if (valxor & 0x03) + lpt_handler(dev); + break; + case 0xc3: + if (valxor) + fdc_handler(dev); + break; + case 0xc4: case 0xc5: + if (valxor) + ide_handler(dev); + break; + case 0xc6: + if (valxor) + lpt_handler(dev); + break; + case 0xc7: + if (valxor) + set_serial_addr(dev, 0); + case 0xc8: + if (valxor) + set_serial_addr(dev, 1); + case 0xc9: + if (valxor & 0xf0) + fdc_handler(dev); + if (valxor & 0x0f) + lpt_handler(dev); + break; + case 0xca: + if (valxor & 0xf0) + fdc_handler(dev); + if (valxor & 0x0f) + lpt_handler(dev); + break; + case 0xcb: + if (valxor & 0xf0) + set_serial_addr(dev, 0); + if (valxor & 0x0f) + set_serial_addr(dev, 1); + break; + case 0xce: + if (valxor & 0x80) + set_serial_addr(dev, 1); + if (valxor & 0x40) + set_serial_addr(dev, 0); + break; + case 0xd0: + if (valxor & 0x20) + lpt_handler(dev); + break; + case 0xd1: + if (valxor & 0x02) + set_serial_addr(dev, 1); + if (valxor & 0x01) + set_serial_addr(dev, 0); + break; + + if (valxor & 0x20) + ide_handler(dev); + if (valxor & 0x08) + set_serial_addr(dev, 1); + if (valxor & 0x04) + set_serial_addr(dev, 0); + break; + } + } + } else if ((port == 0x0398) && (val == 0x33)) + dev->tries++; +} + +static uint8_t +gm82c803c_read(uint16_t port, void *priv) +{ + const gm82c803c_t *dev = (gm82c803c_t *) priv; + uint8_t ret = 0xff; + + if (dev->tries == 2) { + if ((port == 0x0399) && (dev->cur_reg >= 0xa0) && (dev->cur_reg <= 0xa1)) + ret = dev->regs[dev->cur_reg]; + } + + return ret; +} + +static void +gm82c803c_reset(gm82c803c_t *dev) +{ + serial_remove(dev->uart[0]); + serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ); + + serial_remove(dev->uart[1]); + serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ); + + lpt_port_remove(dev->lpt); + lpt_port_setup(dev->lpt, LPT1_ADDR); + + fdc_reset(dev->fdc); + fdc_remove(dev->fdc); + + dev->tries = 0; + memset(dev->regs, 0, 256); + + dev->regs[0xc0] = 0x3c; + dev->regs[0xc2] = 0x03; + dev->regs[0xc3] = 0x3c; + dev->regs[0xc4] = 0x3c; + dev->regs[0xc5] = 0x3d; + dev->regs[0xd5] = 0x3c; + + set_serial_addr(dev, 0); + set_serial_addr(dev, 1); + + lpt_handler(dev); + + fdc_handler(dev); + + if (dev->has_ide) + ide_handler(dev); +} + +static void +gm82c803c_close(void *priv) +{ + gm82c803c_t *dev = (gm82c803c_t *) priv; + + free(dev); +} + +static void * +gm82c803c_init(const device_t *info) +{ + gm82c803c_t *dev = (gm82c803c_t *) calloc(1, sizeof(gm82c803c_t)); + + dev->fdc = device_add(&fdc_at_smc_device); + + dev->has_ide = (info->local >> 8) & 0xff; + + dev->uart[0] = device_add_inst(&ns16550_device, 1); + dev->uart[1] = device_add_inst(&ns16550_device, 2); + + dev->lpt = device_add_inst(&lpt_port_device, 1); + + io_sethandler(0x0398, 0x0002, + gm82c803c_read, NULL, NULL, gm82c803c_write, NULL, NULL, dev); + + dev->dma_map[0] = 4; + for (int i = 1; i < 4; i++) + dev->dma_map[i] = i; + + memset(dev->irq_map, 0xff, 16); + dev->irq_map[0] = 0xff; + for (int i = 1; i < 7; i++) + dev->irq_map[i] = i; + dev->irq_map[1] = 5; + dev->irq_map[5] = 7; + dev->irq_map[7] = 0xff; /* Reserved. */ + dev->irq_map[8] = 10; + + gm82c803c_reset(dev); + + return dev; +} + +const device_t gm82c803c_device = { + .name = "Goldstar GM82C803C", + .internal_name = "gm82c803c", + .flags = 0, + .local = 0, + .init = gm82c803c_init, + .close = gm82c803c_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/sio/sio_it86x1f.c b/src/sio/sio_it86x1f.c index c11b0e6bd..5d11610ad 100644 --- a/src/sio/sio_it86x1f.c +++ b/src/sio/sio_it86x1f.c @@ -296,6 +296,9 @@ it8661f_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *pri if (config->activate && (config->io[0].base != ISAPNP_IO_DISABLED)) { it86x1f_log("IT86x1F: LPT enabled at port %04X IRQ %d\n", config->io[0].base, config->irq[0].irq); lpt_port_setup(dev->lpt, config->io[0].base); + + lpt_port_irq(dev->lpt, config->irq[0].irq); + lpt_port_dma(dev->lpt, (config->dma[0].dma == ISAPNP_DMA_DISABLED) ? -1 : config->dma[0].dma); } else { it86x1f_log("IT86x1F: LPT disabled\n"); } @@ -466,6 +469,13 @@ it86x1f_pnp_write_vendor_reg(uint8_t ld, uint8_t reg, uint8_t val, void *priv) case 0x0f0: dev->ldn_regs[ld][reg & 0x0f] = val & 0x0f; fdc_set_swwp(dev->fdc, !!(val & 0x01)); + if (val & 0x02) { + for (int i = 0; i < 4; i++) + fdc_update_drvrate(dev->fdc, i, 1); + } else { + for (int i = 0; i < 4; i++) + fdc_update_drvrate(dev->fdc, i, 0); + } fdc_set_swap(dev->fdc, !!(val & 0x04)); break; @@ -484,6 +494,8 @@ it86x1f_pnp_write_vendor_reg(uint8_t ld, uint8_t reg, uint8_t val, void *priv) case 0x3f0: dev->ldn_regs[ld][reg & 0x0f] = val & 0x07; + lpt_set_epp(dev->lpt, val & 0x01); + lpt_set_ecp(dev->lpt, val & 0x02); break; case 0x4f0: @@ -772,6 +784,9 @@ it86x1f_reset(it86x1f_t *dev) { it86x1f_log("IT86x1F: reset()\n"); + for (int i = 0; i < 4; i++) + fdc_update_drvrate(dev->fdc, i, 0); + fdc_reset(dev->fdc); serial_remove(dev->uart[0]); @@ -780,6 +795,9 @@ it86x1f_reset(it86x1f_t *dev) lpt_port_remove(dev->lpt); + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + isapnp_enable_card(dev->pnp_card, ISAPNP_CARD_DISABLE); dev->locked = 1; @@ -824,6 +842,7 @@ it86x1f_init(UNUSED(const device_t *info)) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_ext(dev->lpt, 1); dev->gameport = gameport_add(&gameport_sio_device); diff --git a/src/sio/sio_pc87306.c b/src/sio/sio_pc87306.c index 5b55907dd..6cda5bbd1 100644 --- a/src/sio/sio_pc87306.c +++ b/src/sio/sio_pc87306.c @@ -125,13 +125,9 @@ lpt_handler(pc87306_t *dev) uint16_t lptba; uint16_t lpt_port = LPT1_ADDR; uint8_t lpt_irq = LPT2_IRQ; - uint8_t lpt_dma = ((dev->regs[0x18] & 0x06) >> 1); lpt_port_remove(dev->lpt); - if (lpt_dma == 0x00) - lpt_dma = 0xff; - temp = dev->regs[0x01] & 3; lptba = ((uint16_t) dev->regs[0x19]) << 2; @@ -172,8 +168,6 @@ lpt_handler(pc87306_t *dev) lpt_port_setup(dev->lpt, lpt_port); lpt_port_irq(dev->lpt, lpt_irq); - - lpt_port_dma(dev->lpt, lpt_dma); } static void @@ -374,6 +368,8 @@ pc87306_write(uint16_t port, uint8_t val, void *priv) fdc_update_enh_mode(dev->fdc, (val & 4) ? 1 : 0); fdc_update_densel_polarity(dev->fdc, (val & 0x40) ? 1 : 0); } + if (valxor & 0x20) + lpt_set_cnfga_readout(dev->lpt, (val & 0x20) ? 0x18 : 0x10); break; case 0x0f: if (valxor) @@ -470,6 +466,7 @@ pc87306_reset_common(void *priv) 0 = 360 rpm @ 500 kbps for 3.5" 1 = Default, 300 rpm @ 500, 300, 250, 1000 kbps for 3.5" */ + lpt_set_cnfga_readout(dev->lpt, 0x10); lpt_port_remove(dev->lpt); lpt_handler(dev); serial_remove(dev->uart[0x00]); @@ -517,6 +514,7 @@ pc87306_init(UNUSED(const device_t *info)) dev->uart[0x01] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfga_readout(dev->lpt, 0x10); dev->nvr = device_add(&at_mb_nvr_device); diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index 72086fb61..e18d94428 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -267,6 +267,7 @@ fdc_handler(pc87307_t *dev) uint8_t active = (dev->ld_regs[LD_FDC][0x00] & 0x01) && (dev->pm[0x00] & 0x08); uint8_t irq = (dev->ld_regs[LD_FDC][0x40] & 0x0f); + uint8_t dma = (dev->ld_regs[LD_FDC][0x44] & 0x0f); uint16_t addr = ((dev->ld_regs[LD_FDC][0x30] << 8) | dev->ld_regs[LD_FDC][0x31]) & 0xfff8; @@ -274,6 +275,7 @@ fdc_handler(pc87307_t *dev) pc87307_log("Enabling FDC on %04X, IRQ %i...\n", addr, irq); fdc_set_base(dev->fdc, addr); fdc_set_irq(dev->fdc, irq); + fdc_set_dma_ch(dev->fdc, dma); } } @@ -283,16 +285,61 @@ lpt_handler(pc87307_t *dev) uint8_t active = (dev->ld_regs[LD_LPT][0x00] & 0x01) && (dev->pm[0x00] & 0x10); uint8_t irq = (dev->ld_regs[LD_LPT][0x40] & 0x0f); + uint8_t dma = (dev->ld_regs[LD_LPT][0x44] & 0x0f); uint16_t addr = (dev->ld_regs[LD_LPT][0x30] << 8) | dev->ld_regs[LD_LPT][0x31]; + uint8_t mode = (dev->ld_regs[LD_LPT][0xf0] >> 7); + uint16_t mask = 0xfffc; - if (active && (addr <= 0xfffc)) { + if (irq > 15) + irq = 0xff; + + if (dma >= 4) + dma = 0xff; + + lpt_port_remove(dev->lpt); + + switch (mode) { + default: + case 0x00: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x01: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 1); + break; + case 0x02: case 0x03: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x04: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + case 0x07: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + } + + lpt_set_cfg_regs_enabled(dev->lpt, !!(dev->ld_regs[LD_LPT][0xf0] & 0x10)); + + if (active && (addr <= (0xfffc & mask))) { pc87307_log("Enabling LPT1 on %04X...\n", addr); - lpt_port_setup(dev->lpt, addr); + lpt_port_setup(dev->lpt, addr & mask); } else lpt_port_setup(dev->lpt, 0xffff); lpt_port_irq(dev->lpt, irq); + lpt_port_dma(dev->lpt, dma); } static void @@ -852,6 +899,7 @@ pc87307_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfga_readout(dev->lpt, 0x14); switch (info->local & PCX730X_KBC) { default: diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c index 19a18af81..9b50f8181 100644 --- a/src/sio/sio_pc87309.c +++ b/src/sio/sio_pc87309.c @@ -183,6 +183,7 @@ fdc_handler(pc87309_t *dev) uint8_t active = (dev->ld_regs[LD_FDC][0x00] & 0x01) && (dev->pm[0x00] & 0x08); uint8_t irq = (dev->ld_regs[LD_FDC][0x40] & 0x0f); + uint8_t dma = (dev->ld_regs[LD_FDC][0x44] & 0x0f); uint16_t addr = ((dev->ld_regs[LD_FDC][0x30] << 8) | dev->ld_regs[LD_FDC][0x31]) & 0xfff8; @@ -190,6 +191,7 @@ fdc_handler(pc87309_t *dev) pc87309_log("Enabling FDC on %04X, IRQ %i...\n", addr, irq); fdc_set_base(dev->fdc, addr); fdc_set_irq(dev->fdc, irq); + fdc_set_dma_ch(dev->fdc, dma); } } @@ -199,16 +201,61 @@ lpt_handler(pc87309_t *dev) uint8_t active = (dev->ld_regs[LD_LPT][0x00] & 0x01) && (dev->pm[0x00] & 0x10); uint8_t irq = (dev->ld_regs[LD_LPT][0x40] & 0x0f); + uint8_t dma = (dev->ld_regs[LD_LPT][0x44] & 0x0f); uint16_t addr = (dev->ld_regs[LD_LPT][0x30] << 8) | dev->ld_regs[LD_LPT][0x31]; + uint8_t mode = (dev->ld_regs[LD_LPT][0xf0] >> 7); + uint16_t mask = 0xfffc; - if (active && (addr <= 0xfffc)) { + if (irq > 15) + irq = 0xff; + + if (dma >= 4) + dma = 0xff; + + lpt_port_remove(dev->lpt); + + switch (mode) { + default: + case 0x00: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x01: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 1); + break; + case 0x02: case 0x03: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x04: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + case 0x07: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + } + + lpt_set_cfg_regs_enabled(dev->lpt, !!(dev->ld_regs[LD_LPT][0xf0] & 0x10)); + + if (active && (addr <= (0xfffc & mask))) { pc87309_log("Enabling LPT1 on %04X...\n", addr); - lpt_port_setup(dev->lpt, addr); + lpt_port_setup(dev->lpt, addr & mask); } else lpt_port_setup(dev->lpt, 0xffff); lpt_port_irq(dev->lpt, irq); + lpt_port_dma(dev->lpt, dma); } static void @@ -687,6 +734,7 @@ pc87309_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfga_readout(dev->lpt, 0x14); switch (info->local & PCX730X_KBC) { default: diff --git a/src/sio/sio_pc87310.c b/src/sio/sio_pc87310.c index cf6b10bab..b6341abc5 100644 --- a/src/sio/sio_pc87310.c +++ b/src/sio/sio_pc87310.c @@ -85,16 +85,16 @@ lpt_handler(pc87310_t *dev) lpt_port_remove(dev->lpt); switch (temp) { - case 0: + case 0x00: lpt_port = LPT1_ADDR; break; - case 1: + case 0x01: lpt_port = LPT_MDA_ADDR; break; - case 2: + case 0x02: lpt_port = LPT2_ADDR; break; - case 3: + case 0x03: lpt_port = 0x000; lpt_irq = 0xff; break; @@ -195,15 +195,15 @@ pc87310_write(UNUSED(uint16_t port), uint8_t val, void *priv) serial_handler(dev); /* Reconfigure IDE controller. */ - if ((dev->flags & PC87310_IDE) && (valxor & 0x20)) { + if ((dev->flags & PCX73XX_IDE) && (valxor & 0x20)) { pc87310_log("SIO: HDC disabled\n"); ide_pri_disable(); /* Bit 5: 1 = Disable IDE controller. */ if (!(val & 0x20)) { pc87310_log("SIO: HDC enabled\n"); ide_set_base(0, 0x1f0); - ide_set_side(0, 0x3f6); - ide_pri_enable(); + ide_set_side(0, 0x3f6); + ide_pri_enable(); } } @@ -256,7 +256,7 @@ pc87310_reset(pc87310_t *dev) lpt_handler(dev); serial_handler(dev); - if (dev->flags & PC87310_IDE) { + if (dev->flags & PCX73XX_IDE) { ide_pri_disable(); ide_pri_enable(); } @@ -285,17 +285,18 @@ pc87310_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16450_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_ext(dev->lpt, 1); - if (dev->flags & PC87310_IDE) + if (dev->flags & PCX73XX_IDE) device_add((dev->flags & PC87310_ALI) ? &ide_vlb_device : &ide_isa_device); pc87310_reset(dev); - io_sethandler(0x3f3, 0x0001, + io_sethandler(0x03f3, 0x0001, pc87310_read, NULL, NULL, pc87310_write, NULL, NULL, dev); if (dev->flags & PC87310_ALI) - io_sethandler(0x3f1, 0x0001, + io_sethandler(0x03f1, 0x0001, pc87310_read, NULL, NULL, pc87310_write, NULL, NULL, dev); return dev; diff --git a/src/sio/sio_pc87311.c b/src/sio/sio_pc87311.c deleted file mode 100644 index 0b59324d6..000000000 --- a/src/sio/sio_pc87311.c +++ /dev/null @@ -1,319 +0,0 @@ -/* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. - * - * This file is part of the 86Box distribution. - * - * Emulation of the National Semiconductor PC87311 Super I/O - * - * - * - * Authors: Tiseno100 - * - * Copyright 2020 Tiseno100 - */ -#include -#include -#include -#include -#include -#include -#define HAVE_STDARG_H -#include <86box/86box.h> -#include <86box/io.h> -#include <86box/timer.h> -#include <86box/device.h> -#include <86box/lpt.h> -#include <86box/serial.h> -#include <86box/hdc.h> -#include <86box/hdc_ide.h> -#include <86box/fdd.h> -#include <86box/fdc.h> -#include <86box/sio.h> -#include <86box/plat_unused.h> - -#define HAS_IDE_FUNCTIONALITY dev->ide_function - -/* Basic Functionalities */ -#define FUNCTION_ENABLE dev->regs[0x00] -#define FUNCTION_ADDRESS dev->regs[0x01] -#define POWER_TEST dev->regs[0x02] - -/* Base Addresses */ -#define LPT_BA (FUNCTION_ADDRESS & 0x03) -#define UART1_BA ((FUNCTION_ADDRESS >> 2) & 0x03) -#define UART2_BA ((FUNCTION_ADDRESS >> 4) & 0x03) -#define COM_BA ((FUNCTION_ADDRESS >> 6) & 0x03) - -#ifdef ENABLE_PC87311_LOG -int pc87311_do_log = ENABLE_PC87311_LOG; - -static void -pc87311_log(const char *fmt, ...) -{ - va_list ap; - - if (pc87311_do_log) { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } -} -#else -# define pc87311_log(fmt, ...) -#endif - -typedef struct pc87311_t { - uint8_t index; - uint8_t regs[256]; - uint8_t cfg_lock; - uint8_t ide_function; - uint16_t base; - uint16_t irq; - fdc_t *fdc_controller; - serial_t *uart[2]; - lpt_t *lpt; -} pc87311_t; - -void pc87311_fdc_handler(pc87311_t *dev); -void pc87311_uart_handler(uint8_t num, pc87311_t *dev); -void pc87311_lpt_handler(pc87311_t *dev); -void pc87311_ide_handler(pc87311_t *dev); -void pc87311_enable(pc87311_t *dev); - -static void -pc87311_write(uint16_t addr, uint8_t val, void *priv) -{ - pc87311_t *dev = (pc87311_t *) priv; - - switch (addr) { - case 0x398: - case 0x26e: - dev->index = val; - break; - - case 0x399: - case 0x26f: - switch (dev->index) { - case 0x00: - FUNCTION_ENABLE = val; - break; - case 0x01: - FUNCTION_ADDRESS = val; - break; - case 0x02: - POWER_TEST = val; - break; - - default: - break; - } - break; - - default: - break; - } - - pc87311_enable(dev); -} - -static uint8_t -pc87311_read(UNUSED(uint16_t addr), void *priv) -{ - const pc87311_t *dev = (pc87311_t *) priv; - - return dev->regs[dev->index]; -} - -void -pc87311_fdc_handler(pc87311_t *dev) -{ - fdc_remove(dev->fdc_controller); - fdc_set_base(dev->fdc_controller, (FUNCTION_ENABLE & 0x20) ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR); - pc87311_log("PC87311-FDC: BASE %04x\n", (FUNCTION_ENABLE & 0x20) ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR); -} - -uint16_t -com3(pc87311_t *dev) -{ - switch (COM_BA) { - case 0: - return COM3_ADDR; - case 1: - return 0x0338; - case 2: - return COM4_ADDR; - case 3: - return 0x0220; - default: - return COM3_ADDR; - } -} - -uint16_t -com4(pc87311_t *dev) -{ - switch (COM_BA) { - case 0: - return COM4_ADDR; - case 1: - return 0x0238; - case 2: - return 0x02e0; - case 3: - return 0x0228; - default: - return COM4_ADDR; - } -} - -void -pc87311_uart_handler(uint8_t num, pc87311_t *dev) -{ - serial_remove(dev->uart[num & 1]); - - switch (!(num & 1) ? UART1_BA : UART2_BA) { - case 0: - dev->base = COM1_ADDR; - dev->irq = COM1_IRQ; - break; - case 1: - dev->base = COM2_ADDR; - dev->irq = COM2_IRQ; - break; - case 2: - dev->base = com3(dev); - dev->irq = COM3_IRQ; - break; - case 3: - dev->base = com4(dev); - dev->irq = COM4_IRQ; - break; - - default: - break; - } - serial_setup(dev->uart[num & 1], dev->base, dev->irq); - pc87311_log("PC87311-UART%01x: BASE %04x IRQ %01x\n", num & 1, dev->base, dev->irq); -} - -void -pc87311_lpt_handler(pc87311_t *dev) -{ - lpt_port_remove(dev->lpt); - switch (LPT_BA) { - case 0: - dev->base = LPT1_ADDR; - dev->irq = (POWER_TEST & 0x08) ? LPT1_IRQ : LPT2_IRQ; - break; - case 1: - dev->base = LPT_MDA_ADDR; - dev->irq = LPT_MDA_IRQ; - break; - case 2: - dev->base = LPT2_ADDR; - dev->irq = LPT2_IRQ; - break; - - default: - break; - } - lpt_port_setup(dev->lpt, dev->base); - lpt_port_irq(dev->lpt, dev->irq); - pc87311_log("PC87311-LPT: BASE %04x IRQ %01x\n", dev->base, dev->irq); -} - -void -pc87311_ide_handler(pc87311_t *dev) -{ - ide_pri_disable(); - ide_sec_disable(); - - ide_set_base(0, 0x1f0); - ide_set_side(0, 0x3f6); - ide_pri_enable(); - - if (FUNCTION_ENABLE & 0x80) { - ide_set_base(1, 0x170); - ide_set_side(1, 0x376); - ide_sec_enable(); - } - pc87311_log("PC87311-IDE: PRI %01x SEC %01x\n", (FUNCTION_ENABLE >> 6) & 1, (FUNCTION_ENABLE >> 7) & 1); -} - -void -pc87311_enable(pc87311_t *dev) -{ - (FUNCTION_ENABLE & 0x01) ? pc87311_lpt_handler(dev) : lpt_port_remove(dev->lpt); - (FUNCTION_ENABLE & 0x02) ? pc87311_uart_handler(0, dev) : serial_remove(dev->uart[0]); - (FUNCTION_ENABLE & 0x04) ? pc87311_uart_handler(1, dev) : serial_remove(dev->uart[1]); - (FUNCTION_ENABLE & 0x08) ? pc87311_fdc_handler(dev) : fdc_remove(dev->fdc_controller); - if (FUNCTION_ENABLE & 0x20) - pc87311_fdc_handler(dev); - if (HAS_IDE_FUNCTIONALITY) { - (FUNCTION_ENABLE & 0x40) ? pc87311_ide_handler(dev) : ide_pri_disable(); - (FUNCTION_ADDRESS & 0x80) ? pc87311_ide_handler(dev) : ide_sec_disable(); - } -} - -static void -pc87311_close(void *priv) -{ - pc87311_t *dev = (pc87311_t *) priv; - - free(dev); -} - -static void * -pc87311_init(const device_t *info) -{ - pc87311_t *dev = (pc87311_t *) calloc(1, sizeof(pc87311_t)); - - /* Avoid conflicting with machines that make no use of the PC87311 Internal IDE */ - HAS_IDE_FUNCTIONALITY = info->local; - - dev->fdc_controller = device_add(&fdc_at_nsc_device); - dev->uart[0] = device_add_inst(&ns16450_device, 1); - dev->uart[1] = device_add_inst(&ns16450_device, 2); - dev->lpt = device_add_inst(&lpt_port_device, 1); - - if (HAS_IDE_FUNCTIONALITY) - device_add(&ide_isa_2ch_device); - - io_sethandler(0x0398, 0x0002, pc87311_read, NULL, NULL, pc87311_write, NULL, NULL, dev); - io_sethandler(0x026e, 0x0002, pc87311_read, NULL, NULL, pc87311_write, NULL, NULL, dev); - - pc87311_enable(dev); - - return dev; -} - -const device_t pc87311_device = { - .name = "National Semiconductor PC87311", - .internal_name = "pc87311", - .flags = 0, - .local = 0, - .init = pc87311_init, - .close = pc87311_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t pc87311_ide_device = { - .name = "National Semiconductor PC87311 with IDE functionality", - .internal_name = "pc87311_ide", - .flags = 0, - .local = 1, - .init = pc87311_init, - .close = pc87311_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; diff --git a/src/sio/sio_pc87332.c b/src/sio/sio_pc873xx.c similarity index 63% rename from src/sio/sio_pc87332.c rename to src/sio/sio_pc873xx.c index 9e57bf74b..bec747ed2 100644 --- a/src/sio/sio_pc87332.c +++ b/src/sio/sio_pc873xx.c @@ -6,9 +6,7 @@ * * This file is part of the 86Box distribution. * - * Emulation of the NatSemi PC87332 Super I/O chip. - * - * + * Emulation of the NatSemi PC87311 and PC87332 Super I/O chips. * * Authors: Miran Grca, * @@ -35,40 +33,50 @@ #include <86box/fdc.h> #include <86box/sio.h> -typedef struct pc87332_t { +typedef struct pc873xx_t { + uint8_t baddr; + uint8_t is_332; uint8_t tries; uint8_t has_ide; uint8_t fdc_on; uint8_t regs[15]; + uint16_t base_addr; int cur_reg; + int max_reg; fdc_t *fdc; serial_t *uart[2]; lpt_t *lpt; -} pc87332_t; +} pc873xx_t; static void -lpt_handler(pc87332_t *dev) +lpt_handler(pc873xx_t *dev) { int temp; uint16_t lpt_port = LPT1_ADDR; - uint8_t lpt_irq = LPT2_IRQ; + uint8_t lpt_irq = LPT2_IRQ; + uint8_t lpt_dma = ((dev->regs[0x18] & 0x06) >> 1); - temp = dev->regs[0x01] & 3; + lpt_port_remove(dev->lpt); + + if (lpt_dma == 0x00) + lpt_dma = 0xff; + + temp = dev->regs[0x01] & 0x03; switch (temp) { - case 0: + case 0x00: lpt_port = LPT1_ADDR; lpt_irq = (dev->regs[0x02] & 0x08) ? LPT1_IRQ : LPT2_IRQ; break; - case 1: + case 0x01: lpt_port = LPT_MDA_ADDR; - lpt_irq = LPT_MDA_IRQ; + lpt_irq = LPT_MDA_IRQ; break; - case 2: + case 0x02: lpt_port = LPT2_ADDR; lpt_irq = LPT2_IRQ; break; - case 3: + case 0x03: lpt_port = 0x000; lpt_irq = 0xff; break; @@ -77,6 +85,15 @@ lpt_handler(pc87332_t *dev) break; } + lpt_set_ext(dev->lpt, !!(dev->regs[0x02] & 0x80)); + + if (dev->is_332) { + lpt_set_epp(dev->lpt, !!(dev->regs[0x04] & 0x01)); + lpt_set_ecp(dev->lpt, !!(dev->regs[0x04] & 0x04)); + + lpt_port_dma(dev->lpt, lpt_dma); + } + if (lpt_port) lpt_port_setup(dev->lpt, lpt_port); @@ -84,7 +101,7 @@ lpt_handler(pc87332_t *dev) } static void -serial_handler(pc87332_t *dev, int uart) +serial_handler(pc873xx_t *dev, int uart) { int temp; @@ -142,7 +159,7 @@ serial_handler(pc87332_t *dev, int uart) } static void -ide_handler(pc87332_t *dev) +ide_handler(pc873xx_t *dev) { /* TODO: Make an ide_disable(channel) and ide_enable(channel) so we can simplify this. */ if (dev->has_ide == 2) { @@ -161,9 +178,9 @@ ide_handler(pc87332_t *dev) } static void -pc87332_write(uint16_t port, uint8_t val, void *priv) +pc873xx_write(uint16_t port, uint8_t val, void *priv) { - pc87332_t *dev = (pc87332_t *) priv; + pc873xx_t *dev = (pc873xx_t *) priv; uint8_t index; uint8_t valxor; @@ -177,7 +194,7 @@ pc87332_write(uint16_t port, uint8_t val, void *priv) if (dev->tries) { valxor = val ^ dev->regs[dev->cur_reg]; dev->tries = 0; - if ((dev->cur_reg <= 14) && (dev->cur_reg != 8)) + if ((dev->cur_reg <= dev->max_reg) && (dev->cur_reg != 8)) dev->regs[dev->cur_reg] = val; else return; @@ -187,69 +204,83 @@ pc87332_write(uint16_t port, uint8_t val, void *priv) } } - switch (dev->cur_reg) { - case 0: - if (valxor & 1) { + if (dev->cur_reg <= dev->max_reg) switch (dev->cur_reg) { + case 0x00: + if (valxor & 0x01) { lpt_port_remove(dev->lpt); - if ((val & 1) && !(dev->regs[2] & 1)) + if ((val & 0x01) && !(dev->regs[0x02] & 0x01)) lpt_handler(dev); } - if (valxor & 2) { + if (valxor & 0x02) { serial_remove(dev->uart[0]); - if ((val & 2) && !(dev->regs[2] & 1)) + if ((val & 0x02) && !(dev->regs[0x02] & 0x01)) serial_handler(dev, 0); } - if (valxor & 4) { + if (valxor & 0x04) { serial_remove(dev->uart[1]); - if ((val & 4) && !(dev->regs[2] & 1)) + if ((val & 0x04) && !(dev->regs[0x02] & 0x01)) serial_handler(dev, 1); } if (valxor & 0x28) { fdc_remove(dev->fdc); - if ((val & 8) && !(dev->regs[2] & 1)) + if ((val & 0x08) && !(dev->regs[0x02] & 0x01)) fdc_set_base(dev->fdc, (val & 0x20) ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR); } if (dev->has_ide && (valxor & 0xc0)) ide_handler(dev); break; - case 1: - if (valxor & 3) { + case 0x01: + if (valxor & 0x03) { lpt_port_remove(dev->lpt); - if ((dev->regs[0] & 1) && !(dev->regs[2] & 1)) + if ((dev->regs[0x00] & 0x01) && !(dev->regs[0x02] & 0x01)) lpt_handler(dev); } if (valxor & 0xcc) { serial_remove(dev->uart[0]); - if ((dev->regs[0] & 2) && !(dev->regs[2] & 1)) + if ((dev->regs[0x00] & 0x02) && !(dev->regs[0x02] & 0x01)) serial_handler(dev, 0); } if (valxor & 0xf0) { serial_remove(dev->uart[1]); - if ((dev->regs[0] & 4) && !(dev->regs[2] & 1)) + if ((dev->regs[0x00] & 0x04) && !(dev->regs[0x02] & 0x01)) serial_handler(dev, 1); } break; - case 2: - if (valxor & 1) { + case 0x02: + if (valxor & 0x01) { lpt_port_remove(dev->lpt); serial_remove(dev->uart[0]); serial_remove(dev->uart[1]); fdc_remove(dev->fdc); - if (!(val & 1)) { - if (dev->regs[0] & 1) + if (!(val & 0x01)) { + if (dev->regs[0x00] & 0x01) lpt_handler(dev); - if (dev->regs[0] & 2) + if (dev->regs[0x00] & 0x02) serial_handler(dev, 0); - if (dev->regs[0] & 4) + if (dev->regs[0x00] & 0x04) serial_handler(dev, 1); - if (dev->regs[0] & 8) - fdc_set_base(dev->fdc, (dev->regs[0] & 0x20) ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR); + if (dev->regs[0x00] & 0x08) + fdc_set_base(dev->fdc, (dev->regs[0x00] & 0x20) ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR); } } - if (valxor & 8) { + if (valxor & 0x88) { lpt_port_remove(dev->lpt); - if ((dev->regs[0] & 1) && !(dev->regs[2] & 1)) + if ((dev->regs[0x00] & 0x01) && !(dev->regs[0x02] & 0x01)) + lpt_handler(dev); + } + break; + case 0x04: + if (valxor & 0x05) { + lpt_port_remove(dev->lpt); + if ((dev->regs[0x00] & 0x01) && !(dev->regs[0x02] & 0x01)) + lpt_handler(dev); + } + break; + case 0x06: + if (valxor & 0x08) { + lpt_port_remove(dev->lpt); + if ((dev->regs[0x00] & 0x01) && !(dev->regs[0x02] & 0x01)) lpt_handler(dev); } break; @@ -260,9 +291,9 @@ pc87332_write(uint16_t port, uint8_t val, void *priv) } uint8_t -pc87332_read(uint16_t port, void *priv) +pc873xx_read(uint16_t port, void *priv) { - pc87332_t *dev = (pc87332_t *) priv; + pc873xx_t *dev = (pc873xx_t *) priv; uint8_t ret = 0xff; uint8_t index; @@ -283,7 +314,7 @@ pc87332_read(uint16_t port, void *priv) } void -pc87332_reset(pc87332_t *dev) +pc873xx_reset(pc873xx_t *dev) { memset(dev->regs, 0, 15); @@ -314,17 +345,17 @@ pc87332_reset(pc87332_t *dev) } static void -pc87332_close(void *priv) +pc873xx_close(void *priv) { - pc87332_t *dev = (pc87332_t *) priv; + pc873xx_t *dev = (pc873xx_t *) priv; free(dev); } static void * -pc87332_init(const device_t *info) +pc873xx_init(const device_t *info) { - pc87332_t *dev = (pc87332_t *) calloc(1, sizeof(pc87332_t)); + pc873xx_t *dev = (pc873xx_t *) calloc(1, sizeof(pc873xx_t)); dev->fdc = device_add(&fdc_at_nsc_device); @@ -333,84 +364,45 @@ pc87332_init(const device_t *info) dev->lpt = device_add_inst(&lpt_port_device, 1); - dev->has_ide = (info->local >> 8) & 0xff; - dev->fdc_on = (info->local >> 16) & 0xff; - pc87332_reset(dev); + dev->is_332 = !!(info->local & PC87332); + dev->max_reg = dev->is_332 ? 0x08 : 0x02; - if ((info->local & 0xff) == 0x01) { - io_sethandler(0x398, 0x0002, - pc87332_read, NULL, NULL, pc87332_write, NULL, NULL, dev); - } else { - io_sethandler(0x02e, 0x0002, - pc87332_read, NULL, NULL, pc87332_write, NULL, NULL, dev); + dev->has_ide = info->local & (PCX73XX_IDE_PRI | PCX73XX_IDE_SEC); + dev->fdc_on = info->local & PCX73XX_FDC_ON; + + dev->baddr = (info->local & PCX730X_BADDR) >> PCX730X_BADDR_SHIFT; + pc873xx_reset(dev); + + switch (dev->baddr) { + default: + case 0x00: + dev->base_addr = 0x0398; + break; + case 0x01: + dev->base_addr = 0x026e; + break; + case 0x02: + dev->base_addr = 0x015c; + break; + case 0x03: + /* Our PC87332 machine use this unless otherwise specified. */ + dev->base_addr = 0x002e; + break; } + io_sethandler(dev->base_addr, 0x0002, + pc873xx_read, NULL, NULL, pc873xx_write, NULL, NULL, dev); + return dev; } -const device_t pc87332_device = { - .name = "National Semiconductor PC87332 Super I/O", - .internal_name = "pc87332", +const device_t pc873xx_device = { + .name = "National Semiconductor PC873xx Super I/O", + .internal_name = "pc873xx", .flags = 0, .local = 0x00, - .init = pc87332_init, - .close = pc87332_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t pc87332_398_device = { - .name = "National Semiconductor PC87332 Super I/O (Port 398h)", - .internal_name = "pc87332_398", - .flags = 0, - .local = 0x01, - .init = pc87332_init, - .close = pc87332_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t pc87332_398_ide_device = { - .name = "National Semiconductor PC87332 Super I/O (Port 398h) (With IDE)", - .internal_name = "pc87332_398_ide", - .flags = 0, - .local = 0x101, - .init = pc87332_init, - .close = pc87332_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t pc87332_398_ide_sec_device = { - .name = "National Semiconductor PC87332 Super I/O (Port 398h) (With Secondary IDE)", - .internal_name = "pc87332_398_ide_sec", - .flags = 0, - .local = 0x201, - .init = pc87332_init, - .close = pc87332_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t pc87332_398_ide_fdcon_device = { - .name = "National Semiconductor PC87332 Super I/O (Port 398h) (With IDE and FDC on)", - .internal_name = "pc87332_398_ide_fdcon", - .flags = 0, - .local = 0x10101, - .init = pc87332_init, - .close = pc87332_close, + .init = pc873xx_init, + .close = pc873xx_close, .reset = NULL, .available = NULL, .speed_changed = NULL, diff --git a/src/sio/sio_prime3b.c b/src/sio/sio_prime3b.c deleted file mode 100644 index 338f8ee90..000000000 --- a/src/sio/sio_prime3b.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. - * - * This file is part of the 86Box distribution. - * - * Emulation of the Goldstar Prime3B Super I/O - * - * - * - * Authors: Tiseno100 - * - * Copyright 2021 Tiseno100 - */ -#include -#include -#include -#include -#include -#include -#define HAVE_STDARG_H -#include <86box/86box.h> -#include <86box/io.h> -#include <86box/timer.h> -#include <86box/device.h> -#include <86box/lpt.h> -#include <86box/serial.h> -#include <86box/hdc.h> -#include <86box/hdc_ide.h> -#include <86box/fdd.h> -#include <86box/fdc.h> -#include <86box/sio.h> -#include <86box/plat_unused.h> - -#define FSR dev->regs[0xa0] -#define ASR dev->regs[0xa1] -#define PDR dev->regs[0xa2] -#define HAS_IDE_FUNCTIONALITY dev->ide_function - -#ifdef ENABLE_PRIME3B_LOG -int prime3b_do_log = ENABLE_PRIME3B_LOG; - -static void -prime3b_log(const char *fmt, ...) -{ - va_list ap; - - if (prime3b_do_log) { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } -} -#else -# define prime3b_log(fmt, ...) -#endif - -typedef struct prime3b_t { - uint8_t index; - uint8_t regs[256]; - uint8_t cfg_lock; - uint8_t ide_function; - uint16_t com3_addr; - uint16_t com4_addr; - - fdc_t *fdc_controller; - - serial_t *uart[2]; - lpt_t *lpt; -} prime3b_t; - -void prime3b_fdc_handler(prime3b_t *dev); -void prime3b_uart_handler(uint8_t num, prime3b_t *dev); -void prime3b_lpt_handler(prime3b_t *dev); -void prime3b_ide_handler(prime3b_t *dev); -void prime3b_enable(prime3b_t *dev); -void prime3b_powerdown(prime3b_t *dev); - -static void -prime3b_write(uint16_t addr, uint8_t val, void *priv) -{ - prime3b_t *dev = (prime3b_t *) priv; - - if (addr == 0x398) { - dev->index = val; - - /* Enter/Escape Configuration Mode */ - if (val == 0x33) - dev->cfg_lock = 0; - else if (val == 0xcc) - dev->cfg_lock = 1; - } else if ((addr == 0x399) && !dev->cfg_lock) { - switch (dev->index) { - case 0xa0: /* Function Selection Register (FSR) */ - FSR = val; - prime3b_enable(dev); - break; - case 0xa1: /* Address Selection Register (ASR) */ - ASR = val; - prime3b_enable(dev); - break; - case 0xa2: /* Power Down Register (PDR) */ - dev->regs[0xa2] = val; - break; - case 0xa3: /* Test Mode Register (TMR) */ - dev->regs[0xa3] = val; - break; - case 0xa4: /* Miscellaneous Function Register */ - dev->regs[0xa4] = val; - switch ((dev->regs[0xa4] >> 6) & 3) { - case 0: - dev->com3_addr = COM3_ADDR; - dev->com4_addr = COM4_ADDR; - break; - case 1: - dev->com3_addr = 0x338; - dev->com4_addr = 0x238; - break; - case 2: - dev->com3_addr = COM4_ADDR; - dev->com4_addr = 0x2e0; - break; - case 3: - dev->com3_addr = 0x220; - dev->com4_addr = 0x228; - break; - - default: - break; - } - break; - case 0xa5: /* ECP Register */ - dev->regs[0xa5] = val; - break; - - default: - break; - } - } -} - -static uint8_t -prime3b_read(UNUSED(uint16_t addr), void *priv) -{ - const prime3b_t *dev = (prime3b_t *) priv; - - return dev->regs[dev->index]; -} - -void -prime3b_fdc_handler(prime3b_t *dev) -{ - uint16_t fdc_base = !(ASR & 0x40) ? FDC_PRIMARY_ADDR : FDC_SECONDARY_ADDR; - fdc_remove(dev->fdc_controller); - fdc_set_base(dev->fdc_controller, fdc_base); - prime3b_log("Prime3B-FDC: Enabled with base %03x\n", fdc_base); -} - -void -prime3b_uart_handler(uint8_t num, prime3b_t *dev) -{ - uint16_t uart_base; - if ((ASR >> (3 + 2 * num)) & 1) - uart_base = !((ASR >> (2 + 2 * num)) & 1) ? dev->com3_addr : dev->com4_addr; - else - uart_base = !((ASR >> (2 + 2 * num)) & 1) ? COM1_ADDR : COM2_ADDR; - - serial_remove(dev->uart[num]); - serial_setup(dev->uart[num], uart_base, 4 - num); - prime3b_log("Prime3B-UART%d: Enabled with base %03x\n", num, uart_base); -} - -void -prime3b_lpt_handler(prime3b_t *dev) -{ - uint16_t lpt_base = (ASR & 2) ? LPT_MDA_ADDR : (!(ASR & 1) ? LPT1_ADDR : LPT2_ADDR); - lpt_port_remove(dev->lpt); - lpt_port_setup(dev->lpt, lpt_base); - lpt_port_irq(dev->lpt, LPT1_IRQ); - prime3b_log("Prime3B-LPT: Enabled with base %03x\n", lpt_base); -} - -void -prime3b_ide_handler(prime3b_t *dev) -{ - ide_pri_disable(); - uint16_t ide_base = !(ASR & 0x80) ? 0x1f0 : 0x170; - uint16_t ide_side = ide_base + 0x206; - ide_set_base(0, ide_base); - ide_set_side(0, ide_side); - prime3b_log("Prime3B-IDE: Enabled with base %03x and side %03x\n", ide_base, ide_side); -} - -void -prime3b_enable(prime3b_t *dev) -{ - /* - Simulate a device enable/disable scenario - - Register A0: Function Selection Register (FSR) - Bit 7: Gameport - Bit 6: 4 FDD Enable - Bit 5: IDE - Bit 4: FDC - Bit 3: UART 2 - Bit 2: UART 1 - Bit 1/0: PIO (0/0 Bidirectional , 0/1 ECP, 1/0 EPP, 1/1 Disabled) - - Note: 86Box LPT is simplistic and can't do ECP or EPP. - */ - - !(FSR & 3) ? prime3b_lpt_handler(dev) : lpt_port_remove(dev->lpt); - (FSR & 4) ? prime3b_uart_handler(0, dev) : serial_remove(dev->uart[0]); - (FSR & 8) ? prime3b_uart_handler(1, dev) : serial_remove(dev->uart[1]); - (FSR & 0x10) ? prime3b_fdc_handler(dev) : fdc_remove(dev->fdc_controller); - if (HAS_IDE_FUNCTIONALITY) - (FSR & 0x20) ? prime3b_ide_handler(dev) : ide_pri_disable(); -} - -void -prime3b_powerdown(prime3b_t *dev) -{ - /* Note: It can be done more efficiently for sure */ - uint8_t old_base = PDR; - - if (PDR & 1) - PDR |= 0x1e; - - if (PDR & 0x40) - io_removehandler(0x0398, 0x0002, prime3b_read, NULL, NULL, prime3b_write, NULL, NULL, dev); - - if (PDR & 2) - fdc_remove(dev->fdc_controller); - - if (PDR & 4) - serial_remove(dev->uart[0]); - - if (PDR & 8) - serial_remove(dev->uart[1]); - - if (PDR & 0x10) - lpt_port_remove(dev->lpt); - - if (PDR & 1) - PDR = old_base; -} - -static void -prime3b_close(void *priv) -{ - prime3b_t *dev = (prime3b_t *) priv; - - free(dev); -} - -static void * -prime3b_init(const device_t *info) -{ - prime3b_t *dev = (prime3b_t *) calloc(1, sizeof(prime3b_t)); - - /* Avoid conflicting with machines that make no use of the Prime3B Internal IDE */ - HAS_IDE_FUNCTIONALITY = info->local; - - dev->regs[0xa0] = 3; - - dev->fdc_controller = device_add(&fdc_at_device); - dev->uart[0] = device_add_inst(&ns16550_device, 1); - dev->uart[1] = device_add_inst(&ns16550_device, 2); - dev->lpt = device_add_inst(&lpt_port_device, 1); - if (HAS_IDE_FUNCTIONALITY) - device_add(&ide_isa_device); - - dev->com3_addr = COM3_ADDR; - dev->com4_addr = COM4_ADDR; - fdc_reset(dev->fdc_controller); - - prime3b_enable(dev); - - io_sethandler(0x0398, 0x0002, prime3b_read, NULL, NULL, prime3b_write, NULL, NULL, dev); - - return dev; -} - -const device_t prime3b_device = { - .name = "Goldstar Prime3B", - .internal_name = "prime3b", - .flags = 0, - .local = 0, - .init = prime3b_init, - .close = prime3b_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t prime3b_ide_device = { - .name = "Goldstar Prime3B with IDE functionality", - .internal_name = "prime3b_ide", - .flags = 0, - .local = 1, - .init = prime3b_init, - .close = prime3b_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; diff --git a/src/sio/sio_prime3c.c b/src/sio/sio_prime3c.c deleted file mode 100644 index 3b06d8789..000000000 --- a/src/sio/sio_prime3c.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. - * - * This file is part of the 86Box distribution. - * - * Emulation of the LG Prime3C Super I/O - * - * - * - * Authors: Tiseno100 - * - * Copyright 2020 Tiseno100 - */ -#include -#include -#include -#include -#include -#include -#define HAVE_STDARG_H -#include <86box/86box.h> -#include <86box/io.h> -#include <86box/timer.h> -#include <86box/device.h> -#include <86box/lpt.h> -#include <86box/serial.h> -#include <86box/hdc.h> -#include <86box/hdc_ide.h> -#include <86box/fdd.h> -#include <86box/fdc.h> -#include <86box/sio.h> -#include <86box/plat_unused.h> - -#ifdef ENABLE_PRIME3C_LOG -int prime3c_do_log = ENABLE_PRIME3C_LOG; - -static void -prime3c_log(const char *fmt, ...) -{ - va_list ap; - - if (prime3c_do_log) { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } -} -#else -# define prime3c_log(fmt, ...) -#endif - -/* Function Select(Note on prime3c_enable) */ -#define FUNCTION_SELECT dev->regs[0xc2] - -/* Base Address Registers */ -#define FDC_BASE_ADDRESS dev->regs[0xc3] -#define IDE_BASE_ADDRESS dev->regs[0xc4] -#define IDE_SIDE_ADDRESS dev->regs[0xc5] -#define LPT_BASE_ADDRESS dev->regs[0xc6] -#define UART1_BASE_ADDRESS dev->regs[0xc7] -#define UART2_BASE_ADDRESS dev->regs[0xc8] - -/* FDC/LPT Configuration */ -#define FDC_LPT_DMA dev->regs[0xc9] -#define FDC_LPT_IRQ dev->regs[0xca] - -/* UART 1/2 Configuration */ -#define UART_IRQ dev->regs[0xcb] - -/* Miscellaneous Configuration*/ -#define FDC_SWAP (dev->regs[0xd6] & 0x01) - -/* IDE functionality(Note on Init) */ -#define HAS_IDE_FUNCTIONALITY dev->ide_function - -typedef struct prime3c_t { - uint8_t index; - uint8_t regs[256]; - uint8_t cfg_lock; - uint8_t ide_function; - - fdc_t *fdc_controller; - - serial_t *uart[2]; - lpt_t *lpt; -} prime3c_t; - -void prime3c_fdc_handler(prime3c_t *dev); -void prime3c_uart_handler(uint8_t num, prime3c_t *dev); -void prime3c_lpt_handler(prime3c_t *dev); -void prime3c_ide_handler(prime3c_t *dev); -void prime3c_enable(prime3c_t *dev); - -static void -prime3c_write(uint16_t addr, uint8_t val, void *priv) -{ - prime3c_t *dev = (prime3c_t *) priv; - - switch (addr) { - case 0x398: - dev->index = val; - - /* Enter/Escape Configuration Mode */ - if (val == 0x33) - dev->cfg_lock = 0; - else if (val == 0x55) - dev->cfg_lock = 1; - break; - - case 0x399: - if (!dev->cfg_lock) { - switch (dev->index) { - case 0xc2: - FUNCTION_SELECT = val & 0xbf; - prime3c_enable(dev); - break; - - case 0xc3: - FDC_BASE_ADDRESS = val & 0xfc; - prime3c_fdc_handler(dev); - break; - - case 0xc4: - IDE_BASE_ADDRESS = val & 0xfc; - if (HAS_IDE_FUNCTIONALITY) - prime3c_ide_handler(dev); - break; - - case 0xc5: - IDE_SIDE_ADDRESS = (val & 0xfc) | 0x02; - if (HAS_IDE_FUNCTIONALITY) - prime3c_ide_handler(dev); - break; - - case 0xc6: - LPT_BASE_ADDRESS = val; - break; - - case 0xc7: - UART1_BASE_ADDRESS = val & 0xfe; - prime3c_uart_handler(0, dev); - break; - - case 0xc8: - UART2_BASE_ADDRESS = val & 0xfe; - prime3c_uart_handler(1, dev); - break; - - case 0xc9: - FDC_LPT_DMA = val; - prime3c_fdc_handler(dev); - break; - - case 0xca: - FDC_LPT_IRQ = val; - prime3c_fdc_handler(dev); - prime3c_lpt_handler(dev); - break; - - case 0xcb: - UART_IRQ = val; - prime3c_uart_handler(0, dev); - prime3c_uart_handler(1, dev); - break; - - case 0xcd: - case 0xce: - dev->regs[dev->index] = val; - break; - - case 0xcf: - dev->regs[dev->index] = val & 0x3f; - break; - - case 0xd0: - dev->regs[dev->index] = val & 0xfc; - break; - - case 0xd1: - dev->regs[dev->index] = val & 0x3f; - break; - - case 0xd3: - dev->regs[dev->index] = val & 0x7c; - break; - - case 0xd5: - case 0xd6: - case 0xd7: - case 0xd8: - dev->regs[dev->index] = val; - break; - - default: - break; - } - } - break; - - default: - break; - } -} - -static uint8_t -prime3c_read(UNUSED(uint16_t addr), void *priv) -{ - const prime3c_t *dev = (prime3c_t *) priv; - - return dev->regs[dev->index]; -} - -void -prime3c_fdc_handler(prime3c_t *dev) -{ - fdc_remove(dev->fdc_controller); - if (FUNCTION_SELECT & 0x10) { - fdc_set_base(dev->fdc_controller, FDC_BASE_ADDRESS << 2); - fdc_set_irq(dev->fdc_controller, (FDC_LPT_IRQ >> 4) & 0xf); - fdc_set_dma_ch(dev->fdc_controller, (FDC_LPT_DMA >> 4) & 0xf); - fdc_set_swap(dev->fdc_controller, FDC_SWAP); - prime3c_log("Prime3C-FDC: BASE %04x IRQ %01x DMA %01x\n", FDC_BASE_ADDRESS << 2, (FDC_LPT_IRQ >> 4) & 0xf, (FDC_LPT_DMA >> 4) & 0xf); - } -} - -void -prime3c_uart_handler(uint8_t num, prime3c_t *dev) -{ - serial_remove(dev->uart[num & 1]); - if (FUNCTION_SELECT & (!(num & 1) ? 0x04 : 0x08)) { - serial_setup(dev->uart[num & 1], (!(num & 1) ? UART1_BASE_ADDRESS : UART2_BASE_ADDRESS) << 2, (UART_IRQ >> (!(num & 1) ? 4 : 0)) & 0xf); - prime3c_log("Prime3C-UART%01x: BASE %04x IRQ %01x\n", num & 1, (!(num & 1) ? UART1_BASE_ADDRESS : UART2_BASE_ADDRESS) << 2, (UART_IRQ >> (!(num & 1) ? 4 : 0)) & 0xf); - } -} - -void -prime3c_lpt_handler(prime3c_t *dev) -{ - lpt_port_remove(dev->lpt); - - if (!(FUNCTION_SELECT & 0x03)) { - lpt_port_setup(dev->lpt, LPT_BASE_ADDRESS << 2); - lpt_port_irq(dev->lpt, FDC_LPT_IRQ & 0xf); - - prime3c_log("Prime3C-LPT: BASE %04x IRQ %02x\n", LPT_BASE_ADDRESS << 2, FDC_LPT_IRQ & 0xf); - } -} - -void -prime3c_ide_handler(prime3c_t *dev) -{ - ide_pri_disable(); - if (FUNCTION_SELECT & 0x20) { - ide_set_base(0, IDE_BASE_ADDRESS << 2); - ide_set_side(0, IDE_SIDE_ADDRESS << 2); - ide_pri_enable(); - prime3c_log("Prime3C-IDE: BASE %04x SIDE %04x\n", IDE_BASE_ADDRESS << 2, IDE_SIDE_ADDRESS << 2); - } -} - -void -prime3c_enable(prime3c_t *dev) -{ - /* - Simulate a device enable/disable scenario - - Register C2: Function Select - Bit 7: Gameport - Bit 6: Reserved - Bit 5: IDE - Bit 4: FDC - Bit 3: UART 2 - Bit 2: UART 1 - Bit 1/0: PIO (0/0 Unidirectional , 0/1 ECP, 1/0 EPP, 1/1 Disabled) - - Note: 86Box LPT is simplistic and can't do ECP or EPP. - */ - - !(FUNCTION_SELECT & 0x03) ? prime3c_lpt_handler(dev) : lpt_port_remove(dev->lpt); - (FUNCTION_SELECT & 0x04) ? prime3c_uart_handler(0, dev) : serial_remove(dev->uart[0]); - (FUNCTION_SELECT & 0x08) ? prime3c_uart_handler(1, dev) : serial_remove(dev->uart[1]); - (FUNCTION_SELECT & 0x10) ? prime3c_fdc_handler(dev) : fdc_remove(dev->fdc_controller); - if (HAS_IDE_FUNCTIONALITY) - (FUNCTION_SELECT & 0x20) ? prime3c_ide_handler(dev) : ide_pri_disable(); -} - -static void -prime3c_close(void *priv) -{ - prime3c_t *dev = (prime3c_t *) priv; - - free(dev); -} - -static void * -prime3c_init(const device_t *info) -{ - prime3c_t *dev = (prime3c_t *) calloc(1, sizeof(prime3c_t)); - - /* Avoid conflicting with machines that make no use of the Prime3C Internal IDE */ - HAS_IDE_FUNCTIONALITY = info->local; - - dev->regs[0xc0] = 0x3c; - dev->regs[0xc2] = 0x03; - dev->regs[0xc3] = 0x3c; - dev->regs[0xc4] = 0x3c; - dev->regs[0xc5] = 0x3d; - dev->regs[0xd5] = 0x3c; - - dev->fdc_controller = device_add(&fdc_at_device); - dev->uart[0] = device_add_inst(&ns16550_device, 1); - dev->uart[1] = device_add_inst(&ns16550_device, 2); - dev->lpt = device_add_inst(&lpt_port_device, 1); - if (HAS_IDE_FUNCTIONALITY) - device_add(&ide_isa_device); - - prime3c_fdc_handler(dev); - prime3c_uart_handler(0, dev); - prime3c_uart_handler(1, dev); - prime3c_lpt_handler(dev); - if (HAS_IDE_FUNCTIONALITY) - prime3c_ide_handler(dev); - - io_sethandler(0x0398, 0x0002, prime3c_read, NULL, NULL, prime3c_write, NULL, NULL, dev); - - return dev; -} - -const device_t prime3c_device = { - .name = "Goldstar Prime3C", - .internal_name = "prime3c", - .flags = 0, - .local = 0, - .init = prime3c_init, - .close = prime3c_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t prime3c_ide_device = { - .name = "Goldstar Prime3C with IDE functionality", - .internal_name = "prime3c_ide", - .flags = 0, - .local = 1, - .init = prime3c_init, - .close = prime3c_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; diff --git a/src/sio/sio_um8669f.c b/src/sio/sio_um8669f.c index 2ec934465..c42cdd1b6 100644 --- a/src/sio/sio_um8669f.c +++ b/src/sio/sio_um8669f.c @@ -92,7 +92,8 @@ static uint8_t um8669f_pnp_rom[] = { 0x15, 0x41, 0xd0, 0x04, 0x00, 0x01, /* logical device PNP0400, can participate in boot */ 0x22, 0xfa, 0x1f, /* IRQ 1/3/4/5/6/7/8/9/10/11/12 */ - 0x47, 0x00, 0x00, 0x01, 0xf8, 0x03, 0x08, 0x08, /* I/O 0x100-0x3F8, decodes 10-bit, 8-byte alignment, 8 addresses */ + 0x2a, 0x0f, 0x0c, /* DMA 0/1/2/3, compatibility, no count by word, count by byte, is bus master, 8-bit only */ + 0x47, 0x01, 0x00, 0x01, 0xf8, 0x0f, 0x08, 0x08, /* I/O 0x100-0x3F8, decodes 16-bit, 8-byte alignment, 8 addresses */ 0x15, 0x41, 0xd0, 0x06, 0x00, 0x01, /* logical device PNP0600, can participate in boot */ 0x22, 0xfa, 0x1f, /* IRQ 1/3/4/5/6/7/8/9/10/11/12 */ @@ -120,7 +121,8 @@ static const isapnp_device_config_t um8669f_pnp_defaults[] = { }, { .activate = 1, .io = { { .base = LPT1_ADDR }, }, - .irq = { { .irq = LPT1_IRQ }, } + .irq = { { .irq = LPT1_IRQ }, }, + .dma = { { .dma = 3 }, } }, { .activate = 0, .io = { { .base = 0x1f0 }, }, @@ -268,6 +270,9 @@ um8669f_write(uint16_t port, uint8_t val, void *priv) if (dev->cur_reg == 0xc1) { um8669f_log("UM8669F: ISAPnP %sabled\n", (val & 0x80) ? "en" : "dis"); isapnp_enable_card(dev->pnp_card, (val & 0x80) ? ISAPNP_CARD_FORCE_CONFIG : ISAPNP_CARD_DISABLE); + } else if (dev->cur_reg == 0xc0) { + lpt_set_epp(dev->lpt, val & 0x08); + lpt_set_ecp(dev->lpt, val & 0x10); } } } @@ -304,6 +309,9 @@ um8669f_reset(um8669f_t *dev) lpt_port_remove(dev->lpt); + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + if (dev->ide < IDE_BUS_MAX) ide_remove_handlers(dev->ide); @@ -341,8 +349,9 @@ um8669f_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_ext(dev->lpt, 1); - dev->ide = info->local; + dev->ide = (uint8_t) (info->local - 1); if (dev->ide < IDE_BUS_MAX) device_add(&ide_isa_device); @@ -360,20 +369,6 @@ const device_t um8669f_device = { .name = "UMC UM8669F Super I/O", .internal_name = "um8669f", .flags = 0, - .local = 0xff, - .init = um8669f_init, - .close = um8669f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um8669f_ide_device = { - .name = "UMC UM8669F Super I/O (With IDE)", - .internal_name = "um8669f_ide", - .flags = 0, .local = 0, .init = um8669f_init, .close = um8669f_close, @@ -383,17 +378,3 @@ const device_t um8669f_ide_device = { .force_redraw = NULL, .config = NULL }; - -const device_t um8669f_ide_sec_device = { - .name = "UMC UM8669F Super I/O (With Secondary IDE)", - .internal_name = "um8669f_ide_sec", - .flags = 0, - .local = 1, - .init = um8669f_init, - .close = um8669f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; diff --git a/src/sio/sio_um8663f.c b/src/sio/sio_um866x.c similarity index 51% rename from src/sio/sio_um8663f.c rename to src/sio/sio_um866x.c index f51810972..a90bee64d 100644 --- a/src/sio/sio_um8663f.c +++ b/src/sio/sio_um866x.c @@ -6,7 +6,8 @@ * * This file is part of the 86Box distribution. * - * Implementation of the UMC UMF8663F Super I/O chip. + * Implementation of the UMC UM82C862F, UM82C863F, UM86863F, + * and UM8663BF Super I/O chips. * * Authors: Miran Grca, * @@ -35,25 +36,25 @@ #include <86box/random.h> #include <86box/plat_unused.h> -#ifdef ENABLE_UM8663F_LOG -int um8663f_do_log = ENABLE_UM8663F_LOG; +#ifdef ENABLE_UM866X_LOG +int um866x_do_log = ENABLE_UM866X_LOG; static void -um8663f_log(const char *fmt, ...) +um866x_log(const char *fmt, ...) { va_list ap; - if (um8663f_do_log) { + if (um866x_do_log) { va_start(ap, fmt); pclog_ex(fmt, ap); va_end(ap); } } #else -# define um8663f_log(fmt, ...) +# define um866x_log(fmt, ...) #endif -typedef struct um8663f_t { +typedef struct um866x_t { uint8_t max_reg; uint8_t ide; uint8_t locked; @@ -64,10 +65,10 @@ typedef struct um8663f_t { serial_t *uart[2]; lpt_t * lpt; -} um8663f_t; +} um866x_t; static void -um8663f_fdc_handler(um8663f_t *dev) +um866x_fdc_handler(um866x_t *dev) { fdc_remove(dev->fdc); if (dev->regs[0] & 0x01) @@ -75,7 +76,7 @@ um8663f_fdc_handler(um8663f_t *dev) } static void -um8663f_uart_handler(um8663f_t *dev, int port) +um866x_uart_handler(um866x_t *dev, int port) { uint8_t shift = (port + 1); @@ -102,10 +103,32 @@ um8663f_uart_handler(um8663f_t *dev, int port) } static void -um8663f_lpt_handler(um8663f_t *dev) +um866x_lpt_handler(um866x_t *dev) { + int enabled = (dev->regs[0] & 0x08); + lpt_port_remove(dev->lpt); - if (dev->regs[0] & 0x08) { + switch(dev->regs[1] & 0xc0) { + case 0x00: + enabled = 0; + break; + case 0x40: + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x80: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 1); + break; + case 0xc0: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + } + if (enabled) { switch ((dev->regs[1] >> 3) & 0x01) { case 0x01: lpt_port_setup(dev->lpt, LPT1_ADDR); @@ -123,7 +146,7 @@ um8663f_lpt_handler(um8663f_t *dev) } static void -um8663f_ide_handler(um8663f_t *dev) +um866x_ide_handler(um866x_t *dev) { int board = dev->ide - 1; @@ -137,12 +160,12 @@ um8663f_ide_handler(um8663f_t *dev) } static void -um8663f_write(uint16_t port, uint8_t val, void *priv) +um866x_write(uint16_t port, uint8_t val, void *priv) { - um8663f_t *dev = (um8663f_t *) priv; + um866x_t *dev = (um866x_t *) priv; uint8_t valxor; - um8663f_log("UM8663F: write(%04X, %02X)\n", port, val); + um866x_log("UM866X: write(%04X, %02X)\n", port, val); if (dev->locked) { if ((port == 0x108) && (val == 0xaa)) @@ -160,15 +183,15 @@ um8663f_write(uint16_t port, uint8_t val, void *priv) /* Port enable register. */ case 0x00: if (valxor & 0x10) - um8663f_ide_handler(dev); + um866x_ide_handler(dev); if (valxor & 0x08) - um8663f_lpt_handler(dev); + um866x_lpt_handler(dev); if (valxor & 0x04) - um8663f_uart_handler(dev, 1); + um866x_uart_handler(dev, 1); if (valxor & 0x02) - um8663f_uart_handler(dev, 0); + um866x_uart_handler(dev, 0); if (valxor & 0x01) - um8663f_fdc_handler(dev); + um866x_fdc_handler(dev); break; /* Port configuration register: @@ -184,16 +207,16 @@ um8663f_write(uint16_t port, uint8_t val, void *priv) - Bit 0 = 0 = FDC is 370h, 1 = UART 2 is 3f0h. */ case 0x01: + if (valxor & 0xc8) + um866x_lpt_handler(dev); if (valxor & 0x10) - um8663f_ide_handler(dev); - if (valxor & 0x08) - um8663f_lpt_handler(dev); + um866x_ide_handler(dev); if (valxor & 0x04) - um8663f_uart_handler(dev, 1); + um866x_uart_handler(dev, 1); if (valxor & 0x02) - um8663f_uart_handler(dev, 0); + um866x_uart_handler(dev, 0); if (valxor & 0x01) - um8663f_fdc_handler(dev); + um866x_fdc_handler(dev); break; } } @@ -201,9 +224,9 @@ um8663f_write(uint16_t port, uint8_t val, void *priv) } static uint8_t -um8663f_read(uint16_t port, void *priv) +um866x_read(uint16_t port, void *priv) { - const um8663f_t *dev = (um8663f_t *) priv; + const um866x_t *dev = (um866x_t *) priv; uint8_t ret = 0xff; if (!dev->locked) { @@ -216,15 +239,15 @@ um8663f_read(uint16_t port, void *priv) } } - um8663f_log("UM8663F: read(%04X) = %02X\n", port, ret); + um866x_log("UM866X: read(%04X) = %02X\n", port, ret); return ret; } static void -um8663f_reset(void *priv) +um866x_reset(void *priv) { - um8663f_t *dev = (um8663f_t *) priv; + um866x_t *dev = (um866x_t *) priv; serial_remove(dev->uart[0]); serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ); @@ -243,27 +266,27 @@ um8663f_reset(void *priv) dev->regs[0x00] = (dev->ide > 0) ? 0x1f : 0x0f; dev->regs[0x01] = (dev->ide == 2) ? 0x0f : 0x1f; - um8663f_fdc_handler(dev); - um8663f_uart_handler(dev, 0); - um8663f_uart_handler(dev, 1); - um8663f_lpt_handler(dev); - um8663f_ide_handler(dev); + um866x_fdc_handler(dev); + um866x_uart_handler(dev, 0); + um866x_uart_handler(dev, 1); + um866x_lpt_handler(dev); + um866x_ide_handler(dev); dev->locked = 1; } static void -um8663f_close(void *priv) +um866x_close(void *priv) { - um8663f_t *dev = (um8663f_t *) priv; + um866x_t *dev = (um866x_t *) priv; free(dev); } static void * -um8663f_init(UNUSED(const device_t *info)) +um866x_init(UNUSED(const device_t *info)) { - um8663f_t *dev = (um8663f_t *) calloc(1, sizeof(um8663f_t)); + um866x_t *dev = (um866x_t *) calloc(1, sizeof(um866x_t)); dev->fdc = device_add(&fdc_at_smc_device); @@ -279,147 +302,21 @@ um8663f_init(UNUSED(const device_t *info)) dev->max_reg = info->local >> 8; if (dev->max_reg != 0x00) - io_sethandler(0x0108, 0x0002, um8663f_read, NULL, NULL, um8663f_write, NULL, NULL, dev); + io_sethandler(0x0108, 0x0002, um866x_read, NULL, NULL, um866x_write, NULL, NULL, dev); - um8663f_reset(dev); + um866x_reset(dev); return dev; } -const device_t um82c862f_device = { - .name = "UMC UM82C862F Super I/O", - .internal_name = "um82c862f", +const device_t um866x_device = { + .name = "UMC UM82C86x/866x Super I/O", + .internal_name = "um866x", .flags = 0, - .local = 0x0000, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um82c862f_ide_device = { - .name = "UMC UM82C862F Super I/O (With IDE)", - .internal_name = "um82c862f_ide", - .flags = 0, - .local = 0x0001, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um82c863f_device = { - .name = "UMC UM82C863F Super I/O", - .internal_name = "um82c863f", - .flags = 0, - .local = 0xc100, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um82c863f_ide_device = { - .name = "UMC UM82C863F Super I/O (With IDE)", - .internal_name = "um82c863f_ide", - .flags = 0, - .local = 0xc101, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um8663af_device = { - .name = "UMC UM8663AF Super I/O", - .internal_name = "um8663af", - .flags = 0, - .local = 0xc300, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um8663af_ide_device = { - .name = "UMC UM8663AF Super I/O (With IDE)", - .internal_name = "um8663af_ide", - .flags = 0, - .local = 0xc301, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um8663af_ide_sec_device = { - .name = "UMC UM8663AF Super I/O (With Secondary IDE)", - .internal_name = "um8663af_ide_sec", - .flags = 0, - .local = 0xc302, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um8663bf_device = { - .name = "UMC UM8663BF Super I/O", - .internal_name = "um8663bf", - .flags = 0, - .local = 0xc400, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um8663bf_ide_device = { - .name = "UMC UM8663BF Super I/O (With IDE)", - .internal_name = "um8663bf_ide", - .flags = 0, - .local = 0xc401, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t um8663bf_ide_sec_device = { - .name = "UMC UM8663BF Super I/O (With Secondary IDE)", - .internal_name = "um8663bf_ide_sec", - .flags = 0, - .local = 0xc402, - .init = um8663f_init, - .close = um8663f_close, - .reset = um8663f_reset, + .local = 0, + .init = um866x_init, + .close = um866x_close, + .reset = um866x_reset, .available = NULL, .speed_changed = NULL, .force_redraw = NULL, diff --git a/src/sio/sio_vt82c686.c b/src/sio/sio_vt82c686.c index ec6c5d203..4caffbc00 100644 --- a/src/sio/sio_vt82c686.c +++ b/src/sio/sio_vt82c686.c @@ -86,14 +86,28 @@ vt82c686_lpt_handler(vt82c686_t *dev) lpt_port_remove(dev->lpt); + lpt_set_ext(dev->lpt, !!(dev->regs[0x10] & 0x80)); + + switch (dev->regs[0x10] & 0x03) { + case 0x01: + lpt_set_epp(dev->lpt, !!(dev->regs[0x10] & 0x20)); + lpt_set_ecp(dev->lpt, 1); + break; + case 0x02: + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, !!(dev->regs[0x10] & 0x20)); + break; + } + if (((dev->regs[0x02] & 0x03) != 0x03) && !(dev->regs[0x0f] & 0x11) && (io_base >= 0x100) && (io_base <= io_mask)) lpt_port_setup(dev->lpt, io_base); - if (dev->lpt_irq) { + if (dev->lpt_irq) lpt_port_irq(dev->lpt, dev->lpt_irq); - } else { + else lpt_port_irq(dev->lpt, 0xff); - } + + lpt_port_dma(dev->lpt, dev->lpt_dma); } static void @@ -178,6 +192,7 @@ vt82c686_write(uint16_t port, uint8_t val, void *priv) case 0x10: dev->regs[reg] &= 0xf4; + vt82c686_lpt_handler(dev); break; case 0x11: diff --git a/src/sio/sio_w83787f.c b/src/sio/sio_w83787f.c deleted file mode 100644 index 285d88232..000000000 --- a/src/sio/sio_w83787f.c +++ /dev/null @@ -1,539 +0,0 @@ -/* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. - * - * This file is part of the 86Box distribution. - * - * Emulation of the Winbond W83787F/IF Super I/O Chip. - * - * Winbond W83787F Super I/O Chip - * Used by the Award 430HX - * - * - * - * Authors: Miran Grca, - * Copyright 2020 Miran Grca. - */ -#include -#include -#include -#include -#include -#include -#define HAVE_STDARG_H -#include <86box/86box.h> -#include <86box/device.h> -#include <86box/io.h> -#include <86box/timer.h> -#include <86box/mem.h> -#include <86box/lpt.h> -#include <86box/serial.h> -#include <86box/fdd.h> -#include <86box/fdc.h> -#include <86box/hdc.h> -#include <86box/hdc_ide.h> -#include <86box/gameport.h> -#include <86box/sio.h> - -#ifdef ENABLE_W83787_LOG -int w83787_do_log = ENABLE_W83787_LOG; - -static void -w83787_log(const char *fmt, ...) -{ - va_list ap; - - if (w83787_do_log) { - va_start(ap, fmt); - pclog_ex(fmt, ap); - va_end(ap); - } -} -#else -# define w83787_log(fmt, ...) -#endif - -#define FDDA_TYPE (dev->regs[7] & 3) -#define FDDB_TYPE ((dev->regs[7] >> 2) & 3) -#define FDDC_TYPE ((dev->regs[7] >> 4) & 3) -#define FDDD_TYPE ((dev->regs[7] >> 6) & 3) - -#define FD_BOOT (dev->regs[8] & 3) -#define SWWP ((dev->regs[8] >> 4) & 1) -#define DISFDDWR ((dev->regs[8] >> 5) & 1) - -#define EN3MODE ((dev->regs[9] >> 5) & 1) - -#define DRV2EN_NEG (dev->regs[0xB] & 1) /* 0 = drive 2 installed */ -#define INVERTZ ((dev->regs[0xB] >> 1) & 1) /* 0 = invert DENSEL polarity */ -#define IDENT ((dev->regs[0xB] >> 3) & 1) - -#define HEFERE ((dev->regs[0xC] >> 5) & 1) - -#define HAS_IDE_FUNCTIONALITY dev->ide_function - -typedef struct w83787f_t { - uint8_t tries; - uint8_t regs[42]; - uint16_t reg_init; - int locked; - int rw_locked; - int cur_reg; - int key; - int ide_function; - int ide_start; - fdc_t *fdc; - serial_t *uart[2]; - lpt_t *lpt; - void *gameport; -} w83787f_t; - -static void w83787f_write(uint16_t port, uint8_t val, void *priv); -static uint8_t w83787f_read(uint16_t port, void *priv); - -static void -w83787f_remap(w83787f_t *dev) -{ - io_removehandler(0x250, 0x0004, - w83787f_read, NULL, NULL, w83787f_write, NULL, NULL, dev); - io_sethandler(0x250, 0x0004, - w83787f_read, NULL, NULL, w83787f_write, NULL, NULL, dev); - dev->key = 0x88 | HEFERE; -} - -#ifdef FIXME -/* FIXME: Implement EPP (and ECP) parallel port modes. */ -static uint8_t -get_lpt_length(w83787f_t *dev) -{ - uint8_t length = 4; - - if (dev->regs[9] & 0x80) { - if (dev->regs[0] & 0x04) - length = 8; /* EPP mode. */ - if (dev->regs[0] & 0x08) - length |= 0x80; /* ECP mode. */ - } - - return length; -} -#endif - -static void -w83787f_serial_handler(w83787f_t *dev, int uart) -{ - int urs0 = !!(dev->regs[1] & (1 << uart)); - int urs1 = !!(dev->regs[1] & (4 << uart)); - int urs2 = !!(dev->regs[3] & (8 >> uart)); - int urs; - int irq = COM1_IRQ; - uint16_t addr = COM1_ADDR; - uint16_t enable = 1; - - urs = (urs1 << 1) | urs0; - - if (urs2) { - addr = uart ? COM1_ADDR : COM2_ADDR; - irq = uart ? COM1_IRQ : COM2_IRQ; - } else { - switch (urs) { - case 0: - addr = uart ? COM3_ADDR : COM4_ADDR; - irq = uart ? COM3_IRQ : COM4_IRQ; - break; - case 1: - addr = uart ? COM4_ADDR : COM3_ADDR; - irq = uart ? COM4_IRQ : COM3_IRQ; - break; - case 2: - addr = uart ? COM2_ADDR : COM1_ADDR; - irq = uart ? COM2_IRQ : COM1_IRQ; - break; - case 3: - default: - enable = 0; - break; - } - } - - if (dev->regs[4] & (0x20 >> uart)) - enable = 0; - - serial_remove(dev->uart[uart]); - if (enable) - serial_setup(dev->uart[uart], addr, irq); -} - -static void -w83787f_lpt_handler(w83787f_t *dev) -{ - int ptras = (dev->regs[1] >> 4) & 0x03; - int irq = LPT1_IRQ; - uint16_t addr = LPT1_ADDR; - uint16_t enable = 1; - - switch (ptras) { - case 0x00: - addr = LPT_MDA_ADDR; - irq = LPT_MDA_IRQ; - break; - case 0x01: - addr = LPT2_ADDR; - irq = LPT2_IRQ; - break; - case 0x02: - addr = LPT1_ADDR; - irq = LPT1_IRQ; - break; - case 0x03: - default: - enable = 0; - break; - } - - if (dev->regs[4] & 0x80) - enable = 0; - - lpt_port_remove(dev->lpt); - if (enable) { - lpt_port_setup(dev->lpt, addr); - lpt_port_irq(dev->lpt, irq); - } -} - -static void -w83787f_gameport_handler(w83787f_t *dev) -{ - if (!(dev->regs[3] & 0x40) && !(dev->regs[4] & 0x40)) - gameport_remap(dev->gameport, 0x201); - else - gameport_remap(dev->gameport, 0); -} - -static void -w83787f_fdc_handler(w83787f_t *dev) -{ - fdc_remove(dev->fdc); - if (!(dev->regs[0] & 0x20)) - fdc_set_base(dev->fdc, (dev->regs[0] & 0x10) ? FDC_PRIMARY_ADDR : FDC_SECONDARY_ADDR); - fdc_set_power_down(dev->fdc, !!(dev->regs[6] & 0x08)); -} - -static void -w83787f_ide_handler(w83787f_t *dev) -{ - if (dev->ide_function & 0x20) { - ide_sec_disable(); - if (!(dev->regs[0] & 0x80)) { - ide_set_base(1, (dev->regs[0] & 0x40) ? 0x1f0 : 0x170); - ide_set_side(1, (dev->regs[0] & 0x40) ? 0x3f6 : 0x376); - ide_sec_enable(); - } - } else { - ide_pri_disable(); - if (!(dev->regs[0] & 0x80)) { - ide_set_base(0, (dev->regs[0] & 0x40) ? 0x1f0 : 0x170); - ide_set_side(0, (dev->regs[0] & 0x40) ? 0x3f6 : 0x376); - ide_pri_enable(); - } - } -} - -static void -w83787f_write(uint16_t port, uint8_t val, void *priv) -{ - w83787f_t *dev = (w83787f_t *) priv; - uint8_t valxor = 0; - uint8_t max = 0x15; - - if (port == 0x250) { - if (val == dev->key) - dev->locked = 1; - else - dev->locked = 0; - return; - } else if (port == 0x251) { - if (val <= max) - dev->cur_reg = val; - return; - } else { - if (dev->locked) { - if (dev->rw_locked && (dev->cur_reg <= 0x0b)) - return; - if (dev->cur_reg == 6) - val &= 0xFB; - valxor = val ^ dev->regs[dev->cur_reg]; - dev->regs[dev->cur_reg] = val; - } else - return; - } - - switch (dev->cur_reg) { - case 0: - w83787_log("REG 00: %02X\n", val); - if ((valxor & 0xc0) && (HAS_IDE_FUNCTIONALITY)) - w83787f_ide_handler(dev); - if (valxor & 0x30) - w83787f_fdc_handler(dev); - if (valxor & 0x0c) - w83787f_lpt_handler(dev); - break; - case 1: - if (valxor & 0x80) - fdc_set_swap(dev->fdc, (dev->regs[1] & 0x80) ? 1 : 0); - if (valxor & 0x30) - w83787f_lpt_handler(dev); - if (valxor & 0x0a) - w83787f_serial_handler(dev, 1); - if (valxor & 0x05) - w83787f_serial_handler(dev, 0); - break; - case 3: - if (valxor & 0x80) - w83787f_lpt_handler(dev); - if (valxor & 0x40) - w83787f_gameport_handler(dev); - if (valxor & 0x08) - w83787f_serial_handler(dev, 0); - if (valxor & 0x04) - w83787f_serial_handler(dev, 1); - break; - case 4: - if (valxor & 0x10) - w83787f_serial_handler(dev, 1); - if (valxor & 0x20) - w83787f_serial_handler(dev, 0); - if (valxor & 0x80) - w83787f_lpt_handler(dev); - if (valxor & 0x40) - w83787f_gameport_handler(dev); - break; - case 6: - if (valxor & 0x08) - w83787f_fdc_handler(dev); - break; - case 7: - if (valxor & 0x03) - fdc_update_rwc(dev->fdc, 0, FDDA_TYPE); - if (valxor & 0x0c) - fdc_update_rwc(dev->fdc, 1, FDDB_TYPE); - if (valxor & 0x30) - fdc_update_rwc(dev->fdc, 2, FDDC_TYPE); - if (valxor & 0xc0) - fdc_update_rwc(dev->fdc, 3, FDDD_TYPE); - break; - case 8: - if (valxor & 0x03) - fdc_update_boot_drive(dev->fdc, FD_BOOT); - if (valxor & 0x10) - fdc_set_swwp(dev->fdc, SWWP ? 1 : 0); - if (valxor & 0x20) - fdc_set_diswr(dev->fdc, DISFDDWR ? 1 : 0); - break; - case 9: - if (valxor & 0x20) - fdc_update_enh_mode(dev->fdc, EN3MODE ? 1 : 0); - if (valxor & 0x40) - dev->rw_locked = (val & 0x40) ? 1 : 0; - if (valxor & 0x80) - w83787f_lpt_handler(dev); - break; - case 0xB: - w83787_log("Writing %02X to CRB\n", val); - break; - case 0xC: - if (valxor & 0x20) - w83787f_remap(dev); - break; - - default: - break; - } -} - -static uint8_t -w83787f_read(uint16_t port, void *priv) -{ - w83787f_t *dev = (w83787f_t *) priv; - uint8_t ret = 0xff; - - if (dev->locked) { - if (port == 0x251) - ret = dev->cur_reg; - else if (port == 0x252) { - if (dev->cur_reg == 7) - ret = (fdc_get_rwc(dev->fdc, 0) | (fdc_get_rwc(dev->fdc, 1) << 2)); - else if (!dev->rw_locked || (dev->cur_reg > 0x0b)) - ret = dev->regs[dev->cur_reg]; - } - } - - return ret; -} - -static void -w83787f_reset(w83787f_t *dev) -{ - uint16_t hefere = dev->reg_init & 0x0100; - - lpt_port_remove(dev->lpt); - lpt_port_setup(dev->lpt, LPT1_ADDR); - lpt_port_irq(dev->lpt, LPT1_IRQ); - - memset(dev->regs, 0, 0x2A); - - if (HAS_IDE_FUNCTIONALITY) { - if (dev->ide_function & 0x20) { - dev->regs[0x00] = 0x90; - ide_sec_disable(); - ide_set_base(1, 0x170); - ide_set_side(1, 0x376); - } else { - dev->regs[0x00] = 0xd0; - ide_pri_disable(); - ide_set_base(0, 0x1f0); - ide_set_side(0, 0x3f6); - } - - if (dev->ide_start) { - dev->regs[0x00] &= 0x7f; - if (dev->ide_function & 0x20) - ide_sec_enable(); - else - ide_pri_enable(); - } - } else - dev->regs[0x00] = 0xd0; - - fdc_reset(dev->fdc); - w83787f_fdc_handler(dev); - - dev->regs[0x01] = 0x2C; - dev->regs[0x03] = 0x70; - dev->regs[0x07] = 0xF5; - dev->regs[0x09] = dev->reg_init & 0xff; - dev->regs[0x0a] = 0x1F; - dev->regs[0x0c] = 0x0C | (hefere >> 3); - dev->regs[0x0d] = 0xA3; - - gameport_remap(dev->gameport, 0); - - serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ); - serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ); - - w83787f_lpt_handler(dev); - - dev->key = 0x88 | (hefere >> 8); - - w83787f_remap(dev); - - dev->locked = 0; - dev->rw_locked = 0; -} - -static void -w83787f_close(void *priv) -{ - w83787f_t *dev = (w83787f_t *) priv; - - free(dev); -} - -static void * -w83787f_init(const device_t *info) -{ - w83787f_t *dev = (w83787f_t *) calloc(1, sizeof(w83787f_t)); - - HAS_IDE_FUNCTIONALITY = (info->local & 0x30); - - dev->fdc = device_add(&fdc_at_winbond_device); - - dev->uart[0] = device_add_inst(&ns16550_device, 1); - dev->uart[1] = device_add_inst(&ns16550_device, 2); - - dev->lpt = device_add_inst(&lpt_port_device, 1); - - dev->gameport = gameport_add(&gameport_sio_1io_device); - - if ((dev->ide_function & 0x30) == 0x10) - device_add(&ide_isa_device); - - dev->ide_start = !!(info->local & 0x40); - - dev->reg_init = info->local & 0x010f; - w83787f_reset(dev); - - return dev; -} - -const device_t w83787f_88h_device = { - .name = "Winbond W83787F/IF Super I/O", - .internal_name = "w83787f", - .flags = 0, - .local = 0x0009, - .init = w83787f_init, - .close = w83787f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83787f_device = { - .name = "Winbond W83787F/IF Super I/O", - .internal_name = "w83787f", - .flags = 0, - .local = 0x0109, - .init = w83787f_init, - .close = w83787f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83787f_ide_device = { - .name = "Winbond W83787F/IF Super I/O (With IDE)", - .internal_name = "w83787f_ide", - .flags = 0, - .local = 0x0119, - .init = w83787f_init, - .close = w83787f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83787f_ide_en_device = { - .name = "Winbond W83787F/IF Super I/O (With IDE Enabled)", - .internal_name = "w83787f_ide_en", - .flags = 0, - .local = 0x0159, - .init = w83787f_init, - .close = w83787f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83787f_ide_sec_device = { - .name = "Winbond W83787F/IF Super I/O (With Secondary IDE)", - .internal_name = "w83787f_ide_sec", - .flags = 0, - .local = 0x0139, - .init = w83787f_init, - .close = w83787f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; diff --git a/src/sio/sio_w837x7.c b/src/sio/sio_w837x7.c new file mode 100644 index 000000000..e670d8454 --- /dev/null +++ b/src/sio/sio_w837x7.c @@ -0,0 +1,475 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Emulation of the Winbond W837x7F/IF Super I/O Chip. + * + * Authors: Miran Grca, + * Copyright 2020-2025 Miran Grca. + */ +#include +#include +#include +#include +#include +#include +#define HAVE_STDARG_H +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/io.h> +#include <86box/timer.h> +#include <86box/mem.h> +#include <86box/lpt.h> +#include <86box/serial.h> +#include <86box/fdd.h> +#include <86box/fdc.h> +#include <86box/hdc.h> +#include <86box/hdc_ide.h> +#include <86box/gameport.h> +#include <86box/sio.h> + +#define FDDA_TYPE (dev->regs[7] & 3) +#define FDDB_TYPE ((dev->regs[7] >> 2) & 3) +#define FDDC_TYPE ((dev->regs[7] >> 4) & 3) +#define FDDD_TYPE ((dev->regs[7] >> 6) & 3) + +#define FD_BOOT (dev->regs[8] & 3) +#define SWWP ((dev->regs[8] >> 4) & 1) +#define DISFDDWR ((dev->regs[8] >> 5) & 1) + +#define EN3MODE ((dev->regs[9] >> 5) & 1) + +#define DRV2EN_NEG (dev->regs[0xB] & 1) /* 0 = drive 2 installed */ +#define INVERTZ ((dev->regs[0xB] >> 1) & 1) /* 0 = invert DENSEL polarity */ +#define IDENT ((dev->regs[0xB] >> 3) & 1) + +#define HEFERE ((dev->regs[0xC] >> 5) & 1) + +typedef struct w837x7_t { + uint8_t tries; + uint8_t has_ide; + uint8_t type; + uint8_t hefere; + uint8_t max_reg; + uint8_t regs[256]; + int locked; + int rw_locked; + int cur_reg; + int key; + int ide_start; + fdc_t *fdc; + serial_t *uart[2]; + lpt_t *lpt; + void *gameport; +} w837x7_t; + +#ifdef ENABLE_W837X7_LOG +int w837x7_do_log = ENABLE_W837X7_LOG; + +static void +w837x7_log(const char *fmt, ...) +{ + va_list ap; + + if (w837x7_do_log) { + va_start(ap, fmt); + pclog_ex(fmt, ap); + va_end(ap); + } +} +#else +# define w837x7_log(fmt, ...) +#endif + +static void +w837x7_serial_handler(w837x7_t *dev, int uart) +{ + int urs0 = !!(dev->regs[0x01] & (0x01 << uart)); + int urs1 = !!(dev->regs[0x01] & (0x04 << uart)); + int urs2 = !!(dev->regs[0x03] & (0x08 >> uart)); + int urs; + int irq = COM1_IRQ; + uint16_t addr = COM1_ADDR; + uint16_t enable = 1; + double clock_src = 24000000.0 / 13.0; + + if (dev->regs[0x03] & (1 << (1 - uart))) + clock_src = 24000000.0 / 12.0; + + urs = (urs1 << 1) | urs0; + + if (urs2) { + addr = uart ? COM1_ADDR : COM2_ADDR; + irq = uart ? COM1_IRQ : COM2_IRQ; + } else { + switch (urs) { + case 0x00: + addr = uart ? COM3_ADDR : COM4_ADDR; + irq = uart ? COM3_IRQ : COM4_IRQ; + break; + case 0x01: + addr = uart ? COM4_ADDR : COM3_ADDR; + irq = uart ? COM4_IRQ : COM3_IRQ; + break; + case 0x02: + addr = uart ? COM2_ADDR : COM1_ADDR; + irq = uart ? COM2_IRQ : COM1_IRQ; + break; + case 0x03: + default: + enable = 0; + break; + } + } + + if (dev->regs[0x04] & (0x20 >> uart)) + enable = 0; + + serial_remove(dev->uart[uart]); + if (enable) + serial_setup(dev->uart[uart], addr, irq); + + serial_set_clock_src(dev->uart[uart], clock_src); +} + +static void +w837x7_lpt_handler(w837x7_t *dev) +{ + int ptras = (dev->regs[1] >> 4) & 0x03; + uint16_t lpt_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t local_enable = 1; + uint8_t lpt_irq = LPT1_IRQ; + uint8_t lpt_mode = (dev->regs[0x09] & 0x80) | (dev->regs[0x00] & 0x0c); + + switch (ptras) { + case 0x01: + lpt_port = LPT_MDA_ADDR; + lpt_irq = LPT_MDA_IRQ; + break; + case 0x02: + lpt_port = LPT1_ADDR; + lpt_irq = LPT1_IRQ /*LPT2_IRQ*/; + break; + case 0x03: + lpt_port = LPT2_ADDR; + lpt_irq = LPT1_IRQ /*LPT2_IRQ*/; + break; + + default: + local_enable = 0; + break; + } + + if (dev->regs[0x04] & 0x80) + local_enable = 0; + + if (lpt_irq > 15) + lpt_irq = 0xff; + + lpt_port_remove(dev->lpt); + lpt_set_fifo_threshold(dev->lpt, dev->regs[0x05] & 0x0f); + switch (lpt_mode) { + default: + local_enable = 0; + break; + case 0x00: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 1); + break; + case 0x84: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x88: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + case 0x8c: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + } + + if (local_enable && (lpt_port >= 0x0100) && (lpt_port <= (0x0ffc & mask))) + lpt_port_setup(dev->lpt, lpt_port); + + lpt_port_irq(dev->lpt, lpt_irq); +} + +static void +w837x7_gameport_handler(w837x7_t *dev) +{ + if (!(dev->regs[3] & 0x40) && !(dev->regs[4] & 0x40)) + gameport_remap(dev->gameport, 0x201); + else + gameport_remap(dev->gameport, 0); +} + +static void +w837x7_fdc_handler(w837x7_t *dev) +{ + fdc_remove(dev->fdc); + if (!(dev->regs[0] & 0x20)) + fdc_set_base(dev->fdc, (dev->regs[0] & 0x10) ? FDC_PRIMARY_ADDR : FDC_SECONDARY_ADDR); + fdc_set_power_down(dev->fdc, !!(dev->regs[6] & 0x08)); +} + +static void +w837x7_ide_handler(w837x7_t *dev) +{ + if (dev->has_ide > 0) { + int ide_id = dev->has_ide - 1; + + ide_handlers(ide_id, 0); + + ide_set_base_addr(ide_id, 0, (dev->regs[0x00] & 0x40) ? 0x0170 : 0x01f0); + ide_set_base_addr(ide_id, 1, (dev->regs[0x00] & 0x40) ? 0x0376 : 0x03f6); + + if (!(dev->regs[0x00] & 0x80)) + ide_handlers(ide_id, 1); + } +} + +static void +w837x7_write(uint16_t port, uint8_t val, void *priv) +{ + w837x7_t *dev = (w837x7_t *) priv; + uint8_t valxor = 0; + + if (port == 0x0250) { + if (val == dev->key) + dev->locked = 1; + else + dev->locked = 0; + return; + } else if (port == 0x0251) { + dev->cur_reg = val; + return; + } else { + if (dev->locked) { + if (dev->rw_locked && (dev->cur_reg <= 0x0b)) + return; + valxor = val ^ dev->regs[dev->cur_reg]; + dev->regs[dev->cur_reg] = val; + } else + return; + } + + if (dev->cur_reg <= dev->max_reg) switch (dev->cur_reg) { + case 0x00: + w837x7_log("REG 00: %02X\n", val); + if (valxor & 0xc0) + w837x7_ide_handler(dev); + if (valxor & 0x30) + w837x7_fdc_handler(dev); + if (valxor & 0x0c) + w837x7_lpt_handler(dev); + break; + case 0x01: + if (valxor & 0x80) + fdc_set_swap(dev->fdc, (dev->regs[1] & 0x80) ? 1 : 0); + if (valxor & 0x30) + w837x7_lpt_handler(dev); + if (valxor & 0x0a) + w837x7_serial_handler(dev, 1); + if (valxor & 0x05) + w837x7_serial_handler(dev, 0); + break; + case 0x03: + if (valxor & 0x80) + w837x7_lpt_handler(dev); + if (valxor & 0x40) + w837x7_gameport_handler(dev); + if (valxor & 0x0a) + w837x7_serial_handler(dev, 0); + if (valxor & 0x05) + w837x7_serial_handler(dev, 1); + break; + case 0x04: + if (valxor & 0x10) + w837x7_serial_handler(dev, 1); + if (valxor & 0x20) + w837x7_serial_handler(dev, 0); + if (valxor & 0x80) + w837x7_lpt_handler(dev); + if (valxor & 0x40) + w837x7_gameport_handler(dev); + break; + case 0x05: + if (valxor & 0x0f) + w837x7_lpt_handler(dev); + break; + case 0x06: + if (valxor & 0x08) + w837x7_fdc_handler(dev); + break; + case 0x07: + if (valxor & 0x03) + fdc_update_rwc(dev->fdc, 0, FDDA_TYPE); + if (valxor & 0x0c) + fdc_update_rwc(dev->fdc, 1, FDDB_TYPE); + if (valxor & 0x30) + fdc_update_rwc(dev->fdc, 2, FDDC_TYPE); + if (valxor & 0xc0) + fdc_update_rwc(dev->fdc, 3, FDDD_TYPE); + break; + case 0x08: + if (valxor & 0x03) + fdc_update_boot_drive(dev->fdc, FD_BOOT); + if (valxor & 0x10) + fdc_set_swwp(dev->fdc, SWWP ? 1 : 0); + if (valxor & 0x20) + fdc_set_diswr(dev->fdc, DISFDDWR ? 1 : 0); + break; + case 0x09: + if (valxor & 0x20) + fdc_update_enh_mode(dev->fdc, EN3MODE ? 1 : 0); + if (valxor & 0x40) + dev->rw_locked = (val & 0x40) ? 1 : 0; + if (valxor & 0x80) + w837x7_lpt_handler(dev); + break; + case 0x0b: + if ((valxor & 0x0c) && (dev->type == W83777F)) { + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); + switch (val & 0x0c) { + case 0x00: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2); + break; + case 0x04: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2_MCA); + break; + } + } + break; + case 0x0c: + if (dev->type == W83787IF) + dev->key = 0x88 | HEFERE; + break; + + default: + break; + } +} + +static uint8_t +w837x7_read(uint16_t port, void *priv) +{ + w837x7_t *dev = (w837x7_t *) priv; + uint8_t ret = 0xff; + + if (dev->locked) { + if (port == 0x0251) + ret = dev->cur_reg; + else if (port == 0x0252) { + if (dev->cur_reg == 7) + ret = (fdc_get_rwc(dev->fdc, 0) | (fdc_get_rwc(dev->fdc, 1) << 2)); + else if (!dev->rw_locked || (dev->cur_reg > 0x0b)) + ret = dev->regs[dev->cur_reg]; + } + } + + return ret; +} + +static void +w837x7_reset(w837x7_t *dev) +{ + memset(dev->regs, 0x00, dev->max_reg + 1); + + if (dev->has_ide == 0x02) + dev->regs[0x00] = 0x90; + else if (dev->has_ide == 0x01) + dev->regs[0x00] = 0xd0; + + if (dev->ide_start) + dev->regs[0x00] &= 0x7f; + + dev->regs[0x01] = 0x2c; + dev->regs[0x03] = 0x30; + dev->regs[0x09] = dev->type; + dev->regs[0x0a] = 0x1f; + + if (dev->type == W83787IF) { + dev->regs[0x0c] = 0x0c | dev->hefere; + dev->regs[0x0d] = 0x03; + } else + dev->regs[0x0c] = dev->hefere; + + dev->key = 0x88 | HEFERE; + + fdc_reset(dev->fdc); + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); + + w837x7_fdc_handler(dev); + + w837x7_lpt_handler(dev); + w837x7_serial_handler(dev, 0); + w837x7_serial_handler(dev, 0); + w837x7_gameport_handler(dev); + w837x7_ide_handler(dev); + + dev->locked = 0; + dev->rw_locked = 0; +} + +static void +w837x7_close(void *priv) +{ + w837x7_t *dev = (w837x7_t *) priv; + + free(dev); +} + +static void * +w837x7_init(const device_t *info) +{ + w837x7_t *dev = (w837x7_t *) calloc(1, sizeof(w837x7_t)); + + dev->type = info->local & 0x0f; + dev->hefere = info->local & W837X7_KEY_89; + dev->max_reg = (dev->type == W83787IF) ? 0x15 : ((dev->type == W83787F) ? 0x0a : 0x0b); + dev->has_ide = (info->local >> 16) & 0xff; + dev->ide_start = !!(info->local & W837X7_IDE_START); + + dev->fdc = device_add(&fdc_at_winbond_device); + + dev->uart[0] = device_add_inst(&ns16550_device, 1); + dev->uart[1] = device_add_inst(&ns16550_device, 2); + + dev->lpt = device_add_inst(&lpt_port_device, 1); + + dev->gameport = gameport_add(&gameport_sio_1io_device); + + w837x7_reset(dev); + + io_sethandler(0x250, 0x0004, + w837x7_read, NULL, NULL, w837x7_write, NULL, NULL, dev); + + return dev; +} + +const device_t w837x7_device = { + .name = "Winbond W837x7 Super I/O", + .internal_name = "w837x7", + .flags = 0, + .local = 0, + .init = w837x7_init, + .close = w837x7_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/sio/sio_w83877f.c b/src/sio/sio_w83877.c similarity index 50% rename from src/sio/sio_w83877f.c rename to src/sio/sio_w83877.c index ef5ccc284..419abb9f6 100644 --- a/src/sio/sio_w83877f.c +++ b/src/sio/sio_w83877.c @@ -6,15 +6,10 @@ * * This file is part of the 86Box distribution. * - * Emulation of the Winbond W83877F Super I/O Chip. - * - * Winbond W83877F Super I/O Chip - * Used by the Award 430HX - * - * + * Emulation of the Winbond W83877 family of Super I/O Chips. * * Authors: Miran Grca, - * Copyright 2016-2020 Miran Grca. + * Copyright 2016-2025 Miran Grca. */ #include #include @@ -30,35 +25,41 @@ #include <86box/rom.h> #include <86box/lpt.h> #include <86box/serial.h> +#include <86box/hdc.h> +#include <86box/hdc_ide.h> #include <86box/fdd.h> #include <86box/fdc.h> +#include <86box/machine.h> #include <86box/sio.h> -#define FDDA_TYPE (dev->regs[7] & 3) -#define FDDB_TYPE ((dev->regs[7] >> 2) & 3) -#define FDDC_TYPE ((dev->regs[7] >> 4) & 3) -#define FDDD_TYPE ((dev->regs[7] >> 6) & 3) +#define FDDA_TYPE (dev->regs[0x07] & 3) +#define FDDB_TYPE ((dev->regs[0x07] >> 2) & 3) +#define FDDC_TYPE ((dev->regs[0x07] >> 4) & 3) +#define FDDD_TYPE ((dev->regs[0x07] >> 6) & 3) -#define FD_BOOT (dev->regs[8] & 3) -#define SWWP ((dev->regs[8] >> 4) & 1) -#define DISFDDWR ((dev->regs[8] >> 5) & 1) +#define FD_BOOT (dev->regs[0x08] & 3) +#define SWWP ((dev->regs[0x08] >> 4) & 1) +#define DISFDDWR ((dev->regs[0x08] >> 5) & 1) -#define EN3MODE ((dev->regs[9] >> 5) & 1) +#define EN3MODE ((dev->regs[0x09] >> 5) & 1) -#define DRV2EN_NEG (dev->regs[0xB] & 1) /* 0 = drive 2 installed */ -#define INVERTZ ((dev->regs[0xB] >> 1) & 1) /* 0 = invert DENSEL polarity */ -#define IDENT ((dev->regs[0xB] >> 3) & 1) +#define DRV2EN_NEG (dev->regs[0x0b] & 1) /* 0 = drive 2 installed */ +#define INVERTZ ((dev->regs[0x0b] >> 1) & 1) /* 0 = invert DENSEL polarity */ +#define IDENT ((dev->regs[0x0b] >> 3) & 1) -#define HEFERE ((dev->regs[0xC] >> 5) & 1) +#define HEFERE ((dev->regs[0x0c] >> 5) & 1) #define HEFRAS (dev->regs[0x16] & 1) #define PRTIQS (dev->regs[0x27] & 0x0f) #define ECPIRQ ((dev->regs[0x27] >> 5) & 0x07) -typedef struct w83877f_t { +typedef struct w83877_t { uint8_t tries; - uint8_t regs[42]; + uint8_t has_ide; + uint8_t dma_map[4]; + uint8_t irq_map[10]; + uint8_t regs[256]; uint16_t reg_init; int locked; int rw_locked; @@ -69,36 +70,36 @@ typedef struct w83877f_t { fdc_t *fdc; serial_t *uart[2]; lpt_t *lpt; -} w83877f_t; +} w83877_t; -static void w83877f_write(uint16_t port, uint8_t val, void *priv); -static uint8_t w83877f_read(uint16_t port, void *priv); +static void w83877_write(uint16_t port, uint8_t val, void *priv); +static uint8_t w83877_read(uint16_t port, void *priv); static void -w83877f_remap(w83877f_t *dev) +w83877_remap(w83877_t *dev) { uint8_t hefras = HEFRAS; io_removehandler(0x250, 0x0003, - w83877f_read, NULL, NULL, w83877f_write, NULL, NULL, dev); + w83877_read, NULL, NULL, w83877_write, NULL, NULL, dev); io_removehandler(FDC_PRIMARY_ADDR, 0x0002, - w83877f_read, NULL, NULL, w83877f_write, NULL, NULL, dev); + w83877_read, NULL, NULL, w83877_write, NULL, NULL, dev); dev->base_address = (hefras ? FDC_PRIMARY_ADDR : 0x250); io_sethandler(dev->base_address, hefras ? 0x0002 : 0x0003, - w83877f_read, NULL, NULL, w83877f_write, NULL, NULL, dev); + w83877_read, NULL, NULL, w83877_write, NULL, NULL, dev); dev->key_times = hefras + 1; dev->key = (hefras ? 0x86 : 0x88) | HEFERE; } static uint8_t -get_lpt_length(w83877f_t *dev) +get_lpt_length(w83877_t *dev) { uint8_t length = 4; - if (dev->regs[9] & 0x80) { - if (dev->regs[0] & 0x04) + if (dev->regs[0x09] & 0x80) { + if (dev->regs[0x00] & 0x04) length = 8; /* EPP mode. */ - if (dev->regs[0] & 0x08) + if (dev->regs[0x00] & 0x08) length |= 0x80; /* ECP mode. */ } @@ -106,7 +107,7 @@ get_lpt_length(w83877f_t *dev) } static uint16_t -make_port(w83877f_t *dev, uint8_t reg) +make_port(w83877_t *dev, uint8_t reg) { uint16_t p = 0; uint8_t l; @@ -114,34 +115,31 @@ make_port(w83877f_t *dev, uint8_t reg) switch (reg) { case 0x20: p = ((uint16_t) (dev->regs[reg] & 0xfc)) << 2; - p &= 0xFF0; - if ((p < 0x100) || (p > 0x3F0)) - p = 0x3F0; + p &= 0x0ff0; + if ((p < 0x0100) || (p > 0x03f0)) + p = 0x03f0; break; case 0x23: l = get_lpt_length(dev); p = ((uint16_t) (dev->regs[reg] & 0xff)) << 2; /* 8 ports in EPP mode, 4 in non-EPP mode. */ if ((l & 0x0f) == 8) - p &= 0x3F8; + p &= 0x03f8; else - p &= 0x3FC; - if ((p < 0x100) || (p > 0x3FF)) + p &= 0x03fc; + if ((p < 0x0100) || (p > 0x03ff)) p = LPT1_ADDR; - /* In ECP mode, A10 is active. */ - if (l & 0x80) - p |= 0x400; break; case 0x24: p = ((uint16_t) (dev->regs[reg] & 0xfe)) << 2; - p &= 0xFF8; - if ((p < 0x100) || (p > 0x3F8)) + p &= 0x0ff8; + if ((p < 0x0100) || (p > 0x03f8)) p = COM1_ADDR; break; case 0x25: p = ((uint16_t) (dev->regs[reg] & 0xfe)) << 2; - p &= 0xFF8; - if ((p < 0x100) || (p > 0x3F8)) + p &= 0x0ff8; + if ((p < 0x0100) || (p > 0x03f8)) p = COM2_ADDR; break; @@ -153,35 +151,60 @@ make_port(w83877f_t *dev, uint8_t reg) } static void -w83877f_fdc_handler(w83877f_t *dev) +w83877_ide_handler(w83877_t *dev) +{ + uint16_t ide_port = 0x0000; + + if (dev->has_ide > 0) { + int ide_id = dev->has_ide - 1; + + ide_handlers(ide_id, 0); + + ide_port = (dev->regs[0x21] << 2) & 0xfff0; + ide_set_base_addr(ide_id, 0, ide_port); + + ide_port = ((dev->regs[0x22] << 2) & 0xfff0) | 0x0006; + ide_set_base_addr(ide_id, 1, ide_port); + + if (!(dev->regs[0x06] & 0x04)) + ide_handlers(ide_id, 1); + } +} + +static void +w83877_fdc_handler(w83877_t *dev) { fdc_remove(dev->fdc); - if (dev->regs[0x20] & 0xc0) + if (!(dev->regs[0x06] & 0x08) && (dev->regs[0x20] & 0xc0)) fdc_set_base(dev->fdc, make_port(dev, 0x20)); - fdc_set_power_down(dev->fdc, !!(dev->regs[6] & 0x08)); + fdc_set_irq(dev->fdc, dev->irq_map[dev->regs[0x29] >> 4]); + fdc_set_dma_ch(dev->fdc, dev->dma_map[(dev->regs[0x26] >> 4) & 0x03]); + fdc_set_power_down(dev->fdc, !!(dev->regs[0x06] & 0x08)); } static void -w83877f_lpt_handler(w83877f_t *dev) +w83877_lpt_handler(w83877_t *dev) { - uint8_t lpt_irq; - uint8_t lpt_irqs[8] = { 0, 7, 9, 10, 11, 14, 15, 5 }; + const uint8_t lpt_irq = dev->irq_map[PRTIQS]; lpt_port_remove(dev->lpt); - if (!(dev->regs[4] & 0x80) && (dev->regs[0x23] & 0xc0)) + + lpt_set_ext(dev->lpt, 1); + + lpt_set_epp(dev->lpt, (dev->regs[0x09] & 0x80) && (dev->regs[0x00] & 0x04)); + lpt_set_ecp(dev->lpt, (dev->regs[0x09] & 0x80) && (dev->regs[0x00] & 0x08)); + + lpt_set_fifo_threshold(dev->lpt, dev->regs[0x05] & 0x0f); + + if (!(dev->regs[0x04] & 0x80) && (dev->regs[0x23] & 0xc0)) lpt_port_setup(dev->lpt, make_port(dev, 0x23)); - lpt_irq = 0xff; - - lpt_irq = lpt_irqs[ECPIRQ]; - if (lpt_irq == 0) - lpt_irq = PRTIQS; - lpt_port_irq(dev->lpt, lpt_irq); + lpt_port_dma(dev->lpt, dev->dma_map[dev->regs[0x26] & 0x03]); } static void -w83877f_serial_handler(w83877f_t *dev, int uart) +w83877_serial_handler(w83877_t *dev, int uart) { int reg_mask = uart ? 0x10 : 0x20; int reg_id = uart ? 0x25 : 0x24; @@ -191,7 +214,7 @@ w83877f_serial_handler(w83877f_t *dev, int uart) serial_remove(dev->uart[uart]); if (!(dev->regs[4] & reg_mask) && (dev->regs[reg_id] & 0xc0)) - serial_setup(dev->uart[uart], make_port(dev, reg_id), (dev->regs[0x28] & irq_mask) >> irq_shift); + serial_setup(dev->uart[uart], make_port(dev, reg_id), dev->irq_map[(dev->regs[0x28] & irq_mask) >> irq_shift]); if (dev->regs[0x19] & (0x02 >> uart)) { clock_src = 14769000.0; @@ -205,21 +228,19 @@ w83877f_serial_handler(w83877f_t *dev, int uart) } static void -w83877f_write(uint16_t port, uint8_t val, void *priv) +w83877_write(uint16_t port, uint8_t val, void *priv) { - w83877f_t *dev = (w83877f_t *) priv; + w83877_t *dev = (w83877_t *) priv; uint8_t valxor = 0; - uint8_t max = 0x2A; - if (port == 0x250) { + if (port == 0x0250) { if (val == dev->key) dev->locked = 1; else dev->locked = 0; return; - } else if (port == 0x251) { - if (val <= max) - dev->cur_reg = val; + } else if (port == 0x0251) { + dev->cur_reg = val; return; } else if (port == FDC_PRIMARY_ADDR) { if ((val == dev->key) && !dev->locked) { @@ -235,8 +256,8 @@ w83877f_write(uint16_t port, uint8_t val, void *priv) } } else { if (dev->locked) { - if (val < max) - dev->cur_reg = val; + dev->cur_reg = val; + if (val == 0xaa) dev->locked = 0; } else { @@ -245,16 +266,10 @@ w83877f_write(uint16_t port, uint8_t val, void *priv) } } return; - } else if ((port == 0x252) || (port == 0x3f1)) { + } else if ((port == 0x0252) || (port == 0x03f1)) { if (dev->locked) { if (dev->rw_locked) return; - if ((dev->cur_reg >= 0x26) && (dev->cur_reg <= 0x27)) - return; - if (dev->cur_reg == 0x29) - return; - if (dev->cur_reg == 6) - val &= 0xFB; valxor = val ^ dev->regs[dev->cur_reg]; dev->regs[dev->cur_reg] = val; } else @@ -262,33 +277,39 @@ w83877f_write(uint16_t port, uint8_t val, void *priv) } switch (dev->cur_reg) { - case 0: + case 0x00: if (valxor & 0x0c) - w83877f_lpt_handler(dev); + w83877_lpt_handler(dev); break; - case 1: + case 0x01: if (valxor & 0x80) - fdc_set_swap(dev->fdc, (dev->regs[1] & 0x80) ? 1 : 0); + fdc_set_swap(dev->fdc, (dev->regs[0x01] & 0x80) ? 1 : 0); break; - case 3: + case 0x03: if (valxor & 0x02) - w83877f_serial_handler(dev, 0); + w83877_serial_handler(dev, 0); if (valxor & 0x01) - w83877f_serial_handler(dev, 1); + w83877_serial_handler(dev, 1); break; - case 4: + case 0x04: if (valxor & 0x10) - w83877f_serial_handler(dev, 1); + w83877_serial_handler(dev, 1); if (valxor & 0x20) - w83877f_serial_handler(dev, 0); + w83877_serial_handler(dev, 0); if (valxor & 0x80) - w83877f_lpt_handler(dev); + w83877_lpt_handler(dev); break; - case 6: + case 0x05: + if (valxor & 0x0f) + w83877_lpt_handler(dev); + break; + case 0x06: if (valxor & 0x08) - w83877f_fdc_handler(dev); + w83877_fdc_handler(dev); + if (valxor & 0x04) + w83877_ide_handler(dev); break; - case 7: + case 0x07: if (valxor & 0x03) fdc_update_rwc(dev->fdc, 0, FDDA_TYPE); if (valxor & 0x0c) @@ -298,7 +319,7 @@ w83877f_write(uint16_t port, uint8_t val, void *priv) if (valxor & 0xc0) fdc_update_rwc(dev->fdc, 3, FDDD_TYPE); break; - case 8: + case 0x08: if (valxor & 0x03) fdc_update_boot_drive(dev->fdc, FD_BOOT); if (valxor & 0x10) @@ -306,66 +327,106 @@ w83877f_write(uint16_t port, uint8_t val, void *priv) if (valxor & 0x20) fdc_set_diswr(dev->fdc, DISFDDWR ? 1 : 0); break; - case 9: + case 0x09: if (valxor & 0x20) fdc_update_enh_mode(dev->fdc, EN3MODE ? 1 : 0); if (valxor & 0x40) dev->rw_locked = (val & 0x40) ? 1 : 0; if (valxor & 0x80) - w83877f_lpt_handler(dev); + w83877_lpt_handler(dev); break; - case 0xB: - if (valxor & 1) - fdc_update_drv2en(dev->fdc, DRV2EN_NEG ? 0 : 1); - if (valxor & 2) + case 0x0b: + if (valxor & 0x0c) { + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); + switch (val & 0x0c) { + case 0x00: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2); + break; + case 0x04: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2_MCA); + break; + } + } + if (valxor & 0x02) fdc_update_densel_polarity(dev->fdc, INVERTZ ? 1 : 0); + if (valxor & 0x01) + fdc_update_drv2en(dev->fdc, DRV2EN_NEG ? 0 : 1); break; - case 0xC: + case 0x0c: if (valxor & 0x20) - w83877f_remap(dev); + w83877_remap(dev); break; case 0x16: - if (valxor & 1) - w83877f_remap(dev); + if (valxor & 0x02) { + dev->regs[0x1e] = (val & 0x02) ? 0x81 : 0x00; + dev->regs[0x20] = (val & 0x02) ? 0xfc : 0x00; + dev->regs[0x21] = (val & 0x02) ? 0x7c : 0x00; + dev->regs[0x22] = (val & 0x02) ? 0xfd : 0x00; + dev->regs[0x23] = (val & 0x02) ? 0xde : 0x00; + dev->regs[0x24] = (val & 0x02) ? 0xfe : 0x00; + dev->regs[0x25] = (val & 0x02) ? 0xbe : 0x00; + dev->regs[0x26] = (val & 0x02) ? 0x23 : 0x00; + dev->regs[0x27] = (val & 0x02) ? 0x65 : 0x00; + dev->regs[0x28] = (val & 0x02) ? 0x43 : 0x00; + dev->regs[0x29] = (val & 0x02) ? 0x62 : 0x00; + w83877_fdc_handler(dev); + w83877_lpt_handler(dev); + w83877_serial_handler(dev, 0); + w83877_serial_handler(dev, 1); + } + if (valxor & 0x01) + w83877_remap(dev); break; case 0x19: if (valxor & 0x02) - w83877f_serial_handler(dev, 0); + w83877_serial_handler(dev, 0); if (valxor & 0x01) - w83877f_serial_handler(dev, 1); + w83877_serial_handler(dev, 1); break; case 0x20: if (valxor) - w83877f_fdc_handler(dev); + w83877_fdc_handler(dev); + break; + case 0x21: case 0x22: + if (valxor) + w83877_ide_handler(dev); break; case 0x23: if (valxor) - w83877f_lpt_handler(dev); + w83877_lpt_handler(dev); break; case 0x24: if (valxor & 0xfe) - w83877f_serial_handler(dev, 0); + w83877_serial_handler(dev, 0); break; case 0x25: if (valxor & 0xfe) - w83877f_serial_handler(dev, 1); + w83877_serial_handler(dev, 1); + break; + case 0x26: + if (valxor & 0x0f) + w83877_lpt_handler(dev); break; case 0x27: if (valxor & 0xef) - w83877f_lpt_handler(dev); + w83877_lpt_handler(dev); break; case 0x28: - if (valxor & 0xf) { + if (valxor & 0x0f) { if ((dev->regs[0x28] & 0x0f) == 0) dev->regs[0x28] |= 0x03; - w83877f_serial_handler(dev, 1); + w83877_serial_handler(dev, 1); } if (valxor & 0xf0) { if ((dev->regs[0x28] & 0xf0) == 0) dev->regs[0x28] |= 0x40; - w83877f_serial_handler(dev, 0); + w83877_serial_handler(dev, 0); } break; + case 0x29: + if (valxor & 0xf0) + w83877_fdc_handler(dev); + break; default: break; @@ -373,9 +434,9 @@ w83877f_write(uint16_t port, uint8_t val, void *priv) } static uint8_t -w83877f_read(uint16_t port, void *priv) +w83877_read(uint16_t port, void *priv) { - w83877f_t *dev = (w83877f_t *) priv; + w83877_t *dev = (w83877_t *) priv; uint8_t ret = 0xff; if (dev->locked) { @@ -393,7 +454,7 @@ w83877f_read(uint16_t port, void *priv) } static void -w83877f_reset(w83877f_t *dev) +w83877_reset(w83877_t *dev) { fdc_reset(dev->fdc); @@ -405,47 +466,40 @@ w83877f_reset(w83877f_t *dev) dev->regs[0x0c] = 0x28; dev->regs[0x0d] = 0xA3; dev->regs[0x16] = dev->reg_init & 0xff; - dev->regs[0x1e] = 0x81; - dev->regs[0x20] = (FDC_PRIMARY_ADDR >> 2) & 0xfc; - dev->regs[0x21] = (0x1f0 >> 2) & 0xfc; - dev->regs[0x22] = ((0x3f6 >> 2) & 0xfc) | 1; - dev->regs[0x23] = (LPT1_ADDR >> 2); - dev->regs[0x24] = (COM1_ADDR >> 2) & 0xfe; - dev->regs[0x25] = (COM2_ADDR >> 2) & 0xfe; - dev->regs[0x26] = (2 << 4) | 4; - dev->regs[0x27] = (2 << 4) | 5; - dev->regs[0x28] = (4 << 4) | 3; - dev->regs[0x29] = 0x62; - w83877f_fdc_handler(dev); + w83877_fdc_handler(dev); + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); - w83877f_lpt_handler(dev); + w83877_lpt_handler(dev); - w83877f_serial_handler(dev, 0); - w83877f_serial_handler(dev, 1); + w83877_serial_handler(dev, 0); + w83877_serial_handler(dev, 1); + + if (dev->has_ide) + w83877_ide_handler(dev); dev->base_address = FDC_PRIMARY_ADDR; dev->key = 0x89; dev->key_times = 1; - w83877f_remap(dev); + w83877_remap(dev); dev->locked = 0; dev->rw_locked = 0; } static void -w83877f_close(void *priv) +w83877_close(void *priv) { - w83877f_t *dev = (w83877f_t *) priv; + w83877_t *dev = (w83877_t *) priv; free(dev); } static void * -w83877f_init(const device_t *info) +w83877_init(const device_t *info) { - w83877f_t *dev = (w83877f_t *) calloc(1, sizeof(w83877f_t)); + w83877_t *dev = (w83877_t *) calloc(1, sizeof(w83877_t)); dev->fdc = device_add(&fdc_at_winbond_device); @@ -456,60 +510,40 @@ w83877f_init(const device_t *info) dev->reg_init = info->local; - w83877f_reset(dev); + dev->has_ide = (info->local >> 16) & 0xff; + + if (!strcmp(machine_get_internal_name(), "ficpa2012")) { + dev->dma_map[0] = 4; + dev->dma_map[1] = 3; + dev->dma_map[2] = 1; + dev->dma_map[3] = 2; + } else { + dev->dma_map[0] = 4; + for (int i = 1; i < 4; i++) + dev->dma_map[i] = i; + } + + memset(dev->irq_map, 0xff, 16); + dev->irq_map[0] = 0xff; + for (int i = 1; i < 7; i++) + dev->irq_map[i] = i; + dev->irq_map[1] = 5; + dev->irq_map[5] = 7; + dev->irq_map[7] = 9; /* Guesswork, I can't find a single BIOS that lets me assign IRQ_G to something. */ + dev->irq_map[8] = 10; + + w83877_reset(dev); return dev; } -const device_t w83877f_device = { +const device_t w83877_device = { .name = "Winbond W83877F Super I/O", - .internal_name = "w83877f", + .internal_name = "w83877", .flags = 0, - .local = 0x0a05, - .init = w83877f_init, - .close = w83877f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83877f_president_device = { - .name = "Winbond W83877F Super I/O (President)", - .internal_name = "w83877f_president", - .flags = 0, - .local = 0x0a04, - .init = w83877f_init, - .close = w83877f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83877tf_device = { - .name = "Winbond W83877TF Super I/O", - .internal_name = "w83877tf", - .flags = 0, - .local = 0x0c04, - .init = w83877f_init, - .close = w83877f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83877tf_acorp_device = { - .name = "Winbond W83877TF Super I/O", - .internal_name = "w83877tf_acorp", - .flags = 0, - .local = 0x0c05, - .init = w83877f_init, - .close = w83877f_close, + .local = 0, + .init = w83877_init, + .close = w83877_close, .reset = NULL, .available = NULL, .speed_changed = NULL, diff --git a/src/sio/sio_w83977.c b/src/sio/sio_w83977.c new file mode 100644 index 000000000..62d456aff --- /dev/null +++ b/src/sio/sio_w83977.c @@ -0,0 +1,1340 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Implementation of the Winbond W83977 Super I/O Chips. + * + * Authors: Miran Grca, + * + * Copyright 2025 Miran Grca. + */ +#include +#include +#include +#include +#include +#include +#include <86box/86box.h> +#include <86box/io.h> +#include <86box/timer.h> +#include <86box/device.h> +#include <86box/pci.h> +#include <86box/pic.h> +#include <86box/lpt.h> +#include <86box/serial.h> +#include <86box/hdc.h> +#include <86box/hdc_ide.h> +#include <86box/fdd.h> +#include <86box/fdc.h> +#include <86box/keyboard.h> +#include <86box/machine.h> +#include <86box/nvr.h> +#include <86box/apm.h> +#include <86box/plat.h> +#include <86box/plat_unused.h> +#include <86box/video.h> +#include <86box/sio.h> +#include "cpu.h" + +typedef struct w83977_gpio_t { + uint8_t id; + uint8_t reg; + uint8_t pulldn; + uint8_t pad; + + uint8_t alt[4]; + + uint16_t base; + + void * parent; +} w83977_gpio_t; + +typedef struct w83977_t { + uint8_t id; + uint8_t hefras; + uint8_t has_nvr; + uint8_t tries; + uint8_t lockreg; + uint8_t gpio_reg; + uint8_t regs[48]; + uint8_t ld_regs[11][256]; + uint16_t kbc_type; + uint16_t superio_base; + uint16_t fdc_base; + uint16_t lpt_base; + uint16_t nvr_base; + uint16_t kbc_base[2]; + uint16_t gpio_base; /* Set to EA */ + uint16_t uart_base[2]; + int locked; + int cur_reg; + uint32_t type; + w83977_gpio_t gpio[3]; + fdc_t *fdc; + nvr_t *nvr; + void *kbc; + serial_t *uart[2]; + lpt_t *lpt; +} w83977_t; + +static int next_id = 0; + +static void w83977_write(uint16_t port, uint8_t val, void *priv); +static uint8_t w83977_read(uint16_t port, void *priv); + +static uint16_t +make_port(const w83977_t *dev, const uint8_t ld) +{ + const uint16_t r0 = dev->ld_regs[ld][0x60]; + const uint16_t r1 = dev->ld_regs[ld][0x61]; + + const uint16_t p = (r0 << 8) + r1; + + return p; +} + +static uint16_t +make_port_sec(const w83977_t *dev, const uint8_t ld) +{ + const uint16_t r0 = dev->ld_regs[ld][0x62]; + const uint16_t r1 = dev->ld_regs[ld][0x63]; + + const uint16_t p = (r0 << 8) + r1; + + return p; +} + +static __inline uint8_t +w83977_do_read_gp(w83977_gpio_t *dev, int reg, int bit) +{ + return dev->reg & dev->pulldn & (1 << bit); +} + +static __inline uint8_t +w83977_do_read_alt(const w83977_gpio_t *dev, int alt, int reg, int bit) +{ + return dev->alt[alt] & (1 << bit); +} + +static uint8_t +w83977_read_gp(const w83977_gpio_t *dev, int bit) +{ + uint8_t reg = dev->id; + w83977_t *sio = (w83977_t *) dev->parent; + uint8_t gp_func_reg = sio->ld_regs[0x07 + reg - 1][0xe0 + ((((reg - 1) << 3) + bit) & 0x0f)]; + uint8_t gp_func; + uint8_t ret = 1 << bit; + + if (gp_func_reg & 0x01) switch (reg) { + default: + /* Do nothing, this GP does not exist. */ + break; + case 1: + switch (bit) { + default: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + ret = w83977_do_read_gp((w83977_gpio_t *) dev, reg - 1, bit); + else + ret = w83977_do_read_alt(dev, gp_func - 1, reg - 1, bit); + break; + case 0: case 1: + gp_func = (gp_func_reg >> 3) & 0x01; + if (gp_func == 0x00) + ret = w83977_do_read_gp((w83977_gpio_t *) dev, reg - 1, bit); + else + ret = w83977_do_read_alt(dev, 0, reg - 1, bit); + break; + case 4: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + ret = w83977_do_read_gp((w83977_gpio_t *) dev, reg - 1, bit); + else if (gp_func == 0x02) + ret = kbc_at_read_p(sio->kbc, 1, 0x80) ? (1 << bit) : 0x00; + else + ret = w83977_do_read_alt(dev, gp_func - 1, reg - 1, bit); + break; + } + break; + case 2: + switch (bit) { + default: + break; + case 0: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + ret = w83977_do_read_gp((w83977_gpio_t *) dev, reg - 1, bit); + else if (gp_func == 0x02) + ret = kbc_at_read_p(sio->kbc, 2, 0x01) ? (1 << bit) : 0x00; + else + ret = w83977_do_read_alt(dev, gp_func - 1, reg - 1, bit); + break; + case 1 ... 4: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + ret = w83977_do_read_gp((w83977_gpio_t *) dev, reg - 1, bit); + else if (gp_func == 0x02) + ret = kbc_at_read_p(sio->kbc, 1, 1 << (bit + 2)) ? (1 << bit) : 0x00; + else + ret = w83977_do_read_alt(dev, gp_func - 1, reg - 1, bit); + break; + case 5: + gp_func = (gp_func_reg >> 3) & 0x01; + if (gp_func == 0x00) + ret = w83977_do_read_gp((w83977_gpio_t *) dev, reg, bit); + else + ret = kbc_at_read_p(sio->kbc, 2, 0x02) ? (1 << bit) : 0x00; + break; + case 6: case 7: + /* Do nothing, these bits do not exist. */ + break; + } + break; + case 3: + if (sio->type == W83977TF) switch (bit) { + default: + break; + case 0 ... 4: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + ret = w83977_do_read_gp((w83977_gpio_t *) dev, reg - 1, bit); + else + ret = w83977_do_read_alt(dev, gp_func - 1, reg - 1, bit); + break; + case 5 ... 7: + /* Do nothing, these bits have no function. */ + break; + } + break; + } + + if (gp_func_reg & 0x02) + ret ^= (1 << bit); + + return ret; +} + +static __inline void +w83977_do_write_gp(w83977_gpio_t *dev, int reg, int bit, int set) +{ + dev->reg = (dev->reg & ~(1 << bit)) | (set << bit); +} + +static __inline void +w83977_do_write_alt(w83977_gpio_t *dev, int alt, int reg, int bit, int set) +{ + dev->alt[alt] = (dev->alt[alt] & ~(1 << bit)) | (set << bit); +} + +static void +w83977_write_gp(w83977_gpio_t *dev, int bit, int set) +{ + uint8_t reg = dev->id; + w83977_t *sio = (w83977_t *) dev->parent; + uint8_t gp_func_reg = sio->ld_regs[0x07 + reg - 1][0xe0 + ((((reg - 1) << 3) + bit) & 0x0f)]; + uint8_t gp_func; + + if (gp_func_reg & 0x02) + set = !set; + + if (!(gp_func_reg & 0x01)) switch (reg) { + default: + /* Do nothing, this GP does not exist. */ + break; + case 1: + switch (bit) { + default: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + w83977_do_write_gp(dev, reg - 1, bit, set); + else + w83977_do_write_alt(dev, gp_func - 1, reg - 1, bit, set); + break; + case 0: case 1: + gp_func = (gp_func_reg >> 3) & 0x01; + if (gp_func == 0x00) + w83977_do_write_gp(dev, reg - 1, bit, set); + else + w83977_do_write_alt(dev, 0, reg - 1, bit, set); + break; + case 4: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + w83977_do_write_gp(dev, reg - 1, bit, set); + else if (gp_func == 0x02) + kbc_at_write_p(sio->kbc, 1, 0x7f, set << 7); + else + w83977_do_write_alt(dev, gp_func - 1, reg - 1, bit, set); + break; + } + break; + case 2: + switch (bit) { + default: + break; + case 0: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + w83977_do_write_gp(dev, reg - 1, bit, set); + else if (gp_func == 0x02) + kbc_at_write_p(sio->kbc, 2, 0xfe, set); + else + w83977_do_write_alt(dev, gp_func - 1, reg - 1, bit, set); + break; + case 1 ... 4: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + w83977_do_write_gp(dev, reg - 1, bit, set); + else if (gp_func == 0x02) + kbc_at_write_p(sio->kbc, 1, ~(1 << (bit + 2)), set << (bit + 2)); + else + w83977_do_write_alt(dev, gp_func - 1, reg - 1, bit, set); + break; + case 5: + gp_func = (gp_func_reg >> 3) & 0x01; + if (gp_func == 0x00) + w83977_do_write_gp(dev, reg - 1, bit, set); + else + kbc_at_write_p(sio->kbc, 2, 0xfd, set << 1); + break; + case 6: case 7: + /* Do nothing, these bits do not exist. */ + break; + } + break; + case 3: + if (sio->type == W83977TF) switch (bit) { + default: + break; + case 0 ... 4: + gp_func = (gp_func_reg >> 3) & 0x03; + if (gp_func == 0x00) + w83977_do_write_gp(dev, reg - 1, bit, set); + else + w83977_do_write_alt(dev, gp_func - 1, reg - 1, bit, set); + break; + case 5 ... 7: + /* Do nothing, these bits have no function. */ + break; + } + break; + } +} + +static uint8_t +w83977_gpio_read(uint16_t port, void *priv) +{ + const w83977_gpio_t *dev = (w83977_gpio_t *) priv; + uint8_t ret = 0x00; + + for (uint8_t i = 0; i < 8; i++) + ret |= w83977_read_gp(dev, i); + + return ret; +} + +static void +w83977_gpio_write(uint16_t port, uint8_t val, void *priv) +{ + w83977_gpio_t *dev = (w83977_gpio_t *) priv; + + for (uint8_t i = 0; i < 8; i++) + w83977_write_gp(dev, i, val & (1 << i)); +} + +static void +w83977_superio_handler(w83977_t *dev) +{ + if (dev->superio_base != 0x0000) + io_removehandler(dev->superio_base, 0x0002, + w83977_read, NULL, NULL, w83977_write, NULL, NULL, dev); + + dev->superio_base = (dev->regs[0x26] & 0x40) ? 0x0370 : 0x03f0; + + io_sethandler(dev->superio_base, 0x0002, + w83977_read, NULL, NULL, w83977_write, NULL, NULL, dev); +} + +static void +w83977_fdc_handler(w83977_t *dev) +{ + const uint8_t global_enable = !!(dev->regs[0x22] & (1 << 0)); + const uint8_t local_enable = !!dev->ld_regs[0][0x30]; + const uint16_t old_base = dev->fdc_base; + + dev->fdc_base = 0x0000; + + if (global_enable && local_enable) + dev->fdc_base = make_port(dev, 0) & 0xfff8; + + if (dev->fdc_base != old_base) { + if ((dev->id != 1) && (old_base >= 0x0100) && (old_base <= 0x0ff8)) + fdc_remove(dev->fdc); + + if ((dev->id != 1) && (dev->fdc_base >= 0x0100) && (dev->fdc_base <= 0x0ff8)) + fdc_set_base(dev->fdc, dev->fdc_base); + } +} + +static void +w83977_lpt_handler(w83977_t *dev) +{ + uint16_t ld_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); + uint8_t local_enable = !!dev->ld_regs[1][0x30]; + uint8_t lpt_irq = dev->ld_regs[1][0x70]; + uint8_t lpt_dma = dev->ld_regs[1][0x74]; + uint8_t lpt_mode = dev->ld_regs[1][0xf0] & 0x07; + + if (lpt_irq > 15) + lpt_irq = 0xff; + + if (lpt_dma >= 4) + lpt_dma = 0xff; + + lpt_port_remove(dev->lpt); + lpt_set_fifo_threshold(dev->lpt, (dev->ld_regs[1][0xf0] & 0x78) >> 3); + switch (lpt_mode) { + default: + case 0x04: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x00: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 1); + break; + case 0x01: case 0x05: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 0); + lpt_set_ext(dev->lpt, 0); + break; + case 0x02: + lpt_set_epp(dev->lpt, 0); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + case 0x03: case 0x07: + mask = 0xfff8; + lpt_set_epp(dev->lpt, 1); + lpt_set_ecp(dev->lpt, 1); + lpt_set_ext(dev->lpt, 0); + break; + } + if (global_enable && local_enable) { + ld_port = (make_port(dev, 1) & 0xfffc) & mask; + if ((ld_port >= 0x0100) && (ld_port <= (0x0ffc & mask))) + lpt_port_setup(dev->lpt, ld_port); + } + lpt_port_irq(dev->lpt, lpt_irq); + lpt_port_dma(dev->lpt, lpt_dma); +} + +static void +w83977_serial_handler(w83977_t *dev, const int uart) +{ + const uint8_t uart_no = 2 + uart; + const uint8_t global_enable = !!(dev->regs[0x22] & (1 << uart_no)); + const uint8_t local_enable = !!dev->ld_regs[uart_no][0x30]; + const uint16_t old_base = dev->uart_base[uart]; + double clock_src = 24000000.0 / 13.0; + + dev->uart_base[uart] = 0x0000; + + if (global_enable && local_enable) + dev->uart_base[uart] = make_port(dev, uart_no) & 0xfff8; + + if (dev->uart_base[uart] != old_base) { + if ((old_base >= 0x0100) && (old_base <= 0x0ff8)) + serial_remove(dev->uart[uart]); + + if ((dev->uart_base[uart] >= 0x0100) && (dev->uart_base[uart] <= 0x0ff8)) + serial_setup(dev->uart[uart], dev->uart_base[uart], dev->ld_regs[uart_no][0x70]); + } + + switch (dev->ld_regs[uart_no][0xf0] & 0x03) { + case 0x00: + clock_src = 24000000.0 / 13.0; + break; + case 0x01: + clock_src = 24000000.0 / 12.0; + break; + case 0x02: + clock_src = 24000000.0 / 1.0; + break; + case 0x03: + clock_src = 24000000.0 / 1.625; + break; + + default: + break; + } + + serial_set_clock_src(dev->uart[uart], clock_src); + + serial_irq(dev->uart[uart], dev->ld_regs[uart_no][0x70]); +} + +static void +w83977_nvr_handler(w83977_t *dev) +{ + uint8_t local_enable = !!dev->ld_regs[6][0x30]; + const uint16_t old_base = dev->nvr_base; + + local_enable &= (((dev->ld_regs[6][0xf0] & 0xe0) == 0x80) || + ((dev->ld_regs[6][0xf0] & 0xe0) == 0xe0)); + + dev->nvr_base = 0x0000; + + if (local_enable) + dev->nvr_base = make_port(dev, 6) & 0xfffe; + + if (dev->nvr_base != old_base) { + if ((dev->id != 1) && dev->has_nvr && (old_base > 0x0000) && (old_base <= 0x0ffe)) + nvr_at_handler(0, dev->nvr_base, dev->nvr); + + if ((dev->id != 1) && dev->has_nvr && (dev->nvr_base > 0x0000) && (dev->nvr_base <= 0x0ffe)) + nvr_at_handler(1, dev->nvr_base, dev->nvr); + } +} + +static void +w83977_kbc_handler(w83977_t *dev) +{ + const uint8_t local_enable = !!dev->ld_regs[5][0x30]; + const uint16_t old_base = dev->kbc_base[0]; + const uint16_t old_base2 = dev->kbc_base[1]; + + dev->kbc_base[0] = dev->kbc_base[1] = 0x0000; + + if (local_enable) { + dev->kbc_base[0] = make_port(dev, 5); + dev->kbc_base[1] = make_port_sec(dev, 5); + } + + if (dev->kbc_base[0] != old_base) { + if ((dev->id != 1) && (dev->kbc != NULL) && (old_base >= 0x0100) && (old_base <= 0x0ff8)) + kbc_at_port_handler(0, 0, old_base, dev->kbc); + + if ((dev->id != 1) && (dev->kbc != NULL) && (dev->kbc_base[0] >= 0x0100) && (dev->kbc_base[0] <= 0x0ff8)) + kbc_at_port_handler(0, 1, dev->kbc_base[0], dev->kbc); + } + + if (dev->kbc_base[1] != old_base2) { + if ((dev->id != 1) && (dev->kbc != NULL) && (old_base2 >= 0x0100) && (old_base2 <= 0x0ff8)) + kbc_at_port_handler(1, 0, old_base2, dev->kbc); + + if ((dev->id != 1) && (dev->kbc != NULL) && (dev->kbc_base[1] >= 0x0100) && (dev->kbc_base[1] <= 0x0ff8)) + kbc_at_port_handler(1, 1, dev->kbc_base[1], dev->kbc); + } + + if ((dev->id != 1) && (dev->kbc != NULL)) { + kbc_at_set_irq(0, dev->ld_regs[5][0x70], dev->kbc); + kbc_at_set_irq(1, dev->ld_regs[5][0x72], dev->kbc); + } +} + +static void +w83977_gpio_handler(w83977_t *dev, const int gpio) +{ + const uint8_t gpio_no = 7 + gpio; + const uint8_t local_enable = !!dev->ld_regs[gpio_no][0x30]; + const uint16_t old_base = dev->gpio[gpio].base; + + dev->gpio[gpio].base = 0x0000; + + if (local_enable) + dev->gpio[gpio].base = make_port(dev, gpio_no) & 0xfff8; + + if (dev->gpio[gpio].base != old_base) { + if ((old_base >= 0x0100) && (old_base <= 0x0ff8)) + io_removehandler(old_base, 0x0002, + w83977_gpio_read, NULL, NULL, w83977_gpio_write, NULL, NULL, dev); + + if ((dev->gpio[gpio].base >= 0x0100) && (dev->gpio[gpio].base <= 0x0ff8)) + io_sethandler(dev->gpio[gpio].base, 0x0002, + w83977_gpio_read, NULL, NULL, w83977_gpio_write, NULL, NULL, dev); + } +} + +static void +w83977_state_change(w83977_t *dev, const uint8_t locked) +{ + dev->locked = locked; + + if (dev->id != 1) + fdc_3f1_enable(dev->fdc, !locked); +} + +static void +w83977_write(uint16_t port, uint8_t val, void *priv) +{ + w83977_t *dev = (w83977_t *) priv; + uint8_t index = !(port & 1); + uint8_t valxor; + + if (index) { + if ((val == 0x87) && !dev->locked) { + if (dev->tries) { + w83977_state_change(dev, 1); + dev->tries = 0; + } else + dev->tries++; + } else if (dev->locked) { + if (val == 0xaa) + w83977_state_change(dev, 0); + else + dev->cur_reg = val; + } else if (dev->tries) + dev->tries = 0; + } else if (dev->locked && !dev->lockreg) { + if (dev->cur_reg < 0x30) { + valxor = val ^ dev->regs[dev->cur_reg]; + + switch (dev->cur_reg) { + case 0x02: + dev->regs[dev->cur_reg] = val; + if (val == 0x02) + w83977_state_change(dev, 0); + break; + case 0x07: + case 0x2c ... 0x2f: + dev->regs[dev->cur_reg] = val; + break; + case 0x22: + if (dev->type == W83977F) + dev->regs[dev->cur_reg] = val & 0x3d; + else + dev->regs[dev->cur_reg] = val & 0x39; + + if (valxor & 0x01) + w83977_fdc_handler(dev); + if (valxor & 0x08) + w83977_lpt_handler(dev); + if (valxor & 0x10) + w83977_serial_handler(dev, 0); + if (valxor & 0x20) + w83977_serial_handler(dev, 1); + break; + case 0x23: + if (dev->type == W83977F) + dev->regs[dev->cur_reg] = val & 0x3f; + else + dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0xfe) | (val & 0x01); + break; + case 0x24: + if (dev->type == W83977F) + dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0x04) | (val & 0xf3); + else + dev->regs[dev->cur_reg] = (dev->regs[dev->cur_reg] & 0x04) | (val & 0xc1); + break; + case 0x25: + if (dev->type == W83977F) + dev->regs[dev->cur_reg] = val & 0x3d; + else + dev->regs[dev->cur_reg] = val & 0x39; + break; + case 0x26: + if (dev->type == W83977F) + dev->regs[dev->cur_reg] = val; + else + dev->regs[dev->cur_reg] = val & 0xef; + dev->lockreg = !!(val & 0x20); + w83977_superio_handler(dev); + break; + case 0x28: + dev->regs[dev->cur_reg] = val & 0x17; + break; + case 0x2a: + if (dev->type == W83977TF) + dev->regs[dev->cur_reg] = val & 0xf3; + else + dev->regs[dev->cur_reg] = val; + break; + case 0x2b: + if (dev->type == W83977TF) + dev->regs[dev->cur_reg] = val & 0xf9; + else + dev->regs[dev->cur_reg] = val; + break; + + default: + break; + } + } else { + valxor = val ^ dev->ld_regs[dev->regs[7]][dev->cur_reg]; + + if (dev->regs[7] <= 0x0a) switch (dev->regs[7]) { + case 0x00: /* FDD */ + switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x70: + case 0x74: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if ((dev->cur_reg == 0x30) && (val & 0x01)) + dev->regs[0x22] |= 0x01; + if (valxor) + w83977_fdc_handler(dev); + break; + case 0xf0: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if ((valxor & 0x01) && (val & 0x01)) { + uint8_t reg_f2 = dev->ld_regs[dev->regs[7]][0xf2]; + + fdc_update_rwc(dev->fdc, 3, (reg_f2 & 0xc0) >> 6); + fdc_update_rwc(dev->fdc, 2, (reg_f2 & 0x30) >> 4); + fdc_update_rwc(dev->fdc, 1, (reg_f2 & 0x0c) >> 2); + fdc_update_rwc(dev->fdc, 0, (reg_f2 & 0x03)); + } else { + fdc_update_rwc(dev->fdc, 3, 0x00); + fdc_update_rwc(dev->fdc, 2, 0x00); + fdc_update_rwc(dev->fdc, 1, 0x00); + fdc_update_rwc(dev->fdc, 0, 0x00); + } + if (valxor & 0x0c) { + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); + switch (val & 0x0c) { + case 0x00: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2); + break; + case 0x04: + fdc_set_flags(dev->fdc, FDC_FLAG_PS2_MCA); + break; + } + } + if (valxor & 0x10) + fdc_set_swap(dev->fdc, (val & 0x10) >> 4); + break; + case 0xf1: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if (valxor & 0x01) + fdc_set_swwp(dev->fdc, !!(val & 0x01)); + if (valxor & 0x02) + fdc_set_diswr(dev->fdc, !!(val & 0x02)); + if (valxor & 0x0c) + fdc_update_densel_force(dev->fdc, (val & 0xc) >> 2); + break; + case 0xf2: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if (dev->ld_regs[dev->regs[7]][0xf0] & 0x01) { + if (valxor & 0xc0) + fdc_update_rwc(dev->fdc, 3, (val & 0xc0) >> 6); + if (valxor & 0x30) + fdc_update_rwc(dev->fdc, 2, (val & 0x30) >> 4); + if (valxor & 0x0c) + fdc_update_rwc(dev->fdc, 1, (val & 0x0c) >> 2); + if (valxor & 0x03) + fdc_update_rwc(dev->fdc, 0, (val & 0x03)); + } + break; + case 0xf4 ... 0xf7: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x5b; + + if (valxor & 0x18) + fdc_update_drvrate(dev->fdc, dev->cur_reg - 0xf4, + (val & 0x18) >> 3); + break; + } + break; + case 0x01: /* Parallel Port */ + switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x70: + case 0x74: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if ((dev->cur_reg == 0x30) && (val & 0x01)) + dev->regs[0x22] |= 0x08; + if (valxor) + w83977_lpt_handler(dev); + break; + /* + Bits 2:0: Mode: + - 000: Bi-directional (SPP); + - 001: EPP-1.9 and SPP; + - 010: ECP; + - 011: ECP and EPP-1.9; + - 100: Printer Mode (Default); + - 101: EPP-1.7 and SPP; + - 110: ECP and EPP-1.7. + Bits 6:3: ECP FIFO Threshold. + */ + case 0xf0: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + if (valxor) + w83977_lpt_handler(dev); + break; + } + break; + case 0x02: /* Serial port 1 */ + switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x70: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if ((dev->cur_reg == 0x30) && (val & 0x01)) + dev->regs[0x22] |= 0x10; + if (valxor) + w83977_serial_handler(dev, 0); + break; + case 0xf0: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x03; + + if (valxor & 0x03) + w83977_serial_handler(dev, 0); + break; + } + break; + case 0x03: /* Serial port 2 */ + switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x70: + case 0x74: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if ((dev->cur_reg == 0x30) && (val & 0x01)) + dev->regs[0x22] |= 0x20; + if (valxor) + w83977_serial_handler(dev, 1); + break; + case 0xf0: + if (dev->type == W83977F) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x03; + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x0f; + + if (valxor & 0x03) + w83977_serial_handler(dev, 1); + break; + case 0xf1: + if (dev->type != W83977F) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x7f; + break; + } + break; + case 0x04: /* Real Time Clock */ + if (dev->type == W83977F) switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x70: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if (valxor) + w83977_nvr_handler(dev); + break; + case 0xf0: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if ((dev->id != 1) && dev->has_nvr && valxor) { + nvr_lock_set(0x80, 0x20, !!(dev->ld_regs[6][dev->cur_reg] & 0x01), dev->nvr); + nvr_lock_set(0xa0, 0x20, !!(dev->ld_regs[6][dev->cur_reg] & 0x02), dev->nvr); + nvr_lock_set(0xc0, 0x20, !!(dev->ld_regs[6][dev->cur_reg] & 0x04), dev->nvr); + nvr_lock_set(0xe0, 0x20, !!(dev->ld_regs[6][dev->cur_reg] & 0x08), dev->nvr); + + nvr_bank_set(0, val >> 6, dev->nvr); + } + break; + } + break; + case 0x05: /* KBC */ + switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x62: case 0x63: + case 0x70: case 0x72: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if (valxor) + w83977_kbc_handler(dev); + break; + case 0xf0: + if (dev->type == W83977F) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0xc7; + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x83; + if (valxor & 0x01) + kbc_at_set_fast_reset(val & 0x01); + break; + } + break; + case 0x06: /* IR */ + if (dev->type == W83977F) switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x70: + case 0x74: case 0x75: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + break; + case 0xf0: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x0f; + break; + } + break; + case 0x07: /* GP I/O Port I */ + switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x62: case 0x63: + case 0x64: case 0x65: + case 0x70: case 0x72: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if (valxor) + w83977_gpio_handler(dev, 0); + break; + case 0xe0 ... 0xe7: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x1b; + break; + case 0xf1: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x03; + break; + } + break; + case 0x08: /* GP I/O Port II */ + switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x70: case 0x72: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if (valxor) + w83977_gpio_handler(dev, 0); + break; + case 0xe8 ... 0xed: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x1f; + break; + case 0xee: + if (dev->type == W83977TF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x1f; + break; + case 0xf0: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x08; + break; + case 0xf2: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + break; + case 0xf3: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x0e; + break; + case 0xf4: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x0f; + break; + } + break; + case 0x09: /* GP I/O Port III */ + if (dev->type == W83977TF) switch (dev->cur_reg) { + case 0x30: + case 0x60: case 0x61: + case 0x62: case 0x63: + case 0x64: case 0x65: + case 0x70: case 0x72: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + + if (valxor) + w83977_gpio_handler(dev, 0); + break; + case 0xe0 ... 0xe7: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x1b; + break; + case 0xf1: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x07; + break; + } + break; + case 0x0a: /* ACPI */ + if (dev->type != W83977F) switch (dev->cur_reg) { + case 0x30: + case 0x70: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + break; + case 0x60: case 0x61: + case 0x62: case 0x63: + case 0x64: case 0x65: + if (dev->type == W83977TF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + break; + case 0xe0: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0xf7; + break; + case 0xe1: case 0xe2: + case 0xfe: case 0xff: + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + break; + case 0xe4: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0xf0; + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val; + break; + case 0xe5: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x7f; + break; + case 0xe7: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x03; + break; + case 0xf0: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0xcf; + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x8f; + break; + case 0xf1: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~(val & 0xcf); + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~(val & 0x0f); + break; + case 0xf2: + if (dev->type != W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~(val & 0x0f); + break; + case 0xf3: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~(val & 0x7f); + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~(val & 0x3f); + break; + case 0xf4: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~(val & 0x17); + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x0f; + break; + case 0xf5: + if (dev->type != W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x0f; + break; + case 0xf6: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x7f; + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x3f; + break; + case 0xf7: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x17; + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x01; + break; + case 0xf9: + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] = val & 0x07; + break; + } + break; + } + } + } +} + +static uint8_t +w83977_read(uint16_t port, void *priv) +{ + w83977_t *dev = (w83977_t *) priv; + uint8_t index = (port & 1) ? 0 : 1; + uint8_t ret = 0xff; + + if (dev->locked) { + if (index) + ret = dev->cur_reg; + else { + if (dev->cur_reg < 0x30) { + if (dev->cur_reg == 0x20) + ret = dev->type >> (W83977_TYPE_SHIFT + 8); + else if (dev->cur_reg == 0x21) + ret = (dev->type >> W83977_TYPE_SHIFT) & 0xff; + else + ret = dev->regs[dev->cur_reg]; + } else if ((dev->regs[7] == 0x0a) && (dev->cur_reg == 0xe3)) { + ret = dev->ld_regs[dev->regs[7]][dev->cur_reg]; + if (dev->type == W83977EF) + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~0x17; + else + dev->ld_regs[dev->regs[7]][dev->cur_reg] &= ~0x07; + } else if (dev->regs[7] <= 0x0a) { + if ((dev->regs[7] == 0x00) && (dev->cur_reg == 0xf2)) + ret = (fdc_get_rwc(dev->fdc, 0) | (fdc_get_rwc(dev->fdc, 1) << 2) | + (fdc_get_rwc(dev->fdc, 2) << 4) | (fdc_get_rwc(dev->fdc, 3) << 6)); + else + ret = dev->ld_regs[dev->regs[7]][dev->cur_reg]; + } + } + } + + return ret; +} + +static void +w83977_reset(void *priv) +{ + w83977_t *dev = (w83977_t *) priv; + + dev->lockreg = 0; + + memset(dev->regs, 0x00, sizeof(dev->regs)); + + dev->regs[0x03] = 0x03; + dev->regs[0x20] = dev->type >> (W83977_TYPE_SHIFT + 8); + dev->regs[0x21] = (dev->type >> W83977_TYPE_SHIFT) & 0xff; + dev->regs[0x22] = 0xff; + dev->regs[0x23] = (dev->type != W83977F) ? 0xfe : 0x00; + dev->regs[0x24] = 0x80; + dev->regs[0x26] = dev->hefras << 6; + + for (uint8_t i = 0; i <= 0x0a; i++) + memset(dev->ld_regs[i], 0x00, 256); + + /* Logical device 0: FDD */ + dev->ld_regs[0x00][0x30] = 0x01; + dev->ld_regs[0x00][0x60] = 0x03; + dev->ld_regs[0x00][0x61] = (dev->id == 1) ? 0x70 : 0xf0; + dev->ld_regs[0x00][0x70] = 0x06; + if (dev->type == W83977F) + dev->ld_regs[0x00][0x71] = 0x02; + dev->ld_regs[0x00][0x74] = 0x02; + dev->ld_regs[0x00][0xf0] = 0x0e; + dev->ld_regs[0x00][0xf2] = 0xff; + + /* Logical device 1: Parallel Port */ + dev->ld_regs[0x01][0x30] = 0x01; + dev->ld_regs[0x01][0x60] = (dev->id == 1) ? 0x02 : 0x03; + dev->ld_regs[0x01][0x61] = 0x78; + dev->ld_regs[0x01][0x70] = (dev->id == 1) ? 0x05 : 0x07; + if (dev->type == W83977F) + dev->ld_regs[0x01][0x71] = 0x02; + dev->ld_regs[0x01][0x74] = 0x04; + dev->ld_regs[0x01][0xf0] = 0x3f; + + /* Logical device 2: Serial Port 1 */ + dev->ld_regs[0x02][0x30] = 0x01; + dev->ld_regs[0x02][0x60] = 0x03; + dev->ld_regs[0x02][0x61] = (dev->id == 1) ? 0xe8 : 0xf8; + dev->ld_regs[0x02][0x70] = 0x04; + if (dev->type == W83977F) + dev->ld_regs[0x02][0x71] = 0x02; + serial_irq(dev->uart[0], dev->ld_regs[2][0x70]); + + /* Logical device 3: Serial Port 2 */ + dev->ld_regs[0x03][0x30] = 0x01; + dev->ld_regs[0x03][0x60] = 0x02; + dev->ld_regs[0x03][0x61] = (dev->id == 1) ? 0xe8 : 0xf8; + dev->ld_regs[0x03][0x70] = 0x03; + if (dev->type == W83977F) + dev->ld_regs[0x03][0x71] = 0x02; + dev->ld_regs[0x03][0x74] = 0x04; + serial_irq(dev->uart[1], dev->ld_regs[3][0x70]); + + if (dev->type == W83977F) { + /* Logical device 4: Real Time Clock */ + dev->ld_regs[0x04][0x30] = 0x01; + dev->ld_regs[0x04][0x61] = 0x70; + dev->ld_regs[0x04][0x70] = 0x08; + } + + /* Logical device 5: KBC */ + dev->ld_regs[0x05][0x30] = 0x01; + dev->ld_regs[0x05][0x61] = 0x60; + dev->ld_regs[0x05][0x63] = 0x64; + dev->ld_regs[0x05][0x70] = 0x01; + if (dev->type == W83977F) + dev->ld_regs[0x05][0x71] = 0x02; + dev->ld_regs[0x05][0x72] = 0x0c; + if (dev->type == W83977F) + dev->ld_regs[0x05][0x73] = 0x02; + if (dev->type == W83977F) + dev->ld_regs[0x05][0xf0] = 0x40; + else + dev->ld_regs[0x05][0xf0] = 0x83; + + if (dev->type == W83977F) { + /* Logical device 6: IR */ + dev->ld_regs[0x06][0x71] = 0x02; + dev->ld_regs[0x06][0x74] = 0x04; + } + + /* Logical device 7: GP I/O Port I */ + if (dev->type == W83977F) + dev->ld_regs[0x07][0x71] = 0x02; + dev->ld_regs[0x07][0xe0] = 0x01; + dev->ld_regs[0x07][0xe1] = 0x01; + dev->ld_regs[0x07][0xe2] = 0x01; + dev->ld_regs[0x07][0xe3] = 0x01; + dev->ld_regs[0x07][0xe4] = 0x01; + dev->ld_regs[0x07][0xe5] = 0x01; + dev->ld_regs[0x07][0xe6] = 0x01; + dev->ld_regs[0x07][0xe7] = 0x01; + + /* Logical device 8: GP I/O Port II */ + if (dev->type == W83977F) + dev->ld_regs[0x08][0x71] = 0x02; + dev->ld_regs[0x08][0xe8] = 0x01; + dev->ld_regs[0x08][0xe9] = 0x01; + dev->ld_regs[0x08][0xea] = 0x01; + dev->ld_regs[0x08][0xeb] = 0x01; + dev->ld_regs[0x08][0xec] = 0x01; + dev->ld_regs[0x08][0xed] = 0x01; + if (dev->type == W83977TF) + dev->ld_regs[0x08][0xee] = 0x01; + + if (dev->type == W83977TF) { + /* Logical device 9: GP I/O Port III */ + dev->ld_regs[0x09][0xe0] = 0x01; + dev->ld_regs[0x09][0xe1] = 0x01; + dev->ld_regs[0x09][0xe2] = 0x01; + dev->ld_regs[0x09][0xe3] = 0x01; + dev->ld_regs[0x09][0xe4] = 0x01; + dev->ld_regs[0x09][0xe5] = 0x01; + dev->ld_regs[0x09][0xe6] = 0x01; + dev->ld_regs[0x09][0xe7] = 0x01; + } + + /* Logical device A: ACPI - not on W83977F */ + if (dev->type == W83977EF) + dev->ld_regs[0x0a][0xe3] = 0x10; + + w83977_lpt_handler(dev); + w83977_serial_handler(dev, 0); + w83977_serial_handler(dev, 1); + + /* W83977EF has ACPI but no ACPI I/O ports. */ + + if (dev->id != 1) { + fdc_clear_flags(dev->fdc, FDC_FLAG_PS2 | FDC_FLAG_PS2_MCA); + fdc_reset(dev->fdc); + + w83977_fdc_handler(dev); + + if ((dev->type == W83977F) && dev->has_nvr) { + w83977_nvr_handler(dev); + nvr_bank_set(0, 0, dev->nvr); + + nvr_lock_set(0x80, 0x20, 0, dev->nvr); + nvr_lock_set(0xa0, 0x20, 0, dev->nvr); + nvr_lock_set(0xc0, 0x20, 0, dev->nvr); + nvr_lock_set(0xe0, 0x20, 0, dev->nvr); + } + + w83977_kbc_handler(dev); + } + + w83977_superio_handler(dev); + + for (int i = 0; i < 3; i++) { + dev->gpio[i].reg = 0xff; + dev->gpio[i].pulldn = 0xff; + + w83977_gpio_handler(dev, i); + } + + dev->locked = 0; +} + +static void +w83977_close(void *priv) +{ + w83977_t *dev = (w83977_t *) priv; + + next_id = 0; + + free(dev); +} + +static void * +w83977_init(const device_t *info) +{ + w83977_t *dev = (w83977_t *) calloc(1, sizeof(w83977_t)); + + dev->hefras = info->local & W83977_370; + + dev->id = next_id; + + if (next_id == 1) + dev->hefras ^= W83977_370; + else + dev->fdc = device_add(&fdc_at_smc_device); + + dev->uart[0] = device_add_inst(&ns16550_device, (next_id << 1) + 1); + dev->uart[1] = device_add_inst(&ns16550_device, (next_id << 1) + 2); + + dev->lpt = device_add_inst(&lpt_port_device, next_id + 1); + + dev->type = info->local & W83977_TYPE; + + dev->kbc_type = info->local & W83977_KBC; + + dev->has_nvr = !(info->local & W83977_NO_NVR); + + if (dev->has_nvr && (dev->id != 1)) { + dev->nvr = device_add(&amstrad_megapc_nvr_device); + + nvr_bank_set(0, 0, dev->nvr); + } + + switch (dev->kbc_type) { + case W83977_AMI: + dev->kbc = device_add(&kbc_ps2_ami_pci_device); + break; + case W83977_PHOENIX: + dev->kbc = device_add(&kbc_ps2_phoenix_device); + break; + } + + /* Set the defaults here so the ports can be removed by w83977_reset(). */ + dev->fdc_base = (dev->id == 1) ? 0x0000 : 0x03f0; + dev->lpt_base = (dev->id == 1) ? 0x0278 : 0x0378; + dev->uart_base[0] = (dev->id == 1) ? 0x03e8 : 0x03f8; + dev->uart_base[1] = (dev->id == 1) ? 0x02e8 : 0x02f8; + dev->nvr_base = (dev->id == 1) ? 0x0000 : 0x0070; + dev->kbc_base[0] = (dev->id == 1) ? 0x0000 : 0x0060; + dev->kbc_base[1] = (dev->id == 1) ? 0x0000 : 0x0064; + + for (int i = 0; i < 3; i++) { + dev->gpio[i].id = i + 1; + + dev->gpio[i].reg = 0xff; + dev->gpio[i].pulldn = 0xff; + + for (int j = 0; j < 4; j++) + dev->gpio[i].alt[j] = 0xff; + + dev->gpio[i].parent = dev; + } + + w83977_reset(dev); + + next_id++; + + return dev; +} + +const device_t w83977_device = { + .name = "SMC FDC37C93x Super I/O", + .internal_name = "w83977", + .flags = 0, + .local = 0, + .init = w83977_init, + .close = w83977_close, + .reset = w83977_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/sio/sio_w83977f.c b/src/sio/sio_w83977f.c deleted file mode 100644 index 3b03dfc4d..000000000 --- a/src/sio/sio_w83977f.c +++ /dev/null @@ -1,680 +0,0 @@ -/* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. - * - * This file is part of the 86Box distribution. - * - * Emulation of the Winbond W83977F Super I/O Chip. - * - * Winbond W83977F Super I/O Chip - * Used by the Award 430TX - * - * - * - * Authors: Miran Grca, - * Copyright 2016-2020 Miran Grca. - */ -#include -#include -#include -#include -#include -#include <86box/86box.h> -#include <86box/device.h> -#include <86box/io.h> -#include <86box/timer.h> -#include <86box/pci.h> -#include <86box/mem.h> -#include <86box/rom.h> -#include <86box/lpt.h> -#include <86box/serial.h> -#include <86box/fdd.h> -#include <86box/fdc.h> -#include <86box/sio.h> - -#define HEFRAS (dev->regs[0x26] & 0x40) - -typedef struct w83977f_t { - uint8_t id; - uint8_t tries; - uint8_t regs[48]; - uint8_t dev_regs[256][208]; - int locked; - int rw_locked; - int cur_reg; - int base_address; - int type; - int hefras; - fdc_t *fdc; - lpt_t *lpt; - serial_t *uart[2]; -} w83977f_t; - -static int next_id = 0; - -static void w83977f_write(uint16_t port, uint8_t val, void *priv); -static uint8_t w83977f_read(uint16_t port, void *priv); - -static void -w83977f_remap(w83977f_t *dev) -{ - io_removehandler(FDC_PRIMARY_ADDR, 0x0002, - w83977f_read, NULL, NULL, w83977f_write, NULL, NULL, dev); - io_removehandler(FDC_SECONDARY_ADDR, 0x0002, - w83977f_read, NULL, NULL, w83977f_write, NULL, NULL, dev); - - dev->base_address = (HEFRAS ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR); - - io_sethandler(dev->base_address, 0x0002, - w83977f_read, NULL, NULL, w83977f_write, NULL, NULL, dev); -} - -static uint8_t -get_lpt_length(w83977f_t *dev) -{ - uint8_t length = 4; - - if (((dev->dev_regs[1][0xc0] & 0x07) != 0x00) && ((dev->dev_regs[1][0xc0] & 0x07) != 0x02) && ((dev->dev_regs[1][0xc0] & 0x07) != 0x04)) - length = 8; - - return length; -} - -static void -w83977f_fdc_handler(w83977f_t *dev) -{ - uint16_t io_base = (dev->dev_regs[0][0x30] << 8) | dev->dev_regs[0][0x31]; - - if (dev->id == 1) - return; - - fdc_remove(dev->fdc); - - if ((dev->dev_regs[0][0x00] & 0x01) && (dev->regs[0x22] & 0x01) && (io_base >= 0x100) && (io_base <= 0xff8)) - fdc_set_base(dev->fdc, io_base); - - fdc_set_irq(dev->fdc, dev->dev_regs[0][0x40] & 0x0f); -} - -static void -w83977f_lpt_handler(w83977f_t *dev) -{ - uint16_t io_mask; - uint16_t io_base = (dev->dev_regs[1][0x30] << 8) | dev->dev_regs[1][0x31]; - int io_len = get_lpt_length(dev); - io_base &= (0xff8 | io_len); - io_mask = 0xffc; - if (io_len == 8) - io_mask = 0xff8; - - lpt_port_remove(dev->lpt); - - if ((dev->dev_regs[1][0x00] & 0x01) && (dev->regs[0x22] & 0x08) && (io_base >= 0x100) && (io_base <= io_mask)) - lpt_port_setup(dev->lpt, io_base); - - lpt_port_irq(dev->lpt, dev->dev_regs[1][0x40] & 0x0f); -} - -static void -w83977f_serial_handler(w83977f_t *dev, int uart) -{ - uint16_t io_base = (dev->dev_regs[2 + uart][0x30] << 8) | dev->dev_regs[2 + uart][0x31]; - double clock_src = 24000000.0 / 13.0; - - serial_remove(dev->uart[uart]); - - if ((dev->dev_regs[2 + uart][0x00] & 0x01) && (dev->regs[0x22] & (0x10 << uart)) && (io_base >= 0x100) && (io_base <= 0xff8)) - serial_setup(dev->uart[uart], io_base, dev->dev_regs[2 + uart][0x40] & 0x0f); - - switch (dev->dev_regs[2 + uart][0xc0] & 0x03) { - case 0x00: - clock_src = 24000000.0 / 13.0; - break; - case 0x01: - clock_src = 24000000.0 / 12.0; - break; - case 0x02: - clock_src = 24000000.0 / 1.0; - break; - case 0x03: - clock_src = 24000000.0 / 1.625; - break; - - default: - break; - } - - serial_set_clock_src(dev->uart[uart], clock_src); -} - -static void -w83977f_write(uint16_t port, uint8_t val, void *priv) -{ - w83977f_t *dev = (w83977f_t *) priv; - uint8_t index = (port & 1) ? 0 : 1; - uint8_t valxor = 0; - uint8_t ld = dev->regs[7]; - - if (index) { - if ((val == 0x87) && !dev->locked) { - if (dev->tries) { - dev->locked = 1; - dev->tries = 0; - } else - dev->tries++; - } else { - if (dev->locked) { - if (val == 0xaa) - dev->locked = 0; - else - dev->cur_reg = val; - } else { - if (dev->tries) - dev->tries = 0; - } - } - return; - } else { - if (dev->locked) { - if (dev->rw_locked) - return; - if (dev->cur_reg >= 0x30) { - valxor = val ^ dev->dev_regs[ld][dev->cur_reg - 0x30]; - dev->dev_regs[ld][dev->cur_reg - 0x30] = val; - } else { - valxor = val ^ dev->regs[dev->cur_reg]; - dev->regs[dev->cur_reg] = val; - } - } else - return; - } - - switch (dev->cur_reg) { - case 0x02: -#if 0 - if (valxor & 0x02) - softresetx86(); -#endif - break; - case 0x22: - if (valxor & 0x20) - w83977f_serial_handler(dev, 1); - if (valxor & 0x10) - w83977f_serial_handler(dev, 0); - if (valxor & 0x08) - w83977f_lpt_handler(dev); - if (valxor & 0x01) - w83977f_fdc_handler(dev); - break; - case 0x26: - if (valxor & 0x40) - w83977f_remap(dev); - if (valxor & 0x20) - dev->rw_locked = (val & 0x20) ? 1 : 0; - break; - case 0x30: - if (valxor & 0x01) - switch (ld) { - case 0x00: - w83977f_fdc_handler(dev); - break; - case 0x01: - w83977f_lpt_handler(dev); - break; - case 0x02: - case 0x03: - w83977f_serial_handler(dev, ld - 2); - break; - - default: - break; - } - break; - case 0x60: - case 0x61: - if (valxor & 0xff) - switch (ld) { - case 0x00: - w83977f_fdc_handler(dev); - break; - case 0x01: - w83977f_lpt_handler(dev); - break; - case 0x02: - case 0x03: - w83977f_serial_handler(dev, ld - 2); - break; - - default: - break; - } - break; - case 0x70: - if (valxor & 0x0f) - switch (ld) { - case 0x00: - w83977f_fdc_handler(dev); - break; - case 0x01: - w83977f_lpt_handler(dev); - break; - case 0x02: - case 0x03: - w83977f_serial_handler(dev, ld - 2); - break; - - default: - break; - } - break; - case 0xf0: - switch (ld) { - case 0x00: - if (dev->id == 1) - break; - - if (!dev->id && (valxor & 0x20)) - fdc_update_drv2en(dev->fdc, (val & 0x20) ? 0 : 1); - if (!dev->id && (valxor & 0x10)) - fdc_set_swap(dev->fdc, (val & 0x10) ? 1 : 0); - if (!dev->id && (valxor & 0x01)) - fdc_update_enh_mode(dev->fdc, (val & 0x01) ? 1 : 0); - break; - case 0x01: - if (valxor & 0x07) - w83977f_lpt_handler(dev); - break; - case 0x02: - case 0x03: - if (valxor & 0x03) - w83977f_serial_handler(dev, ld - 2); - break; - - default: - break; - } - break; - case 0xf1: - switch (ld) { - case 0x00: - if (dev->id == 1) - break; - - if (!dev->id && (valxor & 0xc0)) - fdc_update_boot_drive(dev->fdc, (val & 0xc0) >> 6); - if (!dev->id && (valxor & 0x0c)) - fdc_update_densel_force(dev->fdc, (val & 0x0c) >> 2); - if (!dev->id && (valxor & 0x02)) - fdc_set_diswr(dev->fdc, (val & 0x02) ? 1 : 0); - if (!dev->id && (valxor & 0x01)) - fdc_set_swwp(dev->fdc, (val & 0x01) ? 1 : 0); - break; - - default: - break; - } - break; - case 0xf2: - switch (ld) { - case 0x00: - if (dev->id == 1) - break; - - if (!dev->id && (valxor & 0xc0)) - fdc_update_rwc(dev->fdc, 3, (val & 0xc0) >> 6); - if (!dev->id && (valxor & 0x30)) - fdc_update_rwc(dev->fdc, 2, (val & 0x30) >> 4); - if (!dev->id && (valxor & 0x0c)) - fdc_update_rwc(dev->fdc, 1, (val & 0x0c) >> 2); - if (!dev->id && (valxor & 0x03)) - fdc_update_rwc(dev->fdc, 0, val & 0x03); - break; - - default: - break; - } - break; - case 0xf4: - case 0xf5: - case 0xf6: - case 0xf7: - switch (ld) { - case 0x00: - if (dev->id == 1) - break; - - if (!dev->id && (valxor & 0x18)) - fdc_update_drvrate(dev->fdc, dev->cur_reg & 0x03, (val & 0x18) >> 3); - break; - - default: - break; - } - break; - - default: - break; - } -} - -static uint8_t -w83977f_read(uint16_t port, void *priv) -{ - w83977f_t *dev = (w83977f_t *) priv; - uint8_t ret = 0xff; - uint8_t index = (port & 1) ? 0 : 1; - uint8_t ld = dev->regs[7]; - - if (dev->locked) { - if (index) - ret = dev->cur_reg; - else { - if (!dev->rw_locked) { - if (!dev->id && ((dev->cur_reg == 0xf2) && (ld == 0x00))) - ret = (fdc_get_rwc(dev->fdc, 0) | (fdc_get_rwc(dev->fdc, 1) << 2) | (fdc_get_rwc(dev->fdc, 2) << 4) | (fdc_get_rwc(dev->fdc, 3) << 6)); - else if (dev->cur_reg >= 0x30) - ret = dev->dev_regs[ld][dev->cur_reg - 0x30]; - else - ret = dev->regs[dev->cur_reg]; - } - } - } - - return ret; -} - -static void -w83977f_reset(w83977f_t *dev) -{ - memset(dev->regs, 0, 48); - for (uint16_t i = 0; i < 256; i++) - memset(dev->dev_regs[i], 0, 208); - - if (dev->type < 2) { - dev->regs[0x20] = 0x97; - dev->regs[0x21] = dev->type ? 0x73 : 0x71; - } else { - dev->regs[0x20] = 0x52; - dev->regs[0x21] = 0xf0; - } - dev->regs[0x22] = 0xff; - dev->regs[0x24] = dev->type ? 0x84 : 0xa4; - dev->regs[0x26] = dev->hefras; - - /* WARNING: Array elements are register - 0x30. */ - /* Logical Device 0 (FDC) */ - dev->dev_regs[0][0x00] = 0x01; - if (!dev->type) - dev->dev_regs[0][0x01] = 0x02; - if (next_id == 1) { - dev->dev_regs[0][0x30] = 0x03; - dev->dev_regs[0][0x31] = 0x70; - } else { - dev->dev_regs[0][0x30] = 0x03; - dev->dev_regs[0][0x31] = 0xf0; - } - dev->dev_regs[0][0x40] = 0x06; - if (!dev->type) - dev->dev_regs[0][0x41] = 0x02; /* Read-only */ - dev->dev_regs[0][0x44] = 0x02; - dev->dev_regs[0][0xc0] = 0x0e; - - /* Logical Device 1 (Parallel Port) */ - dev->dev_regs[1][0x00] = 0x01; - if (!dev->type) - dev->dev_regs[1][0x01] = 0x02; - if (next_id == 1) { - dev->dev_regs[1][0x30] = 0x02; - dev->dev_regs[1][0x31] = 0x78; - dev->dev_regs[1][0x40] = 0x05; - } else { - dev->dev_regs[1][0x30] = 0x03; - dev->dev_regs[1][0x31] = 0x78; - dev->dev_regs[1][0x40] = 0x07; - } - if (!dev->type) - dev->dev_regs[1][0x41] = 0x01 /*0x02*/; /* Read-only */ - dev->dev_regs[1][0x44] = 0x04; - dev->dev_regs[1][0xc0] = 0x3c; /* The datasheet says default is 3f, but also default is printer mode. */ - - /* Logical Device 2 (UART A) */ - dev->dev_regs[2][0x00] = 0x01; - if (!dev->type) - dev->dev_regs[2][0x01] = 0x02; - if (next_id == 1) { - dev->dev_regs[2][0x30] = 0x03; - dev->dev_regs[2][0x31] = 0xe8; - } else { - dev->dev_regs[2][0x30] = 0x03; - dev->dev_regs[2][0x31] = 0xf8; - } - dev->dev_regs[2][0x40] = 0x04; - if (!dev->type) - dev->dev_regs[2][0x41] = 0x02; /* Read-only */ - - /* Logical Device 3 (UART B) */ - dev->dev_regs[3][0x00] = 0x01; - if (!dev->type) - dev->dev_regs[3][0x01] = 0x02; - if (next_id == 1) { - dev->dev_regs[3][0x30] = 0x02; - dev->dev_regs[3][0x31] = 0xe8; - } else { - dev->dev_regs[3][0x30] = 0x02; - dev->dev_regs[3][0x31] = 0xf8; - } - dev->dev_regs[3][0x40] = 0x03; - if (!dev->type) - dev->dev_regs[3][0x41] = 0x02; /* Read-only */ - - /* Logical Device 4 (RTC) */ - if (!dev->type) { - dev->dev_regs[4][0x00] = 0x01; - dev->dev_regs[4][0x01] = 0x02; - dev->dev_regs[4][0x30] = 0x00; - dev->dev_regs[4][0x31] = 0x70; - dev->dev_regs[4][0x40] = 0x08; - dev->dev_regs[4][0x41] = 0x02; /* Read-only */ - } - - /* Logical Device 5 (KBC) */ - dev->dev_regs[5][0x00] = 0x01; - if (!dev->type) - dev->dev_regs[5][0x01] = 0x02; - dev->dev_regs[5][0x30] = 0x00; - dev->dev_regs[5][0x31] = 0x60; - dev->dev_regs[5][0x32] = 0x00; - dev->dev_regs[5][0x33] = 0x64; - dev->dev_regs[5][0x40] = 0x01; - if (!dev->type) - dev->dev_regs[5][0x41] = 0x02; /* Read-only */ - dev->dev_regs[5][0x42] = 0x0c; - if (!dev->type) - dev->dev_regs[5][0x43] = 0x02; /* Read-only? */ - dev->dev_regs[5][0xc0] = dev->type ? 0x83 : 0x40; - - /* Logical Device 6 (IR) = UART C */ - if (!dev->type) { - dev->dev_regs[6][0x01] = 0x02; - dev->dev_regs[6][0x41] = 0x02; /* Read-only */ - dev->dev_regs[6][0x44] = 0x04; - dev->dev_regs[6][0x45] = 0x04; - } - - /* Logical Device 7 (Auxiliary I/O Part I) */ - if (!dev->type) - dev->dev_regs[7][0x01] = 0x02; - if (!dev->type) - dev->dev_regs[7][0x41] = 0x02; /* Read-only */ - if (!dev->type) - dev->dev_regs[7][0x43] = 0x02; /* Read-only? */ - dev->dev_regs[7][0xb0] = 0x01; - dev->dev_regs[7][0xb1] = 0x01; - dev->dev_regs[7][0xb2] = 0x01; - dev->dev_regs[7][0xb3] = 0x01; - dev->dev_regs[7][0xb4] = 0x01; - dev->dev_regs[7][0xb5] = 0x01; - dev->dev_regs[7][0xb6] = 0x01; - if (dev->type) - dev->dev_regs[7][0xb7] = 0x01; - - /* Logical Device 8 (Auxiliary I/O Part II) */ - if (!dev->type) - dev->dev_regs[8][0x01] = 0x02; - if (!dev->type) - dev->dev_regs[8][0x41] = 0x02; /* Read-only */ - if (!dev->type) - dev->dev_regs[8][0x43] = 0x02; /* Read-only? */ - dev->dev_regs[8][0xb8] = 0x01; - dev->dev_regs[8][0xb9] = 0x01; - dev->dev_regs[8][0xba] = 0x01; - dev->dev_regs[8][0xbb] = 0x01; - dev->dev_regs[8][0xbc] = 0x01; - dev->dev_regs[8][0xbd] = 0x01; - dev->dev_regs[8][0xbe] = 0x01; - dev->dev_regs[8][0xbf] = 0x01; - - /* Logical Device 9 (Auxiliary I/O Part III) */ - if (dev->type) { - dev->dev_regs[9][0xb0] = 0x01; - dev->dev_regs[9][0xb1] = 0x01; - dev->dev_regs[9][0xb2] = 0x01; - dev->dev_regs[9][0xb3] = 0x01; - dev->dev_regs[9][0xb4] = 0x01; - dev->dev_regs[9][0xb5] = 0x01; - dev->dev_regs[9][0xb6] = 0x01; - dev->dev_regs[9][0xb7] = 0x01; - - dev->dev_regs[10][0xc0] = 0x8f; - } - - if (dev->id == 1) { - serial_setup(dev->uart[0], COM3_ADDR, COM3_IRQ); - serial_setup(dev->uart[1], COM4_ADDR, COM4_IRQ); - } else { - fdc_reset(dev->fdc); - - serial_setup(dev->uart[0], COM1_ADDR, COM1_IRQ); - serial_setup(dev->uart[1], COM2_ADDR, COM2_IRQ); - - w83977f_fdc_handler(dev); - } - - w83977f_lpt_handler(dev); - w83977f_serial_handler(dev, 0); - w83977f_serial_handler(dev, 1); - - w83977f_remap(dev); - - dev->locked = 0; - dev->rw_locked = 0; -} - -static void -w83977f_close(void *priv) -{ - w83977f_t *dev = (w83977f_t *) priv; - - next_id = 0; - - free(dev); -} - -static void * -w83977f_init(const device_t *info) -{ - w83977f_t *dev = (w83977f_t *) calloc(1, sizeof(w83977f_t)); - - dev->type = info->local & 0x0f; - dev->hefras = info->local & 0x40; - - dev->id = next_id; - - if (next_id == 1) - dev->hefras ^= 0x40; - else - dev->fdc = device_add(&fdc_at_smc_device); - - dev->uart[0] = device_add_inst(&ns16550_device, (next_id << 1) + 1); - dev->uart[1] = device_add_inst(&ns16550_device, (next_id << 1) + 2); - - dev->lpt = device_add_inst(&lpt_port_device, next_id + 1); - - w83977f_reset(dev); - - next_id++; - - return dev; -} - -const device_t w83977f_device = { - .name = "Winbond W83977F Super I/O", - .internal_name = "w83977f", - .flags = 0, - .local = 0, - .init = w83977f_init, - .close = w83977f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83977f_370_device = { - .name = "Winbond W83977F Super I/O (Port 370h)", - .internal_name = "w83977f_370", - .flags = 0, - .local = 0x40, - .init = w83977f_init, - .close = w83977f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83977tf_device = { - .name = "Winbond W83977TF Super I/O", - .internal_name = "w83977tf", - .flags = 0, - .local = 1, - .init = w83977f_init, - .close = w83977f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83977ef_device = { - .name = "Winbond W83977TF Super I/O", - .internal_name = "w83977ef", - .flags = 0, - .local = 2, - .init = w83977f_init, - .close = w83977f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - -const device_t w83977ef_370_device = { - .name = "Winbond W83977TF Super I/O (Port 370h)", - .internal_name = "w83977ef_370", - .flags = 0, - .local = 0x42, - .init = w83977f_init, - .close = w83977f_close, - .reset = NULL, - .available = NULL, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; From 13a38e06225d26a81ced6ea3c364f960e59fb828 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 11 Aug 2025 21:51:54 +0600 Subject: [PATCH 18/29] Qt6 fixes (part 1) --- src/qt/qt_rendererstack.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index 73cf75396..c5cc286b5 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -105,7 +105,7 @@ RendererStack::RendererStack(QWidget *parent, int monitor_index) frameRateTimer->setSingleShot(false); frameRateTimer->setInterval(1000); connect(frameRateTimer, &QTimer::timeout, [this] { - this->setWindowTitle(QObject::tr("86Box Monitor #") + QString::number(m_monitor_index + 1) + QString(" - %1 Hz").arg(monitors[m_monitor_index].mon_actualrenderedframes)); + this->setWindowTitle(QObject::tr("86Box Monitor #") + QString::number(m_monitor_index + 1) + QString(" - ") + tr("%1 Hz").arg(monitors[m_monitor_index].mon_actualrenderedframes.load())); }); frameRateTimer->start(1000); } From 770507b4c9af870e363928d81cc9203a6e9bc8c6 Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Mon, 11 Aug 2025 21:54:33 +0600 Subject: [PATCH 19/29] Qt6 fixes (part 2) --- src/qt/qt_mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index c39ef7cbc..ddf7cf1e0 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -225,7 +225,7 @@ MainWindow::MainWindow(QWidget *parent) frameRateTimer->setInterval(1000); frameRateTimer->setSingleShot(false); connect(frameRateTimer, &QTimer::timeout, [this, hertz_label] { - hertz_label->setText(QString("%1 Hz").arg(monitors[0].mon_actualrenderedframes)); + hertz_label->setText(tr("%1 Hz").arg(monitors[0].mon_actualrenderedframes.load())); }); statusBar()->addPermanentWidget(hertz_label); frameRateTimer->start(1000); From eedbccd974af71680a69ad2e0235f7721241061e Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Tue, 12 Aug 2025 01:09:24 +0600 Subject: [PATCH 20/29] Several Clang warning fixes --- src/sio/sio_fdc37c669.c | 2 +- src/sio/sio_gm82c803ab.c | 2 +- src/sio/sio_gm82c803c.c | 2 +- src/sio/sio_pc87307.c | 2 +- src/sio/sio_pc87309.c | 2 +- src/sio/sio_pc873xx.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/sio/sio_fdc37c669.c b/src/sio/sio_fdc37c669.c index d49dd9d30..6a8c73563 100644 --- a/src/sio/sio_fdc37c669.c +++ b/src/sio/sio_fdc37c669.c @@ -39,7 +39,7 @@ typedef struct fdc37c669_t { uint8_t tries; uint8_t has_ide; uint8_t dma_map[4]; - uint8_t irq_map[10]; + uint8_t irq_map[16]; uint8_t regs[256]; int locked; int rw_locked; diff --git a/src/sio/sio_gm82c803ab.c b/src/sio/sio_gm82c803ab.c index 8dca4ae6c..8f7749494 100644 --- a/src/sio/sio_gm82c803ab.c +++ b/src/sio/sio_gm82c803ab.c @@ -35,7 +35,7 @@ typedef struct gm82c803ab_t { uint8_t type; uint8_t tries; uint8_t has_ide; - uint8_t regs[16]; + uint8_t regs[256]; int cur_reg; int com3_addr; int com4_addr; diff --git a/src/sio/sio_gm82c803c.c b/src/sio/sio_gm82c803c.c index eb54b6661..91c03b369 100644 --- a/src/sio/sio_gm82c803c.c +++ b/src/sio/sio_gm82c803c.c @@ -35,7 +35,7 @@ typedef struct gm82c803c_t { uint8_t has_ide; uint8_t dma_map[4]; uint8_t irq_map[10]; - uint8_t regs[16]; + uint8_t regs[256]; int cur_reg; fdc_t *fdc; serial_t *uart[2]; diff --git a/src/sio/sio_pc87307.c b/src/sio/sio_pc87307.c index e18d94428..48c2aeb27 100644 --- a/src/sio/sio_pc87307.c +++ b/src/sio/sio_pc87307.c @@ -42,7 +42,7 @@ typedef struct pc87307_t { uint8_t baddr; uint8_t pm_idx; uint8_t regs[48]; - uint8_t ld_regs[256][208]; + uint8_t ld_regs[256][256]; uint8_t pcregs[16]; uint8_t gpio[2][8]; uint8_t pm[8]; diff --git a/src/sio/sio_pc87309.c b/src/sio/sio_pc87309.c index 9b50f8181..a6e4a5fa3 100644 --- a/src/sio/sio_pc87309.c +++ b/src/sio/sio_pc87309.c @@ -42,7 +42,7 @@ typedef struct pc87309_t { uint8_t baddr; uint8_t pm_idx; uint8_t regs[48]; - uint8_t ld_regs[256][208]; + uint8_t ld_regs[256][256]; uint8_t pm[8]; uint16_t superio_base; uint16_t pm_base; diff --git a/src/sio/sio_pc873xx.c b/src/sio/sio_pc873xx.c index bec747ed2..72c156426 100644 --- a/src/sio/sio_pc873xx.c +++ b/src/sio/sio_pc873xx.c @@ -39,7 +39,7 @@ typedef struct pc873xx_t { uint8_t tries; uint8_t has_ide; uint8_t fdc_on; - uint8_t regs[15]; + uint8_t regs[256]; uint16_t base_addr; int cur_reg; int max_reg; From d60602dd5dbf89d44db82c46d77ac0137c58e56e Mon Sep 17 00:00:00 2001 From: TC1995 Date: Mon, 11 Aug 2025 22:48:30 +0200 Subject: [PATCH 21/29] 53c9x changes of the night (August 11th, 2025) 1. Add the original AMD 53c974 (AMD bios only and revision 0x00 compared to the A revision which is 0x10 in the PCI regs) as well as correcting the SCSI bus reset when prompted (ESP CMD 0x03), the latter fixes DawiControl 53c974 drivers on win9x. 2. Check if DMA length is not 0 for DMA transfers. 3. More logs for possible problem diagnostics. --- src/include/86box/scsi_pcscsi.h | 1 + src/scsi/scsi.c | 1 + src/scsi/scsi_pcscsi.c | 104 ++++++++++++++++++++++++++------ 3 files changed, 89 insertions(+), 17 deletions(-) diff --git a/src/include/86box/scsi_pcscsi.h b/src/include/86box/scsi_pcscsi.h index 8547aba25..c4dbedeff 100644 --- a/src/include/86box/scsi_pcscsi.h +++ b/src/include/86box/scsi_pcscsi.h @@ -26,6 +26,7 @@ #define SCSI_PCSCSI_H extern const device_t am53c974_pci_device; +extern const device_t am53c974a_pci_device; extern const device_t dc390_pci_device; extern const device_t ncr53c90a_mca_device; diff --git a/src/scsi/scsi.c b/src/scsi/scsi.c index a2bdc92ce..a02f4e7a5 100644 --- a/src/scsi/scsi.c +++ b/src/scsi/scsi.c @@ -84,6 +84,7 @@ static SCSI_CARD scsi_cards[] = { { &buslogic_445c_device, }, /* PCI */ { &am53c974_pci_device, }, + { &am53c974a_pci_device, }, { &buslogic_958d_pci_device, }, { &ncr53c810_pci_device, }, { &ncr53c815_pci_device, }, diff --git a/src/scsi/scsi_pcscsi.c b/src/scsi/scsi_pcscsi.c index b0563020b..f91eef683 100644 --- a/src/scsi/scsi_pcscsi.c +++ b/src/scsi/scsi_pcscsi.c @@ -141,6 +141,7 @@ enum ESPASCMode { #define CFG1_RESREPT 0x40 +#define TCHI_ESP100A 0x01 #define TCHI_FAS100A 0x04 #define TCHI_AM53C974 0x12 @@ -666,6 +667,7 @@ esp_hard_reset(esp_t *dev) dev->tchi_written = 0; dev->asc_mode = ESP_ASC_MODE_DIS; dev->rregs[ESP_CFG1] = dev->mca ? dev->HostID : 7; + dev->sbac = 1 << 19; esp_log("ESP Reset\n"); @@ -716,7 +718,7 @@ esp_do_dma(esp_t *dev) len = esp_get_tc(dev); - esp_log("ESP SCSI Actual DMA len=%d, cfg3=%02x.\n", len, dev->rregs[ESP_CFG3]); + esp_log("ESP SCSI Actual DMA len=%d, cfg3=%02x, phase=%x.\n", len, dev->rregs[ESP_CFG3], esp_get_phase(dev)); switch (esp_get_phase(dev)) { case STAT_MO: @@ -1316,6 +1318,7 @@ handle_s_without_atn(void *priv) if (esp_select(dev) < 0) return; + esp_log("Selection without ATN.\n"); esp_set_phase(dev, STAT_CD); dev->cmdfifo_cdb_offset = 0; @@ -1333,6 +1336,7 @@ handle_satn(void *priv) if (esp_select(dev) < 0) return; + esp_log("Selection with ATN.\n"); esp_set_phase(dev, STAT_MO); if (dev->dma) @@ -1434,12 +1438,17 @@ esp_reg_read(esp_t *dev, uint32_t saddr) esp_log("Read Interrupt=%02x (old).\n", ret); break; case ESP_TCHI: /* Return the unique id if the value has never been written */ - if (!dev->mca && !dev->tchi_written) - ret = TCHI_AM53C974; - else - ret = dev->rregs[ESP_TCHI]; + if (!dev->tchi_written) { + if (dev->mca) + ret = TCHI_ESP100A; + else + ret = TCHI_AM53C974; - esp_log("Read TCHI Register=%02x.\n", ret); + esp_log("ChipID=%02x.\n", ret); + } else { + ret = dev->rregs[ESP_TCHI]; + esp_log("Read TCHI Register=%02x.\n", ret); + } break; case ESP_RFLAGS: ret = fifo8_num_used(&dev->fifo); @@ -1525,6 +1534,12 @@ esp_reg_write(esp_t *dev, uint32_t saddr, uint32_t val) break; case CMD_BUSRESET: esp_log("ESP Bus Reset val=%02x.\n", (dev->rregs[ESP_CFG1] & CFG1_RESREPT)); + if (dev->mca) { + esp_lower_irq(dev); + esp_hard_reset(dev); + } else + esp_pci_soft_reset(dev); + for (uint8_t i = 0; i < 16; i++) { scsi_device_reset(&scsi_devices[dev->bus][i]); } @@ -1635,6 +1650,7 @@ esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir) if (dev->dma_regs[DMA_WBC] < len) len = dev->dma_regs[DMA_WBC]; + esp_log("DMA Length=%d.\n", len); if (dev->dma_regs[DMA_CMD] & DMA_CMD_MDL) { if (len) { dma_bm_read(dev->dma_regs[DMA_WMAC], (uint8_t *)&DMAPtr, 4, 4); @@ -1681,16 +1697,18 @@ esp_pci_dma_memory_rw(esp_t *dev, uint8_t *buf, uint32_t len, int dir) } } } else { - addr = dev->dma_regs[DMA_WAC]; + if (len) { + addr = dev->dma_regs[DMA_WAC]; - if (expected_dir) - dma_bm_write(addr, buf, len, 4); - else - dma_bm_read(addr, buf, len, 4); + if (expected_dir) + dma_bm_write(addr, buf, len, 4); + else + dma_bm_read(addr, buf, len, 4); - /* update status registers */ - dev->dma_regs[DMA_WBC] -= len; - dev->dma_regs[DMA_WAC] += len; + /* update status registers */ + dev->dma_regs[DMA_WBC] -= len; + dev->dma_regs[DMA_WAC] += len; + } } esp_log("Finished count=%d.\n", dev->dma_regs[DMA_WBC]); @@ -2184,7 +2202,7 @@ esp_pci_read(UNUSED(int func), int addr, void *priv) case 0x07: return esp_pci_regs[0x07] | 0x02; case 0x08: - return 0x10; /*Revision ID*/ + return (dev->local == 1) ? 0 : 0x10; /*Revision ID*/ case 0x09: return 0; /*Programming interface*/ case 0x0A: @@ -2363,7 +2381,7 @@ esp_pci_reset(void *priv) memcpy(dev, &reset_state, sizeof(esp_t)); - dev->sbac = 1 << 19; + esp_pci_soft_reset(dev); } static void * @@ -2650,6 +2668,44 @@ static const device_config_t bios_enable_config[] = { // clang-format on }; +static const device_config_t am53c974_bios_enable_config[] = { + // clang-format off + { + .name = "bios_rev", + .description = "BIOS Revision", + .type = CONFIG_BIOS, + .default_string = "v3_01_amd", + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .bios = { + { + .name = "Version 3.01 (AMD)", + .internal_name = "v3_01_amd", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 16384, + .files = { AM53C974_3_01_AMD_ROM, "" } + }, + { .files_no = 0 } + }, + }, + { + .name = "bios", + .description = "Enable BIOS", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 0, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + static const device_config_t am53c974a_bios_enable_config[] = { // clang-format off { @@ -2739,7 +2795,7 @@ const device_t dc390_pci_device = { }; const device_t am53c974_pci_device = { - .name = "AMD 53c974A PCI", + .name = "AMD 53c974 PCI", .internal_name = "am53c974", .flags = DEVICE_PCI, .local = 1, @@ -2749,6 +2805,20 @@ const device_t am53c974_pci_device = { .available = NULL, .speed_changed = NULL, .force_redraw = NULL, + .config = am53c974_bios_enable_config +}; + +const device_t am53c974a_pci_device = { + .name = "AMD 53c974A PCI", + .internal_name = "am53c974a", + .flags = DEVICE_PCI, + .local = 2, + .init = dc390_init, + .close = esp_close, + .reset = esp_pci_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, .config = am53c974a_bios_enable_config }; From 9b9f1a261056dbb288210583768bc6b99d9af1fc Mon Sep 17 00:00:00 2001 From: TC1995 Date: Mon, 11 Aug 2025 22:55:47 +0200 Subject: [PATCH 22/29] 8514/A (and XGA) compatible refresh rate fixes. Correct the refresh rates of the 8514/A compatibles and XGA cards to match their real world rates. --- src/video/vid_ati_mach8.c | 46 ++++++++++++++++++++------------------- src/video/vid_svga.c | 11 +++++----- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/video/vid_ati_mach8.c b/src/video/vid_ati_mach8.c index 32b466740..45a69ffab 100644 --- a/src/video/vid_ati_mach8.c +++ b/src/video/vid_ati_mach8.c @@ -2928,10 +2928,12 @@ mach_recalctimings(svga_t *svga) dev->h_disp_time = dev->hdisp >> 3; - svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen); + svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen) / 2; if (mach->accel.clock_sel & 0x40) svga->clock_8514 *= 2; + mach_log("8514/A clock sel=%x, divide reg ibm=%02x, divide reg vga=%02x.\n", clock_sel, mach->accel.clock_sel & 0x40, mach->regs[0xb8] & 0xc0); + if (dev->interlace) dev->dispend >>= 1; @@ -3060,29 +3062,29 @@ mach_recalctimings(svga_t *svga) if (!svga->scrblank && (svga->crtc[0x17] & 0x80) && svga->attr_palette_enable) { mach_log("GDCREG5=%02x, ATTR10=%02x, ATI B0 bit 5=%02x, ON=%d.\n", svga->gdcreg[5] & 0x60, svga->attrregs[0x10] & 0x40, mach->regs[0xb0] & 0x20, dev->on); + svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen); + mach_log("VGA clock sel=%x, divide reg=%02x.\n", clock_sel, mach->regs[0xb8] & 0xc0); + if (ATI_MACH32) { + if (mach->regs[0xb8] & 0x40) + svga->clock *= 2; + } else { + switch (mach->regs[0xb8] & 0xc0) { + case 0x40: + svga->clock *= 2; + break; + case 0x80: + svga->clock *= 3; + break; + case 0xc0: + svga->clock *= 4; + break; + + default: + break; + } + } if ((svga->gdcreg[6] & 0x01) || (svga->attrregs[0x10] & 0x01)) { if ((svga->gdcreg[5] & 0x40) || (svga->attrregs[0x10] & 0x40) || (mach->regs[0xb0] & 0x20)) { - svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen); - mach_log("VGA clock=%02x.\n", mach->regs[0xa7] & 0x80); - if (ATI_MACH32) { - if (mach->regs[0xb8] & 0x40) - svga->clock *= 2; - } else { - switch (mach->regs[0xb8] & 0xc0) { - case 0x40: - svga->clock *= 2; - break; - case 0x80: - svga->clock *= 3; - break; - case 0xc0: - svga->clock *= 4; - break; - - default: - break; - } - } svga->map8 = svga->pallook; mach_log("Lowres=%x, seqreg[1]bit3=%x.\n", svga->lowres, svga->seqregs[1] & 8); if (svga->lowres) diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 113a8984f..caed7113f 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -799,9 +799,10 @@ svga_recalctimings(svga_t *svga) if ((svga->bpp <= 8) || ((svga->gdcreg[5] & 0x60) <= 0x20)) { if ((svga->gdcreg[5] & 0x60) == 0x00) { - if (svga->seqregs[1] & 8) /*Low res (320)*/ + if (svga->seqregs[1] & 8) { /*Low res (320)*/ svga->render = svga_render_4bpp_lowres; - else + svga_log("4 bpp low res.\n"); + } else svga->render = svga_render_4bpp_highres; } else if ((svga->gdcreg[5] & 0x60) == 0x20) { if (svga->seqregs[1] & 8) { /*Low res (320)*/ @@ -1045,11 +1046,11 @@ svga_recalctimings(svga_t *svga) crtcconst = svga->clock * svga->char_width; if (ibm8514_active && (svga->dev8514 != NULL)) { if (dev->on) - crtcconst8514 = svga->clock_8514; + crtcconst8514 = svga->clock_8514 * 8; } if (xga_active && (svga->xga != NULL)) { if (xga->on) - crtcconst_xga = svga->clock_xga; + crtcconst_xga = svga->clock_xga * svga->char_width; } #ifdef ENABLE_SVGA_LOG @@ -1093,7 +1094,6 @@ svga_recalctimings(svga_t *svga) if (dev->on) { disptime8514 = dev->h_total; _dispontime8514 = dev->h_disp_time; - svga_log("HTOTAL=%d, HDISP=%d.\n", dev->h_total, dev->h_disp); } } @@ -1135,6 +1135,7 @@ svga_recalctimings(svga_t *svga) case 1: /*Plus 8514/A*/ if (dev->on) { _dispofftime8514 = disptime8514 - _dispontime8514; + svga_log("DISPTIME8514=%lf, off=%lf, DISPONTIME8514=%lf, CRTCCONST8514=%lf.\n", disptime8514, _dispofftime8514, _dispontime8514, crtcconst8514); _dispontime8514 *= crtcconst8514; _dispofftime8514 *= crtcconst8514; From a0f6644e0065b0ac4b7cbf549291ca941acb9fba Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 12 Aug 2025 17:27:05 +0200 Subject: [PATCH 23/29] Settings / Hard Disks: Fix the UI layout so that SCSI channels are readable. --- src/qt/qt_settingsharddisks.ui | 90 +++++++++++++++++----------------- 1 file changed, 46 insertions(+), 44 deletions(-) diff --git a/src/qt/qt_settingsharddisks.ui b/src/qt/qt_settingsharddisks.ui index f996c76d1..25ae4d19c 100644 --- a/src/qt/qt_settingsharddisks.ui +++ b/src/qt/qt_settingsharddisks.ui @@ -46,50 +46,52 @@ - - - - - Bus: - - - - - - - 30 - - - - - - - ID: - - - - - - - 30 - - - - - - - Model: - - - - - - - 30 - - - - + + + + + + Bus: + + + + + + + 30 + + + + + + + Channel: + + + + + + + 30 + + + + + + + Speed: + + + + + + + 30 + + + + + From af85f317dadcb7147b74b7badf0aa2a930855bf1 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 12 Aug 2025 17:29:14 +0200 Subject: [PATCH 24/29] Model, not Speed. --- src/qt/qt_settingsharddisks.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_settingsharddisks.ui b/src/qt/qt_settingsharddisks.ui index 25ae4d19c..ae6bfe618 100644 --- a/src/qt/qt_settingsharddisks.ui +++ b/src/qt/qt_settingsharddisks.ui @@ -79,7 +79,7 @@ - Speed: + Model: From c4ef6d6eeb98be52546bfc1e4321bb345526bfef Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 12 Aug 2025 17:30:23 +0200 Subject: [PATCH 25/29] hdControls, not cdControls. --- src/qt/qt_settingsharddisks.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/qt_settingsharddisks.ui b/src/qt/qt_settingsharddisks.ui index ae6bfe618..e68de43d1 100644 --- a/src/qt/qt_settingsharddisks.ui +++ b/src/qt/qt_settingsharddisks.ui @@ -46,7 +46,7 @@ - + From a4bdac000f83bbdd53008a0f0e2356ed0e83e7c8 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 12 Aug 2025 17:59:59 +0200 Subject: [PATCH 26/29] Vendor-specific ECP configuration register B readout, assorted Super I/O chip fixes, and gave the IBM ValuePointer 433/DXi its Super I/O chip. --- src/device/lpt.c | 21 +++++++++++++-------- src/include/86box/lpt.h | 4 +++- src/machine/m_at_386dx_486.c | 1 + src/sio/sio_82091aa.c | 2 ++ src/sio/sio_ali5123.c | 19 ++++++++++++------- src/sio/sio_fdc37c669.c | 2 ++ src/sio/sio_fdc37c67x.c | 19 ++++++++++++------- src/sio/sio_fdc37c6xx.c | 8 +++++++- src/sio/sio_fdc37c93x.c | 15 ++++++++++----- src/sio/sio_fdc37m60x.c | 19 ++++++++++++------- src/sio/sio_gm82c803ab.c | 1 + src/sio/sio_gm82c803c.c | 1 + src/sio/sio_it86x1f.c | 2 ++ src/sio/sio_pc87306.c | 30 +++++++++++++++++++++++------- src/sio/sio_pc873xx.c | 2 ++ src/sio/sio_um8669f.c | 4 ++-- src/sio/sio_um866x.c | 1 + src/sio/sio_w837x7.c | 11 ++++++----- src/sio/sio_w83877.c | 2 ++ src/sio/sio_w83977.c | 18 +++++++++++------- 20 files changed, 125 insertions(+), 57 deletions(-) diff --git a/src/device/lpt.c b/src/device/lpt.c index 209ea33f8..31594bf03 100644 --- a/src/device/lpt.c +++ b/src/device/lpt.c @@ -322,7 +322,7 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv) lpt_t *dev = (lpt_t *) priv; uint16_t mask = 0x0407; - lpt_log("[W] %04X = %02X\n", port, val); + lpt_log("[W] %04X = %02X (ECR = %02X)\n", port, val, dev->ecr); /* This is needed so the parallel port at 3BC works. */ if (dev->addr & 0x0004) @@ -353,7 +353,7 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv) case 0x0002: if (dev->dt && dev->dt->write_ctrl && dev->dt->priv) { - if (dev->ecp) + if (dev->ecp && ((dev->ecr & 0xe0) >= 0x20)) dev->dt->write_ctrl((val & 0xfc) | dev->autofeed | dev->strobe, dev->dt->priv); else dev->dt->write_ctrl(val, dev->dt->priv); @@ -401,7 +401,8 @@ lpt_write(const uint16_t port, const uint8_t val, void *priv) break; case 0x05: dev->ext_regs[0x00] = val; - dev->cnfga_readout = (val & 0x80) ? 0x1c : 0x14; + dev->cnfga_readout = (val & 0x80) ? 0x1c : 0x14; + dev->cnfgb_readout = (dev->cnfgb_readout & 0xc0) | (val & 0x3b); break; } break; @@ -658,11 +659,7 @@ lpt_read(const uint16_t port, void *priv) case 0x0401: if ((dev->ecr & 0xe0) == 0xe0) { /* CNFGB */ - ret = 0x08; - ret |= (dev->irq_state ? 0x40 : 0x00); - ret |= ((dev->irq == 0x05) ? 0x30 : 0x00); - if ((dev->dma >= 1) && (dev->dma <= 3)) - ret |= dev->dma; + ret = dev->cnfgb_readout | (dev->irq_state ? 0x40 : 0x00); } break; @@ -775,6 +772,13 @@ lpt_set_cnfga_readout(lpt_t *dev, const uint8_t cnfga_readout) dev->cnfga_readout = cnfga_readout; } +void +lpt_set_cnfgb_readout(lpt_t *dev, const uint8_t cnfgb_readout) +{ + if (lpt_ports[dev->id].enabled) + dev->cnfgb_readout = (dev->cnfgb_readout & 0xc0) | (cnfgb_readout & 0x3f); +} + void lpt_port_setup(lpt_t *dev, const uint16_t port) { @@ -967,6 +971,7 @@ lpt_init(const device_t *info) dev->ecr = 0x15; dev->ret_ecr = 0x15; dev->cnfga_readout = 0x10; + dev->cnfgb_readout = 0x00; memset(dev->ext_regs, 0x00, 8); dev->ext_regs[0x02] = 0x80; diff --git a/src/include/86box/lpt.h b/src/include/86box/lpt.h index fdf869953..d2bf72867 100644 --- a/src/include/86box/lpt.h +++ b/src/include/86box/lpt.h @@ -62,10 +62,11 @@ typedef struct lpt_t { uint8_t strobe; uint8_t lv2; uint8_t cnfga_readout; + uint8_t cnfgb_readout; uint8_t cfg_regs_enabled; uint8_t inst; uint8_t eir; - uint8_t pad[2]; + uint8_t pad; uint8_t ext_regs[8]; uint16_t addr; uint16_t id; @@ -134,6 +135,7 @@ extern void lpt_set_lv2(lpt_t *dev, uint8_t lv2); extern void lpt_set_cfg_regs_enabled(lpt_t *dev, uint8_t cfg_regs_enabled); extern void lpt_set_fifo_threshold(lpt_t *dev, int threshold); extern void lpt_set_cnfga_readout(lpt_t *dev, const uint8_t cnfga_readout); +extern void lpt_set_cnfgb_readout(lpt_t *dev, const uint8_t cnfgb_readout); extern void lpt_port_setup(lpt_t *dev, uint16_t port); extern void lpt_port_irq(lpt_t *dev, uint8_t irq); extern void lpt_port_dma(lpt_t *dev, uint8_t dma); diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 880bb2218..323b80365 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -236,6 +236,7 @@ machine_at_valuepoint433_init(const machine_t *model) // hangs without the PS/2 if (gfxcard[0] == VID_INTERNAL) device_add(&et4000w32_onboard_device); + device_add_params(&fdc37c6xx_device, (void *) (FDC37C661 | FDC37C6XX_IDE_PRI)); device_add(&kbc_ps2_device); if (fdc_current[0] == FDC_INTERNAL) diff --git a/src/sio/sio_82091aa.c b/src/sio/sio_82091aa.c index 283febada..cfe33df12 100644 --- a/src/sio/sio_82091aa.c +++ b/src/sio/sio_82091aa.c @@ -293,7 +293,9 @@ i82091aa_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfga_readout(dev->lpt, 0x90); + lpt_set_cnfgb_readout(dev->lpt, 0x00); dev->has_ide = (info->local >> 9) & 0x03; diff --git a/src/sio/sio_ali5123.c b/src/sio/sio_ali5123.c index 71c074ea8..a6cd12554 100644 --- a/src/sio/sio_ali5123.c +++ b/src/sio/sio_ali5123.c @@ -82,13 +82,15 @@ ali5123_fdc_handler(ali5123_t *dev) static void ali5123_lpt_handler(ali5123_t *dev) { - uint16_t ld_port = 0x0000; - uint16_t mask = 0xfffc; - uint8_t global_enable = !(dev->regs[0x22] & (1 << 3)); - uint8_t local_enable = !!dev->ld_regs[3][0x30]; - uint8_t lpt_irq = dev->ld_regs[3][0x70]; - uint8_t lpt_dma = dev->ld_regs[3][0x74]; - uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint16_t ld_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t global_enable = !(dev->regs[0x22] & (1 << 3)); + uint8_t local_enable = !!dev->ld_regs[3][0x30]; + uint8_t lpt_irq = dev->ld_regs[3][0x70]; + uint8_t lpt_dma = dev->ld_regs[3][0x74]; + uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint8_t irq_readout[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, + 0x00, 0x10, 0x18, 0x20, 0x00, 0x28, 0x30, 0x00 }; if (lpt_irq > 15) lpt_irq = 0xff; @@ -137,6 +139,9 @@ ali5123_lpt_handler(ali5123_t *dev) } lpt_port_irq(dev->lpt, lpt_irq); lpt_port_dma(dev->lpt, lpt_dma); + + lpt_set_cnfgb_readout(dev->lpt, ((lpt_irq > 15) ? 0x00 : irq_readout[lpt_irq]) | + ((lpt_dma >= 4) ? 0x00 : lpt_dma)); } static void diff --git a/src/sio/sio_fdc37c669.c b/src/sio/sio_fdc37c669.c index 6a8c73563..57ca37619 100644 --- a/src/sio/sio_fdc37c669.c +++ b/src/sio/sio_fdc37c669.c @@ -33,6 +33,7 @@ #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/sio.h> +#include "cpu.h" typedef struct fdc37c669_t { uint8_t id; @@ -410,6 +411,7 @@ fdc37c669_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, (next_id << 1) + 2); dev->lpt = device_add_inst(&lpt_port_device, next_id + 1); + lpt_set_cnfgb_readout(dev->lpt, 0x00); io_sethandler((info->local & FDC37C6XX_370) ? FDC_SECONDARY_ADDR : (next_id ? FDC_SECONDARY_ADDR : FDC_PRIMARY_ADDR), 0x0002, fdc37c669_read, NULL, NULL, fdc37c669_write, NULL, NULL, dev); diff --git a/src/sio/sio_fdc37c67x.c b/src/sio/sio_fdc37c67x.c index 97e423b17..9b9e40903 100644 --- a/src/sio/sio_fdc37c67x.c +++ b/src/sio/sio_fdc37c67x.c @@ -172,13 +172,15 @@ fdc37c67x_fdc_handler(fdc37c67x_t *dev) static void fdc37c67x_lpt_handler(fdc37c67x_t *dev) { - uint16_t ld_port = 0x0000; - uint16_t mask = 0xfffc; - uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); - uint8_t local_enable = !!dev->ld_regs[3][0x30]; - uint8_t lpt_irq = dev->ld_regs[3][0x70]; - uint8_t lpt_dma = dev->ld_regs[3][0x74]; - uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint16_t ld_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); + uint8_t local_enable = !!dev->ld_regs[3][0x30]; + uint8_t lpt_irq = dev->ld_regs[3][0x70]; + uint8_t lpt_dma = dev->ld_regs[3][0x74]; + uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint8_t irq_readout[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, + 0x00, 0x10, 0x18, 0x20, 0x00, 0x00, 0x28, 0x30 }; if (lpt_irq > 15) lpt_irq = 0xff; @@ -225,6 +227,9 @@ fdc37c67x_lpt_handler(fdc37c67x_t *dev) } lpt_port_irq(dev->lpt, lpt_irq); lpt_port_dma(dev->lpt, lpt_dma); + + lpt_set_cnfgb_readout(dev->lpt, ((lpt_irq > 15) ? 0x00 : irq_readout[lpt_irq]) | + ((lpt_dma >= 4) ? 0x00 : lpt_dma)); } static void diff --git a/src/sio/sio_fdc37c6xx.c b/src/sio/sio_fdc37c6xx.c index 5d48a73a6..64fa8d6c7 100644 --- a/src/sio/sio_fdc37c6xx.c +++ b/src/sio/sio_fdc37c6xx.c @@ -30,6 +30,7 @@ #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/sio.h> +#include "cpu.h" typedef struct fdc37c6xx_t { uint8_t max_reg; @@ -225,7 +226,7 @@ fdc37c6xx_write(uint16_t port, uint8_t val, void *priv) fdc_handler(dev); break; case 0x01: - if (valxor & 0x03) + if (valxor & 0x0b) lpt_handler(dev); if (valxor & 0x60) { set_com34_addr(dev); @@ -259,6 +260,10 @@ fdc37c6xx_write(uint16_t port, uint8_t val, void *priv) if (valxor & 0x20) fdc_set_swap(dev->fdc, (dev->regs[5] & 0x20) >> 5); break; + case 0x0a: + if (valxor) + lpt_handler(dev); + break; default: break; @@ -374,6 +379,7 @@ fdc37c6xx_init(const device_t *info) } dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfgb_readout(dev->lpt, 0x00); if (info->local & FDC37C6XX_370) io_sethandler(FDC_SECONDARY_ADDR, 0x0002, diff --git a/src/sio/sio_fdc37c93x.c b/src/sio/sio_fdc37c93x.c index 85e029fad..d5cd72c67 100644 --- a/src/sio/sio_fdc37c93x.c +++ b/src/sio/sio_fdc37c93x.c @@ -792,11 +792,13 @@ fdc37c93x_lpt_handler(fdc37c93x_t *dev) { uint16_t ld_port = 0x0000; uint16_t mask = 0xfffc; - uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); - uint8_t local_enable = !!dev->ld_regs[3][0x30]; - uint8_t lpt_irq = dev->ld_regs[3][0x70]; - uint8_t lpt_dma = dev->ld_regs[3][0x74]; - uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); + uint8_t local_enable = !!dev->ld_regs[3][0x30]; + uint8_t lpt_irq = dev->ld_regs[3][0x70]; + uint8_t lpt_dma = dev->ld_regs[3][0x74]; + uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint8_t irq_readout[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, + 0x00, 0x10, 0x18, 0x20, 0x00, 0x00, 0x28, 0x30 }; if (lpt_irq > 15) lpt_irq = 0xff; @@ -843,6 +845,9 @@ fdc37c93x_lpt_handler(fdc37c93x_t *dev) } lpt_port_irq(dev->lpt, lpt_irq); lpt_port_dma(dev->lpt, lpt_dma); + + lpt_set_cnfgb_readout(dev->lpt, ((lpt_irq > 15) ? 0x00 : irq_readout[lpt_irq]) | + ((lpt_dma >= 4) ? 0x00 : lpt_dma)); } static void diff --git a/src/sio/sio_fdc37m60x.c b/src/sio/sio_fdc37m60x.c index 164db5eac..1ffa0f16d 100644 --- a/src/sio/sio_fdc37m60x.c +++ b/src/sio/sio_fdc37m60x.c @@ -123,13 +123,15 @@ fdc37m60x_fdc_handler(fdc37m60x_t *dev) static void fdc37m60x_lpt_handler(fdc37m60x_t *dev) { - uint16_t ld_port = 0x0000; - uint16_t mask = 0xfffc; - uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); - uint8_t local_enable = !!dev->ld_regs[3][0x30]; - uint8_t lpt_irq = dev->ld_regs[3][0x70]; - uint8_t lpt_dma = dev->ld_regs[3][0x74]; - uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint16_t ld_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); + uint8_t local_enable = !!dev->ld_regs[3][0x30]; + uint8_t lpt_irq = dev->ld_regs[3][0x70]; + uint8_t lpt_dma = dev->ld_regs[3][0x74]; + uint8_t lpt_mode = dev->ld_regs[3][0xf0] & 0x07; + uint8_t irq_readout[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, + 0x00, 0x10, 0x18, 0x20, 0x00, 0x00, 0x28, 0x30 }; if (lpt_irq > 15) lpt_irq = 0xff; @@ -176,6 +178,9 @@ fdc37m60x_lpt_handler(fdc37m60x_t *dev) } lpt_port_irq(dev->lpt, lpt_irq); lpt_port_dma(dev->lpt, lpt_dma); + + lpt_set_cnfgb_readout(dev->lpt, ((lpt_irq > 15) ? 0x00 : irq_readout[lpt_irq]) | + ((lpt_dma >= 4) ? 0x00 : lpt_dma)); } static void diff --git a/src/sio/sio_gm82c803ab.c b/src/sio/sio_gm82c803ab.c index 8f7749494..bf74dc703 100644 --- a/src/sio/sio_gm82c803ab.c +++ b/src/sio/sio_gm82c803ab.c @@ -348,6 +348,7 @@ gm82c803ab_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfgb_readout(dev->lpt, 0x00); io_sethandler(0x0398, 0x0002, gm82c803ab_read, NULL, NULL, gm82c803ab_write, NULL, NULL, dev); diff --git a/src/sio/sio_gm82c803c.c b/src/sio/sio_gm82c803c.c index 91c03b369..e9787fa39 100644 --- a/src/sio/sio_gm82c803c.c +++ b/src/sio/sio_gm82c803c.c @@ -345,6 +345,7 @@ gm82c803c_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfgb_readout(dev->lpt, 0x00); io_sethandler(0x0398, 0x0002, gm82c803c_read, NULL, NULL, gm82c803c_write, NULL, NULL, dev); diff --git a/src/sio/sio_it86x1f.c b/src/sio/sio_it86x1f.c index 5d11610ad..4c97f481a 100644 --- a/src/sio/sio_it86x1f.c +++ b/src/sio/sio_it86x1f.c @@ -842,6 +842,8 @@ it86x1f_init(UNUSED(const device_t *info)) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + + lpt_set_cnfgb_readout(dev->lpt, 0x00); lpt_set_ext(dev->lpt, 1); dev->gameport = gameport_add(&gameport_sio_device); diff --git a/src/sio/sio_pc87306.c b/src/sio/sio_pc87306.c index 6cda5bbd1..6401a5dd1 100644 --- a/src/sio/sio_pc87306.c +++ b/src/sio/sio_pc87306.c @@ -123,8 +123,9 @@ lpt_handler(pc87306_t *dev) { int temp; uint16_t lptba; - uint16_t lpt_port = LPT1_ADDR; - uint8_t lpt_irq = LPT2_IRQ; + uint16_t lpt_port = LPT1_ADDR; + uint8_t lpt_irq = LPT2_IRQ; + uint8_t cnfgb_readout = 0x08; lpt_port_remove(dev->lpt); @@ -159,6 +160,10 @@ lpt_handler(pc87306_t *dev) if (dev->regs[0x1b] & 0x10) lpt_irq = (dev->regs[0x1b] & 0x20) ? 7 : 5; + cnfgb_readout |= (lpt_irq == 5) ? 0x30 : 0x00; + cnfgb_readout |= (dev->regs[0x18] & 0x06) >> 1; + + lpt_set_cnfgb_readout(dev->lpt, cnfgb_readout); lpt_set_ext(dev->lpt, !!(dev->regs[0x02] & 0x80)); lpt_set_epp(dev->lpt, !!(dev->regs[0x04] & 0x01)); @@ -168,6 +173,9 @@ lpt_handler(pc87306_t *dev) lpt_port_setup(dev->lpt, lpt_port); lpt_port_irq(dev->lpt, lpt_irq); + + if ((dev->regs[0x18] & 0x06) != 0x00) + lpt_port_dma(dev->lpt, (dev->regs[0x18] & 0x08) ? 3 : 1); } static void @@ -382,7 +390,7 @@ pc87306_write(uint16_t port, uint8_t val, void *priv) pc87306_gpio_handler(dev); break; case 0x18: - if (valxor & (0x06)) { + if (valxor & (0x0e)) { lpt_port_remove(dev->lpt); if ((dev->regs[0x00] & 0x01) && !(dev->regs[0x02] & 0x01)) lpt_handler(dev); @@ -430,15 +438,21 @@ pc87306_read(uint16_t port, void *priv) index = (port & 1) ? 0 : 1; - dev->tries = 0; - - if (index) + if (dev->tries == 0xff) { + ret = 0x88; + dev->tries = 0xfe; + } else if (dev->tries == 0xfe) { + ret = 0x00; + dev->tries = 0; + } else if (index) { ret = dev->cur_reg & 0x1f; - else { + dev->tries = 0; + } else { if (dev->cur_reg == 8) ret = 0x70; else if (dev->cur_reg < 28) ret = dev->regs[dev->cur_reg]; + dev->tries = 0; } return ret; @@ -451,6 +465,8 @@ pc87306_reset_common(void *priv) memset(dev->regs, 0, 29); + dev->tries = 0xff; + dev->regs[0x00] = 0x0B; dev->regs[0x01] = 0x01; dev->regs[0x03] = 0x01; diff --git a/src/sio/sio_pc873xx.c b/src/sio/sio_pc873xx.c index 72c156426..05f5d9be2 100644 --- a/src/sio/sio_pc873xx.c +++ b/src/sio/sio_pc873xx.c @@ -85,6 +85,7 @@ lpt_handler(pc873xx_t *dev) break; } + lpt_set_cnfgb_readout(dev->lpt, (lpt_irq == 5) ? 0x38 : 0x08); lpt_set_ext(dev->lpt, !!(dev->regs[0x02] & 0x80)); if (dev->is_332) { @@ -363,6 +364,7 @@ pc873xx_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfgb_readout(dev->lpt, 0x08); dev->is_332 = !!(info->local & PC87332); dev->max_reg = dev->is_332 ? 0x08 : 0x02; diff --git a/src/sio/sio_um8669f.c b/src/sio/sio_um8669f.c index c42cdd1b6..f0460ada9 100644 --- a/src/sio/sio_um8669f.c +++ b/src/sio/sio_um8669f.c @@ -8,8 +8,6 @@ * * Emulation of the UMC UM8669F Super I/O chip. * - * - * * Authors: Sarah Walker, * Miran Grca, * RichardG, @@ -349,6 +347,8 @@ um8669f_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + + lpt_set_cnfgb_readout(dev->lpt, 0x00); lpt_set_ext(dev->lpt, 1); dev->ide = (uint8_t) (info->local - 1); diff --git a/src/sio/sio_um866x.c b/src/sio/sio_um866x.c index a90bee64d..bc1127a8b 100644 --- a/src/sio/sio_um866x.c +++ b/src/sio/sio_um866x.c @@ -294,6 +294,7 @@ um866x_init(UNUSED(const device_t *info)) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfgb_readout(dev->lpt, 0x00); dev->ide = info->local & 0xff; if (dev->ide < IDE_BUS_MAX) diff --git a/src/sio/sio_w837x7.c b/src/sio/sio_w837x7.c index e670d8454..4044ab673 100644 --- a/src/sio/sio_w837x7.c +++ b/src/sio/sio_w837x7.c @@ -147,16 +147,16 @@ w837x7_lpt_handler(w837x7_t *dev) uint8_t lpt_mode = (dev->regs[0x09] & 0x80) | (dev->regs[0x00] & 0x0c); switch (ptras) { - case 0x01: + case 0x00: lpt_port = LPT_MDA_ADDR; lpt_irq = LPT_MDA_IRQ; break; - case 0x02: - lpt_port = LPT1_ADDR; + case 0x01: + lpt_port = LPT2_ADDR; lpt_irq = LPT1_IRQ /*LPT2_IRQ*/; break; - case 0x03: - lpt_port = LPT2_ADDR; + case 0x02: + lpt_port = LPT1_ADDR; lpt_irq = LPT1_IRQ /*LPT2_IRQ*/; break; @@ -449,6 +449,7 @@ w837x7_init(const device_t *info) dev->uart[1] = device_add_inst(&ns16550_device, 2); dev->lpt = device_add_inst(&lpt_port_device, 1); + lpt_set_cnfgb_readout(dev->lpt, 0x3f); dev->gameport = gameport_add(&gameport_sio_1io_device); diff --git a/src/sio/sio_w83877.c b/src/sio/sio_w83877.c index 419abb9f6..6ca0a019b 100644 --- a/src/sio/sio_w83877.c +++ b/src/sio/sio_w83877.c @@ -201,6 +201,8 @@ w83877_lpt_handler(w83877_t *dev) lpt_port_irq(dev->lpt, lpt_irq); lpt_port_dma(dev->lpt, dev->dma_map[dev->regs[0x26] & 0x03]); + + lpt_set_cnfgb_readout(dev->lpt, ((dev->regs[0x26] & 0xe0) >> 2) | 0x07); } static void diff --git a/src/sio/sio_w83977.c b/src/sio/sio_w83977.c index 62d456aff..0ac531c9b 100644 --- a/src/sio/sio_w83977.c +++ b/src/sio/sio_w83977.c @@ -383,13 +383,15 @@ w83977_fdc_handler(w83977_t *dev) static void w83977_lpt_handler(w83977_t *dev) { - uint16_t ld_port = 0x0000; - uint16_t mask = 0xfffc; - uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); - uint8_t local_enable = !!dev->ld_regs[1][0x30]; - uint8_t lpt_irq = dev->ld_regs[1][0x70]; - uint8_t lpt_dma = dev->ld_regs[1][0x74]; - uint8_t lpt_mode = dev->ld_regs[1][0xf0] & 0x07; + uint16_t ld_port = 0x0000; + uint16_t mask = 0xfffc; + uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); + uint8_t local_enable = !!dev->ld_regs[1][0x30]; + uint8_t lpt_irq = dev->ld_regs[1][0x70]; + uint8_t lpt_dma = dev->ld_regs[1][0x74]; + uint8_t lpt_mode = dev->ld_regs[1][0xf0] & 0x07; + uint8_t irq_readout[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, + 0x00, 0x10, 0x18, 0x20, 0x00, 0x00, 0x28, 0x30 }; if (lpt_irq > 15) lpt_irq = 0xff; @@ -436,6 +438,8 @@ w83977_lpt_handler(w83977_t *dev) } lpt_port_irq(dev->lpt, lpt_irq); lpt_port_dma(dev->lpt, lpt_dma); + + lpt_set_cnfgb_readout(dev->lpt, ((lpt_irq > 15) ? 0x00 : irq_readout[lpt_irq]) | 0x07); } static void From 87abb1c2c44fa0d051e7a109e66a9f99dcb1fa65 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 12 Aug 2025 21:06:06 +0200 Subject: [PATCH 27/29] InPort Mouse: Fix button deltas in data interrupt mode, fixes #5942. --- src/device/mouse_bus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/device/mouse_bus.c b/src/device/mouse_bus.c index c81bc6aba..dd71ef11e 100644 --- a/src/device/mouse_bus.c +++ b/src/device/mouse_bus.c @@ -508,7 +508,7 @@ bm_poll(void *priv) dev->mouse_buttons |= 0x40; /* Set bits 3-5 according to button state changes. */ - xor = ((dev->current_b ^ mouse_get_buttons_ex()) & 0x07) << 3; + xor = ((dev->current_b ^ dev->mouse_buttons) & 0x07) << 3; dev->mouse_buttons |= xor; } From b81571d5eb9a409e2fffa2e62bbdc360dff56c1c Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 12 Aug 2025 21:51:59 +0200 Subject: [PATCH 28/29] VIA VT82C496G: Add a forgotten flushmmucache_nopc(). --- src/chipset/via_vt82c49x.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/chipset/via_vt82c49x.c b/src/chipset/via_vt82c49x.c index f8a5bb593..3a7bbfdda 100644 --- a/src/chipset/via_vt82c49x.c +++ b/src/chipset/via_vt82c49x.c @@ -193,6 +193,8 @@ vt82c49x_recalc(vt82c49x_t *dev) default: break; } + + flushmmucache_nopc(); } static void From 59e221c4cbad09eb1f33b21dd7a896fc70ab3a70 Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 12 Aug 2025 21:52:50 +0200 Subject: [PATCH 29/29] FIC 486 VIP-IO2: Give it the correct Flash chip and fix a bug at W837x7 reset. --- src/machine/m_at_386dx_486.c | 2 +- src/sio/sio_w837x7.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 323b80365..812e93c79 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -1926,7 +1926,7 @@ machine_at_486vipio2_init(const machine_t *model) device_add(&via_vt82c505_device); device_add_params(&w837x7_device, (void *) (W83787F | W837X7_KEY_89)); device_add(&kbc_ps2_ami_pci_device); - device_add(&sst_flash_29ee010_device); + device_add(&winbond_flash_w29c010_device); return ret; } diff --git a/src/sio/sio_w837x7.c b/src/sio/sio_w837x7.c index 4044ab673..c1ff935ec 100644 --- a/src/sio/sio_w837x7.c +++ b/src/sio/sio_w837x7.c @@ -416,7 +416,7 @@ w837x7_reset(w837x7_t *dev) w837x7_lpt_handler(dev); w837x7_serial_handler(dev, 0); - w837x7_serial_handler(dev, 0); + w837x7_serial_handler(dev, 1); w837x7_gameport_handler(dev); w837x7_ide_handler(dev);